/**********************************************************************
	fzrt_api_type.h
	Basic types used for FZRT and public API functions

  			  COPYRIGHT (C) 2001.  All Rights Reserved.
		 auto*des*sys, Inc., Columbus, Ohio, USA.

**********************************************************************/
#ifndef __FZRT_API_TYPE_H
#define __FZRT_API_TYPE_H

#ifdef  __cplusplus
extern "C" {
#endif /* __cplusplus */


#include "fzrt_platform.h"
#include "fzrt_extern.h"

/* @doc EXTERNAL FZRT */

#if (__PLATFORM__ == WINDOWS)
typedef unsigned long 			fzrt_unsigned_int;
typedef long					fzrt_int;
typedef long long				fzrt_int64;
typedef struct fzrt_frep_td*	fzrt_frep_ptr;
#else
typedef unsigned int 			fzrt_unsigned_int;
typedef int						fzrt_int;
typedef long					fzrt_int64;
typedef struct fzrt_frep_td*	fzrt_frep_ptr;
#endif

/******************************************************************************************************

	@def	
	
	@desc	Sets a bit to 1.
			This macro will set the Nth bit of the specified integer.
			The 0th bit is the least significant bit.

	@parm	lvalue | val | <in_out> | integer variable whose bit is to be set.
	@parm	integer | n | <in> | bit position to set.

	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
#define	FZ_SETBIT(val,n)		((val) = (val) | (((fzrt_int)1) << (n)))						  		/* SET BIT TO 1 */

/******************************************************************************************************

	@def	

	@desc	Sets a bit to 0.
			This macro will clear the nth bit of an integer value.
			The 0th bit is the least significant bit.

			
	@parm	lvalue | val | <in_out> | integer variable whose bit is to be clear.
	@parm	integer | n | <in> | bit position to clear.

	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
#define FZ_CLRBIT(val,n)		(val) = ~(~(val) | (((fzrt_int)1) << (n)))					   		/* SET BIT TO 0 */

/******************************************************************************************************

	@def	

	@desc	Check value of a bit.
			This macros test if the nth bit of an integer is set. 
			The 0th bit is the least significant bit.
			
	@parm	lvalue | val | <in_out> | integer variable whose bit is to be checked.
	@parm	integer | n | <in> | bit position to check.

  @avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
#define FZ_CHKBIT(val,n)		(((val) >> (n)) & ((fzrt_int)1))							   		/* CHECK VALUE OF BIT */

/******************************************************************************************************

	@def	
	
	@desc	Assigns a bit to 0 or 1.
			This macro will set the nth bit to 0 or 1. 
			The 0th bit is the least significant bit.
			The other bits are left unchanged.

	@parm	lvalue | val | <in_out> | integer variable whose bit is to be set.
	@parm	integer | n | <in> | bit position to set.
	@parm	integer | i | <in> | value to set 0 or 1.
		
	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
#define FZ_ASGBIT(val,n,i) 	(((i) == 0) ? (FZ_CLRBIT((val),(n))) : (FZ_SETBIT((val),(n)))) 		/* SET BIT TO 0/1 */

/******************************************************************************************************

	@def	
	
	@desc	Toggles the nth bit of an integer value.
			The 0th bit is the least significant bit.

	@parm	lvalue | val | <in_out> | integer variable whose bit is to be set.
	@parm	integer | n | <in> | bit position to toggle.
			
	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
#define FZ_FLPBIT(val,n) 		(FZ_CHKBIT((val),(n)) ? (FZ_CLRBIT((val),(n))) : (FZ_SETBIT((val),(n)))) /* FLIP/TOGGLE BIT */ 

/******************************************************************************************************

	@def	
	
	@desc	Creates a fzrt_int mask from a bit position.
			This macro will create a mask with the Nth bit set.
			The 0th bit is the least significant bit.
			
	@parm	integer | n | <in> | bit position to set.

	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
#define FZ_BIT2MASK(n)			(((fzrt_int)1)<<(n))														/* CREATE LONG MASK FROM SINGLE BIT */


#if (__PLATFORM__ == WINDOWS)
/******************************************************************************************************

	@type	

	@desc	Boolean data type.
			FALSE is zero.
			TRUE is non-zero.
			NOTE: the size of this type is system dependent. It should not be stored on disk, or used in
			structures that are stored or sent across the network. If you need to store boolean values, you
			should define your own boolean type that is independent of the operating environment.
			
	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
typedef int			 	fzrt_boolean;	/* Matches Windows BOOL type */

#elif (__PLATFORM__ == MACINTOSH)

typedef unsigned char	fzrt_boolean;	/* Matches Macintosh fzrt_boolean type */

#endif /* __PLATFORM__ */

/******************************************************************************************************

	@type	

  @desc		This type is a single unsigned byte.

	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
typedef unsigned char	fzrt_byte;
/******************************************************************************************************

	@type	

	@desc	This type is a single signed byte.
	
	  
	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
typedef char 			fzrt_signed_byte;
/******************************************************************************************************

	@type	
	
	 @desc		This type is a pointer to an signed byte (char).

	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
typedef char 			*fzrt_ptr;


/******************************************************************************************************

	@type	

	@desc	Macintosh OS file Type. This represents a unique type. This is generally displayed as
			a 4-character value, e.g. 'TEXT'. It is generally used for Macintosh file types, and resource
			types.

	@avail	5.0.0.0

	@toc	fzrt
	  
*******************************************************************************************************/
typedef fzrt_unsigned_int	fzrt_ostype;
/******************************************************************************************************

	@type	

	@desc	This type is used to define a size quantity, such as the size of memory.

	@avail	5.0.0.0

	@toc	fzrt
	  
*******************************************************************************************************/
typedef fzrt_int			fzrt_size;

/******************************************************************************************************

	@type	 

	@desc	Error code. This represents an operating system error code. This is not the same as fzrt_error_td.
			The range of this type is the same as a signed short integer.

	@avail	5.0.0.0

	@see	fzrt_error_td

	@toc	fzrt

*******************************************************************************************************/
typedef short			fzrt_oserr;

/******************************************************************************************************

	@type	 

	@desc	Unicode character. This represents a character in the UTF-16 encoding. 

	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
typedef unsigned short			fzrt_uni_char;


#if !defined(__MACTYPES__) && ((__PLATFORM__ == WINDOWS) || ((__PLATFORM__ == MACINTOSH) && !defined(__FZRT__)))
	#ifndef __cplusplus
#define	false 0
#define	true  1
	#endif
#endif

#ifndef TRUE
	#define TRUE true
#endif

#ifndef FALSE
	#define FALSE false 
#endif



/******************************************************************************************************

	@def	An error id which indicates that no error occurred.
			
	@desc	No error occurred. This is a special error id that signifies that no error occurred.

	@avail	5.0.0.0

	@toc	fzrt

*******************************************************************************************************/
#define 	FZRT_NOERR			0	

/******************************************************************************************************

	@def	An error id which indicates that the user canceled the operation.
			
	@desc	Canceled error. This is a special error id that signifies that the user canceled the operation.

	@avail	5.0.0.0
	
	@toc	fzrt_base
	  
*******************************************************************************************************/
#define 	FZRT_USER_CANCEL	0x7fff		/// 911 review this (now out of sync w/app)	

/******************************************************************************************************

	@enum	

	@desc	formZ error severity bit ids.
			The bits used to define the error severity masks
		
	@avail	5.0.0.0

	@see	fzrt_error_severity_enum, <auto>

	@toc	fzrt_base

*******************************************************************************************************/
typedef enum fzrt_error_severity_bits_enum
{
	FZRT_ERROR_SEVERITY_FATAL_BIT		= 1,		/* @emem bit for super fatal error, abort program  */
	FZRT_ERROR_SEVERITY_ERROR_BIT		= 2,		/* @emem bit for fatal error, something could not be completed */
	FZRT_ERROR_SEVERITY_CANCEL_BIT		= 3,		/* @emem bit for operation canceled, user interrupted */
	FZRT_ERROR_SEVERITY_WARNING_BIT		= 4,		/* @emem bit for warning, something unexpected but manageable */
	FZRT_ERROR_SEVERITY_INFO_BIT		= 5,		/* @emem bit for info, let user know what happened that was different than expected */
	FZRT_ERROR_SEVERITY_DEBUG_BIT		= 6			/* @emem bit for debug, only an error for debug builds */

} fzrt_error_severity_bits_enum;


/******************************************************************************************************

	@enum	

	@desc	formZ error severities.
			The severity of an error is defined when the error is set with fzrt_error_set.
			These values can be combined for fzrt_error_exists function. 
			
	@avail	5.0.0.0

	@see	fzrt_error_exists, fzrt_error_set, <auto>
	
	@toc	fzrt_base

*******************************************************************************************************/
typedef enum fzrt_error_severity_enum
{
	FZRT_ERROR_SEVERITY_FATAL			= (1 << FZRT_ERROR_SEVERITY_FATAL_BIT	),		/* @emem super fatal error, abort program  */
	FZRT_ERROR_SEVERITY_ERROR			= (1 << FZRT_ERROR_SEVERITY_ERROR_BIT	),		/* @emem fatal error, something could not be completed */
	FZRT_ERROR_SEVERITY_CANCEL			= (1 << FZRT_ERROR_SEVERITY_CANCEL_BIT	),		/* @emem operation canceled, user interrupted */
	FZRT_ERROR_SEVERITY_WARNING			= (1 << FZRT_ERROR_SEVERITY_WARNING_BIT	),		/* @emem warning, something unexpected but manageable */
	FZRT_ERROR_SEVERITY_INFO			= (1 << FZRT_ERROR_SEVERITY_INFO_BIT	),		/* @emem info, let user know what happened that was different than expected */
	FZRT_ERROR_SEVERITY_DEBUG			= (1 << FZRT_ERROR_SEVERITY_DEBUG_BIT	),		/* @emem debug, only an error for debug builds */
	
	FZRT_ERROR_SEVERITY_ANY				= 0xFFFFFFFF									/* @emem mask for any error in call to fzrt_error_exists */

} fzrt_error_severity_enum;

/******************************************************************************************************

	@enum
	
	@desc	formZ error context bit ids.
			These bits are used to defined the error context masks
	
	@avail	5.0.0.0

	@see	fzrt_error_context_enum

	@toc	fzrt_base

*******************************************************************************************************/
typedef enum fzrt_error_context_bits_enum
{
	FZRT_ERROR_CONTEXT_OS_BIT				= 1,		/* @emem bit for indicating err is an operating system error */
	FZRT_ERROR_CONTEXT_ANSI_BIT				= 2,		/* @emem bit for indicating err is an fzrt error */
	FZRT_ERROR_CONTEXT_FZRT_BIT				= 3,		/* @emem bit for indicating err is an fzrt error */
	FZRT_ERROR_CONTEXT_APP_BIT				= 4,		/* @emem bit for indicating err is an application error */
	FZRT_ERROR_CONTEXT_PLUGIN_BIT			= 5			/* @emem bit for indicating err is an plugin error */

} fzrt_error_context_bits_enum;

/******************************************************************************************************

	@enum	
	
	@desc	formZ error contexts.
			The error context identifies which part of the application defines a particular error.
			Each context should have one or more functions (fzrt_context_str_func) which can be used
			to get an error string.
			
	@avail	5.0.0.0

	@see	<auto>
	
	@toc	fzrt_base

*******************************************************************************************************/
typedef enum fzrt_error_context_enum
{
	FZRT_ERROR_CONTEXT_OS					= (1 << FZRT_ERROR_CONTEXT_OS_BIT		),		/* @emem err is an operating system error */
	FZRT_ERROR_CONTEXT_ANSI					= (1 << FZRT_ERROR_CONTEXT_ANSI_BIT		),		/* @emem err is an fzrt error */
	FZRT_ERROR_CONTEXT_FZRT					= (1 << FZRT_ERROR_CONTEXT_FZRT_BIT		),		/* @emem err is an fzrt error */
	FZRT_ERROR_CONTEXT_APP					= (1 << FZRT_ERROR_CONTEXT_APP_BIT		),		/* @emem err is an application error */
	FZRT_ERROR_CONTEXT_PLUGIN				= (1 << FZRT_ERROR_CONTEXT_PLUGIN_BIT	),		/* @emem err is an plugin error */
	
	FZRT_ERROR_CONTEXT_ANY					= 0xFFFFFFFF									/* @emem mask to check for any context errors in fzrt_error_exists */

} fzrt_error_context_enum;

/********************************************************************************************************

	@func	

	@desc	Gets a string for an error code.
			This is a callback function that returns the string associated with the error code in the associated
			context. Each plugin is considered a unique context Any error set with the associated plugin
			context id, should return the appropriate string.
 
 	@return	TRUE on success.<nl>
			FALSE	- otherwise.
 
	@avail	5.0.0.0

	@see	fzpl_plugin_register, fzrt_error_set, fzrt_error_get_info, fzrt_error_get_string

	@toc	fzrt_base

*********************************************************************************************************/
typedef fzrt_boolean	 (FZRT_SPEC *fzrt_context_str_func)(
							 fzrt_int err,				/* @parm <in> the error number in the context */
							 char *str,				/* @parm <out> pointer to memory to receive the error string */
							 short str_len			/* @parm <in> length of buffer, str */
							 );

/******************************************************************************************************

	@type	

	@desc	formZ error type. 
			Represents the id of an error that occurred.  Each instance of an error has a unique error id.
			Functions are provided to query information	about the error id, including the context and severity. 
			FZRT_NOERR is a special ID that indicates that no error occurred.
			
	@avail	5.0.0.0

	@see	fzrt_error_set, fzrt_error_get_info, FZRT_NOERR

	@toc	fzrt_base

*******************************************************************************************************/
typedef fzrt_int fzrt_error_td;				/* MJB 10/07/03 NEEDS TO BE LONG FOR SCRIPTS TO WORK ON WINDOWS */

/******************************************************************************************************

	@def	

	@desc	Maximum length of a file extension
		This is the maximum length of a filename extension used for a file dialog filter.
			
	@avail	5.0.0.0

	@see	<auto>, fzrt_file_dlg_filter_set
	@toc	fzrt_file

*******************************************************************************************************/
#define  FZRT_STDF_MAX_EXT	8


/******************************************************************************************************

	@enum	

	@desc	file character enumerators
		This is the list of enumerators to get the file system defined special characters.
			
	@avail	5.0.0.0

	@see <auto>, fzrt_file_get_char
	
	@toc	fzrt_file

*******************************************************************************************************/
typedef enum fzrt_file_char_enum
{
	FZRT_DIR_SEP = 1,		/* @emem - return the file system characters used to separate folders in a full pathname. */
	FZRT_DIR_PARENT = 2	/* @emem - return the file system characters used to denote the parent folder. This is the folder one level up in the folder hierarchy. */
} fzrt_file_char_enum;


/******************************************************************************************************

	@enum	
	
	@desc	Values for result parameter from standard file dialogs 
			
	@avail	5.0.0.0

	@see	fz_fuim_script_run_dialog, fz_fuim_script_run_dialog_windex, fz_fuim_alrt_std_confirm
	
	@toc	fzrt_file

*******************************************************************************************************/
typedef enum fzrt_std_enum
{
	FZRT_STD_OK			= 1,	/* @emem - OK button was pressed in Open/Save dialog */
	FZRT_STD_CANCEL		= 2,	/* @emem - Cancel button was pressed in Open/Save dialog */
	FZRT_STD_ERROR		= 3		/* @emem - Error occurred in file dialog */
}
fzrt_std_enum;

/************************************************************************
	@type	

	@desc	Pen pattern type. This represents an 8x8 pattern used by a pen.

	@avail	5.0.0.0

	@toc	fzrt_graf
************************************************************************/
typedef struct fzrt_pen_pattern_td * fzrt_pen_pattern_ptr;

/******************************************************************************************************

	@enum	 
	
	@desc	Standard Pen Patterns.
			These are the predefined pen patterns available from the runtime. 
			The pen pattern may be obtained by a call to fzrt_get_std_penpat
			
	@avail	5.0.0.0
	
	@see	fzrt_pen_mode

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_std_pen_pat_enum
{
	FZRT_PPAT_BLACK = 0,			/* @emem  A standard pen pattern of all black pixels */
	FZRT_PPAT_GRAY,					/* @emem  A standard pen pattern of alternating black and white pixels */
	FZRT_PPAT_WHITE				/* @emem  A standard pen pattern of all white pixels*/
} fzrt_std_pen_pat_enum;

