home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / program / lynxlib / mygem.c < prev    next >
C/C++ Source or Header  |  1993-10-23  |  6KB  |  167 lines

  1. /* This source file is part of the LynxLib miscellaneous library by
  2. Robert Fischer, and is Copyright 1990 by Robert Fischer.  It costs no
  3. money, and you may not make money off of it, but you may redistribute
  4. it.  It comes with ABSOLUTELY NO WARRANTY.  See the file LYNXLIB.DOC
  5. for more details.
  6. To contact the author:
  7.     Robert Fischer \\80 Killdeer Rd \\Hamden, CT   06517   USA
  8.     (203) 288-9599     fischer-robert@cs.yale.edu                 */
  9.  
  10. #include <stddef.h>
  11. #include <nobdefs.h>
  12. #include <gemdefs.h>
  13. #include <mygem.h>
  14. #include <string.h>
  15. #include <e_osbind.h>
  16. /* --------------------------------------------------------- */
  17. gem_ok(s)    /* Puts up a GEM OK box */
  18. char *s;
  19. {
  20. char s1[100] = "[0][";
  21.     Cconout(7);    /* Bell */
  22.     strcat(s1, s);
  23.     strcat(s1, "][ OK ]");
  24.     form_alert(1, s1);
  25. }
  26. /* ------------------------------------------------------ */
  27. gem_err(s)    /* Puts up a GEM error box */
  28. char *s;
  29. {
  30. char s1[100] = "[1][";
  31.     Cconout(7);    /* Bell */
  32.     strcat(s1, s);
  33.     strcat(s1, "][ Abort ]");
  34.     form_alert(1, s1);
  35. }
  36. /* ------------------------------------------------------ */
  37. dial_form(d, n)    /* Does a form_dial on box d, with mode n */
  38. register OBJECT *d;
  39. int n;
  40. {
  41. int border;
  42.     border = d->ob_spec.boxchar.thickness;
  43.     if (border > 128) border = 256-border;
  44.     else border = 0;
  45.     if (border < 4) border = 4;
  46.  
  47.     form_dial(n, d->ob_x + (d->ob_width >> 1), d->ob_y + (d->ob_height >> 1),
  48.         0, 0, d->ob_x - border, d->ob_y - border,
  49.         d->ob_width + (border << 1), d->ob_height + (border << 1));
  50. }
  51. /* --------------------------------------------------------- */
  52. draw_box(d)        /* Draws a dialog box */
  53. OBJECT *d;
  54. {
  55.     dial_form(d, FMD_START);
  56.     objc_draw(d, 0, 256, 0, 0, 0, 0);
  57. }
  58. /* --------------------------------------------------------- */
  59. /* --------------------------------------------------------- */
  60. map_obtree(d, this, last, routine)
  61. /* General object tree walking routine.  Applies an operation
  62.     to every node in the tree. This routine was gotton out of
  63.     issue 5 of PROGEM, by Tim Oren. */
  64.  
  65. OBJECT *d;        /* Tree to walk */
  66. int this;        /* Node to start at. */
  67. int last;        /* Node to stop at (This node won't be affected) */
  68. int (*routine)();    /* Routine to apply to every node of tree */
  69.     /* routine takes the arguments: routine(d, obj)
  70.             OBJECT *d;    (* Address of object tree *)
  71.             int obj;    (* Object in object tree *)
  72.         If it wants no more walking on the subtree, it returns TRUE.
  73.         Normaly, it should return FALSE. */
  74. {
  75. int tmp1;
  76.     tmp1 = this;    /* Initialize to impossible value */
  77.     /* TAIL won't point to self! */
  78.     /* Look until final node, or off the end of the tree */
  79.     while (this != last && this != 0) {
  80.         /* Did we 'pop' into this node for the first time? */
  81.         if (tmp1 != d[this].ob_tail) {
  82.             tmp1 = this;
  83.             this = 0;
  84.             /* Apply operation, testing for rejection of sub-tree */
  85.             if ((*routine)(d, tmp1))
  86.                 this = d[tmp1].ob_head;
  87.             /* Subtree path not taken, so traverse right */
  88.             if (this == 0) this = d[tmp1].ob_next;
  89.         } else {    /* Revisiting parent */
  90.             tmp1 = this;
  91.             this = d[tmp1].ob_next;
  92.         }
  93.     }    /* while */
  94. }
  95. /* --------------------------------------------------------- */
  96. map_subtree(d, subtree, routine)
  97. /* Walks all the children of one node */
  98. OBJECT *d;        /* Tree to walk */
  99. int subtree;        /* Parent of all the children to walk */
  100. int (*routine)();    /* Routine to apply to every node of tree */
  101. {
  102.     map_obtree(d, d[subtree].ob_head, d[subtree].ob_tail, routine);
  103. }
  104. /* --------------------------------------------------------- */
  105. /* Another object state */
  106. #define WAS_ENABLED 0x40
  107.  
  108. disable_obj(d, obj)
  109. /* Disables an object, & sets the WAS_ENABLED flag if it was enabled. */
  110. OBJECT *d;
  111. int obj;
  112. {
  113.     if (!(d[obj].ob_state & DISABLED)) /* It was enabled, so disable it. */
  114.         d[obj].ob_state != DISABLED | WAS_ENABLED;
  115. }
  116.  
  117. enable_obj(d, obj)
  118. OBJECT *d;
  119. int obj;
  120. /* Undoes the work of disable_obj */
  121. {
  122.     if (d[obj].ob_state & WAS_ENABLED)    /* It was enabled, so enable it again. */
  123.         d[obj].ob_state &= ~DISABLED;
  124. }
  125. /* --------------------------------------------------------- */
  126. set_rchecked(d, obj, box, obox, redraw, checked)
  127. /* Sets a little box to checked or non-checked, and makes an object
  128.    subtree disappear, according to checked */
  129. OBJECT *d;        /* The object tree to work in */
  130. int obj;        /* Index into the tree */
  131. int box;        /* object to set or unset HIDETREE */
  132. int obox;        /* object to redraw, to see effects on box */
  133. BOOLEAN redraw;    /* Redraw obox? */
  134. BOOLEAN checked;    /* Boolean value representing checkedness of obj when */
  135.     /* flip_checked was called.  flip_checked() flips this value. */
  136.     /* TRUE means the box is checked, FALSE means it is unchecked. */
  137. {
  138.     if (checked) {    /* Set obj to checked, box to HIDETREE */
  139.         d[obj].ob_state |= CHECKED;
  140.         d[box].ob_flags |= HIDETREE;
  141.         map_subtree(d, box, &disable_obj);
  142.     } else {
  143.         d[obj].ob_state &= ~CHECKED;
  144.         d[box].ob_flags &= ~HIDETREE;
  145.         map_subtree(d, box, &enable_obj);
  146.     }
  147.     if (redraw) {
  148.         objc_draw(d, obox, 256, 0, 0, 0, 0);
  149.         objc_draw(d, obj, 256, 0, 0, 0, 0);
  150.     }
  151. }
  152. /* --------------------------------------------------------- */
  153. center_form(d)
  154. OBJECT *d;
  155. {
  156. xywh c;
  157.     form_center(d, XYWH_PTR(c));
  158. }
  159. /* --------------------------------------------------------- */
  160. mouse_up()
  161. /* Waits for the user to lift the mouse */
  162. {
  163. int dum;
  164.     evnt_button(1, 1, 0, &dum, &dum, &dum, &dum);
  165. }
  166. /* ---------------------------------------------------------------- */
  167.