home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / program / lynxlib.zoo / nobdefs.h < prev    next >
C/C++ Source or Header  |  1991-01-03  |  10KB  |  324 lines

  1. #ifndef NOBDEFS_H
  2. #define NOBDEFS_H
  3. /************************************************************************/
  4. /*    NOBDEFS.H Common OBJECT definitions and structures.                    */
  5. /*        Copyright 1985 Atari Corp.                                        */
  6. /*        Revisions Copyright 1987 Mark Williams Co.                        */
  7. /*      Revised 1990 by Robert Fischer                                  */
  8. /************************************************************************/
  9.  
  10. /* This source file is part of the LynxLib miscellaneous library by
  11. Robert Fischer, and is in part Copyright 1990 by Robert Fischer.  It
  12. costs no money, and you may not make money off of it, but you may
  13. redistribute it.  It comes with ABSOLUTELY NO WARRANTY.  See the file
  14. LYNXLIB.DOC for more details. 
  15.  
  16. To contact the author:
  17.     Robert Fischer \\80 Killdeer Rd \\Hamden, CT   06517   USA
  18.     (203) 288-9599     fischer-robert@cs.yale.edu                 */
  19.  
  20. #ifndef STDDEF_H
  21. #include <stddef.h>
  22. #endif
  23.  
  24. #define ROOT 0
  25.                     /* max string length    */
  26. #define MAX_LEN 81
  27.                     /* max depth of search or draw    */
  28. #define MAX_DEPTH 8
  29.                     /* inside patterns    */
  30. #define IP_HOLLOW 0
  31. #define IP_1PATT 1
  32. #define IP_2PATT 2
  33. #define IP_3PATT 3
  34. #define IP_4PATT 4
  35. #define IP_5PATT 5
  36. #define IP_6PATT 6
  37. #define IP_SOLID 7
  38.                     /* gsx modes        */
  39. #define MD_REPLACE 1
  40. #define MD_TRANS   2
  41. #define MD_XOR     3
  42. #define MD_ERASE   4
  43.                     /* bit blt rules    */
  44. #define ALL_WHITE  0
  45. #define S_AND_D    1
  46. #define    S_AND_NOTD 2
  47. #define S_ONLY     3
  48. #define NOTS_AND_D 4
  49. #define    D_ONLY     5
  50. #define S_XOR_D    6
  51. #define S_OR_D     7
  52. #define    NOT_SORD   8
  53. #define    NOT_SXORD  9
  54. #define D_INVERT  10
  55. #define    NOT_D     11
  56. #define    S_OR_NOTD 12
  57. #define NOTS_OR_D 13
  58. #define    NOT_SANDD 14
  59. #define ALL_BLACK 15
  60.                     /* font types        */
  61. #define IBM 3
  62. #define SMALL 5
  63.                     /* Graphic types of obs    */
  64. #define G_BOX     20
  65. #define G_TEXT    21
  66. #define G_BOXTEXT 22
  67. #define G_IMAGE   23
  68. #define G_USERDEF 24            /* Some sources call this G_PROGDEF */
  69. #define G_IBOX    25
  70. #define G_BUTTON  26
  71. #define G_BOXCHAR 27
  72. #define G_STRING  28
  73. #define G_FTEXT   29
  74. #define G_FBOXTEXT 30
  75. #define G_ICON    31
  76. #define G_TITLE   32
  77.                     /* Object flags         */
  78. #define NONE       0x0
  79. #define SELECTABLE 0x1
  80. #define DEFAULT    0x2
  81. #define EXIT       0x4
  82. #define EDITABLE   0x8
  83. #define RBUTTON   0x10
  84. #define LASTOB    0x20
  85. #define TOUCHEXIT 0x40
  86. #define HIDETREE  0x80
  87. #define INDIRECT 0x100
  88.                     /* Object states    */
  89. #define NORMAL    0x0
  90. #define SELECTED  0x1
  91. #define CROSSED   0x2
  92. #define CHECKED   0x4
  93. #define DISABLED  0x8
  94. #define OUTLINED 0x10
  95. #define SHADOWED 0x20
  96.                     /* Object colors    */
  97. #define WHITE    0
  98. #define BLACK    1
  99. #define RED      2
  100. #define GREEN    3
  101. #define BLUE     4
  102. #define CYAN     5
  103. #define YELLOW   6
  104. #define MAGENTA  7
  105. #define LWHITE   8
  106. #define LBLACK   9
  107. #define LRED     10
  108. #define LGREEN   11
  109. #define LBLUE    12
  110. #define LCYAN    13
  111. #define LYELLOW  14
  112. #define LMAGENTA 15
  113.                     /* editable text field definitions */
  114. #define EDSTART 0
  115. #define EDINIT  1
  116. #define EDCHAR  2
  117. #define EDEND   3
  118.                     /* editable text justification      */
  119. #define TE_LEFT  0
  120. #define TE_RIGHT 1
  121. #define TE_CNTR  2
  122.  
  123. /*    Structure Definitions */
  124.  
  125. typedef struct orect
  126. {
  127.     struct orect    *o_link;
  128.     int        o_x;
  129.     int        o_y;
  130.     int        o_w;
  131.     int        o_h;
  132. } ORECT;
  133.  
  134.  
  135. typedef struct grect
  136. {
  137.     int    g_x;
  138.     int    g_y;
  139.     int    g_w;
  140.     int    g_h;
  141. } GRECT;
  142.  
  143. typedef struct {
  144.     unsigned int in_color : 4;
  145.     unsigned int fill : 3;
  146.     unsigned BOOLEAN text_mode : 1;
  147.     unsigned int text_color : 4;
  148.     unsigned int bord_color : 4;
  149. } COLOR_WORD;
  150.  
  151. typedef struct text_edinfo
  152. {
  153.     unsigned char *    te_ptext;    /* ptr to text (must be 1st)    */
  154.     unsigned char *    te_ptmplt;    /* ptr to template        */
  155.     unsigned char *    te_pvalid;    /* ptr to validation chrs.    */
  156.     int        te_font;    /* font                */
  157.     int        te_junk1;    /* junk word            */
  158.     int        te_just;    /* justification- left, right...*/
  159.     COLOR_WORD    te_color;    /* color information word    */
  160.     int        te_junk2;    /* junk word            */
  161.     int        te_thickness;    /* border thickness        */
  162.     int        te_txtlen;    /* length of text string    */
  163.     int        te_tmplen;    /* length of template string    */
  164. } TEDINFO;
  165.  
  166. typedef struct text_edinfo_mw
  167. {
  168.     unsigned char *    te_ptext;    /* ptr to text (must be 1st)    */
  169.     unsigned char *    te_ptmplt;    /* ptr to template        */
  170.     unsigned char *    te_pvalid;    /* ptr to validation chrs.    */
  171.     int        te_font;    /* font                */
  172.     int        te_junk1;    /* junk word            */
  173.     int        te_just;    /* justification- left, right...*/
  174.     int     te_color;    /* color information word    */
  175.     int        te_junk2;    /* junk word            */
  176.     int        te_thickness;    /* border thickness        */
  177.     int        te_txtlen;    /* length of text string    */
  178.     int        te_tmplen;    /* length of template string    */
  179. } MW_TEDINFO;
  180.  
  181. typedef struct icon_block
  182. {
  183.     int *    ib_pmask;
  184.     int *    ib_pdata;
  185.     char *    ib_ptext;
  186.     int    ib_char;
  187.     int    ib_xchar;
  188.     int    ib_ychar;
  189.     int    ib_xicon;
  190.     int    ib_yicon;
  191.     int    ib_wicon;
  192.     int    ib_hicon;
  193.     int    ib_xtext;
  194.     int    ib_ytext;
  195.     int    ib_wtext;
  196.     int    ib_htext;
  197. } ICONBLK;
  198.  
  199. typedef struct bit_block
  200. {
  201.     char *    bi_pdata;        /* ptr to bit forms data    */
  202.     int    bi_wb;            /* width of form in bytes    */
  203.     int    bi_hl;            /* height in lines        */
  204.     int    bi_x;            /* source x in bit form        */
  205.     int    bi_y;            /* source y in bit form        */
  206.     int    bi_color;        /* fg color of blt         */
  207. } BITBLK;
  208.  
  209. typedef struct user_blk
  210. {
  211.     int    (*ub_code)();
  212.     long    ub_parm;
  213. } USERBLK;                /* Some sources call this APPLBLK */
  214.  
  215. typedef struct {    /* structure good for G_BOXCHAR */
  216.     char chr;        /* Character in G_BOXCHAR */
  217.     BYTE thickness;        /* Thickness of border */
  218.     COLOR_WORD color;    /* Color of object */
  219. } G_BOXCHAR_OBSPEC;
  220.  
  221. typedef union {
  222.     LONG l;                /* Old-style ob_spec */
  223.     G_BOXCHAR_OBSPEC boxchar;
  224.     G_BOXCHAR_OBSPEC box;
  225.     TEDINFO *ftext;        /* G_FTEXT */
  226.     char *string;        /* G_STRING */
  227. } OB_SPEC_T;
  228.  
  229. typedef struct object
  230. {
  231.     int        ob_next;    /* -> object's next sibling    */
  232.     int        ob_head;    /* -> head of object's children */
  233.     int        ob_tail;    /* -> tail of object's children */
  234.     unsigned int    ob_type;    /* type of object- BOX, CHAR,...*/
  235.     unsigned int    ob_flags;    /* flags            */
  236.     unsigned int    ob_state;    /* state- SELECTED, OPEN, ...    */
  237.     OB_SPEC_T        ob_spec;            /* The ob_spec */
  238.     int        ob_x;        /* upper left corner of object    */
  239.     int        ob_y;        /* upper left corner of object    */
  240.     int        ob_width;    /* width of obj            */
  241.     int        ob_height;    /* height of obj        */
  242. } OBJECT;
  243. typedef struct
  244. {
  245.     int        ob_next;    /* -> object's next sibling    */
  246.     int        ob_head;    /* -> head of object's children */
  247.     int        ob_tail;    /* -> tail of object's children */
  248.     unsigned int    ob_type;    /* type of object- BOX, CHAR,...*/
  249.     unsigned int    ob_flags;    /* flags            */
  250.     unsigned int    ob_state;    /* state- SELECTED, OPEN, ...    */
  251.     LONG        ob_spec;            /* The ob_spec */
  252.     int        ob_x;        /* upper left corner of object    */
  253.     int        ob_y;        /* upper left corner of object    */
  254.     int        ob_width;    /* width of obj            */
  255.     int        ob_height;    /* height of obj        */
  256. } MW_OBJECT;
  257.  
  258. typedef struct parm_blk
  259. {
  260.     OBJECT *pb_tree;
  261.     int    pb_obj;
  262.     int    pb_prevstate;
  263.     int    pb_currstate;
  264.     int    pb_x, pb_y, pb_w, pb_h;
  265.     int    pb_xc, pb_yc, pb_wc, pb_hc;
  266.     long    pb_parm;
  267. } PARMBLK;
  268.  
  269. /* Macros to test various bits in the ob_state field */
  270. #define SSELECTED(d, o) ((d)[o].ob_state & SELECTED)
  271. #define SCROSSED(d, o) ((d)[o].ob_state & CROSSED)
  272. #define SCHECKED(d, o) ((d)[o].ob_state & CHECKED)
  273. #define SDISABLED(d, o) ((d)[o].ob_state & DISABLED)
  274. #define SOUTLINED(d, o) ((d)[o].ob_state & OUTLINED)
  275. #define SSHADOWED(d, o) ((d)[o].ob_state & SHADOWED)
  276.  
  277. /* Macros to turn on and off various bits in ob_state and ob_flags */
  278. #define SELECT_FLIP(d, o) ((d)[o].ob_state ^= SELECTED)
  279. #define SELECT_ON(d, o) ((d)[o].ob_state |= SELECTED)
  280. #define SELECT_OFF(d, o) ((d)[o].ob_state &= ~SELECTED)
  281. #define CROSS_FLIP(d, o) ((d)[o].ob_state ^= CROSSED)
  282. #define CROSS_ON(d, o) ((d)[o].ob_state |= CROSSED)
  283. #define CROSS_OFF(d, o) ((d)[o].ob_state &= ~CROSSED)
  284. #define CHECK_FLIP(d, o) ((d)[o].ob_state ^= CHECKED)
  285. #define CHECK_ON(d, o) ((d)[o].ob_state |= CHECKED)
  286. #define CHECK_OFF(d, o) ((d)[o].ob_state &= ~CHECKED)
  287. #define DISABLE_FLIP(d, o) ((d)[o].ob_state ^= DISABLED)
  288. #define DISABLE_ON(d, o) ((d)[o].ob_state |= DISABLED)
  289. #define DISABLE_OFF(d, o) ((d)[o].ob_state &= ~DISABLED)
  290. #define OUTLINE_FLIP(d, o) ((d)[o].ob_state ^= OUTLINED)
  291. #define OUTLINE_ON(d, o) ((d)[o].ob_state |= OUTLINED)
  292. #define OUTLINE_OFF(d, o) ((d)[o].ob_state &= ~OUTLINED)
  293. #define SHADOW_FLIP(d, o) ((d)[o].ob_state ^= SHADOWED)
  294. #define SHADOW_ON(d, o) ((d)[o].ob_state |= SHADOWED)
  295. #define SHADOW_OFF(d, o) ((d)[o].ob_state &= ~SHADOWED)
  296.  
  297. #define SELECTABLE_ON(d, o) ((d)[o].ob_flags |= SELECTABLE)
  298. #define SELECTABLE_OFF(d, o) ((d)[o].ob_flags &= ~SELECTABLE)
  299. #define DEFAULT_ON(d, o) ((d)[o].ob_flags |= DEFAULT)
  300. #define DEFAULT_OFF(d, o) ((d)[o].ob_flags &= ~DEFAULT)
  301. #define EXIT_ON(d, o) ((d)[o].ob_flags |= EXIT)
  302. #define EXIT_OFF(d, o) ((d)[o].ob_flags &= ~EXIT)
  303. #define EDITABLE_ON(d, o) ((d)[o].ob_flags |= EDITABLE)
  304. #define EDITABLE_OFF(d, o) ((d)[o].ob_flags &= ~EDITABLE)
  305. #define RBUTTON_ON(d, o) ((d)[o].ob_flags |= RBUTTON)
  306. #define RBUTTON_OFF(d, o) ((d)[o].ob_flags &= ~RBUTTON)
  307. #define LASTOB_ON(d, o) ((d)[o].ob_flags |= LASTOB)
  308. #define LASTOB_OFF(d, o) ((d)[o].ob_flags &= ~LASTOB)
  309. #define TOUCHEXIT_ON(d, o) ((d)[o].ob_flags |= TOUCHEXIT)
  310. #define TOUCHEXIT_OFF(d, o) ((d)[o].ob_flags &= ~TOUCHEXIT)
  311. #define HIDETREE_ON(d, o) ((d)[o].ob_flags |= HIDETREE)
  312. #define HIDETREE_OFF(d, o) ((d)[o].ob_flags &= ~HIDETREE)
  313. #define INDIRECT_ON(d, o) ((d)[o].ob_flags |= INDIRECT)
  314. #define INDIRECT_OFF(d, o) ((d)[o].ob_flags &= ~INDIRECT)
  315.  
  316. /* Macros to acces various fields of ob_spec */
  317. #define TE_PTEXT(d, o) ((d)[o].ob_spec.ftext->te_ptext)
  318. #define TE_PTMPLT(d, o) ((d)[o].ob_spec.ftext->te_ptmplt)
  319. #define TE_PVALID(d, o) ((d)[o].ob_spec.ftext->te_pvalid)
  320. #define TE_COLOR(d, o) ((d)[o].ob_spec.ftext->te_color)
  321.  
  322. #define GSTRING(d, o) ((d)[o].ob_spec.string)
  323. #endif
  324.