/******************************************************************************************************

	@enum	
	
	@desc	Pattern Transfer modes.
			Constants to set the current pen mode
			
	@avail	5.0.0.0
	
	@see	fzrt_pen_mode

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_pattern_mode_enum 
{
	FZRT_PATCOPY			= 8,			/* @emem Where the pattern pixel is black, applies foreground color to the destination pixel; where the pattern pixel is white, applies background color to the destination pixel. */
	FZRT_PATOR,								/* @emem Where the pattern pixel is black, inverts the destination pixel; where the pattern pixel is white, leaves the destination pixel unaltered.  */
	FZRT_PATXOR,							/* @emem Where the pattern pixel is black, inverts the destination pixel; where the pattern pixel is white, leaves the destination pixel unaltered.  */
	FZRT_PATBIC,							/* @emem Where the pattern pixel is black, applies the background color to destination pixel; where the pattern pixel is white, leaves the destination pixel unaltered.  */
	FZRT_NOTPATCOPY,						/* @emem Where the pattern pixel is black, applies background color to destination pixel; where the pattern pixel is white, applies foreground color to the destination pixel  */
	FZRT_NOTPATOR,							/* @emem Where the pattern pixel is black, leaves the destination pixel unaltered; where the pattern pixel is white, applies foreground color to the destination pixel  */
	FZRT_NOTPATXOR,							/* @emem Where the pattern pixel is black, leaves the destination pixel unaltered; where the pattern pixel is white, inverts the destination pixel  */
	FZRT_NOTPATBIC							/* @emem Where the pattern pixel is black, leaves the destination pixel unaltered; where the pattern pixel is white, applies background color to the destination pixel.  */
} fzrt_pattern_mode_enum;

