home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / utility / gemfst15 / gemutil.doc < prev    next >
Encoding:
Text File  |  1990-06-29  |  27.7 KB  |  561 lines

  1.  
  2. **************************************************************************
  3. *
  4. * GEMUTIL.DOC - Descriptions of the utility functions in GEMFAST.
  5. *
  6. *  05/26/90 - v1.4
  7. *             The rsc_gstrings()/rsc_sstrings() routines now support ICONs.
  8. *             The following functions are new with this release:
  9. *               frm_dsdial()
  10. *               obj_rbselect()
  11. *               obj_xtfind()
  12. *
  13. *  08/28/89 - v1.3
  14. *             Massive changes have been made to the utilty routines, and
  15. *             to this document.  Your best bet is to read the entire doc
  16. *             over again.
  17. *
  18. *             Most of the changes involve renaming routines to move toward
  19. *             a consistant naming standard (which is to pave the way for
  20. *             things planned for v2.0).  I've done my best to cover the
  21. *             name changes with #define statements in GEMFAST.H, so your
  22. *             existing code should work, but you should make every effort
  23. *             to convert existing and new code to the new names.  Sorry,
  24. *             I guess I wasn't thinking far enough ahead when I did the
  25. *             first release.
  26. *             
  27. *             For all the renamed routines, I've put the old name in
  28. *             the title bar of the new function's name.
  29. **************************************************************************
  30.  
  31. This document describes the functions in the AESUTxxx modules of the
  32. GEMFAST bindings.  These are not GEM function calls, and thus are not
  33. documented in standard GEM programming guides.
  34.  
  35. Within this document, the most changes will be indicated by a vertical bar 
  36. and the change level (|vX.X).
  37.  
  38. Definitions:
  39.  
  40. NO_OBJECT - A constant defined in GEMFAST.H; it has a value of -1.  This
  41.             value is used by most object-related utilties to indicate that
  42.             no object was found with the criteria specified in the search
  43.             (eg, for objc_find(), obj_rbfind(), etc).
  44.  
  45. GRECT     - A graphics-type rectangle of the form x,y,w,h.  A GRECT
  46.             describes a screen area by defining the x/y of the upper left
  47.             corner, and the width and height of the area.
  48.  
  49. VRECT     - A vdi-type rectangle of the form x1,y1,x2,y2.  A VRECT
  50.             describes a screen area by defining the upper left and lower
  51.             right corners of the area in x/y coordinates.
  52.  
  53. xRECT     - Used to indicate that either of the above types is accepted.
  54.  
  55. ;*************************************************************************
  56. ; Rectangle utilties.
  57. ;*************************************************************************
  58.  
  59. ;-------------------------------------------------------------------------
  60. ; rc_copy
  61. ;-------------------------------------------------------------------------
  62.  
  63. void rc_copy (xRECT *source, xRECT *dest)
  64.  
  65.         This function copies a rectangle.  It will copy either a GRECT or
  66.         VRECT type rectangle.  More generally, it will copy 2 longwords
  67.         from source to dest, they don't have to be rectangles at all.
  68.          >> NOTE BACKWARDS ORDER OF SOURCE & DEST.  Sorry, not my decision.
  69.  
  70. ;-------------------------------------------------------------------------
  71. ; rc_equal
  72. ;-------------------------------------------------------------------------
  73.  
  74. bool rc_equal(xRECT *rect1, xRECT *rect2)
  75.         
  76.         This function tests 2 rectangles for equality and returns TRUE/FALSE
  77.         (1/0) accordingly.  Works on GRECT or VRECT type rectangles, but
  78.         both rectangles must be of the same type.  More generally, this
  79.         function compare 2 sets of 2 contiguous longwords.
  80.  
  81. ;-------------------------------------------------------------------------
  82. ; rc_intersect
  83. ;-------------------------------------------------------------------------
  84.      
  85. bool rc_intersect(GRECT *rect1, GRECT *rect2)
  86.  
  87.         This function computes the intersection of 2 rectangles.  It works
  88.         only for GRECT type rectangles.  The intersection is the parts of 
  89.         two rectangles which overlap each other; this function is typically
  90.         used in processing the AES window-update rectangle list.  The result
  91.         is placed into 'rect2', overlaying the original data (again, not my
  92.         decision).  TRUE/FALSE is returned, depending on whether the 
  93.         rectangles had a common intersected area or not; the values in 
  94.         'rect2' are modified regardless of whether there was an intersection or not.
  95.         If the rectangle representing the intersecting area has a width or
  96.         height of zero, this routine will return TRUE.
  97.  
  98. ;-------------------------------------------------------------------------
  99. ; rc_union
  100. ;-------------------------------------------------------------------------
  101.  
  102. void rc_union(GRECT *rect1, GRECT *rect2)
  103.  
  104.         This function computes the union of two rectangles.  The union is 
  105.         the single rectangle that encompases all the area defined by the 
  106.         individual rectangles.  It works only for GRECT type rectangles.  
  107.         The result is placed into 'rect2'.
  108.  
  109. ;-------------------------------------------------------------------------
  110. ; rc_vtog
  111. ;-------------------------------------------------------------------------
  112.      
  113. void rc_vtog(VRECT *rect1, GRECT *rect2)
  114.  
  115.         This function converts a VRECT rectangle to a GRECT rectangle.
  116.         Do not specify the same rectangle for input and output.
  117.  
  118. ;-------------------------------------------------------------------------
  119. ; rc_gtov
  120. ;-------------------------------------------------------------------------
  121.         
  122. void rc_gtov(GRECT *rect1, VRECT *rect2)
  123.  
  124.         This function converts a GRECT rectangle to a VRECT rectangle.
  125.         Do not specify the same rectangle for input and output.
  126.  
  127. ;-------------------------------------------------------------------------
  128. ; rc_vadjust            (formerly objclv_adjust)
  129. ; rc_gadjust            (formerly objclg_adjust)
  130. ;-------------------------------------------------------------------------
  131.         
  132. void rc_vadjust(VRECT *rect, int h_adjust, int v_adjust);
  133. void rc_gadjust(GRECT *rect, int h_adjust, int v_adjust);
  134.  
  135.         These functions expand or contract a rectangle by a given amount
  136.         in each axis. A positive value exands the area, a negative
  137.         value contracts it.  You must use rc_gadjust for GRECTs and
  138.         rc_vadjust for VRECTs.  
  139.         
  140. |v1.3   Negative results are prevented by the adjust routines; zero will be 
  141. |       placed into any rectangle structure element which would have been 
  142. |       negative after the adjustment.
  143.         
  144. ;*************************************************************************
  145. ; Object utilities.
  146. ;*************************************************************************
  147.  
  148. ;-------------------------------------------------------------------------
  149. ; obj_flchange          (formerly objfl_change)
  150. ;-------------------------------------------------------------------------
  151.  
  152. void obj_flchange(OBJECT *tree, int object, int flagsmask, int updateflag);
  153.  
  154.         This function sets or resets bits in an object's ob_flags field.
  155.         Depending on the setting of 'updateflag' the object is updated 
  156.         on the screen or not. (Update is done via objc_draw internally).
  157.         If the high bit of 'flagsmask' is set, the flags bits are reset,
  158.         otherwise they are set.  This allows the following syntax:
  159.            objfl_change(mytree, myobj,  HIDETREE, TRUE);
  160.            objfl_change(mytree, myobj, ~HIDETREE, FALSE);
  161.         The first case will set 'myobj' to hidden and will erase it from
  162.         the screen.  The second case will set 'myobj' to visible, but does
  163.         not update the screen.
  164.         
  165.         Note that you CAN use this function to hide and unhide trees
  166.         visibly on the screen.  When the objc_draw is called internally
  167.         by this function, the draw starts at the root of the tree, but is
  168.         clipped by the x/y/w/h of the object who's state is being changed.
  169.         This means that a flag change to HIDETREE with update will draw
  170.         the parents of the hidden object, effectively erasing it on the
  171.         screen.  The same holds true for setting an object to ~HIDETREE;
  172.         the object will be redrawn and become visible.
  173.  
  174. |v1.4   Be aware that the xywh sizes of the changed object are used in the 
  175. |       internal objc_draw() when redraw is requested.  For window-oriented
  176. |       programs, where some of the object tree might be outside a window's
  177. |       work area, it is best for the calling program to request no redraw,
  178. |       and then to handle the redraw itself, specifying the window's work
  179. |       area as a clipping rectangle.  (This is not new for v1.4, it just
  180. |       hasn't been documented as such before.)
  181.         
  182. ;--------- @FûÉ #KH⓪①Ññ✓✓פפ⇦⇦ii⇩⇩4œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ4(∮ü©ë⌐}לעìíਥöÇÇÇÇÇÇÇÇÇÇíÖ©חŒÉ②╱    >2⇩⓪╱08⇩ !    IJב⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧⇧IJבIJא⇩✓'>2⇩⓪╱08⇩ !@rB`p◆?⇩╱② !◆>✓⇩◆>2⇩ 0◆◆>✓⇩◆>⓪╱8╱ 8⓪⇧◆>✓⇩◆>&8╱ "╱8!    ⇧IJבIJב???????>╱✓╱@כΩץהΦפ∧ץ@µטΦµ@∧Σ@ΣטµטΦµ@גפΦµ@פץ@אץ@∧גקטהΦNµ@e to the new names.  Sorry,
  183. *             I guess I wasn't thinking far enough ahead when I did the
  184. *             first release.
  185. *             
  186. *             For all the renamed routines, I've put the old name in
  187. *             the title bar of the new function's name.
  188. **************************************************************************
  189.  
  190. This document describes the functions in the AESUTxxx modules of the
  191. GEMFAST bindings.  These are not GEM function calls, and thus are not
  192. documented in standard GEM programming guides.
  193.  
  194. Within this document, the most changes will be indicated by a vertical bar 
  195. and the change level (|vX.X).
  196.  
  197. Definitions:
  198.  
  199. NO_OBJECT - A constant defined in GEMFAST.H; it has a value of -1.  This
  200.             value is used by most object-related utilties to indicate that
  201.             no object was found with the criteria specified in the search
  202.             (eg, for objc_find(), obj_rbfind(), etc).
  203.  
  204. GRECT     - A graphics-type rectangle of the form x,y,w,h.  A GRECT
  205.             describes a screen area by defining the x/y of the upper left
  206.             corner, and the width and height of the area.
  207.  
  208. VRECT     - A vdi-type rectangle of the form x1,y1,x2,y2.  A VRECT
  209.             describes a screen area by defining the upper left and lower
  210.             right corners of the area in x/y coordinates.
  211.  
  212. xRECT     - Used to indicate that either of the above types is accepted.
  213.  
  214. ;*************************************************************************
  215. ; Rectangle utilties.
  216. ;*************************************************************************
  217.  
  218. ;-------------------------------------------------------------------------
  219. ; rc_copy
  220. ;-------------------------------------------------------------------------
  221.  
  222. void rc_copy (xRECT *source, xRECT *dest)
  223.  
  224.         This function copies a rectangle.  It will copy either a GRECT or
  225.         VRECT type rectangle.  More generally, it will copy 2 longwords
  226.         from source to dest, they don't have to be rectangles at all.
  227.          >> NOTE BACKWARDS ORDER OF SOURCE & DEST.  Sorry, not my decision.
  228.  
  229. ;-------------------------------------------------------------------------
  230. ; rc_equal
  231. ;-------------------------------------------------------------------------
  232.  
  233. bool rc_equal(xRECT *rect1, xRECT *rect2)
  234.         
  235.         This function tests 2 rectangles for equality and returns TRUE/FALSE
  236.         (1/0) accordingly.  Works on GRECT or VRECT type rectangles, but
  237.         both rectangles must be of the same type.  More generally, this
  238.         function compare 2 sets of 2 contiguous longwords.
  239.  
  240. ;-------------------------------------------------------------------------
  241. ; rc_intersect
  242. ;-------------------------------------------------------------------------
  243.      
  244. bool rc_intersect(GRECT *rect1, GRECT *rect2)
  245.  
  246.         This function computes the intersection of 2 rectangles.  It works
  247.         only for GRECT type rectangles.  The intersection is the parts of 
  248.         two rectangles which overlap each other; this function is typically
  249.         used in processing the AES window-update rectangle list.  The result
  250.         is placed into 'rect2', overlaying the original data (again, not my
  251.         decision).  TRUE/FALSE is returned, depending on whether the 
  252.         rectangles had a common intersected area or not; the values in 
  253.         'rect2' are modified regardless of whether there was an intersection or not.
  254.         If the rectangle representing the intersecting area has a width or
  255.         height of zero, this routine will return TRUE.
  256.  
  257. ;-------------------------------------------------------------------------
  258. ; rc_union
  259. ;-------------------------------------------------------------------------
  260.  
  261. void rc_union(GRECT *rect1, GRECT *rect2)
  262.  
  263.         This function computes the union of two rectangles.  The union is 
  264.         the single rectangle that encompases all the area defined by the 
  265.         individual rectangles.  It works only for GRECT type rectangles.  
  266.         The result is placed into 'rect2'.
  267.  
  268. ;-------------------------------------------------------------------------
  269. ; rc_vtog
  270. ;-------------------------------------------------------------------------
  271.      
  272. void rc_vtog(VRECT *rect1, GRECT *rect2)
  273.  
  274.         This function converts a VRECT rectangle to a GRECT rectangle.
  275.         Do not specify the same rectangle for input and output.
  276.  
  277. ;-------------------------------------------------------------------------
  278. ; rc_gtov
  279. ;-------------------------------------------------------------------------
  280.         
  281. void rc_gtov(GRECT *rect1, VRECT *rect2)
  282.  
  283.         This function converts a GRECT rectangle to a VRECT rectangle.
  284.         Do not specify the same rectangle for input and output.
  285.  
  286. ;-------------------------------------------------------------------------
  287. ; rc_vadjust            (formerly objclv_adjust)
  288. ; rc_gadjust            (formerly objclg_adjust)
  289. ;-------------------------------------------------------------------------
  290.         
  291. void rc_vadjust(VRECT *rect, int h_adjust, int v_adjust);
  292. void rc_gadjust(GRECT *rect, int h_adjust, int v_adjust);
  293.  
  294.         These functions expand or contract a rectangle by a given amount
  295.         in each axis. A positive value exands the area, a negative
  296.         value contracts it.  You must use rc_gadjust for GRECTs and
  297.         rc_vadjust for VRECTs.  
  298.         
  299. |v1.3   Negative results are prevented by the adjust routines; zero will be 
  300. |       placed into any rectangle structure element which would have been 
  301. |       negative after the adjustment.
  302.         
  303. ;*************************************************************************
  304. ; Object utilities.
  305. ;*************************************************************************
  306.  
  307. ;-------------------------------------------------------------------------
  308. ; obj_flchange          (formerly objfl_change)
  309. ;-------------------------------------------------------------------------
  310.  
  311. void obj_flchange(OBJECT *tree, int object, int flagsmask, int updateflag);
  312.  
  313.         This function sets or resets bits in an object's ob_flags field.
  314.         Depending on the setting of 'updateflag' the object is updated 
  315.         on the screen or not. (Update is done via objc_draw internally).
  316.         If the high bit of 'flagsmask' is set, the flags bits are reset,
  317.         otherwise they are set.  This allows the following syntax:
  318.            objfl_change(mytree, myobj,  HIDETREE, TRUE);
  319.            objfl_change(mytree, myobj, ~HIDETREE, FALSE);
  320.         The first case will set 'myobj' to hidden and will erase it from
  321.         the screen.  The second case will set 'myobj' to visible, but does
  322.         not update the screen.
  323.         
  324.         Note that you CAN use this function to hide and unhide trees
  325.         visibly on the screen.  When the objc_draw is called internally
  326.         by this function, the draw starts at the root of the tree, but is
  327.         clipped by the x/y/w/h of the object who's state is being changed.
  328.         This means that a flag change to HIDETREE with update will draw
  329.         the parents of the hidden objec-----------------------------
  330. ; obj_parent
  331. ;-------------------------------------------------------------------------
  332.  
  333. int  obj_parent(OBJECT *tree, int curentobj);
  334.  
  335.         This function returns the index of the parent object of the
  336.         specified object.  By definition, the root object in a tree has
  337.         no parent, 0 will be returned (as if the root were its own parent).
  338.         This function is useful for things like building your own radio
  339.         button handler using evnt_multi().
  340.  
  341. ;-------------------------------------------------------------------------
  342. ; obj_xtfind
  343. ;-------------------------------------------------------------------------
  344.  
  345. int  obj_xtfind(OBJECT *tree, int parent, int xtype);
  346.  
  347.         This function returns the index of the child object within 'parent'
  348.         which has the specified extended object type.  The extended object
  349.         type is encoded within the high byte of the ob_type field, and is
  350.         useful for categorizing objects by function, or for connecting
  351.         objects to array elements by using the extended type as an index.
  352.         If no object with the given type is found, NO_OBJECT is returned.
  353.         
  354. |v1.4   This function is new with this release.  It is the functional 
  355. |       equivelent of the old find_exttype() routine from the 'canned
  356. |       source' library.
  357.  
  358. ;*************************************************************************
  359. ; Resource utilties.
  360. ;*************************************************************************
  361.  
  362. ;-------------------------------- @FûÉ #KH⓪①Ññ✓✓פפפפפפפפפפפפפפפפפפפפפפפפפפססúØ◆'65≈77G&ûµw0סúØפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפפססáסºf÷ûB◆'65≈77G&ûµw2ä⌠$ñT5B⇩ºG&VRאסó⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩╱ûτB╱÷&ú②ה6å⑦"⇩º◆G#②ijסó⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩❎À÷&ú"ו◆G#"א⇩ΓΓΓ╱÷&ªΓו◆G&Γדססó⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩צ②ôãסó⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩סó⇩⇩⇩⇩⇩⇩⇩❎Fåù2╱gVµ7Fû÷Γ◆6WG2╱÷µR╱≈"╱ש≈&R◆7G&ûµr◆╱÷ûτFW'2◆vùFåûΓ╱⑥Γ╱÷&ªV7@סó⇩⇩⇩⇩⇩⇩⇩◆G&VRΓ⇩⇦ùB◆VµFW'7F⑥µG2◆FåR╱FûffW&Vµ6R╱&WGvVVΓ❎5E$öΣrא⇦%UED⌠Γא╱⑥µ@סó⇩⇩⇩⇩⇩⇩⇩❎DUàB╱÷&ªV7         describes a screen area by defining the x/y of the upper left
  363.             corner, and the width and height of the area.
  364.  
  365. VRECT     - A vdi-type rectangle of the form x1,y1,x2,y2.  A VRECT
  366.             describes a screen area by defining the upper left and lower
  367.             right corners of the area in x/y coordinates.
  368.  
  369. xRECT     - Used to indicate that either of the above types is accepted.
  370.  
  371. ;*************************************************************************
  372. ; Rectangle utilties.
  373. ;*************************************************************************
  374.  
  375. ;-------------------------------------------------------------------------
  376. ; rc_copy
  377. ;-------------------------------------------------------------------------
  378.  
  379. void rc_copy (xRECT *source, xRECT *dest)
  380.  
  381.         This function copies a rectangle.  It will copy either a GRECT or
  382.         VRECT type rectangle.  More generally, it will copy 2 longwords
  383.         from source to dest, they don't have to be rectangles at all.
  384.          >> NOTE BACKWARDS ORDER OF SOURCE & DEST.  Sorry, not my decision.
  385.  
  386. ;-------------------------------------------------------------------------
  387. ; rc_equal
  388. ;-------------------------------------------------------------------------
  389.  
  390. bool rc_equal(xRECT *rect1, xRECT *rect2)
  391.         
  392.         This function tests 2 rectangles for equality and returns TRUE/FALSE
  393.         (1/0) accordingly.  Works on GRECT or VRECT type rectangles, but
  394.         both rectangles must be of the same type.  More generally, this
  395.         function compare 2 sets of 2 contiguous longwords.
  396.  
  397. ;-------------------------------------------------------------------------
  398. ; rc_intersect
  399. ;-------------------------------------------------------------------------
  400.      
  401. bool rc_intersect(GRECT *rect1, GRECT *rect2)
  402.  
  403.         This function computes the intersection of 2 rectangles.  It works
  404.         only for GRECT type rectangles.  The intersection is the parts of 
  405.         two rectangles which overlap each other; this function is typically
  406.         used in processing the AES window-update rectangle list.  The result
  407.         is placed into 'rect2', overlaying the original data (again, not my
  408.         decision).  TRUE/FALSE is returned, depending on whether the 
  409.         rectangles had a common intersected area or not; the values in 
  410.         'rect2' are modified regardless of whether there was an intersection or not.
  411.         If the rectangle representing the intersecting area has a width or
  412.         height of zero, this routine will return TRUE.
  413.  
  414. ;-------------------------------------------------------------------------
  415. ; rc_union
  416. ;-------------------------------------------------------------------------
  417.  
  418. void rc_union(GRECT *rect1, GRECT *rect2)
  419.  
  420.         This function computes the union of two rectangles.  The union is 
  421.         the single rectangle that encompases all the area defined by the 
  422.         individual rectangles.  It works only for GRECT type rectangles.  
  423.         The result is placed into 'rect2'.
  424.  
  425. ;-------------------------------------------------------------------------
  426. ; rc_vtog
  427. ;-------------------------------------------------------------------------
  428.      
  429. void rc_vtog(VRECT *rect1, GRECT *rect2)
  430.  
  431.         This function converts a VRECT rectangle to a GRECT rectangle.
  432.         Do not specify the same rectangle for input and output.
  433.  
  434. ;-------------------------------------------------------------------------
  435. ; rc_gtov
  436. ;-------------------------------------------------------------------------
  437.         
  438. void rc_gtov(GRECT *rect1, VRECT *rect2)
  439.  
  440.         This function converts a GRECT rectangle to a VRECT rectangle.
  441.         Do not specify the same rectangle for input and output.
  442.  
  443. ;-------------------------------------------------------------------------
  444. ; rc_vadjust            (formerly objclv_adjust)
  445. ; rc_gadjust            (formerly objclg_adjust)
  446. ;-------------------------------------------------------------------------
  447.         
  448. void rc_vadjust(VRECT *rect, int h_adjust, int v_adjust);
  449. void rc_gadjust(GRECT *rect, int h_adjust, int v_adjust);
  450.  
  451.         These functions expand or contract a rectangle by a given amount
  452.         in each axis. A positive value exands the area, a negative
  453.         value contracts it.  You must use rc_gadjust for GRECTs and
  454.         rc_vadjust for VRECTs.  
  455.         
  456. |v1.3   Negative results are prevented by the adjust routines; zero will be 
  457. |       placed into any rectangle structure element which would have been 
  458. |       negative after the adjustment.
  459.         
  460. ;*************************************************************************
  461. ; Object utilities.
  462. ;*************************************************************************
  463.  
  464. ;-------------------------------------------------------------------------
  465. ; obj_flchange          (formerly objfl_change)
  466. ;-------------------------------------------------------------------------
  467.  
  468. void obj_flchange(OBJECT *tree, int object, int flagsmask, int updateflag);
  469.  
  470.         This function sets or resets bits in an object's ob_flags field.
  471.         Depending on the setting of 'updateflag' the object is updated 
  472.         on the screen or not. (Update is done via objc_draw internally).
  473.         If the high bit of 'flagsmask' is set, the flags bits are reset,
  474.         otherwise they are set.  This allows the following syntax:
  475.            objfl_change(mytree, myobj,  HIDETREE, TRUE);
  476.            objfl_change(mytree, myobj, ~HIDETREE, FALSE);
  477.         The first case will set 'myobj' to hidden and will erase it from
  478.         the screen.  The second case will set 'myobj' to visible, but does
  479.         not update the screen.
  480.         
  481.         Note that you CAN use this function to hide and unhide trees
  482.         visibly on the screen.  When the objc_draw is called internally
  483.         by this function, the draw starts at the root of the tree, but is
  484.         clipped by the x/y/w/h of the object who's state is being changed.
  485.         This means that a flag change to HIDETREE with update will draw
  486.         the parents of the hidden objec    " ",                    /* 1 blank line between text & buttons */
  487.             ""};                    /* NULL string terminates the list     */
  488.             
  489.         char    help1_buttons[] = {
  490.             "NEXT",
  491.             "DONE", 
  492.             """};                   /* NULL string terminates the list     */
  493.         int     btn;
  494.         
  495.         btn = frm_dsdial(help1_screen, help1_buttons, TRUE);
  496.         if (btn == 0) {
  497.             /* show second help screen */
  498.         } 
  499.  
  500.         While this routine can be incredibly useful in handling help text,
  501.         it should be noted that it is rather large.  After linking, it will
  502.         add about 1.5k to the size of your application (making it the largest
  503.         entity in the GEMFAST system).  
  504.  
  505. |v1.4   This routine is new with this release.
  506.  
  507. ;*************************************************************************
  508. ; Graphics Utilities.
  509. ;  These utilties are NOT available in C source code form, as they use
  510. ;  the Line-A TOS interface, which must be accessed via assembler code.
  511. ;*************************************************************************
  512.  
  513. ;-------------------------------------------------------------------------
  514. ; gra_qonmouse          (formerly graqon_mouse)
  515. ; gra_qofmouse          (formerly graqof_mouse)
  516. ;-------------------------------------------------------------------------
  517.  
  518. void graqon_mouse();
  519. void graqof_mouse();
  520.  
  521.         These routines turn the mouse pointer on and off quickly (using
  522.         the Line-A HideMouse/ShowMouse routines).  They will execute much
  523.         faster than the equivelant graf_mouse() calls, and they behave
  524. |v1.3   in a similar manner.  Specifically, the graf_mouse() calls track 
  525. |       the number of Hide/Show calls and if you 'hide' the mouse 3 times, 
  526. |       you must use the 'show' call 3 times before the mouse reappears.  
  527. |       These routines will behave in the same way (as of v1.3).  
  528.  
  529. ;-------------------------------------------------------------------------
  530. ; gra_qmstate           (formerly graq_mstate)
  531. ;-------------------------------------------------------------------------
  532.  
  533. graq_mstate(int *mousex, int *mousey, int *mousebtns);
  534.  
  535.         This routine returns the mouse x/y location and button state
  536.         quickly, using the Line-A variable structure as the source of 
  537.         information.  It is much faster than the graf_mkstate() call, and
  538.         it does not return the keyboard state information.  If you have
  539.         an application full of graf_mkstate() calls that don't use the
  540.         keystate info, you can code 
  541.           #define graf_mkstate(a,b,c,d) graq_mstate((a),(b),(c))
  542.         at the top of your program and instantly convert to the faster
  543.         routine.  (Caveat:  This routine is NOT well-tested in v1.0).
  544.         
  545. |v1.3   (NOTE:  I've had problems with using this routine in conjunction
  546. |       with evnt_mouse and evnt_multi type calls.  It seems that if you
  547. |       use the AES graf_mkstate() call it will (maybe?) clear some flag
  548. |       indicating a mouse-related event is pending.  When you use this
  549. |       Line-A routine, the event is left pending, and the next evnt_????
  550. |       call doesn't work as you'd expect.  I know, I know, I'm not being
  551. |       very clear; that's only because I haven't looked into it too 
  552. |       closely.  All I can say for sure is that some well-tested code
  553. |       broke when I #defined graf_mkstate to invoke this routine, and when
  554. |       I put it back, the code started working again.  Other code, however
  555. |       works just fine with graf_mkstate #define'd to this routine.- Ian)
  556.  
  557. ;*************************************************************************
  558. ;* End of doc.
  559. ;*************************************************************************
  560.  
  561.