
/**************************************************************************
 *
 * GEMFAST.H - Header file for common VDI and AES symbols.	
 *
 *  This header file contains items compatible with both GEMDEFS and OBDEFS
 *  from the Alcyon system.  Note that there are no 'extern' definitions
 *  for the functions, because they all return a signed short and work
 *  fine as autodefined functions.
 *
 *  If you have a lot of source already coded for #include <gemdefs.h>,
 *  you can continue to use your original gemdefs file, or you can rename
 *  this file to gemdefs.h; if your source also includes obdefs.h, remove
 *  them when using this file.
 *
 * Credits dept:
 *	This file bears an amazing similarity to the original Alcyon GEMDEFS
 *	and OBDEFS header files, which are copyrighted by Atari.  What can I
 *	say?  Copyrighted or not, these are the names and values that every-
 *	body uses, so of course the files look *awful* similar...
 *
 *************************************************************************/

							/* evnt_multi flags */
#define MU_KEYBD	0x0001
#define MU_BUTTON	0x0002
#define MU_M1		0x0004
#define MU_M2		0x0008
#define MU_MESAG	0x0010
#define MU_TIMER	0x0020
							/* keyboard states */
#define K_RSHIFT	0x0001
#define K_LSHIFT	0x0002
#define K_CTRL 	0x0004
#define K_ALT		0x0008
							/* event message values */
#define MN_SELECTED 10
#define WM_REDRAW	20
#define WM_TOPPED	21
#define WM_CLOSED	22
#define WM_FULLED	23
#define WM_ARROWED	24
#define WM_HSLID	25
#define WM_VSLID	26
#define WM_SIZED	27
#define WM_MOVED	28
#define WM_NEWTOP	29
#define AC_OPEN	40
#define AC_CLOSE	41
							/* form_dial opcodes */
#define FMD_START	0
#define FMD_GROW	1
#define FMD_SHRINK	2
#define FMD_FINISH	3
							/* rsrc_gaddr structure types */
#define R_TREE 	0 
#define R_OBJECT	1
#define R_TEDINFO	2
#define R_ICONBLK	3
#define R_BITBLK	4
#define R_STRING	5
#define R_IMAGEDATA 6
#define R_OBSPEC	7
#define R_TEPTEXT	8
#define R_TEPTMPLT	9
#define R_TEPVALID	10
#define R_IBPMASK	11 
#define R_IBPDATA	12	
#define R_IBPTEXT	13
#define R_BIPDATA	14
#define R_FRSTR	15
#define R_FRIMG	16 
							/* Window Attributes */
#define NAME		0x0001
#define CLOSER 	0x0002
#define FULLER 	0x0004
#define MOVER		0x0008
#define INFO		0x0010
#define SIZER		0x0020
#define UPARROW	0x0040
#define DNARROW	0x0080
#define VSLIDE 	0x0100
#define LFARROW	0x0200
#define RTARROW	0x0400
#define HSLIDE 	0x0800
							/* wind_create flags */
#define WC_BORDER	0
#define WC_WORK	1
							/* wind_get flags */
#define WF_KIND	 1
#define WF_NAME	 2
#define WF_INFO	 3
#define WF_WORKXYWH  4
#define WF_CURRXYWH  5
#define WF_PREVXYWH  6
#define WF_FULLXYWH  7
#define WF_HSLIDE	 8
#define WF_VSLIDE	 9
#define WF_TOP 	 10
#define WF_FIRSTXYWH 11
#define WF_NEXTXYWH  12
#define WF_RESVD	 13
#define WF_NEWDESK	 14
#define WF_HSLSIZE	 15
#define WF_VSLSIZE	 16
#define WF_SCREEN	 17
							/* wind_update flags */
#define END_UPDATE	0
#define BEG_UPDATE	1
#define END_MCTRL	2
#define BEG_MCTRL	3
							/* graf_mouse mouse types*/
#define ARROW		0
#define BEE		2
#define TEXT_CRSR	1
#define HOURGLASS	2
#define POINT_HAND	3
#define FLAT_HAND	4
#define THIN_CROSS	5
#define THICK_CROSS 6
#define OUTLN_CROSS 7
#define USER_DEF	255
#define M_OFF		256
#define M_ON		257
						/* max depth of search or draw  */
#define MAX_DEPTH	8
						/* inside fill patterns	*/
#define IP_HOLLOW	0
#define IP_1PATT	1
#define IP_2PATT	2
#define IP_3PATT	3
#define IP_4PATT	4
#define IP_5PATT	5
#define IP_6PATT	6
#define IP_SOLID	7
						/* normal graphics drawing modes */
#define MD_REPLACE	1
#define MD_TRANS	2
#define MD_XOR 	3
#define MD_ERASE	4

#ifndef _BITBLT_ALUS_
#define _BITBLT_ALUS_
						/* bit blt rules */
#define ALL_WHITE	0
#define S_AND_D	1
#define S_AND_NOTD	2
#define S_ONLY 	3
#define NOTS_AND_D	4
#define D_ONLY 	5
#define S_XOR_D	6
#define S_OR_D 	7
#define NOT_SORD	8
#define NOT_SXORD	9
#define D_INVERT	10
#define NOT_D		10
#define S_OR_NOTD	11
#define NOT_S		12
#define NOTS_OR_D	13
#define NOT_SANDD	14
#define ALL_BLACK	15
#endif
						/* object types */