/******************************************************************************************************

	@enum	
	
	@desc	Source transfer modes.
			Constants to set the text and copybits transfer modes
			
	@avail	5.0.0.0
	
	@see	fzrt_text_mode, fzrt_copy_bits

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_source_mode_enum
{	
	FZRT_SRCCOPY = 0,					/* @emem  For basic graphics ports, force the destination pixel black where the source pixel is black; where the source pixel is white, force the destination pixel white.
														For color graphics ports, determines how close the color of the source pixel is to black, and assigns this relative amount of foreground color to the destination pixel. Determines how close the color of the source pixel is to white, and assigns this relative amount of background color to the destination pixel.*/
	FZRT_SRCOR,							/* @emem  For basic graphics ports, forces the destination pixel black if the source pixel is black; where the source pixel is white, leaves the destination pixel unaltered.
																							For color graphics ports, determines how close the color of the source pixel is to black, and assigns this relative amount of foreground color to the destination pixel.*/
	FZRT_SRCXOR,						/* @emem  For basic and color graphics ports, inverts destination pixel where the source pixel is black. For a basic graphics port, where the source pixel is white, leaves the destination pixel unaltered. 
												  For a color graphics port, for a colored destination pixel, uses the complement of its color if the pixel is direct, or inverts its index if the pixel is indexed.*/
	FZRT_SRCBIC,						/* @emem  For a basic graphics port, forces destination pixel white where source pixel is black; where source pixel is white, leaves the destination pixel unaltered.
																					For a color graphics port, determines how close the color of the source pixel is to black, and assigns this relative amount of background color to the destination pixel.*/
	FZRT_NOTSRCCOPY,					/* @emem  For a basic graphics port, forces the destination pixel white where the source pixel is black; where the source pixel is white, forces the destination pixel black.
													For a color graphics port, determines how close the color of the source pixel is to black, and assigns this relative amount of background color to the destination pixel. Determines how close the color of the source pixel is to white, and assigns this relative amount of foreground color to the destination pixel.*/
	FZRT_NOTSRCOR,						/* @emem  For a basic graphics port, leaves the destination pixel unaltered where the source pixel is black; where the source pixel is white, forces the destination pixel black.
																						For a color graphics port, determines how close the color of the source pixel is to white, and assigns this relative amount of foreground color to the destination pixel.*/
	FZRT_NOTSRCXOR,						/* @emem  For basic and color graphics ports, where the source pixel is white, inverts the destination pixel. For a basic graphics port, where the source pixel is black, leaves the destination pixel unaltered.
																															For a color graphics port, for a colored destination pixel, uses the complement of its color if the pixel is direct, or inverts its index if the pixel is indexed.*/
	FZRT_NOTSRCBIC,						/* @emem  For a basic graphics port, where the source pixel is black, leaves the destination pixel unaltered; where the source pixel is white, forces the destination pixel white.
																																								For a color graphics port, determines how close the color of the source pixel is to white, and assigns this relative amount of background color to the destination pixel.*/
	FZRT_GRAYISHTEXTOR	= 49					/* @emem Text drawn with the pen is drawn in a dimmed state  */
} fzrt_source_mode_enum;

/******************************************************************************************************

	@enum	
	
	@desc	Arithmetic transfer modes.
			Constants to set the copybits transfer mode
			
	@avail	5.0.0.0
	
	@see	fzrt_copy_bits

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_arith_mode_enum
{
	FZRT_BLEND		= 32,		/* @emem  Replaces the destination pixel with a blend of the source and destination pixel colors. If the destination is a bitmap or 1-bit pixel map, reverts to srcCopy mode. */
	FZRT_ADDPIN,				/* @emem  Replaces the destination pixel with the sum of the source and destination pixel colors-- up to a maximum allowable values. If the destination is a bitmap or 1-bit pixel map, reverts to srcBic mode. */
	FZRT_ADDOVER,				/* @emem  Replaces the destination pixel with the sum of the source and destination pixel colors, except if the value of the red, green, or blue component exceeds 65,536, then addOver subtracts 65,536 from that value. If the destination is a bitmap or 1-bit pixel map, reverts to srcXor mode. */
	FZRT_SUBPIN,				/* @emem  Replaces the destination pixel with the difference of the source and destination pixel colors, but not less than a minimum allowable value. If the destination is a bitmap or 1-bit pixel map, reverts to srcOr mode. */
	FZRT_TRANSPARENT,			/* @emem  Replaces the destination pixel with the source pixel if the source pixel is not equal to the background color. The transparent mode replaces the destination pixel with the source pixel if the source pixel isn’t equal to the background color. This mode is most useful in 8-bit, 4-bit, or 2-bit color modes.*/
	FZRT_ADDMAX,				/* @emem  Compares the source and destination pixels, and replaces the destination pixel with the color containing the greater saturation of each of the RGB components. If the destination is a bitmap or 1-bit pixel map, reverts to srcBic mode. */
	FZRT_SUBOVER,				/* @emem  Replaces the destination pixel with the difference of the source and destination pixel colors, except if the value of the red, green, or blue component is less than 0, then it adds the negative result to 65,536. if the destination is a bitmap or 1-bit pixel map, revert to srcXor mode.*/
	FZRT_ADMIN,					/* @emem  Compares the source and destination pixels, and replaces the destination pixel with the color containing the lesser saturation of each of the RGB components. If the destination is a bitmap or 1-bit pixel map, reverts to srcOr mode. */
	FZRT_DITHERCOPY		= 64	/* @emem  you can add dithering to any source mode by adding this constant or the value it represents to the source mode. */
} fzrt_arith_mode_enum;

/******************************************************************************************************

	@enum	
	
	@desc	Font face styles.
			These define the face styles of a font family. 
			All the values, except for FZRT_FONT_NORMAL, can be combined using bitwise or operator.
			(e.g. FZRT_FONT_BOLD <bar> FZRT_FONT_ITALIC specifies the bold-italic face of the font)
			Not all face styles are support on all fonts. If a face style is not support, it is ignored.
				
	@avail	5.0.0.0
	
	@see	fzrt_text_face

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_font_style_enum
 {
	FZRT_FONT_NORMAL      = 0x00,		/* @emem  Normal font face */
	FZRT_FONT_BOLD        = 0x01,		/* @emem  Bold font */
	FZRT_FONT_ITALIC      = 0x02,		/* @emem  Italic font*/
	FZRT_FONT_UNDERLINE   = 0x04,		/* @emem  Underline font style*/
	FZRT_FONT_OUTLINE     = 0x08,		/* @emem  Outline font style */
	FZRT_FONT_SHADOW      = 0x10,		/* @emem  Shadow font style */
	FZRT_FONT_CONDENSE    = 0x20,		/* @emem  Condensed font style*/
	FZRT_FONT_EXTEND      = 0x40		/* @emem  Extended font style */
} fzrt_font_style_enum;

