home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga Shareware Floppies / ma61.dms / ma61.adf / sysspeed / sysspeeddata / testdata / intuition.doc < prev   
Text File  |  1995-06-05  |  283KB  |  7,743 lines

  1. TABLE OF CONTENTS
  2.  
  3. intuition.library/ActivateGadget
  4. intuition.library/ActivateWindow
  5. intuition.library/AddClass
  6. intuition.library/AddGadget
  7. intuition.library/AddGList
  8. intuition.library/AllocRemember
  9. intuition.library/AllocScreenBuffer
  10. intuition.library/AutoRequest
  11. intuition.library/BeginRefresh
  12. intuition.library/BuildEasyRequestArgs
  13. intuition.library/BuildSysRequest
  14. intuition.library/ChangeScreenBuffer
  15. intuition.library/ChangeWindowBox
  16. intuition.library/ClearDMRequest
  17. intuition.library/ClearMenuStrip
  18. intuition.library/ClearPointer
  19. intuition.library/CloseScreen
  20. intuition.library/CloseWindow
  21. intuition.library/CloseWorkBench
  22. intuition.library/CurrentTime
  23. intuition.library/DisplayAlert
  24. intuition.library/DisplayBeep
  25. intuition.library/DisposeObject
  26. intuition.library/DoGadgetMethodA
  27. intuition.library/DoubleClick
  28. intuition.library/DrawBorder
  29. intuition.library/DrawImage
  30. intuition.library/DrawImageState
  31. intuition.library/EasyRequestArgs
  32. intuition.library/EndRefresh
  33. intuition.library/EndRequest
  34. intuition.library/EraseImage
  35. intuition.library/FreeClass
  36. intuition.library/FreeRemember
  37. intuition.library/FreeScreenBuffer
  38. intuition.library/FreeScreenDrawInfo
  39. intuition.library/FreeSysRequest
  40. intuition.library/GadgetMouse
  41. intuition.library/GetAttr
  42. intuition.library/GetDefaultPubScreen
  43. intuition.library/GetDefPrefs
  44. intuition.library/GetPrefs
  45. intuition.library/GetScreenData
  46. intuition.library/GetScreenDrawInfo
  47. intuition.library/HelpControl
  48. intuition.library/InitRequester
  49. intuition.library/IntuiTextLength
  50. intuition.library/ItemAddress
  51. intuition.library/LendMenus
  52. intuition.library/LockIBase
  53. intuition.library/LockPubScreen
  54. intuition.library/LockPubScreenList
  55. intuition.library/MakeClass
  56. intuition.library/MakeScreen
  57. intuition.library/ModifyIDCMP
  58. intuition.library/ModifyProp
  59. intuition.library/MoveScreen
  60. intuition.library/MoveWindow
  61. intuition.library/MoveWindowInFrontOf
  62. intuition.library/NewModifyProp
  63. intuition.library/NewObject
  64. intuition.library/NextObject
  65. intuition.library/NextPubScreen
  66. intuition.library/ObtainGIRPort
  67. intuition.library/OffGadget
  68. intuition.library/OffMenu
  69. intuition.library/OnGadget
  70. intuition.library/OnMenu
  71. intuition.library/OpenScreen
  72. intuition.library/OpenScreenTagList
  73. intuition.library/OpenWindow
  74. intuition.library/OpenWindowTagList
  75. intuition.library/OpenWorkBench
  76. intuition.library/PointInImage
  77. intuition.library/PrintIText
  78. intuition.library/PubScreenStatus
  79. intuition.library/QueryOverscan
  80. intuition.library/RefreshGadgets
  81. intuition.library/RefreshGList
  82. intuition.library/RefreshWindowFrame
  83. intuition.library/ReleaseGIRPort
  84. intuition.library/RemakeDisplay
  85. intuition.library/RemoveClass
  86. intuition.library/RemoveGadget
  87. intuition.library/RemoveGList
  88. intuition.library/ReportMouse
  89. intuition.library/Request
  90. intuition.library/ResetMenuStrip
  91. intuition.library/RethinkDisplay
  92. intuition.library/ScreenDepth
  93. intuition.library/ScreenPosition
  94. intuition.library/ScreenToBack
  95. intuition.library/ScreenToFront
  96. intuition.library/ScrollWindowRaster
  97. intuition.library/SetAttrsA
  98. intuition.library/SetDefaultPubScreen
  99. intuition.library/SetDMRequest
  100. intuition.library/SetEditHook
  101. intuition.library/SetGadgetAttrsA
  102. intuition.library/SetMenuStrip
  103. intuition.library/SetMouseQueue
  104. intuition.library/SetPointer
  105. intuition.library/SetPrefs
  106. intuition.library/SetPubScreenModes
  107. intuition.library/SetWindowPointerA
  108. intuition.library/SetWindowTitles
  109. intuition.library/ShowTitle
  110. intuition.library/SizeWindow
  111. intuition.library/SysReqHandler
  112. intuition.library/TimedDisplayAlert
  113. intuition.library/UnlockIBase
  114. intuition.library/UnlockPubScreen
  115. intuition.library/UnlockPubScreenList
  116. intuition.library/ViewAddress
  117. intuition.library/ViewPortAddress
  118. intuition.library/WBenchToBack
  119. intuition.library/WBenchToFront
  120. intuition.library/WindowLimits
  121. intuition.library/WindowToBack
  122. intuition.library/WindowToFront
  123. intuition.library/ZipWindow
  124. intuition.library/ActivateGadget             intuition.library/ActivateGadget
  125.  
  126.     NAME
  127.     ActivateGadget -- Activate a (string or custom) gadget.
  128.  
  129.     SYNOPSIS
  130.     Success = ActivateGadget( Gadget, Window, Request )
  131.     D0              A0      A1      A2
  132.  
  133.     BOOL ActivateGadget( struct Gadget *, struct Window *,
  134.         struct Requester * );
  135.  
  136.     FUNCTION
  137.     Activates a string or custom gadget.  If successful, this means
  138.     that the user does not need to click in the gadget before typing.
  139.  
  140.     The window parameter must point to the window which contains the gadget.
  141.     If the gadget is actually in a requester, the window must contain
  142.     the requester, and a pointer to the requester must also be
  143.     passed.    The requester parameter must only be valid if the gadget
  144.     has the    GTYP_REQGADGET flag set, a requirement for all requester
  145.     gadgets.
  146.  
  147.     The success of this function depends on a rather complex set
  148.     of conditions.  The intent is that the user is never interrupted from
  149.     what interactions he may have underway.
  150.  
  151.     The current set of conditions includes:
  152.     -   The window must be active.  If you are opening a new window
  153.         and want an active gadget in it, it is not sufficient to
  154.         assume that the WFLG_ACTIVATE flag has taken effect by the time
  155.         OpenWindow() returns, even if you insert a delay of some
  156.         finite amount of time.  Use the IDCMP_ACTIVEWINDOW IntuiMessage
  157.         to tell when your window really becomes active.  Many
  158.         programs use an event loop that calls ActivateGadget()
  159.         whenever they receive the IDCMP_ACTIVEWINDOW message, and also
  160.         the IDCMP_MOUSEBUTTONS messages, and so on, to keep the
  161.         gadget active until it is used (or the user selects some
  162.         other "Cancel" gadget).
  163.  
  164.     -   No other gadgets may be in use.  This includes system gadgets,
  165.         such as those for window sizing, dragging, etc.
  166.     -   If the gadget is in a requester, that requester must
  167.         be active. (Use IDCMP_REQSET and IDCMP_REQCLEAR).
  168.     -   The right mouse button cannot be held down (e.g. menus)
  169.  
  170.     NOTE: Don't try to activate a gadget which is disabled or
  171.     not attached to a window or requester.
  172.  
  173.     INPUTS
  174.     Gadget = pointer to the gadget that you want activated.
  175.     Window = pointer to a window structure containing the gadget.
  176.     Requester = pointer to a requester (may by NULL if this isn't 
  177.            a requester gadget (i.e. GTYP_REQGADGET is not set)).
  178.  
  179.     RESULT
  180.     If the conditions above are met, and the gadget is in fact a string
  181.     gadget, then this function will return TRUE, else FALSE.
  182.  
  183.     BUGS
  184.     At present, this function will not return FALSE if a custom
  185.     gadget declines to be activated.
  186.  
  187.     SEE ALSO
  188.     
  189. intuition.library/ActivateWindow             intuition.library/ActivateWindow
  190.  
  191.     NAME
  192.     ActivateWindow -- Activate an Intuition window.
  193.  
  194.     SYNOPSIS
  195.     ActivateWindow( Window )
  196.                     A0
  197.  
  198.     VOID ActivateWindow( struct Window * );
  199.  
  200.     FUNCTION
  201.     Activates an Intuition window. 
  202.  
  203.     Note that this call may have its action deferred: you cannot assume
  204.     that when this call is made the selected window has become active. 
  205.     This action will be postponed while the user plays with gadgets and
  206.     menus, or sizes and drags windows.  You may detect when the window
  207.     actually has become active by the IDCMP_ACTIVEWINDOW IDCMP message.
  208.  
  209.     This call is intended to provide flexibility but not to confuse the
  210.     user.  Please call this function synchronously with some action
  211.     by the user.
  212.  
  213.     INPUTS
  214.     Window = a pointer to a Window structure
  215.  
  216.     RESULT
  217.     None.
  218.  
  219.     BUGS
  220.     Some versions of the documentation claimed that this function
  221.     had a meaningful return value under V36 and higher.  That is
  222.     not true.
  223.  
  224.     Calling this function in a tight loop can blow out Intuition's
  225.     deferred action queue.
  226.  
  227.     SEE ALSO
  228.     OpenWindow(), and the WFLG_ACTIVATE window flag
  229. intuition.library/AddClass                         intuition.library/AddClass
  230.  
  231.     NAME
  232.     AddClass -- Make a public class available (V36)
  233.  
  234.     SYNOPSIS
  235.     AddClass( Class )
  236.               A0
  237.  
  238.     VOID AddClass( struct IClass * );
  239.  
  240.     FUNCTION
  241.     Adds a public boopsi class to the internal list of classes available
  242.     for public consumption.
  243.     
  244.     You must call this function after you call MakeClass().
  245.  
  246.     INPUTS
  247.     Class = pointer returned by MakeClass()
  248.  
  249.     RESULT
  250.     Nothing returned.
  251.     
  252.     NOTES
  253.  
  254.     BUGS
  255.     Although there is some protection against creating classes
  256.     with the same name as an existing class, this function
  257.     does not do any checking or other dealings with like-named
  258.     classes.  Until this is rectified, only officially registered
  259.     names can be used for public classes, and there is no
  260.     "class replacement" policy in effect.
  261.  
  262.     SEE ALSO
  263.     MakeClass(), FreeClass(), RemoveClass()
  264.     Document "Basic Object-Oriented Programming System for Intuition"
  265.     and the "boopsi Class Reference" document.
  266. intuition.library/AddGadget                       intuition.library/AddGadget
  267.  
  268.     NAME
  269.     AddGadget -- Add a gadget to the gadget list of a window.
  270.  
  271.     SYNOPSIS
  272.     RealPosition = AddGadget( Window, Gadget, Position )
  273.     D0              A0      A1      D0
  274.  
  275.     UWORD  AddGadget( struct Window *, struct Gadget *, UWORD );
  276.  
  277.     FUNCTION
  278.     Adds the specified gadget to the gadget list of the given window,
  279.     linked in at the position in the list specified by the position 
  280.     argument (that is, if Position == 0, the gadget will be inserted
  281.     at the head of the list, and if Position == 1 then the gadget will
  282.     be inserted after the first gadget and before the second).  If the
  283.     position you specify is greater than the number of gadgets in the
  284.     list, your gadget will be added to the end of the list.
  285.     
  286.     Calling AddGadget() does not cause your gadget to be redisplayed.
  287.     The benefit of this is that you may add several gadgets without
  288.     having the gadget list redrawn every time.
  289.  
  290.     This procedure returns the position at which your gadget was added.
  291.    
  292.     NOTE:  A relatively safe way to add the gadget to the end of the 
  293.     list is to specify a position of -1 (i.e., (UWORD) ~0).  That way,
  294.     only the 65536th (and multiples of it) will be inserted at the wrong
  295.     position.  The return value of the procedure will tell you where it was 
  296.     actually inserted.
  297.  
  298.     NOTE:  The system window gadgets are initially added to the
  299.     front of the gadget list.  The reason for this is:  If you position
  300.     your own gadgets in some way that interferes with the graphical
  301.     representation of the system gadgets, the system's ones will be "hit"
  302.     first by user.  If you then start adding gadgets to the front of the
  303.     list, you will disturb this plan, so beware.  On the other hand, if
  304.     you don't violate the design rule of never overlapping your gadgets,
  305.     there's no problem.  
  306.  
  307.     NOTE:  You may not add your own gadgets to a screen.  Gadgets may
  308.     be added to backdrop windows, however, which can be visually similar,
  309.     but also provide an IDCMP channel for gadget input messages.
  310.  
  311.     INPUTS
  312.     Window = pointer to the window to get your gadget
  313.     Gadget = pointer to the new gadget
  314.     Position = integer position in the list for the new gadget (starting
  315.         from zero as the first position in the list)
  316.  
  317.     RESULT
  318.     Returns the position of where the gadget was actually added.
  319.  
  320.     BUGS
  321.  
  322.     SEE ALSO
  323.     AddGList(), RemoveGadget(), RemoveGList()
  324. intuition.library/AddGList                         intuition.library/AddGList
  325.  
  326.     NAME
  327.     AddGList -- Add a linked list of gadgets to a window or requester.
  328.  
  329.     SYNOPSIS
  330.     RealPosition = AddGList( Window, Gadget, Position, Numgad, Requester )
  331.     D0                       A0      A1      D0        D1      A2
  332.  
  333.     UWORD AddGList( struct Window *, struct Gadget *, UWORD, WORD,
  334.         struct Requester * );
  335.     
  336.     FUNCTION
  337.     Adds the list of gadgets to the gadget list of the given window
  338.     or requester linked in at the position in the list specified by
  339.     the position argument. 
  340.  
  341.     See AddGadget() for more information about gadget list position,
  342.     and more information about gadgets in general.
  343.  
  344.     The requester parameter will be ignored unless the GTYP_REQGADGET
  345.     bit is set in the GadgetType field of the first gadget in the list.
  346.     In that case, the gadget list is added to the requester gadgets.
  347.     NOTE: be sure that GTYP_REQGADGET is either set or cleared consistently
  348.     for all gadgets in the list.  NOTE ALSO: The window parameter
  349.     should point to the window that the requester (will) appear in.
  350.  
  351.     Will add 'Numgad' gadgets from gadget list linked by the field
  352.     NextGadget, or until some NextGadget field is found to be NULL.  Does
  353.     not assume that the Numgad'th gadget has NextGadget equal to NULL.
  354.  
  355.     NOTE WELL: In order to link your gadget list in, the NextGadget
  356.     field of the Numgad'th (or last) gadget will be modified.  Thus, if 
  357.     you are adding the first 3 gadgets from a linked list of five gadgets,
  358.     this call will sever the connection between your third and fourth
  359.     gadgets.
  360.  
  361.     INPUTS
  362.     Window = pointer to the window to get your gadget
  363.     Gadget = pointer to the first gadget to be added
  364.     Position = integer position in the list for the new gadget
  365.         (starting from zero as the first position in the list)
  366.     Numgad = the number of gadgets from the linked list to be added
  367.         if Numgad equals -1, the entire null-terminated list of
  368.         gadgets will be added.
  369.     Requester = the requester the gadgets will be added to if the
  370.         GTYP_REQGADGET GadgetType flag is set for the first gadget
  371.         in the list
  372.  
  373.     RESULT
  374.     Returns the position of where the first gadget in the list was actually
  375.     added.
  376.  
  377.     BUGS
  378.  
  379.     SEE ALSO
  380.     AddGadget(), RemoveGadget(), RemoveGList()
  381. intuition.library/AllocRemember               intuition.library/AllocRemember
  382.  
  383.     NAME
  384.     AllocRemember -- AllocMem() with tracking to make freeing easy.
  385.  
  386.     SYNOPSIS
  387.     MemBlock = AllocRemember( RememberKey, Size, Flags )
  388.     D0              A0           D0    D1
  389.     
  390.     APTR AllocRemember( struct Remember **, ULONG, ULONG );
  391.  
  392.     FUNCTION
  393.     This routine calls the Exec AllocMem() function for you, but also links
  394.     the parameters of the allocation into a master list, so that
  395.     you can simply call the Intuition routine FreeRemember() at a later 
  396.     time to deallocate all allocated memory without being required to
  397.     remember the details of the memory you've allocated.
  398.  
  399.     This routine will have two primary uses:
  400.        -   Let's say that you're doing a long series of allocations in a 
  401.            procedure.  If any one of the allocations fails, your program
  402.         may need to abort the procedure.  Abandoning ship correctly
  403.         involves freeing up what memory you've already allocated.  This
  404.         procedure allows you to free up that memory easily, without being
  405.         required to keep track of how many allocations you've already done,
  406.         what the sizes of the allocations were, or where the memory was
  407.         allocated.
  408.  
  409.        -   Also, in the more general case, you may do all of the allocations 
  410.            in your entire program using this routine.  Then, when your 
  411.            program is exiting, you can free it all up at once with a 
  412.            simple call to FreeRemember().
  413.  
  414.     You create the "anchor" for the allocation master list by creating 
  415.     a variable that's a pointer to struct Remember, and initializing 
  416.     that pointer to NULL.  This is called the RememberKey.  Whenever 
  417.     you call AllocRemember(), the routine actually does two memory 
  418.     allocations, one for the memory you want and the other for a copy 
  419.     of a Remember structure.  The Remember structure is filled in 
  420.     with data describing your memory allocation, and it's linked 
  421.     into the master list pointed to by your RememberKey.  Then, to 
  422.     free up any memory that's been allocated, all you have to do is 
  423.     call FreeRemember() with your RememberKey.
  424.  
  425.     Please read the FreeRemember() function description, too.  As you will
  426.     see, you can select either to free just the link nodes and keep all the 
  427.     allocated memory for yourself, or to free both the nodes and your memory
  428.     buffers.
  429.  
  430.  
  431.     INPUTS
  432.     RememberKey = the address of a pointer to struct Remember.  Before the
  433.     very first call to AllocRemember, initialize this pointer to NULL. 
  434.  
  435.     Size = the size in bytes of the memory allocation.  Please refer to the
  436.         exec.library/AllocMem() function for details.
  437.     Flags = the specifications for the memory allocation.  Please refer to 
  438.         the exec.library/AllocMem() function for details.
  439.  
  440.     EXAMPLE
  441.     struct Remember *RememberKey;
  442.     RememberKey = NULL;
  443.     buffer = AllocRemember(&RememberKey, BUFSIZE, MEMF_CHIP);
  444.     if (buffer)
  445.     {
  446.         /* Use the buffer */
  447.         ...
  448.     }
  449.     FreeRemember(&RememberKey, TRUE);
  450.  
  451.     RESULT
  452.     If the memory allocation is successful, this routine returns the byte 
  453.     address of your requested memory block.  Also, the node to your block 
  454.     will be linked into the list pointed to by your RememberKey variable.
  455.     If the allocation fails, this routine returns NULL and the list pointed
  456.     to by RememberKey, if any, will be unchanged.
  457.  
  458.     BUGS
  459.     This function makes two allocations for each memory buffer
  460.     you request.  This is neither fast nor good for memory
  461.     fragmentation.
  462.  
  463.     This function should use the exec AllocPool() function internally,
  464.     at least for the Remember headers.
  465.  
  466.     SEE ALSO
  467.     FreeRemember(), exec.library/AllocMem()
  468. intuition.library/AllocScreenBuffer       intuition.library/AllocScreenBuffer
  469.  
  470.     NAME
  471.     AllocScreenBuffer -- Get a ScreenBuffer for double-buffering. (V39)
  472.  
  473.     SYNOPSIS
  474.     sbuffer = AllocScreenBuffer( Screen, BitMap, flags )
  475.     D0                           A0      A1      D0
  476.  
  477.     struct ScreenBuffer *AllocScreenBuffer( struct Screen *,
  478.         struct BitMap *, ULONG );
  479.  
  480.     FUNCTION
  481.     Allocates a ScreenBuffer structure and usually a BitMap.  This
  482.     structure can be used for double (or multiple) buffering in
  483.     Intuition screens.  You may use this call to obtain a ScreenBuffer
  484.     structure for the screen's initial BitMap, or for other BitMaps
  485.     you intend to swap in.
  486.  
  487.     AllocScreenBuffer() also allocates a graphics.library DBufInfo
  488.     structure.  The ScreenBuffer structure this call returns contains
  489.     a pointer to that DBufInfo structure, which is free for your use.
  490.     See graphics.library/AllocDBufInfo() for full details on using
  491.     this structure to achieve notification of when it is safe to
  492.     render into an old buffer and when it is right to switch again.
  493.  
  494.     INPUTS
  495.     Screen = pointer to the screen to double-buffer
  496.     BitMap = For CUSTOMBITMAP screens, you may pre-allocate
  497.         a BitMap matching the screen's BitMap's properties, and
  498.         pass that in, to get a ScreenBuffer referring to that
  499.         BitMap.  Set this parameter to NULL if you'd prefer
  500.         that Intuition allocate the alternate buffer.  This parameter
  501.         must be NULL for non-CUSTOMBITMAP screens.
  502.     Flags = Set a combination of these flags:
  503.         For non-CUSTOMBITMAP screens, set SB_SCREEN_BITMAP in order to
  504.         get a ScreenBuffer referring to the screen's actual BitMap.
  505.         (For CUSTOMBITMAP screens, just set the BitMap parameter
  506.         to the BitMap you passed to OpenScreen()).
  507.         Set SB_COPY_BITMAP if you would like the screen's BitMap
  508.         copied into this ScreenBuffer's BitMap.  This is required
  509.         to get any menu-bar or gadget imagery into each
  510.         ScreenBuffer's BitMap.  If the screen has no Intuition
  511.         rendering, you may omit this flag.  Also, when allocating
  512.         a ScreenBuffer for the screen's initial BitMap, this flag
  513.         should not be set.
  514.  
  515.     RESULT
  516.     Pointer to a valid ScreenBuffer structure, or NULL if failure.
  517.     You may render into the resulting BitMap as appropriate.
  518.     You may use the sb_DBufInfo field to access graphics.library
  519.     ViewPort-buffering features such as learning when it is safe
  520.     to reuse the previous BitMap.  If not, you risk writing into
  521.     the on-screen BitMap, which can damage menu or gadget rendering!
  522.  
  523.     NOTES
  524.  
  525.     The role of SB_SCREEN_BITMAP is to wrap a ScreenBuffer around
  526.     the actual current BitMap used by the non-CUSTOMBITMAP screen.
  527.     The words actual or current are used instead of initial, since
  528.     an application could do some double-buffering, leave the
  529.     non-initial buffer installed into the screen, free up the
  530.     others, then re-allocate ScreenBuffer structures to do more
  531.     double-buffering.  In that case, the actual screen BitMap is
  532.     not necessarily the initial one.
  533.  
  534.     The role of SB_COPY_BITMAP is to say "please put whatever
  535.     imagery is currently on-screen into this new BitMap too".
  536.     That's how the screen titlebar and other imagery get copied
  537.     over into each buffer.
  538.  
  539.     BUGS
  540.  
  541.     SEE ALSO
  542.     FreeScreenBuffer(), ChangeScreenBuffer(),
  543.     graphics.library/AllocDBufInfo(), graphics.library/ChangeVPBitMap()
  544.  
  545. intuition.library/AutoRequest                   intuition.library/AutoRequest
  546.  
  547.     NAME
  548.     AutoRequest -- Automatically build and get response from a requester.
  549.  
  550.     SYNOPSIS
  551.     Response = AutoRequest( Window, BodyText, PosText, NegText, 
  552.     D0                      A0      A1        A2       A3
  553.             PosFlags, NegFlags, Width, Height )
  554.             D0        D1        D2     D3
  555.  
  556.     BOOL AutoRequest( struct Window *, struct IntuiText *,
  557.         struct IntuiText *, struct IntuiText *, 
  558.         ULONG, ULONG, WORD, WORD );
  559.  
  560.     FUNCTION
  561.     This procedure automatically builds a requester for you and then 
  562.     waits for a response from the user, or for the system to satisfy your 
  563.     request.  If the response is positive, this procedure returns TRUE.  
  564.     If the response is negative, this procedure returns FALSE.  
  565.  
  566.     An IDCMPFlag specification is created by bitwise "or'ing" your
  567.     PosFlags, NegFlags, and the IDCMP classes IDCMP_GADGETUP and
  568.     IDCMP_RAWKEY.  You may specify zero flags for either the PosFlags
  569.     or NegFlags arguments.  
  570.  
  571.     The IntuiText arguments, and the width and height values, are 
  572.     passed directly to the BuildSysRequest() procedure along with 
  573.     your window pointer and the IDCMP flags.  Please refer to 
  574.     BuildSysRequest() for a description of the IntuiText that you are 
  575.     expected to supply when calling this routine.  It's an important
  576.     but long-winded description that need not be duplicated here.  
  577.  
  578.     If the BuildSysRequest() procedure does not return a pointer 
  579.     to a window, it will return TRUE or FALSE (not valid structure 
  580.     pointers) instead, and these BOOL values will be returned to 
  581.     you immediately.  
  582.  
  583.     On the other hand, if a valid window pointer is returned, that 
  584.     window will have had its IDCMP ports and flags initialized according 
  585.     to your specifications.  AutoRequest() then waits for IDCMP messages 
  586.     on the UserPort, which satisfies one of four requirements:
  587.     -   either the message is of a class that matches 
  588.         one of your PosFlags arguments (if you've supplied 
  589.         any), in which case this routine returns TRUE.  Or
  590.     -   the message class matches one of your NegFlags 
  591.         arguments (if you've supplied any), in which case 
  592.         this routine returns FALSE.  Or
  593.     -   the IDCMP message is of class IDCMP_GADGETUP, which means that
  594.         one of the two gadgets, as provided with the PosText and NegText 
  595.         arguments, was selected by the user.  If the TRUE gadget 
  596.         was selected, TRUE is returned.  If the FALSE gadget was 
  597.         selected, FALSE is returned.  
  598.     -   Lastly, two IDCMP_RAWKEY messages may satisfy the request: those
  599.         for the V and B keys with the left Amiga key depressed.
  600.         These keys, satisfy the gadgets on the left or right side of
  601.         the requester--TRUE or FALSE--, respectively.
  602.  
  603.         NOTE: For V36, these two keys left-Amiga-B and V are processed
  604.         through the default keymap.
  605.  
  606.     When the dust has settled, this routine calls FreeSysRequest() if
  607.     necessary to clean up the requester and any other allocated memory.
  608.  
  609.     NOTE: For V36, this function now switches the processor stack
  610.     to ensure sufficient stack space for the function to succeed.
  611.  
  612.     INPUTS
  613.     Window = pointer to a Window structure.  See BuildSysRequest()
  614.         for a full discussion.
  615.     BodyText = pointer to an IntuiText structure
  616.     PosText = pointer to an IntuiText structure, may by NULL.
  617.     NegText = pointer to an IntuiText structure, MUST be valid!
  618.     PosFlags = flags for the IDCMP
  619.     NegFlags = flags for the IDCMP
  620.     Width, Height = the sizes to be used for the rendering of the requester 
  621.  
  622.     NOTE for V36: The width and height parameters are ignored, as
  623.     are several other specifications in the IntuiText, to make
  624.     AutoRequest() requesters retroactively conform to the new look
  625.     designed for EasyRequest().
  626.  
  627.     RESULT
  628.     The return value is either TRUE or FALSE.  See the text above for a 
  629.     complete description of the chain of events that might lead to either
  630.     of these values being returned.
  631.  
  632.     NOTES
  633.     When DOS brings up AutoRequests() on your process (eg.
  634.     "Please insert volume XXX in any drive", they normally come
  635.     up on the Workbench screen.  If you set your Process pr_WindowPtr
  636.     field to point to one of your windows, then DOS will bring its
  637.     requesters up on the same screen as that window.  A pr_WindowPtr
  638.     of -1 prevents requesters from coming up at all.
  639.     (Some FileSystem requesters cannot be redirected or supressed).
  640.  
  641.     BUGS
  642.     The requester no longer devolves into a call to DisplayAlert()
  643.     if there is not enough memory for the requester.
  644.  
  645.     SEE ALSO
  646.     EasyRequestArgs(), BuildSysRequest(), SysReqHandler()
  647. intuition.library/BeginRefresh                 intuition.library/BeginRefresh
  648.  
  649.     NAME
  650.     BeginRefresh -- Sets up a window for optimized refreshing.
  651.  
  652.     SYNOPSIS
  653.     BeginRefresh( Window )
  654.               A0
  655.  
  656.     VOID BeginRefresh( struct Window * );
  657.  
  658.     FUNCTION
  659.     This routine sets up your window for optimized refreshing.  
  660.  
  661.     Its role is to provide Intuition integrated access to the Layers
  662.     library function BeginUpdate().  Its additional contribution is
  663.     to be sure that locking protocols for layers are followed, by
  664.     locking both layers of a WFLG_GIMMEZEROZERO window only after the
  665.     parent Layer_Info has been locked.  Also, the WFLG_WINDOWREFRESH
  666.     flag is set in your window, for your information.
  667.  
  668.     The purpose of BeginUpdate(), and hence BeginRefresh(), is to 
  669.     restrict rendering in a window (layer) to the region that needs
  670.     refreshing after an operation such as window sizing or uncovering. 
  671.     This restriction to the "damage region" persists until you call
  672.     EndRefresh().
  673.     
  674.     For instance, if you have a WFLG_SIMPLE_REFRESH window which is
  675.     partially concealed and the user brings it to the front, you can
  676.     receive an IDCMP_REFRESHWINDOW message asking you to refresh your
  677.     display.  If you call BeginRefresh() before doing any of the
  678.     rendering, then the layer that underlies your window will be arranged
  679.     so that the only rendering that will actually take place will be that
  680.     which goes to the newly-revealed areas.  This is very performance-
  681.     efficient, and visually attractive.
  682.  
  683.     After you have performed your refresh of the display, you should call
  684.     EndRefresh() to reset the state of the layer and the window.  Then you
  685.     may proceed with rendering to the entire window as usual.
  686.  
  687.     You learn that your window needs refreshing by receiving either a
  688.     message of class IDCMP_REFRESHWINDOW through the IDCMP, or an input
  689.     event of class IECLASS_REFRESHWINDOW through the Console device.
  690.     Whenever you are told that your window needs refreshing, you should
  691.     call BeginRefresh() and EndRefresh() to clear the refresh-needed
  692.     state, even if you don't plan on doing any rendering.  You may relieve
  693.     yourself of even this burden by setting the WFLG_NOCAREREFRESH flag
  694.     when opening your window.
  695.  
  696.     NOTES
  697.     WARNING: You should only perform simple graphics refreshing
  698.     operations between BeginRefresh() and EndRefresh().  These include
  699.     any graphics.library drawing functions or the simple Intuition
  700.     rendering functions (DrawImage(), PrintIText(), DrawBorder(), and
  701.     so on).  In particular, do not call RefreshGadgets(), RefreshGList(),
  702.     RefreshWindowFrame(), etc., since any of the complex Intuition
  703.     functions run the risk of creating a deadlock.  Also avoid any
  704.     other high-level calls in Intuition or ones that might invoke
  705.     Intuition.  This means no calling SetPointer(), no calling
  706.     LockIBase(), no dos.library functions (since an EasyRequest()
  707.     might result), etc.  Keep it simple.
  708.  
  709.     By the time the application receives its IDCMP_REFRESHWINDWOW
  710.     message, Intuition has already repaired any damaged regions
  711.     of the window border or the gadgets in the window, so attempts
  712.     to redraw gadgets or borders are as unnecessary as they are
  713.     dangerous.
  714.  
  715.     ANOTHER WARNING: The concept of multiple refresh passes using
  716.     EndRefresh( w, FALSE ) is not completely sound without further
  717.     protection.  The reason is that between two sessions, more
  718.     damage can occur to your window.  Your final EndRefresh( w, TRUE )
  719.     will dispose of all damage, including the new, and your
  720.     initial refreshing pass will never get the chance to refresh
  721.     the new damage.
  722.  
  723.     To avoid this, you must protect your session using LockLayerInfo()
  724.     which will prevent Intuition from performing window operations
  725.     or anything else which might cause further damage from occurring.
  726.     Again, while holding the LayerInfo lock make no Intuition
  727.     function calls dealing with gadgets; just render.
  728.  
  729.     You can, however, call InstallClipRegion() for the different
  730.     refresh passes, if you have two clip regions.
  731.  
  732.     SIMILAR WARNING: Your program and Intuition "share" your window
  733.     layer's DamageList.  BeginRefresh() helps arbitrate this
  734.     sharing, but the lower-level function layers.library/BeginUpdate()
  735.     does not.  It isn't really supported to use BeginUpdate() on
  736.     a window's layer, but if you do--for whatever reason--it is
  737.     critical that you first acquire the LayerInfo lock as in
  738.     the above example: even if you only have one pass of refresh
  739.     rendering to do.  Otherwise, the refreshing of your window's
  740.     borders and gadgets can be incomplete, and the problem might
  741.     occur only under certain conditions of task priority and
  742.     system load.
  743.  
  744.     EXAMPLE
  745.     Code fragment for "two pass" window refreshing, in response
  746.     to an IDCMP_REFRESHWINDOW message:
  747.     switch ( imsg->Class )
  748.     {
  749.     ...
  750.     case IDCMP_REFRESHWINDOW:
  751.         window = imsg->IDCMPWindow;
  752.  
  753.         /* this lock only needed for "two-pass" refreshing */
  754.         LockLayerInfo( &window->WScreen->LayerInfo );
  755.  
  756.         /* refresh pass for region 1 */
  757.         origclip = InstallClipRegion( window->WLayer, region1 );
  758.         BeginRefresh( window );
  759.         myRefreshRegion1( window );
  760.         EndRefresh( window, FALSE );
  761.  
  762.         /* refresh pass for region 2 */
  763.         InstallClipRegion( window->WLayer, region2 );
  764.         BeginRefresh( window );
  765.         myRefreshRegion2( window );
  766.         EndRefresh( window, TRUE );        /* and dispose damage list */
  767.  
  768.         /* restore and unlock */
  769.         InstallClipRegion( window->WLayer, origclip );
  770.         UnlockLayerInfo( &window->WScreen->LayerInfo );
  771.         break;
  772.     ...
  773.     }
  774.     
  775.  
  776.     INPUTS
  777.     Window = pointer to the window structure which needs refreshing
  778.  
  779.     RESULT
  780.     None
  781.  
  782.     BUGS
  783.     This function should check the return code of
  784.     layers.library/BeginUpdate(), and abort if that function fails.
  785.  
  786.     SEE ALSO
  787.        EndRefresh(), layers.library/BeginUpdate(), OpenWindow()
  788.     layer.library/InstallClipRegion(), layers.library/LockLayerInfo()
  789.     The "Windows" chapter of the Intuition Reference Manual
  790. intuition.library/BuildEasyRequestArgs intuition.library/BuildEasyRequestArgs
  791.  
  792.     NAME
  793.     BuildEasyRequestArgs -- Simple creation of system request. (V36)
  794.     BuildEasyRequest -- Varargs stub for BuildEasyRequestArgs(). (V36)
  795.  
  796.     SYNOPSIS
  797.     ReqWindow = BuildEasyRequestArgs( RefWindow, easyStruct, IDCMP, Args )
  798.     D0                                A0         A1          D0     A3
  799.  
  800.     struct Window *BuildEasyRequestArgs( struct Window *,
  801.         struct EasyStruct *, ULONG, APTR );
  802.  
  803.     ReqWindow = BuildEasyRequest( RefWindow, easyStruct, IDCMP, Arg1, ... )
  804.  
  805.     struct Window *BuildEasyRequest( struct Window *,
  806.         struct EasyStruct *, ULONG, APTR, ... );
  807.  
  808.     FUNCTION
  809.     This function is to EasyRequest() as BuildSysRequest() is to
  810.     AutoRequest(): it returns a pointer to the system requester
  811.     window.  The input from that window can then be processed
  812.     under application control.
  813.  
  814.     It is recommended that this processing be done with
  815.     SysReqHandler(), so that future enhancement to the
  816.     processing will be enjoyed.
  817.  
  818.     After you have determined that the requester is satisfied or
  819.     cancelled, you must free this requester using FreeSysRequest().
  820.  
  821.     Please see the autodoc for EasyRequest().
  822.  
  823.     NOTE: This function switches the processor stack to ensure
  824.     sufficient stack space for the function to complete.
  825.  
  826.     INPUTS
  827.     Window = reference window for requester: determines the
  828.         requester window title and screen.
  829.     easyStruct = pointer to EasyStruct structure, as described
  830.         in the EasyRequest() autodocs.
  831.     IDCMP = (NOT A POINTER) provided application specific IDCMP
  832.         flags for the system requester window.
  833.     Args = see EasyRequestArgs()
  834.  
  835.     RESULT
  836.     A pointer to the system request window opened.  In the event
  837.     of problems, you may also be returned the value '0' which
  838.     is to be interpreted as the "FALSE, Cancel" choice, or
  839.     (if you have a second gadget defined) the value '1', which
  840.     is to be taken to mean the equivalent of your corresponding
  841.     left-most gadget.
  842.  
  843.     If there is a problem creating the window, a recoverable alert may
  844.     be substituted for the requester, and the result, either 0 or 1,
  845.     returned.
  846.  
  847.     BUGS
  848.     Does not put up alternative alert.
  849.     See also BUGS listed for EasyRequestArgs().
  850.  
  851.     SEE ALSO
  852.     EasyRequestArgs(), FreeSysRequest(), SysReqHandler(), 
  853.     BuildSysRequest(), AutoRequest()
  854. intuition.library/BuildSysRequest           intuition.library/BuildSysRequest
  855.  
  856.     NAME
  857.     BuildSysRequest -- Build and display a system requester.
  858.  
  859.     SYNOPSIS
  860.     ReqWindow = BuildSysRequest( Window, BodyText, PosText, NegText, 
  861.     D0                           A0      A1        A2       A3
  862.                    IDCMPFlags, Width, Height )
  863.                D0          D1     D2
  864.  
  865.     struct Window *BuildSysRequest( struct Window *, struct IntuiText *,
  866.         struct IntuiText *, struct IntuiText *, ULONG, WORD, WORD );
  867.  
  868.     FUNCTION
  869.     This procedure builds a system requester based on the supplied
  870.     information.  If all goes well and the requester is constructed,
  871.     this procedure returns a pointer to the window in which the requester
  872.     appears.  That window will have its IDCMP initialized to reflect the
  873.     flags found in the IDCMPFlags argument.  You may then wait on those
  874.     ports to detect the user's response to your requester, which response
  875.     may include either selecting one of the gadgets or causing some other
  876.     event to be noticed by Intuition (like IDCMP_DISKINSERTED, for
  877.     instance).  After the requester is satisfied, you should call the
  878.     FreeSysRequest() procedure to remove the requester and free up
  879.     any allocated memory.
  880.  
  881.     See the autodoc for SysReqHandler() for more information on the
  882.     how to handle the IntuiMessages this window will receive.
  883.  
  884.     The requester used by this function has the NOISYREQ flag bit set,
  885.     which means that the set of IDCMPFlags that may be used here
  886.     include IDCMP_RAWKEY, IDCMP_MOUSEBUTTONS, and others.
  887.    
  888.     In release previous to V36, if the requester could not be built,
  889.     this function would try to call DisplayAlert() with the same
  890.     information, with more or less favorable results.  In V36,
  891.     the requesters themselves require less memory (SIMPLEREQ), but
  892.     there is no alert attempt.
  893.  
  894.     The function may return TRUE (1) or FALSE if it cannot post
  895.     the requester.  (V36 will always return FALSE, but be sure to
  896.     test for TRUE in case somebody reinstates the fallback alert.)
  897.  
  898.     If the window argument you supply is equal to NULL, a new window will
  899.     be created for you in the Workbench screen, or the default
  900.     public screen, for V36.  If you want the requester
  901.     created by this routine to be bound to a particular window (i.e.,
  902.     to appear in the same screen as the window), you should
  903.     not supply a window argument of NULL.
  904.  
  905.     New for V36: if you pass a NULL window pointer, the system requester
  906.     will appear on the default public screen, which is not always
  907.     the Workbench.
  908.  
  909.     The text arguments are used to construct the display.  Each is a
  910.     pointer to an instance of the structure IntuiText.
  911.  
  912.     The BodyText argument should be used to describe the nature of 
  913.     the requester.  As usual with IntuiText data, you may link several
  914.     lines of text together, and the text may be placed in various 
  915.     locations in the requester.  This IntuiText pointer will be stored
  916.     in the ReqText variable of the new requester.
  917.  
  918.     The PosText argument describes the text that you want associated 
  919.     with the user choice of "Yes,  TRUE,  Retry,  Good."  If the requester 
  920.     is successfully opened, this text will be rendered in a gadget in 
  921.     the lower-left of the requester, which gadget will have the 
  922.     GadgetID field set to TRUE.  If the requester cannot be opened and 
  923.     the DisplayAlert() mechanism is used, this text will be rendered in 
  924.     the lower-left corner of the alert display with additional text 
  925.     specifying that the left mouse button will select this choice.  This 
  926.     pointer can be set to NULL, which specifies that there is no TRUE 
  927.     choice that can be made.
  928.  
  929.     The NegText argument describes the text that you want associated 
  930.     with the user choice of "No,  FALSE,  Cancel,  Bad."  If the requester 
  931.     is successfully opened, this text will be rendered in a gadget in 
  932.     the lower-right of the requester, which gadget will have the 
  933.     GadgetID field set to FALSE.  If the requester cannot be opened and 
  934.     the DisplayAlert() mechanism is used, this text will be rendered in 
  935.     the lower-right corner of the alert display with additional text 
  936.     specifying that the right mouse button will select this choice.  This 
  937.     pointer cannot be set to NULL.  There must always be a way for the
  938.     user to cancel this requester.
  939.  
  940.     The Positive and Negative Gadgets created by this routine have
  941.     the following features:
  942.           - GTYP_BOOLGADGET
  943.           - GACT_RELVERIFY
  944.           - GTYP_REQGADGET
  945.           - GACT_TOGGLESELECT
  946.  
  947.     When defining the text for your gadgets, you may find it convenient
  948.     to use the special constants used by Intuition for the construction
  949.     of the gadgets.  These include defines like AUTODRAWMODE, AUTOLEFTEDGE,
  950.     AUTOTOPEDGE and AUTOFRONTPEN.  You can find these in your local
  951.     intuition.h (or intuition.i) file.
  952.  
  953.     These hard-coded constants are not very resolution or font
  954.     sensitive, but V36 will override them to provide more modern
  955.     layout.
  956.  
  957.     New for V36, linked lists of IntuiText are not correctly supported
  958.     for gadget labels.
  959.  
  960.     The width and height values describe the size of the requester.  All
  961.     of your BodyText must fit within the width and height of your
  962.     requester.  The gadgets will be created to conform to your sizes.
  963.  
  964.     VERY IMPORTANT NOTE:  for this release of this procedure, a new window
  965.     is opened in the same screen as the one containing your window. 
  966.     Future alternatives may be provided as a function distinct from this
  967.     one.
  968.  
  969.     NOTE: This function will pop the screen the requester and its
  970.     window appears in to the front of all screens.  New for V36,
  971.     if the user doesn't perform any other screen arrangement before
  972.     finishing with the requester, a popped screen will be pushed
  973.     back behind.
  974.  
  975.     INPUTS
  976.     Window = pointer to a Window structure
  977.     BodyText = pointer to an IntuiText structure
  978.     PosText = pointer to an IntuiText structure
  979.     NegText = pointer to an IntuiText structure
  980.     IDCMPFlags = the IDCMP flags you want used for the initialization of the
  981.            IDCMP of the window containing this requester
  982.     Width, Height = the size required to render your requester
  983.  
  984.     NOTE for V36: the width and height you pass are ignored, as
  985.     are some of the parameters of your IntuiText, so that Intuition
  986.     can make the Requesters real nice for the new look.
  987.  
  988.     RESULT
  989.     If the requester was successfully created, the value 
  990.     returned by this procedure is a pointer to the window in which the 
  991.     requester is rendered.  If the requester could not be created,
  992.     this routine might have called DisplayAlert() before returning 
  993.     (it depends on the version) and will pass back TRUE if the user
  994.     pressed the left mouse button and FALSE if the user pressed the
  995.     right mouse button.   If the version of Intuition doesn't 
  996.     call DisplayAlert(), or if it does, and there's not enough
  997.     memory for the alert, the value of FALSE is returned.
  998.  
  999.     BUGS
  1000.     This procedure currently opens a window in the Screen which 
  1001.     contains the window which is passed as a parameter, or the
  1002.     default public screen, if that parameter is NULL.  Although
  1003.     not as originally envisioned, this will probably always be the
  1004.     behavior of this function.
  1005.  
  1006.     DisplayAlert() is not called in version V36.
  1007.  
  1008.     It's almost impossible to make complete, correct account
  1009.     of different system fonts, window border dimensions, and
  1010.     screen resolution to get the layout of a System Requester
  1011.     just right using this routine.  For V36, we recommend the
  1012.     automatic layout implemented in BuildEasyRequestArgs() and
  1013.     EasyRequestArgs().
  1014.  
  1015.     SEE ALSO
  1016.     FreeSysRequest(), DisplayAlert(), ModifyIDCMP(), exec.library/Wait(),
  1017.     Request(), AutoRequest(), EasyRequestArgs(), BuildEasyRequestArgs()
  1018. intuition.library/ChangeScreenBuffer     intuition.library/ChangeScreenBuffer
  1019.  
  1020.     NAME
  1021.     ChangeScreenBuffer -- Swap the screen's BitMap. (V39)
  1022.  
  1023.     SYNOPSIS
  1024.     success = ChangeScreenBuffer( Screen, ScreenBuffer )
  1025.     D0                            A0      A1
  1026.  
  1027.     ULONG ChangeScreenBuffer( struct Screen *, struct ScreenBuffer * );
  1028.  
  1029.     FUNCTION
  1030.     Performs double (or multiple) buffering on an Intuition screen
  1031.     in an Intuition-cooperative manner.  The BitMap associated
  1032.     with the supplied ScreenBuffer will be installed in the
  1033.     specified screen, if possible.  The previously-installed BitMap
  1034.     is available for re-use upon receiving a signal from
  1035.     graphics.library.  See the graphics.library autodocs for
  1036.     graphics.library/AllocDBufInfo() and graphics.library/ChangeVPBitMap()
  1037.     for details.
  1038.  
  1039.     INPUTS
  1040.     Screen: pointer to the screen whose bitmap is to be swapped.
  1041.     ScreenBuffer: pointer to a ScreenBuffer structure obtained from
  1042.         AllocScreenBuffer().
  1043.  
  1044.     RESULT
  1045.     Returns non-zero if the operation succeeded.  Returns zero
  1046.     if the operation cannot be performed.  This function will
  1047.     fail if Intuition's state cannot permit it, for example the
  1048.     user is playing with menus or gadgets.
  1049.  
  1050.     NOTES
  1051.     It is not required to restore the original ScreenBuffer
  1052.     before closing the screen. Simply FreeScreenBuffer() each
  1053.     buffer (including the original and the currently-installed one)
  1054.     then close the screen.    Of course, you cannot call
  1055.     ChangeScreenBuffer() after freeing the currently-installed one.
  1056.  
  1057.     BUGS
  1058.  
  1059.     SEE ALSO
  1060.     AllocScreenBuffer(), FreeScreenBuffer(),
  1061.     graphics.library/ChangeVPBitMap()
  1062.  
  1063. intuition.library/ChangeWindowBox           intuition.library/ChangeWindowBox
  1064.  
  1065.     NAME
  1066.     ChangeWindowBox -- Change window position and dimensions. (V36)
  1067.  
  1068.     SYNOPSIS
  1069.     ChangeWindowBox( Window, Left, Top, Width, Height )
  1070.              A0     D0    D1   D2     D3
  1071.  
  1072.     VOID ChangeWindowBox( struct Window *, WORD, WORD, WORD, WORD );
  1073.  
  1074.     FUNCTION
  1075.     Makes simultaneous changes in window position and dimensions,
  1076.     in absolute (not relative) coordinates.
  1077.  
  1078.     Like MoveWindow() and SizeWindow(), the effect of this function
  1079.     is deferred until the next input comes along.  Unlike these 
  1080.     functions, ChangeWindowBox() specifies absolute window position
  1081.     and dimensions, not relative.  This makes for more reliable
  1082.     results considering that the action is deferred, so this
  1083.     function is typically preferable to MoveWindow() and SizeWindow()
  1084.     paired.
  1085.  
  1086.     You can detect that this operation has completed by receiving
  1087.     the IDCMP_CHANGEWINDOW IDCMP message
  1088.  
  1089.     The dimensions are limited to legal range, but you should still
  1090.     take care to specify sensible inputs based on the window's dimension
  1091.     limits and the size of its screen.
  1092.  
  1093.     This function limits the position and dimensions to legal
  1094.     values.
  1095.  
  1096.     INPUTS
  1097.     Window = the window to change position/dimension
  1098.     Left, Top, Width, Height = new position and dimensions
  1099.  
  1100.     RESULT
  1101.     Position and dimension are changed to your specification,
  1102.     or as close as possible.
  1103.     Returns nothing.
  1104.  
  1105.     BUGS
  1106.  
  1107.     SEE ALSO
  1108.     MoveWindow(), SizeWindow(), ZipWindow(),
  1109.     layers.library/MoveSizeLayer()
  1110. intuition.library/ClearDMRequest             intuition.library/ClearDMRequest
  1111.  
  1112.     NAME
  1113.     ClearDMRequest -- Clear (detaches) the DMRequest of the window.
  1114.  
  1115.     SYNOPSIS
  1116.     Response = ClearDMRequest( Window )
  1117.     D0               A0
  1118.  
  1119.     BOOL ClearDMRequest( struct Window * );
  1120.  
  1121.     FUNCTION
  1122.     Attempts to clear the DMRequest from the specified window,
  1123.     that is detaches the special requester that you attach to 
  1124.     the double-click of the menu button which the user can then 
  1125.     bring up on demand.  This routine WILL NOT clear the DMRequest
  1126.     if it's active (in use by the user). The IDCMP message class
  1127.     IDCMP_REQCLEAR can be used to detect that the requester is not in use,
  1128.     but that message is sent only when the last of perhaps several
  1129.     requesters in use in a window is terminated.
  1130.  
  1131.     INPUTS
  1132.     Window = pointer to the window from which the DMRequest is to be cleared.
  1133.  
  1134.     RESULT
  1135.     If the DMRequest was not currently in use, detaches the DMRequest
  1136.     from the window and returns TRUE.
  1137.  
  1138.     If the DMRequest was currently in use, doesn't change anything
  1139.     and returns FALSE.
  1140.  
  1141.     BUGS
  1142.  
  1143.     SEE ALSO
  1144.     SetDMRequest(), Request()
  1145. intuition.library/ClearMenuStrip             intuition.library/ClearMenuStrip
  1146.  
  1147.     NAME
  1148.     ClearMenuStrip -- Clear (detach) the menu strip from the window.
  1149.  
  1150.     SYNOPSIS
  1151.     ClearMenuStrip( Window )
  1152.                 A0
  1153.  
  1154.     VOID ClearMenuStrip( struct Window * );
  1155.  
  1156.     FUNCTION
  1157.     Detaches the current menu strip from the window; menu strips
  1158.     are attached to windows using the SetMenuStrip() function
  1159.     (or, for V36, ResetMenuStrip() ).
  1160.  
  1161.     If the menu is in use (for that matter if any menu is in use)
  1162.     this function will block (Wait()) until the user has finished.
  1163.  
  1164.     Call this function before you make any changes to the data
  1165.     in a Menu or MenuItem structure which is part of a menu
  1166.     strip linked into a window.
  1167.  
  1168.     INPUTS
  1169.     Window = pointer to a window structure
  1170.  
  1171.     RESULT
  1172.     None
  1173.  
  1174.     BUGS
  1175.  
  1176.     SEE ALSO
  1177.     SetMenuStrip(), ResetMenuStrip()
  1178. intuition.library/ClearPointer                 intuition.library/ClearPointer
  1179.  
  1180.     NAME
  1181.     ClearPointer -- Clear the mouse pointer definition from a window.
  1182.  
  1183.     SYNOPSIS
  1184.     ClearPointer( Window )
  1185.               A0
  1186.  
  1187.     VOID ClearPointer( struct Window * );
  1188.  
  1189.     FUNCTION
  1190.     Clears the window of its own definition of the Intuition mouse pointer.  
  1191.     After calling ClearPointer(), every time this window is the active 
  1192.     one the default Intuition pointer will be the pointer displayed 
  1193.     to the user.  If your window is the active one when this routine 
  1194.     is called, the change will take place immediately.
  1195.  
  1196.     Custom definitions of the mouse pointer which this function clears
  1197.     are installed by a call to SetPointer().
  1198.  
  1199.     INPUTS
  1200.     Window = pointer to the window to be cleared of its pointer definition
  1201.  
  1202.     RESULT
  1203.     None
  1204.  
  1205.     BUGS
  1206.  
  1207.     SEE ALSO
  1208.     SetWindowPointerA(), SetPointer()
  1209. intuition.library/CloseScreen                   intuition.library/CloseScreen
  1210.  
  1211.     NAME
  1212.     CloseScreen -- Close an Intuition screen.
  1213.  
  1214.     SYNOPSIS
  1215.     Success = CloseScreen( Screen )
  1216.     D0 (V36)               A0
  1217.  
  1218.     BOOL CloseScreen( struct Screen * );
  1219.     /* returns BOOL in V36 and greater */
  1220.  
  1221.     FUNCTION
  1222.     Unlinks the screen, unlinks the viewport, deallocates everything that
  1223.     Intuition allocated when the screen was opened (using OpenScreen()).
  1224.     Doesn't care whether or not there are still any windows attached to the
  1225.     screen.  Doesn't try to close any attached windows; in fact, ignores
  1226.     them altogether (but see below for changes in V36).
  1227.  
  1228.     If this is the last screen to go, attempts to reopen Workbench.
  1229.  
  1230.     New for V36: this function will refuse to close the screen
  1231.     if there are windows open on the screen or if there are any
  1232.     outstanding screen locks (see LockPubScreen()) when
  1233.     CloseScreen() is called.  This avoids the almost certain crash
  1234.     when a screen is closed out from under a window.
  1235.  
  1236.     INPUTS
  1237.     Screen = pointer to the screen to be closed.
  1238.  
  1239.     RESULT
  1240.     New for V36: returns TRUE (1) if screen is closed,
  1241.     returns FALSE (0) if screen had open windows when
  1242.     called.
  1243.  
  1244.     BUGS
  1245.  
  1246.     SEE ALSO
  1247.     OpenScreen()
  1248. intuition.library/CloseWindow                   intuition.library/CloseWindow
  1249.  
  1250.     NAME
  1251.     CloseWindow -- Close an Intuition window.
  1252.  
  1253.     SYNOPSIS
  1254.     CloseWindow( Window )
  1255.              A0
  1256.  
  1257.     VOID CloseWindow( struct Window * );
  1258.  
  1259.     FUNCTION
  1260.     Closes an Intuition window.  Unlinks it from the system, deallocates
  1261.     its memory, and makes it disappear.
  1262.  
  1263.     When this function is called, all IDCMP messages which have been sent
  1264.     to your window are deallocated.  If the window had shared a message
  1265.     Port with other windows, you must be sure that there are no unreplied
  1266.     messages for this window in the message queue.  Otherwise, your program
  1267.     will try to make use of a linked list (the queue) which contains free
  1268.     memory (the old messages).  This will give you big problems.
  1269.     See the code fragment CloseWindowSafely(), below.
  1270.  
  1271.     NOTE:  If you have added a Menu strip to this Window (via
  1272.     a call to SetMenuStrip()) you must be sure to remove that Menu strip
  1273.     (via a call to ClearMenuStrip()) before closing your Window.
  1274.     
  1275.     NOTE: This function may block until it is safe to de-link and free
  1276.     your window.  Your program may thus be suspended while the user
  1277.     plays with gadgets, menus, or window sizes and position.
  1278.     
  1279.     New for V36: If your window is a "Visitor Window" (see OpenWindow)
  1280.     CloseWindow will decrement the "visitor count" in the public screen
  1281.     on which the window was open.  When the last visitor window is
  1282.     closed, a signal will be sent to the public screen task, if this
  1283.     was pre-arranged (see OpenScreen).
  1284.  
  1285.     INPUTS
  1286.     Window = a pointer to a Window structure
  1287.  
  1288.     RESULT
  1289.     None
  1290.  
  1291.     BUGS
  1292.  
  1293.     SEE ALSO
  1294.     OpenWindow(), OpenScreen(), CloseScreen()
  1295.  
  1296.     EXAMPLE
  1297.     /*    CloseWindowSafely */
  1298.  
  1299.     /* these functions close an Intuition window
  1300.      * that shares a port with other Intuition
  1301.      * windows or IPC customers.
  1302.      *
  1303.      * We are careful to set the UserPort to
  1304.      * null before closing, and to free
  1305.      * any messages that it might have been
  1306.      * sent.
  1307.      */
  1308.     #include "exec/types.h"
  1309.     #include "exec/nodes.h"
  1310.     #include "exec/lists.h"
  1311.     #include "exec/ports.h"
  1312.     #include "intuition/intuition.h"
  1313.  
  1314.     CloseWindowSafely( win )
  1315.     struct Window *win;
  1316.     {
  1317.         /* we forbid here to keep out of race conditions with Intuition */
  1318.         Forbid();
  1319.  
  1320.         /* send back any messages for this window 
  1321.          * that have not yet been processed
  1322.          */
  1323.         StripIntuiMessages( win->UserPort, win );
  1324.  
  1325.         /* clear UserPort so Intuition will not free it */
  1326.         win->UserPort = NULL;
  1327.  
  1328.         /* tell Intuition to stop sending more messages */
  1329.         ModifyIDCMP( win, 0L );
  1330.  
  1331.         /* turn multitasking back on */
  1332.         Permit();
  1333.  
  1334.         /* and really close the window */
  1335.         CloseWindow( win );
  1336.     }
  1337.  
  1338.     /* remove and reply all IntuiMessages on a port that
  1339.      * have been sent to a particular window
  1340.      * (note that we don't rely on the ln_Succ pointer
  1341.      *  of a message after we have replied it)
  1342.      */
  1343.     StripIntuiMessages( mp, win )
  1344.     struct MsgPort *mp;
  1345.     struct Window *win;
  1346.     {
  1347.         struct IntuiMessage *msg;
  1348.         struct Node *succ;
  1349.  
  1350.         msg = (struct IntuiMessage *) mp->mp_MsgList.lh_Head;
  1351.  
  1352.         while( succ =  msg->ExecMessage.mn_Node.ln_Succ ) {
  1353.  
  1354.         if( msg->IDCMPWindow ==  win ) {
  1355.  
  1356.             /* Intuition is about to free this message.
  1357.              * Make sure that we have politely sent it back.
  1358.              */
  1359.             Remove( msg );
  1360.  
  1361.             ReplyMsg( msg );
  1362.         }
  1363.             
  1364.         msg = (struct IntuiMessage *) succ;
  1365.         }
  1366.     }
  1367. intuition.library/CloseWorkBench             intuition.library/CloseWorkBench
  1368.  
  1369.     NAME 
  1370.     CloseWorkBench -- Closes the Workbench screen.
  1371.  
  1372.     SYNOPSIS 
  1373.     Success = CloseWorkBench() 
  1374.     D0
  1375.  
  1376.     LONG CloseWorkBench( VOID );
  1377.  
  1378.     FUNCTION 
  1379.     This routine attempts to close the Workbench screen:
  1380.        -   Test whether or not any applications have opened windows on the 
  1381.            Workbench, and return FALSE if so.  Otherwise ... 
  1382.        -   Clean up all special buffers 
  1383.        -   Close the Workbench screen 
  1384.        -   Make the Workbench program mostly inactive (it will still  
  1385.            monitor disk activity) 
  1386.        -   Return TRUE 
  1387.  
  1388.     INPUTS 
  1389.     None 
  1390.  
  1391.     RESULT 
  1392.     TRUE if the Workbench screen closed successfully 
  1393.     FALSE if the Workbench was not open, or if it has windows
  1394.         open which are not Workbench drawers.
  1395.  
  1396.    NOTES
  1397.     This routine has been drastically rewritten for V36.
  1398.     It is much more solid, although we haven't eliminated
  1399.     all the problem cases yet.
  1400.  
  1401.     BUGS 
  1402.     The name of this function is improperly spelled.  It ought
  1403.     to have been CloseWorkbench().
  1404.  
  1405.     It might be more convenient to have it return TRUE if the
  1406.     Workbench wasn't opened when called.  The idea as it is now
  1407.     is probably this: if you want to free up the memory of the 
  1408.     Workbench screen when your program begins, you can call
  1409.     CloseWorkBench().  The return value of that call indicates
  1410.     whether you should call OpenWorkBench() when your program 
  1411.     exits: if FALSE, that means either the the Workbench existed
  1412.     but you could not close it, or that it wasn't around to
  1413.     begin with, and you should not try to re-open it.
  1414.  
  1415.     We would prefer that you provide a user selection to attempt
  1416.     to open or close the Workbench screen from within your application,
  1417.     rather than your making assumptions like these.
  1418.  
  1419.     SEE ALSO 
  1420.     OpenWorkBench()
  1421. intuition.library/CurrentTime                   intuition.library/CurrentTime
  1422.  
  1423.     NAME
  1424.     CurrentTime -- Get the current time values.
  1425.  
  1426.     SYNOPSIS
  1427.     CurrentTime( Seconds, Micros )
  1428.              A0       A1
  1429.  
  1430.     VOID CurrentTime( ULONG *, ULONG * );
  1431.  
  1432.     FUNCTION
  1433.     Puts copies of the current time into the supplied argument pointers.
  1434.  
  1435.     This time value is not extremely accurate, nor is it of a very fine 
  1436.     resolution.  This time will be updated no more than sixty times a
  1437.     a second, and will typically be updated far fewer times a second.
  1438.  
  1439.     INPUTS
  1440.     Seconds = pointer to a LONG variable to receive the current seconds
  1441.         value
  1442.     Micros = pointer to a LONG variable for the current microseconds value
  1443.  
  1444.     RESULT
  1445.     Puts the time values into the memory locations specified by the
  1446.         arguments
  1447.     Return value is not defined.
  1448.  
  1449.     BUGS
  1450.  
  1451.     SEE ALSO
  1452.     timer.device/TR_GETSYSTIME
  1453. intuition.library/DisplayAlert                 intuition.library/DisplayAlert
  1454.  
  1455.     NAME
  1456.     DisplayAlert -- Create the display of an alert message.
  1457.  
  1458.     SYNOPSIS
  1459.     Response = DisplayAlert( AlertNumber, String, Height )
  1460.     D0             D0           A0      D1
  1461.  
  1462.     BOOL DisplayAlert( ULONG, UBYTE *, UWORD );
  1463.  
  1464.     FUNCTION
  1465.     Creates an alert display with the specified message.
  1466.  
  1467.     If the system can recover from this alert, it's a RECOVERY_ALERT and 
  1468.     this routine waits until the user presses one of the mouse buttons, 
  1469.     after which the display is restored to its original state and a 
  1470.     BOOL value is returned by this routine to specify whether or not 
  1471.     the user pressed the LEFT mouse button.
  1472.    
  1473.     If the system cannot recover from this alert, it's a DEADEND_ALERT
  1474.     and this routine returns immediately upon creating the alert display.
  1475.     The return value is FALSE.
  1476.  
  1477.     NOTE: Starting with V33, if Intuition can't get enough
  1478.     memory for a RECOVERY_ALERT, the value FALSE will be returned.
  1479.  
  1480.     AlertNumber is a LONG value, historically related to the value
  1481.     sent to the Alert() routine.  But the only bits that are pertinent to
  1482.     this routine are the ALERT_TYPE bit(s).  These bits must be set to
  1483.     either RECOVERY_ALERT for alerts from which the system may safely
  1484.     recover, or DEADEND_ALERT for those fatal alerts.  These states are
  1485.     described in the paragraph above.   There is a third type of
  1486.     alert, the DAISY_ALERT, which is used only by the Exec.
  1487.    
  1488.     The string argument points to an AlertMessage string.  The AlertMessage
  1489.     string is comprised of one or more substrings, each of which is 
  1490.     composed of the following components:
  1491.            - first, a 16-bit x-coordinate and an 8-bit y-coordinate, 
  1492.              describing where on the alert display you want this string
  1493.              to appear.  The y-coordinate describes the offset to the
  1494.              baseline of the text.
  1495.            - then, the bytes of the string itself, which must be
  1496.              null-terminated (end with a byte of zero)
  1497.            - lastly, the continuation byte, which specifies whether or
  1498.              not there's another substring following this one.  If the
  1499.              continuation byte is non-zero, there IS another substring
  1500.              to be processed in this alert message.  If the continuation
  1501.              byte is zero, this is the last substring in the message.
  1502.  
  1503.     The last argument, Height, describes how many video lines tall you 
  1504.     want the alert display to be.
  1505.  
  1506.     New for V36: Alerts are always rendered in Topaz 8 (80 column font),
  1507.     regardless of the system default font.  Also, RECOVERY_ALERTs are
  1508.     displayed in amber, while DEADEND_ALERTs are still red.  Alerts
  1509.     no longer push down the application screens to be displayed.  Rather,
  1510.     they appear alone in a black display.
  1511.  
  1512.     Also new for V36: Alerts block each other out, and input
  1513.     during an alert is deprived of the rest of the system.  Internal
  1514.     input buffers still cause alert clicks to be processed by
  1515.     applications sometimes.
  1516.  
  1517.     INPUTS
  1518.     AlertNumber = the number of this alert message.  The only pertinent
  1519.         bits of this number are the ALERT_TYPE bit(s).  The rest of the
  1520.            number is ignored by this routine.
  1521.     String = pointer to the alert message string, as described above
  1522.     Height = minimum display lines required for your message
  1523.  
  1524.     RESULT
  1525.     A BOOL value of TRUE or FALSE.  If this is a DEADEND_ALERT, FALSE
  1526.     is always the return value.  If this is a RECOVERY_ALERT. The return
  1527.     value will be TRUE if the user presses the left mouse button in 
  1528.     response to your message, and FALSE if the user presses the right hand 
  1529.     button is response to your text, or if the alert could not
  1530.     be posted.
  1531.  
  1532.     BUGS
  1533.     If the system is worse off than you think, the level of your alert
  1534.     may become DEADEND_ALERT without you ever knowing about it.  This
  1535.     will NOT happen due simply to low memory.  Rather, the alert 
  1536.     display will be skipped, and FALSE will be returned.
  1537.  
  1538.     The left and right button clicks satisfying the alerts are
  1539.     unfortunately passed to    the normal applications, because of
  1540.     some internal system input buffering.
  1541.  
  1542.     SEE ALSO
  1543.     TimedDisplayAlert()
  1544.     
  1545. intuition.library/DisplayBeep                   intuition.library/DisplayBeep
  1546.  
  1547.     NAME
  1548.     DisplayBeep -- Flash the video display.
  1549.  
  1550.     SYNOPSIS
  1551.     DisplayBeep( Screen )
  1552.              A0
  1553.  
  1554.     VOID DisplayBeep( struct Screen * );
  1555.  
  1556.     FUNCTION
  1557.     "Beeps" the video display by flashing the background color of the
  1558.     specified screen.  If the screen argument is NULL, every screen
  1559.     in the display will be beeped.  Flashing everyone's screen is not
  1560.     a polite thing to do, so this should be reserved for dire
  1561.     circumstances.
  1562.  
  1563.     The reason such a routine is supported is because the Amiga has
  1564.     no internal bell or speaker.  When the user needs to know of
  1565.     an event that is not serious enough to require the use of a requester,
  1566.     the DisplayBeep() function may be called.
  1567.  
  1568.     New for V36:  Intuition now calls DisplayBeep through the 
  1569.     external library vector.  This means that if you call SetFunction()
  1570.     to replace DisplayBeep with an audible beep, for example, then
  1571.     your change will affect even Intuition's calls to DisplayBeep.
  1572.  
  1573.     INPUTS
  1574.     Screen = pointer to a screen.  If NULL, every screen in the display
  1575.            will be flashed
  1576.  
  1577.     RESULT
  1578.     None
  1579.  
  1580.     NOTES
  1581.     Since this function changes color zero of the affected screen(s),
  1582.     surprising results could occur if the screen's owner reading
  1583.     colors or perhaps cycling them.
  1584.  
  1585.     BUGS
  1586.  
  1587.     SEE ALSO
  1588.     
  1589. intuition.library/DisposeObject               intuition.library/DisposeObject
  1590.  
  1591.     NAME
  1592.     DisposeObject -- Deletes a 'boopsi' object. (V36)
  1593.  
  1594.     SYNOPSIS
  1595.     DisposeObject( Object )
  1596.                    A0
  1597.  
  1598.     VOID DisposeObject( APTR );
  1599.  
  1600.     FUNCTION
  1601.     Deletes a boopsi object and all of it auxiliary data.
  1602.     These objects are all created by NewObject().  Objects
  1603.     of certain classes "own" other objects, which will also
  1604.     be deleted when the object is passed to DisposeObject().
  1605.     Read the per-class documentation carefully to be aware
  1606.     of these instances.
  1607.  
  1608.     INPUTS
  1609.     Object = abstract pointer to a boopsi object returned by NewObject().
  1610.         The pointer may be NULL, in which case this function has
  1611.         no effect.
  1612.  
  1613.     NOTES
  1614.     This function invokes the OM_DISPOSE method.
  1615.  
  1616.     RESULT
  1617.     None.
  1618.  
  1619.     BUGS
  1620.  
  1621.     SEE ALSO
  1622.     NewObject(), SetAttrs(), GetAttr(), MakeClass(),
  1623.     Document "Basic Object-Oriented Programming System for Intuition"
  1624.     and the "boopsi Class Reference" document.
  1625. intuition.library/DoGadgetMethodA           intuition.library/DoGadgetMethodA
  1626.  
  1627.     NAME
  1628.     DoGadgetMethodA -- Invoke method on a boopsi gadget. (V39)
  1629.     DoGadgetMethod -- Varargs stub for DoGadgetMethodA(). (V39)
  1630.  
  1631.     SYNOPSIS
  1632.     result = DoGadgetMethodA( Gadget, Window, Requester, Message )
  1633.     D0                  A0      A1      A2         A3
  1634.  
  1635.     ULONG DoGadgetMethodA( struct Gadget *, struct Window *,
  1636.         struct Requester *, Msg );
  1637.  
  1638.     result = DoGadgetMethod( Gadget, Window, Requester, MethodID, ...)
  1639.  
  1640.     ULONG DoGadgetMethod( struct Gadget *, struct Window *,
  1641.         struct Requester *, ULONG, ... );
  1642.  
  1643.     FUNCTION
  1644.     Same as the DoMethod() function of amiga.lib, but provides context
  1645.     information and arbitration for classes which implement custom
  1646.     Intuition gadgets.
  1647.  
  1648.     You should use this function for boopsi gadget objects,
  1649.     or for "models" which propagate information to gadgets.
  1650.  
  1651.     Unlike DoMethod(), this function provides a GadgetInfo pointer
  1652.     (if possible) when invoking the method.  Some classes may
  1653.     require or benefit from this.
  1654.  
  1655.     INPUTS
  1656.     Gadget = abstract pointer to a boopsi gadget
  1657.     Window = window gadget has been added to using AddGList() or AddGadget()
  1658.     Requester = for REQGADGETs, requester containing the gadget
  1659.     Msg = the boopsi message to send
  1660.  
  1661.     RESULT
  1662.     The object does whatever it wants with the message you sent,
  1663.     which might include updating its gadget visuals.
  1664.  
  1665.     The return value is defined per-method.
  1666.     
  1667.     NOTES
  1668.     This function invokes the specified method with a GadgetInfo
  1669.     derived from the 'Window' and 'Requester' pointers.  The GadgetInfo
  1670.     is passed as the second parameter of the message, except for
  1671.     OM_NEW, OM_SET, OM_NOTIFY, and OM_UPDATE, where the GadgetInfo
  1672.     is passed as the third parameter.
  1673.  
  1674.     Implementers of new gadget methods should ensure that the
  1675.     GadgetInfo is the second long-word of their message!
  1676.  
  1677.     SEE ALSO
  1678.     NewObject(), DisposeObject(), GetAttr(), MakeClass(),
  1679.     Document "Basic Object-Oriented Programming System for Intuition"
  1680.     and the "boopsi Class Reference" document.
  1681. intuition.library/DoubleClick                   intuition.library/DoubleClick
  1682.  
  1683.     NAME
  1684.     DoubleClick -- Test two time values for double-click timing.
  1685.  
  1686.     SYNOPSIS
  1687.     IsDouble = DoubleClick( StartSecs, StartMicros,
  1688.     D0                      D0         D1
  1689.         CurrentSecs, CurrentMicros )
  1690.         D2           D3
  1691.  
  1692.     BOOL DoubleClick( ULONG, ULONG, ULONG, ULONG );
  1693.  
  1694.     FUNCTION
  1695.     Compares the difference in the time values with the double-click 
  1696.     timeout range that the user has set (using the "Preferences" tool) or 
  1697.     some other program has configured into the system.  If the 
  1698.     difference between the specified time values is within the current 
  1699.     double-click time range, this function returns TRUE, else it 
  1700.     returns FALSE.  
  1701.  
  1702.        These time values can be found in input events and IDCMP messages.
  1703.        The time values are not perfect; however, they are precise enough for 
  1704.        nearly all applications.
  1705.  
  1706.     INPUTS
  1707.     StartSeconds, StartMicros = the timestamp value describing the start of
  1708.           the double-click time period you are considering
  1709.     CurrentSeconds, CurrentMicros = the timestamp value describing 
  1710.           the end of the double-click time period you are considering
  1711.  
  1712.     RESULT
  1713.     If the difference between the supplied timestamp values is within the
  1714.     double-click time range in the current set of Preferences, this
  1715.     function returns TRUE, else it returns FALSE
  1716.  
  1717.     BUGS
  1718.  
  1719.     SEE ALSO
  1720.     CurrentTime()
  1721. intuition.library/DrawBorder                     intuition.library/DrawBorder
  1722.  
  1723.     NAME
  1724.     DrawBorder -- Draw the specified Border structure into a RastPort.
  1725.  
  1726.     SYNOPSIS
  1727.     DrawBorder( RastPort, Border, LeftOffset, TopOffset )
  1728.             A0        A1      D0          D1
  1729.  
  1730.     VOID DrawBorder( struct RastPort *, struct Border *, WORD, WORD );
  1731.  
  1732.     FUNCTION
  1733.     First, sets up the draw mode and pens in the RastPort according to the
  1734.     arguments of the Border structure.  Then, draws the vectors of
  1735.     the border argument into the RastPort, offset by the left and top
  1736.     offsets.
  1737.  
  1738.     As with all graphics rendering routines, the border will be clipped to
  1739.     to the boundaries of the RastPort's layer, if it exists.  This is
  1740.     the case with window RastPorts.
  1741.  
  1742.     This routine will draw all borders in the NULL-terminated list linked
  1743.     by the NextBorder field of the border argument.
  1744.  
  1745.     INPUTS
  1746.     RastPort = pointer to the RastPort to receive the border rendering
  1747.     Border = pointer to a Border structure
  1748.     LeftOffset = the offset to be added to each vector's x coordinate
  1749.     TopOffset = the offset to be added to each vector's y coordinate
  1750.  
  1751.     RESULT
  1752.     None
  1753.  
  1754.     BUGS
  1755.  
  1756.     SEE ALSO
  1757.     
  1758. intuition.library/DrawImage                       intuition.library/DrawImage
  1759.  
  1760.     NAME
  1761.     DrawImage -- Draw the specified Image structure into a RastPort.
  1762.  
  1763.     SYNOPSIS
  1764.     DrawImage( RastPort, Image, LeftOffset, TopOffset )
  1765.            A0        A1     D0          D1
  1766.  
  1767.     VOID DrawImage( struct RastPort *, struct Image    *, WORD, WORD );
  1768.  
  1769.     FUNCTION
  1770.     First, sets up the draw mode and pens in the RastPort according to the
  1771.     arguments of the Image structure.  Then, moves the image data of
  1772.     the image argument into the RastPort, offset by the left and top
  1773.     offsets.
  1774.     
  1775.     This routine does window layer clipping if you pass your window's
  1776.     (layered) RastPort -- if you draw an image outside of your window,
  1777.     your imagery will be clipped at the window's edge.  If you pass
  1778.     a (non-layered) screen RastPort, you MUST be sure your image is
  1779.     wholly contained within the rastport bounds.
  1780.  
  1781.     If the NextImage field of the image argument is non-NULL, 
  1782.     the next image is rendered as well, and so on until some
  1783.     NextImage field is found to be NULL.
  1784.  
  1785.     INPUTS
  1786.     RastPort = pointer to the RastPort to receive image rendering
  1787.     Image = pointer to an image structure
  1788.     LeftOffset = the offset which will be added to the image's x coordinate
  1789.     TopOffset = the offset which will be added to the image's y coordinate
  1790.  
  1791.     RESULT
  1792.     None
  1793.  
  1794.     NOTES
  1795.     Intuition always has and will continue to assume there are
  1796.     at least as many planes of data pointed to by ImageData as there
  1797.     are '1' bits in the PlanePick field.  Please ensure that
  1798.     this is so.  (See the intuition.h include file for full details
  1799.     on using PlanePick).
  1800.  
  1801.     BUGS
  1802.  
  1803.     SEE ALSO
  1804.     DrawImageState(), EraseImage()
  1805. intuition.library/DrawImageState             intuition.library/DrawImageState
  1806.  
  1807.    NAME    
  1808.     DrawImageState -- Draw an (extended) Intuition Image with
  1809.         special visual state. (V36)
  1810.  
  1811.    SYNOPSIS
  1812.     DrawImageState( RPort, Image, LeftOffset, TopOffset, State, DrawInfo )
  1813.             A0     A1     D0          D1         D2     A2
  1814.     
  1815.     VOID DrawImageState( struct RastPort *, struct Image *,
  1816.         WORD, WORD, ULONG, struct DrawInfo * );
  1817.  
  1818.    FUNCTION
  1819.     This function draws an Intuition Image structure in a variety of
  1820.     "visual states," which are defined by constants in
  1821.     intuition/imageclass.h.  These include:
  1822.     IDS_NORMAL        - like DrawImage()
  1823.     IDS_SELECTED        - represents the "selected state" of a Gadget
  1824.     IDS_DISABLED        - the "ghosted state" of a gadget
  1825.     IDS_BUSY        - for future functionality
  1826.     IDS_INDETERMINATE    - for future functionality
  1827.     IDS_INACTIVENORMAL    - for gadgets in window border
  1828.     IDS_INACTIVESELECTED    - for gadgets in window border
  1829.     IDS_INACTIVEDISABLED    - for gadgets in window border
  1830.  
  1831.     Only IDS_NORMAL will make sense for traditional Image structures,
  1832.     this function is more useful when applied to new custom images
  1833.     or "object-oriented image classes."
  1834.  
  1835.     Each class of custom images is responsible for documenting which
  1836.     visual states it supports, and you typically want to use images
  1837.     which support the appropriate states with your custom gadgets.
  1838.  
  1839.     The DrawInfo parameter provides information invaluable to 
  1840.     "rendered" images, such as pen color and resolution.  Each
  1841.     image class must document whether this parameter is required.
  1842.  
  1843.    INPUTS
  1844.      RPort    - RastPort for rendering
  1845.     Image    - pointer to a (preferably custom) image
  1846.     LeftOffset,RightOffset - positional offsets in pixels
  1847.     State    - visual state selected from above
  1848.     DrawInfo - pointer to packed of pen selections and resolution.
  1849.  
  1850.    RESULT
  1851.      None.
  1852.  
  1853.    EXAMPLE
  1854.     Provided separately in the DevCon '90 disk set.
  1855.  
  1856.    NOTES
  1857.     
  1858.  
  1859.    BUGS
  1860.     
  1861.  
  1862.    SEE ALSO
  1863.     DrawImage(), GetScreenDrawInfo(), intuition/imageclass.h
  1864.  
  1865. intuition.library/EasyRequestArgs           intuition.library/EasyRequestArgs
  1866.  
  1867.     NAME
  1868.     EasyRequestArgs -- Easy alternative to AutoRequest(). (V36)
  1869.     EasyRequest -- Varargs stub for EasyRequestArgs(). (V36)
  1870.  
  1871.     SYNOPSIS
  1872.     num = EasyRequestArgs( Window, easyStruct, IDCMP_ptr, ArgList )
  1873.     D0                     A0      A1          A2         A3
  1874.  
  1875.     LONG EasyRequestArgs( struct Window *, struct EasyStruct *,
  1876.         ULONG *, APTR );
  1877.  
  1878.     num = EasyRequest( Window, easyStruct, IDCMP_ptr, Arg1, Arg2, ... )
  1879.  
  1880.     LONG EasyRequest( struct Window *, struct EasyStruct *,
  1881.         ULONG *, APTR, ... );
  1882.  
  1883.     ( from intuition.h )
  1884.     struct EasyStruct {
  1885.         ULONG    es_StructSize;
  1886.         ULONG    es_Flags;
  1887.         UBYTE    *es_Title;
  1888.         UBYTE    *es_TextFormat;
  1889.         UBYTE    *es_GadgetFormat;
  1890.     };
  1891.  
  1892.     FUNCTION
  1893.     This function provides a simpler method of using a 'System
  1894.     Requester' than provided by AutoRequest().  It performs layout
  1895.     and size calculations sensitive to the current font and screen
  1896.     resolution.
  1897.  
  1898.     It provides for the descriptive 'body' text and the gadget
  1899.     text to be constructed from 'printf' style format strings.
  1900.  
  1901.     It also provides a general way for the requester to be
  1902.     sensitive to particular IDCMP messages.
  1903.     
  1904.     The first function listed is the actual Intuition library
  1905.     function.  It is passed the arguments for the formatting
  1906.     operations as a pointer to the first argument.
  1907.  
  1908.     The second function uses a C-style variable number of argument
  1909.     (varargs) calling convention.  It should be implemented as
  1910.     a call to the first function, and might be supplied by your
  1911.     compiler vendor, in amiga.lib, or using the first example below,
  1912.     for most C compilers.
  1913.  
  1914.     NOTE: The formatting is done by exec.library/RawDoFmt(), so
  1915.     be aware that to display a 32-bit integer argument, for
  1916.     example, you must say "%ld", not "%d", since RawDoFmt() is
  1917.     "word-oriented."
  1918.  
  1919.     NOTE: This function switches the processor stack to ensure
  1920.     sufficient stack space for the function to complete.
  1921.  
  1922.     EXAMPLES
  1923.     /* varargs interface works for most C compilers */
  1924.     EasyRequest( w, es, ip, arg1 )
  1925.     struct Window    *w;
  1926.     struct EasyStruct *es;
  1927.     ULONG          *ip;
  1928.     int          arg1;
  1929.     {
  1930.         return ( EasyRequestArgs( w, es, ip, &arg1 ) );
  1931.     }
  1932.  
  1933.     /*********************************************/
  1934.  
  1935.     /* typical use */
  1936.     struct EasyStruct volumeES = {
  1937.         sizeof (struct EasyStruct),
  1938.         0,
  1939.         "Volume Request",
  1940.         "Please insert volume %s in any drive.",
  1941.         "Retry|Cancel",
  1942.     };
  1943.     #define CANCEL    (0)
  1944.  
  1945.     Volume    *
  1946.     getVolume( volname )
  1947.     UBYTE    *volname;
  1948.     {
  1949.         Volume    *vptr;
  1950.         Volume    *findVolume();
  1951.         UWORD    reply;
  1952.         ULONG    iflags;
  1953.  
  1954.         iflags = IDCMP_DISKINSERTED;
  1955.  
  1956.     while ( ((vptr = findVolume( volname )) == NULL) &&
  1957.      (EasyRequest( w, &volumeES, &iflags, volname ) != CANCEL) )
  1958.         /* loop */ ;
  1959.  
  1960.         /* note that in some circumstances, you will have to
  1961.            re-initialize the value of 'iflags'.  Here, it
  1962.            is either unchanged, or returned as the single
  1963.            IDCMPFlag value IDCMP_DISKINSERTED.  If you combine
  1964.            multiple  IDCMPFlag values in 'iflags,' only
  1965.            one will be returned, so you must reinitialize
  1966.            'iflags' to be the combination.
  1967.           */
  1968.         return ( vptr );
  1969.     }
  1970.  
  1971.     INPUTS
  1972.     Window = Reference window pointer, determines the screen and
  1973.         title of the requester window.  This can be NULL, which
  1974.         means the requester is to appear on the Workbench screen,
  1975.         or default public screen, if defined.
  1976.     IDCMP_ptr = Pointer to IDCMP flags that you want to terminate
  1977.         the requester.  This pointer may be NULL.
  1978.     easyStruct = Pointer to EasyStruct structure with fields
  1979.         interpreted as follows:
  1980.  
  1981.     es_StructSize = sizeof (struct EasyStruct), for future extension.
  1982.     es_Flags = 0 for now, in the future may specify other options.
  1983.     es_Title = Title of system requester window.  If this is NULL,
  1984.         the title will be taken to be the same as the title of 'Window',
  1985.         if provided, or else "System Request."
  1986.     es_TextFormat = Format string, a la RawDoFmt(), for message in
  1987.         requester body.  Lines are separated by the newline character.
  1988.         This character is represented in C by '\n', in the Amiga Shell
  1989.         by "*N", etc.  Formatting '%' functions are supported exactly
  1990.         as in RawDoFmt().
  1991.     es_GadgetFormat = Format string for gadgets.  Text for separate 
  1992.         gadgets is separated by '|'.  Format functions are supported.
  1993.         You MUST specify at least one gadget.
  1994.  
  1995.     ArgList = Arguments for format commands.   Arguments for
  1996.         GadFmt follow arguments for TextFmt.
  1997.  
  1998.     RESULT
  1999.     0, 1, ..., N = Successive GadgetID values, for the gadgets
  2000.         you specify for the requester.  NOTE: The numbering
  2001.         from left to right is actually: 1, 2, ..., N, 0.
  2002.         This is for compatibility with AutoRequest(), which has
  2003.         FALSE for the rightmost gadget.
  2004.         
  2005.     -1 = Means that one of the caller-supplied IDCMPFlags occurred.
  2006.         The IDCMPFlag value is in the longword pointed to by IDCMP_ptr.
  2007.  
  2008.     NOTES
  2009.     When DOS brings up EasyRequests() on your process (eg.
  2010.     "Please insert volume XXX in any drive", they normally come
  2011.     up on the default public screen, which is usually the Workbench
  2012.     screen.  If you set your Process pr_WindowPtr field to point to
  2013.     one of your windows, then DOS will bring its requesters up on the
  2014.     same screen as that window.  A pr_WindowPtr of -1 prevents
  2015.     requesters from coming up at all.
  2016.     (Some FileSystem requesters cannot be redirected or supressed).
  2017.  
  2018.     BUGS
  2019.     Does not fall back to a recoverable alert if the requester
  2020.      cannot be created.
  2021.  
  2022.     Does not handle case when gadgets don't fit or window title
  2023.     is too long, although it does trim trailing spaces from the
  2024.     title for calculating dimensions.
  2025.  
  2026.     PLANS
  2027.     Possible enhancements include: centering of text, size-sensitive
  2028.     layout,  window-relative requester, vertical gadget layout,
  2029.     window placement, more keyboard shortcuts.
  2030.  
  2031.     We also reserve the use of the newline character ('\n') in
  2032.     gadget format strings for future use as a line separator.
  2033.  
  2034.     SEE ALSO
  2035.     exec.library/RawDoFmt(), BuildEasyRequestArgs(), SysReqHandler(), 
  2036.     AutoRequest(), BuildSysRequest()
  2037. intuition.library/EndRefresh                     intuition.library/EndRefresh
  2038.  
  2039.     NAME
  2040.     EndRefresh -- End the optimized refresh state of the window.
  2041.  
  2042.     SYNOPSIS
  2043.     EndRefresh( Window, Complete )
  2044.             A0      D0
  2045.  
  2046.     VOID EndRefresh( struct Window *, BOOL );
  2047.  
  2048.     FUNCTION
  2049.     This function gets you out of the special refresh state of your 
  2050.     window.  It is called following a call to BeginRefresh(), which 
  2051.     routine puts you into the special refresh state.  While your window
  2052.     is in the refresh state, the only rendering that will be wrought in
  2053.     your window will be to those areas which were recently revealed and
  2054.     need to be refreshed.
  2055.  
  2056.     After you've done all the refreshing you want to do for this window, 
  2057.     you should call this routine to restore the window to its
  2058.     non-refreshing state.  Then all rendering will go to the entire
  2059.     window, as usual.
  2060.    
  2061.     The 'Complete' argument is a boolean TRUE or FALSE value used to 
  2062.     describe whether or not the refreshing you've done was all the
  2063.     refreshing that needs to be done at this time.  Most often, this
  2064.     argument will be TRUE.  But if, for instance, you have multiple
  2065.     tasks or multiple procedure calls which must run to completely
  2066.     refresh the window, then each can call its own Begin/EndRefresh() 
  2067.     pair with a Complete argument of FALSE, and only the last calls
  2068.     with a Complete argument of TRUE.
  2069.  
  2070.     WARNING:  Passing this function the value of FALSE has its
  2071.     pitfalls.  Please see the several caveats in the autodoc for
  2072.     BeginRefresh().
  2073.  
  2074.     For your information, this routine calls the Layers library function
  2075.     EndUpdate(), unlocks your layers (calls UnlockLayerRom()), clears
  2076.     the LAYERREFRESH bit in your Layer Flags, and clears the
  2077.     WFLG_WINDOWREFRESH bit in your window Flags.
  2078.  
  2079.     INPUTS
  2080.     Window = pointer to the window currently in optimized-refresh mode
  2081.     Complete = Boolean TRUE or FALSE describing whether or not this
  2082.            window is completely refreshed
  2083.  
  2084.     RESULT
  2085.     None
  2086.  
  2087.     BUGS
  2088.  
  2089.     SEE ALSO
  2090.     BeginRefresh(), layers.library/EndUpdate(),
  2091.     graphics.library/UnlockLayerRom()
  2092. intuition.library/EndRequest                     intuition.library/EndRequest
  2093.  
  2094.     NAME
  2095.     EndRequest -- Remove a currently active requester.
  2096.  
  2097.    SYNOPSIS
  2098.     EndRequest( Requester, Window )
  2099.             A0         A1
  2100.  
  2101.     VOID EndRequest( struct Requester *, struct Window * );
  2102.  
  2103.     FUNCTION
  2104.     Ends the request by erasing the requester and decoupling it from
  2105.     the window.
  2106.  
  2107.     Note that this doesn't necessarily clear all requesters from the window,
  2108.     only the specified one.  If the window labors under other requesters,
  2109.     they will remain in the window.
  2110.  
  2111.     INPUTS
  2112.     Requester = pointer to the requester to be removed
  2113.     Window = pointer to the Window structure with which this requester 
  2114.            is associated
  2115.  
  2116.     RESULT
  2117.     None
  2118.  
  2119.     BUGS
  2120.  
  2121.     SEE ALSO
  2122.     Request()
  2123. intuition.library/EraseImage                     intuition.library/EraseImage
  2124.  
  2125.    NAME    
  2126.     EraseImage -- Erases an Image. (V36)
  2127.  
  2128.    SYNOPSIS
  2129.     EraseImage( RPort, Image, LeftOffset, TopOffset )
  2130.                 A0     A1     D0          D1
  2131.  
  2132.     VOID EraseImage( struct RastPort *, struct Image *, WORD, WORD );
  2133.  
  2134.    FUNCTION
  2135.     Erases an Image.  For a normal Image structure, this will
  2136.     call the graphics function EraseRect() (clear using layer
  2137.     backfill, if any) for the Image box (LeftEdge/TopEdge/Width/Height).
  2138.  
  2139.     For custom image, the exact behavior is determined by the
  2140.     custom image class.
  2141.  
  2142.    INPUTS
  2143.      RPort    - RastPort to erase a part of
  2144.     Image    - custom or standard image
  2145.     LeftOffset,RightOffset - pixel offsets of Image position
  2146.  
  2147.    RESULT
  2148.      None.
  2149.  
  2150.    EXAMPLE
  2151.     
  2152.  
  2153.    NOTES
  2154.     
  2155.  
  2156.    BUGS
  2157.     
  2158.  
  2159.    SEE ALSO
  2160.     graphics.library/EraseRect().
  2161.  
  2162. intuition.library/FreeClass                       intuition.library/FreeClass
  2163.  
  2164.     NAME
  2165.     FreeClass -- Frees a boopsi class created by MakeClass(). (V36)
  2166.  
  2167.     SYNOPSIS
  2168.     success = FreeClass( ClassPtr )
  2169.     D0                   A0
  2170.  
  2171.     BOOL FreeClass( struct IClass * );
  2172.  
  2173.     FUNCTION
  2174.     For class implementors only.
  2175.  
  2176.     Tries to free a boopsi class created by MakeClass().  This
  2177.     won't always succeed: classes with outstanding objects or
  2178.     with subclasses cannot be freed.  You cannot allow the code
  2179.     which implements the class to be unloaded in this case.
  2180.  
  2181.     For public classes, this function will *always* remove
  2182.     the class (see RemoveClass() ) making it unavailable, whether
  2183.     it succeeds or not.
  2184.     
  2185.     If you have a dynamically allocated data for your class (hanging
  2186.     off of cl_UserData), try to free the class before you free the
  2187.     user data, so you don't get stuck with a half-freed class.
  2188.  
  2189.     INPUTS
  2190.     ClassPtr - pointer to a class created by MakeClass().
  2191.  
  2192.     RESULT
  2193.     Returns FALSE if the class could not be freed.  Reasons include,
  2194.     but will not be limited to, having non-zero cl_ObjectCount or
  2195.     cl_SubclassCount.
  2196.  
  2197.     Returns TRUE if the class could be freed.
  2198.  
  2199.     Calls RemoveClass() for the class in either case.
  2200.     
  2201.     EXAMPLE
  2202.     Freeing a private class with dynamically allocated user data:
  2203.  
  2204.     freeMyClass( cl )
  2205.     struct IClass    *cl;
  2206.     {
  2207.         struct MyPerClassData    *mpcd;
  2208.  
  2209.         mpcd = (struct MyPerClassData *) cl->cl_UserData;
  2210.         if ( FreeClass( cl ) )
  2211.         {
  2212.         FreeMem( mpcd, sizeof mpcd );
  2213.         return ( TRUE );
  2214.         }
  2215.         else
  2216.         {
  2217.         return ( FALSE );
  2218.         }
  2219.     }
  2220.  
  2221.     BUGS
  2222.  
  2223.     SEE ALSO
  2224.     MakeClass(),
  2225.     Document "Basic Object-Oriented Programming System for Intuition"
  2226.     and the "boopsi Class Reference" document.
  2227.     
  2228. intuition.library/FreeRemember                 intuition.library/FreeRemember
  2229.  
  2230.     NAME
  2231.     FreeRemember -- Free memory allocated by calls to AllocRemember().
  2232.  
  2233.     SYNOPSIS
  2234.     FreeRemember( RememberKey, ReallyForget )
  2235.               A0           D0
  2236.  
  2237.     VOID FreeRemember( struct Remember **, BOOL );
  2238.  
  2239.     FUNCTION
  2240.     This function frees up memory allocated by the AllocRemember() function.
  2241.     It will either free up just the Remember structures, which supply the
  2242.     link nodes that tie your allocations together, or it will deallocate
  2243.     both the link nodes AND your memory buffers too.
  2244.     
  2245.     If you want to deallocate just the Remember structure link nodes,
  2246.     you should set the ReallyForget argument to FALSE.  However, if you
  2247.     want FreeRemember to really deallocate all the memory, including
  2248.     both the Remember structure link nodes and the buffers you requested
  2249.     via earlier calls to AllocRemember(), then you should set the 
  2250.     ReallyForget argument to TRUE.
  2251.  
  2252.     NOTE WELL: Once you call this function passing it FALSE, the
  2253.     linkages between all the memory chunks are lost, and you
  2254.     cannot subsequently use FreeRemember() to free them.
  2255.  
  2256.     INPUTS
  2257.     RememberKey = the address of a pointer to struct Remember.  This
  2258.            pointer should either be NULL or set to some value (possibly
  2259.            NULL) by a call to AllocRemember().
  2260.     ReallyForget = a BOOL FALSE or TRUE describing, respectively, 
  2261.            whether you want to free up only the Remember nodes or 
  2262.            if you want this procedure to really forget about all of 
  2263.            the memory, including both the nodes and the memory buffers 
  2264.            referenced by the nodes.
  2265.  
  2266.     EXAMPLE
  2267.     struct Remember *RememberKey;
  2268.     RememberKey = NULL;
  2269.     AllocRemember(&RememberKey, BUFSIZE, MEMF_CHIP);
  2270.     FreeRemember(&RememberKey, TRUE);
  2271.  
  2272.     RESULT
  2273.     None
  2274.  
  2275.     BUGS
  2276.  
  2277.     SEE ALSO
  2278.     AllocRemember(), exec.library/FreeMem()
  2279. intuition.library/FreeScreenBuffer         intuition.library/FreeScreenBuffer
  2280.  
  2281.     NAME
  2282.     FreeScreenBuffer -- Free a ScreenBuffer structure. (V39)
  2283.  
  2284.     SYNOPSIS
  2285.     FreeScreenBuffer( Screen, ScreenBuffer )
  2286.                       A0      A1
  2287.  
  2288.     VOID FreeScreenBuffer( struct Screen *, struct ScreenBuffer * );
  2289.  
  2290.     FUNCTION
  2291.     Frees a ScreenBuffer structure you got from AllocScreenBuffer(),
  2292.     and releases associated resources.  You must call FreeScreenBuffer()
  2293.     before you close your screen.
  2294.  
  2295.     INPUTS
  2296.     Screen: pointer to the screen this ScreenBuffer is associated with.
  2297.     ScreenBuffer: pointer to a ScreenBuffer structure obtained from
  2298.         AllocScreenBuffer().  It is safe to call this function with
  2299.         a NULL argument.  It will have no effect.
  2300.  
  2301.     RESULT
  2302.     None.
  2303.  
  2304.     NOTES
  2305.     Originally, FreeScreenBuffer() did not WaitBlit() before freeing
  2306.     a BitMap.  The intent was that the application should do this.
  2307.     However, as this sort of thing is easily forgotten, WaitBlit()
  2308.     was added in V40.  Application writers should ensure that freeing
  2309.     the buffer is safe by calling WaitBlit() themselves.
  2310.  
  2311.     The SB_SCREEN_BITMAP flag instructs AllocScreenBuffer() to provide
  2312.     a ScreenBuffer referring to the screen's actual bitmap.  When
  2313.     you are done changing screen buffers, you must FreeScreenBuffer()
  2314.     the currently-installed ScreenBuffer before you close the screen.
  2315.     Intuition will recognize when FreeScreenBuffer() is called for
  2316.     the currently-installed ScreenBuffer, and will know to free the
  2317.     supporting structures but not the BitMap.  CloseScreen() will
  2318.     take care of that.
  2319.  
  2320.     BUGS
  2321.  
  2322.     SEE ALSO
  2323.     AllocScreenBuffer(), ChangeScreenBuffer(),
  2324.     graphics.library/ChangeVPBitMap()
  2325.  
  2326. intuition.library/FreeScreenDrawInfo     intuition.library/FreeScreenDrawInfo
  2327.  
  2328.    NAME    
  2329.      FreeScreenDrawInfo -- Finish using a DrawInfo structure. (V36)
  2330.  
  2331.    SYNOPSIS
  2332.     FreeScreenDrawInfo( Screen, DrInfo )
  2333.                 A0      A1
  2334.     
  2335.     VOID FreeScreenDrawInfo( struct Screen *, struct DrawInfo * );
  2336.  
  2337.    FUNCTION
  2338.     Declares that you are finished with the DrawInfo structure
  2339.     returned by GetScreenDrawInfo().
  2340.  
  2341.    INPUTS
  2342.      Screen - pointer to screen passed to GetScreenDrawInfo().
  2343.     DrInfo - pointer to DrawInfo returned by GetScreenDrawInfo().
  2344.         A NULL DrawInfo pointer is a valid parameter, signifying
  2345.         "do nothing".
  2346.  
  2347.    RESULT
  2348.      None
  2349.  
  2350.    NOTES
  2351.     This function, and GetScreenDrawInfo(), don't really do much, but
  2352.     they provide an upward compatibility path.  That means that
  2353.     if you misuse them today, they probably won't cause a problem,
  2354.     although they may someday later.  So, please be very careful
  2355.     only to use the DrawInfo structure between calls to
  2356.     GetScreenDrawInfo() and FreeScreenDrawInfo(), and be sure
  2357.     that you don't forget FreeScreenDrawInfo().
  2358.  
  2359.    BUGS
  2360.  
  2361.    SEE ALSO
  2362.     GetScreenDrawInfo()
  2363.  
  2364. intuition.library/FreeSysRequest             intuition.library/FreeSysRequest
  2365.  
  2366.     NAME
  2367.     FreeSysRequest -- Free resources gotten by a call to BuildSysRequest().
  2368.  
  2369.     SYNOPSIS
  2370.     FreeSysRequest( Window )
  2371.                 A0
  2372.  
  2373.     VOID FreeSysRequest( struct Window * );
  2374.  
  2375.     FUNCTION
  2376.     This routine frees up all memory allocated by a successful call to
  2377.     the BuildSysRequest() procedure.  If BuildSysRequest() returned a
  2378.     pointer to a window, then you are able to wait on the message port
  2379.     of that window to detect an event which satisfies the requester.
  2380.     When you want to remove the requester, you call this procedure.  It
  2381.     ends the requester and deallocates any memory used in the creation
  2382.     of the requester.  It also closes the special window that was opened
  2383.     for your system requester.
  2384.  
  2385.     For V36: It's OK if you pass a NULL or a TRUE (1) value to
  2386.     this function.  Also, this function properly disposes of
  2387.     requesters gotten using BuildEasyRequestArgs().
  2388.  
  2389.     INPUTS
  2390.     Window = value of the window pointer returned by a successful call to
  2391.            the BuildSysRequest() procedure
  2392.  
  2393.     RESULT
  2394.     None
  2395.  
  2396.     BUGS
  2397.  
  2398.     SEE ALSO
  2399.     BuildSysRequest(), AutoRequest(), CloseWindow()
  2400. intuition.library/GadgetMouse                   intuition.library/GadgetMouse
  2401.  
  2402.     NAME
  2403.     GadgetMouse -- Calculate gadget-relative mouse position. (V36)
  2404.  
  2405.     SYNOPSIS
  2406.     GadgetMouse( Gadget, GInfo, MousePoint )
  2407.              A0      A1     A2
  2408.  
  2409.     VOID GadgetMouse( struct GadgetInfo *, WORD * );
  2410.  
  2411.     FUNCTION
  2412.     Determines the current location of the mouse pointer relative
  2413.     to the upper-left corner of a custom gadget.  Typically used
  2414.     only in the GM_HANDLEINPUT and GM_GOACTIVE custom gadget hook
  2415.     routines.
  2416.  
  2417.     NEWS FLASH!!: These two hook routines are now passed the mouse
  2418.     coordinates, so this function has no known usefulness.
  2419.  
  2420.     We recommend that you don't call it.
  2421.  
  2422.     Note that this function calculates the mouse position taking
  2423.     "gadget relativity" (GFLG_RELRIGHT, GFLG_RELBOTTOM) into
  2424.     consideration.  If your custom gadget intends to ignore these
  2425.     properties, then you should either enjoin or inhibit your users
  2426.     from setting those bits, since Intuition won't ask if you respect
  2427.     them.
  2428.  
  2429.     INPUTS
  2430.     GInfo = A pointer to a GadgetInfo structure as passed to the
  2431.         custom gadget hook routine.
  2432.     MousePoint = address of two WORDS, or a pointer to a structure of
  2433.         type Point.
  2434.  
  2435.     RESULT
  2436.     Returns nothing.  Fills in the two words pointed to by
  2437.     MousePoint with the gadget-relative mouse position.
  2438.  
  2439.     BUGS
  2440.     Useless, since equivalent information is now passed to every
  2441.     function that might have a use for this.
  2442.  
  2443.     SEE ALSO
  2444.     
  2445. intuition.library/GetAttr                           intuition.library/GetAttr
  2446.  
  2447.     NAME
  2448.     GetAttr -- Inquire the value of some attribute of an object. (V36)
  2449.  
  2450.     SYNOPSIS
  2451.     attr = GetAttr( AttrID, Object, StoragePtr )
  2452.     D0        D0    A0    A1
  2453.  
  2454.     ULONG GetAttr( ULONG, APTR, ULONG * );
  2455.  
  2456.     FUNCTION
  2457.     Inquires from the specified object the value of the specified attribute.
  2458.  
  2459.     You always pass the address of a long variable, which will
  2460.     receive the same value that would be passed to SetAttrs() in
  2461.     the ti_Data portion of a TagItem element.  See the documentation
  2462.     for the class for exceptions to this general rule.
  2463.     
  2464.     Not all attributes will respond to this function.  Those that
  2465.     will are documented on a class-by-class basis.
  2466.  
  2467.     INPUTS
  2468.     AttrID = the attribute tag ID understood by the object's class
  2469.     Object = abstract pointer to the boopsi object you are interested in
  2470.     StoragePtr = pointer to appropriate storage for the answer
  2471.  
  2472.     RESULT
  2473.     Returns FALSE (0) if the inquiries of attribute are not provided
  2474.     by the object's class.
  2475.     
  2476.     NOTES
  2477.     This function invokes the OM_GET method of the object.
  2478.  
  2479.     BUGS
  2480.  
  2481.     SEE ALSO
  2482.     NewObject(), DisposeObject(), SetAttrs(), MakeClass(),
  2483.     Document "Basic Object-Oriented Programming System for Intuition"
  2484.     and the "boopsi Class Reference" document.
  2485.     
  2486. intuition.library/GetDefaultPubScreen   intuition.library/GetDefaultPubScreen
  2487.  
  2488.     NAME
  2489.     GetDefaultPubScreen -- Get name of default public screen. (V36)
  2490.  
  2491.     SYNOPSIS
  2492.     GetDefaultPubScreen( Namebuff )
  2493.                  A0
  2494.  
  2495.     VOID GetDefaultPubScreen( UBYTE * );
  2496.  
  2497.     FUNCTION
  2498.     Provides the name of the current default public screen.
  2499.     Only anticipated use is for Public Screen Manager utilities,
  2500.     since it is easy to open a visitor window on the default
  2501.     public screen without specifying the name.
  2502.  
  2503.     INPUTS
  2504.     Namebuff = a buffer of MAXPUBSCREENNAME.  This can be NULL.
  2505.  
  2506.     RESULT
  2507.     None.  Will provide the string "Workbench" in Namebuff if there
  2508.     is no current default public screen.
  2509.  
  2510.     NOTES
  2511.     This function actually "returns" in register D0 a pointer
  2512.     to the public screen.  Unfortunately, the lifespan of
  2513.     this pointer is not ensured; the screen could be closed
  2514.     at any time.  The *ONLY* legitimate use we can see for
  2515.     this return value is to compare for identity with the pointer
  2516.     to a public screen you either have a window open in, or
  2517.     a lock on using LockPubScreen(), to determine if that
  2518.     screen is in fact the default screen.
  2519.  
  2520.     Also note that if there no default public screen has been set,
  2521.     the return value of this function will be zero, and not a pointer
  2522.     to the Workbench screen.
  2523.  
  2524.     BUGS
  2525.     The function prototype does not reflect the return value.
  2526.  
  2527.     SEE ALSO
  2528.     SetDefaultPubScreen(), OpenWindow()
  2529. intuition.library/GetDefPrefs                   intuition.library/GetDefPrefs
  2530.  
  2531.     NAME
  2532.     GetDefPrefs -- Get a copy of the the Intuition default Preferences.
  2533.  
  2534.     SYNOPSIS
  2535.     Prefs = GetDefPrefs( PrefBuffer, Size )
  2536.     D0             A0          D0
  2537.  
  2538.     struct Preferences *GetDefPrefs( struct Preferences *, WORD );
  2539.  
  2540.     FUNCTION
  2541.     Gets a copy of the Intuition default preferences data.  Writes the
  2542.     data into the buffer you specify.  The number of bytes you want
  2543.     copied is specified by the size argument.
  2544.  
  2545.     The default preferences are those that Intuition uses when it
  2546.     is first opened.  If no preferences file is found, these are
  2547.     the preferences that are used.  These would also be the startup
  2548.     preferences in an AmigaDOS-less environment.
  2549.    
  2550.     It is legal to take a partial copy of the Preferences structure.
  2551.     The more pertinent preferences variables have been grouped near
  2552.     the top of the structure to facilitate the memory conservation
  2553.     that can be had by taking a copy of only some of the Preferences
  2554.     structure.
  2555.  
  2556.     INPUTS
  2557.     PrefBuffer = pointer to the memory buffer to receive your copy of the
  2558.                 Intuition Preferences structure
  2559.     Size = the number of bytes in your PrefBuffer, the number of bytes
  2560.           you want copied from the system's internal Preference settings
  2561.  
  2562.     RESULT
  2563.     Returns your parameter PrefBuffer.
  2564.  
  2565.     BUGS
  2566.  
  2567.     SEE ALSO
  2568.     GetPrefs()
  2569. intuition.library/GetPrefs                         intuition.library/GetPrefs
  2570.  
  2571.     NAME
  2572.     GetPrefs -- Get the current Intuition Preferences structure.
  2573.  
  2574.     SYNOPSIS
  2575.     Prefs = GetPrefs( PrefBuffer, Size )
  2576.     D0          A0          D0
  2577.  
  2578.     struct Preferences *GetPrefs( struct Preferences *, WORD );
  2579.  
  2580.     FUNCTION
  2581.     Gets a copy of the current Intuition Preferences structure.
  2582.     Writes the data into the buffer you specify.  The number of bytes you
  2583.     want copied is specified by the size argument.
  2584.    
  2585.     It is legal to take a partial copy of the Preferences structure.
  2586.     The more pertinent preferences variables have been grouped near
  2587.     the top of the structure to facilitate the memory conservation
  2588.     that can be had by taking a copy of only some of the Preferences
  2589.     structure.
  2590.  
  2591.     New for V36:  A new and more extensible method for supplying
  2592.     Preferences has been introduced in V36, and relies on file
  2593.     system notification.  The Intuition preferences items rely
  2594.     also on the IPrefs program.  Certain elements of the
  2595.     Preferences structure have been superseded by this new method.
  2596.     As much as possible, the Preferences structure returned by
  2597.     GetPrefs() reflect the current state of Preferences.  However,
  2598.     it is impossible to represent some of the V36-style preferences
  2599.     items using the existing Preferences structure.
  2600.  
  2601.     INPUTS
  2602.     PrefBuffer = pointer to the memory buffer to receive your copy of the
  2603.            Intuition Preferences
  2604.     Size = the number of bytes in your PrefBuffer, the number of bytes
  2605.            you want copied from the system's internal Preference settings
  2606.  
  2607.     RESULT
  2608.     Returns your parameter PrefBuffer.
  2609.  
  2610.     BUGS
  2611.  
  2612.     SEE ALSO
  2613.     GetDefPrefs(), SetPrefs()
  2614. intuition.library/GetScreenData               intuition.library/GetScreenData
  2615.  
  2616.     NAME 
  2617.     GetScreenData -- Get copy of a screen data structure.
  2618.  
  2619.     SYNOPSIS 
  2620.     Success = GetScreenData( Buffer, Size, Type, Screen ) 
  2621.     D0                       A0      D0    D1    A1
  2622.  
  2623.     BOOL GetScreenData( APTR, UWORD, UWORD, struct Screen * );
  2624.  
  2625.     FUNCTION 
  2626.     This function copies into the caller's buffer data from a Screen
  2627.     structure.  Typically, this call will be used to find the size, title
  2628.     bar height, and other values for a standard screen, such as the
  2629.     Workbench screen.
  2630.  
  2631.     To get the data for the Workbench screen, one would call:
  2632.         GetScreenData(buff, sizeof(struct Screen), WBENCHSCREEN, NULL)
  2633.  
  2634.     NOTE: if the requested standard screen is not open, this function
  2635.     will have the effect of opening it.
  2636.  
  2637.     This function has been useful for two basic types of things:
  2638.     1) Determining information about the Workbench screen, in
  2639.        preparation for opening a window on it.
  2640.     2) Attempts at discerning the user's preferences in a working
  2641.        screen, for "cloning" the Workbench modes and dimensions
  2642.        when opening a similar custom screen.
  2643.  
  2644.     Providing compatibility with both of these goals has proven
  2645.     difficult, as we introduce new display modes and screen scrolling
  2646.     in V36.  Read carefully the somewhat involved exceptions we
  2647.     elected to implement ...
  2648.  
  2649.     Changes as of V36:
  2650.  
  2651.     For V36 and later, the function LockPubScreen() is an improvement
  2652.     over this function, in that it doesn't copy the screen data
  2653.     but returns a pointer and a guarantee that the screen will not
  2654.     be closed.
  2655.  
  2656.     If the global public screen SHANGHAI mode is in effect (see
  2657.     SetPubScreenModes() ), this function will actually report on
  2658.     the default public screen, where "Workbench" windows will
  2659.     actually open.
  2660.  
  2661.     For V36 and later, this function does some "compatibility tricks"
  2662.     when you inquire about the WBENCHSCREEN.  To keep programs from
  2663.     "stumbling" into modes they don't understand, and because an NTSC
  2664.     machine may be running a PAL Workbench or PRODUCTIVITY, for example,
  2665.     the following "false" information is returned.
  2666.  
  2667.     The Screen.ViewPort.Modes field will either be HIRES or HIRES+LACE
  2668.     (with the SPRITES flag also set, as usual).  HIRES+LACE is
  2669.     used if the display mode selected for the Workbench screen
  2670.     is an interlaced screen of any type.
  2671.     
  2672.     The dimensions returned will be the *smaller* of the OSCAN_TEXT
  2673.     dimensions for the returned mode, and the actual dimensions
  2674.     of the Workbench screen.
  2675.  
  2676.     EXCEPTION: For specific compatibility considerations, if the
  2677.     Workbench is in one of the A2024 modes, the mode returned
  2678.     in Screen.ViewPort.Modes will be HIRES+LACE (with perhaps
  2679.     some "special" bits also set for future improvement), but
  2680.     with dimensions equal to the actual A2024-mode Workbench screen.
  2681.     This will favor programs which open windows on the A2024
  2682.     Workbench, but will cause some problems for programs which
  2683.     try to "clone" the Workbench screen using this function.
  2684.  
  2685.     If you want the real information about the modern Workbench
  2686.     screen, call LockPubScreen( "Workbench" ) and acquire its
  2687.     display mode ID by inquiring of the actual ViewPort (using
  2688.     graphics.library/GetVPModeID() ).
  2689.  
  2690.     You may then use the information you get to clone as many of
  2691.     the properties of the Workbench screen that you wish.
  2692.  
  2693.     In the long run, it's probably better to provide your user
  2694.     with a screen mode selection option, and skip all this.
  2695.  
  2696.     INPUTS 
  2697.     Buffer = pointer to a buffer into which data can be copied
  2698.     Size   = the size of the buffer provided, in bytes
  2699.     Type   = the screen type, as specified in OpenWindow() (WBENCHSCREEN,
  2700.         CUSTOMSCREEN, ...)
  2701.     Screen = ignored, unless type is CUSTOMSCREEN, which results only in
  2702.         copying 'size' bytes from 'screen' to 'buffer'
  2703.  
  2704.     RESULT 
  2705.     TRUE if successful
  2706.     FALSE if standard screen of Type 'type' could not be opened.
  2707.  
  2708.     BUGS 
  2709.     You cannot support the new V36 display modes using this function.
  2710.  
  2711.     SEE ALSO 
  2712.     OpenWindow(), LockPubScreen(), graphics.library/GetVPModeID(),
  2713.     SetPubScreenModes(), OpenScreen()
  2714. intuition.library/GetScreenDrawInfo       intuition.library/GetScreenDrawInfo
  2715.  
  2716.    NAME    
  2717.     GetScreenDrawInfo -- Get pointer to rendering information. (V36)
  2718.  
  2719.    SYNOPSIS
  2720.     DrInfo = GetScreenDrawInfo( Screen )
  2721.     D0                  A0
  2722.     
  2723.     struct DrawInfo *GetScreenDrawInfo( struct Screen * );
  2724.  
  2725.    FUNCTION
  2726.     Returns a pointer to a DrawInfo structure derived from the
  2727.     screen passed.  This data structure is READ ONLY.  The field
  2728.     dri_Version identifies which version of struct DrawInfo you
  2729.     are given a pointer to.
  2730.  
  2731.    INPUTS
  2732.      Screen        - pointer to a valid, open screen.
  2733.  
  2734.    RESULT
  2735.      DrInfo - pointer to a system-allocated DrawInfo structure,
  2736.     as defined in intuition/screens.h.
  2737.  
  2738.    NOTES
  2739.     Some information in the DrawInfo structure may in the future
  2740.     be calculated the first time this function is called for a
  2741.     particular screen.
  2742.  
  2743.     You must call FreeScreenDrawInfo() when you are done using the
  2744.     returned pointer.
  2745.  
  2746.     This function does not prevent a screen from closing.  Apply it
  2747.     only to the screens you opened yourself, or apply a protocol
  2748.     such as LockPubScreen().
  2749.  
  2750.     WARNING: Until further notice, the pointer returned does not
  2751.     remain valid after the screen is closed.
  2752.  
  2753.     This function and FreeScreenDrawInfo() don't really do much now,
  2754.     but they provide an upward compatibility path.  That means that
  2755.     if you misuse them today, they probably won't cause a problem,
  2756.     although they may someday later.  So, please be very careful
  2757.     only to use the DrawInfo structure between calls to
  2758.     GetScreenDrawInfo() and FreeScreenDrawInfo(), and be sure
  2759.     that you don't forget FreeScreenDrawInfo().
  2760.  
  2761.    BUGS
  2762.     Does not reflect to changes in screen modes, depth, or pens.
  2763.  
  2764.    SEE ALSO
  2765.     FreeScreenDrawInfo(), LockPubScreen(), intuition/screens.h
  2766.  
  2767. intuition.library/HelpControl                   intuition.library/HelpControl
  2768.  
  2769.     NAME 
  2770.     HelpControl -- Enable/disable Gadget-Help feature. (V39)
  2771.  
  2772.     SYNOPSIS 
  2773.     HelpControl( window, flags )
  2774.                  A0      D0
  2775.     
  2776.     VOID HelpControl( struct Window *, ULONG );
  2777.  
  2778.     FUNCTION 
  2779.     This function can be used to turn Gadget-Help on or off for
  2780.     your window.  Gadget-Help will also be enabled/disabled
  2781.     accordingly for all other windows which share the same
  2782.     help-group.  This allows Gadget-Help to be well-behaved
  2783.     for multiple-window applications.
  2784.  
  2785.     INPUTS 
  2786.     window - Pointer to the window you wish to affect.  (Other windows
  2787.         will also be affected, as explained above.
  2788.     flags - Currently, HC_GADGETHELP or zero are the allowed values.
  2789.  
  2790.     RESULT 
  2791.     One or more windows will have Gadget-Help turned on or off.
  2792.  
  2793.     NOTES
  2794.     You must use utility.library/GetUniqueID() to get a help-group
  2795.     identifier.  Never ever supply your own!
  2796.  
  2797.     SEE ALSO 
  2798.     WA_HelpGroup
  2799.  
  2800. intuition.library/InitRequester               intuition.library/InitRequester
  2801.  
  2802.     NAME
  2803.     InitRequester -- Initialize a Requester structure.
  2804.  
  2805.     SYNOPSIS
  2806.     InitRequester( Requester )
  2807.                A0
  2808.  
  2809.     VOID InitRequester( struct Requester * );
  2810.  
  2811.     FUNCTION
  2812.     Initializes a requester for general use.  After calling InitRequester,
  2813.     you need fill in only those Requester values that fit your needs.
  2814.     The other values are set to NULL--or zero--states.
  2815.  
  2816.     Note that the example in the early versions of the Intuition
  2817.     Reference Manual is flawed because the Requester structure is
  2818.     initialized BEFORE InitRequester is called.  Be sure to
  2819.     perform your initialization AFTER calling InitRequester.
  2820.  
  2821.     INPUTS
  2822.     Requester = a pointer to a Requester structure
  2823.  
  2824.     RESULT
  2825.     None
  2826.  
  2827.     BUGS
  2828.     Since the publication of the first Intuition Manual to this
  2829.     day, most people haven't used this function, and for
  2830.     compatibility reasons, we'll never be able to assume that
  2831.     they do.  Thus, this function is useless.
  2832.  
  2833.     SEE ALSO
  2834.     
  2835. intuition.library/IntuiTextLength           intuition.library/IntuiTextLength
  2836.  
  2837.     NAME
  2838.     IntuiTextLength -- Return the length (pixel-width) of an IntuiText.
  2839.  
  2840.     SYNOPSIS
  2841.     Length = IntuiTextLength( IText )
  2842.     D0                        A0
  2843.  
  2844.     LONG IntuiTextLength( struct IntuiText * );
  2845.  
  2846.     FUNCTION
  2847.     This routine accepts a pointer to an instance of an IntuiText structure,
  2848.     and returns the length (the pixel-width) of the string which that
  2849.     instance of the structure represents.
  2850.  
  2851.     NOTE: if the Font pointer of your IntuiText structure is set to NULL,
  2852.     you'll get the pixel-width of your text in terms of the current system
  2853.     default font.  You may wish to be sure that the field IText->ITextFont
  2854.     for 'default font' text is equal to the Font field of the screen it is
  2855.     being measured for.
  2856.  
  2857.     INPUTS
  2858.     IText = pointer to an instance of an IntuiText structure
  2859.  
  2860.     RESULT
  2861.     Returns the pixel-width of the text specified by the IntuiText data
  2862.  
  2863.     BUGS
  2864.     Would do better to take a RastPort as argument, so that a NULL in
  2865.     the Font pointer would lead automatically to the font for the
  2866.     intended target RastPort, rather than the system default font.
  2867.  
  2868.     SEE ALSO
  2869.     OpenScreen()
  2870. intuition.library/ItemAddress                   intuition.library/ItemAddress
  2871.  
  2872.     NAME
  2873.     ItemAddress -- Returns the address of the specified MenuItem.
  2874.  
  2875.     SYNOPSIS
  2876.     Item = ItemAddress( MenuStrip, MenuNumber )
  2877.     D0            A0         D0
  2878.  
  2879.     struct MenuItem *ItemAddress( struct Menu *, UWORD );
  2880.  
  2881.     FUNCTION
  2882.     This routine feels through the specified menu strip and returns the 
  2883.     address of the item specified by the menu number.  Typically,
  2884.     you will use this routine to get the address of a menu item from
  2885.     a menu number sent to you by Intuition after user has chosen from
  2886.     a window's menus.  
  2887.  
  2888.        This routine requires that the arguments are well-defined.
  2889.     MenuNumber may be equal to MENUNULL, in which case this routine returns
  2890.     NULL.  If MenuNumber doesn't equal MENUNULL, it's presumed to be a 
  2891.     valid item number selector for your menu strip, which includes:
  2892.            - a valid menu number
  2893.            - a valid item number
  2894.            - if the item specified by the above two components has a
  2895.              sub-item, the menu number may have a sub-item component, too.
  2896.  
  2897.     Note that there must be BOTH a menu number and an item number.  
  2898.     Because a sub-item specifier is optional, the address returned by
  2899.     this routine may point to either an item or a sub-item.
  2900.  
  2901.     INPUTS
  2902.     MenuStrip = a pointer to the first menu in your menu strip
  2903.     MenuNumber = the value which contains the packed data that selects
  2904.            the menu and item (and sub-item).  See the Intuition Reference
  2905.         Manual for information on menu numbers.
  2906.  
  2907.     RESULT
  2908.     If MenuNumber == MENUNULL, this routine returns NULL,
  2909.     else this routine returns the address of the menu item specified
  2910.     by MenuNumber.
  2911.  
  2912.     BUGS
  2913.  
  2914.     SEE ALSO
  2915.     The "Menus" chapter of the Intuition Reference Manual,
  2916.     or the Amiga ROM Kernel Manual
  2917. intuition.library/LendMenus                       intuition.library/LendMenus
  2918.  
  2919.     NAME
  2920.     LendMenus -- Lend window's menu action to another window. (V39)
  2921.  
  2922.     SYNOPSIS
  2923.     LendMenus( fromWindow, toWindow )
  2924.                A0          A1
  2925.  
  2926.     VOID LendMenus( struct Window *, struct Window * );
  2927.  
  2928.     FUNCTION
  2929.     This function is used to "lend" the menus of one window to
  2930.     another.  This means that menu events (for example, the user
  2931.     presses the mouse menu button) will take place in another
  2932.     window's menu (using that other window's menu strip and screen).
  2933.  
  2934.     The sole intended use of this function is to unify two
  2935.     windows on different screens that are attached.  (See
  2936.     SA_Parent, SA_FrontChild, SA_BackChild).  An example would
  2937.     be a program with a full-sized parent screen which has a
  2938.     short control panel screen attached in the front.  Pressing the
  2939.     menu button even when the control panel window of the canvas
  2940.     screen is active can now cause the menus of the parent screen
  2941.     to appear.
  2942.  
  2943.     INPUTS
  2944.     fromWindow = pointer to the Window structure whose menu actions
  2945.         are to go to another window.
  2946.     toWindow = pointer to the Window structure whose menus are to
  2947.         be displayed in place of the fromWindow's.  If NULL, turns
  2948.         off menu-lending from the fromWindow.
  2949.  
  2950.     RESULT
  2951.     None.
  2952.  
  2953.     BUGS
  2954.     The current behavior is such that the toWindow is temporarily
  2955.     activated.  This may not continue to be the case.  Be prepared
  2956.     to handle this!
  2957.  
  2958.     SEE ALSO
  2959.     SetMenuStrip(), ClearMenuStrip()
  2960. intuition.library/LockIBase                       intuition.library/LockIBase
  2961.  
  2962.     NAME
  2963.     LockIBase -- Invoke semaphore arbitration of IntuitionBase.
  2964.  
  2965.     SYNOPSIS
  2966.     Lock = LockIBase( LockNumber )
  2967.     D0                D0
  2968.  
  2969.     ULONG LockIBase( ULONG );
  2970.  
  2971.     FUNCTION
  2972.     Grabs Intuition internal semaphore so that caller may examine
  2973.     IntuitionBase safely.  This function is not a magic "fix all my
  2974.     race conditions" panacea.
  2975.  
  2976.     The idea here is that you can get the locks Intuition needs before
  2977.     such IntuitionBase fields as ActiveWindow and FirstScreen are
  2978.     changed, or linked lists of windows and screens are changed.
  2979.  
  2980.     Do Not Get Tricky with this entry point, and do not hold these locks
  2981.     for long, as all Intuition input processing will wait for you to
  2982.     surrender the lock by a call to UnlockIBase().
  2983.  
  2984.     NOTE WELL: A call to this function MUST be paired with a subsequent
  2985.     call to UnlockIBase(), and soon, please.
  2986.  
  2987.     NOTE WELL: Do not call any Intuition functions (nor any graphics,
  2988.     layers, dos, or other high-level system function) while
  2989.     holding this lock.
  2990.  
  2991.     INPUTS
  2992.     A long unsigned integer, LockNumber, specifies which of Intuition's
  2993.     internal locks you want to get.  This parameter should be zero for all
  2994.     forseeable uses of this function, which will let you examine active
  2995.     fields and linked lists of screens and windows with safety.
  2996.  
  2997.     RESULT
  2998.     Returns another ULONG which should be passed to UnlockIBase() to
  2999.     surrender the lock gotten by this call.
  3000.  
  3001.     BUGS
  3002.     This function must not be called while holding any other system locks
  3003.     such as layer or LayerInfo locks.
  3004.  
  3005.     SEE ALSO
  3006.     UnlockIBase(), layers.library/LockLayerInfo(),
  3007.     exec.library/ObtainSemaphore()
  3008. intuition.library/LockPubScreen               intuition.library/LockPubScreen
  3009.  
  3010.     NAME
  3011.     LockPubScreen -- Prevent a public screen from closing. (V36)
  3012.  
  3013.     SYNOPSIS
  3014.     screen = LockPubScreen( Name )
  3015.     D0                      A0
  3016.  
  3017.     struct Screen *LockPubScreen( UBYTE * );
  3018.  
  3019.     FUNCTION
  3020.     Prevents a public screen (or the Workbench) from closing
  3021.     while you examine it in preparation of opening a visitor window.
  3022.  
  3023.     The sequence you use to open a visitor window that needs to
  3024.     examine fields in the screen it is about to open on is:
  3025.         LockPubScreen()
  3026.         ... examine fields ...
  3027.         OpenWindow() on public screen
  3028.         UnlockPubScreen()
  3029.         ... use your window ...
  3030.         CloseWindow()
  3031.  
  3032.     NOTE 
  3033.     You needn't hold the "pubscreen lock" for the duration that
  3034.     your window is opened.  LockPubScreen() basically has the
  3035.     same effect as an open visitor window: it prevents the
  3036.     screen from being closed.
  3037.  
  3038.     If you pass the string "Workbench" or you pass NULL and there
  3039.     is no default public screen, the Workbench screen will
  3040.     be automatically opened if it is not already present.
  3041.  
  3042.     INPUTS
  3043.     Name = name string for public screen or NULL for default public
  3044.     screen.  The string "Workbench" indicates the Workbench
  3045.     screen.
  3046.  
  3047.     RESULT
  3048.     Returns pointer to a screen, if successful, else NULL.
  3049.     The call can fail for reasons including that the named
  3050.     public screen doesn't exist or is in private state.
  3051.  
  3052.     BUGS
  3053.  
  3054.     SEE ALSO
  3055.     OpenWindow(), UnlockPubScreen(), GetScreenData()
  3056. intuition.library/LockPubScreenList       intuition.library/LockPubScreenList
  3057.  
  3058.     NAME
  3059.     LockPubScreenList -- Prevent changes to the system list. (V36)
  3060.  
  3061.     SYNOPSIS
  3062.     List = LockPubScreenList()
  3063.     D0
  3064.  
  3065.     struct List *LockPubScreenList( VOID );
  3066.  
  3067.     FUNCTION
  3068.     Arbitrates access to public screen list    while you quickly
  3069.     make a copy of it for display to the user.
  3070.  
  3071.     Note that this is intended only for the Public Screen Manager
  3072.     program.
  3073.  
  3074.     NOTES
  3075.     The nodes on the list are PubScreenNode structures.
  3076.     Act quickly while holding this lock.  The restrictions
  3077.     on LockIBase() apply here as well.
  3078.  
  3079.     INPUTS
  3080.     None.
  3081.  
  3082.     RESULT
  3083.     A pointer to the public screen list.
  3084.  
  3085.     BUGS
  3086.  
  3087.     SEE ALSO
  3088.     UnlockPubScreenList(), OpenScreen(), Intuition V36 update documentation    
  3089. intuition.library/MakeClass                       intuition.library/MakeClass
  3090.  
  3091.     NAME
  3092.     MakeClass -- Create and initialize a boopsi class. (V36)
  3093.  
  3094.     SYNOPSIS
  3095.     iclass = MakeClass( ClassID, SuperClassID, SuperClassPtr,
  3096.     D0                  A0       A1            A2
  3097.         InstanceSize, Flags )
  3098.             D0            D1
  3099.  
  3100.     struct IClass *MakeClass( UBYTE *, UBYTE *, struct IClass *,
  3101.         UWORD, ULONG );
  3102.  
  3103.     FUNCTION
  3104.     For class implementors only.
  3105.     
  3106.     This function creates a new public or private boopsi class.
  3107.     The superclass should be defined to be another boopsi class:
  3108.     all classes are descendants of the class "rootclass".
  3109.  
  3110.     Superclasses can be public or private.  You provide a name/ID
  3111.     for your class if it is to be a public class (but you must
  3112.     have registered your class name and your attribute ID's with
  3113.     Commodore before you do this!).  For a public class, you would
  3114.     also call AddClass() to make it available after you have
  3115.     finished your initialization.
  3116.  
  3117.     Returns pointer to an IClass data structure for your
  3118.     class.  You then initialize the Hook cl_Dispatcher for
  3119.     your class methods code.  You can also set up special data
  3120.     shared by all objects in your class, and point cl_UserData at it. 
  3121.     The last step for public classes is to call AddClass().
  3122.  
  3123.     You dispose of a class created by this function by calling
  3124.     FreeClass().
  3125.  
  3126.     INPUTS
  3127.     ClassID = NULL for private classes, the name/ID string for public
  3128.         classes
  3129.     SuperClassID = name/ID of your new class's superclass.  NULL if
  3130.         superclass is a private class
  3131.     SuperClassPtr = pointer to private superclass.  Only used if
  3132.         SuperClassID is NULL.  You are required never to provide
  3133.         a NULL superclass.
  3134.     InstanceSize = the size of the instance data that your class's
  3135.         objects will require, beyond that data defined for
  3136.         your superclass's objects.
  3137.     Flags = for future enhancement, including possible additional
  3138.         parameters.  Provide zero for now.
  3139.  
  3140.     RESULT
  3141.     Pointer to the resulting class, or NULL if not possible:
  3142.     - no memory for class data structure
  3143.     - public superclass not found
  3144.     - public class of same name/ID as this one already exists
  3145.     
  3146.     NOTES
  3147.  
  3148.     EXAMPLE
  3149.     Creating a private subclass of a public class:
  3150.  
  3151.     /* per-object instance data defined by my class    */
  3152.     struct MyInstanceData {
  3153.     ULONG    mid_SomeData;
  3154.     };
  3155.  
  3156.     /* some useful table I'll share use for all objects */
  3157.     UWORD myTable[] = {
  3158.     5, 4, 3, 2, 1, 0
  3159.     };
  3160.  
  3161.     struct IClass    *
  3162.     initMyClass()
  3163.     {
  3164.     ULONG __saveds    myDispatcher();
  3165.     ULONG    hookEntry();    /* asm-to-C interface glue    */
  3166.     struct IClass    *cl;
  3167.     struct IClass    *MakeClass();
  3168.  
  3169.     if ( cl =  MakeClass( NULL, 
  3170.             SUPERCLASSID, NULL,        /* superclass is public      */
  3171.             sizeof (struct MyInstanceData),
  3172.             0 ))
  3173.     {
  3174.         /* initialize the cl_Dispatcher Hook    */
  3175.         cl->cl_Dispatcher.h_Entry = hookEntry;
  3176.         cl->cl_Dispatcher.h_SubEntry = myDispatcher;
  3177.         cl->cl_Dispatcher.h_Data = (VOID *) 0xFACE;    /* unused */
  3178.  
  3179.         cl-cl_UserData = (ULONG) myTable;
  3180.     }
  3181.     return ( cl );
  3182.     }
  3183.  
  3184.     BUGS
  3185.     The typedef 'Class' isn't consistently used.  Class pointers
  3186.     used blindly should be APTR, or struct IClass for class implementors.
  3187.  
  3188.     SEE ALSO
  3189.     FreeClass(), AddClass(), RemoveClass(), NewObject(),
  3190.     Document "Basic Object-Oriented Programming System for Intuition"
  3191.     and the "boopsi Class Reference" document.
  3192. intuition.library/MakeScreen                     intuition.library/MakeScreen
  3193.  
  3194.     NAME
  3195.     MakeScreen -- Do an Intuition-integrated MakeVPort() of a screen.
  3196.  
  3197.     SYNOPSIS
  3198.     failure = MakeScreen( Screen )
  3199.     D0 (V39)              A0
  3200.  
  3201.     LONG MakeScreen( struct Screen * );
  3202.     /* Returns LONG in V39 and greater */
  3203.  
  3204.     FUNCTION
  3205.     This procedure allows you to do a MakeVPort() for the viewport of your
  3206.     custom screen in an Intuition-integrated way.  This way you can
  3207.     do your own screen manipulations without worrying about interference
  3208.     with Intuition's usage of the same viewport.
  3209.  
  3210.     The operation of this function is as follows:
  3211.         - Block until the Intuition View structure is not in being changed.
  3212.         - Set the view modes correctly to reflect if there is a (visible)
  3213.           interlaced screen.
  3214.         - call MakeVPort(), passing the Intuition View and your screen's
  3215.           ViewPort.
  3216.         - Unlocks the Intuition View.
  3217.  
  3218.     After calling this routine, you should call RethinkDisplay() to 
  3219.     incorporate the new viewport of your custom screen into the 
  3220.     Intuition display.
  3221.  
  3222.     NOTE: Intuition may determine that because of a change in global
  3223.     interlace needs that all viewports need to be remade, so
  3224.     it may effectively call RemakeDisplay().
  3225.  
  3226.     INPUTS
  3227.     Screen = address of the custom screen structure
  3228.  
  3229.     RESULT
  3230.     Starting with V39, returns zero for success, non-zero for failure.
  3231.     Probable cause of failure is failure of graphics.library/MakeVPort().
  3232.     Prior to V39, the return code is invalid.  Do not interpret it when
  3233.     running on pre-V39 systems!
  3234.  
  3235.     BUGS
  3236.  
  3237.     SEE ALSO
  3238.     RethinkDisplay(), RemakeDisplay(), graphics.library/MakeVPort()
  3239. intuition.library/ModifyIDCMP                   intuition.library/ModifyIDCMP
  3240.  
  3241.     NAME
  3242.     ModifyIDCMP -- Modify the state of a window's IDCMPFlags.
  3243.  
  3244.     SYNOPSIS
  3245.     Success = ModifyIDCMP( Window, IDCMPFlags )
  3246.     D0 (V37)               A0      D0
  3247.  
  3248.     BOOL ModifyIDCMP( struct Window *, ULONG );
  3249.     /* returns BOOL in V37 and greater */
  3250.  
  3251.     FUNCTION
  3252.     This routine modifies the state of your window's IDCMP (Intuition
  3253.     Direct Communication Message Port).  The state is modified to reflect
  3254.     your desires as described by the flag bits in the value IDCMPFlags.
  3255.  
  3256.     The four actions that might be taken are:
  3257.  
  3258.        - if there is currently no IDCMP in the given window, and IDCMPFlags
  3259.          is zero, nothing happens
  3260.        - if there is currently no IDCMP in the given window, and any of the
  3261.          IDCMPFlags is selected (set), then the IDCMP of the window is
  3262.          created, including allocating and initializing the message ports
  3263.          and allocating a signal bit for your port.  See the "Input and
  3264.          Output Methods" chapter of the Intuition Reference Manual for full
  3265.       details
  3266.        - if the IDCMP for the given window exists, and the 
  3267.          IDCMPFlags argument is zero, this says that you want 
  3268.          Intuition to close the ports, free the buffers and free 
  3269.          your signal bit.  You MUST be the same task that was active 
  3270.          when this signal bit was allocated (either by ModifyIDCMP()
  3271.       or OpenWindow() ).
  3272.        - if the IDCMP for the given window is opened, and the IDCMPFlags
  3273.          argument is not zero, this means that you want to change the 
  3274.          state of which events will be broadcast to you through the IDCMP
  3275.  
  3276.     NOTE:  You can set up the Window->UserPort to any port of your own
  3277.     before you call ModifyIDCMP().  If IDCMPFlags is non-null but 
  3278.     your UserPort is already initialized, Intuition will assume that 
  3279.     it's a valid port with task and signal data preset and Intuition 
  3280.     won't disturb your set-up at all, Intuition will just allocate 
  3281.     the Intuition message port half of it.  The converse is true 
  3282.     as well:  if UserPort is NULL when you call here with 
  3283.     IDCMPFlags == NULL, Intuition will deallocate only the Intuition
  3284.     side of the port.  
  3285.  
  3286.     This allows you to use a port that you already have allocated:  
  3287.        - OpenWindow() with IDCMPFlags equal to NULL (open no ports)
  3288.        - set the UserPort variable of your window to any valid port of your
  3289.          own choosing
  3290.        - call ModifyIDCMP with IDCMPFlags set to what you want
  3291.        - then, to clean up later, set UserPort equal to NULL before calling
  3292.          CloseWindow() (leave IDCMPFlags alone)  BUT FIRST: you must make
  3293.       sure that no messages sent your window are queued at the port,
  3294.       since they will be returned to the memory free pool.
  3295.  
  3296.     For an example of how to close a window with a shared IDCMP,
  3297.     see the description for CloseWindow().
  3298.  
  3299.  
  3300.     INPUTS
  3301.     Window = pointer to the Window structure containing the IDCMP ports
  3302.     IDCMPFlags = the flag bits describing the new desired state of
  3303.         the IDCMP.  The flags are:
  3304.  
  3305.         - IDCMP_REQVERIFY is the flag which, like IDCMP_SIZEVERIFY and ...
  3306.  
  3307.         - IDCMP_MENUVERIFY (see immediately below), specifies that you
  3308.           want to make sure that your graphical state is quiescent
  3309.           before something extraordinary happens.  In this case, the
  3310.           extraordinary event is that a rectangle of graphical data is
  3311.           about to be blasted into your Window.  If you're drawing
  3312.           directly into its screen, you probably will wish to make sure
  3313.           that you've ceased drawing before the user is allowed to bring
  3314.           up the DMRequest you've set up, and the same for when system
  3315.           has a request for the user.  Set this flag to ask for that
  3316.           verification step.
  3317.  
  3318.         - IDCMP_REQCLEAR is the flag you set to hear a message whenever
  3319.           a requester is cleared from your window.  If you are using
  3320.           IDCMP_REQVERIFY to arbitrate access to your screen's bitmap, it
  3321.           is safe to start your output once you have heard an
  3322.           IDCMP_REQCLEAR for each IDCMP_REQSET.
  3323.  
  3324.         - IDCMP_REQSET is a flag that you set to receive a broadcast
  3325.           for each requester that is opened in your window.  Compare
  3326.           this with IDCMP_REQCLEAR above.  This function is distinct
  3327.           from IDCMP_REQVERIFY.  This functions merely tells you that a
  3328.           requester has opened, whereas IDCMP_REQVERIFY requires you to
  3329.           respond before the requester is opened.
  3330.  
  3331.         - IDCMP_MENUVERIFY is the flag you set to have Intuition stop
  3332.           and wait for you to finish all graphical output to your
  3333.           window before rendering the menus.  Menus are currently
  3334.           rendered in the most memory-efficient way, which involves
  3335.           interrupting output to all windows in the screen before the
  3336.           menus are drawn.  If you need to finish your graphical
  3337.           output before this happens, you can set this flag to make
  3338.           sure that you do.
  3339.  
  3340.         - IDCMP_SIZEVERIFY means that you will be doing output to your
  3341.           window which depends on a knowledge of the current size of the
  3342.           window.  If the user wants to resize the window,  you may want
  3343.           to make sure that any queued output completes before the sizing
  3344.           takes place (critical text, for instance).  If this is the
  3345.           case, set this flag.   Then, when the user wants to size,
  3346.           Intuition will send you the IDCMP_SIZEVERIFY message and Wait()
  3347.           until you reply that it's OK to proceed with the sizing. NOTE:
  3348.           when we say that Intuition will Wait() until you reply, what
  3349.           we're really saying is that user will WAIT until you reply, which
  3350.           suffers the great negative potential of User-Unfriendliness.
  3351.           So remember:  use this flag sparingly, and, as always with any
  3352.           IDCMP Message you receive, reply to it promptly!  Then, after
  3353.           user has sized the window, you can find out about it using
  3354.           IDCMP_NEWSIZE.
  3355.  
  3356.         With all the "VERIFY" functions, it is not save to leave them
  3357.         enabled at any time when your task may not be able to respond
  3358.         for a long period.
  3359.  
  3360.         It is NEVER safe to call AmigaDOS, directly or indirectly, when
  3361.         a "VERIFY" function is active.  If AmigaDOS needs to put up a
  3362.         disk requester for you, your task might end up waiting for the
  3363.         requester to be satisfied, at the same time as Intuition is
  3364.         waiting for your response.  The result is a complete machine
  3365.         lockup.  USE ModifyIDCMP() TO TURN OFF ANY VERIFY MESSAGES
  3366.         BEFORE CALLING dos.library!!
  3367.  
  3368.         For V36: If you do not respond to the verification IntuiMessages
  3369.         within the user specified timeout duration, Intuition will abort
  3370.         the operation.  This eliminates the threat of these easy
  3371.         deadlocks, but can result in a confused user.  Please try
  3372.         hard to continue to avoid "logical deadlocks".
  3373.  
  3374.         - IDCMP_NEWSIZE is the flag that tells Intuition to send an IDCMP
  3375.           message to you after the user has resized your window.  At
  3376.           this point, you could examine the size variables in your
  3377.           window structure to discover the new size of the window.
  3378.           See also the IDCMP_CHANGEWINDOW IDCMP flag.
  3379.  
  3380.         - IDCMP_REFRESHWINDOW when set will cause a message to be sent
  3381.           whenever your window needs refreshing.  This flag makes
  3382.           sense only with WFLG_SIMPLE_REFRESH and WFLG_SMART_REFRESH
  3383.           windows.
  3384.  
  3385.         - IDCMP_MOUSEBUTTONS will get reports about mouse-button up/down
  3386.           events broadcast to you (Note:  only the ones that
  3387.           don't mean something to Intuition.  If the user clicks the
  3388.           select button over a gadget, Intuition deals with it and you
  3389.           don't find out about it through here).
  3390.  
  3391.         - IDCMP_MOUSEMOVE will work only if you've set the 
  3392.           WFLG_REPORTMOUSE flag above, or if one of your gadgets has the
  3393.           GACT_FOLLOWMOUSE flag set.  Then all mouse movements will be
  3394.           reported here, providing your window is active.
  3395.  
  3396.         - IDCMP_GADGETDOWN means that when the User "selects" a gadget
  3397.           you've created with the GACT_IMMEDIATE flag set, the fact
  3398.           will be broadcast through the IDCMP.
  3399.  
  3400.         - IDCMP_GADGETUP means that when the user "releases" a gadget that
  3401.           you've created with the GACT_RELVERIFY flag set, the fact
  3402.           will be broadcast through the IDCMP.  This message is
  3403.           only generated if the release is "good", such as releasing
  3404.           the select button over a Boolean gadget, or typing ENTER
  3405.           in a string gadget.
  3406.  
  3407.         - IDCMP_MENUPICK selects that menu number data will be sent via
  3408.           the IDCMP.
  3409.  
  3410.         - IDCMP_CLOSEWINDOW means broadcast the IDCMP_CLOSEWINDOW event
  3411.           through the IDCMP rather than the console.
  3412.  
  3413.         - IDCMP_RAWKEY selects that all IDCMP_RAWKEY events are
  3414.           transmitted via the IDCMP.  Note that these are absolutely RAW
  3415.           keycodes, which you will have to translate before using.
  3416.           Setting this and the MOUSE flags effectively eliminates the need
  3417.           to open a Console device to get input from the keyboard and
  3418.           mouse.  Of course, in exchange you lose all of the console
  3419.           features, most notably the "cooking" of input data and
  3420.           the systematic output of text to your window.
  3421.  
  3422.         - IDCMP_VANILLAKEY is for developers who don't want the hassle
  3423.           of IDCMP_RAWKEYS.  This flag will return all the keycodes after
  3424.           translation via the current country-dependent keymap.  When
  3425.           you set this flag, you will get IntuiMessages where the Code
  3426.           field has a decoded ANSI character code representing the key
  3427.           struck on the keyboard.  Only codes that map to a single
  3428.           character are returned: you can't read such keys as HELP or
  3429.           the function keys with IDCMP_VANILLAKEY.
  3430.  
  3431.           NEW FOR V36: If you have both IDCMP_RAWKEY and IDCMP_VANILLAKEY
  3432.           set, Intuition will send an IDCMP_RAWKEY event for those
  3433.           *downstrokes* which do not map to single-byte characters
  3434.           ("non-vanilla" keys).  In this way you can easily detect cursor
  3435.           keys, function keys, and the Help key without sacrificing the
  3436.           convenience of IDCMP_VANILLAKEY.  NB: A side-effect of having
  3437.           both IDCMP_RAWKEY and IDCMP_VANILLAKEY set is that you never
  3438.           hear IDCMP_RAWKEY upstrokes, even for keys that caused
  3439.           IDCMP_RAWKEY downstrokes.
  3440.  
  3441.         - IDCMP_INTUITICKS gives you simple timer events from Intuition
  3442.           when your window is the active one; it may help you avoid
  3443.           opening and managing the timer device.  With this flag set,
  3444.           you will get only one queued-up INTUITICKS message at a
  3445.           time.  If Intuition notices that you've been sent an
  3446.           IDCMP_INTUITICKS message and haven't replied to it, another
  3447.           message will not be sent.  Intuition receives timer events and
  3448.           considers sending you an IDCMP_INTUITICKS message approximately
  3449.           ten times a second.
  3450.  
  3451.         - IDCMP_DELTAMOVE gives raw (unscaled) input event delta X/Y
  3452.           values.  This is so you can detect mouse motion regardless of
  3453.           screen/window/display boundaries.  This works a little
  3454.           strangely: if you set both IDCMP_MOUSEMOVE and IDCMP_DELTAMOVE.
  3455.           IDCMPFlags, you will get IDCMP_MOUSEMOVE messages with delta
  3456.           x/y values in the MouseX and MouseY fields of the
  3457.           IDCMPMessage.
  3458.  
  3459.         - IDCMP_NEWPREFS indicates you wish to be notified when the
  3460.           system-wide Preferences changes.  For V36, there is a new
  3461.           environment mechanism to replace Preferences, which we
  3462.           recommend you consider using instead.
  3463.  
  3464.         - Set IDCMP_ACTIVEWINDOW and IDCMP_INACTIVEWINDOW to get messages
  3465.           when those events happen to your window.  Take care not to
  3466.           confuse this "ACTIVEWINDOW" with the familiar sounding, but
  3467.           totally different "WINDOWACTIVE" flag.  These two flags have
  3468.           been supplanted by "IDCMP_ACTIVEWINDOW" and "WFLG_WINDOWACTIVE".
  3469.           Use the new equivalent terms to avoid confusion.
  3470.  
  3471.         - Set IDCMP_DISKINSERTED or IDCMP_DISKREMOVED to learn when
  3472.           removable disks are inserted or removed, respectively.
  3473.  
  3474.         - IDCMP_IDCMPUPDATE is a new class for V36 which is used as
  3475.           a channel of communication from custom and boopsi gadgets
  3476.           to your application.
  3477.  
  3478.         - IDCMP_CHANGEWINDOW is a new class for V36 that will be sent
  3479.           to your window whenever its dimensions or position are changed
  3480.           by the user or the functions SizeWindow(), MoveWindow(),
  3481.           ChangeWindowBox(), or ZipWindow().
  3482.  
  3483.         - IDCMP_MENUHELP is new for V37.  If you specify the WA_MenuHelp
  3484.           tag when you open your window, then when the user presses the
  3485.           HELP key on the keyboard during a menu session, Intuition will
  3486.           terminate the menu session and issue this even in place of an
  3487.           IDCMP_MENUPICK message.
  3488.         - NEVER follow the NextSelect link for MENUHELP messages.
  3489.         - You will be able to hear MENUHELP for ghosted menus.
  3490.           (This lets you tell the user why the option is ghosted.)
  3491.         - Be aware that you can receive a MENUHELP message whose code
  3492.           corresponds to a menu header or an item that has sub-items
  3493.           (which does not happen for MENUPICK).  The code may also be
  3494.           MENUNULL.
  3495.         - LIMITATION:  if the user extend-selects some checkmarked
  3496.           items with the mouse, then presses MENUHELP, your
  3497.           application will only hear the MENUHELP report.  You
  3498.           must re-examine the state of your checkmarks when you
  3499.           get a MENUHELP.
  3500.         - Availability of MENUHELP in V36 is not directly
  3501.           controllable.  We apologize...
  3502.  
  3503.         - IDCMP_GADGETHELP is new for V39.  If you turn on
  3504.           gadget help for your window (using the HelpControl())
  3505.           function, then Intuition will send IDCMP_GADGETHELP
  3506.           messages when the mouse passes over certain gadgets or
  3507.           your window.  The IntuiMessage->Code field is normally
  3508.           ~0, but a boopsi gadget can return any word value it wishes.
  3509.  
  3510.           Ordinarily, gadget help is only processed for the active
  3511.           window.  When Intuition has determined that the mouse is
  3512.           pointing at a gadget which has the GMORE_GADGETHELP
  3513.           property, you will be sent an IDCMP_GADGETHELP message
  3514.           whose IAddress points to the gadget.  When the mouse is
  3515.           over your window but not over any help-aware gadget, you
  3516.           will be sent a message whose IAddress is the window
  3517.           itself.  When the mouse is not over your window,
  3518.           Intuition sends a message whose IAddress is zero.
  3519.  
  3520.           A multi-window application can use the WA_HelpGroup or
  3521.           WA_HelpGroupWindow tags to indicate that all its windows
  3522.           belong in a group.  (The help group identifier should be
  3523.           obtained with utility.library/GetUniqueID().) This makes
  3524.           Intuition test gadget help in all windows of the group
  3525.           when any one of them is the active one.  Inactive windows
  3526.           whose WA_HelpGroup matches the active window's receive
  3527.           IDCMP_GADGETHELP messages when the mouse is over that
  3528.           window or any of its help-aware gadgets.  The GADGETHELP
  3529.           message with an IAddress of zero means the mouse is not
  3530.           over the active window or any other window of the same
  3531.           group.  It is always sent to the active window (which is
  3532.           not necessarily the window in your group that last got a
  3533.           message).
  3534.  
  3535.           To maximize performance, gadget help is not checked
  3536.           while the mouse is travelling quickly, or if it has not
  3537.           moved at all since the last test.  As well, if Intuition
  3538.           discovers that the mouse is still over same gadget and
  3539.           that gadget does not wish to send a different
  3540.           IntuiMessage->Code from the last message, no new
  3541.           IntuiMessage is sent.
  3542.  
  3543.     RESULT
  3544.     Starting in V37, this function returns NULL if it was unable
  3545.     to create the necessary message ports.  (The possibility of
  3546.     failure exists in earlier releases, but no return code was offered).
  3547.     Do not check the return code under V36 or earlier.
  3548.  
  3549.     BUGS
  3550.  
  3551.     SEE ALSO
  3552.     OpenWindowTagList(), OpenWindow(), CloseWindow()
  3553. intuition.library/ModifyProp                     intuition.library/ModifyProp
  3554.  
  3555.     NAME
  3556.     ModifyProp -- Modify the current parameters of a proportional gadget.
  3557.  
  3558.     SYNOPSIS
  3559.     ModifyProp( Gadget, Window, Requester, 
  3560.             A0        A1        A2
  3561.                    Flags, HorizPot, VertPot, HorizBody, VertBody )
  3562.             D0       D1         D2          D3     D4
  3563.  
  3564.     VOID ModifyProp( struct Gadget *, struct Window *,
  3565.         struct Requester *, UWORD, UWORD, UWORD, UWORD, UWORD );
  3566.  
  3567.     FUNCTION
  3568.     Modifies the parameters of the specified proportional gadget.  The 
  3569.     gadget's internal state is then recalculated and the imagery 
  3570.     is redisplayed in the window or requester that contains the gadget.
  3571.  
  3572.     The requester variable can point to a requester structure.  If the 
  3573.     gadget has the GTYP_REQGADGET flag set, the gadget is in a requester 
  3574.     and the window pointer must point to the window of the requester.
  3575.     If this is not the gadget of a requester, the requester argument may
  3576.     be NULL.
  3577.  
  3578.     NOTE: this function causes all gadgets from the proportional
  3579.     gadget to the end of the gadget list to be refreshed, for
  3580.     reasons of compatibility.
  3581.     For more refined display updating, use NewModifyProp().
  3582.  
  3583.     New for V36: ModifyProp() refreshing consists of redrawing gadgets
  3584.     completely.  NewModifyProp() has changed this behavior (see 
  3585.     NewModifyProp()).
  3586.    
  3587.     INPUTS
  3588.     PropGadget = pointer to a proportional gadget
  3589.     Window = pointer to the window containing the gadget or the window
  3590.         containing the requester containing the gadget.
  3591.     Requester = pointer to a requester (may be NULL if this isn't 
  3592.         a requester gadget)
  3593.     Flags = value to be stored in the Flags field of the PropInfo
  3594.     HorizPot = value to be stored in the HorizPot field of the PropInfo
  3595.     VertPot = value to be stored in the VertPot field of the PropInfo
  3596.     HorizBody = value to be stored in the HorizBody field of the PropInfo
  3597.     VertBody = value to be stored in the VertBody field of the PropInfo
  3598.  
  3599.     RESULT
  3600.     None
  3601.  
  3602.     BUGS
  3603.  
  3604.     SEE ALSO
  3605.     NewModifyProp()
  3606.     The Intuition Reference Manual and Amiga ROM Kernel Manual contain
  3607.     more information on Proportional Gadgets.
  3608. intuition.library/MoveScreen                     intuition.library/MoveScreen
  3609.  
  3610.     NAME
  3611.     MoveScreen -- Attempt to move the screen by the increments provided.
  3612.  
  3613.     SYNOPSIS
  3614.     MoveScreen( Screen, DeltaX, DeltaY )
  3615.             A0      D0      D1
  3616.  
  3617.     VOID MoveScreen( struct Screen *, WORD, WORD );
  3618.  
  3619.     FUNCTION
  3620.     Moves the screen the specified increment, specified in screen
  3621.     pixel resolution coordinates.
  3622.  
  3623.     New for V36: Screen movement limits have been greatly relaxed,
  3624.     to support screen scrolling.  In particular, negative values
  3625.     for screen LeftEdge and TopEdge may now be valid.
  3626.  
  3627.        If the DeltaX and DeltaY variables you specify would move the screen
  3628.        in a way that violates any restrictions, the screen will be moved
  3629.        as far as possible.  You may examine the LeftEdge and TopEdge fields
  3630.     of the Screen structure after this function returns to see where
  3631.     the screen really ended up.
  3632.  
  3633.     INPUTS
  3634.     Screen = pointer to a Screen structure
  3635.     DeltaX = amount to move the screen on the x-axis
  3636.         Note that DeltaX no longer (V36) need be set to zero
  3637.     DeltaY = amount to move the screen on the y-axis
  3638.         Note that these coordinates are in the same resolution
  3639.         as the screen (such as HIRES or INTERLACE)
  3640.  
  3641.     RESULT
  3642.     None
  3643.  
  3644.     BUGS
  3645.  
  3646.     SEE ALSO
  3647.     ScreenPosition(), RethinkDisplay()
  3648. intuition.library/MoveWindow                     intuition.library/MoveWindow
  3649.  
  3650.     NAME
  3651.     MoveWindow -- Ask Intuition to move a window.
  3652.  
  3653.     SYNOPSIS
  3654.     MoveWindow( Window, DeltaX, DeltaY )
  3655.             A0      D0      D1
  3656.  
  3657.     VOID MoveWindow( struct Window *, WORD, WORD );
  3658.  
  3659.     FUNCTION
  3660.     This routine sends a request to Intuition asking to move the window 
  3661.     the specified distance.  The delta arguments describe how far to 
  3662.     move the window along the respective axes.  
  3663.  
  3664.     Note that the window will not be moved immediately, but rather 
  3665.     will be moved the next time Intuition receives an input event, 
  3666.     which happens currently at a minimum rate of ten times per second,
  3667.     and a maximum of sixty times a second.  
  3668.  
  3669.     Interactions with other arbitration of Intuition data structures
  3670.     may defer this operation longer.  For V36, you can use the new
  3671.     IDCMP class IDCMP_CHANGEWINDOW to detect when this operation has
  3672.     completed.
  3673.  
  3674.     New for V36: Intuition now will do validity checking on the final
  3675.     position.  To send absolute movements, or to move and size a
  3676.     window in one step, use ChangeWindowBox().
  3677.  
  3678.     INPUTS
  3679.     Window = pointer to the structure of the Window to be moved
  3680.     DeltaX = how far to move the Window on the x-axis
  3681.     DeltaY = how far to move the Window on the y-axis
  3682.  
  3683.     RESULT
  3684.     None
  3685.  
  3686.     BUGS
  3687.  
  3688.     SEE ALSO
  3689.     ChangeWindowBox(), SizeWindow(), WindowToFront(), WindowToBack()
  3690. intuition.library/MoveWindowInFrontOf   intuition.library/MoveWindowInFrontOf
  3691.  
  3692.     NAME
  3693.     MoveWindowInFrontOf -- Arrange the relative depth of a window. (V36)
  3694.  
  3695.     SYNOPSIS
  3696.     MoveWindowInFrontOf( Window, BehindWindow )
  3697.                  A0      A1
  3698.  
  3699.     VOID MoveWindowInFrontOf( struct Window *, struct Window * );
  3700.  
  3701.     FUNCTION
  3702.     Depth-arranges a window in front of an another window.
  3703.     Brings out the layers.library MoveLayerInFrontOf() to the
  3704.     Intuition user.
  3705.  
  3706.     INPUTS
  3707.     Window =  window to re-position in front of another window
  3708.     BehindWindow =  window to re-position in front of
  3709.  
  3710.     RESULT
  3711.     Repositions window.
  3712.  
  3713.     BUGS
  3714.     Doesn't respect backdrop windows.
  3715.     
  3716.     SEE ALSO
  3717.     WindowToFront(), WindowToBack(), layers.library/MoveLayerInFrontOf()
  3718. intuition.library/NewModifyProp               intuition.library/NewModifyProp
  3719.  
  3720.     NAME
  3721.     NewModifyProp -- ModifyProp(), but with selective refresh.
  3722.  
  3723.     SYNOPSIS
  3724.     NewModifyProp( Gadget, Window, Requester, Flags,
  3725.                A0      A1      A2         D0
  3726.         HorizPot, VertPot, HorizBody, VertBody, NumGad )
  3727.         D1        D2       D3         D4        D5
  3728.  
  3729.     VOID NewModifyProp( struct Gadget *, struct Window *,
  3730.         struct Requester *, UWORD, UWORD, UWORD, UWORD, UWORD, WORD );
  3731.  
  3732.     FUNCTION
  3733.     Performs the function of ModifyProp(), but refreshes
  3734.     gadgets in the list as specified by the NumGad parameter. 
  3735.     With NumGad = -1, this function is identical to ModifyProp().
  3736.  
  3737.     New for V36: When NumGad = 1, this function will now perform
  3738.     an incremental update of the proportional gadget knob image,
  3739.     rather than refreshing the entire gadget.  This means much
  3740.     less flashing when programmatically scrolling a proportional
  3741.     gadget.
  3742.    
  3743.     INPUTS
  3744.     PropGadget = pointer to a proportional gadget
  3745.     Window = pointer to the window containing the gadget or the window
  3746.         containing the requester containing the gadget.
  3747.     Requester = pointer to a requester (may be NULL if this isn't 
  3748.         a requester gadget)
  3749.     Flags = value to be stored in the Flags field of the PropInfo
  3750.     HorizPot = value to be stored in the HorizPot field of the PropInfo
  3751.     VertPot = value to be stored in the VertPot field of the PropInfo
  3752.     HorizBody = value to be stored in the HorizBody field of the PropInfo
  3753.     VertBody = value to be stored in the VertBody field of the PropInfo
  3754.     NumGad = number of gadgets to be refreshed after propgadget internals
  3755.         have been adjusted.  -1 means "to end of list."
  3756.          
  3757.     RESULT
  3758.     None
  3759.  
  3760.     BUGS
  3761.  
  3762.     SEE ALSO 
  3763.     ModifyProp()
  3764.     The Intuition Reference Manual contains more information on
  3765.     Proportional Gadgets.
  3766. intuition.library/NewObject                       intuition.library/NewObject
  3767.  
  3768.     NAME
  3769.     NewObjectA -- Create an object from a class. (V36)
  3770.     NewObject -- Varargs stub for NewObjectA(). (V36)
  3771.  
  3772.     SYNOPSIS
  3773.     object = NewObjectA( class, classID, tagList )
  3774.     D0                   A0     A1       A2
  3775.  
  3776.     APTR NewObjectA( struct IClass *, UBYTE *, struct TagItem * );
  3777.  
  3778.     object = NewObject( class, classID, Tag1, ... )
  3779.  
  3780.     APTR NewObject( struct IClass *, UBYTE *, ULONG, ... );
  3781.  
  3782.     FUNCTION
  3783.     This is the general method of creating objects from 'boopsi' classes.
  3784.     ('Boopsi' stands for "basic object-oriented programming system for
  3785.     Intuition".)
  3786.  
  3787.     You specify a class either as a pointer (for a private class) or
  3788.     by its ID string (for public classes).  If the class pointer
  3789.     is NULL, then the classID is used.
  3790.  
  3791.     You further specify initial "create-time" attributes for the
  3792.     object via a TagItem list, and they are applied to the resulting
  3793.     generic data object that is returned.  The attributes, their meanings,
  3794.     attributes applied only at create-time, and required attributes
  3795.     are all defined and documented on a class-by-class basis.
  3796.     
  3797.     INPUTS
  3798.     class = abstract pointer to a boopsi class gotten via MakeClass().
  3799.     classID = the name/ID string of a public class.  This parameter is
  3800.         only used if 'class' is NULL.
  3801.     tagList = pointer to array of TagItems containing attribute/value
  3802.         pairs to be applied to the object being created
  3803.  
  3804.     RESULT
  3805.     A boopsi object, which may be used in different contexts such
  3806.     as a gadget or image, and may be manipulated by generic functions.
  3807.     You eventually free the object using DisposeObject().
  3808.     
  3809.     NOTES
  3810.     This function invokes the OM_NEW "method" for the class specified.
  3811.  
  3812.     BUGS
  3813.     Typedef's for 'Object' and 'Class' are defined in the include
  3814.     files but not used consistently.  The generic type APTR is
  3815.     probably best used for object and class "handles", with the
  3816.     type (UBYTE *) used for classID strings.
  3817.  
  3818.     SEE ALSO
  3819.     DisposeObject(), SetAttrs(), GetAttr(), MakeClass(),
  3820.     Document "Basic Object-Oriented Programming System for Intuition"
  3821.     and the "boopsi Class Reference" document.
  3822.     
  3823. intuition.library/NextObject                     intuition.library/NextObject
  3824.  
  3825.     NAME
  3826.     NextObject -- iterate through the object on an Exec list. (V36)
  3827.  
  3828.     SYNOPSIS
  3829.     object = NextObject( objectPtrPtr )
  3830.     D0                   A0
  3831.  
  3832.     APTR NextObject( APTR );
  3833.  
  3834.     FUNCTION
  3835.     This function is for boopsi class implementors only.
  3836.  
  3837.     When you collect a set of boopsi objects on an Exec List
  3838.     structure by invoking their OM_ADDMEMBER method, you
  3839.     can (only) retrieve them by iterations of this function.
  3840.  
  3841.     Works even if you remove and dispose the returned list
  3842.     members in turn.
  3843.  
  3844.     INPUTS
  3845.     Initially, you set a pointer variable to equal the
  3846.     lh_Head field of the list (or mlh_Head field of a MinList).
  3847.     You pass the *address* of that pointer repeatedly
  3848.     to NextObject() until it returns NULL.
  3849.     
  3850.     EXAMPLE
  3851.  
  3852.     /* here is the OM_DISPOSE case of some class's dispatcher */
  3853.     case OM_DISPOSE:
  3854.         /* dispose members    */
  3855.         object_state = mydata->md_CollectionList.lh_Head;
  3856.         while ( member_object = NextObject( &object_state ) )
  3857.         {
  3858.         DoMethod( member_object, OM_REMOVE ); /* remove from list */
  3859.         DoMethodA( member, msg );    /* and pass along dispose    */
  3860.         }
  3861.  
  3862.     RESULT
  3863.     Returns pointers to each object in the list in turn, and NULL
  3864.     when there are no more.
  3865.     
  3866.     NOTES
  3867.  
  3868.     BUGS
  3869.  
  3870.     SEE ALSO
  3871.     DisposeObject(), SetAttrs(), GetAttr(), MakeClass(),
  3872.     Document "Basic Object-Oriented Programming System for Intuition"
  3873.     and the "boopsi Class Reference" document.
  3874. intuition.library/NextPubScreen               intuition.library/NextPubScreen
  3875.  
  3876.     NAME
  3877.     NextPubScreen -- Identify next public screen in the cycle. (V36)
  3878.  
  3879.     SYNOPSIS
  3880.     Buff = NextPubScreen( Screen, NameBuff )
  3881.     D0                    A0      A1
  3882.  
  3883.     UBYTE *NextPubScreen( struct Screen *, UBYTE * );
  3884.  
  3885.     FUNCTION
  3886.     Returns name of next public screen in system rotation, to
  3887.     allow visitor windows to provide function to "jump" among
  3888.     public-screens in a cycle.
  3889.  
  3890.     INPUTS
  3891.     Screen = pointer to the screen your window is currently open in,
  3892.       or NULL, if you don't have a pointer to a public screen.
  3893.     NameBuff = pointer to a buffer of MAXPUBSCREENNAME+1 characters,
  3894.       for Intuition to fill in with the name of the next public
  3895.       screen in rotation.
  3896.  
  3897.     RESULT
  3898.     Returns NULL if there are no public screens, otherwise a
  3899.     pointer to your NameBuff.
  3900.  
  3901.     NOTES
  3902.     There is no guarantee that the public screen whose name
  3903.     was returned by this function will exist or be in "public" state
  3904.     by the time you call LockPubScreen(), etc.  You must handle
  3905.     cases where LockPubScreen(), etc. will fail.
  3906.  
  3907.     Note that this function may return the name of a public screen
  3908.     which is open but in "private mode" (see PubScreenStatus() and
  3909.     PSNF_PRIVATE).
  3910.  
  3911.     BUGS
  3912.     Due to a bug, your buffer needs to be (MAXPUBSCREENNAME + 1)
  3913.     characters big, which is one more than originally documented.
  3914.  
  3915.     The starting screen and cycle order of the public screens isn't
  3916.     defined, so do not draw conclusions about the order you
  3917.     see in the current version of Intuition.  We reserve the
  3918.     right to add meaning to the ordering at a future time.
  3919.  
  3920.     SEE ALSO
  3921.     OpenScreen(), Intuition V36 update documentation    
  3922. intuition.library/ObtainGIRPort               intuition.library/ObtainGIRPort
  3923.  
  3924.     NAME
  3925.     ObtainGIRPort -- Set up a RastPort for a custom gadget. (V36)
  3926.  
  3927.     SYNOPSIS
  3928.     RPort = ObtainGIRPort( GInfo )
  3929.     D0               A0
  3930.  
  3931.     struct RastPort *ObtainGIRPort( struct GadgetInfo * );
  3932.  
  3933.     FUNCTION
  3934.     Sets up a RastPort for use (only) by custom gadget hook routines.
  3935.     This function must be called EACH time a hook routine needing
  3936.     to perform gadget rendering is called, and must be accompanied
  3937.     by a corresponding call to ReleaseGIRPort().
  3938.  
  3939.     Note that if a hook function passes you a RastPort pointer,
  3940.     e.g., GM_RENDER, you needn't call ObtainGIRPort() in that case.
  3941.  
  3942.     INPUTS
  3943.     A pointer to a GadgetInfo structure, as passed to each custom
  3944.     gadget hook function.
  3945.  
  3946.     RESULT
  3947.     A pointer to a RastPort that may be used for gadget rendering.
  3948.     This pointer may be NULL, in which case you should do no rendering.
  3949.     You may (optionally) pass a null return value to ReleaseGIRPort().
  3950.  
  3951.     BUGS
  3952.  
  3953.     SEE ALSO
  3954.     ReleaseGIRPort(), Custom Gadget documentation
  3955.     
  3956. intuition.library/OffGadget                       intuition.library/OffGadget
  3957.  
  3958.     NAME
  3959.     OffGadget -- Disable the specified gadget.
  3960.  
  3961.     SYNOPSIS
  3962.     OffGadget( Gadget, Window, Requester )
  3963.            A0      A1      A2
  3964.  
  3965.     VOID OffGadget( struct Gadget *, struct Window *,
  3966.         struct Requester * );
  3967.  
  3968.     FUNCTION
  3969.     This command disables the specified gadget.  When a gadget is
  3970.     disabled, these things happen:
  3971.          - its imagery is displayed ghosted
  3972.          - the GFLG_DISABLED flag is set
  3973.          - the gadget cannot be selected by User
  3974.  
  3975.     The window parameter must point to the window which contains the
  3976.     gadget, or which contains the requester that contains the gadget.
  3977.     The requester parameter must only be valid if the gadget has the
  3978.     GTYP_REQGADGET flag set, a requirement for all requester gadgets.
  3979.  
  3980.        NOTE:  it's never safe to tinker with the gadget list yourself.  Don't
  3981.        supply some gadget that Intuition hasn't already processed in
  3982.        the usual way.
  3983.  
  3984.         NOTE: for compatibility reasons, this function will refresh all
  3985.     gadgets in a requester, and all gadgets from gadget to the 
  3986.     end of the gadget list if gadget is in a window.
  3987.  
  3988.     If you want to improve on this behavior, you may perform the
  3989.     equivalent operation yourself: remove a gadget or gadgets,
  3990.     change the state of their GFLG_DISABLED flag, replace the
  3991.     gadgets using AddGList(), and selectively call RefreshGList().
  3992.  
  3993.     INPUTS
  3994.     Gadget = pointer to the gadget that you want disabled
  3995.     Window = pointer to a window structure containing the gadget or
  3996.         containing the requester which contains the gadget
  3997.     Requester = pointer to a requester (may by NULL if this isn't 
  3998.            a requester gadget (i.e. GTYP_REQGADGET is not set)).
  3999.  
  4000.     RESULT
  4001.     None
  4002.  
  4003.     BUGS
  4004.  
  4005.     SEE ALSO
  4006.     OnGadget(), AddGadget(), RefreshGadgets()
  4007.  
  4008. intuition.library/OffMenu                           intuition.library/OffMenu
  4009.  
  4010.     NAME
  4011.     OffMenu -- Disable the given menu or menu item.
  4012.  
  4013.     SYNOPSIS
  4014.     OffMenu( Window, MenuNumber )
  4015.          A0      D0
  4016.  
  4017.     VOID OffMenu( struct Window *, UWORD );
  4018.  
  4019.     FUNCTION
  4020.     This command disables a sub-item, an item, or a whole menu.
  4021.     This depends on the contents of the data packed into MenuNumber,
  4022.     which is described in the Intuition Reference Manual.
  4023.  
  4024.     INPUTS
  4025.     Window = pointer to the window
  4026.     MenuNumber = the menu piece to be disabled
  4027.  
  4028.     RESULT
  4029.     None
  4030.  
  4031.     BUGS
  4032.  
  4033.     SEE ALSO
  4034.     OnMenu(), ResetMenuStrip()
  4035. intuition.library/OnGadget                         intuition.library/OnGadget
  4036.  
  4037.     NAME
  4038.     OnGadget -- Enable the specified gadget.
  4039.  
  4040.     SYNOPSIS
  4041.     OnGadget( Gadget, Window, Requester )
  4042.           A0      A1      A2
  4043.  
  4044.     VOID OnGadget( struct Gadget *, struct Window *,
  4045.         struct Requester * );
  4046.  
  4047.     FUNCTION
  4048.     This command enables the specified gadget.  When a gadget is
  4049.     enabled, these things happen:
  4050.         - its imagery is displayed normally (not ghosted)
  4051.         - the GFLG_DISABLED flag is cleared
  4052.         - the gadget can thereafter be selected by the user
  4053.  
  4054.     The window parameter must point to the window which contains the
  4055.     gadget, or which contains the requester that contains the gadget
  4056.     The requester parameter must only be valid if the gadget has the
  4057.     GTYP_REQGADGET flag set, a requirement for all requester gadgets.
  4058.  
  4059.        NOTE:  it's never safe to tinker with the gadget list yourself.  Don't
  4060.        supply some gadget that Intuition hasn't already processed in
  4061.        the usual way.
  4062.  
  4063.         NOTE: for compatibility reasons, this function will refresh all
  4064.     gadgets in a requester, and all gadgets from gadget to the 
  4065.     end of the gadget list if gadget is in a window.
  4066.  
  4067.     If you want to improve on this behavior, you may perform the
  4068.     equivalent operation yourself: remove a gadget or gadgets,
  4069.     change the state of their GFLG_DISABLED flag, replace the
  4070.     gadgets using AddGList(), and selectively call RefreshGList().
  4071.  
  4072.     INPUTS
  4073.     Gadget = pointer to the gadget that you want disabled
  4074.     Window = pointer to a window structure containing the gadget or
  4075.         containing the requester which contains the gadget
  4076.     Requester = pointer to a requester (may by NULL if this isn't 
  4077.            a requester gadget (i.e. GTYP_REQGADGET is not set)).
  4078.  
  4079.     RESULT
  4080.     None
  4081.  
  4082.     BUGS
  4083.     Traditional gadgets are rendered very simply.  This can result
  4084.     in incomplete clearing away of the ghosting pattern when
  4085.     OnGadget() is used.  For example, a button whose imagery consists
  4086.     of an IntuiText inside a rectangular Border doesn't have the
  4087.     button interior cleared by OnGadget().  This is because OnGadget()
  4088.     clears the GFLG_DISABLED flag then redraws the gadget.  Redrawing
  4089.     this gadget consists of redrawing the border and text.  Nothing
  4090.     redraws the field.
  4091.  
  4092.     The solution to this type of problem is to either use a gadget
  4093.     whose imagery is a struct Image that covers the whole select area,
  4094.     or to manually remove the gadget, erase the gadget's select area
  4095.     (say using EraseRect()), then clear the GFLG_DISABLED flag,
  4096.     add the gadget back to the window, and refresh it.
  4097.  
  4098.     SEE ALSO
  4099.     OffGadget()
  4100.  
  4101. intuition.library/OnMenu                             intuition.library/OnMenu
  4102.  
  4103.     NAME
  4104.     OnMenu -- Enable the given menu or menu item.
  4105.  
  4106.     SYNOPSIS
  4107.     OnMenu( Window, MenuNumber )
  4108.             A0      D0
  4109.  
  4110.     VOID OnMenu( struct Window *, UWORD );
  4111.  
  4112.     FUNCTION
  4113.     This command enables a sub-item, an item, or a whole menu.
  4114.     This depends on the contents of the data packed into MenuNumber,
  4115.     which is described in the Intuition Reference Manual.
  4116.  
  4117.     INPUTS
  4118.     Window = pointer to the window
  4119.     MenuNumber = the menu piece to be enables
  4120.  
  4121.     RESULT
  4122.     None
  4123.  
  4124.     BUGS
  4125.  
  4126.     SEE ALSO
  4127.     OffMenu(), ResetMenuStrip()
  4128. intuition.library/OpenScreen                     intuition.library/OpenScreen
  4129.  
  4130.     NAME
  4131.     OpenScreen -- Open an Intuition screen.
  4132.  
  4133.     SYNOPSIS
  4134.     Screen = OpenScreen( NewScreen )
  4135.     D0             A0
  4136.  
  4137.     struct Screen *OpenScreen( struct NewScreen * );
  4138.  
  4139.     or
  4140.  
  4141.     struct Screen *OpenScreen( struct ExtNewScreen * );
  4142.  
  4143.     FUNCTION
  4144.     Opens an Intuition screen according to the specified parameters
  4145.     found in the NewScreen structure.
  4146.  
  4147.     Does all the allocations, sets up the screen structure and all
  4148.     substructures completely, and links this screen's viewport into 
  4149.     Intuition's View structure.
  4150.  
  4151.     Before you call OpenScreen(), you must initialize an instance of
  4152.     a NewScreen structure.  NewScreen is a structure that contains
  4153.     all of the arguments needed to open a screen.  The NewScreen
  4154.     structure may be discarded immediately after OpenScreen() returns.
  4155.  
  4156.     The SHOWTITLE flag is set to TRUE by default when a screen is opened.
  4157.     To change this, you must call the routine ShowTitle().
  4158.  
  4159.     INPUTS
  4160.     NewScreen = pointer to an instance of a NewScreen structure.
  4161.  
  4162.     New for V36: 
  4163.     In addition to the information contained in the NewScreen structure,
  4164.     Intuition now recognizes extended data passed in the form
  4165.     of an array of TagItem structures (from <utility/tagitem.h>),
  4166.     commonly called a "tag list."
  4167.  
  4168.     There are two ways to provide this array.  The first is to 
  4169.     use the new Intuition entry point OpenScreenTagList() and 
  4170.     pass the tag list as a parameter.  This is the recommended
  4171.     method, and has a convenient format variation for C programs
  4172.     using a variable number of arguments.
  4173.  
  4174.     An older way used for some V36 development uses the OpenScreen()
  4175.     entry point, and an extension of the NewScreen structure named
  4176.     ExtNewScreen.  See the documentation of the flag NS_EXTENDED,
  4177.     below.
  4178.  
  4179.     While we recommend that you use OpenScreenTagList() rather than
  4180.     OpenScreen() when using the extension tag list, we document
  4181.     the tag ID values here, so that all parameters for opening
  4182.     a screen can be found in one place.
  4183.  
  4184.     NewScreen is initialized with the following information:
  4185.     -------------------------------------------------------------
  4186.     Left = initial x-position of your screen (should be zero for
  4187.     releases prior to V36)
  4188.  
  4189.     Top = initial y-position of the opening screen
  4190.     (Note: Left and Top are specified relative to the Intuition's view,
  4191.     in same resolution as the screen pixels.)
  4192.  
  4193.     Width = the width for this screen's RastPort
  4194.  
  4195.     Height = the height for this screen's RastPort, or the constant
  4196.         STDSCREENHEIGHT to get the current default height (at
  4197.         this time guaranteed to be at least 200 rows).  The normal
  4198.         width and height for a particular system is stored by
  4199.         the graphics.library in GfxBase->NormalDisplayRows and
  4200.         GfxBase->NormalDisplayColumns.  These values will be different
  4201.         depending on factors such as PAL video and overscan.
  4202.  
  4203.         For V36, a new constant STDSCREENWIDTH is introduced.  It
  4204.         serves the similar function for screen width.  Both
  4205.         STDSCREENWIDTH and STDSCREENHEIGHT indicate that your
  4206.         screen RastPort is to be the same dimensions as your
  4207.         DisplayClip rectangle.  If you do not specify either a
  4208.         standard or custom DisplayClip, the OSCAN_TEXT region
  4209.         will be used, which corresponds to the standard dimensions
  4210.         of V35 and earlier.
  4211.  
  4212.         Furthermore, if you are using OpenScreenTagList(), and you
  4213.         specify STDSCREENWIDTH, and you DO NOT provide a NewScreen
  4214.         pointer, and you DO NOT provide sA_Left, then Intuition
  4215.         will automatically set the LeftEdge of the screen to
  4216.         be the left edge of the screen's DisplayClip region.
  4217.         Likewise for STDSCREENHEIGHT and the screen's TopEdge.
  4218.  
  4219.     Depth = number of bitplanes
  4220.  
  4221.     DetailPen = pen number for details (like gadgets or text in title bar)
  4222.         The common value for this pen is 0.
  4223.  
  4224.     BlockPen = pen number for block fills (like title bar)
  4225.         The common value for this pen is 1.
  4226.  
  4227.     Type = screen type values
  4228.         Set these flags as desired from the set:
  4229.         CUSTOMSCREEN -- this is your own screen, not a system screen.
  4230.         CUSTOMBITMAP -- this custom screen has bit maps supplied
  4231.         in the bitmap field of the NewScreen structure.  Intuition is
  4232.         not to allocate any raster bitmaps.
  4233.         SCREENBEHIND -- your screen will be created behind all other open
  4234.         screens.  This allows a program to prepare imagery in the
  4235.         screen, change its colors, and so on, bringing it to the
  4236.         front when it is presentable.
  4237.         SCREENQUIET -- Intuition will not render system screen gadgets or
  4238.         screen title.  In concert with the WFLG_RMBTRAP flag on all
  4239.         your screen's windows, this flag will prevent Intuition from
  4240.         rendering into your screen's bitplanes.  Without WFLG_RMBTRAP
  4241.         (or using the IDCMP_MENUVERIFY facility to cancel menu
  4242.         operations), this flag will prevent Intuition from clearing
  4243.         your menu bar, which is probably unacceptable.  The menu bar
  4244.         layer may still overwrite  a portion of your screen bitmap
  4245.         when the screen is opened.  (V36: it won't clobber your bits
  4246.         any more.)
  4247.         NS_EXTENDED for this screen to use extended attributes pointed
  4248.         to by the 'Extended' field, below.
  4249.  
  4250.     ViewModes = the appropriate argument for the data type ViewPort.Modes.
  4251.            These include:
  4252.            HIRES for this screen to be HIRES width.
  4253.            LACE for the display to switch to interlace.
  4254.            SPRITES for this screen to use sprites (the pointer
  4255.         sprite is always displayed)
  4256.            DUALPF for dual-playfield mode (not supported yet)
  4257.         [For V36: The ViewModes field is superseded by a TagItem with
  4258.         tag value SA_DisplayID.]
  4259.  
  4260.     Font = pointer to the default TextAttr structure for text in this 
  4261.         screen and all windows that open in this screen.  Text that uses
  4262.         this TextAttr includes title bars of both screen and windows,
  4263.         string gadgets, and menu titles.  Of course, IntuiText that
  4264.         specifies a NULL TextAttr field will use the screen/window default
  4265.         fonts.  NOTE: Intuition will *NOT* call OpenDiskFont(), so
  4266.         the TextAttr you supply must be in memory.  The ways to ensure
  4267.         that are to either use a ROM font (Topaz 8 or 9) or first
  4268.         call OpenDiskFont() to load the font, and don't close it
  4269.         until after your screen is successfully opened.
  4270.         [For V36: this is superseded by SA_Font and SA_SysFont.]
  4271.  
  4272.     DefaultTitle = pointer to a line of text that will be displayed along
  4273.         the screen's title bar.  Null terminated, or just a NULL pointer
  4274.            to get no text
  4275.         [For V36: superseded by SA_Title.]
  4276.  
  4277.     Gadgets = This field should be set to NULL, since no user gadgets may
  4278.         be attached to a screen with the current versions of Intuition.
  4279.  
  4280.     CustomBitMap = if you're not supplying a custom bitmap, this value is 
  4281.            ignored.  However, if you have your own display memory that you
  4282.            want used for this screen, the CustomBitMap field should point to
  4283.         the BitMap structure that describes your display memory.  See the
  4284.            "Screens" chapter and the "Amiga ROM Kernel Manual" for more 
  4285.            information about bitmaps.
  4286.         [For V36: this is superseded by SA_BitMap.]
  4287.  
  4288.     [ All TagItem extensions below are new for V36.]
  4289.     Extension = if NS_EXTENDED is set in NewScreen.Type, this pointer
  4290.         should point to an array (or chain of arrays) of TagItems,
  4291.         as defined in the include file <utility/tagitem.h>.   This
  4292.         field is only defined in the structure ExtNewScreen.
  4293.         The values to use for TagItem.ti_Tag are defined below.  We
  4294.         recommend that V36-specific applications use the new Intuition
  4295.         entry point OpenScreenTagList(), rather than using this field.
  4296.         The ExtNewScreen structure is a convenient way to give V36
  4297.         Intuition some information that V34 and earlier Intuition will
  4298.         ignore.
  4299.  
  4300.         Each TagItem is an optional tagged data structure which identifies
  4301.         an additional parameter to OpenScreen().  The applicable tag ID
  4302.         values for TagItem.ti_Tag and their corresponding data follow.
  4303.  
  4304.         Several of the tag items are alternative (and overriding) versions
  4305.         to familiar fields in NewScreen.  (Defaults only apply if 
  4306.         NewScreen == NULL).  They are:
  4307.  
  4308.     SA_Left
  4309.     SA_Top
  4310.     SA_Width
  4311.     SA_Height
  4312.         The defaults for the SA_Left, SA_Top, SA_Width, and
  4313.         SA_Height tags end up being a bit complex.  If none of
  4314.         these tags are specified, and no NewScreen structure is
  4315.         used, then the left/top/width/height correctly match the
  4316.         display clip of your screen (see SA_DClip and
  4317.         SA_Overscan).
  4318.  
  4319.         The difficulty comes with overscanned screens, because the
  4320.         normal value of SA_Left or SA_Top for such a screen may be
  4321.         non-zero.  If a NewScreen structure is supplied, then the
  4322.         left/top/width/height come originally from there.  If no
  4323.         NewScreen structure is supplied, but a non-default
  4324.         SA_Width (SA_Height) is specified, then SA_Left (SA_Top)
  4325.         defaults to zero instead.  In these cases, the left and
  4326.         top edge may not be what you want.
  4327.  
  4328.         If you need to specify explicit width or height, or supply
  4329.         a NewScreen, you must supply correct values for SA_Left
  4330.         and SA_Top.  The correct normal values are the display
  4331.         clip rectangle's MinX and MinY values respectively.  If
  4332.         you are using the SA_DClip tag, then you already have a
  4333.         rectangle to consult for these values.  If you are using
  4334.         SA_Overscan to get one of the standard overscan types, you
  4335.         may use QueryOverscan() to get a rectangle for that
  4336.         overscan type.
  4337.  
  4338.     SA_Depth (defaults to 1)
  4339.     SA_DetailPen (defaults to 0)
  4340.     SA_BlockPen (defaults to 1)
  4341.     SA_Title (defaults to NULL)
  4342.     SA_Font (defaults to NULL, meaning user's preferred monospace font)
  4343.     SA_BitMap (whose existence also implies CUSTOMBITMAP). 
  4344.  
  4345.         Several tags are Booleans, which means that depending on whether
  4346.         their corresponding ti_Data field is zero (FALSE) or non-zero
  4347.         (TRUE), they specify Boolean attributes.  The ones corresponding
  4348.         to Boolean flags in the NewScreen.Type field are:
  4349.  
  4350.     SA_ShowTitle (defaults to TRUE)
  4351.     SA_Behind (equiv. to SCREENBEHIND) (defaults to FALSE)
  4352.     SA_Quiet (equiv. to SCREENQUIET) (defaults to FALSE)
  4353.  
  4354.         The following tags provide extended information to Intuition
  4355.         when creating a screen:
  4356.  
  4357.     SA_Type: ti_Data corresponds to the SCREENTYPE bits of the
  4358.         NewScreen.Type field.  This should be one of PUBLICSCREEN or
  4359.         CUSTOMSCREEN.  The other bits of the NewScreen.Type field
  4360.         must be set with the appropriate tags (SA_Behind, SA_Quiet,
  4361.         etc.)
  4362.  
  4363.     SA_DisplayID: ti_Data is a 32-bit extended display mode ID, as
  4364.       defined in the <graphics/modeid.h> include file (V39 and up)
  4365.       or in <graphics/displayinfo.h> (V37 and V38).
  4366.  
  4367.     SA_Overscan: ti_Data contains a defined constant specifying
  4368.         one of the system standard overscan dimensions appropriate for
  4369.         the display mode of the screen.  Used with the Width and
  4370.         Height dimensions STDSCREENWIDTH and STDSCREEN, this makes
  4371.         it trivial to open an overscanned or standard dimension
  4372.         screen.  You may also hand-pick your various dimensions
  4373.         for overscanned or other screens, by specifying screen position
  4374.         and dimensions explicitly, and by using SA_DClip to explicitly
  4375.         specify an overscanned DisplayClip region.
  4376.  
  4377.         The values for ti_Data of this tag are as follows:
  4378.  
  4379.         OSCAN_TEXT - Text Overscan region.  A region which is completely
  4380.         on screen and readable ("text safe").  A preferences data
  4381.         setting, this is backward equivalent with the old MoreRows,
  4382.         and specifies the DisplayClip and default dimensions of the
  4383.         Workbench screen.  This is the default.
  4384.  
  4385.         OSCAN_STANDARD - Also a preferences setting, this specifies
  4386.         a rectangle whose edges are "just out of view."  This yields
  4387.         the most efficient position and dimensions of on-monitor
  4388.         presentations, such as games and artwork.
  4389.  
  4390.         OSCAN_MAX - This is the largest rectangular region that the
  4391.         graphics library can handle "comfortably" for a given mode.
  4392.         Screens can smoothly scroll (hardware pan) within this region,
  4393.         and any DisplayClip or Screen region within this rectangle
  4394.         is also legal.  It is not a preferences item, but reflects
  4395.         the limits of the graphics hardware and software.
  4396.  
  4397.         OSCAN_VIDEO - This is the largest region that the graphics
  4398.         library can display, comfortable or not.  There is no guarantee
  4399.         that all smaller rectangles are valid.  This region is
  4400.         typically out of sight on any monitor or TV, but provides our
  4401.         best shot at "edge-to-edge" video generation.
  4402.  
  4403.         Remember, using overscan drastically effects memory use and
  4404.         chip memory bandwidth.  Always use the smallest (standard)
  4405.         overscan region that works for your application.
  4406.  
  4407.     SA_DClip: ti_Data is a pointer to a rectangle which explicitly
  4408.         defines a DisplayClip region for this screen.  See QueryOverscan()
  4409.         for the role of the DisplayClip region.
  4410.  
  4411.         Except for overscan display screens, this parameter is
  4412.         unnecessary, and specifying a standard value using SA_Overscan
  4413.         is normally an easier way to get overscan.
  4414.  
  4415.     SA_AutoScroll: this is a Boolean tag item, which specifies that
  4416.         this screens is to scroll automatically when the mouse pointer
  4417.         reaches the edge of the screen.  The operation of this requires
  4418.         that the screen dimensions be larger than its DisplayClip
  4419.         region.
  4420.  
  4421.     SA_PubName: If this field is present (and ti_Data is non-NULL),
  4422.         it means that the screen is a public screen, and that
  4423.         the public screen name string is pointed to by ti_Data.
  4424.         Public screens are opened in "PRIVATE" mode and must
  4425.         be made public using PubScreenStatus( screen, 0 ).
  4426.  
  4427.     SA_Pens: The ti_Data field (if non-NULL) points to a UWORD
  4428.         array of pen specification, as defined for struct DrawInfo.
  4429.         This array will be used to initialize the screen's
  4430.         DrawInfo.dri_Pens array.
  4431.  
  4432.         SA_Pens is also used to decide that a screen is ready
  4433.         to support the full-blown "new look" graphics.  If you
  4434.         want the 3D embossed look, you must provide this tag,
  4435.         and the ti_Data value cannot be NULL.  If it points
  4436.         to a "minimal" array, containing just the terminator ~0,
  4437.         you can specify "new look" without providing any values
  4438.         for the pen array.
  4439.  
  4440.         The way the DrawInfo pens are determined is Intuition
  4441.         picks a default pen-array.  Then, any pens you supply with
  4442.         SA_Pens override the defaults, up until the ~0 in your
  4443.         array.
  4444.  
  4445.         If the screen is monochrome or old-look, the default will
  4446.         be the standard two-color pens.
  4447.  
  4448.         If the screen is two or more planes deep, the default will
  4449.         be the standard four-color pens, which now include the
  4450.         new-look menu colors.
  4451.  
  4452.         If the screen has the SA_LikeWorkbench property, the
  4453.         default will be the user's preferred pen-array, changeable
  4454.         through preferences.
  4455.  
  4456.     The following two tag items specify the task and signal to be issued
  4457.     to notify when the last "visitor" window closes on a public screen. 
  4458.     This support is to assist envisioned public screen manager programs.
  4459.  
  4460.     SA_PubTask:  Task to be signalled.  If absent (and SA_PubSig is
  4461.         valid), use the task which called OpenScreen() or
  4462.         OpenScreenTagList()).
  4463.  
  4464.     SA_PubSig:  Data is a UBYTE signal number (not flag) used to notify
  4465.         a task when the last visitor window closes on a public screen.
  4466.  
  4467.     SA_Colors: ti_Data points to an array of ColorSpec structures
  4468.         (terminated with ColorIndex = -1) which specify initial
  4469.         values of the screen's color palette.
  4470.  
  4471.     SA_FullPalette: this is a Boolean attribute.  Prior to V36, there
  4472.         were just 7 RGB color values that Intuition maintained
  4473.         in its user preferences (playfield colors 0-3, and colors
  4474.         17-19 for the sprite).  When opening a screen, the color
  4475.         map for the screens viewport is first initialized by
  4476.         graphics (graphics.library/GetColorMap()) then these
  4477.         seven values are overridden to take the preferences values.
  4478.  
  4479.         In V36, Intuition maintains a full set of 32 preferences colors.
  4480.         If you specify TRUE for SA_FullPalette, Intuition will
  4481.         override ALL color map entries with its full suite of
  4482.         preferred colors.  (Defaults to FALSE).
  4483.  
  4484.     SA_ErrorCode: ti_Data points to a ULONG in which Intuition will
  4485.         stick an extended error code if OpenScreen[TagList]() fails.
  4486.         Values are of this include 0, for success, and:
  4487.         OSERR_NOMONITOR    - monitor for display mode not available.
  4488.         OSERR_NOCHIPS    - you need newer custom chips for display mode.
  4489.         OSERR_NOMEM        - couldn't get normal memory
  4490.         OSERR_NOCHIPMEM    - couldn't get chip memory
  4491.         OSERR_PUBNOTUNIQUE    - public screen name already used
  4492.         OSERR_UNKNOWNMODE    - don't recognize display mode requested
  4493.         OSERR_TOODEEP    - screen too deep to be displayed on
  4494.                   this hardware (V39)
  4495.         OSERR_ATTACHFAIL    - An illegal attachment of screens was
  4496.                   requested (V39)
  4497.         
  4498.         NOTE: These values are not the same as some similar return
  4499.         values defined in graphics.library/ModeNotAvailable().
  4500.  
  4501.     SA_SysFont: ti_Data selects one of the system standard fonts
  4502.         specified in preferences.  This tag item overrides the
  4503.         NewScreen.Font field and the SA_Font tag item.
  4504.  
  4505.         Values recognized in ti_Data at present are:
  4506.         0 - old DefaultFont, fixed-width, the default.
  4507.         1 - Workbench screen preferred font.  You have to
  4508.             be very font sensitive to handle a proportional or
  4509.             larger than traditional screen font.
  4510.  
  4511.         NOTE WELL: if you select sysfont 1, windows opened on
  4512.         your screen will not inherit the screen font, but rather
  4513.         the window RastPort will be initialized to the old-style
  4514.         DefaultFont (sysfont 0).
  4515.  
  4516.     Attached screen tags:  V39 supports attached screens, where
  4517.         one or more child screens can be associated with a parent
  4518.         screen.  Attached screens depth-arrange as a group, and
  4519.         always remain adjacent depth-wise.  Independent
  4520.         depth-arrangement of child screens is possible through
  4521.         the V39 ScreenDepth() call.  If a child screen is
  4522.         made non-draggable through {SA_Draggable, FALSE}, then
  4523.         it will drag exclusively with the parent.  Normal child
  4524.         screens drag independently of the parent, but are pulled
  4525.         down when the parent is.  Use the SA_Parent, SA_FrontChild,
  4526.         and SA_BackChild tags to attach screens.
  4527.  
  4528.     SA_Parent:  If you wish to attach this screen to an
  4529.         already-open parent screen, use this tag and set
  4530.         ti_Data to point to the parent screen.  See also
  4531.         SA_FrontChild and SA_BackChild.  (V39).
  4532.  
  4533.     SA_FrontChild:  If you wish to attach an already-open child
  4534.         screen to this screen, set ti_Data to point to the child
  4535.         screen.  The child screen will come to the front of the
  4536.         family defined by the parent screen you are opening.  See
  4537.         also SA_Parent and SA_BackChild.  (V39)
  4538.  
  4539.     SA_BackChild:  If you wish to attach an already-open child
  4540.         screen to this screen, set ti_Data to point to the child
  4541.         screen.  The child screen will go to the back of the family
  4542.         defined by the parent screen you are opening.  See also
  4543.         SA_Parent and SA_FrontChild.  (V39)
  4544.  
  4545.     SA_BackFill:  ti_Data is a pointer to a backfill hook for
  4546.         the screen's Layer_Info.
  4547.         (see layers.library/InstallLayerInfoHook()).  (V39).
  4548.  
  4549.     SA_Draggable:  ti_Data is a boolean.  Set to FALSE if you
  4550.         wish your screen to be non-draggable.  This tag should be
  4551.         used very sparingly!.  Defaults to TRUE.  For child screens
  4552.         (see SA_Parent, SA_FrontChild, and SA_BackChild) this tag
  4553.         has a slightly different meaning:  non-draggable child
  4554.         screens are non-draggable with respect to their parent,
  4555.         meaning they always drag exactly with the parent, as
  4556.         opposed to having relative freedom.  Also see
  4557.         ScreenPosition().  (V39)
  4558.  
  4559.     SA_Exclusive:  ti_Data is a boolean.  Set to TRUE if you
  4560.         never want your screen to share the display with another
  4561.         screen.  This means that your screen can't be pulled down,
  4562.         and will not appear behind other screens that are pulled
  4563.         down.  Your screen may still be depth arranged, though.  Use
  4564.         this tag sparingly!  Defaults to FALSE.  Starting with V40,
  4565.         attached screens may be SA_Exclusive.  Setting SA_Exclusive
  4566.         for each screen will produce an exclusive family.  (V39).
  4567.  
  4568.     SA_SharePens:  For those pens in the screen's
  4569.         DrawInfo->dri_Pens, Intuition obtains them in shared mode
  4570.         (see graphics.library/ObtainPen()).  For compatibility,
  4571.         Intuition obtains the other pens of a public screen as
  4572.         PENF_EXCLUSIVE.  Screens that wish to manage the pens
  4573.         themselves should generally set this tag to TRUE.  This
  4574.         instructs Intuition to leave the other pens unallocated.
  4575.         Defaults to FALSE.  (V39).
  4576.  
  4577.     SA_Colors32:  Tag to set the screen's initial palette colors
  4578.         at 32 bits-per-gun.  ti_Data is a pointer to a table to be
  4579.         passed to the graphics.library/LoadRGB32() function.  This
  4580.         format supports both runs of color registers and sparse
  4581.         registers.  See the autodoc for that function for full
  4582.         details.  Any color set here has precedence over the same
  4583.         register set by SA_Colors.  (V39).
  4584.  
  4585.     SA_Interleaved:  ti_Data is a boolean.  Set to TRUE to
  4586.         request an interleaved bitmap for your screen.  Defaults to
  4587.         FALSE.  If the system cannot allocate an interleaved bitmap for
  4588.         you, it will attempt to allocate a non-interleaved one (V39).
  4589.  
  4590.     SA_VideoControl:  ti_Data points to a taglist that will be
  4591.         passed to VideoControl() after your screen is open.  You
  4592.         might use this to turn on border-sprites, for example.
  4593.         (V39).
  4594.  
  4595.     SA_ColorMapEntries:  ti_Data is the number of entries that
  4596.         you wish Intuition to allocate for this screen's ColorMap.
  4597.         While Intuition allocates a suitable number for ordinary
  4598.         use, certain graphics.library features require a
  4599.         ColorMap which is larger than default.  (The default value is
  4600.         1<<depth, but not less than 32).  (V39)
  4601.  
  4602.     SA_LikeWorkbench:  ti_Data is boolean.  Set to TRUE to get
  4603.         a screen just like the Workbench screen.  This is the
  4604.         best way to inherit all the characteristics of the
  4605.         Workbench, including depth, colors, pen-array, screen mode,
  4606.         etc.  Individual attributes can be overridden through the
  4607.         use of tags.  (SA_LikeWorkbench itself overrides things
  4608.         specified in the NewScreen structure).  Attention
  4609.         should be paid to hidden assumptions when doing this.  For
  4610.         example, setting the depth to two makes assumptions about
  4611.         the pen values in the DrawInfo pens.  Note that this
  4612.         tag requests that Intuition ATTEMPT to open the screen
  4613.         to match the Workbench.  There are fallbacks in case
  4614.         that fails, so it is not correct to make enquiries about
  4615.         the Workbench screen then make strong assumptions about
  4616.         what you're going to get.  (Defaults to FALSE).  (V39)
  4617.  
  4618.      SA_MinimizeISG:  ti_Data is boolean.  For compatibility,
  4619.         Intuition always ensures that the inter-screen gap is at
  4620.         least three non-interlaced lines.  If your application
  4621.         would look best with the smallest possible inter-screen
  4622.         gap, set ti_Data to TRUE.  If you use the new graphics
  4623.         VideoControl() VC_NoColorPaletteLoad tag for your screen's
  4624.         ViewPort, you should also set this tag.  (V40)
  4625.  
  4626.  
  4627.     RESULT
  4628.     If all is well, returns the pointer to your new screen
  4629.     If anything goes wrong, returns NULL, with further error
  4630.     specification in the variable pointed to by the SA_ErrorCode
  4631.     data field (V36 and later).
  4632.  
  4633.     NOTES
  4634.     By default, AmigaDOS requesters related to your process are put on
  4635.     the Workbench screen (these are messages like "Disk Full").  If
  4636.     you wish them to show up on custom screens, DOS must be told.
  4637.     This fragment shows the procedure.  More information is available
  4638.     in the AmigaDOS manuals.  Sample code fragment:
  4639.  
  4640.     #include "libraries/dosextens.h"
  4641.         ...
  4642.     struct Process    *process;
  4643.     struct Window    *window;
  4644.     APTR        temp;
  4645.         ...
  4646.         process = (struct Process *) FindTask(NULL);
  4647.         temp = process->pr_WindowPtr;    (save old value)
  4648.         process->pr_WindowPtr = (APTR) window;
  4649.         ( use a pointer to any open window on your screen )
  4650.             ...
  4651.         your code goes here
  4652.             ...
  4653.         process->pr_WindowPtr = temp;
  4654.         ( restore value BEFORE CloseWindow() )
  4655.         CloseWindow(window);
  4656.  
  4657.     A VERY IMPORTANT NOTE about the Screen->BitMap.  In the future,
  4658.     bitmaps will need to grow.  The embedded instance of a bitmap
  4659.     in the screen will no longer be large enough to hold the whole
  4660.     description of the bitmap.
  4661.  
  4662.     YOU ARE STRONGLY URGED to use Screen->RastPort.BitMap in place of
  4663.     &Screen->BitMap whenever and whereever possible.
  4664.  
  4665.     BUGS
  4666.  
  4667.     SEE ALSO
  4668.     OpenScreenTagList(), OpenWindow(), PrintIText(), CloseScreen(),
  4669.     QueryOverscan() PubScreenStatus(), The Intuition Reference Manual,
  4670.     utility/tagitem.h, graphics.library/ModeNotAvailable(),
  4671.     diskfont.library/OpenDiskFont(), graphics.library/GetColorMap()
  4672. intuition.library/OpenScreenTagList       intuition.library/OpenScreenTagList
  4673.  
  4674.    NAME    
  4675.     OpenScreenTagList -- OpenScreen() with TagItem extension array. (V36)
  4676.     OpenScreenTags -- Varargs stub for OpenScreenTagList. (V36)
  4677.  
  4678.    SYNOPSIS
  4679.     Screen = OpenScreenTagList( NewScreen, TagItems )
  4680.     D0                  A0         A1
  4681.  
  4682.     struct Screen *OpenScreenTagList( struct NewScreen *,
  4683.         struct TagItem * );
  4684.  
  4685.     Screen = OpenScreenTags( NewScreen, Tag1, ... )
  4686.  
  4687.     struct Screen *OpenScreenTags( struct NewScreen *,
  4688.         ULONG, ... );
  4689.  
  4690.    FUNCTION
  4691.     Provides an extension to the parameters passed to OpenScreen().
  4692.     This extensions is in the form of (a pointer to) an array of
  4693.     TagItem structures, which have to fields: ti_Tag, an ID identifying
  4694.     the meaning of the other field, ti_Data.  See <utility/tagitem.h>.
  4695.  
  4696.     The tag items can supplement or override the values in NewScreen.
  4697.     In fact, you can pass a NULL value of the NewScreen pointer.
  4698.     For that matter, if you pass NULL in both arguments, you'll get
  4699.     a screen with defaults in all fields, including display mode,
  4700.     depth, colors, dimension, title, and so on.  We ask that
  4701.     you at least supply a title when you open a screen.
  4702.  
  4703.     See OpenScreen() documentation for parameter specifications.
  4704.  
  4705.    INPUTS
  4706.      NewScreen     - (optional) pointer to a NewScreen structure.
  4707.      TagItems      - (optional) pointer to (an array of) TagItem
  4708.             structures, terminated by the value TAG_END.
  4709.  
  4710.    RESULT
  4711.      Screen    - an open Intuition screen.  See OpenScreen() for
  4712.         extended error codes when Screen is returned NULL.
  4713.  
  4714.    EXAMPLE
  4715.     The version using a variable number of arguments must be
  4716.     created for each particular compiler, and may not have
  4717.     an analogue in all versions.  For vanilla, 32-bit C
  4718.     parameter passing conventions, this works (and will
  4719.     appear in amiga.lib):
  4720.     
  4721.     struct Screen    *
  4722.     OpenScreenTags( ns, tag1 )
  4723.     struct NewScreen    *ns;
  4724.     ULONG            tag1;
  4725.     {
  4726.         struct Screen    *OpenScreenTagList();
  4727.  
  4728.         return ( OpenScreenTagList( ns, (struct TagItem *) &tag1 ) );
  4729.     }
  4730.  
  4731.    NOTES
  4732.     We recommend this extension to OpenScreen() over using the
  4733.     field ExtNewScreen.Extension.  However, the ExtNewScreen.Extension
  4734.     is a convenient way to supply a few tags to V36 Intuition which
  4735.     will be ignored by V34 Intuition.  See OpenScreen() documentation
  4736.     for lots of details.
  4737.  
  4738.     A VERY IMPORTANT NOTE about the Screen->BitMap.  In the future,
  4739.     bitmaps will need to grow.  The embedded instance of a bitmap
  4740.     in the screen will no longer be large enough to hold the whole
  4741.     description of the bitmap.
  4742.  
  4743.     YOU ARE STRONGLY URGED to use Screen->RastPort.BitMap in place of
  4744.     &Screen->BitMap whenever and whereever possible.
  4745.  
  4746.    BUGS
  4747.     
  4748.  
  4749.    SEE ALSO
  4750.     OpenScreen()
  4751.  
  4752. intuition.library/OpenWindow                     intuition.library/OpenWindow
  4753.  
  4754.     NAME
  4755.     OpenWindow -- Open an Intuition window.
  4756.  
  4757.     SYNOPSIS
  4758.        Window = OpenWindow( NewWindow )
  4759.     D0                   A0
  4760.  
  4761.     struct Window *OpenWindow( struct NewWindow * );
  4762.  
  4763.     FUNCTION
  4764.     Opens an Intuition window of the given dimensions and position,
  4765.     with the properties specified in the NewWindow structure.
  4766.     Allocates everything you need to get going.
  4767.  
  4768.     New for V36: there is an extensive discussion of public Screens
  4769.     and visitor windows at the end of this section.  Also,
  4770.     you can provide extensions to the NewWindow parameters using
  4771.     and array of TagItem structures.  See the discussion below,
  4772.     and the documentation for the function OpenScreenTagList().
  4773.  
  4774.     Before you call OpenWindow(), you must initialize an instance of
  4775.     a NewWindow structure.  NewWindow is a structure that contains
  4776.     all of the arguments needed to open a window.  The NewWindow
  4777.     structure may be discarded immediately after it is used to open 
  4778.     the window.
  4779.     
  4780.     If Type == CUSTOMSCREEN, you must have opened your own screen
  4781.     already via a call to OpenScreen().  Then Intuition uses your screen
  4782.     argument for the pertinent information needed to get your window
  4783.     going.  On the other hand, if type == one of the Intuition's standard
  4784.     screens, your screen argument is ignored.  Instead, 
  4785.     Intuition will check to see whether or not that screen
  4786.     already exists:  if it doesn't, it will be opened first before
  4787.     Intuition opens your window in the standard screen.
  4788.  
  4789.     New for V36: If you specify Type == WBENCHSCREEN, then your
  4790.     window will appear on the Workbench screen, unless the global
  4791.     public screen mode SHANGHAI is set, in which case your window
  4792.     will be "hijacked" to the default public screen.  See also
  4793.     SetPubScreenModes().
  4794.     
  4795.     New for V36: If the WFLG_NW_EXTENDED flag is set, it means that the
  4796.     field 'ExtNewWindow->Extension' points to an array of TagItems, as
  4797.     defined in intuition/tagitem.h.  This provides an extensible means
  4798.     of providing extra parameters to OpenWindow.  For compatibility
  4799.     reasons, we could not add the 'Extension' field to the NewWindow
  4800.     structure, so we have define a new structure ExtNewWindow, which
  4801.     is identical to NewWindow with the addition of the Extension field.
  4802.  
  4803.     We recommend that rather than using ExtNewWindow.Extension, you
  4804.     use the new Intuition function OpenWindowTagList() and its
  4805.     varargs equivalent OpenWindowTags().  We document the window
  4806.     attribute tag ID's (ti_Tag values) here, rather than in 
  4807.     OpenWindowTagList(), so that you can find all the parameters
  4808.     for a new window defined in one place.
  4809.     
  4810.     If the WFLG_SUPER_BITMAP flag is set, the bitmap variable must point
  4811.     to your own bitmap.
  4812.     
  4813.     The DetailPen and the BlockPen are used for system rendering; for
  4814.     instance, the title bar is first filled using the BlockPen, and then
  4815.     the gadgets and text are rendered using DetailPen.  You can either
  4816.     choose to supply special pens for your window, or, by setting either
  4817.     of these arguments to -1, the screen's pens will be used instead.
  4818.  
  4819.     Note for V36: The DetailPen and BlockPen no longer determine
  4820.     what colors will be used for window borders, if your window
  4821.     opens on a "full-blown new look screen."
  4822.  
  4823.     INPUTS
  4824.     NewWindow = pointer to an instance of a NewWindow structure.  That
  4825.                structure is initialized with the following data:
  4826.    -------------------------------------------------------------------------
  4827.     Left = the initial x-position for your window
  4828.     Top = the initial y-position for your window
  4829.     Width = the initial width of this window
  4830.     Height = the initial height of this window
  4831.  
  4832.     DetailPen = pen number (or -1) for the rendering of window details
  4833.          (like gadgets or text in title bar)
  4834.     BlockPen = pen number (or -1) for window block fills (like title bar)
  4835.     [For V36: Title bar colors are determined otherwise.]
  4836.  
  4837.     Flags = specifiers for your requirements of this window, including:
  4838.          which system gadgets you want attached to your window:
  4839.  
  4840.         - WFLG_DRAGBAR allows this window to be dragged
  4841.         - WFLG_DEPTHGADGET lets the user depth-arrange this window
  4842.         - WFLG_CLOSEGADGET attaches the standard close gadget
  4843.         - WFLG_SIZEGADGET allows this window to be sized. 
  4844.         
  4845.         If you ask for the WFLG_SIZEGADGET gadget, you must specify one or
  4846.         both of the flags WFLG_SIZEBRIGHT and WFLG_SIZEBBOTTOM below; if
  4847.         you don't, the default is WFLG_SIZEBRIGHT.  See the following items
  4848.         WFLG_SIZEBRIGHT and WFLG_SIZEBBOTTOM for more details.
  4849.  
  4850.         - WFLG_SIZEBRIGHT is a special system gadget flag that
  4851.           you set to specify whether or not you want the
  4852.           RIGHT border adjusted to account for the physical size 
  4853.           of the sizing gadget.  The sizing gadget must, after
  4854.           all, take up room in either the right or bottom border
  4855.           (or both, if you like) of the window.  Setting either
  4856.           this or the WFLG_SIZEBBOTTOM flag selects which edge 
  4857.           will take up the slack.  This will be particularly
  4858.           useful to applications that want to use the extra space
  4859.           for other gadgets (like a proportional gadget and two
  4860.           Booleans done up to look like scroll bars) or, for
  4861.           for instance, applications that want every possible
  4862.           horizontal bit and are willing to lose lines vertically.
  4863.           NOTE:  if you select WFLG_SIZEGADGET, you must select 
  4864.           either WFLG_SIZEBRIGHT or WFLG_SIZEBBOTTOM or both.  If
  4865.           you select neither, the default is WFLG_SIZEBRIGHT.
  4866.         - WFLG_SIZEBBOTTOM is a special system gadget flag that
  4867.           you set to specify whether or not you want the
  4868.           BOTTOM border adjusted to account for the physical size 
  4869.           of the sizing gadget.  For details, refer to
  4870.           WFLG_SIZEBRIGHT above.
  4871.  
  4872.         - WFLG_GIMMEZEROZERO for easy but expensive output
  4873.  
  4874.         what type of window layer you want, either:
  4875.         - WFLG_SIMPLE_REFRESH
  4876.         - WFLG_SMART_REFRESH
  4877.         - WFLG_SUPER_BITMAP
  4878.  
  4879.         - WFLG_BACKDROP for whether or not you want this window to be one
  4880.           of Intuition's special backdrop windows.  See WFLG_BORDERLESS
  4881.           as well.
  4882.  
  4883.         - WFLG_REPORTMOUSE for whether or not you want to "listen" to
  4884.           mouse movement events whenever your window is the active
  4885.           one.  After you've opened your window, if you want to change
  4886.           you can later change the status of this via a call to
  4887.           ReportMouse().  Whether or not your window is listening to
  4888.           mouse is affected by gadgets too, since they can cause you
  4889.           to start getting reports too if you like.  The mouse move
  4890.           reports (either InputEvents or messages on the IDCMP) that
  4891.           you get will have the x/y coordinates of the current mouse
  4892.           position, relative to the upper-left corner of your window
  4893.           (WFLG_GIMMEZEROZERO notwithstanding).  This flag can work in
  4894.           conjunction with the IDCMP Flag called IDCMP_MOUSEMOVE, which
  4895.           allows you to listen via the IDCMP.
  4896.  
  4897.         - WFLG_BORDERLESS should be set if you want a window with no
  4898.           border padding.  Your window may have the border variables
  4899.           set anyway, depending on what gadgetry you've requested for
  4900.           the window, but you won't get the standard border lines and
  4901.           spacing that comes with typical windows.  
  4902.  
  4903.           This is a good way to take over the entire screen, since you
  4904.           can have a window cover the entire width of the screen using
  4905.           this flag.  This will work particularly well in conjunction
  4906.           with the WFLG_BACKDROP flag (see above), since it allows you
  4907.           to open a window that fills the ENTIRE screen.  NOTE:  this is
  4908.           not a flag that you want to set casually, since it may cause
  4909.           visual confusion on the screen.  The window borders are the
  4910.           only dependable visual division between various windows and
  4911.           the background screen.  Taking away that border takes away
  4912.           that visual cue, so make sure that your design doesn't need
  4913.           it at all before you proceed.
  4914.  
  4915.         - WFLG_ACTIVATE is the flag you set if you want this window to
  4916.           automatically become the active window.  The active
  4917.           window is the one that receives input from the keyboard and
  4918.           mouse.  It's usually a good idea to to have the window you
  4919.           open when your application first starts up be an ACTIVATED
  4920.           one, but all others opened later not be ACTIVATED (if the
  4921.           user is off doing something with another screen, for
  4922.           instance, your new window will change where the input is
  4923.           going, which would have the effect of yanking the input rug
  4924.           from under the user).  Please use this flag thoughtfully and
  4925.           carefully.
  4926.  
  4927.           Some notes: First, your window may or may not be active
  4928.           by the time this function returns.  Use the IDCMP_ACTIVEWINDOW
  4929.           IDCMP message to know when your window has become active.
  4930.           Also, be very careful not to mistakenly specify the
  4931.           obsolete flag names WINDOWACTIVE or ACTIVEWINDOW.  These are
  4932.           used in other contexts, and their values unintentionally added
  4933.           to your flags can cause most unfortunate results.  To avoid
  4934.           confusion, they are now know as WFLG_WINDOWACTIVE and
  4935.           IDCMP_ACTIVEWINDOW.
  4936.  
  4937.         - WFLG_RMBTRAP, when set, causes the right mouse button events 
  4938.           to be trapped and broadcast as events.  You can receive 
  4939.           these events through either the IDCMP or the console.
  4940.  
  4941.         - WFLG_NOCAREREFRESH indicates that you do not wish to
  4942.           be responsible for calling BeginRefresh() and EndRefresh()
  4943.           when your window has exposed regions (i.e., when the
  4944.           IDCMP_REFRESHWINDOW message would be generated).  See also
  4945.           the descriptions of these two functions.
  4946.  
  4947.         - WFLG_NW_EXTENDED (V36) indicates that NewWindow in fact points
  4948.           to an ExtNewWindow structure, and that the 'Extension'
  4949.           field points to an array of TagItem structures, with
  4950.           meaning described below.
  4951.  
  4952.         - WFLG_NEWLOOKMENUS (V39) Requests new-look menu treatment.
  4953.           Menu colors are derived from the screen DrawInfo BARDETAILPEN,
  4954.           BARBLOCKPEN, and BARTRIMPEN, instead of window detail and
  4955.           block pens.  Also requests that a suitably scaled and colored
  4956.           Amiga-key symbol and checkmark symbol be used in the menus.
  4957.           Applications using WFLG_NEWLOOKMENUS need to use the new screen
  4958.           DrawInfo pens to color their MenuItem and SubItem imagery.
  4959.           If your application uses GadTools, the {GTMN_NewLookMenus,TRUE}
  4960.           tag-item should be passed to the menu layout calls.
  4961.  
  4962.           (NB: For the menus to actually appear with improved colors,
  4963.           the screen's opener must supply suitable values for the
  4964.           new menu pens in the DrawInfo.  If this is not the case,
  4965.           then an application requesting NewLookMenus will get the
  4966.           scaled Amiga-key and checkmark but in V37-compatible colors.
  4967.           Note that the screen's DrawInfo will always contain valid
  4968.           values for the new pens;  they just may correspond to the
  4969.           "old look").
  4970.  
  4971.     IDCMPFlags = IDCMP is the acronym for Intuition Direct Communications
  4972.         Message Port.  (It's Intuition's sole acronym.) If any of the
  4973.         IDCMP Flags is selected, Intuition will create a pair of
  4974.         message ports and use them for direct communications with the
  4975.         task opening this window (as compared with broadcasting
  4976.         information via the Console device).  See the "Input and
  4977.         Output Methods" chapter of the Intuition Reference Manual for
  4978.         complete details.
  4979.  
  4980.         You request an IDCMP by setting any of these flags.  Except
  4981.         for the special VERIFY flags, every other flag you set tells
  4982.         Intuition that if a given event occurs which your program
  4983.         wants to know about, it is to broadcast the details of that
  4984.         event through the IDCMP rather than via the Console device.
  4985.         This allows a program to interface with Intuition directly,
  4986.         rather than going through the Console device.
  4987.  
  4988.         Many programs have elected to use IDCMP communication
  4989.         exclusively, and not to associate a console with their
  4990.         windows at all.  Some operations, such as IDCMP_MENUVERIFY,
  4991.         can ONLY be achieved using IDCMP.
  4992.  
  4993.            The IDCMP flags you can set are described in the
  4994.         ModifyIDCMP() autodoc.
  4995.  
  4996.     Gadgets = the pointer to the first of a linked list of the your own 
  4997.           Gadgets which you want attached to this Window.  Can be NULL
  4998.           if you have no Gadgets of your own
  4999.  
  5000.        CheckMark = a pointer to an instance of the struct Image where can
  5001.           be found the imagery you want used when any of your
  5002.           menu items is to be checkmarked.  If you don't want to
  5003.           supply your own imagery and you want to just use 
  5004.           Intuition's own checkmark, set this argument to NULL
  5005.  
  5006.        Text = a null-terminated line of text to appear on the title bar of
  5007.           your window (may be null if you want no text)
  5008.  
  5009.        Type = the screen type for this window.  If this equal CUSTOMSCREEN,
  5010.           you must have already opened a CUSTOMSCREEN (see text above).
  5011.           Types available include:
  5012.           - WBENCHSCREEN
  5013.           - CUSTOMSCREEN
  5014.           - PUBLICSCREEN (new for V36, see text below)
  5015.  
  5016.        Screen = if your type is one of Intuition's standard screens, then
  5017.           this argument is ignored.  However, if Type == CUSTOMSCREEN,
  5018.           this must point to the structure of your own screen
  5019.  
  5020.        BitMap = if you have specified WFLG_SUPER_BITMAP as the type of
  5021.            refreshing you want for this window, then this value points to a
  5022.            instance of the struct bitmap.  However, if the refresh type
  5023.            is NOT WFLG_SUPER_BITMAP, this pointer is ignored.
  5024.  
  5025.        MinWidth, MinHeight, MaxWidth, MaxHeight = the size limits for this 
  5026.           window.  These must be reasonable values, which is to say that
  5027.           the minimums cannot be greater than the current size, nor can
  5028.           the maximums be smaller than the current size.  If they are,
  5029.           they're ignored.  Any one of these can be initialized to zero,
  5030.           which means that that limit will be set to the current
  5031.           dimension of that axis.  The limits can be changed after the
  5032.           Window is opened by calling the WindowLimits() routine.
  5033.  
  5034.           NOTE: ORIGINALLY, we stated that:
  5035.  
  5036.           "If you haven't requested the WFLG_SIZEGADGET option, these
  5037.           variables are ignored so you don't have to initialize them."
  5038.  
  5039.           It is now clear that a variety of programs take it upon
  5040.           themselves to call SizeWindow() (or ChangeWindowBox()) without
  5041.           your program's consent or consulting your WFLG_SIZEGADGE
  5042.           option.  To protect yourself against the results, we strongly
  5043.           urge that if you supply suitable values for these fields even
  5044.           if you do not specify WFLG_SIZEGADGET.
  5045.  
  5046.           The maximums may be LARGER than the current size, or even
  5047.           larger than the current screen.  The maximums should be set to
  5048.           the highest value your application can handle.  This allows
  5049.           users with larger display devices to take full advantage of
  5050.           your software.  If there is no good reason to limit the size,
  5051.           then don't.  -1 or ~0 indicates that the maximum size is only
  5052.           limited by the size of the window's screen.
  5053.  
  5054.           See also the docs on the function WindowLimits() for more
  5055.           information.
  5056.  
  5057.        Extension (New for V36) = a pointer to an array (or chain of arrays)
  5058.         of TagItems to specify additional parameters to OpenWindow().
  5059.         TagItems in general are described in utility/tagitem.h,
  5060.         and the OpenWindow tags are defined in intuition/intuition.h
  5061.         and described here.  For items pertaining to Public Screens
  5062.         and visitor windows, please see below.
  5063.  
  5064.     Here are the TagItem.ti_Tag values that are defined for OpenWindow
  5065.     (and OpenWindowTagList()).
  5066.  
  5067.     Certain tags simply override equivalent values in NewWindow,
  5068.     and allow you to open a window using OpenWindowTagList() without
  5069.     having a NewWindow structure at all.  In each case, cast
  5070.     the corresponding data to ULONG and put it in ti_Data.
  5071.  
  5072.     The compatible tag items include:
  5073.  
  5074.     WA_Left
  5075.     WA_Top
  5076.     WA_Width
  5077.     WA_Height
  5078.     WA_DetailPen    - NOTE: only overrides NewWindow.DetailPen of -1!
  5079.     WA_BlockPen    - NOTE: only overrides NewWindow.BlockPen of -1!
  5080.     WA_IDCMP
  5081.     WA_Flags    - initial values for Flags before looking at other
  5082.               Boolean component Tag values
  5083.     WA_Gadgets
  5084.     WA_Title
  5085.     WA_CustomScreen    - also implies CUSTOMSCREEN property
  5086.     WA_SuperBitMap    - also implies WFLG_SUPER_BITMAP refresh mode.
  5087.     WA_MinWidth
  5088.     WA_MinHeight
  5089.     WA_MaxWidth
  5090.     WA_MaxHeight
  5091.  
  5092.     These Boolean tag items are alternatives to the NewWindow.Flags
  5093.     Boolean attributes with similar names.
  5094.  
  5095.     WA_SizeGadget        - equivalent to WFLG_SIZEGADGET
  5096.     WA_DragBar        - equivalent to WFLG_DRAGBAR
  5097.     WA_DepthGadget        - equivalent to WFLG_DEPTHGADGET
  5098.     WA_CloseGadget        - equivalent to WFLG_CLOSEGADGET
  5099.     WA_Backdrop        - equivalent to WFLG_BACKDROP
  5100.     WA_ReportMouse        - equivalent to WFLG_REPORTMOUSE
  5101.     WA_NoCareRefresh    - equivalent to WFLG_NOCAREREFRESH
  5102.     WA_Borderless        - equivalent to WFLG_BORDERLESS
  5103.     WA_Activate        - equivalent to WFLG_ACTIVATE
  5104.     WA_RMBTrap        - equivalent to WFLG_RMBTRAP
  5105.     WA_WBenchWindow        - equivalent to WFLG_WBENCHWINDOW
  5106.                   (system PRIVATE)
  5107.     WA_SimpleRefresh     - only specify if TRUE
  5108.     WA_SmartRefresh     - only specify if TRUE
  5109.     WA_SizeBRight        - equivalent to WFLG_SIZEBRIGHT
  5110.     WA_SizeBBottom        - equivalent to WFLG_SIZEBBOTTOM
  5111.     WA_GimmeZeroZero     - equivalent to WFLG_GIMMEZEROZERO
  5112.     WA_NewLookMenus        - equivalent to WFLG_NEWLOOKMENUS
  5113.  
  5114.     The following tag items specify new attributes of a window.
  5115.  
  5116.     WA_ScreenTitle - You can specify the screen title associated
  5117.         with your window this way, and avoid a call to SetWindowTitles()
  5118.         when your window opens.
  5119.  
  5120.     WA_AutoAdjust - a Boolean attribute which says that it's OK
  5121.         to move or even shrink the dimensions of this window
  5122.         to fit it on the screen, within the dimension
  5123.         limits specified by MinWidth and MinHeight.
  5124.         Someday, this processing might be sensitive to the
  5125.         currently visible portion of the screen the window
  5126.         will be opening on, so don't draw too many conclusions
  5127.         about the auto-adjust algorithms.
  5128.         (Normally, this attribute defaults to FALSE.  However,
  5129.         if you call OpenWindowTags() or OpenWindowTagList()
  5130.         with a NULL NewWindow pointer, this attribute defaults
  5131.         to TRUE).
  5132.  
  5133.     WA_InnerWidth
  5134.     WA_InnerHeight - You can specify the dimensions of the interior
  5135.         region of your window, independent of what the border
  5136.         thicknesses will be.  You probably want to specify
  5137.         WA_AutoAdjust to allow Intuition to move your window
  5138.         or even shrink it so that it is completely on screen.
  5139.  
  5140.         Note: using these tags puts some reasonable restrictions
  5141.         on the gadgets you can specify as "border" gadgets when
  5142.         you open your window.  Since border gadgets determine
  5143.         the border dimensions and hence the overall dimensions of
  5144.         your window, those dimensions cannot be used calculating
  5145.         the position or dimensions of border gadgets.
  5146.  
  5147.         Here's the complete list of restrictions:
  5148.         - GACT_LEFTBORDER gadgets cannot be GFLG_RELWIDTH if
  5149.           WA_InnerWidth is used.
  5150.         - GACT_RIGHTBORDER gadgets MUST be GFLG_RELRIGHT if
  5151.           WA_InnerWidth is used.
  5152.         - GACT_TOPBORDER gadgets cannot be GFLG_RELHEIGHT if
  5153.           WA_InnerHeight is used.
  5154.         - GACT_BOTTOMBORDER gadgets MUST be GFLG_RELBOTTOM if
  5155.           WA_InnerHeight is used.
  5156.  
  5157.     WA_PubScreenName - This tag item declares that you want your window
  5158.         to open as a visitor window on the public screen whose name
  5159.         is pointed to by (UBYTE *) ti_Data.
  5160.  
  5161.     WA_PubScreen - Open as a visitor window on the public screen
  5162.         whose address if provided as (struct Screen *) ti_Data.
  5163.         To ensure that this screen remains open long enough, you
  5164.         must either:
  5165.         1) Be the screen's owner
  5166.         2) have another window already open on the screen
  5167.         3) use LockPubScreen()
  5168.         Using exec.library/Forbid() is not sufficient.
  5169.  
  5170.         You can provide ti_Data to be NULL (zero), without any
  5171.         of the above precautions, to specify the default public screen.
  5172.  
  5173.     WA_PubScreenFallBack - This Boolean attribute specifies that a
  5174.         visitor window should "fall back" to opening on the default
  5175.         public screen if the explicitly specify public screen is not
  5176.         available.
  5177.  
  5178.     WA_WindowName - this visionary specification of a window
  5179.         rendezvous name string is not yet implemented.
  5180.  
  5181.     WA_Colors - this equally great idea about associating a palette
  5182.         specification with the active window may not ever be implemented.
  5183.  
  5184.     WA_Zoom - ti_Data points to an array of four WORD's to be used
  5185.         as the initial Left/Top/Width/Height of the "alternate
  5186.         Zoom position and dimensions."  The presence of this tag
  5187.         item implies that you want a Zoom gadget, even though you
  5188.         might not have a sizing gadget.
  5189.         New for V39: if the initial zoom-box left and top are
  5190.         both set to ~0, then Intuition will give your window
  5191.         "size-only" zooming, meaning that zooming the window
  5192.         will not affect the left/top unless the window needs
  5193.         to be moved on-screen.
  5194.  
  5195.     WA_MouseQueue - This tag specifies a limit for the number
  5196.         of outstanding IDCMP_MOUSEMOVE IntuiMessages that Intuition
  5197.         will send to your window.  You can change the value of this
  5198.         limit after the window is open using SetMouseQueue().
  5199.  
  5200.     WA_RptQueue - This tag specifies a limit for the number of
  5201.         outstanding repeated-IDCMP_RAWKEY, repeated-IDCMP_VANILLAKEY,
  5202.         and repeated-IDCMP_IDCMPUPDATE IntuiMessages that Intuition will
  5203.         send to your window.  Currently, there is no function to adjust
  5204.         the repeat-key queue.
  5205.  
  5206.     WA_BackFill - ti_Data is a pointer to a Hook structure that
  5207.         the Layers library will call when your window needs
  5208.         "backfilling."  See layers.library/InstallLayerHook().
  5209.  
  5210.      WA_MenuHelp - ti_Data is a boolean.  If true, enables the MenuHelp
  5211.         feature for this window.  See IDCMP_MENUHELP above.  (V37)
  5212.  
  5213.     WA_NotifyDepth - ti_Data is a boolean.  Set to true if you
  5214.         would also like IDCMP_CHANGEWINDOW events sent to your window
  5215.         when it is depth-arranged.  Normally, such events are only
  5216.         sent for movement or resizing of the window.
  5217.         IDCMP_CHANGEWINDOW events originating from
  5218.         depth-arrangement have a Code equal to CWCODE_DEPTH, as
  5219.         opposed to CWCODE_MOVESIZE.  (V39)
  5220.  
  5221.     WA_Checkmark - (ti_Data is struct Image *) Image to use as a
  5222.         checkmark in menus.  Prior to V39, or if WA_NewLookMenus
  5223.         is not specified, the default will be the traditional
  5224.         checkmark in the original colors.  Under V39 and higher,
  5225.         if you have requested WA_NewLookMenus then the default will
  5226.         be an appropriately colored checkmark scaled to the screen's
  5227.         font.  Alternately, you can provide a custom one, which you
  5228.         can design yourself or get from sysiclass (use this if
  5229.         your menu-font is different from the screen's font).
  5230.  
  5231.     WA_AmigaKey - (ti_Data is struct Image *) Image to use as
  5232.         the Amiga-key symbol in menus.  If WA_NewLookMenus is not
  5233.         specified, the default will be the traditional Amiga-key
  5234.         symbol in the original colors.  If you've requested
  5235.         WA_NewLookMenus, then the default will be an appropriately
  5236.         colored Amiga-key scaled to the screen's font.
  5237.         Alternately, you can provide a custom one, which you can
  5238.         design yourself or get from sysiclass (use this if your
  5239.         menu-font is different from the screen's font).  (V39)
  5240.  
  5241.     WA_Pointer - (APTR) The pointer you wish to associate with
  5242.         your window.  If NULL, you are requesting the Preferences
  5243.         default pointer.  Custom pointers should be allocated by
  5244.         performing a NewObject() on "pointerclass".  (See
  5245.         <intuition/pointerclass.h>).  Defaults to NULL.  This tag is
  5246.         also recognized by SetWindowPointerA().  (V39)
  5247.  
  5248.     WA_BusyPointer (BOOL) - Set to TRUE to request the Preferences
  5249.         busy-pointer.  If FALSE, your pointer will be as requested
  5250.         by WA_Pointer.  Defaults to FALSE.  This tag is also
  5251.         recognized by SetWindowPointerA().  (V39)
  5252.  
  5253.     WA_PointerDelay - (BOOL) Set to TRUE to defer changing your
  5254.         pointer for a brief instant.  This is typically used along
  5255.         with setting the busy pointer, especially when the
  5256.         application knows it may be busy for a very short while.  If
  5257.         the application clears the pointer or sets another pointer
  5258.         before the delay expires, the pending pointer change is
  5259.         cancelled.  This reduces short flashes of the busy pointer.
  5260.         This tag is also recognized by SetWindowPointerA().  (V39)
  5261.  
  5262.     WA_HelpGroup - (ULONG) Normally, only the active window can
  5263.         receive IDCMP_GADGETHELP messages.  However, an application
  5264.         with multiple windows will want all its windows to be able
  5265.         to receive help when any of them are active.  First obtain a
  5266.         unique help ID with utility.library/GetUniqueID(), then
  5267.         pass it as ti_Data of this tag to all your windows.  See
  5268.         HelpControl().  (V39)
  5269.  
  5270.     WA_HelpGroupWindow - (struct Window *) Instead of using
  5271.         WA_HelpGroup, you can pass a pointer to another window
  5272.         whose HelpGroup you wish this window to belong to.  (V39)
  5273.  
  5274.     WA_TabletMessages - (BOOL) Set to TRUE to request extended
  5275.         IntuiMessages for your window.  If a tablet driver is
  5276.         generating IESUBCLASS_NEWTABLET input events, you will be
  5277.         able to receive extended tablet information with most
  5278.         IntuiMessages.  See the eim_TabletData field of the
  5279.         ExtIntuiMessage structure.  Defaults to FALSE.  (V39)
  5280.  
  5281.    NOTES
  5282.     Regarding Public Screens, you can specify a window to be a 
  5283.     "visitor window" on a public screen in one of several ways.
  5284.     In each case, you must be sure not to specify a NewWindow
  5285.     type of CUSTOMSCREEN.  You should use the value PUBLICSCREEN.
  5286.  
  5287.     There are actually several ways you can specify which screen
  5288.     you want a visitor window to be opened on:
  5289.  
  5290.         1) Specify the name of the public screen WA_PubScreenName,
  5291.         or a NULL pointer, in ti_Data.  The name might have been
  5292.         provided by the user.  A NULL pointer means to use the
  5293.         default public screen.
  5294.  
  5295.         If the named screen cannot be found, the default public screen
  5296.         will be used if the Boolean attribute WA_PubScreenFallBack
  5297.         is TRUE.
  5298.  
  5299.         2) Specify a pointer to a public screen using the
  5300.         WA_PubScreen tag item.  The WA_PubScreenFallBack
  5301.         attribute has no effect.  You can specify the default
  5302.         public screen by providing a NULL pointer.
  5303.  
  5304.         You can also specify the pointer by setting NewWindow.Type
  5305.         to PUBLICSCREEN, and specifying the public screen pointer
  5306.         in NewWindow.Screen.  The WA_PubScreen tag item has precedent
  5307.         over this technique.
  5308.  
  5309.         Unless NULL, the screen pointer provided MUST be a valid
  5310.         public screen.  You may ensure this several ways:
  5311.  
  5312.         - Be the owner of the screen.
  5313.         - Have a window already open on the screen.
  5314.         - Use LockPubScreen() to prevent the screen from closing.
  5315.         - specifying the WFLG_VISITOR bit in NewWindow.Flags is not
  5316.           supported.
  5317.  
  5318.         It is anticipated that the last will be the most common method
  5319.         of opening public screens because you often want to examine
  5320.         properties of the screen your window will be using in order
  5321.         to compensate for differences in dimension, depth, and font.
  5322.  
  5323.         The standard sequence for this method is as follows:
  5324.         LockPubScreen()    - obtain a pointer and a promise
  5325.         layout window    - adapt your window to the screen you will use
  5326.         OpenWindow()    - using the pointer you specify
  5327.         UnlockPubScreen()    - once your window is open, you can let go
  5328.                   of the lock on the public screen
  5329.         ... normal window even processing ...
  5330.         CloseWindow().
  5331.  
  5332.     Regarding "service" windows, such as those opened for a system
  5333.     requester or file requester associated with a given "client"window.
  5334.     These windows should NOT be "visitor" windows.  Open them
  5335.     using NewWindow.Type = CUSTOMSCREEN and NewWindow.Screen
  5336.     equal to the screen of the client window (window->WScreen).
  5337.     You can also use WA_CustomScreen, which has precedence.
  5338.  
  5339.     This ensures that the requester service window will be allowed to
  5340.     open on the same screen as the client window, even if that
  5341.     screen is not a public screen, or has private status.
  5342.  
  5343.     This has an implication for service/client protocol: when you
  5344.     pass a window pointer to any system requester routine or
  5345.     to a routine which creates some other other service window,
  5346.     you MUST keep your window open until the client window
  5347.     is closed.
  5348.  
  5349.     If a requester service will allow a NULL client window, this
  5350.     should indicate to open the service window on the default public
  5351.     screen (probably Workbench).  The correct way to get a pointer 
  5352.     to this screen is to call LockPubScreen( NULL ).  In this
  5353.     case, you want to open as a visitor window, which means you
  5354.     should use either PUBLICSCREEN or WA_PubScreen, described above.
  5355.     You should call UnlockPubScreen() after your visitor window is open.
  5356.  
  5357.     As of V36, gadgets in the right and bottom border
  5358.     (specified with GACT_RIGHTBORDER and GACT_BOTTOMBORDER) only
  5359.     contribute to the dimensions of the borders if they are also
  5360.     GFLG_RELRIGHT and GFLG_RELBOTTOM, respectively.
  5361.  
  5362.     RESULT
  5363.     If all is well, returns the pointer to your new Window
  5364.     If anything goes wrong, returns NULL
  5365.  
  5366.     BUGS
  5367.     When you open a window, Intuition will set the font of
  5368.     the window's RastPort to the font of the window's screen.
  5369.     This does not work right for GimmeZeroZero windows: the
  5370.     BorderRPort RastPort has the font set correctly, but
  5371.     Window.RPort is set up with the system default font.
  5372.     For compatibility reasons, we won't be fixing this problem.
  5373.  
  5374.     Also, there is a compatibility trick going on with the
  5375.     default font of your window's RastPort if the screen's
  5376.     font is "fancy."  See the SA_SysFont attribute described
  5377.     under OpenScreen().
  5378.  
  5379.     Unless you arrange otherwise, each window you open will allocate
  5380.     a signal for your task from the 16 "user signals."
  5381.     If no signal is available, your window will not be able
  5382.     to be opened.  In early V36 versions and before, Intuition didn't
  5383.     check this condition, but just left you with an unusable port.
  5384.  
  5385.     SEE ALSO
  5386.        OpenWindowTagList(), OpenScreen(), ModifyIDCMP(), SetWindowTitles(),
  5387.     LockPubScreen(), SetDefaultPubScreen(), ZipWindow(),
  5388.     layers.library/InstallLayerHook(), SetPubScreenModes()
  5389. intuition.library/OpenWindowTagList       intuition.library/OpenWindowTagList
  5390.  
  5391.    NAME    
  5392.     OpenWindowTagList -- OpenWindow() with TagItem extension. (V36)
  5393.     OpenWindowTags -- Varargs stub for OpenWindowTagList (V36)
  5394.  
  5395.    SYNOPSIS
  5396.     Window = OpenWindowTagList( NewWindow, TagItems )
  5397.     D0                  A0         A1
  5398.  
  5399.     struct Window *OpenWindowTagList( struct NewWindow *,
  5400.         struct TagItem * );
  5401.  
  5402.     Window = OpenWindowTags( NewWindow, Tag1, ... )
  5403.  
  5404.     struct Window *OpenWindowTags( struct NewWindow *, ULONG, ... );
  5405.  
  5406.    FUNCTION
  5407.     A variation of OpenWindow() that allow direct specification of
  5408.     a TagItem array of extension data.  Recommended over using the
  5409.     ExtNewWindow.Extension field.
  5410.  
  5411.     If you omit the NewWindow (pass NULL), a set of defaults
  5412.     are used, and overridden by the tag items.  Even without
  5413.     any tag items at all, a reasonable window opens on the Workbench
  5414.     or default public screen.
  5415.  
  5416.     See OpenWindow() for all the details.
  5417.  
  5418.    INPUTS
  5419.      NewWindow - (optional) pointer to a NewWindow structure.
  5420.     TagItems - (optional) pointer to TagItem array, with tag
  5421.         values as described under the description for
  5422.         OpenWindow().
  5423.  
  5424.    RESULT
  5425.      Window - newly created window, per your specifications.
  5426.  
  5427.    EXAMPLE
  5428.     See OpenScreenTagList() for an example of how to create
  5429.     a "varargs" version of this function for convenient C
  5430.     language programming.
  5431.  
  5432.    NOTES
  5433.     
  5434.  
  5435.    BUGS
  5436.     
  5437.  
  5438.    SEE ALSO
  5439.     OpenWindow()
  5440.  
  5441. intuition.library/OpenWorkBench               intuition.library/OpenWorkBench
  5442.  
  5443.     NAME 
  5444.     OpenWorkBench -- Open the Workbench screen.
  5445.  
  5446.     SYNOPSIS 
  5447.     WBScreen = OpenWorkBench()
  5448.     D0
  5449.  
  5450.     ULONG OpenWorkBench( VOID );
  5451.  
  5452.     FUNCTION 
  5453.     This routine attempts to reopen the Workbench.  The actions taken are: 
  5454.         - general good stuff and nice things, and then return a non-null
  5455.           pointer to the Workbench screen.
  5456.         - find that something has gone wrong, and return NULL
  5457.  
  5458.     The return value, if not NULL, is indeed the address of the Workbench
  5459.     screen, although you should not use it as such.  This is because the
  5460.     Workbench may be closed by other programs, which can invalidate
  5461.     the address at any time.  We suggest that you regard the return
  5462.     value as a ULONG indication that the routine has succeeded, if
  5463.     you pay any attention to it at all.
  5464.  
  5465.     INPUTS 
  5466.     None 
  5467.  
  5468.     RESULT 
  5469.     non-zero if Workbench screen opened successfully, or was already
  5470.         opened 
  5471.     zero if anything went wrong and the Workbench screen isn't out there 
  5472.  
  5473.     BUGS 
  5474.     The name of this routine is spelled wrong: it ought to have been
  5475.     OpenWorkbench().
  5476.  
  5477.     SEE ALSO 
  5478.     
  5479. intuition.library/PointInImage                 intuition.library/PointInImage
  5480.  
  5481.    NAME    
  5482.     PointInImage -- Tests whether an image "contains" a point. (V36)
  5483.  
  5484.    SYNOPSIS
  5485.     DoesContain = PointInImage( Point, Image )
  5486.     D0                  D0     A0
  5487.     
  5488.     BOOL PointInImage( struct Point, struct Image * );
  5489.  
  5490.    FUNCTION
  5491.     Tests whether a point is properly contained in an image.
  5492.     The intention of this is to provide custom gadgets a means
  5493.     to delegate "image mask" processing to the Image, where
  5494.     it belongs (superseding things like BOOLMASK).  After all,
  5495.     a rounded rect image with a drop shadow knows more about
  5496.     what points are inside it than anybody else should.
  5497.  
  5498.     For traditional Intuition Images, this routine checks if
  5499.     the point is in the Image box (LeftEdge/RightEdge/Width/Height).
  5500.  
  5501.    INPUTS
  5502.      Point    - Two words, X/Y packed into a LONG, with high word
  5503.         containing 'X'.  This is what you get if you pass
  5504.         a Point structure (not a pointer!) using common
  5505.         C language parameter conventions.
  5506.     Image - a pointer to a standard or custom Image data object.
  5507.         NOTE: If 'Image' is NULL, this function returns TRUE.
  5508.  
  5509.    RESULT
  5510.      DoesContain - Boolean result of the test.
  5511.  
  5512.    EXAMPLE
  5513.     
  5514.  
  5515.    NOTES
  5516.     
  5517.  
  5518.    BUGS
  5519.     Only applies to the first image, does not follow NextImage
  5520.     linked list.  This might be preferred.
  5521.  
  5522.    SEE ALSO
  5523.     
  5524.  
  5525. intuition.library/PrintIText                     intuition.library/PrintIText
  5526.  
  5527.     NAME
  5528.     PrintIText -- Print text described by the IntuiText argument.
  5529.  
  5530.     SYNOPSIS
  5531.     PrintIText( RastPort, IText, LeftOffset, TopOffset )
  5532.             A0        A1     D0          D1
  5533.  
  5534.     VOID PrintIText( struct RastPort *, struct IntuiText *, WORD, WORD );
  5535.  
  5536.     FUNCTION
  5537.     Prints the IntuiText into the specified RastPort.  Sets up the RastPort
  5538.     as specified by the IntuiText values, then prints the text into the
  5539.     RastPort at the IntuiText x/y coordinates offset by the left/top 
  5540.     arguments.  Note, though, that the IntuiText structure itself
  5541.     may contain further text position coordinates: those coordinates
  5542.     and the Left/TopOffsets are added to obtain the true position of
  5543.     the text to be rendered.
  5544.  
  5545.     This routine does window layer clipping as appropriate -- if you 
  5546.     print text outside of your window, your characters will be 
  5547.     clipped at the window's edge, providing you pass your window's
  5548.     (layered) RastPort.
  5549.  
  5550.     If the NextText field of the IntuiText argument is non-NULL, 
  5551.     the next IntuiText is rendered as well, and so on until some
  5552.     NextText field is NULL.
  5553.     
  5554.     IntuiText with the ITextFont field NULL are displayed in the
  5555.     font of the RastPort.  If the RastPort font is also NULL, the
  5556.     system default font, as set via the Preferences tool, will be used.
  5557.  
  5558.     INPUTS
  5559.     RastPort = the RastPort destination of the text
  5560.     IText = pointer to an instance of the structure IntuiText
  5561.     LeftOffset = left offset of the IntuiText into the RastPort
  5562.     TopOffset = top offset of the IntuiText into the RastPort
  5563.  
  5564.     RESULT
  5565.     None
  5566.  
  5567.     BUGS
  5568.  
  5569.     SEE ALSO
  5570.     
  5571. intuition.library/PubScreenStatus           intuition.library/PubScreenStatus
  5572.  
  5573.     NAME
  5574.     PubScreenStatus -- Change status flags for a public screen. (V36)
  5575.  
  5576.     SYNOPSIS
  5577.     ResultFlags = PubScreenStatus( Screen, StatusFlags )
  5578.     D0                      A0      D0
  5579.  
  5580.     UWORD PubScreenStatus( struct Screen *, UWORD );
  5581.  
  5582.     FUNCTION
  5583.     Changes status flags for a given public screen.  The only
  5584.     flag bit currently defined is PSNF_PRIVATE.  Thus,
  5585.     PubScreenStatus( screen, PSNF_PRIVATE ) makes a screen
  5586.     private, while PubScreenStatus( screen, 0 ) makes it public.
  5587.  
  5588.     Do not apply this function to a screen if your program
  5589.     isn't the screen's "owner", in particular, don't call
  5590.     this function for the Workbench screen.
  5591.  
  5592.     INPUTS
  5593.     Screen = pointer to public screen
  5594.     StatusFlags = Any of the PSNF_ flags (only PSNF_PRIVATE is
  5595.         currently defined).
  5596.  
  5597.     RESULT
  5598.     Returns 0 in the lowest order bit of the return value
  5599.     if the screen wasn't public, or because it can not be taken
  5600.     private because visitors are open in it.
  5601.  
  5602.     All other bits in the return code are reserved for future
  5603.     enhancement.
  5604.  
  5605.     BUGS
  5606.  
  5607.     SEE ALSO
  5608.     OpenScreen(), Intuition V36 update documentation    
  5609. intuition.library/QueryOverscan               intuition.library/QueryOverscan
  5610.  
  5611.     NAME
  5612.     QueryOverscan -- Inquire about a standard overscan region. (V36)
  5613.  
  5614.     SYNOPSIS
  5615.     success = QueryOverscan( DisplayID, Rect, OScanType )
  5616.     D0                       A0         A1    D0
  5617.  
  5618.     LONG QueryOverscan( ULONG, struct Rectangle *, WORD );
  5619.  
  5620.     FUNCTION
  5621.     This function fills in a rectangle with one of the system
  5622.     overscan dimensions, scaled appropriately for the mode of
  5623.     the DisplayID it is passed.
  5624.  
  5625.     There are three types of system overscan values:
  5626.     OSCAN_TEXT: completely visible, by user preference.  Used
  5627.       for Workbench screen and screen dimensions STDSCREENWIDTH
  5628.       and STDSCREENHEIGHT.  Left/Top is always 0,0.
  5629.     OSCAN_STANDARD: just beyond visible bounds of monitor, by
  5630.       user preference.  Left/Top may be negative.
  5631.     OSCAN_MAX: The largest region we can display, AND display
  5632.       any smaller region (see note below).
  5633.     OSCAN_VIDEO: The absolute largest region that the graphics.library
  5634.       can display.  This region must be used as-is.
  5635.     
  5636.  
  5637.     INPUTS
  5638.     DisplayID -- A 32-bit identifier for a display mode, as defined
  5639.       in the <graphics/modeid.h> include file (V39 and up) or in
  5640.       <graphics/displayinfo.h> (V37/V38).
  5641.  
  5642.       NOTE: If you only intend to use one of the four standard
  5643.       overscan dimensions as is, and open your screen to exactly
  5644.       the DisplayClip dimensions, you can specify one of
  5645.       the OSCAN_ values using the SA_Overscan tag to the
  5646.       OpenScreenTagList() function and omit all of SA_Left, SA_Top,
  5647.       SA_Width, and SA_Height.  This also requires that you do
  5648.       not supply a NewScreen structure, since it always contains
  5649.       left/top/width/height information.
  5650.  
  5651.       If you wish to supply a NewScreen structure, then you are
  5652.       supplying left/top/width/height information.  This information 
  5653.       can be taken from the rectangle resulting from this function:
  5654.         NewScreen.LeftEdge = Rect.MinX;
  5655.         NewScreen.TopEdge = Rect.MinY;
  5656.         NewScreen.Width = STDSCREENWIDTH;
  5657.             /* or ( Rect.MaxX - Rect.MinX + 1 ) */
  5658.         NewScreen.Height = STDSCREENHEIGHT;
  5659.             /* or ( Rect.MaxY - Rect.Miny + 1 ) */
  5660.  
  5661.     Rect -- pointer to a Rectangle structure which this function
  5662.       will fill out with its return values.  Note that to convert
  5663.       a rectangle to a screen "Height" you do (MaxY - MinY + 1), and
  5664.       similarly for "Width."  The rectangle may be passed directly
  5665.       to OpenScreen() as a DisplayClip region (SA_DClip).
  5666.  
  5667.     RESULT
  5668.     0 (FALSE) if the MonitorSpec your NewScreen requests
  5669.     does not exist.  Non-zero (TRUE) if it does.
  5670.     
  5671.     BUGS
  5672.     Change in parameter V36.A17 might cause problems for some.
  5673.  
  5674.     SEE ALSO
  5675.     OpenScreen(), Intuition V36 update documentation
  5676. intuition.library/RefreshGadgets             intuition.library/RefreshGadgets
  5677.  
  5678.     NAME
  5679.     RefreshGadgets -- Refresh (redraw) the gadget display.
  5680.  
  5681.     SYNOPSIS
  5682.     RefreshGadgets( Gadgets, Window, Requester )
  5683.                 A0       A1      A2
  5684.  
  5685.     VOID RefreshGadgets( struct Gadget *, struct Window *,
  5686.         struct Requester * );
  5687.  
  5688.     FUNCTION
  5689.     Refreshes (redraws) all of the gadgets in the gadget list starting
  5690.     from the specified gadget.  
  5691.  
  5692.     The window parameter must point to the window which contains the
  5693.     gadget, or which contains the requester that contains the gadget
  5694.     The requester parameter must only be valid if the gadget has the
  5695.     GTYP_REQGADGET flag set, a requirement for all requester gadgets.
  5696.  
  5697.     The Pointer argument points to a Window structure.
  5698.  
  5699.     The two main reasons why you might want to use this routine are:  
  5700.     first, that you've modified the imagery of the gadgets in your 
  5701.     display and you want the new imagery to be displayed; secondly, 
  5702.     if you think that some graphic operation you just performed 
  5703.     trashed the gadgetry of your display, this routine will refresh 
  5704.     the imagery for you.  
  5705.  
  5706.     Note that to modify the imagery of a gadget, you must first remove
  5707.     that gadget from the window's gadget list, using RemoveGadget() (or
  5708.     RemoveGList()).  After changing the image, border, text (including
  5709.     text for a string gadget), the gadget is replaced in the gadget list
  5710.     (using AddGadget() or AddGList()).  Adding gadgets does not cause
  5711.     them to be displayed (refreshed), so this function, or RefreshGList()
  5712.     is typically called.
  5713.  
  5714.     A common technique is to set or reset the GFLG_SELECTED flag of a 
  5715.     Boolean gadget and then call RefreshGadgets() to see it displayed
  5716.     highlighted if and only if GFLG_SELECTED is set.  If you wish to do
  5717.     this and be completely proper, you must RemoveGadget(), change the
  5718.     GFLG_SELECTED flag, AddGadget(), and RefreshGadgets(), or the
  5719.     equivalent.
  5720.  
  5721.     The gadgets argument can be a copy of the FirstGadget variable in 
  5722.     the Window structure that you want refreshed:  
  5723.     the effect of this will be that all gadgets will be redrawn.  
  5724.     However, you can selectively refresh just some of the gadgets 
  5725.     by starting the refresh part-way into the list:  for instance, 
  5726.     redrawing your window non-GTYP_GZZGADGET gadgets only, which you've 
  5727.     conveniently grouped at the end of your gadget list.  
  5728.  
  5729.     Even more control is available using the RefreshGList() routine which
  5730.     enables you to refresh a single gadget, or number of your choice.
  5731.  
  5732.     NOTE:  It's never safe to tinker with the gadget list yourself.  Don't
  5733.     supply some gadget list that Intuition hasn't already processed in
  5734.     the usual way.
  5735.  
  5736.     INPUTS
  5737.     Gadgets = pointer to the first in the list of gadgets wanting
  5738.         refreshment
  5739.     Window = pointer to the window containing the gadget or its requester
  5740.     Requester = pointer to a requester (ignored if gadget is not attached
  5741.         to a requester).
  5742.  
  5743.     RESULT
  5744.     None
  5745.  
  5746.     BUGS
  5747.  
  5748.     SEE ALSO
  5749.     RefreshGList(), RemoveGadget(), RemoveGList(), AddGadget(), AddGList()
  5750. intuition.library/RefreshGList                 intuition.library/RefreshGList
  5751.  
  5752.     NAME
  5753.     RefreshGList -- Refresh (redraw) a chosen number of gadgets.
  5754.  
  5755.     SYNOPSIS
  5756.     RefreshGList( Gadgets, Window, Requester, NumGad )
  5757.               A0       A1      A2         D0
  5758.  
  5759.     VOID RefreshGList( struct Gadget *, struct Window *,
  5760.         struct Requester *, WORD );
  5761.  
  5762.     FUNCTION
  5763.     Refreshes (redraws) gadgets in the gadget list starting
  5764.     from the specified gadget.  At most NumGad gadgets are redrawn.
  5765.     If NumGad is -1, all gadgets until a terminating NULL value
  5766.     in the NextGadget field is found will be refreshed, making this
  5767.     routine a superset of RefreshGadgets().
  5768.  
  5769.     The Requester parameter can point to a Requester structure.  If 
  5770.     the first gadget in the list has the GTYP_REQGADGET flag set, the 
  5771.     gadget list refers to gadgets in a requester and the pointer 
  5772.     must necessarily point to a window.  If these are not the gadgets 
  5773.     of a requester, the requester argument may be NULL.  
  5774.  
  5775.     Be sure to see the RefreshGadgets() function description, as this
  5776.     function is simply an extension of that.
  5777.    
  5778.     INPUTS
  5779.     Gadgets = pointer to the first in the list of gadgets wanting
  5780.         refreshment
  5781.     Window = pointer to the window containing the gadget or its requester
  5782.     Requester = pointer to a requester (ignored if Gadget is not attached
  5783.         to a Requester).
  5784.     NumGad  = maximum number of gadgets to be refreshed.  A value of -1
  5785.       will cause all gadgets to be refreshed from gadget to the
  5786.       end of the list.  A value of -2 will also do this, but if 'Gadgets'
  5787.       points to a Requester Gadget (GTYP_REQGADGET) ALL gadgets in the
  5788.       requester will be refreshed (this is a mode compatible with v1.1
  5789.       RefreshGadgets().)
  5790.  
  5791.     RESULT
  5792.     None
  5793.  
  5794.     BUGS
  5795.  
  5796.     SEE ALSO
  5797.     RefreshGadgets()
  5798. intuition.library/RefreshWindowFrame     intuition.library/RefreshWindowFrame
  5799.  
  5800.     NAME
  5801.     RefreshWindowFrame -- Ask Intuition to redraw your window border.
  5802.  
  5803.     SYNOPSIS
  5804.     RefreshWindowFrame( Window )
  5805.                 A0
  5806.  
  5807.     VOID RefreshWindowFrame( struct Window * );
  5808.  
  5809.     FUNCTION
  5810.     Refreshes the border of a window, including title region and all
  5811.     of the window's gadgets.
  5812.  
  5813.     You may use this call if you wish to update the display of your borders.
  5814.     The expected use of this is to correct unavoidable corruption.
  5815.  
  5816.     INPUTS
  5817.     Window = a pointer to a Window structure
  5818.  
  5819.     RESULT
  5820.     None
  5821.  
  5822.     BUGS
  5823.  
  5824.     SEE ALSO
  5825.    
  5826. intuition.library/ReleaseGIRPort             intuition.library/ReleaseGIRPort
  5827.  
  5828.     NAME
  5829.     ReleaseGIRPort -- Release a custom gadget RastPort. (V36)
  5830.  
  5831.     SYNOPSIS
  5832.     ReleaseGIRPort( RPort )
  5833.             A0
  5834.  
  5835.     VOID ReleaseGIRPort( struct RastPort * );
  5836.  
  5837.     FUNCTION
  5838.     The corresponding function to ObtainGIRPort(), it releases
  5839.     arbitration used by Intuition for gadget RastPorts.
  5840.  
  5841.     INPUTS
  5842.     Pointer to the RastPort returned by ObtainGIRPort().
  5843.     This pointer can be NULL, in which case nothing happens.
  5844.  
  5845.     RESULT
  5846.     None
  5847.  
  5848.     BUGS
  5849.  
  5850.     SEE ALSO
  5851.     ObtainGIRPort(), Custom Gadget documentation
  5852. intuition.library/RemakeDisplay               intuition.library/RemakeDisplay
  5853.  
  5854.     NAME
  5855.     RemakeDisplay -- Remake the entire Intuition display.
  5856.  
  5857.     SYNOPSIS
  5858.     failure = RemakeDisplay()
  5859.     D0 (V39)
  5860.  
  5861.     LONG RemakeDisplay( VOID );
  5862.     /* Returns LONG in V39 and greater */
  5863.  
  5864.     FUNCTION
  5865.     This is the big one.
  5866.  
  5867.     This procedure remakes the entire View structure for the 
  5868.     Intuition display.  It does the equivalent of MakeScreen() for
  5869.     every screen in the system, and then it calls the internal
  5870.     equivalent of RethinkDisplay().
  5871.    
  5872.     WARNING:  This routine can take many milliseconds to run, so
  5873.     do not use it lightly. 
  5874.  
  5875.     Calling MakeScreen() followed by RethinkDisplay() is typically
  5876.     a more efficient method for affecting changes to a single
  5877.     screen's ViewPort.
  5878.  
  5879.     INPUTS
  5880.     None
  5881.  
  5882.     RESULT
  5883.     Starting with V39, returns zero for success, non-zero for failure.
  5884.     Probable cause of failure is failure of graphics.library/MakeVPort()
  5885.     or of graphics.library/MrgCop().
  5886.     Prior to V39, the return code is invalid.  Do not interpret it when
  5887.     running on pre-V39 systems!
  5888.  
  5889.     BUGS
  5890.  
  5891.     SEE ALSO
  5892.     MakeScreen(), RethinkDisplay(), graphics.library/MakeVPort()
  5893.     graphics.library/MrgCop(), graphics.library/LoadView()
  5894. intuition.library/RemoveClass                   intuition.library/RemoveClass
  5895.  
  5896.     NAME
  5897.     RemoveClass -- Make a public boopsi class unavailable. (V36)
  5898.  
  5899.     SYNOPSIS
  5900.     RemoveClass( classPtr )
  5901.              A0
  5902.  
  5903.     VOID RemoveClass( struct IClass * );
  5904.  
  5905.     FUNCTION
  5906.     Makes a public class unavailable for public consumption.
  5907.     It's OK to call this function for a class which is not
  5908.     yet in the internal public class list, or has been
  5909.     already removed.
  5910.     
  5911.     INPUTS
  5912.     ClassPtr = pointer to *public* class created by MakeClass(),
  5913.         may be NULL.
  5914.  
  5915.     RESULT
  5916.     None.
  5917.     
  5918.     NOTES
  5919.  
  5920.     BUGS
  5921.  
  5922.     SEE ALSO
  5923.     MakeClass(), FreeClass(), AddClass()
  5924.     Document "Basic Object-Oriented Programming System for Intuition"
  5925.     and the "boopsi Class Reference" document.
  5926.     
  5927. intuition.library/RemoveGadget                 intuition.library/RemoveGadget
  5928.  
  5929.     NAME
  5930.     RemoveGadget -- Remove a gadget from a window.
  5931.  
  5932.     SYNOPSIS
  5933.     Position = RemoveGadget( Window, Gadget )
  5934.     D0             A0      A1
  5935.  
  5936.     UWORD RemoveGadget( struct Window *, struct Gadget * );
  5937.  
  5938.     FUNCTION
  5939.     Removes the given gadget from the gadget list of the specified 
  5940.     window.  Returns the ordinal position of the removed gadget.
  5941.  
  5942.     If the gadget is in a requester attached the the window, this
  5943.     routine will look for it and remove it if it is found.
  5944.  
  5945.     If the gadget pointer points to a gadget that isn't in the
  5946.     appropriate list, -1 is returned.  If there aren't any gadgets in the 
  5947.     list, -1 is returned.  If you remove the 65535th gadget from the list
  5948.     -1 is returned.
  5949.  
  5950.     NOTES
  5951.     New with V37: If one of the gadgets you wish to remove
  5952.     is the active gadget, this routine will wait for the user
  5953.     to release the mouse button before deactivating and removing
  5954.     the gadget.
  5955.  
  5956.     INPUTS
  5957.     Window = pointer to the window containing the gadget or the requester
  5958.         containing the gadget to be removed.
  5959.     Gadget = pointer to the gadget to be removed.  The gadget itself
  5960.         describes whether this is a gadget that should be removed from the
  5961.         window or some requester.
  5962.  
  5963.     RESULT
  5964.     Returns the ordinal position of the removed gadget.  If the gadget
  5965.     wasn't found in the appropriate list, or if there are no gadgets in
  5966.     the list, returns -1.
  5967.  
  5968.     BUGS
  5969.  
  5970.     SEE ALSO
  5971.     AddGadget(), AddGList(), RemoveGList()
  5972. intuition.library/RemoveGList                   intuition.library/RemoveGList
  5973.  
  5974.     NAME
  5975.     RemoveGList -- Remove a sublist of gadgets from a window.
  5976.  
  5977.     SYNOPSIS
  5978.     Position = RemoveGList( Window, Gadget, Numgad )
  5979.     D0            A0    A1    D0
  5980.  
  5981.     UWORD RemoveGList( struct Window *, struct Gadget *, WORD );
  5982.  
  5983.     FUNCTION
  5984.     Removes 'Numgad' gadgets from the gadget list of the specified 
  5985.     window.  Will remove gadgets from a requester if the first
  5986.     gadget's GadgetType flag GTYP_REQGADGET is set.
  5987.  
  5988.     Otherwise identical to RemoveGadget().
  5989.  
  5990.     NOTE
  5991.     The last gadget in the list does NOT have its link zeroed.
  5992.     New with V36: OK, last gadget's NextGadget field is set to NULL.
  5993.     
  5994.     New with V37: If one of the gadgets you wish to remove
  5995.     is the active gadget, this routine will wait for the user
  5996.     to release the mouse button before deactivating and removing
  5997.     the gadget.
  5998.  
  5999.     INPUTS
  6000.     Window = pointer to the window containing the gadget or the requester
  6001.         containing the gadget to be removed.
  6002.     Gadget = pointer to the gadget to be removed.  The gadget itself
  6003.            describes whether this is a gadget that should be removed 
  6004.            from the window or some requester.
  6005.     Numgad = number of gadgets to be removed.  If -1, remove all gadgets
  6006.         to end of window gadget list
  6007.  
  6008.     RESULT
  6009.     Returns the ordinal position of the removed gadget.  If the gadget
  6010.     wasn't found in the appropriate list, or if there are no gadgets in
  6011.     the list, returns -1.
  6012.  
  6013.     BUGS
  6014.  
  6015.     SEE ALSO
  6016.     RemoveGadget(), AddGadget(), AddGList()
  6017. intuition.library/ReportMouse                   intuition.library/ReportMouse
  6018.     NAME
  6019.     ReportMouse -- Tell Intuition whether to report mouse movement.
  6020.  
  6021.     SYNOPSIS
  6022.     ReportMouse( Boolean, Window )
  6023.              D0       A0    <-note
  6024.  
  6025.     VOID ReportMouse( BOOL, struct Window * );
  6026.  
  6027.     SPECIAL NOTE
  6028.     Some compilers and link files switch the arguments to this function
  6029.     about in unpredictable ways.  We apologize for this confusion
  6030.     wrapped around an error enclosing a mistake.
  6031.     The call will take one of two forms:
  6032.  
  6033.         ReportMouse(Boolean, Window);
  6034.             -or-
  6035.         ReportMouse(Window, (ULONG)Boolean);
  6036.  
  6037.     The first form is the one that corresponds to the amiga.lib supplied
  6038.     by Commodore.  The linker libraries and "pragmas" of some compilers
  6039.     supply the alternate form.
  6040.  
  6041.     A key point to remember is that the form of the function in ROM
  6042.     has always been the same, so there has always been object code
  6043.     compatibility.  However some care should be taken when switching
  6044.     compilers or switching between stubs and pragmas.
  6045.  
  6046.     From assembler the interface has always been:
  6047.         Boolean in D0, Window in A0
  6048.  
  6049.     Also, it is still endorsed to simply set the WFLG_REPORTMOUSE flag bit
  6050.     in Window->Flags, or reset it, on your own.  Make the operation
  6051.     an atomic assembly instruction (OR.W #WFLG_REPORTMOUSE,wd_Flags+2(A0)
  6052.     where A0 contains your window pointer).  Most compilers will produce
  6053.     an atomic operation when faced with:
  6054.             Window->Flags |= WFLG_REPORTMOUSE;
  6055.             Window->Flags &=~WFLG_REPORTMOUSE;
  6056.     or else bracket the operation between Forbid()/Permit().
  6057.  
  6058.     FUNCTION
  6059.     Tells Intuition whether or not to broadcast mouse-movement events to
  6060.     your window when it's the active one.  The Boolean value specifies
  6061.     whether to start or stop broadcasting position information of
  6062.     mouse-movement.  If the window is the active one, mouse-movement reports
  6063.     start coming immediately afterwards.  This same routine will change
  6064.     the current state of the GACT_FOLLOWMOUSE function of a
  6065.     currently-selected gadget too.  
  6066.  
  6067.     Note that calling ReportMouse() when a gadget is selected will only
  6068.     temporarily change whether or not mouse    movements are reported while
  6069.     that gadget remains selected; the next time the gadget is selected, its
  6070.     GACT_FOLLOWMOUSE flag is examined anew.
  6071.  
  6072.     Note also that calling ReportMouse() when no gadget is currently
  6073.     selected will change the state of the window's WFLG_REPORTMOUSE flag,
  6074.     but will have no effect on any gadget that may be subsequently
  6075.     selected. (This is all fixed in V36.)
  6076.  
  6077.     The ReportMouse() function is first performed when OpenWindow() 
  6078.     is first called; if the flag WFLG_REPORTMOUSE is included among
  6079.     the options, then all mouse-movement events are reported 
  6080.     to the opening task and will continue to be reported
  6081.     until ReportMouse() is called with a Boolean value of FALSE.
  6082.     If WFLG_REPORTMOUSE is not set, then no mouse-movement reports will
  6083.     be broadcast until ReportMouse() is called with a Boolean of TRUE.
  6084.  
  6085.     Note that the WFLG_REPORTMOUSE flag, as managed by this routine,
  6086.     determines IF mouse messages are to be broadcast.  Determining HOW
  6087.     they are to be broadcast is determined by the IDCMP_MOUSEMOVE
  6088.     IDCMPFlag.
  6089.  
  6090.     INPUTS
  6091.     Window = pointer to a Window structure associated with this request
  6092.     Boolean = TRUE or FALSE value specifying whether to turn this
  6093.              function on or off
  6094.  
  6095.     RESULT
  6096.     None
  6097.  
  6098.     BUGS
  6099.     See above
  6100.  
  6101.     SEE ALSO
  6102.     The Input and Output section of the Intuition Reference Manual
  6103. intuition.library/Request                           intuition.library/Request
  6104.  
  6105.     NAME
  6106.     Request -- Activate a requester.
  6107.  
  6108.     SYNOPSIS
  6109.     Success = Request( Requester, Window )
  6110.     D0           A0         A1
  6111.  
  6112.     BOOL Request( struct Requester *, struct Window * );
  6113.  
  6114.     FUNCTION
  6115.     Links in and displays a requester into the specified window.  
  6116.  
  6117.     This routine ignores the window's IDCMP_REQVERIFY flag.
  6118.  
  6119.     INPUTS
  6120.     Requester = pointer to the requester to be displayed
  6121.     Window = pointer to the window into which this requester goes
  6122.  
  6123.     New for V36: the POINTREL flag now has meaning if the requester
  6124.     is not a DMR (Double-Menu Requester):
  6125.     If POINTREL is set this requester should be placed in the center
  6126.     of the window, offset by Requester.RelLeft and Requester.RelTop.
  6127.     If the requester doesn't fit in the window, its position will be
  6128.     adjusted to show the upper-left corner.
  6129.  
  6130.     RESULT
  6131.     If the requester is successfully opened, TRUE is returned.  Otherwise,
  6132.     if the requester could not be opened, FALSE is returned.
  6133.  
  6134.     BUGS
  6135.     It turns out that the return code of this function is not
  6136.     always correct under V34 and prior.  If your requester does
  6137.     not have an ENDGADGET, then you can examine window->FirstRequest
  6138.     to see if your requester successfully opened.  (A requester with
  6139.     an ENDGADGET can go away all by itself before you get the chance
  6140.     to look).  Under V36 and higher, the return code from this routine
  6141.     is fine.
  6142.  
  6143.     There is a maximum of 8 requesters that are supported in
  6144.     a window that can be changed in size, position, or depth.
  6145.  
  6146.     SEE ALSO
  6147.     The Requesters section of the Intuition Reference Manual
  6148. intuition.library/ResetMenuStrip             intuition.library/ResetMenuStrip
  6149.  
  6150.     NAME
  6151.     ResetMenuStrip -- Re-attach a menu strip to a window. (V36)
  6152.  
  6153.     SYNOPSIS
  6154.     Success = ResetMenuStrip( Window, Menu )
  6155.     D0                  A0      A1
  6156.  
  6157.     BOOL ResetMenuStrip( struct Window *, struct Menu * );
  6158.  
  6159.     FUNCTION
  6160.     This function is simply a "fast" version of SetMenuStrip() that
  6161.     doesn't perform the precalculations of menu page sizes that
  6162.     SetMenuStrip() does.
  6163.  
  6164.     You may call this function ONLY IF the menu strip and all items
  6165.     and sub-items have not changed since the menu strip was passed to
  6166.     SetMenuStrip(), with the following exceptions:
  6167.  
  6168.     - You may change the CHECKED flag to turn a checkmark on or off.
  6169.     - You may change the ITEMENABLED flag to enable/disable some
  6170.       MenuItem or Menu structures.
  6171.  
  6172.     In all other ways, this function performs like SetMenuStrip().
  6173.  
  6174.     The new sequence of events you can use is:
  6175.     - OpenWindow()
  6176.     - SetMenuStrip()
  6177.     zero or more iterations of:
  6178.         - ClearMenuStrip()
  6179.         - change CHECKED or ITEMENABLED flags
  6180.         - ResetMenuStrip()
  6181.     - ClearMenuStrip()
  6182.     - CloseWindow()
  6183.  
  6184.     INPUTS
  6185.     Window = pointer to a Window structure
  6186.     Menu = pointer to the first menu in the menu strip
  6187.  
  6188.     RESULT
  6189.     TRUE always.
  6190.  
  6191.     BUGS
  6192.  
  6193.     SEE ALSO
  6194.     SetMenuStrip(), ClearMenuStrip()
  6195. intuition.library/RethinkDisplay             intuition.library/RethinkDisplay
  6196.  
  6197.     NAME
  6198.     RethinkDisplay -- Grand manipulation of the entire Intuition display.
  6199.  
  6200.     SYNOPSIS
  6201.     failure = RethinkDisplay()
  6202.     D0 (V39)
  6203.  
  6204.     LONG RethinkDisplay( VOID );
  6205.     /* Returns LONG in V39 and greater */
  6206.  
  6207.     FUNCTION
  6208.     This function performs the Intuition global display reconstruction.
  6209.     This includes rethinking about all of the  ViewPorts and their
  6210.     relationship to one another and reconstructing the entire display
  6211.     based on the results of this rethinking.
  6212.  
  6213.     Specifically, and omitting many internal details, the operation
  6214.     consists of this:
  6215.  
  6216.         Determine which ViewPorts are invisible and set their VP_HIDE
  6217.         ViewPort Mode flag. VP_HIDE flags are also set for screens that
  6218.         may not be simultaneously displayed with the frontmost (V36).
  6219.  
  6220.         If a change to a viewport height, or changing interlace or
  6221.         monitor scan rates require, MakeVPort() is called for specific
  6222.         screen viewports.  After this phase, the intermediate Copper lists
  6223.         for each screen's viewport are correctly set up. 
  6224.  
  6225.         MrgCop() and LoadView() are then called to get these Copper lists
  6226.         in action, thus establishing the new state of the Intuition
  6227.         display.
  6228.    
  6229.     You may perform a MakeScreen() on your Custom Screen before calling
  6230.     this routine.  The results will be incorporated in the new display, but
  6231.     changing the INTERLACE ViewPort mode for one screens must be reflected
  6232.     in the Intuition View, which is left to Intuition.
  6233.  
  6234.     WARNING:  This routine can take several milliseconds to run, so
  6235.     do not use it lightly. 
  6236.  
  6237.     New for V36: This routine is substantially changed to support
  6238.     new screen modes.  In particular, if screen rearrangement has
  6239.     caused a change in interlace mode or scan rate, this routine
  6240.     will remake the copper lists for each screen's viewport.
  6241.  
  6242.     INPUTS
  6243.     None
  6244.  
  6245.     RESULT
  6246.     Starting with V39, returns zero for success, non-zero for failure.
  6247.     Probable cause of failure is failure of graphics.library/MakeVPort()
  6248.     or of graphics.library/MrgCop().
  6249.     Prior to V39, the return code is invalid.  Do not interpret it when
  6250.     running on pre-V39 systems!
  6251.  
  6252.     BUGS
  6253.     In V35 and earlier, an interlaced screen coming to the front
  6254.     may not trigger a complete remake as required when the global
  6255.     interlace state is changed.  In some cases, this can be compensated
  6256.     for by setting the viewport DHeight field to 0 for hidden screens.
  6257.  
  6258.     SEE ALSO
  6259.     RemakeDisplay(), graphics.library/MakeVPort(), graphics.library/MrgCop(),
  6260.     graphics.library/LoadView(), MakeScreen()
  6261. intuition.library/ScreenDepth                   intuition.library/ScreenDepth
  6262.  
  6263.     NAME
  6264.     ScreenDepth -- Depth arrange a screen with extra control. (V39)
  6265.  
  6266.     SYNOPSIS
  6267.     ScreenDepth( screen, flags, reserved )
  6268.                  A0      D0     A1
  6269.  
  6270.     VOID ScreenDepth( struct Screen *, ULONG, APTR );
  6271.  
  6272.     FUNCTION
  6273.     Brings the specified screen to the front or back, based on
  6274.     the supplied flags.  Also allows control of screen
  6275.     depth-arranging within screen families.
  6276.  
  6277.     INPUTS
  6278.     screen = a pointer to the screen to move
  6279.     flags = one of SDEPTH_TOFRONT or SDEPTH_TOBACK (bringing the
  6280.         screen to front or back respectively).  If the screen
  6281.         is an attached screen, then you may also specify
  6282.         SDEPTH_INFAMILY to move the screen within the screen
  6283.         family.  If the screen is an attached screen and
  6284.         SDEPTH_INFAMILY is not specified, then the whole family
  6285.         will move, which is also the behavior of the ScreenToFront()
  6286.         and ScreenToBack() functions, as well as the user-interface
  6287.         controls.
  6288.     reserved = must be NULL for now.
  6289.  
  6290.     RESULT
  6291.     None
  6292.  
  6293.     NOTES
  6294.     ONLY the application which owns the screen should use
  6295.     SDEPTH_INFAMILY.  It is incorrect style (and against the
  6296.     intentions of the screen opener) for programs such as
  6297.     commodities or mouse-helpers to move child screens around
  6298.     in their family.  (Note that this is a style-behavior
  6299.     requirement;  there is no technical requirement that the
  6300.     task calling this function need be the task which opened
  6301.     the screen).
  6302.  
  6303.     BUGS
  6304.  
  6305.     SEE ALSO
  6306.     ScreenToFront(), ScreenToBack(),
  6307.     SA_Parent, SA_FrontChild, SA_BackChild
  6308.  
  6309. intuition.library/ScreenPosition             intuition.library/ScreenPosition
  6310.  
  6311.     NAME
  6312.     ScreenPosition -- Move screens with greater control. (V39)
  6313.  
  6314.     SYNOPSIS
  6315.     ScreenPosition( Screen, flags, x1, y1, x2, y2 )
  6316.                     A0      D0     D1  D2  D3  D4
  6317.  
  6318.     VOID ScreenPosition( struct Screen *, ULONG, LONG, LONG, LONG, LONG );
  6319.  
  6320.     FUNCTION
  6321.     Moves the screen to the specified position or by the specified
  6322.     increment, in screen pixel resolution coordinates.
  6323.  
  6324.     If the x1 and y1 variables you specify would move the screen in
  6325.     a way that violates any restrictions, the screen will be moved
  6326.     as far as possible.  You may examine the LeftEdge and TopEdge
  6327.     fields of the Screen structure after this function returns to
  6328.     see where the screen really ended up.
  6329.  
  6330.     Note that negative values for screen LeftEdge and TopEdge are
  6331.     valid for screens bigger than their display clip.
  6332.  
  6333.     INPUTS
  6334.     Screen = pointer to a Screen structure
  6335.     flags = Set to one of SPOS_RELATIVE, SPOS_ABSOLUTE, or
  6336.         SPOS_MAKEVISIBLE.   You may additionally set SPOS_FORCEDRAG
  6337.         if you need.  Use SPOS_RELATIVE (zero) for normal use
  6338.         (move screen a relative amount expressed by x1,y1).  Set
  6339.         the SPOS_ABSOLUTE flag if you wish x1 and y1 to be absolute
  6340.         coordinates to move the screen to.  Set SPOS_MAKEVISIBLE to
  6341.         position an oversized scrolling screen so that the rectangle
  6342.         described by (x1,y1)-(x2,y2) is on the visible part of
  6343.         the display. (A word-processor may wish to support
  6344.         autoscrolling as the user types.  In that case, it could
  6345.         call ScreenPosition() with the SPOS_MAKEVISIBLE flag and
  6346.         a rectangle that encompasses the cursor with some space
  6347.         around it.
  6348.  
  6349.         In addition to any one of the above choices, you can
  6350.         additionally set SPOS_FORCEDRAG if you wish to reposition
  6351.         a screen that was opened with the {SA_Draggable,FALSE}
  6352.         attribute.
  6353.  
  6354.     x1,y1 = Absolute position or change in position you wish to apply
  6355.         to the screen, when using SPOS_ABSOLUTE or SPOS_RELATIVE.
  6356.         When using SPOS_MAKEVISIBLE, these variables describe
  6357.         the upper-left corner of the rectangle you would like to
  6358.         ensure is on the visible part of a scrolling screen.
  6359.     x2,y2 = Ignored when using SPOS_ABSOLUTE or SPOS_RELATIVE.
  6360.         When using SPOS_MAKEVISIBLE, these variables describe
  6361.         the lower-right corner of the rectangle you would like to
  6362.         ensure is on the visible part of a scrolling screen.
  6363.  
  6364.         Note that these coordinates are in the same resolution
  6365.         as the screen (such as HIRES or INTERLACE)
  6366.  
  6367.     RESULT
  6368.     None
  6369.  
  6370.     NOTES
  6371.     ONLY the owner of the screen should use SPOS_FORCEDRAG.
  6372.     It is incorrect style (and against the intentions of the
  6373.     screen opener) for programs such as commodities or
  6374.     mouse-helpers to move non-draggable screens.
  6375.  
  6376.  
  6377.     BUGS
  6378.  
  6379.     SEE ALSO
  6380.     MoveScreen(), RethinkDisplay()
  6381. intuition.library/ScreenToBack                 intuition.library/ScreenToBack
  6382.  
  6383.     NAME
  6384.     ScreenToBack -- Send the specified screen to the back of the display.
  6385.  
  6386.     SYNOPSIS
  6387.     ScreenToBack( Screen )
  6388.               A0
  6389.  
  6390.     VOID ScreenToBack( struct Screen * );
  6391.  
  6392.     FUNCTION
  6393.     Sends the specified screen to the back of the display.
  6394.  
  6395.     INPUTS
  6396.     Screen = pointer to a Screen structure
  6397.  
  6398.     RESULT
  6399.     None
  6400.  
  6401.     BUGS
  6402.  
  6403.     SEE ALSO
  6404.     ScreenDepth(), ScreenToFront()
  6405. intuition.library/ScreenToFront               intuition.library/ScreenToFront
  6406.  
  6407.     NAME
  6408.     ScreenToFront -- Make the specified screen the frontmost.
  6409.  
  6410.     SYNOPSIS
  6411.     ScreenToFront( Screen )
  6412.                A0
  6413.  
  6414.     VOID ScreenToFront( struct Screen * );
  6415.  
  6416.     FUNCTION
  6417.     Brings the specified Screen to the front of the display.
  6418.  
  6419.     INPUTS
  6420.     Screen = a pointer to a Screen structure
  6421.  
  6422.     RESULT
  6423.     None
  6424.  
  6425.     BUGS
  6426.  
  6427.     SEE ALSO
  6428.     ScreenDepth(), ScreenToBack()
  6429. intuition.library/ScrollWindowRaster     intuition.library/ScrollWindowRaster
  6430.  
  6431.    NAME
  6432.     ScrollWindowRaster -- Intuition-friendly ScrollRasterBF() (V39)
  6433.  
  6434.    SYNOPSIS
  6435.     ScrollWindowRaster(win, dx, dy, xmin, ymin, xmax, ymax)
  6436.                        A1   D0  D1  D2    D3    D4    D5
  6437.  
  6438.     void ScrollWindowRaster(struct Window *, WORD, WORD,
  6439.         WORD, WORD, WORD, WORD);
  6440.  
  6441.    FUNCTION
  6442.     Calls graphics.library/ScrollRasterBF(), which moves
  6443.     the bits in the raster by (dx,dy) towards (0,0)
  6444.     The space vacated is filled by calling EraseRect().
  6445.     NOTE: that vacated space is _not_ considered damage!
  6446.     The scroll operation is limited to the rectangle defined
  6447.     by (xmin,ymin)-(xmax,ymax). Bits outside will not be
  6448.     affected. If (xmax,ymax) is outside the rastport then use
  6449.     the lower right corner of the rastport.
  6450.  
  6451.     If a window is partly obscured, then it is possible for
  6452.     ScrollWindowRaster() to scroll some of the obscured
  6453.     area into view.  If the window is simple-refresh, then
  6454.     the formerly obscured area is damage, and the application
  6455.     needs to repair it.  If Intuition detects damage as a result
  6456.     of ScrollWindowRaster(), it will send an IDCMP_REFRESHWINDOW
  6457.     event to the application's window.  This handling of damage
  6458.     is the principal reason ScrollWindowRaster() is preferred
  6459.     to ScrollRaster() and ScrollRasterBF().
  6460.  
  6461.    INPUTS
  6462.     win - pointer to a Window structure
  6463.     dx,dy are integers that may be postive, zero, or negative
  6464.     xmin,ymin - upper left of bounding rectangle
  6465.     xmax,ymax - lower right of bounding rectangle
  6466.  
  6467.    NOTES
  6468.     This call uses ScrollRasterBF(), which calls EraseRect()
  6469.     when clearing the newly exposed area. This allows use of
  6470.     a custom layer backfill hook.
  6471.  
  6472.     IMPORTANT:  boopsi gadgets should use ScrollRaster() or
  6473.     ScrollRasterBF() directly!  Never call ScrollWindowRaster()
  6474.     from inside a boopsi gadget's method handler.  Note that
  6475.     Intuition will detect and handle damage caused by such use
  6476.     of ScrollRaster() or ScrollRasterBF(), for gadgets with
  6477.     the GMORE_SCROLLRASTER property.
  6478.  
  6479.     VERY IMPORTANT:  if you have any gadgets in your simple-refresh
  6480.     window with the GMORE_SCROLLRASTER property, you must use
  6481.     ScrollWindowRaster() instead of ScrollRaster() or ScrollRasterBF().
  6482.     Handling of gadget scroll damage is incompatible with continued
  6483.     use of these graphics functions in an Intuition window.
  6484.     NB:  If you're using a gadget class whose source code you do
  6485.     not control, that class might be using GMORE_SCROLLRASTER or
  6486.     might start to in a future version.  For that reason, you
  6487.     should use ScrollWindowRaster() if you are using any such gadgets.
  6488.  
  6489.    BUGS
  6490.  
  6491.    SEE ALSO
  6492.     graphics.library/ScrollRaster(), graphics.library/ScrollRasterBF()
  6493.     graphics.library/EraseRect(), WA_BackFill
  6494.  
  6495. intuition.library/SetAttrsA                       intuition.library/SetAttrsA
  6496.  
  6497.     NAME
  6498.     SetAttrsA -- Specify attribute values for an object. (V36)
  6499.     SetAttrs -- Varargs stub for SetAttrsA(). (V36)
  6500.  
  6501.     SYNOPSIS
  6502.     result = SetAttrsA( Object, TagList )
  6503.     D0                  A0      A1
  6504.  
  6505.     ULONG SetAttrsA( APTR, struct TagItem * );
  6506.  
  6507.     result = SetAttrs( Object, Tag1, ... )
  6508.  
  6509.     ULONG SetAttrs( APTR, ULONG, ... );
  6510.  
  6511.     FUNCTION
  6512.     Specifies a set of attribute/value pairs with meaning as
  6513.     defined by a 'boopsi' object's class.
  6514.  
  6515.     This function does not provide enough context information or
  6516.     arbitration for boopsi gadgets which are attached to windows
  6517.     or requesters.  For those objects, use SetGadgetAttrs().
  6518.  
  6519.     INPUTS
  6520.     Object = abstract pointer to a boopsi object.
  6521.     TagList = array of TagItem structures with attribute/value pairs.
  6522.  
  6523.     RESULT
  6524.     The object does whatever it wants with the attributes you provide.
  6525.     The return value tends to be non-zero if the changes would require
  6526.     refreshing gadget imagery, if the object is a gadget.
  6527.     
  6528.     NOTES
  6529.     This function invokes the OM_SET method with a NULL GadgetInfo
  6530.     parameter.
  6531.  
  6532.     BUGS
  6533.  
  6534.     SEE ALSO
  6535.     NewObject(), DisposeObject(), GetAttr(), MakeClass(),
  6536.     Document "Basic Object-Oriented Programming System for Intuition"
  6537.     and the "boopsi Class Reference" document.
  6538. intuition.library/SetDefaultPubScreen   intuition.library/SetDefaultPubScreen
  6539.  
  6540.     NAME
  6541.     SetDefaultPubScreen -- Choose a new default public screen. (V36)
  6542.  
  6543.     SYNOPSIS
  6544.     SetDefaultPubScreen( Name )
  6545.                  A0
  6546.  
  6547.     VOID SetDefaultPubScreen( UBYTE * );
  6548.  
  6549.     FUNCTION
  6550.     Establishes a new default public screen for visitor windows.
  6551.  
  6552.     This screen is used by windows asking for a named public screen
  6553.     that doesn't exist and the FALLBACK option is selected, and for
  6554.     windows asking for the default public screen directly.
  6555.  
  6556.     INPUTS
  6557.     Name = name of chosen public screen to be the new default.
  6558.     A value of NULL means that the Workbench screen is to
  6559.     be the default public screen.
  6560.  
  6561.     RESULT
  6562.     None
  6563.  
  6564.     BUGS
  6565.  
  6566.     SEE ALSO
  6567.     OpenWindow(), OpenScreen(), Intuition V36 update documentation    
  6568. intuition.library/SetDMRequest                 intuition.library/SetDMRequest
  6569.  
  6570.     NAME
  6571.     SetDMRequest -- Set the DMRequest of a window.
  6572.  
  6573.     SYNOPSIS
  6574.     success = SetDMRequest( Window, DMRequest )
  6575.     D0                      A0      A1
  6576.  
  6577.     BOOL SetDMRequest( struct Window *, struct Requester * );
  6578.  
  6579.     FUNCTION
  6580.     Attempts to set the DMRequest into the specified window.  
  6581.     The DMRequest is the special requester that you attach to 
  6582.     the double-click of the menu button which the user can then 
  6583.     bring up on demand.  This routine WILL NOT change the DMRequest
  6584.     if it's already set and is currently active (in use by the user).  
  6585.     After having called SetDMRequest(), if you want to change the 
  6586.     DMRequest, the correct way to start is by calling ClearDMRequest() 
  6587.     until it returns a value of TRUE; then you can call SetDMRequest() 
  6588.     with the new DMRequest.  
  6589.  
  6590.     If the POINTREL flag is set in the DMRequest, the DMR will open as
  6591.     close to the pointer as possible.  The RelLeft/Top fields are
  6592.     for fine-tuning the position.
  6593.  
  6594.     INPUTS
  6595.     Window = pointer to the window from which the DMRequest is to be set
  6596.     DMRequest = a pointer to a requester
  6597.  
  6598.     RESULT
  6599.     If the current DMRequest was not in use, sets the DMRequest
  6600.         pointer into the window and returns TRUE.
  6601.     If the DMRequest was currently in use, doesn't change the pointer
  6602.         and returns FALSE
  6603.  
  6604.     BUGS
  6605.  
  6606.     SEE ALSO
  6607.     ClearDMRequest(), Request()
  6608. intuition.library/SetEditHook                   intuition.library/SetEditHook
  6609.  
  6610.     NAME
  6611.     SetEditHook -- Set global processing for string gadgets. (V36)
  6612.  
  6613.     SYNOPSIS
  6614.     OldHook = SetEditHook( Hook )
  6615.     D0                     A0
  6616.  
  6617.     struct Hook *SetEditHook( struct Hook * );
  6618.  
  6619.     FUNCTION
  6620.     Sets new global editing hook for string gadgets.
  6621.  
  6622.     WARNING: The use and integration of this function has not
  6623.     been explored, and thus should be considered a risky function.
  6624.     Do *NOT* use this in a commercial product until further notice.
  6625.  
  6626.     INPUTS
  6627.     Hook -- A pointer to a struct Hook which determines a function
  6628.       in your code to be called every time the user types a key.
  6629.       This is done before control is passed to the gadget custom
  6630.       editing hook, so affects ALL string gadgets.
  6631.  
  6632.     RESULT
  6633.     Returns previous global edit hook structure.  You may need this
  6634.     hook if you wish to invoke the previous edit hook's behavior
  6635.     in addition to your own.
  6636.  
  6637.     NOTES
  6638.     There are a few key differences between a global edit hook and the
  6639.     more famililar per-gadget StringExtend->EditHook field.  In the
  6640.     case of the latter, the hook's creator supplies a WorkBuffer.
  6641.     Intuition's idea of the result of a keystroke is stored in
  6642.     the SGWork structure (which references the WorkBuffer).  The
  6643.     state of the gadget before Intuition's hook acted is available in
  6644.     the StringInfo->Buffer, ->BufferPos, and ->NumChars fields.
  6645.  
  6646.     In the case of a global editing hook, your hook _becomes_
  6647.     Intuition's hook, which affects all gadgets, most of which
  6648.     do not have a WorkBuffer.  This means that if you invoke
  6649.     Intuition's original hook (which you got as the result of this
  6650.     function), there isn't any easy way for you to "undo" that after
  6651.     the fact.  This means that if Intuition's behavior for certain
  6652.     keystrokes is incompatible with your hook's objectives, then
  6653.     you must avoid calling Intuition's hook for those keys.  One
  6654.     approach is to run through your hook's code first, acting on
  6655.     those keys you wish to recognize.  Then, call Intuition's
  6656.     hook for those keys you do not recognize, or for those keys
  6657.     whose default actions you wish to add to.
  6658.  
  6659.     Do not forget to set SGA_REDISPLAY when needed (see sghooks.h),
  6660.     and please be sure to give the SGWork->EditOp field a value
  6661.     which is as meaningful as possible.
  6662.  
  6663.     Currently, only SGH_KEY messages are sent to the global edit
  6664.     hook, though custom edit hooks do receive SGH_CLICK messages
  6665.     in addition.
  6666.  
  6667.     Finally, there is currently no arbitration between a global
  6668.     edit hook and a custom edit hook as to ownership of keystrokes.
  6669.     It would be fair to expect that a custom edit hook would be
  6670.     written to match the current Intuition edit hook.  If your
  6671.     global edit hook acts on (say) up and down arrow keystrokes,
  6672.     an undesirable result may occur if some string gadget's custom
  6673.     hook also acts on these keystrokes.  There is currently
  6674.     no easy way to resolve this issue.
  6675.  
  6676.     BUGS
  6677.  
  6678.     SEE ALSO
  6679.     
  6680. intuition.library/SetGadgetAttrsA           intuition.library/SetGadgetAttrsA
  6681.  
  6682.     NAME
  6683.     SetGadgetAttrsA -- Specify attribute values for a boopsi gadget. (V36)
  6684.     SetGadgetAttrs -- Varargs stub for SetGadgetAttrsA(). (V36)
  6685.  
  6686.     SYNOPSIS
  6687.     result = SetGadgetAttrsA( Gadget, Window, Requester, TagList )
  6688.     D0                  A0      A1      A2         A3
  6689.  
  6690.     ULONG SetGadgetAttrsA( struct Gadget *, struct Window *,
  6691.         struct Requester *, struct TagItem * );
  6692.  
  6693.     result = SetGadgetAttrs( Gadget, Window, Requester, Tag1, ...)
  6694.  
  6695.     ULONG SetGadgetAttrs( struct Gadget *, struct Window *,
  6696.         struct Requester *, ULONG, ... );
  6697.  
  6698.     FUNCTION
  6699.     Same as SetAttrs(), but provides context information and
  6700.     arbitration for classes which implement custom Intuition gadgets.
  6701.  
  6702.     You should use this function for boopsi gadget objects which have
  6703.     already been added to a requester or a window, or for "models" which
  6704.     propagate information to gadget already added.
  6705.  
  6706.     Typically, the gadgets will refresh their visuals to reflect
  6707.     changes to visible attributes, such as the value of a slider,
  6708.     the text in a string-type gadget, the selected state of a button.
  6709.  
  6710.     You can use this as a replacement for SetAttrs(), too, if you
  6711.     specify NULL for the 'Window' and 'Requester' parameters.
  6712.  
  6713.     INPUTS
  6714.     Gadget = abstract pointer to a boopsi gadget
  6715.     Window = window gadget has been added to using AddGList() or AddGadget()
  6716.     Requester = for REQGADGETs, requester containing the gadget
  6717.     TagList = array of TagItem structures with attribute/value pairs.
  6718.  
  6719.     RESULT
  6720.     The object does whatever it wants with the attributes you provide,
  6721.     which might include updating its gadget visuals.
  6722.  
  6723.     The return value tends to be non-zero if the changes would require
  6724.     refreshing gadget imagery, if the object is a gadget.
  6725.     
  6726.     NOTES
  6727.     This function invokes the OM_SET method with a GadgetInfo
  6728.     derived from the 'Window' and 'Requester' pointers.
  6729.  
  6730.     BUGS
  6731.     Prior to V39, this function ran with inadequate locking against
  6732.     the calls that Intuition's input task makes to the gadgets.
  6733.     To run properly prior to V39, this function, input processing,
  6734.     and and the gadget's dispatcher must be mutually re-entrant.
  6735.  
  6736.     SEE ALSO
  6737.     NewObject(), DisposeObject(), GetAttr(), MakeClass(),
  6738.     Document "Basic Object-Oriented Programming System for Intuition"
  6739.     and the "boopsi Class Reference" document.
  6740. intuition.library/SetMenuStrip                 intuition.library/SetMenuStrip
  6741.  
  6742.     NAME
  6743.     SetMenuStrip -- Attach a menu strip to a window.
  6744.  
  6745.     SYNOPSIS
  6746.     Success = SetMenuStrip( Window, Menu )
  6747.     D0                A0      A1
  6748.  
  6749.     BOOL SetMenuStrip( struct Window *, struct Menu * );
  6750.  
  6751.     FUNCTION
  6752.     Attaches the menu strip to the window.  After calling this routine,
  6753.     if the user presses the menu button, this specified menu strip
  6754.     will be displayed and accessible by the user.
  6755.  
  6756.     Menus with zero menu items are not allowed.
  6757.  
  6758.     NOTE:  You should always design your menu strip changes to be a 
  6759.     two-way operation, where for every menu strip you add to your 
  6760.     window you should always plan to clear that strip sometime.  Even 
  6761.     in the simplest case, where you will have just one menu strip for 
  6762.     the lifetime of your window, you should always clear the menu strip 
  6763.     before closing the window.  If you already have a menu strip attached 
  6764.     to this window, the correct procedure for changing to a new menu 
  6765.     strip involves calling ClearMenuStrip() to clear the old first.  
  6766.  
  6767.     The sequence of events should be:
  6768.     - OpenWindow()
  6769.     - zero or more iterations of:
  6770.           - SetMenuStrip()
  6771.           - ClearMenuStrip()
  6772.     - CloseWindow()
  6773.  
  6774.     INPUTS
  6775.     Window = pointer to a Window structure
  6776.     Menu = pointer to the first menu in the menu strip
  6777.  
  6778.     RESULT
  6779.     TRUE if there were no problems.  TRUE always, since this routine
  6780.     will wait until it is OK to proceed.
  6781.  
  6782.     BUGS
  6783.  
  6784.     SEE ALSO
  6785.     ClearMenuStrip(), ResetMenuStrip()
  6786. intuition.library/SetMouseQueue               intuition.library/SetMouseQueue
  6787.  
  6788.     NAME
  6789.     SetMouseQueue -- Change limit on pending mouse messages. (V36)
  6790.  
  6791.     SYNOPSIS
  6792.     oldQueueLength = SetMouseQueue( Window, QueueLength )
  6793.     D0                              A0      D0
  6794.  
  6795.     LONG SetMouseQueue( struct Window *, UWORD );
  6796.  
  6797.     FUNCTION
  6798.     Changes the number of mouse messages that Intuition will allow
  6799.     to be outstanding for your window.
  6800.  
  6801.     INPUTS
  6802.     Window = your window
  6803.     QueueLength = the new value of outstanding mouse movement messages
  6804.       you wish to allow.
  6805.  
  6806.     RESULT
  6807.     -1 if 'Window' is not known
  6808.     Otherwise the previous value of the queue limit.
  6809.     The corresponding function for changing the repeat key
  6810.     queue limit is not yet implemented.
  6811.  
  6812.     BUGS
  6813.  
  6814.     SEE ALSO
  6815.     OpenWindow()
  6816. intuition.library/SetPointer                     intuition.library/SetPointer
  6817.  
  6818.     NAME
  6819.     SetPointer -- Specify a pointer sprite image for a window.
  6820.  
  6821.     SYNOPSIS
  6822.     SetPointer( Window, Pointer, Height, Width, XOffset, YOffset )
  6823.             A0      A1       D0      D1     D2       D3
  6824.  
  6825.     VOID SetPointer( struct Window *, UWORD *, WORD, WORD, WORD, WORD );
  6826.  
  6827.     FUNCTION
  6828.     Sets up the window with the sprite definition for the pointer.  
  6829.     Then, whenever the window is the active one, the pointer 
  6830.     image will change to the window's version.  If the window is
  6831.     the active one when this routine is called, the change takes
  6832.     place immediately.
  6833.  
  6834.     The XOffset and YOffset parameters are used to offset the
  6835.     upper-left corner of the hardware sprite image from what Intuition
  6836.     regards as the current position of the pointer.  Another way of
  6837.     describing it is as the offset from the "hot spot" of the pointer
  6838.     to the top-left corner of the sprite.  For instance, if you specify 
  6839.     offsets of zero, zero, then the top-left corner of your sprite 
  6840.     image will be placed at the mouse position.  On the other hand, 
  6841.     if you specify an XOffset of -7 (remember, sprites are 16 pixels 
  6842.     wide) then your sprite will be centered over the mouse position.  
  6843.     If you specify an XOffset of -15, the right-edge of the sprite 
  6844.     will be over the mouse position.
  6845.  
  6846.     INPUTS
  6847.     Window = pointer to the window to receive this pointer definition
  6848.     Pointer = pointer to the data definition of a sprite
  6849.     Height = the height of the pointer
  6850.     Width = the width of the sprite (must be less than or equal to sixteen)
  6851.     XOffset = the offset for your sprite from the mouse position
  6852.     YOffset = the offset for your sprite from the mouse position
  6853.  
  6854.     RESULT
  6855.     None
  6856.  
  6857.     BUGS
  6858.  
  6859.     SEE ALSO
  6860.     SetWindowPointerA(), ClearPointer(), ROM Kernel Manual: Libraries
  6861.  
  6862. intuition.library/SetPrefs                         intuition.library/SetPrefs
  6863.  
  6864.     NAME
  6865.     SetPrefs -- Set Intuition preferences data.
  6866.  
  6867.     SYNOPSIS
  6868.     Prefs = SetPrefs( PrefBuffer, Size, Inform )
  6869.     D0          A0          D0    D1
  6870.  
  6871.     struct Preferences *SetPrefs( struct Preferences *, LONG, BOOL );
  6872.  
  6873.     FUNCTION
  6874.     Sets new preferences values.  Copies the first 'Size' bytes
  6875.     from your preferences buffer to the system preferences table,
  6876.     and puts them into effect.
  6877.  
  6878.     The 'Inform' parameter, if TRUE, indicates that an IDCMP_NEWPREFS
  6879.     message is to be sent to all windows that have the IDCMP_NEWPREFS
  6880.     IDCMPFlag set.
  6881.    
  6882.     It is legal to set a partial copy of the Preferences structure.
  6883.     The most frequently changed values are grouped at the beginning
  6884.     of the Preferences structure.
  6885.  
  6886.     New for V36:  A new and more extensible method for supplying
  6887.     Preferences has been introduced in V36, and relies on file
  6888.     system notification.  The Intuition preferences items rely
  6889.     also on the IPrefs program.  Certain elements of the
  6890.     Preferences structure have been superseded by this new method.
  6891.     (Elements are generally superseded as new hardware or software
  6892.     features demand more information than fits in struct Preferences.
  6893.     Parts of struct Preferences must be ignored so that applications
  6894.     calling GetPrefs(), modifying some other part of struct Preferences,
  6895.     then calling SetPrefs(), don't end up truncating the extended
  6896.     data).
  6897.  
  6898.     Pointer Preferences:  Starting with V36, pointer changes
  6899.     submitted through SetPrefs() are only heeded until the first
  6900.     time IPrefs informs Intuition of a V36-style pointer preferences
  6901.     file.  In V39 and higher, only the pointer from the initial
  6902.     SetPrefs() (i.e. devs:system-configuration) is heeded.
  6903.  
  6904.     Palette Preferences:  Starting with V39, color changes submitted
  6905.     through SetPrefs() are ignored after the first time IPrefs sends
  6906.     Intuition new style palette preferences.
  6907.  
  6908.     FontHeight and LaceWB:  These are only respected from
  6909.     devs:system-configuration.
  6910.  
  6911.     View centering and size:  Changes to ViewX/YOffset and
  6912.     Row/ColumnSizeChange only apply to the default monitor
  6913.     (NTSC or PAL), and not to other monitors such as Productivity.
  6914.  
  6915.     Other fields may be superseded in the future.
  6916.  
  6917.     INPUTS
  6918.     PrefBuffer = pointer to the memory buffer which contains your
  6919.         desired settings for Intuition preferences
  6920.     Size = the number of bytes in your PrefBuffer, the number of bytes
  6921.            you want copied to the system's internal preference settings
  6922.     Inform = whether you want the information of a new preferences
  6923.         setting propagated to all windows.
  6924.  
  6925.     NOTES
  6926.     Unless you are responding to a user's explicit request to
  6927.     change Preferences (for example, you are writing a Preferences
  6928.     editor), you should probably avoid using this function.
  6929.     The user's Preferences should be respected, not overridden.
  6930.  
  6931.     RESULT
  6932.     Returns your parameter PrefBuffer.
  6933.  
  6934.     BUGS
  6935.  
  6936.     SEE ALSO
  6937.     GetDefPrefs(), GetPrefs()
  6938. intuition.library/SetPubScreenModes       intuition.library/SetPubScreenModes
  6939.  
  6940.     NAME
  6941.     SetPubScreenModes -- Establish global public screen behavior. (V36)
  6942.  
  6943.     SYNOPSIS
  6944.     OldModes = SetPubScreenModes( Modes )
  6945.     D0                            D0
  6946.  
  6947.     UWORD SetPubScreenModes( UWORD );
  6948.     
  6949.     FUNCTION
  6950.         Sets GLOBAL Intuition public screen modes.    
  6951.  
  6952.     INPUTS
  6953.     Modes = new global modes flags.  Values for flag bits are:
  6954.       SHANGHAI: workbench windows are to be opened on the
  6955.         default public screen
  6956.       POPPUBSCREEN: when a visitor window is opened, the public
  6957.         screen it opens on is to be brought to the front.
  6958.  
  6959.     RESULT
  6960.     OldModes = previous global mode settings
  6961.  
  6962.     BUGS
  6963.  
  6964.     SEE ALSO
  6965.     OpenScreen(), Intuition V36 update documentation    
  6966. intuition.library/SetWindowPointerA       intuition.library/SetWindowPointerA
  6967.  
  6968.     NAME
  6969.     SetWindowPointerA -- Select a pointer for your window. (V39)
  6970.     SetWindowPointer -- Varargs stub for SetWindowPointerA(). (V39)
  6971.  
  6972.     SYNOPSIS
  6973.     SetWindowPointerA( window, taglist )
  6974.                        A0      A1
  6975.  
  6976.     VOID SetWindowPointerA( struct Window *, struct TagItem * );
  6977.  
  6978.     SetWindowPointer( window, tag1, ... )
  6979.  
  6980.     VOID SetWindowPointer( struct Window *, ULONG tag1, ... );
  6981.  
  6982.     FUNCTION
  6983.     Allows you to set the pointer image associated with the
  6984.     specified window.  Whenever the window is the active one,
  6985.     the pointer image will change to the window's version.
  6986.     If the window is the active one when this routine is
  6987.     called, the change takes place immediately.
  6988.  
  6989.     INPUTS
  6990.     window = pointer to the window to receive this pointer definition
  6991.     taglist = pointer to a taglist describing your pointer
  6992.  
  6993.     TAGS
  6994.     The same three tags are also accepted by OpenWindowTagList(),
  6995.     which allows you to establish the initial pointer at the
  6996.     time you open your window.
  6997.  
  6998.     WA_Pointer (APTR) - The pointer you wish to associate with
  6999.         your window.  If NULL, you are requesting the Preferences
  7000.         default pointer.  Custom pointers should be allocated
  7001.         by performing a NewObject() on "pointerclass".
  7002.         (See <intuition/pointerclass.h>).  Defaults to NULL.
  7003.  
  7004.     WA_BusyPointer (BOOL) - Set to TRUE to request the Preferences
  7005.         busy-pointer.  If FALSE, your pointer will be as requested
  7006.         by WA_Pointer.  Defaults to FALSE.
  7007.  
  7008.     WA_PointerDelay (BOOL) - Set to TRUE to defer changing your
  7009.         pointer for a brief instant.  This is typically used
  7010.         along with setting the busy pointer, especially when
  7011.         the application knows it may be busy for a very short
  7012.         while.  If the application clears the pointer or sets
  7013.         another pointer before the delay expires, the pending
  7014.         pointer change is cancelled.  This reduces short
  7015.         flashes of the busy pointer.
  7016.  
  7017.     RESULT
  7018.     None
  7019.  
  7020.     EXAMPLE
  7021.     This example sets the standard busy pointer with pointer-delay,
  7022.     does a bit of work, then clears the pointer:
  7023.  
  7024.         /* Put up the busy pointer, with pointer-delay */
  7025.         SetWindowPointer( win,
  7026.             WA_BusyPointer, TRUE,
  7027.             WA_PointerDelay, TRUE,
  7028.             TAG_DONE );
  7029.  
  7030.         /* Do busy stuff here */
  7031.  
  7032.         /* No tags means "clear the pointer" */
  7033.         SetWindowPointer( win,
  7034.             TAG_DONE );
  7035.  
  7036.     BUGS
  7037.  
  7038.     SEE ALSO
  7039.     SetPointer(), ClearPointer(), ROM Kernel Manual: Libraries
  7040.  
  7041. intuition.library/SetWindowTitles           intuition.library/SetWindowTitles
  7042.  
  7043.     NAME
  7044.     SetWindowTitles -- Set the window's titles for both window and screen.
  7045.  
  7046.     SYNOPSIS
  7047.     SetWindowTitles( Window, WindowTitle, ScreenTitle )
  7048.              A0      A1           A2
  7049.  
  7050.     VOID SetWindowTitles( struct Window *, UBYTE *, UBYTE * );
  7051.  
  7052.     FUNCTION
  7053.     Allows you to set the text which appears in the Window and/or Screen
  7054.     title bars.
  7055.  
  7056.     The window title appears at all times along the window title bar.
  7057.     The window's screen title appears at the screen title bar whenever
  7058.     this window is the active one.
  7059.    
  7060.     When this routine is called, your window title will be changed 
  7061.     immediately.  If your window is the active one when this routine is 
  7062.     called, the screen title will be changed immediately.
  7063.    
  7064.     You can specify a value of -1 (i.e. (UBYTE *) ~0) for either of
  7065.     the title pointers.  This designates that you want Intuition to leave
  7066.     the current setting of that particular title alone, and modify
  7067.     only the other one.  Of course, you could set both to -1.
  7068.  
  7069.     Furthermore, you can set a value of 0 (zero) for either of the
  7070.     title pointers.  Doing so specifies that you want no title to
  7071.     appear (the title bar will be blank).
  7072.  
  7073.     Both of the titles are rendered in the default font of the window's
  7074.     screen, as set using OpenScreen().
  7075.  
  7076.     In setting the window's title, Intuition may do some other rendering
  7077.     in the top border of your window.  If your own rendering sometimes
  7078.     appears in your window border areas, you may want to restore the entire
  7079.     window border frame.  The function SetWindowTitles() does not do this
  7080.     in the newer versions.  The function RefreshWindowFrame() is provided
  7081.     to do this kind of thing for you.
  7082.  
  7083.     INPUTS
  7084.     Window = pointer to your window structure
  7085.     WindowTitle = pointer to a null-terminated text string, or set to
  7086.            either the value of -1 (negative one) or 0 (zero)
  7087.     ScreenTitle = pointer to a null-terminated text string, or set to
  7088.            either the value of -1 (negative one) or 0 (zero)
  7089.  
  7090.     RESULT
  7091.     None
  7092.  
  7093.     BUGS
  7094.  
  7095.     SEE ALSO
  7096.     OpenWindow(), RefreshWindowFrame(), OpenScreen()
  7097. intuition.library/ShowTitle                       intuition.library/ShowTitle
  7098.  
  7099.     NAME
  7100.     ShowTitle -- Set the screen title bar display mode.
  7101.  
  7102.     SYNOPSIS
  7103.     ShowTitle( Screen, ShowIt )
  7104.            A0      D0
  7105.  
  7106.     VOID ShowTitle( struct Screen *, BOOL );
  7107.  
  7108.     FUNCTION
  7109.     This routine sets the SHOWTITLE flag of the specified screen, and
  7110.     then coordinates the redisplay of the screen and its windows.
  7111.     
  7112.     The screen title bar can appear either in front of or behind
  7113.     WFLG_BACKDROP windows.  This is contrasted with the fact that
  7114.     non-WFLG_BACKDROP windows always appear in front of the screen title
  7115.     bar.  You specify whether you want the screen title bar to be in front
  7116.     of or behind the screen's WFLG_BACKDROP windows by calling this
  7117.     routine.
  7118.  
  7119.     The ShowIt argument should be set to either TRUE or FALSE.  If TRUE,
  7120.        the screen's title bar will be shown in front of WFLG_BACKDROP windows
  7121. .
  7122.        If FALSE, the title bar will be rendered behind all windows.
  7123.  
  7124.        When a screen is first opened, the default setting of the SHOWTITLE
  7125.        flag is TRUE.
  7126.  
  7127.     INPUTS
  7128.        Screen = pointer to a Screen structure
  7129.        ShowIt = Boolean TRUE or FALSE describing whether to show or hide the
  7130.            screen title bar
  7131.  
  7132.     RESULT
  7133.        None
  7134.  
  7135.     BUGS
  7136.  
  7137.     SEE ALSO
  7138.  
  7139. intuition.library/SizeWindow                     intuition.library/SizeWindow
  7140.  
  7141.     NAME
  7142.     SizeWindow -- Ask Intuition to size a window.
  7143.  
  7144.     SYNOPSIS
  7145.     SizeWindow( Window, DeltaX, DeltaY )
  7146.             A0      D0      D1
  7147.  
  7148.     VOID SizeWindow( struct Window *, WORD, WORD );
  7149.  
  7150.     FUNCTION
  7151.     This routine sends a request to Intuition asking to size the window 
  7152.     the specified amounts.  The delta arguments describe how much to 
  7153.     size the window along the respective axes.  
  7154.  
  7155.     Note that the window will not be sized immediately, but rather 
  7156.     will be sized the next time Intuition receives an input event, 
  7157.     which happens currently at a minimum rate of ten times per second,
  7158.     and a maximum of sixty times a second.  You can discover when 
  7159.     you window has finally been sized by setting the IDCMP_NEWSIZE flag
  7160.     of the IDCMP of your window.  See the "Input and Output Methods"
  7161.     chapter of The Intuition Reference Manual for description of the IDCMP.
  7162.  
  7163.     New for V36: Intuition now will do validity checking on the final
  7164.     dimensions.  To change to new absolute dimensions, or to move and
  7165.     size a window in one step, use ChangeWindowBox().
  7166.  
  7167.     However, limit checking against window MinWidth, MinHeight,
  7168.     MaxWidth, and MaxHeight was not done prior to V36, and
  7169.     these fields are still ignored (as documented) if you have
  7170.     no sizing gadget (WFLG_SIZEGADGET is not set).  The *are*
  7171.     respected now (V36) if WFLG_SIZEGADGET is set.
  7172.  
  7173.     New for V36: you can determine when the change in size has
  7174.     taken effect by receiving the IDCMP_CHANGEWINDOW IDCMP message.
  7175.  
  7176.     INPUTS
  7177.     Window = pointer to the structure of the window to be sized
  7178.     DeltaX = signed value describing how much to size the window
  7179.      on the x-axis
  7180.     DeltaY = signed value describing how much to size the window
  7181.      on the y-axis
  7182.  
  7183.     RESULT
  7184.     None
  7185.  
  7186.     BUGS
  7187.  
  7188.     SEE ALSO
  7189.     ChangeWindowBox(), MoveWindow(), WindowToFront(), WindowToBack()
  7190. intuition.library/SysReqHandler               intuition.library/SysReqHandler
  7191.  
  7192.     NAME
  7193.     SysReqHandler -- Handle system requester input. (V36)
  7194.  
  7195.     SYNOPSIS
  7196.     num = SysReqHandler( Window, IDCMPFlagsPtr, WaitInput )
  7197.     D0                   A0      A1             D0
  7198.  
  7199.     LONG SysReqHandler( struct Window *, ULONG *, BOOL );
  7200.  
  7201.     FUNCTION
  7202.     Handles input for a window returned by either BuildSysRequest()
  7203.     or BuildEasyRequest().  These functions with SysReqHandler()
  7204.     you can perform an "asynchronous" EasyRequest() or AutoRequest().
  7205.     That is to say, you can perform other processing while you
  7206.     wait for the requester to be satisfied.
  7207.  
  7208.     Each time this function is called, it will process all
  7209.     IDCMPMessages that the window has received.  If the parameter
  7210.     'WaitInput' is non-zero, SysReqHandler() will wait for input
  7211.     (by calling WaitPort()) if there are no IDCMP messages.
  7212.  
  7213.     SysReqHandler() returns the same values as EasyRequest(): A gadget
  7214.     ID greater than equal to 0, and  -1 if one of the other IDCMP
  7215.     events were received.
  7216.  
  7217.     An additional value of -2 is returned if the input processed
  7218.     does not satisfy the requester.  In this case, you might
  7219.     perform some processing and call SysReqHandler() again.
  7220.  
  7221.     Note: this function does NOT terminate the system request.
  7222.     Not only must you call FreeSysRequest() to eliminate the request,
  7223.     but you may also continue processing after an event which would
  7224.     normally terminate a normal call to EasyRequest().
  7225.  
  7226.     EXAMPLE
  7227.     Implementation of EasyRequest() input loop:
  7228.  
  7229.     window = BuildEasyRequest( ... )
  7230.     while ( (retval = SysReqHandler( window, idcmp_ptr, TRUE )) == -2 )
  7231.     {
  7232.         /* loop    */;
  7233.     }
  7234.     FreeSysRequest( window );
  7235.  
  7236.     EXAMPLE
  7237.     Request a volume, but don't remove the requester when the
  7238.     user inserts the wrong disk:
  7239.  
  7240.     struct EasyStruct volumeES = {
  7241.         sizeof (struct EasyStruct),
  7242.         0,
  7243.         "Volume Request",
  7244.         "Please insert volume %s in any drive.",
  7245.         "Cancel"
  7246.     };
  7247.  
  7248.     Volume *
  7249.     getVolume( volname )
  7250.     UBYTE    *volname;
  7251.     {
  7252.         struct Window    *window;
  7253.         Volume        *volume = NULL;
  7254.         Volume        *findVolume();
  7255.         int            retval;
  7256.  
  7257.         window = BuildEasyRequest( NULL, &volumeES, IDCMP_DISKINSERTED,
  7258.                   volname );
  7259.  
  7260.         while ( (retval = SysReqHandler( window, NULL, TRUE )) != 0 )
  7261.         {
  7262.             /* not cancelled yet    */
  7263.  
  7264.             /* when IDCMP_DISKINSERTED, check for volume */
  7265.             if (( retval == -1 ) && (volume = findVolume( volname )))
  7266.             break;
  7267.         }
  7268.         FreeSysRequest( window );
  7269.         return ( volume );
  7270.     }
  7271.  
  7272.     INPUTS
  7273.     Window = Window pointer returned from BuildSysRequest() or
  7274.         BuildEasyRequest().  Those functions can also return
  7275.         values '0' or '1', and these values may also be
  7276.         passed to SysReqHandler(), which will immediately
  7277.         return the same value.
  7278.  
  7279.     IDCMPFlagsPtr = If you passed application specific IDCMP
  7280.         flags to BuildSysRequest() or BuildEasyRequest(),
  7281.         SysReqHandler() will return -1 if that IDCMP message
  7282.         is received.  If IDCMPFlagsPtr is non-null, it
  7283.         points to a ULONG where the IDCMP class received
  7284.         will be copied for your examination.
  7285.  
  7286.         This pointer can be NULL if you have provided no
  7287.         application specific IDCMP flags or if you do
  7288.         not need to know which application specific IDCMP 
  7289.         event occurred.
  7290.  
  7291.         If you provide more than on flag in the flags variable
  7292.         this pointer points to, you will have to refresh
  7293.         the variable whenever -1 is returned, since the
  7294.         variable will have been changed to show just the
  7295.         single IDCMP Class bit that caused the return.
  7296.  
  7297.     WaitInput = Specifies that you want SysReqHandler() to
  7298.             to wait for IDCMP input if there is none pending.
  7299.  
  7300.     RESULT
  7301.     0, 1, ..., N = Successive GadgetID values, for the gadgets
  7302.         you specify for the requester.  NOTE: The numbering
  7303.         from left to right is actually: 1, 2, ..., N, 0.
  7304.         This is for compatibility with AutoRequests which has
  7305.         FALSE for the rightmost gadget.
  7306.         
  7307.     -1 = Means that one of the caller-supplied IDCMPFlags occurred.
  7308.         The IDCMPFlag value is in the longword pointed to by UDCMP_ptr.
  7309.  
  7310.     -2 = input processed did not satisfy the requester. One example
  7311.         is a keystroke that does not satisfy the requester.  Another
  7312.         example is if there is no input pending and you specified
  7313.         FALSE for WaitInput.
  7314.  
  7315.     BUGS
  7316.  
  7317.     SEE ALSO
  7318.     exec.library/WaitPort()
  7319. intuition.library/TimedDisplayAlert       intuition.library/TimedDisplayAlert
  7320.  
  7321.     NAME
  7322.     TimedDisplayAlert -- Display an alert with automatic time-out. (V39)
  7323.  
  7324.     SYNOPSIS
  7325.     Response = TimedDisplayAlert( AlertNumber, String, Height, Time )
  7326.     D0                            D0           A0      D1      A1
  7327.  
  7328.     BOOL TimedDisplayAlert( ULONG, UBYTE *, UWORD, ULONG );
  7329.  
  7330.     FUNCTION
  7331.     This function is equivalent to DisplayAlert(), except that if
  7332.     the user fails to respond in a given time, the alert comes
  7333.     down automatically.  See the autodoc for DisplayAlert() for
  7334.     full details.
  7335.  
  7336.     INPUTS
  7337.     AlertNumber = the number of this alert message.  The only pertinent
  7338.         bits of this number are the ALERT_TYPE bit(s).  The rest of the
  7339.            number is ignored by this routine.
  7340.     String = pointer to the alert message string, as described above
  7341.     Height = minimum display lines required for your message
  7342.     Time = length of time the alert should wait for the user to
  7343.         respond.  This time is the number of video frames the
  7344.         alert should remain up for.
  7345.  
  7346.     RESULT
  7347.     A BOOL value of TRUE or FALSE.  If this is a DEADEND_ALERT, FALSE
  7348.     is always the return value.  If this is a RECOVERY_ALERT. The return
  7349.     value will be TRUE if the user presses the left mouse button in 
  7350.     response to your message, and FALSE if the user presses the right hand 
  7351.     button is response to your text, or if the alert could not
  7352.     be posted.  If the alert times out, the return value will be FALSE.
  7353.  
  7354.     BUGS
  7355.  
  7356.     SEE ALSO
  7357.     DisplayAlert()    
  7358.     
  7359. intuition.library/UnlockIBase                   intuition.library/UnlockIBase
  7360.  
  7361.     NAME
  7362.     UnlockIBase -- Surrender an Intuition lock gotten by LockIBase().
  7363.  
  7364.     SYNOPSIS
  7365.     UnlockIBase( Lock )
  7366.              A0
  7367.  
  7368.     VOID UnlockIBase( ULONG );
  7369.  
  7370.     FUNCTION
  7371.     
  7372.     Surrenders lock gotten by LockIBase().
  7373.  
  7374.     Calling this function when you do not own the specified lock will
  7375.     immediately crash the system.
  7376.  
  7377.     INPUTS
  7378.     The value returned by LockIBase() should be passed to this function,
  7379.     to specify which internal lock is to be freed.
  7380.  
  7381.     Note that the parameter is passed in A0, not D0, for historical reasons.
  7382.  
  7383.     RESULT
  7384.     None
  7385.  
  7386.     BUGS
  7387.  
  7388.     SEE ALSO
  7389.     LockIBase()
  7390. intuition.library/UnlockPubScreen           intuition.library/UnlockPubScreen
  7391.  
  7392.     NAME
  7393.     UnlockPubScreen -- Release lock on a public screen. (V36)
  7394.  
  7395.     SYNOPSIS
  7396.     UnlockPubScreen( Name, [Screen] )
  7397.              A0    A1
  7398.  
  7399.     VOID UnlockPubScreen( UBYTE *, struct Screen * );
  7400.  
  7401.     FUNCTION
  7402.     Releases lock gotten by LockPubScreen().
  7403.     It is best to identify the locked public screen by
  7404.     the pointer returned from LockPubScreen().  To do this,
  7405.     supply a NULL 'Name' pointer and the screen pointer.
  7406.  
  7407.     In rare circumstances where it would be more convenient to pass
  7408.     a non-NULL pointer to the public screen name string, the
  7409.     'Screen' parameter is ignored.
  7410.  
  7411.     INPUTS
  7412.     Name = pointer to name of public screen.  If Name is NULL,
  7413.         then argument 'Screen' is used as a direct pointer to
  7414.         a public screen.
  7415.     Screen = pointer to a public screen.  Used only if Name
  7416.         is NULL.  This pointer MUST have been returned
  7417.         by LockPubScreen().
  7418.         It is safe to call UnlockPubScreen() with NULL Name
  7419.         and Screen (the function will have no effect).
  7420.  
  7421.     RESULT
  7422.  
  7423.     BUGS
  7424.  
  7425.     SEE ALSO
  7426.     LockPubScreen()
  7427. intuition.library/UnlockPubScreenList   intuition.library/UnlockPubScreenList
  7428.  
  7429.     NAME
  7430.     UnlockPubScreenList -- Release public screen list semaphore. (V36)
  7431.  
  7432.     SYNOPSIS
  7433.     UnlockPubScreenList()
  7434.  
  7435.     VOID UnlockPubScreenList( VOID );
  7436.  
  7437.     FUNCTION
  7438.     Releases lock gotten by LockPubScreenList().
  7439.  
  7440.     INPUTS
  7441.     None.
  7442.  
  7443.     RESULT
  7444.     None.
  7445.  
  7446.     BUGS
  7447.  
  7448.     SEE ALSO
  7449.     LockPubScreenList()
  7450. intuition.library/ViewAddress                   intuition.library/ViewAddress
  7451.  
  7452.     NAME
  7453.     ViewAddress -- Return the address of the Intuition View structure.
  7454.  
  7455.     SYNOPSIS
  7456.     view = ViewAddress()
  7457.     D0
  7458.  
  7459.     struct View *ViewAddress( VOID );
  7460.  
  7461.     FUNCTION
  7462.     Returns the address of the Intuition View structure.  If you 
  7463.     want to use any of the graphics, text, or animation primitives 
  7464.     in your window and that primitive requires a pointer to a view,
  7465.     this routine will return the address of the view for you.
  7466.  
  7467.     INPUTS
  7468.     None
  7469.  
  7470.     RESULT
  7471.     Returns the address of the Intuition View structure
  7472.    
  7473.     BUGS
  7474.  
  7475.     SEE ALSO
  7476.     graphics.library
  7477. intuition.library/ViewPortAddress           intuition.library/ViewPortAddress
  7478.  
  7479.     NAME
  7480.     ViewPortAddress -- Return the address of a window's viewport.
  7481.  
  7482.     SYNOPSIS
  7483.     ViewPort = ViewPortAddress( Window )
  7484.     D0                          A0
  7485.  
  7486.     struct ViewPort *ViewPortAddress( struct Window * );
  7487.  
  7488.     FUNCTION
  7489.     Returns the address of the viewport associated with the specified
  7490.     window.  The viewport is actually the viewport of the screen within
  7491.     which the window is displayed.  If you want to use any of the graphics,
  7492.     text, or animation primitives in your window and that primitive
  7493.     requires a pointer to a viewport, you can use this call.
  7494.  
  7495.     This pointer is only valid as long as your window's screen remains
  7496.     open, which is ensured by keeping your window open.
  7497.  
  7498.     INPUTS
  7499.     Window = pointer to the window for which you want the viewport address
  7500.  
  7501.     RESULT
  7502.     Returns the address of the Intuition ViewPort structure for
  7503.     your window's screen .
  7504.    
  7505.     BUGS
  7506.     This routine is unnecessary: you can just use the expression
  7507.     &Window->WScreen->ViewPort.
  7508.  
  7509.     SEE ALSO
  7510.     graphics.library
  7511. intuition.library/WBenchToBack                 intuition.library/WBenchToBack
  7512.  
  7513.     NAME 
  7514.     WBenchToBack -- Send the Workbench screen in back of all screens.
  7515.  
  7516.     SYNOPSIS 
  7517.     Success = WBenchToBack()
  7518.     D0
  7519.     
  7520.     BOOL WBenchToBack( VOID );
  7521.  
  7522.     FUNCTION 
  7523.     Causes the Workbench screen, if it's currently opened, to go behind
  7524.     all other screens.  This does not 'move' the screen up or down,
  7525.     instead only affects the depth-arrangement of the screens. 
  7526.  
  7527.     INPUTS 
  7528.     None 
  7529.  
  7530.     RESULT 
  7531.     If the Workbench screen was opened, this function returns TRUE,
  7532.     otherwise it returns FALSE. 
  7533.  
  7534.     BUGS 
  7535.  
  7536.     SEE ALSO 
  7537.     WBenchToFront(), ScreenToFront()
  7538. intuition.library/WBenchToFront               intuition.library/WBenchToFront
  7539.  
  7540.     NAME 
  7541.     WBenchToFront -- Bring the Workbench screen in front of all screens.
  7542.  
  7543.     SYNOPSIS 
  7544.     Success = WBenchToFront() 
  7545.     D0
  7546.  
  7547.     BOOL WBenchToFront( VOID );
  7548.  
  7549.     FUNCTION 
  7550.     Causes the Workbench Screen, if it's currently opened, to come to 
  7551.     the foreground.  This does not 'move' the screen up or down, instead 
  7552.     only affects the depth-arrangement of the screen. 
  7553.  
  7554.     INPUTS 
  7555.     None 
  7556.  
  7557.     RESULT 
  7558.     If the Workbench screen was opened, this function returns TRUE,
  7559.     otherwise it returns FALSE. 
  7560.  
  7561.     BUGS 
  7562.  
  7563.     SEE ALSO 
  7564.     WBenchToBack(), ScreenToBack()
  7565. intuition.library/WindowLimits                 intuition.library/WindowLimits
  7566.  
  7567.     NAME
  7568.     WindowLimits -- Set the minimum and maximum limits of a window.
  7569.  
  7570.     SYNOPSIS
  7571.     Success = WindowLimits( Window, MinWidth, MinHeight, MaxWidth,
  7572.     D0                A0      D0        D1         D2
  7573.                             MaxHeight )
  7574.                             D3
  7575.  
  7576.     BOOL WindowLimits( struct Window *, WORD, WORD, UWORD, UWORD );
  7577.  
  7578.     FUNCTION
  7579.     Sets the minimum and maximum limits of the window's size.  Until this
  7580.     routine is called, the window's size limits are equal to the initial
  7581.     values established in the OpenWindow() function.
  7582.  
  7583.     After a call to this routine, the Window will be able to be sized
  7584.     to any dimensions within the specified limits.
  7585.     
  7586.     If you don't want to change any one of the dimensions, set the limit
  7587.     argument for that dimension to zero.  If any of the limit arguments 
  7588.     is equal to zero, that argument is ignored and the initial setting
  7589.     of that parameter remains undisturbed.
  7590.    
  7591.     If any of the arguments is out of range (minimums greater than the
  7592.     current size, maximums less than the current size), that limit
  7593.     will be ignored, though the others will still take effect if they
  7594.     are in range.  If any are out of range, the return value from this
  7595.     procedure will be FALSE.  If all arguments are valid, the return
  7596.     value will be TRUE.
  7597.  
  7598.     If you want your window to be able to become "as large as possible"
  7599.     you may put -1 (i.e. ~0) in either or both Max arguments.  But
  7600.     please note: screen sizes may vary for several reasons, and you
  7601.     must be able to handle any possible size of window you might end
  7602.     up with if you use this method.  Note that you can use the function
  7603.     LockPubScreen() to find out how big the screen your window will
  7604.     appear in is.  You may also refer to the WScreen field in your
  7605.     window structure, providing that your window remains open,
  7606.     which will ensure that the screen remains open, and thus the
  7607.     pointer remains valid.
  7608.  
  7609.     If the user is currently sizing this window, the new limits will
  7610.     not take effect until after the sizing is completed.
  7611.  
  7612.     INPUTS
  7613.     Window = pointer to a Window structure
  7614.     MinWidth, MinHeight, MaxWidth, MaxHeight = the new limits for the size
  7615.             of this window.  If any of these is set to zero, it will
  7616.             be ignored and that setting will be unchanged.
  7617.  
  7618.     RESULT
  7619.     Returns TRUE if everything was in order.  If any of the parameters was
  7620.     out of range (minimums greater than current size, maximums less than
  7621.     current size), FALSE is returned and the errant limit request is
  7622.     not fulfilled (though the valid ones will be).
  7623.  
  7624.     BUGS
  7625.  
  7626.     SEE ALSO
  7627.     LockPubScreen()
  7628. intuition.library/WindowToBack                 intuition.library/WindowToBack
  7629.  
  7630.     NAME
  7631.     WindowToBack -- Ask Intuition to send a window behind others.
  7632.  
  7633.     SYNOPSIS
  7634.     WindowToBack( Window )
  7635.               A0
  7636.  
  7637.     VOID WindowToBack( struct Window * );
  7638.  
  7639.     FUNCTION
  7640.     This routine sends a request to Intuition asking to send the window 
  7641.     in back of all other windows in the screen.
  7642.  
  7643.     Note that the window will not be depth-arranged immediately, but rather 
  7644.     will be arranged the next time Intuition receives an input event, 
  7645.     which happens currently at a minimum rate of ten times per second,
  7646.     and a maximum of sixty times a second.  
  7647.  
  7648.     Remember that WFLG_BACKDROP windows cannot be depth-arranged.
  7649.  
  7650.     INPUTS
  7651.     Window = pointer to the structure of the window to be sent to the back
  7652.  
  7653.     RESULT
  7654.     None
  7655.  
  7656.     BUGS
  7657.  
  7658.     SEE ALSO
  7659.     MoveWindow(), SizeWindow(), WindowToFront(), MoveWindowInFrontOf()
  7660. intuition.library/WindowToFront               intuition.library/WindowToFront
  7661.  
  7662.     NAME
  7663.     WindowToFront -- Ask Intuition to bring a window to the front.
  7664.  
  7665.     SYNOPSIS
  7666.     WindowToFront( Window )
  7667.                    A0
  7668.  
  7669.     VOID WindowToFront( struct Window * );
  7670.  
  7671.     FUNCTION
  7672.     This routine sends a request to Intuition asking to bring the window 
  7673.     in front of all other windows in the screen.
  7674.  
  7675.     Note that the window will not be depth-arranged immediately, but rather 
  7676.     will be arranged the next time Intuition receives an input event, 
  7677.     which happens currently at a minimum rate of ten times per second,
  7678.     and a maximum of sixty times a second.  
  7679.  
  7680.     Remember that WFLG_BACKDROP windows cannot be depth-arranged.
  7681.  
  7682.     INPUTS
  7683.     Window = pointer to the structure of the window to be brought to front
  7684.  
  7685.     RESULT
  7686.     None
  7687.  
  7688.     BUGS
  7689.  
  7690.     SEE ALSO
  7691.     MoveWindow(), SizeWindow(), WindowToBack(), MoveWindowInFrontOf()
  7692. intuition.library/ZipWindow                       intuition.library/ZipWindow
  7693.  
  7694.     NAME
  7695.     ZipWindow -- Change window to "alternate" position and
  7696.                  dimensions. (V36)
  7697.  
  7698.     SYNOPSIS
  7699.     ZipWindow( Window )
  7700.            A0
  7701.  
  7702.     VOID ZipWindow( struct Window * );
  7703.  
  7704.     FUNCTION
  7705.     Changes the position and dimension of a window to the values
  7706.     at the last occasion of ZipWindow being called (or invoked
  7707.     via the "zoom" gadget).
  7708.  
  7709.     Typically this is used to snap between a normal, large, working
  7710.     dimension of the window to a smaller, more innocuous position
  7711.     and dimension.
  7712.  
  7713.     Like MoveWindow(), SizeWindow(), and ChangeWindowBox(), the action of
  7714.     this function is deferred to the Intuition input handler.
  7715.  
  7716.     More tuning needs to be done to establish initial values for
  7717.     the first invocation of this function for a window.  You can
  7718.     provide initial values using the OpenWindow() tag item
  7719.     WA_Zoom.
  7720.  
  7721.     It could also use a new name, but "ZoomWindow" is misleading,
  7722.     since "Zoom" normally implies "scale."
  7723.  
  7724.     The zoom gadget will appear (in the place of the old "toback"
  7725.     gadget) when you open your window if you either specify a
  7726.     sizing gadget or use WA_Zoom.
  7727.  
  7728.     You can detect that this function has taken effect by receiving
  7729.     an IDCMP_CHANGEWINDOW IDCMP message.
  7730.  
  7731.     INPUTS
  7732.     Window -- window to be changed.
  7733.  
  7734.     RESULT
  7735.     None
  7736.  
  7737.     BUGS
  7738.     OpenWindow() assumes that the proper default "other" dimensions
  7739.     are "full size."
  7740.  
  7741.     SEE ALSO
  7742.     ChangeWindowBox(), MoveWindow(), SizeWindow()
  7743.