#define G_BOX		20
#define G_TEXT 	21
#define G_BOXTEXT	22
#define G_IMAGE	23
#define G_USERDEF	24
#define G_IBOX 	25
#define G_BUTTON	26
#define G_BOXCHAR	27
#define G_STRING	28
#define G_FTEXT	29
#define G_FBOXTEXT	30
#define G_ICON 	31
#define G_TITLE	32
						/* object flags */
#define NONE		0x0000
#define SELECTABLE	0x0001
#define DEFAULT	0x0002
#define EXIT		0x0004
#define EDITABLE	0x0008
#define RBUTTON	0x0010
#define LASTOB 	0x0020
#define TOUCHEXIT	0x0040
#define HIDETREE	0x0080
#define INDIRECT	0x0100
						/* Object states */
#define NORMAL 	0x0000
#define SELECTED	0x0001
#define CROSSED	0x0002
#define CHECKED	0x0004
#define DISABLED	0x0008
#define OUTLINED	0x0010
#define SHADOWED	0x0020
						/* editable text field definitions */
#define EDSTART	0
#define EDINIT 	1
#define EDCHAR 	2
#define EDEND		3
						/* editable text justification */
#define TE_LEFT	0
#define TE_RIGHT	1
#define TE_CNTR	2
					    /* VDI Memory Form Definition Block */
typedef struct form_definition
	{
	long fd_addr;
	short	fd_w;
	short	fd_h;
	short	fd_wdwidth;
	short	fd_stand;
	short	fd_nplanes;
	short	fd_r1;
	short	fd_r2;
	short	fd_r3;
	} FDB;
							/* Mouse Form Definition Block */
typedef struct mouse_form
	{
	short mf_xhot;
	short mf_yhot;
	short mf_nplanes;
	short mf_fg;
	short mf_bg;
	short mf_mask[16];
	short mf_data[16];
	} MFORM ;

typedef struct object
	{
	short	ob_next;			/* -> object's next sibling	  */
	short	ob_head;			/* -> head of object's children */
	short	ob_tail;			/* -> tail of object's children */
	unsigned short ob_type;	/* type of object			  */
	unsigned short ob_flags;	/* flags					  */
	unsigned short ob_state;	/* state					  */
	long ob_spec;			/* object-specific data		  */
	short	ob_x;			/* upper left corner of object  */
	short	ob_y;			/* upper left corner of object  */
	short	ob_width; 		/* width of obj			  */
	short	ob_height;		/* height of obj			  */
	} OBJECT;

typedef struct graphic_rectangle
	{
	short g_x;
	short g_y;
	short g_w;
	short g_h;
	} GRECT;

typedef struct vdi_rectangle
	{
	short v_x1;
	short v_y1;
	short v_x2;
	short v_y2;
	} VRECT;

typedef struct text_edinfo
	{
	char *te_ptext;		/* ptr to text 		    */
	char *te_ptmplt;		/* ptr to template		    */
	char *te_pvalid;		/* ptr to validation chrs.   */
	short	te_font;			/* font				    */
	short	te_junk1; 		/* junk word			    */
	short	te_just;			/* justification		    */
	short	te_color; 		/* color information word    */
	short	te_junk2; 		/* junk word			    */
	short	te_thickness;		/* border thickness 	    */
	short	te_txtlen;		/* length of text string     */
	short	te_tmplen;		/* length of template string */
	} TEDINFO;

typedef struct icon_block
	{
	short	*ib_pmask;
	short	*ib_pdata;
	char *ib_ptext;
	short	ib_char;
	short	ib_xchar;
	short	ib_ychar;
	short	ib_xicon;
	short	ib_yicon;
	short	ib_wicon;
	short	ib_hicon;
	short	ib_xtext;
	short	ib_ytext;
	short	ib_wtext;
	short	ib_htext;
	} ICONBLK;

typedef struct bit_block
	{
	short	*bi_pdata;			/* ptr to bit forms data  */
	short	bi_wb;				/* width of form in bytes */
	short	bi_hl;				/* height in lines		 */
	short	bi_x;				/* source x in bit form	 */
	short	bi_y;				/* source y in bit form	 */
	short	bi_color; 			/* fg color of blt		 */
	} BITBLK;

typedef struct user_block
	{
	long ub_code;
	long ub_parm;
	} USERBLK;

typedef struct parm_block
	{
	long pb_tree;
	short	pb_obj;
	short	pb_prevstate;
	short	pb_currstate;
	short	pb_x, pb_y, pb_w, pb_h;
	short	pb_xc, pb_yc, pb_wc, pb_hc;
	long pb_parm;
	} PARMBLK;

/* jrd's hacks */

/* useful util for kludging around brain-death in wind_set call */
#define HIGH_SHORT(foo)  (((long )(foo)) >> 16)
#define LOW_SHORT(foo)  (((long )(foo)) & 0xFFFF)

#define DESKTOP_HANDLE 0

/*  end of GEMFAST.H */