/******************************************************************************************************

	@enum	
	
	@desc	Disk Volume types.
			These define what the type of a volume is. 
				
	@avail	5.0.0.0
	
	@see	fzrt_file_get_vspec_type

	@toc	fzrt_file

*******************************************************************************************************/
typedef enum fzrt_volm_type_enum{
	FZRT_VSPEC_UNKNOWN_TYPE,		/* @emem 	Cannot determine the disk type */
	FZRT_VSPEC_LOCAL,				/* @emem 	local fixed disk */
	FZRT_VSPEC_NETWORK,				/* @emem 	disk is located on network, not local */
	FZRT_VSPEC_REMOVABLE,			/* @emem 	Floppy disk or removable hard disk */
	FZRT_VSPEC_CDROM				/* @emem 	CD-ROM drive */
} fzrt_volm_type_enum;

/******************************************************************************************************

	@enum	
	
	@desc	File copy flags.
			These define actions to take during file copy operation 
				
	@avail	5.5.0.0
	
	@see	fzrt_file_copy

	@toc	fzrt_file

*******************************************************************************************************/
typedef enum fzrt_file_copy_flags_enum
{
	FZRT_FILE_COPY_FLAGS_NONE = 0,		/* @emem 	No flags, default action */
	FZRT_FILE_COPY_FLAGS_REPLACE		/* @emem 	replace the destination file if it exits */
	
} fzrt_file_copy_flags_enum;


/******************************************************************************************************

	@type	

	@desc	formZ file locator.
			This represents a folder or file in the file system.
			This type must first be created using fzrt_file_floc_init. A folder locator specifies
			only a folder and has no name associated, only a path. A file locator specifies a file
			in a folder. Both folder and file locators can be used to set the current folder with 
			fzrt_file_floc_set_crnt. A folder locator can be distinguished from a file locator with
			the function fzrt_file_floc_is_folder and fzrt_file_floc_is_file. If a file locator has
			been created but not set, both fzrt_file_floc_is_folder and fzrt_file_floc_is_file return
			false.
			
	@avail	5.0.0.0

	@toc	fzrt_file

*******************************************************************************************************/
typedef struct fzrt_floc_td * fzrt_floc_ptr;


/******************************************************************************************************

	@type	

	@desc	formZ file iterator type.
			File iterator used to iterator through files or subdirectories of a directory.
			The file iterator must be initialized with either fzrt_file_find_folder_init
			or fzrt_file_find_file_init. The file iterator maintains a state of the 
			current iteration to get the next file or folder.
			
	@avail	5.0.0.0

	@toc	fzrt_file

*******************************************************************************************************/
typedef struct fzrt_file_iter_td *fzrt_file_iter_ptr;


/********************************************************************************************************

	@type	 

	@desc	formz language information pointer.
			Pointer to information about the supported languages for formZ. The pointer must be initialized
			by calling fzrt_lang_info_init before it can be used by other functions using the type. The
			memory used by the pointer is freed by call fzrt_lang_info_finit. The pointer is invalid after 
			the call to fzrt_lang_info_finit.
			
	@avail	5.5.0.0

	see	fzrt_lang_info_init, fzrt_lang_info_finit, fzrt_lang_get_info

	toc	fzrt

*********************************************************************************************************/
typedef struct fzrt_lang_info_td  *fzrt_lang_info_ptr;


/**********************************************************************

	@def
	  
	@desc		Color icon resource from a runtime module,
				This is a meta resource type for the systems native color icon resource
				'CICN' on Macintosh, ICON on Windows
				
	@avail	5.0.0.0
				  
	@see		fzrt_rlib_get_resource
					
	@toc		fzrt_base
					  
***********************************************************************/
#define FZRT_RLIB_CICON 'RICN'	/* Icon Resource type from rlib dll file - native ICON type */

/********************************************************************************************************

	@enum
	
	@desc	Icon resource types.
			These are used to specify color or black and white color when loading icons.
			
	@avail	5.0.0.0

	@see 	fzrt_rlib_load_icon
	
	@toc	fzrt_ui

*********************************************************************************************************/
typedef enum fzrt_icon_enum {
	FZRT_LOAD_ICON_BW		= 1,		/* @emem	Loads a Black and White icon from the resource */
	FZRT_LOAD_ICON_COLOR				/* @emem    Loads a color icon from the resource */
} fzrt_icon_enum;

/******************************************************************************************************

	@type	

	@desc	Icon pointer.
			This represents an icon. The icon can be either a black and white or color icon.
			
	@avail	5.0.0.0

	@see	fzrt_rlib_load_icon
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_icon_td *		fzrt_icon_ptr;	/* KDA 2/1/02  */


#if (__PLATFORM__ == MACINTOSH)
	#if FZ_PRAGMA_STRUCT_ALIGN	/* SPG 10/10/12 */
		//#pragma options align=mac68k	/* { */
	#endif
#endif

/******************************************************************************************************

	@struct	

	@desc	Point in Windows graphics system. 
		Represents a point in a 2D graphical environment in the Windows OS. 
		NOTE: the implementation is platform dependent to match the system defined Point. This structure should not be saved to 
		disk. If you need to save a Rectangle, you should define your own structure that is 
		platform independent.
	
	@avail	5.0.0.0

	@see	fzrt_point

	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_point_win_td {
	fzrt_int 	h;				/* @field - Horizontal position (x coordinate) */
	fzrt_int 	v;				/* @field - Vertical position (y coordinate) */
} fzrt_point_win_td;


/******************************************************************************************************

	@struct	

	@desc	Point in Macintosh graphics system
		Represents a point in a 2D graphical environment in the Macintosh OS. 
		NOTE: the implementation is platform dependent to match the system defined Point. This structure should not be saved to 
		disk. If you need to save a Rectangle, you should define your own structure that is 
		platform independent.
	
	@avail	5.0.0.0

	@see	fzrt_point
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_point_mac_td {
	short 	v;				/* @field - Vertical position (y coordinate) */
	short 	h;				/* @field - Horizontal position (x coordinate) */
} fzrt_point_mac_td;

#if (__PLATFORM__ == WINDOWS)

/******************************************************************************************************

	@type	

	@desc	Point in graphics system. 
		Represents a point in a 2D graphical environment. 
		NOTE: the implementation is platform dependent to match the system defined Point. This structure should not be saved to 
		disk. If you need to save a Rectangle, you should define your own structure that is 
		platform independent.
	
	@avail	5.0.0.0

	@see fzrt_point_win_td, fzrt_point_mac_td
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_point_win_td fzrt_point;

#elif (__PLATFORM__ == MACINTOSH)
typedef struct fzrt_point_mac_td fzrt_point;

#endif

/***************************************************************************
The following definitions of rect and point are system dependent for performance
reasons. The struct names differ for documentation purposes. Please do not rename.
****************************************************************************/

/******************************************************************************************************

	@struct	

	@desc	Rectangle in Windows graphics system.
		Represents a rectangle in a 2D graphical environment of the Windows OS.
			NOTE: the implementation is platform dependent to match the system defined Rect. This structure should not be saved to 
			disk. If you need to save a Rectangle, you should define your own structure that is 
			platform independent.
			
	@avail	5.0.0.0

	@see fzrt_rect
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_rect_win_td {
	fzrt_int               left;		/* @field - left edge x coordinate of rectangle */
	fzrt_int               top;			/* @field - top edge y coordinate of rectangle */
	fzrt_int               right;		/* @field - right edge x coordinate of rectangle */
	fzrt_int               bottom;		/* @field - bottom edge y coordinate of rectangle */
} fzrt_rect_win_td;

/******************************************************************************************************

	@struct	

	@desc	Rectangle in Macintosh graphics system.
		Represents a rectangle in a 2D graphical environment of the Macintosh OS.
			NOTE: the implementation is platform dependent to match the system defined Rect. <nl>
			This structure should not be saved to disk. If you need to save a Rectangle, you should define your own structure that is 
			platform independent.
			
	@avail	5.0.0.0

	@see fzrt_rect
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_rect_mac_td {
	short               top;			/* @field - top edge y coordinate of rectangle */
	short               left;			/* @field - left edge x coordinate of rectangle */
	short               bottom;		/* @field - bottom edge y coordinate of rectangle */
	short               right;		/* @field - right edge x coordinate of rectangle */
} fzrt_rect_mac_td;


#if (__PLATFORM__ == WINDOWS)

