home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / mac / 1000 / CCE_1024.ZIP / CCE_1024 / SOZLIB07.LZH / SOZDISTR / DOC / XGEMFAST.TXT < prev   
Text File  |  1994-07-25  |  32KB  |  920 lines

  1.  
  2.     Sozobon library of AES and VDI bindings
  3.  
  4. This library is based on gemfast lib version 1.5 by Ian Lepore. It is called
  5. xgemfast, cause of some changes we did on it. The header file you have to
  6. include using this library is called xgemfast.h accordingly. So you can make
  7. use of other (original) versions of GEMFAST, too.
  8.  
  9. 1. header files
  10.  
  11. Use 'xgemfast.h' as header file for this extended gemlib version.
  12.  
  13.  
  14. 2. xvdifast.a
  15. It is based on vdifast library.
  16.  
  17. optimized (Holger Weets) and bugs fixed (he and me)
  18.  
  19. version number added:
  20. extern int _xvdifast
  21. lowbyte is revision, highbyte is version number.
  22.  
  23. 2 functions added:
  24.     int vq_gdos()
  25.         returns FALSE if no GDOS is present (this was in gemlib.a)
  26.  
  27.     void c_vdi(int *pb[5])
  28.         interface for your own vdi functions (because they are not
  29.         in this standard binding, etc.)
  30.         all touched registers but D0 are saved by this function;
  31.         it is not called vdi() cause it has an argument;
  32.        usage:        
  33.         cause all vdi arrays are some dynamic binding (on stack)
  34.         you have to create your own arrays when using this function:
  35.         
  36.         int contrl[12];
  37.         int intin[1];    /* see what you need */
  38.         int intout[1];    /* see what you need */
  39.         int ptsin[1];    /* see what you need */
  40.         int ptsout[1];    /* see what you need */
  41.         
  42.         int *PB[5]; /* where: */
  43.  
  44.         PB[0] = contrl;
  45.         PB[1] = intin;
  46.         PB[2] = ptsin;
  47.         PB[3] = intout;
  48.         PB[4] = ptsout;
  49.         
  50.         /* fill in the values from parameters */
  51.         contrl[0] = opcode
  52.         contrl[1] = #ptsin  /* (number of values in ptsin) */
  53.         contrl[2] = 0
  54.         contrl[3] = #intin  /* (number of values in intin) */
  55.         contrl[4] = 0
  56.         contrl[5] = sub_opcode
  57.         contrl[6] = vdi_handle
  58.         /* contrl[7] = 
  59.            ...      maybe some more values */
  60.            
  61.         c_vdi(PB);
  62.         
  63.         /* maybe some code for getting values */
  64.  
  65.         /* the function tells you : */
  66.         /* in contrl[2]  #ptsout */
  67.         /* in contrl[4]  #intout */
  68.         
  69.         return(intout[0]); /* this is default */
  70.  
  71.  
  72. 3. xaesfast.a
  73.  
  74. It is based on aesfast library, version 1.5.
  75.  
  76. optimized (Holger Weets) and bugs fixed (he and me)
  77.  
  78. The following variables defined by AES are visible to your source code,
  79. after including 'xgemfast.h'.
  80.  
  81. These AES-defined variables are documented in any manual or textbook on GEM
  82. programming.  The gl_ names in this group are just aliases for the items in
  83. the global array.  (That is, gl_apversion is just another name for
  84. global[0], etc.)
  85.  
  86. int    global[15];      aliased by following names...
  87.  
  88. int    gl_apversion;    the AES version number (BCD)        global[0]
  89.             != 0 if any AES is present(after appl_init())
  90. int    gl_apcount;    max # of concurrent AES applications    global[1]
  91.             == -1 if MultiTOS or another multitasking TOS
  92.             is running 
  93. int    gl_apid;    id of the current application        global[2]
  94.             the value appl_init() returned
  95. long    gl_apprivate;    anything application wants to store    global[3,4]
  96. OBJECT    **gl_apptree;    pointer to array of object tree ptrs    global[5,6]
  97. RSHDR    *gl_aprshdr;    pointer to head of rsc data        global[7,8]
  98.                         (new name for gl_ap1resv) 
  99. RSHDR    *gl_ap1resv;    address of resource file memory        global[7,8]
  100.                         (Digital Research calls it ap_pmem)
  101. int    gl_ap2resv[6];    more entries in global array
  102.  
  103.  
  104. Digital Research documented additionally following fields:
  105.             global[9]    ap_lmem 
  106.             global[10]    ap_nplanes
  107.             global[11] to global[14] reserved
  108.  
  109.  
  110. version number added:
  111.     extern int _xaesfast
  112.     lowbyte is revision, highbyte is version number.
  113.  
  114. int fsel_emulation(char *PATH, char *name, int *button, char *title) 
  115.  
  116.      This function is the original AESFAST function in which tested for 
  117. the presence of >= TOS 1.4 and (if not found) simulated the modern file 
  118. selector.  
  119.  
  120.      SEE:  fsel_sm(), fsel_input(), fsel_emulation()
  121.            in GEMLIB.A:  fsel(), fsel_e() and fsel_ex() which is the 
  122.                      same like fsel_sm() function
  123.  
  124. int fsel_sm(char *PATH, char *name, int *button, char *title) 
  125.  
  126.      This function (small emulation) replaces the AES call fsel_exinput(),
  127. testing for the presence of >= TOS 1.4 and (if not found) simulated the
  128. modern file selector.  This function does the same thing, like
  129. fsel_emulation() but has a new binding and is considerably smaller.  It
  130. should reduce the size of any program using the old binding by 700 bytes. 
  131.  
  132.  
  133. int fsel_exinput(char *PATH, char *name, int *button, char *title) 
  134.  
  135.      This function replaces the function in AESFAST which tested for 
  136. the presence of >= TOS 1.4 and (if not found) simulated the modern file 
  137. selector.  This function @{B}only@{b} tests wether to call fsel_exinput() or
  138. fsel_input() depending on the AES version.
  139.  
  140.  
  141. int fsel_input(char *PATH, char *name, int *button) 
  142.  
  143.      Just a call of AES fsel_input() function.
  144.  
  145.  
  146. int evnx_multi(XMULTI *xm);
  147.  
  148.      Call evnt_multi() passing just a single pointer.
  149.  
  150. Input:    
  151.      The xm parameter is a pointer to an XMULTI structure.
  152.  
  153. Returns:  
  154.      The mask of events which occurred; xm->mwhich.
  155.  
  156. Details:  
  157.      This function keeps all the input and output parms for an evnt_multi()
  158. call in a single structure.  This is more efficient than stacking and
  159. unstacking 50-some bytes of parameters on each call, and it also allows you
  160. to "pass off" event handling to a series of event handlers by passing a
  161. single pointer to each handler.  GemFast 2.0 will make heavy use of the
  162. latter technique. 
  163.  
  164.  
  165. void rsc_treefix(OBJECT *ptree)
  166.  
  167.      Performs xywh fixup on all objects in a tree.
  168.  
  169. Input:    
  170.      The ptree parameter is a pointer to the tree which needs
  171.      resolution fixup.
  172.  
  173. Details:
  174.      This function calls rsrc_obfix() for every object in the tree.  It's
  175. just a shortcut for calling the GEM object fixup for all objects in a tree,
  176. and does not provide any custom resolution fixup, scaling, etc. 
  177.      Use this function to do fixup on resource trees which are embedded in
  178. your source code.  Do NOT use this function on trees loaded via rsrc_load(),
  179. since that function automatically applies resolution fixup as it loads the
  180. resource data. 
  181.  
  182.  
  183. void rsc_gstrings(OBJECT *ptree, int object, char **ppstr, ...)
  184.  
  185.      Get the string pointers for one or more string-related
  186. objects in a dialog tree.
  187.  
  188. Input:    
  189.      The ptree parameter is a pointer to the dialog tree
  190.      containing the string-related objects.
  191.      The object parameter is the index of the first object for which you
  192.      want to retrieve the string pointer. 
  193.      The ppstr parameter is a pointer to your variable (char* type). The
  194.      string pointer for the object is stored here. 
  195.      The ... parameters are additional object/ppstr pairs.  Use an object
  196.      number of -1 to indicate the end of the list. 
  197.  
  198. Details:  
  199.      This allows you to easily initialize your local string pointers to
  200. point at string-related objects in a dialog tree.  The description of the
  201. obj_ppstring() function contains details on what objects are string-related. 
  202.      You must specify at least one object/ppstr pair following the tree
  203. pointer in the call.  You can specify any number of pairs following the
  204. first one to retrieve the pointers for more than one object with a single
  205. call.  Specify -1 for the index following the last pair.  (There's no need
  206. to supply a pointer to go with the -1 object index.)
  207.     This function understands how to find the real string pointer for each
  208. of string-related object type.  It copes with the INDIRECT flag.  It
  209. understands extended G_USERDEF objects, where ob_spec has been moved into
  210. the XUSERBLK.
  211.      This function gives you pointers which point into the resource data
  212. area.  If you modify the strings using these pointers, please remember that
  213. your resource editor has only allocated enough space in the resource data to
  214. hold the strings as you typed them when you built the object.  In other
  215. words, you can define a button as "OK", and then at runtime use this
  216. function to get a pointer to the button text.  But, if you do something like
  217. strcpy(buttonptr, "Not Okay"); then you end up corrupting the resource data,
  218. because you copied an 8-character string into a space only 2 characters
  219. wide. 
  220.      You can avoid this modify-in-place problem by defining your strings big
  221. enough in the resource editor, or by using rsc_sstrings() to make the
  222. objects point to strings allocated within your program rather than working
  223. with the strings directly in the resource data area.  In this case, you can
  224. define dummy strings (I use "x") in the resource editor to avoid wasting
  225. space, since the strings you define are not used at runtime anyway after you
  226. use rsc_sstrings() to point objects at your program-defined strings. 
  227.  
  228.  
  229. void    rsc_sstrings(OBJECT *ptree, int object, char *pstr, ...)
  230.  
  231.      Set the string pointers for one or more string-related objects in a
  232. dialog tree. 
  233.  
  234. Input:  
  235.      The ptree parameter is a pointer to the dialog tree containing
  236.      the string-related objects. 
  237.      The object parameter is the index of the first object for which
  238.      you want to set the string pointer. 
  239.      The pstr parameter is a pointer to your string variable (char
  240.      [] or "" type). This pointer is copied into the string object's
  241.      string pointer field (ob_spec, te_ptext, etc).
  242.  
  243.      The ... parameters are additional object/pstr pairs.  Use an
  244.      object number of -1 to indicate the end of the list.
  245.  
  246. Details:  
  247.      This allows you to easily initialize string-related objects in a dialog
  248. tree to point at strings defined within your program.  The description of
  249. the obj_ppstring() function contains details on what objects are
  250. string-related. 
  251.      You must specify at least one object/pstr pair following the tree
  252. pointer in the call.  You can specify any number of pairs following the
  253. first one to retrieve the pointers for more than one object with a single
  254. call.  Specify -1 for the index following the last pair.  (There's no need
  255. to supply a pointer to go with the -1 object index.)
  256.       This function understands how to find the real string pointer for each
  257. of string-related object type.  It copes with the INDIRECT flag.  It
  258. understands extended G_USERDEF objects, where ob_spec has been moved into
  259. the XUSERBLK.
  260.       This function attaches string data defined in your program to
  261. string-related objects in your dialog trees.  This is especially handy for
  262. editable text objects, because some resource editors don't allocate enough
  263. space for the object in the resource data.  If you define an editable text
  264. object and supply a te_pvalid string that allows 20 chars of input, but you
  265. define an initial string of "abc" for the field, some resource editors will
  266. only allocate 3 bytes of resource string space for the field.  When the user
  267. enters 20 chars of data into the 3-byte field, other resource data gets
  268. corrupted.  To avoid this, you can allocate a 20-byte character array in
  269. your program, and use this function to make the editable field's te_ptext
  270. pointer point at your array instead of the 3-byte area in the resource data. 
  271.  
  272.  
  273. long   rsc_gspec(tree, object);
  274.  
  275.      Get ob_spec value from an object within a tree.
  276.  
  277. Input: 
  278.  
  279. Details:
  280.  
  281.     This function gets one string ob_spec from within a resource tree.  It
  282. knows the difference between text and non-text objects, and gets the ob_spec
  283. value as appropriate.  It also understands INDIRECT objects. 
  284.  
  285.  
  286. char *rsc_gpointer (tree, object);
  287.  
  288.      Get pointer to single string within a tree.
  289.  
  290. Input:
  291.  
  292. Details:
  293.  
  294.      This function gets one string pointerfrom within a resource tree.  It
  295. knows the difference between text and non-text objects, and gets the
  296. te_ptext value as appropriate.  It also understands INDIRECT objects. 
  297.  
  298.  
  299. void rsc_sspec(tree, object, obspec_value);
  300.  
  301.      This function sets one ob_spec from an object within
  302. a resource tree.
  303.  
  304. Input:
  305.  
  306.  
  307.      This function sets one ob_spec from within a resource tree.  It knows
  308. the difference between text and non-text objects, and sets the ob_spec value
  309. as appropriate.  It also understands INDIRECT objects. 
  310.  
  311.  
  312. void rsc_spointer(tree, object, pointer);
  313.  
  314.      This function sets one string pointer from an object within
  315. a resource tree.
  316.  
  317. Input:
  318.  
  319.  
  320.      This function sets one string pointer from within a resource tree.  It
  321. knows the difference between text and non-text objects, and sets the
  322. te_ptext value as appropriate.  It also understands INDIRECT objects. 
  323.  
  324.  
  325. GRECT * rc_gadjust(GRECT *prect, int hadjust, int vadjust)
  326.  
  327.      Adjust the size of a GRECT rectangle.
  328.  
  329. Input:    
  330.      The prect parameter is a pointer to the rectangle to be adjusted.
  331.  
  332.      The hadjust parameter is the number of pixels to adjust by in the
  333.      horizontal direction.  Positive values enlarge the rectangle;  negative
  334.      values shrink it. 
  335.  
  336.      The vadjust parameter is the number of pixels to adjust by in the
  337.      vertical direction.  Positive values enlarge the rectangle;  negative
  338.      values shrink it. 
  339.  
  340. Returns:    
  341.      The pointer to the rectangle.
  342.  
  343. Details:  
  344.      This function makes a GRECT rectangle describe a larger or smaller
  345. area.  The rectangle remains centered on its original location, and grows or
  346. shrinks equally on each side in the adjusted dimension(s).
  347.      The x/y locations are never allowed to go negative (they are clipped to
  348. zero). The w/h sizes are never allowed to fall below 1.
  349.  
  350.  
  351. VRECT *  rc_vadjust(VRECT *prect, int hadjust, int vadjust)
  352.  
  353.      Adjust the size of a VRECT rectangle.
  354.  
  355. Input:
  356.      The prect parameter is a pointer to the rectangle to be adjusted.
  357.  
  358.      The hadjust parameter is the number of pixels to adjust by in the
  359.      horizontal direction.  Positive values enlarge the rectangle;  negative
  360.      values shrink it. 
  361.  
  362.      The vadjust parameter is the number of pixels to adjust by in the
  363.  
  364.      vertical direction.  Positive values enlarge the rectangle;  negative
  365.      values shrink it. 
  366.  
  367. Returns:  
  368.      The pointer to the rectangle.
  369.  
  370. Details:  
  371.      This function makes a VRECT rectangle describe a larger or smaller
  372. area.  The rectangle remains centered on its original location, and grows or
  373. shrinks equally on each side in the adjusted dimension(s).
  374.      The x/y locations are never allowed to go negative (they are clipped to
  375. zero). The w/h sizes are never allowed to fall below 1.
  376.  
  377.  
  378. GRECT *rc_vtog(VRECT *pvrect, GRECT *pgrect)
  379.  
  380.     Convert a VRECT rectangle to a GRECT rectangle.
  381.  
  382. Input:
  383.     The pvrect parameter is a pointer to the source VRECT.
  384.     The pgrect parameter is a pointer to the destination GRECT.
  385.  
  386. Details:  
  387.  
  388.     The source VRECT is converted to the equivalent GRECT. Do NOT specify
  389. the same rectangle for source and destination. 
  390.      A VRECT describes an area by the x and y coordinates of diagonally
  391. opposite corners.  A GRECT describes an area by x, y, width and height. 
  392. This function translates a VRECT to a GRECT as follows: 
  393.  
  394.                pgrect->g_x = pvrect->v_x1;
  395.                pgrect->g_y = pvrect->v_y1;
  396.                pgrect->g_w = pvrect->v_x1 - pvrect->g_x2 + 1;
  397.                pgrect->g_h = pvrect->v_y1 - pvrect->g_y2 + 1;
  398.  
  399.  
  400. VRECT *rc_gtov(GRECT *pgrect, VRECT *pvrect)
  401.  
  402.      Convert a GRECT rectangle to a VRECT rectangle.
  403.  
  404. Input:    
  405.      The pgrect parameter is a pointer to the source GRECT.
  406.      The pvrect parameter is a pointer to the destination VRECT.
  407.  
  408. Returns:
  409.      The pointer to the destination VRECT.
  410.  
  411. Details:  
  412.      The source GRECT is converted to the equivalent VRECT. Do NOT specify
  413. the same rectangle for source and destination. 
  414.      A GRECT describes an area by x, y, width and height.  A VRECT describes
  415. an area by the x and y coordinates of diagonally opposite corners.  This
  416. function translates a GRECT to a VRECT as follows: 
  417.  
  418.               pvrect->v_x1 = pgrect->g_x;
  419.               pvrect->v_y1 = pgrect->g_y;
  420.               pvrect->v_x2 = pgrect->g_x + pgrect->g_w - 1;
  421.               pvrect->v_y2 = pgrect->g_y + pgrect->g_h - 1;
  422.  
  423.  
  424. void rc_union(GRECT *sourcerect, GRECT *destrect)
  425.  
  426.      Computes a single rectangle that encompasses the area of
  427. both the original rectangles.
  428.  
  429. Input:    
  430.      The sourcerect parameter is a pointer to the source rectangle. 
  431.  
  432.      The destrect parameter is a pointer to the destination rectangle.  The
  433.      destination rectangle is used for input and output. 
  434.  
  435. Details:  
  436.      This function calculates the single large rectangle that encompasses
  437. all the area of both rectangles. 
  438.      This function does NOT clip to the physical screen automatically. 
  439. Negative values in the returned x and y coordinates are possible if negative
  440. values existed in the inputs. 
  441.  
  442.  
  443. int rc_intersect(GRECT *sourcerect, GRECT *destrect)
  444.  
  445.      Calculate the intersecting portion of two rectangles.
  446.  
  447. Input:    
  448.      The sourcerect parameter is a pointer to the source (or
  449.      clipping) rectangle.
  450.  
  451.      The destrect parameter is a pointer to the destination
  452.      rectangle.  The destination rectangle is used for input and output. 
  453.  
  454. Returns:  
  455.      TRUE (1) if the two rectangles intersect, or FALSE (0) if they do not
  456.      intersect.  When the return value is FALSE, the contents of the
  457.      destination rectangle are undetermined. 
  458.  
  459. Details:  
  460.      You can think of this function as clipping the destination rectangle
  461. against the area of the source. 
  462.      On entry, the destination rectangle describes an area that may or may
  463. not have pixels in common with the source (or clipping) rectangle.  This
  464. function modifies the destination rectangle to describe the area where the
  465. two rectangles intersect.  If they don't intersect at all, this function
  466. returns FALSE, and the destination rectangle is left in an undetermined
  467. state. 
  468.  
  469.      This function is typically used in window redraw loops, to process the
  470. window rectangle list.  It can also be used in general-purpose drawing
  471. situations, especially to generate a clip rectangle to keep a blit from
  472. going outside the window work area or off the screen. 
  473.  
  474.      This function does NOT clip to the physical screen automatically. 
  475. Negative values in the returned x and y coordinates are possible if negative
  476. values existed in the inputs. 
  477.  
  478.  
  479. void objcl_calc (OBJECT *tree, short object, GRECT *grect, VRECT *vrect);
  480.  
  481.      This routine simultaneously calculates the GRECT and VRECT clipping
  482. rectangles that describe an object.   
  483.  
  484. Input:
  485.       grect: A pointer to a GRECT structure or NULL.
  486.       vrect: A pointer to a VRECT structure or NULL.
  487.  
  488. Details:
  489.  
  490.      If object has outside borders or is OUTLINED and/or SHADOWED,
  491. clipping sizes are calc'd accordingly.
  492.      (This routine started out short and gracefull...) These routines have
  493. been re-classified as rectangle calcs, and are now found in AESUTRC5.S as
  494. rc_gadjust and rc_vadjust.  Also, the docs for v1.3 utils state that
  495. objcl_calc is being phased out. 
  496.  
  497.  
  498. void    obj_flchange(OBJECT *ptree, int object, int newflags,
  499.                         int drawflag [ ,GRECT *cliprect ])
  500.  
  501.      Change an object's flags, with optional redraw.
  502.  
  503. Input:    
  504.     The ptree parameter is a pointer to the tree containing the
  505.     object to change.
  506.  
  507.     The object parameter is the index of the object to change.
  508.  
  509.     The newflags parameter specifies which object flag bits to
  510.     change; details below.  
  511.  
  512.     The drawflag parameter specifies whether the object is to be
  513.     visually updated on the screen, use one of the following:
  514.  
  515.     OBJ_NODRAW   (0) -    Don't update the screen.
  516.     OBJ_WITHDRAW (1) -    Update the screen.
  517.     OBJ_CLIPDRAW (2) -    Update the screen with clipping.
  518.  
  519.     The cliprect parameter is an optional pointer to a rectangle
  520.     which will be used to clip the redraw of the object.  This
  521.     parameter is only used when the drawflag parameter is equal
  522.     to OBJ_CLIPDRAW.
  523.  
  524. Details:
  525.  
  526.     This function provides a simple way to change the object flag bits for
  527. any object. 
  528.  
  529.     If the high bit of the newflags parameter is set, an AND is used to mask
  530. off bits in the object flags.  If the high bit is not set, an OR is used to
  531. set bits in the object flags.  This allows a newflags value of DEFAULT to
  532. set the default bit, and a value of ~DEFAULT to unset it. 
  533.  
  534.     When the drawflag parameter is non-zero, an objc_draw() call is
  535. automatically done after the flags are changed.  The objc_draw() is always
  536. done starting at the root object and drawing to MAX_DEPTH, and the draw is
  537. clipped to the on- screen rectangle of the object being changed.  This
  538. allows a change that sets HIDETREE to properly hide the object visually,
  539. because the parent of the object is redrawn, but the object itself is not. 
  540.  
  541.     When your dialog is in a window or another situation in which you might
  542. need to clip the redraw, use the OBJ_CLIPDRAW option, and provide a pointer
  543. to the clipping rectangle.  If the draw option is not CLIPDRAW, the clip
  544. pointer need not be specified. 
  545.  
  546.  
  547. void obj_stchange(OBJECT *ptree, int object, int newstate,
  548.                         int drawflag [, GRECT *cliprect ])
  549.  
  550.     Change an object's state, with optional redraw.
  551.  
  552. Input:
  553.     The ptree parameter is a pointer to the tree containing the
  554.     object to change.
  555.  
  556.     The object parameter is the index of the object to change.
  557.  
  558.     The newstate parameter specifies which object state bits to
  559.     change; details below.  
  560.  
  561.     The drawflag parameter specifies whether the object is to be
  562.     visually updated on the screen, use one of the following:
  563.  
  564.     OBJ_NODRAW   (0) -    Don't update the screen.
  565.     OBJ_WITHDRAW (1) -    Update the screen.
  566.     OBJ_CLIPDRAW (2) -    Update the screen with clipping.
  567.  
  568.     The cliprect parameter is an optional pointer to a rectangle
  569.     which will be used to clip the redraw of the object.  This
  570.     parameter is only used when the drawflag parameter is equal
  571.     to OBJ_CLIPDRAW.
  572.  
  573. Details:
  574.  
  575.     This function provides a simple way to change the object state bits for
  576. any object. 
  577.  
  578.     If the high bit of the newstate parameter is set, an AND is used to mask
  579. off bits in the object flags.  If the high bit is not set, an OR is used to
  580. set bits in the object flags.  This allows a newstate value of SELECTED to
  581. set the bit, and a value of ~SELECTED to unset it. 
  582.  
  583.     When the drawflag parameter is non-zero, an objc_draw() call is
  584. automatically done after the flags are changed.  The objc_draw() is always
  585. done starting at object and drawing to MAX_DEPTH, and the draw is clipped to
  586. the on-screen rectangle of the dialog that contains it. 
  587.  
  588.     When your dialog is in a window or another situation in which you might
  589. need to clip the redraw, use the OBJ_CLIPDRAW option, and provide a pointer
  590. to the clipping rectangle.  If the draw option is not CLIPDRAW, the clip
  591. pointer need not be specified. 
  592.  
  593.  
  594. void obj_offxywh(OBJECT *ptree, int object, GRECT *prect)
  595.  
  596.     Get the screen-adjusted xywh values for an object.
  597.  
  598. Input:
  599.     The ptree parameter is a pointer to the object tree.
  600.  
  601.     The object parameter is the index of the object.
  602.  
  603.     The prect parameter is a pointer to the rectangle into which
  604.     the object's xywh values are returned.
  605.  
  606. Details:
  607.  
  608.     This function gets the screen-adjusted xywh values for the object.  It
  609. does NOT take into account that some objects are visually larger than their
  610. xywh values imply (ie, OUTLINED objects). Use the obj_clcalc() function if
  611. you need to account for the actual visual area an object occupies on the
  612. screen. 
  613.  
  614.  
  615. void obj_xywh(OBJECT *ptree, int object, GRECT *prect)
  616.  
  617.     Get the xywh values for an object.
  618.  
  619. Input:
  620.     The ptree parameter is a pointer to the object tree.
  621.  
  622.     The object parameter is the index of the object.
  623.  
  624.     The prect parameter is a pointer to the rectangle into which
  625.     the object's xywh values are returned.
  626.  
  627. Details:
  628.  
  629.     This function gets the xywh values for the object.  The values returned
  630. are straight from the object;  they are relative to the object's parent, not
  631. to the screen. 
  632.  
  633.        See Also: obj_offxywh() obj_clcalc() 
  634.  
  635.  
  636. void rc_copy(void *sourcerect, void *destrect)
  637.  
  638.     Copy the source rectangle to the destination rectangle.
  639.  
  640. Input:
  641.     The sourcerect parameter is a pointer to the source
  642.     rectangle.
  643.  
  644.     The destrect parameter is a pointer to the destination
  645.     rectangle.
  646.  
  647. Details:
  648.     This copies a rectangle, or more accurately, 8 bytes of
  649. word-aligned data.
  650.  
  651.  
  652. int rc_equal(void *rect1, void *rect2)
  653.  
  654.     Returns TRUE if two rectangles are identical.
  655.  
  656. Input:
  657.     The rect1 and rect2 parameters are pointers to the
  658.     rectangles to be compared.
  659.  
  660. Returns:
  661.     TRUE (non-zero) if the rectangles are identical, FALSE (0)
  662.     if they're not.
  663.  
  664. Details:
  665.  
  666.     For the rectangles to be identical, all four values (xywh) must be
  667. equal.  More accurately, this function compares 8 bytes of word-aligned
  668. data. 
  669.  
  670.  
  671. int obj_xtfind(OBJECT *ptree, int parent, int xtype)
  672.  
  673.     Finds the object with the specified extended object type.
  674.  
  675. Input:
  676.     The ptree parameter is a pointer to the tree.
  677.  
  678.     The parent parameter is the index of the parent which
  679.     contains the objects to be scanned.
  680.  
  681.     The xtype parameter specifies the extended object type to
  682.     search for.
  683.  
  684. Returns:
  685.     The index of the object having the specified extended type,
  686.     or NO_OBJECT (-1) if nothing was found.
  687.  
  688. Details:
  689.     This function scans the children of the specified parent object.  It
  690. compares the extended object type in each child to the specified xtype, and
  691. returns the index of the first object which matches.  If none of the
  692. children have the specified extended type, NO_OBJECT is returned. 
  693.  
  694.     Extended object types are stored in the upper byte of the ob_type word. 
  695. GEM only uses the lower 8 bits of the ob_type value, and ignores any value
  696. in the upper 8 bits.  All GemFast library routines which look at or set the
  697. ob_type field also work with the lower 8 bits, and ignore (or preserve) the
  698. upper 8 bits. 
  699.  
  700.     So, you can stuff any 8-bit value you want into the upper 8 bits of the
  701. ob_type word.  There's a zillion things you can do with it. 
  702.  
  703.        See Also: obj_bmbuttons() rsc_sxtypes()
  704.  
  705.  
  706. int obj_rbfind(OBJECT *ptree, int parent, int rbstate)
  707.  
  708.     Finds the selected button in a group of radio buttons.
  709.  
  710. Input:
  711.     The ptree parameter is a pointer to the object tree.
  712.  
  713.     The parent parameter is the index of the parent which
  714.     contains the radio buttons.
  715.  
  716.     The rbstate parameter is the ob_state mask to look for.
  717.  
  718. Returns:
  719.     The index of the selected object, or NO_OBJECT (-1) if no
  720.     radio buttons are in the desired state.
  721.  
  722. Details:
  723.  
  724.     This function walks through the children of the specified parent.  For
  725. each child object with the RBUTTON bit set in the ob_flags, it does an AND
  726. of the child's ob_state against the rbstate parameter.  It returns the index
  727. of the first child object which has a non-zero result from the AND. It
  728. returns NO_OBJECT if the result was zero for all children. 
  729.  
  730.     The most common use of this function is to pass SELECTED for the rbstate
  731. parameter.  Sometimes it's handy to use OUTLINED or another state to
  732. indicate selection of an object, so this function allows any state bit(s) to
  733. be specified.  If you pass a combination of bits, (ie, (SELECTED|OUTLINED)),
  734. then this function finds the first radio button with either (not both) of
  735. those bits set. 
  736.  
  737.        See Also: obj_rbselect()
  738.  
  739.  
  740. int obj_rbselect(OBJECT *ptree, int selobj, int selstate)
  741.  
  742.     De-selects current radio button, selects a new one.
  743.  
  744. Input:
  745.     The ptree parameter is a pointer to the object tree.
  746.  
  747.     The selobj parameter is the index of the new radio button to
  748.     be selected.
  749.  
  750.     The selstate parameter specifies the ob_state bits which are
  751.     turned off in the current radio button and turned on in the
  752.     new one.
  753.  
  754. Returns:
  755.     The index of the radio button that was selected before the
  756.     call, or NO_OBJECT if no buttons were previously selected.
  757.  
  758. Details:
  759.  
  760.     This function is the easiest way to set a given radio button to a
  761. selected state.  If a button in the group is already selected, this function
  762. de-selects it before selecting the new button. 
  763.  
  764.     Note that this function does NOT update the buttons on- screen, it only
  765. changes the ob_state words.  Use this for setting up a dialog before
  766. displaying it.  After that, the GEM forms manager updates the ob_state and
  767. the on-screen object during dialog processing. 
  768.  
  769.        See Also: obj_rbfind()
  770.  
  771.  
  772. int obj_parent(OBJECT *ptree, int object)
  773.  
  774.     Return the parent object for the specified object.
  775.  
  776. Input:
  777.     The ptree parameter is a pointer to the object tree.
  778.  
  779.     The object parameter is the index of the object.
  780.  
  781. Returns:
  782.     The index of the parent object.
  783.  
  784. Details:
  785.  
  786.     By definition, the root object has no parent.  If you try to get the
  787. parent of the root, zero is returned, as if the root were its own parent. 
  788.  
  789.  
  790. int frmx_center(OBJECT *ptree, GRECT *prect)
  791.  
  792.     Call form_center() passing a single pointer for the return
  793. values.
  794.  
  795. Input:
  796.     The ptree parameter is a pointer to the object tree to be
  797.     centered.
  798.  
  799.     The prect parameter is a pointer to a GRECT structure into
  800.     which the on-screen sizes of the dialog are returned.
  801.  
  802. Returns:
  803.     TRUE (1) always.
  804.  
  805. Details:
  806.     This function allows you to pass a single pointer to an output
  807. rectangle, instead of the four pointers required by the standard
  808. form_center() function. 
  809.  
  810.        See Also: frm_sizes() 
  811.  
  812.  
  813. int winx_calc(int type, int kind, GRECT inrect, GRECT *outrect)
  814.  
  815.     Call wind_calc() passing a single pointer to the output.
  816.  
  817. Input:
  818.     The type, kind, and inrect parameters are identical to the
  819.     corresponding wind_calc() parameters.
  820.  
  821.     The outrect parameter is a pointer to the output rectangle
  822.     where the results of the calculation are stored.
  823.  
  824. Returns:
  825.     Zero on error, or non-zero on success.
  826.  
  827. Details:
  828.  
  829.     Please note that the inrect parameter is a structure passed by value (4
  830. values stacked) not a pointer to a rectangle. 
  831.  
  832.  
  833. int winx_get(int whandle, int field, GRECT *outrect)
  834.  
  835.     Call wind_get() passing a single output pointer.
  836.  
  837. Input:
  838.     The whandle and field parameters are identical to the
  839.     corresponding wind_get() parameters.
  840.  
  841.     The outrect parameter is a pointer to the output rectangle
  842.     where the results of the query are stored.
  843.  
  844. Returns:
  845.     Zero on error or non-zero on success.
  846.  
  847. Details:
  848.     Please note that this function will always write 8 bytes of output to
  849. the memory location indicated by outrect even if the type of query you're
  850. doing normally returns less information that.  (IE, don't use
  851. &integer_variable for this parameter, or the memory following the integer
  852. variable will be overwritten as well.)
  853.  
  854.  
  855.  
  856.  
  857. new AES functions added (MultiTOS)
  858.  
  859. appl_search( short ap_smode, char *ap_sname, short *ap_stype, short *ap_sid);
  860.  
  861. call:
  862.     appl_search( ap_smode, ap_sname, &ap_stype, &ap_sid );
  863.  
  864.  
  865. appl_getinfo( short ap_gtype, short *ap_gout1, short *ap_gout2, 
  866.                             short *ap_gout3, short *ap_gout4 );
  867. call:
  868.     short ap_gtype, ap_gout1, ap_gout2, ap_gout3, ap_gout4;
  869.         appl_getinfo( ap_gtype, &ap_gout1, &ap_gout2, &ap_gout3, &ap_gout4 );
  870.  
  871.  
  872. menu_popup( MENU *me_menu, short me_xpos, short me_ypos, MENU *me_mdata);
  873.  
  874. call:
  875.     MENU me_menu, me_mdata;
  876.     menu_popup( &me_menu, me_xpos, me_ypos, &me_mdata);
  877.  
  878.  
  879. menu_attach( short me_flag, OBJECT *me_tree, short me_item, MENU *me_mdata );
  880.  
  881. call:
  882.     OBJECT *me_tree;  MENU me_mdata;
  883.     menu_attach( me_flag, me_tree, me_item, &me_mdata );
  884.  
  885.  
  886. menu_istart( short me_flag, OBJECT *me_tree, short me_imenu, short me_item );
  887.  
  888. call:
  889.     object *me_tree;
  890.     menu_istart( me_flag, me_tree, me_imenu, me_item );
  891.  
  892.  
  893. menu_settings( shrot me_flag, MN_SET *me_values );
  894.  
  895. call:
  896.     MN_SET me_values;
  897.     menu_settings( me_flag, &me_values );
  898.  
  899.  
  900. rsrc_rcfix( RSHDR *rc_header );
  901.  
  902. call:
  903.     RSHDR *rc_header;
  904.     rsrc_rcfix( rc_header );
  905.  
  906.  
  907. objc_sysvar( short ob_smode, short ob_swhich, short ob_sival1, 
  908.                   short ob_soval1, short *ob_soval1, short *ob_soval2 );
  909.  
  910. call:
  911.     short ob_smode, ob_swhich, ob_sival1, ob_soval1, 
  912.     short *ob_soval1, *ob_soval2;
  913.     objc_sysvar( ob_smode, ob_swhich, ob_sival1, ob_soval1, 
  914.                           &ob_soval1, &ob_soval2 );
  915.  
  916.  
  917.  
  918. Jerry Geiger, Berlin,  July 1994
  919.  
  920.