home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_07 / ACS.ZIP / ACS / ACS.H < prev    next >
C/C++ Source or Header  |  1992-01-28  |  17KB  |  475 lines

  1. /*
  2.  *        ACS.H        (c) 1991 Stefan Bachert    
  3.  *
  4.  *        Revision:    7 JAN 1992
  5.  *
  6.  */
  7.  
  8. #ifndef __ACS__
  9. #define __ACS__
  10.  
  11. /* uses types out of the following includes */
  12.  
  13. #include    <aes.h>
  14. #include    <vdi.h>
  15.  
  16. #ifndef NULL
  17. #define NULL ((void *) 0L)
  18. #endif
  19.  
  20. #ifndef FALSE
  21. #define FALSE    (0)                /* Function FALSE value            */
  22. #endif
  23.  
  24. #ifndef TRUE
  25. #define TRUE    (1)                /* Function TRUE value            */
  26. #endif
  27.  
  28. #ifndef FAIL
  29. #define FAIL    (-1)            /* Function failure return val    */
  30. #endif
  31.  
  32. #ifndef OK
  33. #define OK        (0)                /* Function success return val    */
  34. #endif
  35.  
  36. #ifndef __TURBOC__                /* cdecl is TC, Pure C only */
  37. #define    cdecl
  38. #endif
  39.  
  40. /*
  41.  *    Global Types
  42.  */
  43.  
  44. #define    swd    struct wd            /* local #undef */
  45. swd;                            /* recursive use: Awindow */
  46.                                 /* Parameter Window, Object, Mumber */
  47.  
  48. typedef void (*Aaction) (void);
  49. typedef swd *(*Acreate) (void *x);
  50.  
  51.  
  52. typedef struct {                /* Extented Object */
  53.     Aaction click;                /* action on exit, touchexit or dclick */
  54.     Aaction drag;                /* action on drag */
  55.     int ob_flags;                /* ob_flags, must be same as in OBJECT */
  56.                                 /* since it will be checked */
  57.     int key;                    /* key for selecting */
  58.     void *userp1;                /* user pointer */
  59.     void *userp2;
  60.     int mo_index;                /* mouse index upon this field */
  61.                                 /* contains title number for menues */
  62.     int type;                    /* Object type (not AES type) */
  63.     } AOBJECT;
  64.  
  65.  
  66. typedef struct {                /* Mouse parameters */
  67.     int    number;                    /* Mousenumber 255=Userdef */
  68.     MFORM *form;                /* Mouseform or NULL */
  69.     } Amouse;
  70.  
  71.  
  72. typedef struct {                /* Rectangle */
  73.     int x,y,w,h;
  74.     } Axywh;
  75.  
  76.     
  77. typedef  struct    wd    {            /* Windowobject */
  78.         /* Users part */
  79.     void *user;                    /* Users object pointer */
  80.     int (*service) (swd *a,/* Service call */
  81.          int task, void *in_out);
  82.     swd * (*create) (void *a);    /* create window passing window specific parameters*/
  83.     int (* open) (swd* a);        /* open window return success */
  84.     int (* init) (swd* a);        /* init window return success */
  85.     OBJECT *work;                /* Object within window */
  86.     void *reserved;                /* reserved pointer */
  87.     int ob_edit, ob_col;        /* object nr and act column */
  88.         /* GEM attributes */
  89.     int    wi_id;                    /* gem window id or -1 */
  90.     int wi_kind;                /* window attributes */
  91.     Axywh wi_act;                /* actual outer coordinates */
  92.     Axywh wi_normal;            /* normal outer coordinates */
  93.     Axywh wi_work;                /* inner size without menu */
  94.     Axywh wi_slider;            /* last set slider (init -1) */
  95.     int    wi_nx, wi_ny;            /* normal offset zero or negative */
  96.     int snap_mask;                /* snap mask due to patter offset */
  97.     char *name;                    /* points to name */
  98.     char *info;                    /* points to info */
  99.         /* ACS attributes */
  100.     int type;                    /* type of this window */
  101.     int kind;                    /* own attributes */
  102.     int state;                    /* state of window */
  103.     int icon;                    /* objectnr in root window, -1 if not */
  104.     ICONBLK *iconblk;            /* defines the Iconimage, NULL means default Icon */
  105.         /* Menue */
  106.     OBJECT *menu;                /* menuetree OBJECT */
  107.         /* Keyboard */
  108.     void (* keys) (swd *x,        /* unknown key actions */
  109.         int kstate, int key);
  110.         /* mouse select */
  111.     void (* obchange) (swd* a,    /* change state of this object */
  112.         int obnr, int new_state);
  113.         /* window attribute reactions */
  114.     void (* redraw) (swd* a, Axywh *b);    /* Redraw */
  115.     void (* topped) (swd* a);            /* Topped */
  116.     void (* closed) (swd* a);            /* closed */
  117.     void (* fulled) (swd* a);            /* fulled */
  118.     void (* arrowed)(swd* a, int which);/* arrowed */
  119.     void (* hslid)    (swd* a, int pos);    /* hslide */
  120.     void (* vslid)    (swd* a, int pos);    /* vslide */
  121.     void (* sized)  (swd* a, Axywh *b);    /* size */
  122.     void (* moved)  (swd* a, Axywh *b);    /* move */
  123.     } Awindow;
  124.  
  125.  
  126. typedef    struct {                /* Description start */
  127.     char magic [8];                /* Magic "ACS 102" */
  128.     int version;                /* Version * 102 */
  129.     int    dx,dy;                    /* virtuell desktop increments */
  130.     int flags;                    /* commom flags */
  131.     char acc_reg [32];            /* Accessory register message */
  132.     Awindow *root;                /* Root window */
  133.     Awindow *acc;                /* Accessory first window */
  134.     Amouse mouse [32];            /* 32 Mouseforms */
  135.     } Adescr;
  136.  
  137.  
  138. typedef struct {                /* list of selected Objects */
  139.     Awindow *window;            /* the objects belong to this window */
  140.     int maxlen;                    /* max entries in list */
  141.     int actlen;                    /* actual count */
  142.     int next;                    /* next entry return by Adr_next */
  143.     int dragback;                /* drag still selected object back to origin */
  144.     int x, y;                    /* position during pick up */
  145.     int rx, ry;                    /* relativ dragged distance */
  146.     int *array;                    /* points to array of obnr's */
  147.     } Asel;
  148.  
  149.  
  150. /*
  151.  *    Global Defines
  152.  */
  153.  
  154.     /* description. flags */
  155. #define AB_CLICKMENU    (0x0001)    /* menu drop down on click instead of touch */
  156. #define AB_MOVIES        (0x0002)    /* draws moving, growing, shrink rectangle */
  157. #define AB_HIDEPOINTER    (0x0008)    /* hide pointer on key input */
  158. #define    AB_CENTERDIALOG (0x0010)    /* center dialog */
  159.  
  160.     /* Awindow. service */    /* generic */
  161. #define AS_ACCLOSED        (1)            /* accessory closed, initialize correctly */
  162. #define AS_TERM            (2)            /* terminate */
  163. #define AS_ICONIZED        (3)            /* the window was iconized (in order to receive a free window id) */
  164. #define AS_MOUSE        (4)            /* Mouse is upon the window */
  165. #define AS_SELECTADD    (5)            /* added object in select list */
  166. #define AS_SELECTDEL    (6)            /* deleted object in select list */
  167. #define AS_UNTOPPED        (7)            /* ACS does not handle UNTOPPED, maybe the window want it */
  168.  
  169. #define AS_OPEN            (10)        /* Open the selected list of objects */
  170. #define AS_DELETE        (11)        /* delete selected list */
  171. #define AS_INFO            (15)        /* Info about Window */
  172. #define AS_DRAGGED        (16)        /* Something dragged on windows ICON */
  173.  
  174.                             /* desktop */
  175. #define AS_PLACEICON    (100)        /* place icon, in_out = the window */
  176. #define AS_REMICON        (101)        /* remove icon */
  177. #define AS_GHOSTICON    (102)        /* change to ghost icon */
  178. #define AS_NORMICON        (103)        /* chance from ghost icon to normal icon */
  179. #define AS_NEWCALL        (104)        /* set new call */
  180.  
  181.     /* Awindow. kind */
  182. #define    AW_ICON            (0x0001)    /* Iconizing Window instead of Terminating */
  183. #define AW_GHOSTICON    (0x0002)    /* Ghost Icon from beginning */
  184. #define AW_STAY            (0x0004)    /* do not change state of the window iconize/open */
  185. #define AW_OBLIST        (0x0008)    /* inner object is a objects list */
  186. #define AW_ICONACCEPT    (0x0010)    /* accept dragging on windows icon */
  187.  
  188.     /* Awindow. state */
  189. #define AWS_FULL        (0x0001)    /* State full */
  190. #define AWS_DIALOG        (0x0002)    /* dialog is activ */
  191. #define AWS_MODIFIED    (0x0004)    /* dependend information was changed call init before open */
  192. #define AWS_FORCEREDRAW    (0x0010)    /* forces a redraw */
  193. #define AWS_LATEUPDATE    (0x0020)    /* send AS_UPATE after returning to main loop */
  194. #define AWS_TERM        (0x0100)    /* Terminatesequence active */
  195.  
  196.     /* OBJECT. ob_flags */
  197. #define AEO                (0x8000)    /* Extended Object */
  198. #define AO_DEFABLE        (0x4000)    /* defaultable Object */
  199. #define AO_DRAGABLE        (0x2000)    /* dragable Object */
  200. #define AO_ACCEPT        (0x1000)    /* accept dragable Object */
  201. #define AO_SILENT        (0x0800)    /* object will NOT visual react (AO_ACCEPT) */
  202.  
  203.     /* OBJECT. ob_state */
  204. #define AOS_FIXED        (0x8000)    /* Object tree is already fixed */
  205. #define AOS_DCLICK        (0x4000)    /* last selection was a double click */
  206. #define AOS_CONST        (0x2000)    /* Do not copy substructure, do not release (free) substructure */
  207.  
  208.     /* AOBJECT. type */
  209. #define    AT_ICONWINDOW    (1)            /* iconized window */
  210. #define    AT_NEW            (2)            /* new object */
  211. #define    AT_TRASH        (3)            /* trash bin */
  212.  
  213.  
  214.     /*    AOBJECT. key */
  215. #define AO_SCANCODE        (0x8000)    /* contain scancode instead of vdi-code */
  216.  
  217.  
  218. #define AREA_WIDTH        (80)        /* area for icons */
  219. #define AREA_HEIGHT        (48)
  220. #define FRAME            (8)            /* frame around Icon */
  221.  
  222. #undef swd                            /* no one knows it any more */
  223.  
  224.  
  225. /*
  226.  *    Global Defines
  227.  */
  228.  
  229. #define    PS    (127 + 1)            /* Pathsize */
  230.  
  231. /*
  232.  *    Global Vars    (no Values)
  233.  */
  234.     /* Before ACSinit0() initialized !! */
  235.     /* AES */
  236. extern int gl_apid;            /* AES application ID */
  237. extern int phys_handle;        /* workstation for aes */
  238. extern int gl_wattr;        /* attribut width */
  239. extern int gl_hattr;        /* attribut height */
  240.  
  241. extern Axywh desk;            /* desktop limits XYWH */
  242.     /* VDI */
  243. extern int vdi_handle;        /* virtual VDI workstation for ACS */
  244. extern int gl_wbox;            /* cell width of standard char */
  245. extern int gl_hbox;            /* cell height of standard char */
  246. extern int gl_wchar;        /* max width of standard char*/
  247. extern int gl_hchar;        /* max height of standard char */
  248. extern int ncolors;            /* number of colors (2=mono) */
  249. extern int nplanes;            /* number of colors expressed in planes */
  250.     /* Pathes */
  251. extern char appname [PS];    /* application complete name */
  252. extern char apppath [PS];    /* application path */
  253. extern char apppara [PS];    /* application parameter */
  254. extern char appfrom [PS];    /* application called from */
  255. extern char basename[20];    /* basename appname without extention */
  256.     /* others */
  257. extern int application;        /* runs as an application */
  258. extern int appexit;            /* application is in system termination mode */
  259. extern Adescr *description;    /* surface description, pointer for late assignment */
  260. extern Adescr ACSdescr;        /* Linked description */
  261. extern Asel Aselect;        /* list of selected objects */
  262.     /* context during callback pointer values */
  263. extern Awindow *ev_window;    /* actual window */
  264. extern OBJECT *ev_object;    /* actual object tree */
  265. extern int ev_obnr;            /* actaul objectnumber, index */
  266. extern int ev_mmox, ev_mmoy;/* Mouse position */
  267. extern int ev_mmokstate;    /* Keyboard state */
  268. extern int dia_abort;        /* Abort dialog */
  269.  
  270. /*
  271.  *    Entries, substitute this handlers
  272.  */
  273.  
  274. int ACSinit0 (void);    /* init entry before ACS initializing */
  275. int ACSinit (void);        /* init entry after ACS initializing */
  276. void ACSterm (void);    /* terminate entry before terminate ACS */
  277. void ACSaboutme (void);    /* call used for 'about me' */
  278. void ACSmessage (int *ev_mmgpbuf);    /* handle unprocessed messages */
  279.  
  280. /*
  281.  *    Windowhandling common Routines
  282.  */
  283.  
  284. Awindow *Awi_wid (const int wid);        /* get window for gem window id */
  285. Awindow *Awi_root (void);                /* return root window */
  286. Awindow *Awi_list (void);                /* next window from total set */
  287. void Awi_sendall                        /* sends message to all windows */
  288.     (int task, void *in_out);
  289. void Awi_down (void);                    /* cycle down windows */
  290. void Awi_up (void);                        /* cycle up windows */
  291. void Awi_show (Awindow *window);        /* show window */
  292. int Awi_init (Awindow *window);            /* Dummy init routine */
  293. Awindow *Awi_create (const Awindow *x);    /* create a copy of window x */
  294. int    Awi_open (Awindow *x);                /* open window */
  295. void Awi_closed (Awindow *x);            /* close window */
  296. void Awi_delete (Awindow *x);            /* free window */
  297. void Awi_topped (Awindow *window);        /* top this window */
  298. void Awi_fulled (Awindow *window);        /* fullsize window */
  299. void Awi_sized (Awindow *window,        /* move/resize window */
  300.         Axywh *new);
  301. void Awi_moved (Awindow *window,        /* move/resize window */
  302.         Axywh *new);
  303. void Awi_diaend (void);                    /* finish open dialogs */
  304. void Awi_keys (Awindow *window,            /* key input for dialog */
  305.         int kstate, int key);
  306. void Awi_obview (Awindow *window,        /* show area in work object coordinates */
  307.         Axywh *xywh);
  308. int Awi_service (Awindow *window,        /* very simple service routine */
  309.     int task, void *in_out);
  310.  
  311. /*
  312.  * Window: inner Objects
  313.  */
  314.  
  315. void Awi_obchange (Awindow *window,        /* change the state of this object in work tree*/
  316.         int obnr, int new_state);        /* ! changed behaviour to 1.0 */
  317. void Awi_obredraw (Awindow *window,        /* redraws everthing in the area of obnr */
  318.         int obnr);                        /* uses window-> redraw */
  319. void Awi_redraw (Awindow *window,        /* redraw routine */
  320.         Axywh *limit);
  321. void Awi_arrowed (Awindow *window,        /* arrows */
  322.         int which);
  323. void Awi_hslid (Awindow *window,        /* horizontal slider */
  324.         int pos);
  325. void Awi_vslid (Awindow *window,         /* vertical slider */
  326.         int pos);
  327.  
  328. /*
  329.  * Events
  330.  */
  331.  
  332. void ACSclose (void);                    /* Quit Entry will call this */
  333. void Aev_quit (void);                    /* Next eventloop will terminate */
  334. void Aev_mess (void);                    /* Accept and handle messages eg redraw */
  335. void Aev_unhidepointer (void);            /* unhides hidden pointer */
  336.  
  337. /*
  338.  *    Mousehandling
  339.  */
  340.  
  341. void Amo_new (Amouse* mouse);            /* set new mouse */
  342. void Amo_busy (void);                    /* set busy indicator */
  343. void Amo_unbusy (void);                    /* remove busy indicator */
  344. void Amo_hide (void);                    /* hide mouse */
  345. void Amo_show (void);                    /* unhide mouse */
  346.  
  347. /*
  348.  *    Objecthandling
  349.  */
  350.  
  351. OBJECT *Aob_create (                    /* creates a copy of parent */
  352.         const OBJECT *parent);    
  353. void Aob_delete (OBJECT *object);        /* frees object generated by Aob_create */
  354. void Aob_fix (OBJECT *object);            /* fixes object */
  355. void Aob_offset (Axywh *redraw,            /* calculate redraw rectangle for object */
  356.         OBJECT *ob, int entry);
  357. MFDB *Aob_save (Axywh *rect);            /* save rectangle of desktop */
  358. void Aob_restore (MFDB *save,            /* restore desktop previously save with Aob_save */
  359.         Axywh *rect);
  360. int Aob_watch (Awindow *window,            /* watched object, select if pointer upon obnr */
  361.         int obnr);                        /* returns TRUE if button was release upon obnr */
  362. int Aob_findflag (OBJECT *ob,            /* find obnr for which flagmask becomes true, obnr is start object */
  363.         int obnr, int flag);
  364. int Aob_up (OBJECT* ob, int obnr);        /* find parent objectnr, returns -1 on top level */
  365.  
  366. void Ame_namefix (OBJECT *menu);        /* fixes tree on different length of first title (name) */
  367.  
  368. int Ame_popup (Awindow *window,            /* pop up a popup menu, x/y determs upper left edge */
  369.     OBJECT *popup, int x, int y);        /* returns selected Obnr, If a callback is defined it will be called */
  370.  
  371. /*
  372.  * Backplane Support
  373.  */
  374.  
  375. MFDB *Abp_create (int w, int h);        /* Create Backplane with width w and height h */
  376. void Abp_delete (MFDB *backplane);        /* free Backplane */
  377. void Abp_start (MFDB *backplane);        /* start writing on backplane (all vdi and aes calls) */
  378. void Abp_end (void);                    /* stop writing on backplane, resume to screen */
  379. void Abp_obchange (MFDB *backplane,        /* change object on backplane */
  380.     OBJECT *object, int entry,            /* if new_state = old_state redraw object area */
  381.     int new_state);
  382.  
  383. /*
  384.  * Drag support functions
  385.  */
  386.  
  387. void Adr_box (int x, int y);            /* start drawing a box which select intersected objects */
  388. void Adr_drag (int x, int y);            /* drag object list */
  389. int Adr_next (void);                    /* returns next obnr from list */
  390.                                         /* init with Aselect. next = 0, return -1 if no more object are available */
  391. void Adr_add (Awindow *window,            /* add object in Aselect list */
  392.     const int obnr);                    /* */
  393. void Adr_del (Awindow *window,            /* delete object from Aselect list, did not update on screen ! */
  394.     const int obnr);                    /* */
  395. void Adr_unselect (void);                /* unselect all object in list, update screen ! */    
  396.  
  397. /*
  398.  *    String support
  399.  */
  400.  
  401. char *Ast_create (const char *parent);    /* create a copy of parent string */
  402. void Ast_delete (char *string);            /* release this copy */
  403.  
  404. /*
  405.  * ICON, Image Support
  406.  */
  407.  
  408. ICONBLK *Aic_create                        /* create a copy of icon, but not image part ! */
  409.     (const ICONBLK *icon);
  410. void Aic_delete (ICONBLK *icon);        /* release this copy */
  411.  
  412. BITBLK *Aim_create                        /* create a bitblk copy, but not image */
  413.     (const BITBLK *bitblk);
  414. void Aim_delete (BITBLK *bitblk);        /* release copy */
  415.  
  416. /*
  417.  *    USER defined Objects
  418.  */
  419.  
  420. USERBLK *Aus_create                     /* create a copy */
  421.     (const USERBLK *user);
  422. void Aus_delete (USERBLK *user);        /* release this copy */
  423.  
  424. /*
  425.  *    TEDINFO Support
  426.  */
  427.  
  428. TEDINFO *Ate_create                        /* create a copy */
  429.     (const TEDINFO *tedi);
  430. void Ate_delete (TEDINFO *tedi);        /* release this copy */
  431.  
  432. /*
  433.  *    Xtra Functions
  434.  */
  435.  
  436. void *Ax_malloc (long size);            /* ACS Malloc can be overwritten if linked before library */
  437. void Ax_free (void *memory);            /* Mark memory as free */
  438. void Ax_ifree (void *memory);            /* give memory immediate free (be very carefully) */
  439.  
  440. /*
  441.  *    Dummy Routines
  442.  */
  443.  
  444. void A_dummy (void);                    /* Zero Routine; will do nothing */
  445. void A_nokey (Awindow *w,                /* Zero Routine */
  446.     int kstate, int key);
  447.  
  448. /*
  449.  *    Utilities
  450.  */
  451. void Aob_alias (void);                    /* Alias object, number in userp1 */
  452. int A_dialog (OBJECT *dia);                /* Draw a dialogbox near the pointer, handle draw and redraw */
  453.                                         /* returns buttonnumber */
  454. int alert_str                            /* display an alert box with one string parameter */
  455.     (const char *alert,                    /* alert must have the form [X][...%s....][Y] */
  456.      const char *para);
  457.  
  458. /*
  459.  *    Predefined "Userdefined Objects"
  460.  */
  461.  
  462. int cdecl A_checkbox (PARMBLK *pb);        /* checkboxes, parm simular to ob_spec for boxes ! */
  463. int cdecl A_radiobutton (PARMBLK *pb);    /* rounded selectable elements, parm simular to ob_spec for boxes ! */
  464. int cdecl A_innerframe (PARMBLK *pb);    /* draws a frames half a character inside ! */
  465. int cdecl A_pattern (PARMBLK *pb);        /* draws general patterns */
  466. int cdecl A_arrows (PARMBLK *pb);        /* draws arrows */
  467.  
  468. /*
  469.  *    ACS Plus Windows
  470.  */
  471.  
  472. extern Awindow DESKTOP;
  473.  
  474. #undef PS
  475. #endif