/******************************************************************************************************

	@type	

	@desc	Rectangle in graphics system.
	  	Represents a rectangle in a 2D graphical environment.
		  NOTE: the implementation is platform dependent to match the system defined Rect. <nl>
		  This structure should not be saved to disk. If you need to save a Rectangle, you should define your own structure that is 
		  platform independent. 

	@avail	5.0.0.0

	@see fzrt_rect_win_td, fzrt_rect_mac_td

	@toc	fzrt_graf
		  
*******************************************************************************************************/
typedef struct fzrt_rect_win_td fzrt_rect;

#elif (__PLATFORM__ == MACINTOSH)

typedef struct fzrt_rect_mac_td fzrt_rect;

#endif




/******************************************************************************************************

	@struct	

	@desc	RGB Color. Structure represented a color as a triple of Red, Blue, and Green components. Black is defined
			as (0,0,0) (no red, blue or green) White is (65535,65535,65535) all red, green and blue.
			
	@avail	5.0.0.0

	@see	fzrt_rgb_fore_color, fzrt_get_fore_color, fzrt_rgb_back_color, fzrt_get_back_color
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_rgb_color_td {
	unsigned short		red;			/* @field  - intensity of the red component, 0 - no red, 65535 - full red */
	unsigned short		green;			/* @field  - intensity of the green component, 0 - no green, 65535 - full green */
	unsigned short		blue;			/* @field  - intensity of the blue component, 0 - no blue, 65535 - full blue */
} fzrt_rgb_color_td;

/******************************************************************************************************

	@struct	 

	@desc	HSL Color.
			Structure represented a color as a triple of Hue, Saturation, and Lightness components
			
	@avail	5.0.0.0

	@see	<auto>
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_hsl_color_td {
	unsigned short		hue;             	/*  @field - Fraction of circle, red at 0 */
	unsigned short		saturation;       	/*  @field - 0..65535, 0 is gray, 65535 is pure color */
	unsigned short		lightness;			/*  @field - 0..65535, 0 is black, 65535 is white */
} fzrt_hsl_color_td;

/******************************************************************************************************

	@struct	

	@desc	HSV Color.
		 Structure represented a color as a triple of Hue, Saturation, and value components
			
	@avail	5.0.0.0

	@see	<auto>
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_hsv_color_td {
	unsigned short		hue;             	/*  @field - Fraction of circle, red at 0 */
	unsigned short		saturation;       	/*  @field - 0..65535, 0 is gray, 65535 is pure color */
	unsigned short		value;				/*  @field - 0..65535, 0 is black, 65535 for maximum intensity */
} fzrt_hsv_color_td;

/******************************************************************************************************

	@struct	

	@desc	CMY Color.
			 Structure represented a color as a triple of cyan, magenta, and yellow components
			(0,0,0) represents white, (65535,65535,65535) is black
			
	@avail	5.0.0.0

	@see	<auto>
	
	@toc	fzrt_graf

*******************************************************************************************************/
typedef struct fzrt_cmy_color_td {
	unsigned short		cyan;				/*  @field - [0..65535] intensity of cyan */
	unsigned short		magenta;			/*  @field - [0..65535] intensity of magenta */
	unsigned short		yellow;				/*  @field - [0..65535] intensity of yellow */
} fzrt_cmy_color_td;

#if (__PLATFORM__ == MACINTOSH)
	#if FZ_PRAGMA_STRUCT_ALIGN	/* SPG 10/10/12 */
		//#pragma options align=reset	/* } */
	#endif
#endif

/******************************************************************************************************

	@type	

	@desc	Region pointer.
			Pointer to a system region.

	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf
		  
*******************************************************************************************************/
typedef	struct	fzrt_rgn_td 	*fzrt_rgn_ptr;


/******************************************************************************************************

	@type	

	@desc	Color Table pointer.
			This is an opaque pointer to a color table object

	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf
		  
*******************************************************************************************************/
typedef struct fzrt_color_table_td  **fzrt_color_table_ptr;

/******************************************************************************************************

	@type	

	@desc	Pixel Buffer.
			This is an opaque pointer to a pixel buffer. 
			A pixel buffer is a generic representation of pixels in a raster image.

	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf
		  
*******************************************************************************************************/
typedef  struct fzrt_pbuf_td *fzrt_pbuf_ptr;	/* Opaque type to pixel buffer type */

/******************************************************************************************************

	@struct	

	@desc	Pixel buffer rectangle.
			This represents a rectangular area in a pixel buffer. This differs from fzrt_rect, in that it is
			OS independent, and can represent values large enough to overcome some limitations on Macintosh.

	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf
		  
*******************************************************************************************************/
typedef struct fzrt_pbuf_rect_td {
	fzrt_int	left;			/* @field - left edge x coordinate of rectangle */
	fzrt_int	top;			/* @field - top edge y coordinate of rectangle */
	fzrt_int	right;			/* @field - right edge x coordinate of rectangle */
	fzrt_int	bottom;			/* @field - bottom edge y coordinate of rectangle */
} fzrt_pbuf_rect_td;

typedef fzrt_pbuf_rect_td fzrt_pbuf_rect;

/******************************************************************************************************

	@struct	

	@desc	Pixel buffer point.
			This represents a point in a pixel buffer. This differs from fzrt_point, in that it is
			OS independent.

	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf
		  
*******************************************************************************************************/
typedef struct fzrt_pbuf_point_td {
	fzrt_int	x;			/* @field - Horizontal position (y coordinate) */
	fzrt_int	y;			/* @field - Vertical position (x coordinate) */
} fzrt_pbuf_point_td;

typedef fzrt_pbuf_point_td fzrt_pbuf_point;

/******************************************************************************************************

	@type	

	@desc	Graphics port.
			This represents a graphics port that can be drawn into. You can obtain a graf_ptr from a window
			or get the current graf_ptr.

	@avail	5.0.0.0

	@see	fzrt_get_window_port, fzrt_get_window_from_port, fzrt_get_port

	@toc	fzrt_graf
		  
*******************************************************************************************************/
typedef struct fzrt_graf_port_td *fzrt_graf_ptr;	/* KDA 10/14/02 */

/**********************************************************************

	@type	 

	@desc	Window object.
			This represents a window object in the system.

	@avail	5.0.0.0

	@see	fzrt_get_window_from_port, <auto>

	@toc	fzrt_graf
		  
***********************************************************************/
typedef struct fzrt_window_td *fzrt_window_ptr;

/**********************************************************************

	@type	

	@desc	Font style.
		 This represents a font face style (FZRT_FONT_NORMAL, FZRT_FONT_BOLD etc.).

	@avail	5.0.0.0


	@toc	fzrt_graf
		  
***********************************************************************/
typedef unsigned char fzrt_style;

/**********************************************************************

	@type	 

	@desc	Polygon.
		This represents a polygon object. Must be created with fzrt_open_polygon.

	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf
		  
***********************************************************************/
typedef struct fzrt_polygon_td	*fzrt_polygon_ptr;	/* KDA 06/28/01 */


/********************************************************************************************************

	@enum	Menu Item attributes 
	@desc	Menu Item attributes.
			This represents the attributes of a menu item. These can be obtained or set by
			fzrt_menu_get_item_attributes and fzrt_menu_change_item_attributes.
			
	@avail	5.0.0.0

	@see fzrt_menu_change_item_attributes, fzrt_menu_get_item_attributes
	
	@toc	fzrt_ui

*********************************************************************************************************/
/* Menu Item Attributes - match MacOS 10.1 values */
typedef enum fzrt_menu_attributes_enum{	
	FZRT_MENU_ITEM_ATRB_NONE		=	0,				/* @emem	No menu item attributes */	
	FZRT_MENU_ITEM_ATRB_DISABLBLED	=	(1 << 0),		/* @emem 	Menu Item is disabled */
	FZRT_MENU_ITEM_ATRB_SEPARATOR	=	(1 << 6),		/* @emem 	menu item is a separator */
	FZRT_MENU_ITEM_ATRB_CUSTOM_DRAW	=	(1 << 11)		/* @emem 	menu item is a custom drawn item */
} fzrt_menu_attributes_enum;

/******************************************************************************************************

	@type	

	@desc	Menu reference.
			Represents a menu object. Menus can be created by loading them from a formZ resource file
			or creating them with fzrt_menu_create.
			
	@avail	5.0.0.0

	@see	<auto>
	
	@toc	fzrt_ui

*******************************************************************************************************/
typedef struct fzrt_menu_td * fzrt_menu_ptr;

