/* tab expansion/compression should be set to 4 */ /************************************************************************** * GEMF.H - Header file for GEM programming. * * This header file contains items compatible with both GEMDEFS and OBDEFS * from the Alcyon system. Note that there are no 'extern' definitions * for the GEM functions, because they all return a signed int and work * fine as autodefined functions. * * Maintenance: * 12/09/08 - > Henk Robbers. * Use standard AES of the compiler. * Every duplication in gemfast.h removed. * Renamed to GEMF. * Ported to Pure C & AHCC. * 02/29/92 - v1.8 * > Added new options for new utility functions. * > Added extern declarations for all global vars. * > Added macro to map frm_dsdial() to frm_dsdialog() with * parms in the new order. * > Added macros mapping appl_init/exit to apl_xinit/xexit, * so that all aps automatically get new extended init that * fills in the new global vars. New utils REQUIRE that * these vars be init'd; think twice before changing this! * > Changed FDADDR datatype from char* to void*. * 05/26/90 - v1.4 * > Added RSHDR structure for imbedded resource support. * > Fixed all structures which defined pointers as 'long'... * - ICONBLK ib_pmask, ib_pdata, ib_ptext * - BITBLK bi_pdata * - USERBLK ub_code * - PARMBLK pb_tree * All of these structure elements now define the proper ptr. * > Added AESUTIL_A, AESFAST_A and VDIFAST_A symbols. This * allows specific indication of the presence or abscence of * the bindings libraries, allowing a programmer to use the * GEMFAST.H header without using the rest of GemFast. This * also allows conditional compilation code to be more * specific: it can now test for the presence of the header * file (and handle the differences in the structure defs), * and it can separately test for the presence of the libs, * and the extended functions available therein. * 12/03/89 - v1.3 * > Renamed a lot of functions, a name compatibility block was * added at the end of this file to smooth the transition. * > Added NO_OBJECT, MU_MENTRY, MU_MEXIT to defines. * > Added XMULTI struct, even though it really belongs to v2.0 *************************************************************************/ #include #include #include #include #include #include #include "frmtypes.h" #ifndef GEMFAST_H /* Prevent multiple inclusion */ #define GEMFAST_H 1 /* Tell the world GEMFAST header is used */ #define GEMF_VERSION 0x0180 /* Tell the world we are v1.80 */ #define AESUTIL_A 1 /* Tell the world AESFAST utils available */ #define AESFAST_A 1 /* Tell the world AESFAST lib is available */ #define VDIFAST_A 1 /* Tell the world VDIFAST lib is available */ /* VDI inside fill styles */ #define IS_HOLLOW 0 #define IS_SOLID 1 #define IS_PATTERN 2 #define IS_HATCH 3 #define IS_UDPTRN 4 /* evnt_mouse options */ #define MU_MENTRY 0x0000 #define MU_MEXIT 0x0001 /* rsrc_gaddr structure types */ #define ROOT 0 /* this name used by MWC */ #define BUSY_BEE 2 #define BEE 2 /* value returned by objc_find(), et. al. */ #define NO_OBJECT -1 /* editable text field definitions */ #define EDSTART 0 #define EDINIT 1 #define EDCHAR 2 #define EDEND 3 /*------------------------------------------------------------------------- * a few miscellanious GemFast-defined constants... *-----------------------------------------------------------------------*/ #define GRF_MSALTARROW 200 /* alternate value of ARROW for grf_mouse() */ #define GRF_MSINQUIRE (-1) /* inquire current shape for grf_mouse() */ #define OBJ_BMINQUIRE (-1) /* get w/o change from obj_bmbuttons() */ #define FRM_GETDEFAULTS (-1L) /* get w/o change from frm_defaults() */ #define FRM_MOVER 0x4000 /* special ob_flags value for moveable forms*/ #define G_THERMO 200 /* ob_type for a thermometer display object */ #define OBJ_NODRAW 0 /* obj_XXchange(): no draw after change */ #define OBJ_WITHDRAW 1 /* obj_XXchange(): do draw after change */ #define OBJ_CLIPDRAW 2 /* obj_XXchange(): draw with optional clip */ #define OBJ_TINQUIRE (-32000) /* inquire current G_THERMO position */ #define OBJ_TINCREMENT (-1) /* increment current G_THERMO position by 1 */ #define FRM_DSMAXBUTTONS 5 /* max dynamic button strings */ #define FRM_DSMAXSTRINGS 20 /* max dynamic dialog display strings */ /*------------------------------------------------------------------------- * options for apl_whatever() functions... *-----------------------------------------------------------------------*/ #define APL_RTRANSIENT 0x0001 /* cleanup transient resources */ #define APL_RPERMENANT 0x0002 /* cleanup permenant resources */ /*------------------------------------------------------------------------- * actions for frm_desktop()... *-----------------------------------------------------------------------*/ #define FRM_DTINSTALL 0x00000000L /* install form as system desktop */ #define FRM_DTREMOVE 0x10000000L /* remove form, revert to sys desktop */ /*------------------------------------------------------------------------- * actions for frm_dialog()... *-----------------------------------------------------------------------*/ #define FRM_DSTART 0x10000000L /* do FMD_START */ #define FRM_DDRAW 0x20000000L /* do objc_draw() */ #define FRM_DDO 0x40000000L /* do form_do() */ #define FRM_DFINISH 0x80000000L /* do FMD_FINISH */ #define FRM_DCOMPLETE 0xF0000000L /* do all the steps above in one call */ /*------------------------------------------------------------------------- * actions for frm_progress()... *-----------------------------------------------------------------------*/ #define FRM_PSTART 0x10000000L /* set up and display progress dialog */ #define FRM_PUPDATE 0x40000000L /* update progress thermometer */ #define FRM_PFINISH 0x80000000L /* close and cleanup progress dialog */ /*------------------------------------------------------------------------- * options for all frm_whatever() functions... * 0xauddbbbb * ||| |______ Basic options for all dialog handling. * |||________ Dynamic dialog options. * ||_________ User options; never touched by GemFast. * |__________ Actions. *-----------------------------------------------------------------------*/ #define FRM_NORMAL 0x00000000L /* placeholder when you want none */ #define FRM_EXPLODE 0x00000001L /* exploding box graphics in dialog */ #define FRM_CENTER 0x00000002L /* center dialog in screen */ #define FRM_NEARMOUSE 0x00000004L /* center dialog over mouse */ #define FRM_MOUSEARROW 0x00000008L /* force mouse ARROW during dialog */ #define FRM_USEBLIT 0x00000010L /* use blits instead of redraw msgs */ #define FRM_MOVEABLE 0x00000020L /* dialog is moveable */ #define FRM_NODEFAULTS 0x00008000L /* these options override defaults */ #define FRM_DMUSTSELECT 0x00010000L /* dsdialog/dsmenu: no default exit */ #define FRM_DSHADOWED 0x00020000L /* dsdialog/dsmenu: shadowed parent */ #define FRM_DSL1TITLE 0x00100000L /* 1st line is title, higher y pos */ #define FRM_MEXITPARENT 0x00100000L /* exit if mouse leaves parent */ #define FRM_MEXITVICINITY 0x00200000L /* exit if mouse leaves vicinity */ #define FRM_OPTIONBITS 0x0FFFFFFFL /* mask for dialog options */ #define FRM_BOPTIONBITS 0x0000FFFFL /* mask for basic options */ #define FRM_DOPTIONBITS 0x00FF0000L /* mask for dynamic options */ #define FRM_UOPTIONBITS 0x0F000000L /* mask for user options */ #define FRM_ACTIONBITS 0xF0000000L /* mask for dialog actions */ /*------------------------------------------------------------------------- * option for fsl_dialog()... *-----------------------------------------------------------------------*/ #define FSL_NORMAL 0x0000 #define FSL_FNOPTIONAL 0x0001 #define FSL_PATHONLY 0x0002 /*------------------------------------------------------------------------- * options for grf_blit() and grf_memblit()... *-----------------------------------------------------------------------*/ #define GRF_NORMAL 0x0000 /* a placeholder value */ #define GRF_BFROMSCREEN 0x1000 /* blit from screen to buffer */ #define GRF_BTOSCREEN 0x2000 /* blit from buffer to screen */ #define GRF_BMEMCALC 0x4000 /* calc mem requirements, don't blit */ #define GRF_BOBJTREE 0x0001 /* rectparm OBJECT* instead of GRECT* */ /************************************************************************** * data structures and types... *************************************************************************/ /*------------------------------------------------------------------------- * FDB/MFDB structure (describes memory area for VDI blit)... *-----------------------------------------------------------------------*/ #ifndef FDADDR /* v1.3: this define has been added to */ #define FDADDR void* /* help provide compatibility between */ #endif /* bindings systems. */ typedef MFDB FDB; /*------------------------------------------------------------------------- * VRECT structure (a VDI-style rectangle, describes opposite corners)... *-----------------------------------------------------------------------*/ typedef struct vrect { int v_x1; int v_y1; int v_x2; int v_y2; } VRECT; #define appl_blk user_blk /*------------------------------------------------------------------------- * XUSERBLK (our internal extension to a standard USERBLK)... *-----------------------------------------------------------------------*/ typedef struct xuser_blk { long cdecl (*ub_code)(); /* the 1st two fields are USERBLK std, */ struct xuser_blk *ub_self; /* but ub_parm always points to self. */ void *reserved; /* this will be used in v1.9 */ long ub_size; /* size of this XUSERBLK structure */ long ob_spec; /* ob_spec and ob_type are from the */ short ob_type; /* original object before we xformed */ } XUSERBLK; /*------------------------------------------------------------------------- * XPARMBLK structure (our renaming of a standard PARMBLK)... *-----------------------------------------------------------------------*/ typedef struct xparm_blk { OBJECT *ptree; int obj; int prevstate; int currstate; GRECT drawrect; GRECT cliprect; XUSERBLK *pub; } XPARMBLK; typedef struct { XUSERBLK xub; int tick_limit; int tick_count; int tick_width; int curr_width; int full_width; int fill_style; int xoffset; } ThermoInfo; #define RSHDR_DEFINED 1 /* signal to other header files that RSHDR is done */ /*------------------------------------------------------------------------- * XMOUSE structure... *-----------------------------------------------------------------------*/ typedef struct xmouse { int retval; int bclicks; int mask; int state; int status; int mousex; int mousey; int mouseb; int keystate; } XMOUSE; /*------------------------------------------------------------------------- * XMULTI structure... *-----------------------------------------------------------------------*/ typedef struct xmulti { int msgbuf[8]; int mflags, mbclicks, mbmask, mbstate, mm1flags; GRECT mm1rect; int mm2flags; GRECT mm2rect; int mtlocount, mthicount; int mwhich, mmox, mmoy, mmobutton, mmokstate, mkreturn, mbreturn; } XMULTI; /************************************************************************** * declarations for functions. *************************************************************************/ typedef void *(VPFUNC)(size_t size); typedef void (VFUNC)(void *block); int apl_xinit (void); void * apl_malloc (size_t size); void apl_free (void * block); int apl_vshared (void); void apl_mmvectors (VPFUNC *newalloc, VFUNC *newrelease); int apl_vopen (void); void apl_vclose (int vdi_handle); void apl_xexit (void); typedef struct parms { short idx; OBJECT **pptree; } Parms; int rsc_cubuttons (OBJECT *ptree); int rsc_rrbuttons (OBJECT *ptree); void rsc_sxtypes (OBJECT *thetree, ...); void rsc_gstrings (OBJECT *thetree, ...); void rsc_sstrings (OBJECT *thetree, ...); void cdecl rsc_gtrees (int firstparm, ...); void rsc_treefix (OBJECT *ptree); int frmx_center (OBJECT *ptree, GRECT *prect); void frm_cleanup (FormControl *ctl); void * frm_init (long options, OBJECT *ptree, GRECT *pboundrect); void frm_start (FormControl *ctl); void frm_draw (FormControl *ctl, int obj); void frm_finish (FormControl *ctl); void frm_move (FormControl *ctl); int frm_do (FormControl *ctl, int editobj); int frm_mdo (FormControl *ctl); int frm_dialog (long options, OBJECT *ptree, int object); long frm_defaults (long options); void * frm_dovector (void *newfunc); void frm_confine (OBJECT *ptree, GRECT *boundrect); int frm_mkmoveable (OBJECT *ptree, int object); int frmx_dial (int flag, GRECT *plittle, GRECT *pbig); int frm_dsdialog (long options, char *pbuttons[], char *pstrings[]); int frm_progress (long options, int increments, char *buttons, char *fmt, ...); int frm_qchoice (char *buttons, char *fmt, ...); int frm_printf (long options, char *buttons, char *fmt, ...); int frm_vprintf (long options, char *buttons, char *fmt, va_list args); int frm_qerror (int err, char *fmt, ...); int frm_verror (int err, char *buttons, char *fmt, va_list args); int frm_menu (long options, OBJECT *ptree, int select_state); int frm_nlmenu (long options, char *title, char *strings); int frm_qmenu (char *title,char *strings); int frm_dsmenu (long options, char *title, char **strings); void frm_qtext (char *fmt, ...); int frm_question (char *fmt, ...); int frm_error (int err, char *buttons, char *fmt, ...); int frm_nldialog (long options, char *buttons, char *strings); int frm_eflag (OBJECT *ptree, int obj, char *fmt, ...); void frm_desktop (long options, OBJECT *ptree); int fsl_dialog (int options, char *pfullname, char *ppath, char *pwild, char *pprompt); void obj_mxuserdef (XUSERBLK *pblk, OBJECT *pobj, void *pcode); char ** obj_ppstring (OBJECT *pobj); int obj_clcalc (OBJECT *ptree, int object, GRECT *pgrect, VRECT *pvrect); void obj_flchange (OBJECT *ptree, int object, int newflags, int drawflag, GRECT *optional_clip); void obj_stchange (OBJECT *ptree, int object, int newstate, int drawflag, GRECT *optional_clip); void obj_xywh (OBJECT *ptree, int object, GRECT *prect); void obj_offxywh (OBJECT *ptree, int object, GRECT *prect); int obj_mkthermo (OBJECT *ptree, int object, int nincr); int obj_udthermo (OBJECT *ptree, int object, int newpos, GRECT *pclip); void obj_mxuserdef (XUSERBLK *pblk, OBJECT *pobj, void *pcode); int obj_rbfind (OBJECT *tree, int parent, int rbstate); int obj_parent (OBJECT *tree, int curobj); int obj_rbselect (OBJECT *ptree, int selobj, int state); int obj_xtfind (OBJECT *ptree, int parent, char xtype); int obj_bmbuttons (OBJECT *ptree, int parent, int selstate, int newbits); int grf_mouse (int shape, void *pform); int grfx_dragbox (GRECT *startrect, GRECT *boundrect, GRECT *endrect); void * grf_memblit (int options, void *buffer, void *prect); BLITFU grf_blit; GRECT * rc_gadjust (GRECT *prect, int xadjust, int yadjust); VRECT * rc_vadjust (VRECT *prect, int xadjust, int yadjust); void * rc_copy (void *psrce, void *pdest); GRECT * rc_vtog (VRECT *pvrect, GRECT *pgrect); VRECT * rc_gtov (GRECT *pgrect, VRECT *pvrect); GRECT * rc_union (GRECT *prect1, GRECT *prect2); GRECT * rc_confine (GRECT *pbound, GRECT *pdest); int rc_intersect (GRECT *prect1, GRECT *prect2); int rc_ptinrect (GRECT *prect, int x, int y); GRECT * rc_scale (GRECT *psource, GRECT *pdest, int percentage); int winx_get (int whandle, int wfield, GRECT *prect); int wnd_update (int flag); int wnd_top (void); int winx_calc (int type, int kind, GRECT inrect, GRECT *poutrect); int evnx_multi (XMULTI *xm); int mnu_bar (void *menutree, int flag, long reserved); void mnu_disable (void); void mnu_enable (void); /************************************************************************** * declarations of all global vars defined by gemfast... *************************************************************************/ /* * these are valid after appl_init() */ extern void *aespb[6]; /* the AES parmblk, an array of 6 ptrs */ extern int aescontrol[5]; /* the AES control structure, 5 ints */ extern int global[]; /* global[] is aliased by following names */ extern int gl_apversion; /* the AES version number */ extern int gl_apcount; /* max # of concurrent AES applications */ extern int gl_apid; /* id of the current application */ extern long gl_apprivate; /* anything the applicaton wants to store */ extern void *gl_apptree; /* pointer to array of object tree ptrs */ extern long gl_ap1resv; /* old name for pointer to rsc data */ extern RSHDR *gl_aprshdr; /* pointer to head of rsc data */ extern int gl_ap2resv[6]; /* unused entries in global array */ /* * these are valid after apl_xinit() */ extern int gl_grfhandle; /* global physical VDI handle (graf_handle)*/ extern int gl_wchar; /* width of a character */ extern int gl_hchar; /* height of a character */ extern int gl_wbox; /* width of a boxchar */ extern int gl_hbox; /* height of a boxchar */ extern GRECT gl_rwdesk; /* coordinates of work area of the desktop */ extern GRECT gl_rfscrn; /* coordinates of the full screen */ /* * these are valid after apl_vopen() */ extern int gl_vwout[57]; /* work_out from v_opnvwk() */ extern int gl_vxout[57]; /* work_out from vq_extnd(,1,) */ /************************************************************************** * automatically use extended binding routines.... * if you undo these macros, all the builtin utilities will break! * the normal low-level bindings will still work, though. *************************************************************************/ #define appl_init apl_xinit /* extended init fills in new gl_ vars */ #define appl_exit apl_xexit /* extended exit closes shared vdi, etc */ #define wind_update wnd_update /* stack-like wind_update routine */ #define graf_mouse grf_mouse /* use save/restore mouse shape system */ #define objc_xywh obj_xywh /* this one's just plain faster */ #define menu_bar(a,b) mnu_bar((a),(b),0L) /* popable menu system */ /************************************************************************** * Name compatibility stuff. * * 02/29/92 - v1.8 * Added mapping of frm_dsdial to frm_dsdialog. * 05/26/90 - v1.4 * Added mapping of find_exttype to obj_xtfind. * 08/28/89 - v1.3 * In v1.3, a big push has been made to make a consistant * naming standard for the AES utilities. To avoid breaking * a lot of existing code, the following block will direct * the old names to the new routines. *************************************************************************/ #define objclg_adjust rc_gadjust #define objclv_adjust rc_vadjust #define objcl_calc obj_clcalc #define objrb_which(a,b) obj_rbfind((a),(b),SELECTED) #define obj_rbwhich(a,b) obj_rbfind((a),(b),SELECTED) #define objxrb_which obj_rbfind #define find_exttype obj_xtfind #define objst_change obj_stchange #define objfl_change obj_flchange #define graqon_mouse gra_qonmouse #define graqof_mouse gra_qofmouse #define graq_mstate gra_qmstate #define frm_dsdial(str,btn, options) frm_dsdialog((options)|FRM_DSL1TITLE,(btn),(str)) #define frm_sizes(tree, rect) obj_clcalc((tree), ROOT, (rect), NULL) #endif /* end of GEMFAST.H */