/******************************************************************************************************

	@type	

	@desc	Mem zone pointer.
			Represents a mem zone data structure for allocating pointers. Memory zones are more effecient
			for allocating dynamic memory without fragmenting the application heap.
			
	@avail	5.0.0.0

	@toc	fzrt_mem

*******************************************************************************************************/
typedef struct zone_header_td *fzrt_zone_ptr;



/******************************************************************************************************

	@def	
	
	@desc	Invalid formZ resource reference.
			This value is returned from fzrt_fzr_open when there is an error opening the formZ resource
			file. Note that zero is a valid resource reference
			
	@avail	5.0.0.0

	@see	fzrt_fzr_open

	@toc	fzrt_base

*******************************************************************************************************/
#define FZRT_FZR_INVALID_REF	0xFFFFFFFF	



/******************************************************************************************************

	@type	

	@desc	formZ resource file reference.
			A Reference to an open resource file. formZ resource file must have a name in the form
			of base_filename.XXX.fzr, where XXX denotes the language of the file. A resource file reference
			actually refers to two files. The first is the primary language file, determined by the current
			language of the application, as defined in the Preferences->language dialog. The second is always
			the English language file, if it exists.
			
	@avail	5.0.0.0

	@see	fzrt_fzr_open

	@toc	fzrt_base

*******************************************************************************************************/
typedef fzrt_unsigned_int fzrt_fzr_ref_td;	

/******************************************************************************************************

	@type	

	@desc	File Dialog Filter pointer.
			This is a pointer to a file dialog filter array,
			The dialog file filter array can be used to filter files in the Open and Save 
			dialogs.
			
	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_file

*******************************************************************************************************/
typedef struct fzrt_file_dlg_filter_td *fzrt_file_dlg_filter_ptr;

/******************************************************************************************************

	@type	 

	@desc	File Dialog File pointer.
			This is a pointer to a file list when using multiple select file dialogs. The file list is
			a collection of fzrt_floc_ptr objects. This can be used if fzrt_get_platform does not
			provide enough distinction for system dependent code.
			
	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_file

*******************************************************************************************************/
typedef struct fzrt_stdffile_td *fzrt_stdffile_ptr;

/******************************************************************************************************

	@enum	
	@desc	System attribute enum. 
			This represents finer detail about the platform that is the current operating platform.
			
	@avail	5.0.0.0

	@toc	fzrt_util

*******************************************************************************************************/
typedef enum fzrt_syst_attr_enum
{
	FZRT_SYS_MACOS_CLASSIC = 0,				/* @emem 	MacOS 8/9 */
	FZRT_SYS_MACOS_CARBON_COMPAT,			/* @emem 	OS X(+) "blue box" */
	FZRT_SYS_MACOS_CLASSIC_CARBON,			/* @emem 	CarbonLib on OS 8/9 */
	FZRT_SYS_MACOS_CARBON_NATIVE,			/* @emem 	Carbon on OS X(+) */
	
	FZRT_SYS_WIN32S = 16,					/* @emem 	Win32 running on 16-bit windows */
	FZRT_SYS_WIN32_95,						/* @emem 	Win32 running on Windows95 */
	FZRT_SYS_WIN32_98,						/* @emem 	Win32 running on Windows98 */
	FZRT_SYS_WIN32_NT_351,					/* @emem 	NT 3.51 or older */
	FZRT_SYS_WIN32_NT,						/* @emem 	Windows NT 4.0 */
	FZRT_SYS_WIN32_2000,						/* @emem 	Windows 2000 Professional */
	FZRT_SYS_WIN32_ME,						/* @emem 	Win32 running on Windows Me */
	FZRT_SYS_WIN32_XP,						/* @emem 	Windows XP (Home or Professional) */
	FZRT_SYS_WIN32_SVR2003,					/* @emem 	Windows Server 2003 */
	FZRT_SYS_WIN32_VISTA,					/* @emem 	Windows Vista */
	FZRT_SYS_WIN32_V7,						/* @emem 	Windows 7 */
	FZRT_SYS_WIN32_SVR2008,					/* @emem 	Windows Server 2008 */
	FZRT_SYS_WIN32_V8,						/* @emem 	Windows 8 */
	FZRT_SYS_WIN32_SVR2012,					/* @emem 	Windows Server 2012 */
	FZRT_SYS_WIN32_V10,						/* @emem 	Windows 10 */
	FZRT_SYS_WIN32_SVR2016,					/* @emem 	Windows Server 2016 */
	
	FZ_SYST_UNKNOWN							/* Unknown system or version */
		
} fzrt_syst_attr_enum;

/* Note: for file compatibility with versions prior to 4.0, these must remain the same as the __PLATFORM__ defines*/
/******************************************************************************************************

	@enum
	
	@desc	Platform Identifier. This identifies the major platform that is the current operating environment.
			
	@avail	5.0.0.0

	@toc	fzrt_util

*******************************************************************************************************/
typedef enum fzrt_platform_enum {
	FZRT_PLATFORM_MAC	= 0,		/* @emem 	Apple Macintosh platform  */
	FZRT_PLATFORM_WIN	= 1			/* @emem    Microsoft Windows platform */
} fzrt_platform_enum;

/* resoource file character sets */
/******************************************************************************************************

	@enum	

	@desc	Character sets.
			This represents text character sets. In most cases the text character set is assumed
			to be the character set for the current application language. All text drawn to the screen
			is drawn with the default character set. You can convert between character sets with 
			fzrt_cnvt_str.
			
	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_util

*******************************************************************************************************/
typedef enum fzrt_charset_td {

	FZRT_CHAR_DEFAULT		= 0xFFFF,	/* @emem - The character set of the current system language */
	FZRT_CHAR_OTHER		= 0,	/* @emem - unknown char set identifier */
	FZRT_CHAR_USDOS		= 1,	/* @emem - MS DOS U.S. English 437*/
	FZRT_CHAR_ANSI,				/* @emem - Windows US ANSI code page 1252*/
	FZRT_CHAR_LATINI,				/* @emem - Latin I codepage DOS 850*/
	FZRT_CHAR_SHIFTJIS,			/* @emem - Japanese Shift-JIS (932 Windows codepage) */
	FZRT_CHAR_MAC,				/* @emem - Macintosh Roman */
	FZRT_CHAR_UNICODE,			/* @emem - Unicode */
	FZRT_CHAR_CHINESE,			/* @emem - Windows codepage 936 - simplified chinese */
	FZRT_CHAR_CHINESETRAD,		/* @emem - Windows codepage 950 - Traditional chinese */
	FZRT_CHAR_KOREAN,				/* @emem - Windows codepage 949 - Korean */
	FZRT_CHAR_GREEK,				/* @emem - Windows codepage 737 - Greek */
	FZRT_CHAR_SHIFTJISMAC,		/*	@emem - Mac Japanese Shift-JIS  */
	FZRT_CHAR_CHINESEMAC,			/*	@emem - Mac simplified chinese */
	FZRT_CHAR_CHINESETRADMAC,		/*  @emem - Mac Traditional chinese */
	FZRT_CHAR_KOREANMAC,			/* @emem -  Mac Korean */
	FZRT_CHAR_GREEKMAC,			/*  @emem - Mac Greek */
	FZRT_CHAR_UTF8,				/* @emem - Unicode 8-bit format */
	FZRT_CHAR_ARABIC_MAC,		/* @emem - Mac Arabic */
	FZRT_CHAR_ARABIC_WIN,		/* @emem - Windows Arabic */
	FZRT_CHAR_HEBREW_MAC,		/* @emem - Mac Hebrew */
	FZRT_CHAR_HEBREW_WIN,		/* @emem - Windows Hebrew */
	FZRT_CHAR_CYRILLIC_MAC,		/* @emem - Mac Cyrillic */
	FZRT_CHAR_CYRILLIC_WIN,		/* @emem - Windows Cyrillic */
	FZRT_CHAR_VIETNAMESE_MAC,	/* @emem - Mac Vietnamese */
	FZRT_CHAR_VIETNAMESE_WIN,	/* @emem - Windows Vietnamese */
	FZRT_CHAR_DEVANAGARI_MAC,	/* @emem - Mac Devanagari */
	FZRT_CHAR_CENTRALEUROROMAN,				/* @emem - Windows US ANSI code page 1250*/
	FZRT_CHAR_LATINII				/* @emem - Latin II codepage DOS 852 */
} fzrt_charset_td;

/********************************************************************************************************

	@enum	 

	@desc	Language identifiers.
			This represents the languages supported by the resource files. The IDs FZRT_LANG_FIRST and
			FZRT_LANG_LAST are meta IDs. They are not used to denote any language, but instead are used
			to bound the range. All language ID fall between the range FZRT_LANG_FIRST < language < FZRT_LANG_LAST.
			Note that the range is exclusive. FZRT_LANG_DEFAULT will never be returned as a value for language,
			but can be used in calls to denote the current system default language. The ID FZRT_LANG_OTHER denotes
			a language not supported by the runtime. This is different than FZRT_LANG_DEFAULT.
				
	@avail	5.0.0.0
	
	@see	fzrt_fzr_get_info

	@toc	fzrt_base

*********************************************************************************************************/
typedef enum fzrt_lang_td {
	FZRT_LANG_DEFAULT		= 0,				/* @emem - current system default language */		
	FZRT_LANG_FIRST			= FZRT_LANG_DEFAULT,	/* @emem - meta ID to mark the first language in list */			
	FZRT_LANG_USENGLISH		= 1,				/* @emem - U.S. English, currently used for any English language */
	FZRT_LANG_SPANISH,							/* @emem - Spanish */
	FZRT_LANG_FRENCH,							/* @emem - French */
	FZRT_LANG_GERMAN,							/* @emem - German */
	FZRT_LANG_ITALIAN,							/* @emem - Italian */
	FZRT_LANG_JAPANESE,							/* @emem - Japanese Kanji */
	FZRT_LANG_GREEK,							/* @emem - Greek */
	FZRT_LANG_KOREAN,							/* @emem - Korean */
	FZRT_LANG_CHINESE_SIMP,						/* @emem - Simplified Chinese */
	FZRT_LANG_CHINESE_TRAD,						/* @emem - Traditional Chinese */
	FZRT_LANG_HEBREW,							/* @emem - Hebrew */
	FZRT_LANG_DUTCH,							/* @emem - Dutch  */
	FZRT_LANG_NORWEGIAN,						/* @emem - Dutch  */
	FZRT_LANG_SWEDISH,							/* @emem - Swedish  */
	FZRT_LANG_FINNISH,							/* @emem - Finnish  */
	FZRT_LANG_DANISH,							/* @emem - Danish  */
	FZRT_LANG_RUSSIAN,							/* @emem - Russian  */
	FZRT_LANG_ARABIC,							/* @emem - Arabic  */
	FZRT_LANG_VIETNAMESE,						/* @emem - Vietnamese  */
	FZRT_LANG_HINDI,							/* @emem - Hindi  */
	FZRT_LANG_CZECH,							/* @emem - Czech  */
	FZRT_LANG_POLISH,							/* @emem - Polish  */
	FZRT_LANG_PORTUGUESE_BRAZIL,				/* @emem - Portuguese Brazil */
	FZRT_LANG_LAST,								/* @emem - meta ID to mark the last language in list */
	FZRT_LANG_OTHER 		= 0xFFFF			/* @emem - Unknown or unsupported language */
} fzrt_lang_td;


/********************************************************************************************************

	@enum	 

	@desc	Character byte identifiers.
			These are the return values from fzrt_char_byte. The values represents what type each byte is in 
			a multibyte character string. 
				
	@avail	5.5.0.0
	
	@see	fzrt_char_byte

	@toc	fzrt_util

*********************************************************************************************************/
typedef enum fzrt_char_byte_td {
	FZRT_SMSINGLEBYTE				= 0,			/* @emem - The byte is a single byte character  */
	FZRT_SMFIRSTBYTE				= -1,			/* @emem - The byte is the first byte of a multi-byte character  */
	FZRT_SMLASTBYTE					= 1,			/* @emem - The byte is the last byte of a multi-byte character  */
	FZRT_SMMIDDLEBYTE				= 2				/* @emem - The byte is a middle byte of a multi-byte character  */
} fzrt_char_byte_td;

/******************************************************************************************************

	@def	

	@desc	flag for converting the line endings in fzrt_cnvt_str.
  
	@avail	5.0.0.0

	@toc	fzrt_util
	  
*******************************************************************************************************/
#define FZRT_CNVT_NO_CRLF 0x01

/******************************************************************************************************

	@enum	

	@desc	Pixel formats.
			This represents the storage of pixel data in a pixel buffer. The pixel format is dependent
			on the depth of the pixel buffer.
			Creating a pixel buffer with FZRT_PBUF_FORMAT_DEFAULT, will choose the most efficient pixel
			buffer for the current system, depending on the pixel buffer depth and graphics card.
						
			
	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_pix_format_enum {
		FZRT_PBUF_FORMAT_DEFAULT		=0,		/* @emem - default format of native system graphics and screen */
		FZRT_PBUF_FORMAT_RGB,				/* @emem - 24 bit format with order of Red, Green, Blue */
		FZRT_PBUF_FORMAT_BGR,				/* @emem - 24 bit format with order of Blue, Green, Red */
		FZRT_PBUF_FORMAT_INDEXED,			/* @emem - Palette based pixel data */
		FZRT_PBUF_FORMAT_RGBA,			/* @emem - 32-bit Red, Green, Blue with alpha in low byte  */
		FZRT_PBUF_FORMAT_ARGB,			/* @emem - 32-bit with alpha in high byte followed by Red, Green, Blue */
		FZRT_PBUF_FORMAT_BGRA,			/* @emem - 32-bit Blue, Green, Red with alpha in low byte */
		FZRT_PBUF_FORMAT_ABGR,			/* @emem - 32-bit with alpha in high byte followed by Blue, Green, Red */
		FZRT_PBUF_FORMAT_555,				/* @emem - packed in as ARRRRRGGGGGBBBBB */
		FZRT_PBUF_FORMAT_555BGR,			/* @emem - packed in as ABBBBBGGGGGRRRRR */
		FZRT_PBUF_FORMAT_555RGBA,			/* @emem - packed in as RRRRRGGGGGBBBBBA */
		FZRT_PBUF_FORMAT_555BGRA,			/* @emem - packed in as BBBBBGGGGGRRRRRA */
		FZRT_PBUF_FORMAT_565,				/* @emem - 16-bit format packed in as RRRRRGGGGGGBBBBB */
		FZRT_PBUF_FORMAT_565BGR,			/* @emem - 16-bit format packed in as BBBBBGGGGGGRRRRR */
		FZRT_PBUF_FORMAT_ALPHA,			/* @emem - ALPHA channel only, Create a single channel, with either alpha data if available, or averaged RGB value */
		FZRT_PBUF_FORMAT_UNDEFINED = 0xFFFF	/* @emem -  undefined pixel format */
} fzrt_pix_format_enum;

/******************************************************************************************************

	@enum	

	@desc	Apply alpha flag.
		This represents how the alpha channel data is handled when pushing/pulling data to/from a pixel buffer.
			
	@avail	5.0.0.0

	@see	<auto>

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_pbuf_apply_alpha_enum {
	FZRT_PBUF_ALPHA_CHANNEL_COPY	=0,		/* @emem - copy alpha information if any with RGB data */
	FZRT_PBUF_ALPHA_CHANNEL_APPLY,			/* @emem - applies alpha information to RGB pixels */
	FZRT_PBUF_ALPHA_CHANNEL_ONLY,			/* @emem - copies alpha channel over to RGB pixels */
	FZRT_PBUF_ALPHA_CHANNEL_NONE,			/* @emem - don't copy alpha channel - set to zeros */
	FZRT_PBUF_ALPHA_CHANNEL_RGB_TO_ALPHA,	/* @emem - copies average of rgb from source to alpha channel of destination. This
													   is the inverse of FZRT_PBUF_ALPHA_CHANNEL_ONLY */
	FZRT_PBUF_ALPHA_CHANNEL_ALPHA_TO_ALPHA	/* @emem - copies alpha channel of source to alpha channel of destination. */
}fzrt_pbuf_apply_alpha_enum;

/******************************************************************************************************

	@enum	

	@desc	Standard cursors.
		These are constants for the predefined cursors that can be set on the system.
			
	@avail	5.0.0.0

	@see	fzrt_set_std_cursor

	@toc	fzrt_graf

*******************************************************************************************************/
typedef enum fzrt_std_cursor_enum
{
	FZRT_CURS_ARROW = 0,		/* @emem - System arrow cursor */
	FZRT_CURS_WATCH				/* @emem - system wait/busy cursor */
}fzrt_std_cursor_enum;


#if (__PLATFORM__ == WINDOWS)

#ifdef FZRT_FOUR_CHAR_CODE
#undef	FZRT_FOUR_CHAR_CODE	/* Is defined in vfw.h on windows */
#endif
#define FZRT_FOUR_CHAR_CODE( ch0, ch1, ch2, ch3 )											\
				( (fzrt_unsigned_int )(unsigned char)(ch0) | ( (fzrt_unsigned_int)(unsigned char)(ch1) << 8 ) |				\
				( (fzrt_unsigned_int)(unsigned char)(ch2) << 16 ) | ( (fzrt_unsigned_int)(unsigned char)(ch3) << 24 ) )
#elif(__PLATFORM__ == MACINTOSH)

#define FZRT_FOUR_CHAR_CODE( ch0, ch1, ch2, ch3 )                                   \
			( ( (fzrt_unsigned_int)(unsigned char)(ch0) << 24 ) | ( (fzrt_unsigned_int)(unsigned char)(ch1) << 16 ) |  \
			( (fzrt_unsigned_int)(unsigned char)(ch2) <<  8 ) |   (fzrt_unsigned_int)(unsigned char)(ch3)  )
#endif

/* resource types */
/************************************************************************
	 @def  

  @desc String resource id.
  	This id is used to denote a string resource in a fzrt resource file.

  @see fzrt_fzr_get_rsrc_cnt

	@toc	fzrt_base

************************************************************************/

#define FZRT_FZR_STRING_ID		FZRT_FOUR_CHAR_CODE('S','T','R','#')

/************************************************************************
 @def  

  @desc Menu resource ID.
  	This is the id for a menu resource in a fzrt resource file. 

  @see fzrt_fzr_get_rsrc_cnt

	@toc	fzrt_base

************************************************************************/
#define FZRT_FZR_MENU_ID	FZRT_FOUR_CHAR_CODE('M','E','N','U')


typedef enum fzrt_pbuf_flags_bits_td
{
	FZRT_PBUF_FLAG_PORT_BIT		= 0		/*  create pixel buffer as a drawable port.   */
		
} fzrt_pbuf_flags_bits_td;

/************************************************************************
	@enum 
	
	@desc	Flags for pixbuf creation.
			These flags can be used when creating a pixel buffer using
			fzrt_pbuf_new.
			
	@toc	fzrt_graf
	
************************************************************************/
typedef enum fzrt_pbuf_flags_enum {
	FZRT_PBUF_FLAG_NONE = 0,									/* @emem No flags */
	FZRT_PBUF_FLAG_PORT =	(1<<FZRT_PBUF_FLAG_PORT_BIT)		/* @emem create pixel buffer as a drawable port.  */
}fzrt_pbuf_flags_enum;

/************************************************************************
	@type	

	@desc	Event Record pointer. 
			This represents an event in the system.

	@avail	5.0.0.0

	@toc	fzrt_util
************************************************************************/
typedef struct fzrt_event_record_td *fzrt_event_record_ptr;

/************************************************************************

	@enum  

 	 @desc Mouse button IDs.
  		This is the id for a menu resource in a fzrt resource file. 

 	 @see 

	@toc	fzrt_util

************************************************************************/
typedef enum fzrt_mouse_buttons_enum
{
	FZRT_MOUSE_BUTTON1	= 0x0001,		/* @emem Left (Primary) mouse button */
	FZRT_MOUSE_BUTTON2	= 0x0002,		/* @emem Right (Secondary) mouse button */
	FZRT_MOUSE_BUTTON3	= 0x0004,		/* @emem Third mouse button */
	FZRT_MOUSE_BUTTON4	= 0x0008,		/* @emem Fourth mouse button */
	FZRT_MOUSE_BUTTON5	= 0x0010		/* @emem Fifth mouse button */
} fzrt_mouse_buttons_enum;

/************************************************************************

	@enum  

 	 @desc Event types
  		These are the event types that can be set with fzrt_set_event_what. 

 	 @see 

	@toc	fzrt_util

************************************************************************/
typedef enum  fzrt_evnt_type_enum {
	FZRT_NULLEVENT				= 0,	/* @emem No Event */
	FZRT_MOUSEDOWN				= 1,	/* @emem Mouse down event */
	FZRT_MOUSEUP				= 2,	/* @emem Mouse Up Event */
	FZRT_KEYDOWN				= 3,    /* @emem Key Down Event */
	FZRT_KEYUP					= 4,	/* @emem Key Up Event */
	FZRT_AUTOKEY				= 5,    /* @emem Key repeat Event */
	FZRT_UPDATEEVT				= 6,	/* @emem Update Event */
	FZRT_DISKEVT				= 7,    /* @emem Disk Event */
	FZRT_ACTIVATEEVT			= 8,    /* @emem Activate Event */
	FZRT_APP1EVT				= 12,   /* @emem Application defined Event */
	FZRT_APP2EVT				= 13,    /* @emem Application defined Event */
	FZRT_MOUSEDOWNALT			= 100,  /* @emem No Event */
	FZRT_MOUSEUPALT				= 101   /* @emem No Event */
}fzrt_evnt_type_enum;
	
/************************************************************************

	@enum  

 	 @desc Event type Masks
  		These are the event types masks that can be sent to fzrt_get_event. 

 	 @see 

	@toc	fzrt_util

************************************************************************/
typedef enum  fzrt_evnt_mask_enum {
/* event mask equates */
	FZRT_EVERYEVENT				= -1,	/* @emem All events */
	FZRT_MDOWNMASK				= 2,	/* @emem Mouse down event */
	FZRT_MUPMASK				= 4,	/* @emem Mouse Up Event */
	FZRT_KEYDOWNMASK			= 8,    /* @emem Key Down Event */
	FZRT_KEYUPMASK				= 16,   /* @emem Key Up Event */
	FZRT_AUTOKEYMASK			= 32,   /* @emem Key repeat Event */
	FZRT_UPDATEMASK				= 64,   /* @emem Update Event */
	FZRT_DISKMASK				= 128,  /* @emem Disk Event */
	FZRT_ACTIVMASK				= 256	/* @emem Activate Event */
}fzrt_evnt_mask_enum;


/************************************************************************
	@enum  

 	 @desc Key State codes
  		This is the state of a key returned by fzrt_evnt_get_key_state.

 	@avail	5.0.0.0

	@see	fzrt_evnt_get_key_state

	@toc	fzrt_util

************************************************************************/
typedef enum fzrt_key_state_enum {
	FZRT_KEY_UNPRESSED			= 0,		/* @emem Key is not pressed */
	FZRT_KEY_PRESSED			= 1,		/* @emem key is currently pressed */
	FZRT_KEY_TOGGLED			= 2			/* @emem key is toggled on, specifically Caps Lock is On */
} fzrt_key_state_enum;

/************************************************************************

	@enum  

 	 @desc Virtual key codes
  		These are the key codes for the virtual keys of the keyboard.
		Currently these are only implemented for the modifier keys.

 	@avail	5.0.0.0

	@toc	fzrt_util
************************************************************************/
typedef enum  fzrt_evnt_virtual_key_enum{
	FZRT_VIRT_CMDKEY			= 1,		/* @emem command key */
	FZRT_VIRT_SHIFTKEY				,		/* @emem shift key  */
	FZRT_VIRT_ALPHALOCK				,		/* @emem alpha lock */
	FZRT_VIRT_OPTIONKEY				,		/* @emem option key */
	FZRT_VIRT_CONTROLKEY			,		/* @emem control key */
	FZRT_VIRT_ALTKEY				,		/* @emem Alt key  */
	FZRT_VIRT_KEYMAX
} fzrt_evnt_virtual_key_enum;

/********************************************************************************************************

	@enum	Command wait click types. Indicates how many times the mouse is waited for clicks.

	@desc	

	@avail	7.0.0.0
			
	@see	<auto>

	@toc	fzrt_util

*********************************************************************************************************/
typedef enum fzrt_click_wait_enum
{	
	FZRT_CLICK_WAIT_NOT=0,		/*	@emem */
	FZRT_CLICK_WAIT_SINGLE,		/*	@emem */
	FZRT_CLICK_WAIT_DOUBLE,		/*	@emem */
	FZRT_CLICK_WAIT_TRIPLE,		/*	@emem */
	
	FZRT_CLICK_WAIT_MAX
} fzrt_click_wait_enum;


#ifdef  __cplusplus
}
#endif /* __cplusplus */

#endif /* __FZRT_API_TYPE_H */