home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 502b.lha / PCQ_v1.2 / Include / Intuition / Intuition.i next >
Text File  |  1991-05-07  |  45KB  |  1,362 lines

  1. {
  2.     Intuition.i for PCQ Pascal
  3.  
  4.     main intuition include file
  5. }
  6.  
  7. {$I "Include:Graphics/Gfx.i"}
  8. {$I "Include:Graphics/Clip.i"}
  9. {$I "Include:Graphics/View.i"}
  10. {$I "Include:Graphics/RastPort.i"}
  11. {$I "Include:Graphics/Layers.i"}
  12. {$I "Include:Graphics/Text.i"}
  13. {$I "Include:Exec/Ports.i"}
  14. {$I "Include:Devices/Timer.i"}
  15. {$I "Include:Devices/InputEvent.i"}
  16.  
  17. { Intuition/Screens and Intuition/Preferences are included later on
  18.   in this file }
  19.  
  20. Type
  21.  
  22. { ======================================================================== }
  23. { === IntuiText ========================================================== }
  24. { ======================================================================== }
  25. { IntuiText is a series of strings that start with a screen location
  26.  *  (always relative to the upper-left corner of something) and then the
  27.  *  text of the string.     The text is null-terminated.
  28.  }
  29.  
  30.     IntuiText = record
  31.     FrontPen,
  32.     BackPen        : Byte;        { the pen numbers for the rendering }
  33.     DrawMode    : Byte;        { the mode for rendering the text }
  34.     LeftEdge    : Short;    { relative start location for the text }
  35.     TopEdge        : Short;    { relative start location for the text }
  36.     ITextFont    : TextAttrPtr;    { if NULL, you accept the default }
  37.     IText        : String;    { pointer to null-terminated text }
  38.     NextText    : ^IntuiText;    { continuation to TxWrite another text }
  39.     end;
  40.     IntuiTextPtr = ^IntuiText;
  41.  
  42.  
  43.  
  44. { ======================================================================== }
  45. { === Border ============================================================= }
  46. { ======================================================================== }
  47. { Data type Border, used for drawing a series of lines which is intended for
  48.  *  use as a border drawing, but which may, in fact, be used to render any
  49.  *  arbitrary vector shape.
  50.  *  The routine DrawBorder sets up the RastPort with the appropriate
  51.  *  variables, then does a Move to the first coordinate, then does Draws
  52.  *  to the subsequent coordinates.
  53.  *  After all the Draws are done, if NextBorder is non-zero we call DrawBorder
  54.  *  recursively
  55.  }
  56.  
  57.     Border = record
  58.     LeftEdge,
  59.     TopEdge        : Short;    { initial offsets from the origin }
  60.     FrontPen,
  61.     BackPen        : Byte;        { pens numbers for rendering }
  62.     DrawMode    : Byte;        { mode for rendering }
  63.     Count        : Byte;        { number of XY pairs }
  64.     XY        : Address;    { vector coordinate pairs rel to LeftTop}
  65.     NextBorder    : ^Border;    { pointer to any other Border too }
  66.     end;
  67.     BorderPtr = ^Border;
  68.  
  69.  
  70.  
  71.  
  72.  
  73. { ======================================================================== }
  74. { === Image ============================================================== }
  75. { ======================================================================== }
  76. { This is a brief image structure for very simple transfers of 
  77.  * image data to a RastPort
  78.  }
  79.  
  80. Type
  81.  
  82.     Image = record
  83.     LeftEdge    : Short;    { starting offset relative to some origin }
  84.     TopEdge        : Short;    { starting offsets relative to some origin }
  85.     Width        : Short;    { pixel size (though data is word-aligned) }
  86.     Height,
  87.     Depth        : Short;    { pixel sizes }
  88.     ImageData    : Address;    { pointer to the actual word-aligned bits }
  89.  
  90.     { the PlanePick and PlaneOnOff variables work much the same way as the
  91.      * equivalent GELS Bob variables.  It's a space-saving 
  92.      * mechanism for image data.  Rather than defining the image data
  93.      * for every plane of the RastPort, you need define data only 
  94.      * for the planes that are not entirely zero or one.  As you 
  95.      * define your Imagery, you will often find that most of the planes 
  96.      * ARE just as color selectors.  For instance, if you're designing 
  97.      * a two-color Gadget to use colors two and three, and the Gadget 
  98.      * will reside in a five-plane display, bit plane zero of your 
  99.      * imagery would be all ones, bit plane one would have data that 
  100.      * describes the imagery, and bit planes two through four would be 
  101.      * all zeroes.  Using these flags allows you to avoid wasting all 
  102.      * that memory in this way:     first, you specify which planes you 
  103.      * want your data to appear in using the PlanePick variable.  For 
  104.      * each bit set in the variable, the next "plane" of your image 
  105.      * data is blitted to the display.    For each bit clear in this 
  106.      * variable, the corresponding bit in PlaneOnOff is examined.  
  107.      * If that bit is clear, a "plane" of zeroes will be used.    
  108.      * If the bit is set, ones will go out instead.  So, for our example:
  109.      *     Gadget.PlanePick = 0x02;
  110.      *     Gadget.PlaneOnOff = 0x01;
  111.      * Note that this also allows for generic Gadgets, like the 
  112.      * System Gadgets, which will work in any number of bit planes.  
  113.      * Note also that if you want an Image that is only a filled 
  114.      * rectangle, you can get this by setting PlanePick to zero 
  115.      * (pick no planes of data) and set PlaneOnOff to describe the pen 
  116.      * color of the rectangle.    
  117.      }
  118.  
  119.     PlanePick,
  120.     PlaneOnOff    : Byte;
  121.  
  122.     { if the NextImage variable is not NULL, Intuition presumes that 
  123.      * it points to another Image structure with another Image to be 
  124.      * rendered
  125.      }
  126.  
  127.     NextImage    : ^Image;
  128.     end;
  129.     ImagePtr = ^Image;
  130.  
  131.  
  132.  
  133. { ======================================================================== }
  134. { === MenuItem =========================================================== }
  135. { ======================================================================== }
  136.  
  137. Type
  138.  
  139.     MenuItem = record
  140.     NextItem    : ^MenuItem;    { pointer to next in chained list } 
  141.     LeftEdge,
  142.     TopEdge        : Short;    { position of the select box } 
  143.     Width,
  144.     Height        : Short;    { dimensions of the select box } 
  145.     Flags        : Short;    { see the defines below } 
  146.  
  147.     MutualExclude    : Integer;    { set bits mean this item excludes that } 
  148.  
  149.     ItemFill    : Address;    { points to Image, IntuiText, or NULL } 
  150.  
  151.     { when this item is pointed to by the cursor and the items highlight 
  152.      *    mode HIGHIMAGE is selected, this alternate image will be displayed 
  153.      }
  154.  
  155.     SelectFill    : Address;    { points to Image, IntuiText, or NULL }
  156.  
  157.     Command        : Char;        { only if appliprog sets the COMMSEQ flag }
  158.  
  159.     SubItem        : ^MenuItem;    { if non-zero, DrawMenu shows "->" }
  160.  
  161.     { The NextSelect field represents the menu number of next selected 
  162.      *    item (when user has drag-selected several items)
  163.      }
  164.  
  165.     NextSelect    : Short;
  166.     end;
  167.     MenuItemPtr = ^MenuItem;
  168.  
  169. Const
  170.  
  171. { FLAGS SET BY THE APPLIPROG } 
  172.     CHECKIT    = $0001;    { whether to check this item if selected } 
  173.     ITEMTEXT    = $0002;    { set if textual, clear if graphical item } 
  174.     COMMSEQ    = $0004;    { set if there's an command sequence } 
  175.     MENUTOGGLE    = $0008;    { set to toggle the check of a menu item } 
  176.     ITEMENABLED    = $0010;    { set if this item is enabled } 
  177.  
  178. { these are the SPECIAL HIGHLIGHT FLAG state meanings } 
  179.     HIGHFLAGS    = $00C0;    { see definitions below for these bits } 
  180.     HIGHIMAGE    = $0000;    { use the user's "select image" } 
  181.     HIGHCOMP    = $0040;    { highlight by complementing the selectbox }
  182.     HIGHBOX    = $0080;    { highlight by "boxing" the selectbox } 
  183.     HIGHNONE    = $00C0;    { don't highlight } 
  184.  
  185. { FLAGS SET BY BOTH APPLIPROG AND INTUITION } 
  186.     CHECKED    = $0100;    { if CHECKIT, then set this when selected } 
  187.  
  188. { FLAGS SET BY INTUITION } 
  189.     ISDRAWN    = $1000;    { this item's subs are currently drawn } 
  190.     HIGHITEM    = $2000;    { this item is currently highlighted } 
  191.     MENUTOGGLED    = $4000;    { this item was already toggled } 
  192.  
  193.  
  194. Type
  195.  
  196. { ======================================================================== }
  197. { === Menu =============================================================== }
  198. { ======================================================================== }
  199.  
  200.     Menu = record
  201.     NextMenu    : ^Menu;    { same level }
  202.     LeftEdge,
  203.     TopEdge        : Short;    { position of the select box }
  204.     Width,
  205.     Height        : Short;    { dimensions of the select box }
  206.     Flags        : Short;    { see flag definitions below }
  207.     MenuName    : String;    { text for this Menu Header }
  208.     FirstItem    : MenuItemPtr;    { pointer to first in chain }
  209.  
  210.     { these mysteriously-named variables are for internal use only }
  211.  
  212.     JazzX,
  213.     JazzY,
  214.     BeatX,
  215.     BeatY        : Short;
  216.     end;
  217.     MenuPtr = ^Menu;
  218.  
  219.  
  220. Const
  221.  
  222. { FLAGS SET BY BOTH THE APPLIPROG AND INTUITION }
  223.     MENUENABLED    = $0001;    { whether or not this menu is enabled }
  224.  
  225. { FLAGS SET BY INTUITION }
  226.     MIDRAWN    = $0100;    { this menu's items are currently drawn } 
  227.  
  228.  
  229.  
  230. { ======================================================================== }
  231. { === Gadget ============================================================= }
  232. { ======================================================================== }
  233.  
  234. Type
  235.  
  236.     Gadget = record
  237.     NextGadget    : ^Gadget;    { next gadget in the list }
  238.  
  239.     LeftEdge,
  240.     TopEdge        : Short;    { "hit box" of gadget }
  241.     Width,
  242.     Height        : Short;    { "hit box" of gadget }
  243.  
  244.     Flags        : Short;    { see below for list of defines }
  245.  
  246.     Activation    : Short;    { see below for list of defines }
  247.  
  248.     GadgetType    : Short;    { see below for defines }
  249.  
  250.     { appliprog can specify that the Gadget be rendered as either as Border
  251.      * or an Image.  This variable points to which (or equals NULL if there's
  252.      * nothing to be rendered about this Gadget)
  253.      }
  254.  
  255.     GadgetRender    : Address;
  256.  
  257.     { appliprog can specify "highlighted" imagery rather than algorithmic
  258.      * this can point to either Border or Image data
  259.      }
  260.  
  261.     SelectRender    : Address;
  262.  
  263.     GadgetText    : IntuiTextPtr;    { text for this gadget }
  264.  
  265.     { by using the MutualExclude word, the appliprog can describe 
  266.      * which gadgets mutually-exclude which other ones.     The bits 
  267.      * in MutualExclude correspond to the gadgets in object containing 
  268.      * the gadget list.     If this gadget is selected and a bit is set 
  269.      * in this gadget's MutualExclude and the gadget corresponding to 
  270.      * that bit is currently selected (e.g. bit 2 set and gadget 2 
  271.      * is currently selected) that gadget must be unselected.  
  272.      * Intuition does the visual unselecting (with checkmarks) and 
  273.      * leaves it up to the program to unselect internally
  274.      }
  275.  
  276.     MutualExclude    : Integer;    { set bits mean this gadget excludes that gadget }
  277.  
  278.     { pointer to a structure of special data required by Proportional, 
  279.      * String and Integer Gadgets 
  280.      }
  281.  
  282.     SpecialInfo    : Address;
  283.  
  284.     GadgetID    : Short;    { user-definable ID field }
  285.     UserData    : Address;    { ptr to general purpose User data (ignored by In) }
  286.     end;
  287.     GadgetPtr = ^Gadget;
  288.  
  289.  
  290. Const
  291.  
  292. { --- FLAGS SET BY THE APPLIPROG ----------------------------------------- }
  293. { combinations in these bits describe the highlight technique to be used }
  294.  
  295.     GADGHIGHBITS    = $0003;
  296.     GADGHCOMP        = $0000;    { Complement the select box }
  297.     GADGHBOX        = $0001;    { Draw a box around the image }
  298.     GADGHIMAGE        = $0002;    { Blast in this alternate image }
  299.     GADGHNONE        = $0003;    { don't highlight }
  300.  
  301. { set this flag if the GadgetRender and SelectRender point to Image imagery, 
  302.  * clear if it's a Border 
  303.  }
  304.  
  305.     GADGIMAGE         = $0004;
  306.  
  307. { combinations in these next two bits specify to which corner the gadget's
  308.  *  Left & Top coordinates are relative.  If relative to Top/Left,
  309.  *  these are "normal" coordinates (everything is relative to something in
  310.  *  this universe)
  311.  }
  312.  
  313.     GRELBOTTOM        = $0008;    { set if rel to bottom, clear if rel top }
  314.     GRELRIGHT        = $0010;    { set if rel to right, clear if to left }
  315. { set the RELWIDTH bit to spec that Width is relative to width of screen }
  316.     GRELWIDTH        = $0020;
  317. { set the RELHEIGHT bit to spec that Height is rel to height of screen }
  318.     GRELHEIGHT        = $0040;
  319.  
  320. { the SELECTED flag is initialized by you and set by Intuition.  It 
  321.  * specifies whether or not this Gadget is currently selected/highlighted
  322.  }
  323.     SELECTED        = $0080;
  324.  
  325.  
  326. { the GADGDISABLED flag is initialized by you and later set by Intuition
  327.  * according to your calls to On/OffGadget().  It specifies whether or not 
  328.  * this Gadget is currently disabled from being selected
  329.  }
  330.     GADGDISABLED    = $0100;
  331.  
  332.  
  333. { --- These are the Activation flag bits --------------------------------- }
  334. { RELVERIFY is set if you want to verify that the pointer was still over
  335.  *  the gadget when the select button was released
  336.  }
  337.     RELVERIFY        = $0001;
  338.  
  339. { the flag GADGIMMEDIATE, when set, informs the caller that the gadget
  340.  *  was activated when it was activated.  this flag works in conjunction with
  341.  *  the RELVERIFY flag
  342.  }
  343.     GADGIMMEDIATE    = $0002;
  344.  
  345. { the flag ENDGADGET, when set, tells the system that this gadget, when
  346.  * selected, causes the Requester or AbsMessage to be ended.  Requesters or
  347.  *  AbsMessages that are ended are erased and unlinked from the system }
  348.  
  349.     ENDGADGET        = $0004;
  350.  
  351. { the FOLLOWMOUSE flag, when set, specifies that you want to receive
  352.  * reports on mouse movements (ie, you want the REPORTMOUSE function for
  353.  * your Window).  When the Gadget is deselected (immediately if you have
  354.  * no RELVERIFY) the previous state of the REPORTMOUSE flag is restored
  355.  * You probably want to set the GADGIMMEDIATE flag when using FOLLOWMOUSE,
  356.  * since that's the only reasonable way you have of learning why Intuition
  357.  * is suddenly sending you a stream of mouse movement events.  If you don't
  358.  * set RELVERIFY, you'll get at least one Mouse Position event.
  359.  }
  360.  
  361.     FOLLOWMOUSE        = $0008;
  362.  
  363. { if any of the BORDER flags are set in a Gadget that's included in the
  364.  * Gadget list when a Window is opened, the corresponding Border will
  365.  * be adjusted to make room for the Gadget
  366.  }
  367.  
  368.     RIGHTBORDER        = $0010;
  369.     LEFTBORDER        = $0020;
  370.     TOPBORDER        = $0040;
  371.     BOTTOMBORDER    = $0080;
  372.  
  373.     TOGGLESELECT    = $0100;    { this bit for toggle-select mode }
  374.  
  375.     STRINGCENTER    = $0200;    { should be a StringInfo flag, but it's OK }
  376.     STRINGRIGHT        = $0400;    { should be a StringInfo flag, but it's OK }
  377.  
  378.     LONGINT        = $0800;    { this String Gadget is actually LONG Int }
  379.  
  380.     ALTKEYMAP        = $1000;    { this String has an alternate keymap }
  381.  
  382.     BOOLEXTEND        = $2000;    { this Boolean Gadget has a BoolInfo    }
  383.  
  384.  
  385. { --- GADGET TYPES ------------------------------------------------------- }
  386. { These are the Gadget Type definitions for the variable GadgetType
  387.  * gadget number type MUST start from one.  NO TYPES OF ZERO ALLOWED.
  388.  * first comes the mask for Gadget flags reserved for Gadget typing
  389.  }
  390.  
  391.     GADGETTYPE        = $FC00;    { all Gadget Global Type flags (padded) }
  392.     SYSGADGET        = $8000;    { 1 = SysGadget, 0 = AppliGadget }
  393.     SCRGADGET        = $4000;    { 1 = ScreenGadget, 0 = WindowGadget }
  394.     GZZGADGET        = $2000;    { 1 = Gadget for GIMMEZEROZERO borders }
  395.     REQGADGET        = $1000;    { 1 = this is a Requester Gadget }
  396.  
  397. { system gadgets }
  398.  
  399.     SIZING        = $0010;
  400.     WDRAGGING        = $0020;
  401.     SDRAGGING        = $0030;
  402.     WUPFRONT        = $0040;
  403.     SUPFRONT        = $0050;
  404.     WDOWNBACK        = $0060;
  405.     SDOWNBACK        = $0070;
  406.     CLOSE_f        = $0080;
  407.  
  408. { application gadgets }
  409.  
  410.     BOOLGADGET        = $0001;
  411.     GADGET0002        = $0002;
  412.     PROPGADGET        = $0003;
  413.     STRGADGET        = $0004;
  414.  
  415.  
  416. Type
  417.  
  418. { ======================================================================== }
  419. { === BoolInfo======================================================= }
  420. { ======================================================================== }
  421. { This is the special data needed by an Extended Boolean Gadget
  422.  * Typically this structure will be pointed to by the Gadget field SpecialInfo
  423.  }
  424.  
  425.     BoolInfo = record
  426.     Flags    : Short;    { defined below }
  427.     Mask    : Address; { bit mask for highlighting and selecting
  428.              * mask must follow the same rules as an Image
  429.              * plane.  It's width and height are determined
  430.              * by the width and height of the gadget's 
  431.              * select box. (i.e. Gadget.Width and .Height).
  432.              }
  433.     Reserved : Integer;    { set to 0    }
  434.     end;
  435.     BoolInfoPtr = ^BoolInfo;
  436.  
  437.  
  438. Const
  439.  
  440. { set BoolInfo.Flags to this flag bit.
  441.  * in the future, additional bits might mean more stuff hanging
  442.  * off of BoolInfo.Reserved.
  443. }
  444.     BOOLMASK    = $0001;    { extension is for masked gadget }
  445.  
  446. { ======================================================================== }
  447. { === PropInfo =========================================================== }
  448. { ======================================================================== }
  449. { this is the special data required by the proportional Gadget
  450.  * typically, this data will be pointed to by the Gadget variable SpecialInfo
  451.  }
  452.  
  453. Type
  454.  
  455.     PropInfo = record
  456.     Flags    : Short;    { general purpose flag bits (see defines below) }
  457.  
  458.     { You initialize the Pot variables before the Gadget is added to 
  459.      * the system.  Then you can look here for the current settings 
  460.      * any time, even while User is playing with this Gadget.  To 
  461.      * adjust these after the Gadget is added to the System, use 
  462.      * ModifyProp();  The Pots are the actual proportional settings, 
  463.      * where a value of zero means zero and a value of MAXPOT means 
  464.      * that the Gadget is set to its maximum setting.  
  465.      }
  466.  
  467.     HorizPot    : Short; { 16-bit FixedPoint horizontal quantity percentage }
  468.     VertPot        : Short; { 16-bit FixedPoint vertical quantity percentage }
  469.  
  470.     { the 16-bit FixedPoint Body variables describe what percentage of 
  471.      * the entire body of stuff referred to by this Gadget is actually 
  472.      * shown at one time.  This is used with the AUTOKNOB routines, 
  473.      * to adjust the size of the AUTOKNOB according to how much of 
  474.      * the data can be seen.  This is also used to decide how far 
  475.      * to advance the Pots when User hits the Container of the Gadget.    
  476.      * For instance, if you were controlling the display of a 5-line 
  477.      * Window of text with this Gadget, and there was a total of 15 
  478.      * lines that could be displayed, you would set the VertBody value to 
  479.      *       (MAXBODY / (TotalLines / DisplayLines)) = MAXBODY / 3.
  480.      * Therefore, the AUTOKNOB would fill 1/3 of the container, and 
  481.      * if User hits the Cotainer outside of the knob, the pot would 
  482.      * advance 1/3 (plus or minus) If there's no body to show, or 
  483.      * the total amount of displayable info is less than the display area, 
  484.      * set the Body variables to the MAX.  To adjust these after the 
  485.      * Gadget is added to the System, use ModifyProp();     
  486.      }
  487.  
  488.     HorizBody    : Short;    { horizontal Body } 
  489.     VertBody    : Short;    { vertical Body }
  490.  
  491.     { these are the variables that Intuition sets and maintains }
  492.  
  493.     CWidth        : Short;    { Container width (with any relativity absoluted) }
  494.     CHeight        : Short;    { Container height (with any relativity absoluted) }
  495.     HPotRes,
  496.     VPotRes        : Short;    { pot increments }
  497.     LeftBorder    : Short;    { Container borders }
  498.     TopBorder    : Short;    { Container borders }
  499.     end;
  500.     PropInfoPtr = ^PropInfo;
  501.  
  502. Const
  503.  
  504. { --- FLAG BITS ---------------------------------------------------------- }
  505.     AUTOKNOB        = $0001;    { this flag sez:  gimme that old auto-knob }
  506.     FREEHORIZ        = $0002;    { if set, the knob can move horizontally }
  507.     FREEVERT        = $0004;    { if set, the knob can move vertically }
  508.     PROPBORDERLESS    = $0008;    { if set, no border will be rendered }
  509.     KNOBHIT        = $0100;    { set when this Knob is hit }
  510.  
  511.     KNOBHMIN        = 6;        { minimum horizontal size of the Knob }
  512.     KNOBVMIN        = 4;        { minimum vertical size of the Knob }
  513.     MAXBODY        = -1;        { maximum body value }
  514.     MAXPOT        = -1;        { maximum pot value }
  515.  
  516.  
  517.  
  518. { ======================================================================== }
  519. { === StringInfo ========================================================= }
  520. { ======================================================================== }
  521. { this is the special data required by the string Gadget
  522.  * typically, this data will be pointed to by the Gadget variable SpecialInfo
  523.  }
  524.  
  525. Type
  526.  
  527.     StringInfo = record
  528.     { you initialize these variables, and then Intuition maintains them }
  529.     Buffer        : String;    { the buffer containing the start and final string }
  530.     UndoBuffer    : String;    { optional buffer for undoing current entry }
  531.     BufferPos    : Short;    { character position in Buffer }
  532.     MaxChars    : Short;    { max number of chars in Buffer (including NULL) }
  533.     DispPos        : Short;    { Buffer position of first displayed character }
  534.  
  535.     { Intuition initializes and maintains these variables for you }
  536.  
  537.     UndoPos        : Short;    { character position in the undo buffer }
  538.     NumChars    : Short;    { number of characters currently in Buffer }
  539.     DispCount    : Short;    { number of whole characters visible in Container }
  540.     CLeft,
  541.     CTop        : Short;    { topleft offset of the container }
  542.     Layer        : LayerPtr;    { the RastPort containing this Gadget }
  543.  
  544.     { you can initialize this variable before the gadget is submitted to
  545.      * Intuition, and then examine it later to discover what integer 
  546.      * the user has entered (if the user never plays with the gadget, 
  547.      * the value will be unchanged from your initial setting)
  548.      }
  549.  
  550.     LongInt        : Integer;
  551.  
  552.     { If you want this Gadget to use your own Console keymapping, you
  553.      * set the ALTKEYMAP bit in the Activation flags of the Gadget, and then
  554.      * set this variable to point to your keymap.  If you don't set the
  555.      * ALTKEYMAP, you'll get the standard ASCII keymapping.
  556.      }
  557.  
  558.     AltKeyMap    : Address;
  559.     end;
  560.     StringInfoPtr = ^StringInfo;
  561.  
  562.  
  563.  
  564. { ======================================================================== }
  565. { === Requester ========================================================== }
  566. { ======================================================================== }
  567.  
  568. Type
  569.  
  570.     Requester = record
  571.     { the ClipRect and BitMap and used for rendering the requester }
  572.     OlderRequest    : ^Requester;
  573.     LeftEdge,
  574.     TopEdge        : Short;    { dimensions of the entire box }
  575.     Width,
  576.     Height        : Short;    { dimensions of the entire box }
  577.     RelLeft,
  578.     RelTop        : Short;    { for Pointer relativity offsets }
  579.  
  580.     ReqGadget    : GadgetPtr;    { pointer to a list of Gadgets }
  581.     ReqBorder    : BorderPtr;    { the box's border }
  582.     ReqText        : IntuiTextPtr;    { the box's text }
  583.     Flags        : Short;    { see definitions below }
  584.  
  585.     { pen number for back-plane fill before draws }
  586.  
  587.     BackFill    : Byte;
  588.  
  589.     { Layer in place of clip rect    }
  590.  
  591.     ReqLayer    : LayerPtr;
  592.  
  593.     ReqPad1        : Array [0..31] of Byte;
  594.  
  595.     { If the BitMap plane pointers are non-zero, this tells the system 
  596.      * that the image comes pre-drawn (if the appliprog wants to define 
  597.      * it's own box, in any shape or size it wants!);  this is OK by 
  598.      * Intuition as long as there's a good correspondence between 
  599.      * the image and the specified Gadgets
  600.      }
  601.  
  602.     ImageBMap    : BitMapPtr;    { points to the BitMap of PREDRAWN imagery }
  603.     RWindow        : Address;    { added.  points back to Window }
  604.     ReqPad2        : Array [0..35] of Byte;
  605.     end;
  606.     RequesterPtr = ^Requester;
  607.  
  608. Const
  609.  
  610. { FLAGS SET BY THE APPLIPROG }
  611.     POINTREL         = $0001;    { if POINTREL set, TopLeft is relative to pointer}
  612.     PREDRAWN         = $0002;    { if ReqBMap points to predrawn Requester imagery }
  613.     NOISYREQ         = $0004;    { if you don't want requester to filter input       }
  614. { FLAGS SET BY BOTH THE APPLIPROG AND INTUITION }
  615.  
  616. { FLAGS SET BY INTUITION }
  617.     REQOFFWINDOW    = $1000;    { part of one of the Gadgets was offwindow }
  618.     REQACTIVE        = $2000;    { this requester is active }
  619.     SYSREQUEST        = $4000;    { this requester caused by system }
  620.     DEFERREFRESH    = $8000;    { this Requester stops a Refresh broadcast }
  621.  
  622.  
  623.  
  624. { ======================================================================== }
  625. { === IntuiMessage ======================================================= }
  626. { ======================================================================== }
  627.  
  628. Type
  629.  
  630.     IntuiMessage = record
  631.     ExecMessage    : Message;
  632.  
  633.     { the Class bits correspond directly with the IDCMP Flags, except for the
  634.      * special bit LONELYMESSAGE (defined below)
  635.      }
  636.  
  637.     Class        : Integer;
  638.  
  639.     { the Code field is for special values like MENU number }
  640.  
  641.     Code        : Short;
  642.  
  643.     { the Qualifier field is a copy of the current InputEvent's Qualifier }
  644.  
  645.     Qualifier    : Short;
  646.  
  647.     { IAddress contains particular addresses for Intuition functions, like
  648.      * the pointer to the Gadget or the Screen
  649.      }
  650.  
  651.     IAddress    : Address;
  652.  
  653.     { when getting mouse movement reports, any event you get will have the
  654.      * the mouse coordinates in these variables.  the coordinates are relative
  655.      * to the upper-left corner of your Window (GIMMEZEROZERO notwithstanding)
  656.      }
  657.  
  658.     MouseX,
  659.     MouseY        : Short;
  660.  
  661.     { the time values are copies of the current system clock time.  Micros
  662.      * are in units of microseconds, Seconds in seconds.
  663.      }
  664.  
  665.     Seconds,
  666.     Micros        : Integer;
  667.  
  668.     { the IDCMPWindow variable will always have the address of the Window of 
  669.      * this IDCMP 
  670.      }
  671.  
  672.     IDCMPWindow    : Address;
  673.  
  674.     { system-use variable }
  675.  
  676.     SpecialLink    : ^IntuiMessage;
  677.     end;
  678.     IntuiMessagePtr = ^IntuiMessage;
  679.  
  680.  
  681. Const
  682.  
  683. { All the IDCMP flags in PCQ Pascal are suffixed by "_f" to
  684.   differentiate them from the Intuition routines of similar names }
  685.  
  686. { --- IDCMP Classes ------------------------------------------------------ }
  687.     SIZEVERIFY_f    = $00000001;  {    See the Programmer's Guide  }
  688.     NEWSIZE_f        = $00000002;  {    See the Programmer's Guide  }
  689.     REFRESHWINDOW_f    = $00000004;  {    See the Programmer's Guide  }
  690.     MOUSEBUTTONS_f    = $00000008;  {    See the Programmer's Guide  }
  691.     MOUSEMOVE_f        = $00000010;  {    See the Programmer's Guide  }
  692.     GADGETDOWN_f    = $00000020;  {    See the Programmer's Guide  }
  693.     GADGETUP_f        = $00000040;  {    See the Programmer's Guide  }
  694.     REQSET_f        = $00000080;  {    See the Programmer's Guide  }
  695.     MENUPICK_f        = $00000100;  {    See the Programmer's Guide  }
  696.     CLOSEWINDOW_f    = $00000200;  {    See the Programmer's Guide  }
  697.     RAWKEY_f        = $00000400;  {    See the Programmer's Guide  }
  698.     REQVERIFY_f        = $00000800;  {    See the Programmer's Guide  }
  699.     REQCLEAR_f        = $00001000;  {    See the Programmer's Guide  }
  700.     MENUVERIFY_f    = $00002000;  {    See the Programmer's Guide  }
  701.     NEWPREFS_f        = $00004000;  {    See the Programmer's Guide  }
  702.     DISKINSERTED_f    = $00008000;  {    See the Programmer's Guide  }
  703.     DISKREMOVED_f    = $00010000;  {    See the Programmer's Guide  }
  704.     WBENCHMESSAGE_f    = $00020000;  {    See the Programmer's Guide  }
  705.     ACTIVEWINDOW_f    = $00040000;  {    See the Programmer's Guide  }
  706.     INACTIVEWINDOW_f    = $00080000;  {    See the Programmer's Guide  }
  707.     DELTAMOVE_f        = $00100000;  {    See the Programmer's Guide  }
  708.     VANILLAKEY_f    = $00200000;  {    See the Programmer's Guide  }
  709.     INTUITICKS_f    = $00400000;  {    See the Programmer's Guide  }
  710.  
  711. { NOTEZ-BIEN:            0x80000000 is reserved for internal use      }
  712.  
  713. { the IDCMP Flags do not use this special bit, which is cleared when
  714.  * Intuition sends its special message to the Task, and set when Intuition
  715.  * gets its Message back from the Task.     Therefore, I can check here to
  716.  * find out fast whether or not this Message is available for me to send
  717.  }
  718.     LONELYMESSAGE_f    = $80000000;
  719.  
  720.  
  721. { --- IDCMP Codes -------------------------------------------------------- }
  722. { This group of codes is for the MENUVERIFY function }
  723.  
  724.     MENUHOT        = $0001;  { IntuiWants verification or MENUCANCEL    }
  725.     MENUCANCEL        = $0002;  { HOT Reply of this cancels Menu operation }
  726.     MENUWAITING        = $0003;  { Intuition simply wants a ReplyMsg() ASAP }
  727.  
  728. { These are internal tokens to represent state of verification attempts
  729.  * shown here as a clue.
  730.  }
  731.  
  732.     OKOK        = MENUHOT; { guy didn't care            }
  733.     OKABORT        = $0004;   { window rendered question moot    }
  734.     OKCANCEL        = MENUCANCEL; { window sent cancel reply    }
  735.  
  736. { This group of codes is for the WBENCHMESSAGE messages }
  737.     WBENCHOPEN        = $0001;
  738.     WBENCHCLOSE        = $0002;
  739.  
  740.  
  741.  
  742. { ======================================================================== }
  743. { === Window ============================================================= }
  744. { ======================================================================== }
  745.  
  746. Type
  747.  
  748.     Window = record
  749.     NextWindow    : ^Window;    { for the linked list in a screen }
  750.  
  751.     LeftEdge,
  752.     TopEdge        : Short;    { screen dimensions of window }
  753.     Width,
  754.     Height        : Short;    { screen dimensions of window }
  755.  
  756.     MouseY,
  757.     MouseX        : Short;    { relative to upper-left of window }
  758.  
  759.     MinWidth,
  760.     MinHeight    : Short;    { minimum sizes }
  761.     MaxWidth,
  762.     MaxHeight    : Short;    { maximum sizes }
  763.  
  764.     Flags        : Integer;    { see below for defines }
  765.  
  766.     MenuStrip    : MenuPtr;    { the strip of Menu headers }
  767.  
  768.     Title        : String;    { the title text for this window }
  769.  
  770.     FirstRequest    : RequesterPtr;    { all active Requesters }
  771.  
  772.     DMRequest    : RequesterPtr;    { double-click Requester }
  773.  
  774.     ReqCount    : Short;    { count of reqs blocking Window }
  775.  
  776.     WScreen        : Address;    { this Window's Screen }
  777.     RPort        : RastPortPtr;    { this Window's very own RastPort }
  778.  
  779.     { the border variables describe the window border.     If you specify
  780.      * GIMMEZEROZERO when you open the window, then the upper-left of the
  781.      * ClipRect for this window will be upper-left of the BitMap (with correct
  782.      * offsets when in SuperBitMap mode; you MUST select GIMMEZEROZERO when
  783.      * using SuperBitMap).  If you don't specify ZeroZero, then you save
  784.      * memory (no allocation of RastPort, Layer, ClipRect and associated
  785.      * Bitmaps), but you also must offset all your writes by BorderTop,
  786.      * BorderLeft and do your own mini-clipping to prevent writing over the
  787.      * system gadgets
  788.      }
  789.  
  790.     BorderLeft,
  791.     BorderTop,
  792.     BorderRight,
  793.     BorderBottom    : Byte;
  794.     BorderRPort    : RastPortPtr;
  795.  
  796.  
  797.     { You supply a linked-list of Gadgets for your Window.
  798.      * This list DOES NOT include system gadgets.  You get the standard
  799.      * window system gadgets by setting flag-bits in the variable Flags (see
  800.      * the bit definitions below)
  801.      }
  802.  
  803.     FirstGadget    : GadgetPtr;
  804.  
  805.     { these are for opening/closing the windows }
  806.  
  807.     Parent,
  808.     Descendant    : ^Window;
  809.  
  810.     { sprite data information for your own Pointer
  811.      * set these AFTER you Open the Window by calling SetPointer()
  812.      }
  813.  
  814.     Pointer        : Address;    { sprite data }
  815.     PtrHeight    : Byte;        { sprite height (not including sprite padding) }
  816.     PtrWidth    : Byte;        { sprite width (must be less than or equal to 16) }
  817.     XOffset,
  818.     YOffset        : Byte;        { sprite offsets }
  819.  
  820.     { the IDCMP Flags and User's and Intuition's Message Ports }
  821.     IDCMPFlags    : Integer;    { User-selected flags }
  822.     UserPort,
  823.     WindowPort    : MsgPortPtr;
  824.     MessageKey    : IntuiMessagePtr;
  825.  
  826.     DetailPen,
  827.     BlockPen    : Byte;    { for bar/border/gadget rendering }
  828.  
  829.     { the CheckMark is a pointer to the imagery that will be used when 
  830.      * rendering MenuItems of this Window that want to be checkmarked
  831.      * if this is equal to NULL, you'll get the default imagery
  832.      }
  833.  
  834.     CheckMark    : ImagePtr;
  835.  
  836.     ScreenTitle    : String; { if non-null, Screen title when Window is active }
  837.  
  838.     { These variables have the mouse coordinates relative to the 
  839.      * inner-Window of GIMMEZEROZERO Windows.  This is compared with the
  840.      * MouseX and MouseY variables, which contain the mouse coordinates
  841.      * relative to the upper-left corner of the Window, GIMMEZEROZERO
  842.      * notwithstanding
  843.      }
  844.  
  845.     GZZMouseX    : Short;
  846.     GZZMouseY    : Short;
  847.  
  848.     { these variables contain the width and height of the inner-Window of
  849.      * GIMMEZEROZERO Windows
  850.      }
  851.  
  852.     GZZWidth    : Short;
  853.     GZZHeight    : Short;
  854.  
  855.     ExtData        : Address;
  856.  
  857.     UserData    : Address;    { general-purpose pointer to User data extension }
  858.  
  859.     {* jimm: NEW: 11/18/85: this pointer keeps a duplicate of what 
  860.      * Window.RPort->Layer is _supposed_ to be pointing at
  861.      }
  862.  
  863.     WLayer        : LayerPtr;
  864.  
  865.     { jimm: NEW 1.2: need to keep track of the font that
  866.      * OpenWindow opened, in case user SetFont's into RastPort
  867.      }
  868.  
  869.     IFont        : TextFontPtr;
  870.     end;
  871.     WindowPtr = ^Window;
  872.  
  873. Const
  874.  
  875. { --- FLAGS REQUESTED (NOT DIRECTLY SET THOUGH) BY THE APPLIPROG --------- }
  876.     WINDOWSIZING    = $0001;    { include sizing system-gadget? }
  877.     WINDOWDRAG        = $0002;    { include dragging system-gadget? }
  878.     WINDOWDEPTH        = $0004;    { include depth arrangement gadget? }
  879.     WINDOWCLOSE        = $0008;    { include close-box system-gadget? }
  880.  
  881.     SIZEBRIGHT        = $0010;    { size gadget uses right border }
  882.     SIZEBBOTTOM        = $0020;    { size gadget uses bottom border }
  883.  
  884. { --- refresh modes ------------------------------------------------------ }
  885. { combinations of the REFRESHBITS select the refresh type }
  886.     REFRESHBITS        = $00C0;
  887.     SMART_REFRESH    = $0000;
  888.     SIMPLE_REFRESH    = $0040;
  889.     SUPER_BITMAP    = $0080;
  890.     OTHER_REFRESH    = $00C0;
  891.  
  892.     BACKDROP        = $0100;   { this is an ever-popular BACKDROP window }
  893.  
  894.     REPORTMOUSE_f    = $0200;   { set this to hear about every mouse move }
  895.  
  896.     GIMMEZEROZERO    = $0400;   { make extra border stuff }
  897.  
  898.     BORDERLESS        = $0800;   { set this to get a Window sans border }
  899.  
  900.     ACTIVATE        = $1000;   { when Window opens, it's the Active one }
  901.  
  902. { FLAGS SET BY INTUITION }
  903.     WINDOWACTIVE      = $2000;   { this window is the active one }
  904.     INREQUEST         = $4000;   { this window is in request mode }
  905.     MENUSTATE         = $8000;   { this Window is active with its Menus on }
  906.  
  907. { --- Other User Flags --------------------------------------------------- }
  908.     RMBTRAP        = $00010000;    { Catch RMB events for your own }
  909.     NOCAREREFRESH    = $00020000;    { not to be bothered with REFRESH }
  910.  
  911.  
  912. { --- Other Intuition Flags ---------------------------------------------- }
  913.     WINDOWREFRESH    = $01000000;    { Window is currently refreshing }
  914.     WBENCHWINDOW    = $02000000;    { WorkBench tool ONLY Window }
  915.     WINDOWTICKED    = $04000000;    { only one timer tick at a time }
  916.  
  917.     SUPER_UNUSED    = $FCFC0000;    { bits of Flag unused yet }
  918.  
  919.  
  920. { --- see struct IntuiMessage for the IDCMP Flag definitions ------------- }
  921.  
  922.  
  923.  
  924.  
  925. { ======================================================================== }
  926. { === NewWindow ========================================================== }
  927. { ======================================================================== }
  928.  
  929. Type
  930.  
  931.     NewWindow = record
  932.     LeftEdge,
  933.     TopEdge        : Short;    { screen dimensions of window }
  934.     Width,
  935.     Height        : Short;    { screen dimensions of window }
  936.  
  937.     DetailPen,
  938.     BlockPen    : Byte;        { for bar/border/gadget rendering }
  939.  
  940.     IDCMPFlags    : Integer;    { User-selected IDCMP flags }
  941.  
  942.     Flags        : Integer;    { see Window struct for defines }
  943.  
  944.     { You supply a linked-list of Gadgets for your Window.
  945.      *    This list DOES NOT include system Gadgets.  You get the standard
  946.      *    system Window Gadgets by setting flag-bits in the variable Flags (see
  947.      *    the bit definitions under the Window structure definition)
  948.      }
  949.  
  950.     FirstGadget    : GadgetPtr;
  951.  
  952.     { the CheckMark is a pointer to the imagery that will be used when 
  953.      * rendering MenuItems of this Window that want to be checkmarked
  954.      * if this is equal to NULL, you'll get the default imagery
  955.      }
  956.  
  957.     CheckMark    : ImagePtr;
  958.  
  959.     Title        : String;  { the title text for this window }
  960.     
  961.     { the Screen pointer is used only if you've defined a CUSTOMSCREEN and
  962.      * want this Window to open in it.    If so, you pass the address of the
  963.      * Custom Screen structure in this variable.  Otherwise, this variable
  964.      * is ignored and doesn't have to be initialized.
  965.      }
  966.  
  967.     Screen        : Address;
  968.     
  969.     { SUPER_BITMAP Window?  If so, put the address of your BitMap structure
  970.      * in this variable.  If not, this variable is ignored and doesn't have 
  971.      * to be initialized
  972.      }
  973.  
  974.     BitMap        : BitMapPtr;
  975.  
  976.     { the values describe the minimum and maximum sizes of your Windows.
  977.      * these matter only if you've chosen the WINDOWSIZING Gadget option,
  978.      * which means that you want to let the User to change the size of 
  979.      * this Window.  You describe the minimum and maximum sizes that the
  980.      * Window can grow by setting these variables.  You can initialize
  981.      * any one these to zero, which will mean that you want to duplicate
  982.      * the setting for that dimension (if MinWidth == 0, MinWidth will be
  983.      * set to the opening Width of the Window).
  984.      * You can change these settings later using SetWindowLimits().
  985.      * If you haven't asked for a SIZING Gadget, you don't have to
  986.      * initialize any of these variables.
  987.      }
  988.  
  989.     MinWidth,
  990.     MinHeight    : Short;    { minimums }
  991.     MaxWidth,
  992.     MaxHeight    : Short;    { maximums }
  993.  
  994.     { the type variable describes the Screen in which you want this Window to
  995.      * open.  The type value can either be CUSTOMSCREEN or one of the
  996.      * system standard Screen Types such as WBENCHSCREEN.  See the
  997.      * type definitions under the Screen structure
  998.      }
  999.  
  1000.     WType        : Short;    { is "Type" in C includes }
  1001.     end;
  1002.     NewWindowPtr = ^NewWindow;
  1003.  
  1004.  
  1005. {$I "Include:Intuition/Screens.i"}
  1006. {$I "Include:Intuition/Preferences.i"}
  1007.  
  1008. { ======================================================================== }
  1009. { === Remember =========================================================== }
  1010. { ======================================================================== }
  1011. { this structure is used for remembering what memory has been allocated to
  1012.  * date by a given routine, so that a premature abort or systematic exit
  1013.  * can deallocate memory cleanly, easily, and completely
  1014.  }
  1015.  
  1016. Type
  1017.  
  1018.     Remember = record
  1019.     NextRemember    : ^Remember;
  1020.     RememberSize    : Integer;
  1021.     Memory        : Address;
  1022.     end;
  1023.     RememberPtr = ^Remember;
  1024.  
  1025.  
  1026.  
  1027. { ======================================================================== }
  1028. { === Miscellaneous ====================================================== }
  1029. { ======================================================================== }
  1030.  
  1031. Const
  1032.  
  1033. { = MENU STUFF =========================================================== }
  1034.     NOMENU    = $001F;
  1035.     NOITEM    = $003F;
  1036.     NOSUB    = $001F;
  1037.     MENUNULL    = -1;
  1038.  
  1039.  
  1040. { = =RJ='s peculiarities ================================================= }
  1041.  
  1042. { these defines are for the COMMSEQ and CHECKIT menu stuff.  If CHECKIT,
  1043.  * I'll use a generic Width (for all resolutions) for the CheckMark.
  1044.  * If COMMSEQ, likewise I'll use this generic stuff
  1045.  }
  1046.  
  1047.     CHECKWIDTH        = 19;
  1048.     COMMWIDTH        = 27;
  1049.     LOWCHECKWIDTH    = 13;
  1050.     LOWCOMMWIDTH    = 16;
  1051.  
  1052.  
  1053. { these are the AlertNumber defines.  if you are calling DisplayAlert()
  1054.  * the AlertNumber you supply must have the ALERT_TYPE bits set to one
  1055.  * of these patterns
  1056.  }
  1057.  
  1058.     ALERT_TYPE        = $80000000;
  1059.     RECOVERY_ALERT    = $00000000;    { the system can recover from this }
  1060.     DEADEND_ALERT    = $80000000;    { no recovery possible, this is it }
  1061.  
  1062.  
  1063. { When you're defining IntuiText for the Positive and Negative Gadgets 
  1064.  * created by a call to AutoRequest(), these defines will get you 
  1065.  * reasonable-looking text.  The only field without a define is the IText
  1066.  * field; you decide what text goes with the Gadget
  1067.  }
  1068.  
  1069.     AUTOFRONTPEN    = 0;
  1070.     AUTOBACKPEN        = 1;
  1071.     AUTODRAWMODE    = JAM2;
  1072.     AUTOLEFTEDGE    = 6;
  1073.     AUTOTOPEDGE        = 3;
  1074.     AUTOITEXTFONT    = Nil;
  1075.     AUTONEXTTEXT    = Nil;
  1076.  
  1077.  
  1078. { --- RAWMOUSE Codes and Qualifiers (Console OR IDCMP) ------------------- }
  1079.  
  1080.     SELECTUP        = IECODE_LBUTTON + IECODE_UP_PREFIX;
  1081.     SELECTDOWN        = IECODE_LBUTTON;
  1082.     MENUUP        = IECODE_RBUTTON + IECODE_UP_PREFIX;
  1083.     MENUDOWN        = IECODE_RBUTTON;
  1084.     ALTLEFT        = IEQUALIFIER_LALT;
  1085.     ALTRIGHT        = IEQUALIFIER_RALT;
  1086.     AMIGALEFT        = IEQUALIFIER_LCOMMAND;
  1087.     AMIGARIGHT        = IEQUALIFIER_RCOMMAND;
  1088.     AMIGAKEYS        = AMIGALEFT + AMIGARIGHT;
  1089.  
  1090.     CURSORUP        = $4C;
  1091.     CURSORLEFT        = $4F;
  1092.     CURSORRIGHT        = $4E;
  1093.     CURSORDOWN        = $4D;
  1094.     KEYCODE_Q        = $10;
  1095.     KEYCODE_X        = $32;
  1096.     KEYCODE_N        = $36;
  1097.     KEYCODE_M        = $37;
  1098.     KEYCODE_V        = $34;
  1099.     KEYCODE_B        = $35;
  1100.  
  1101. Function ActivateGadget(Gadget : GadgetPtr;
  1102.             Window : WindowPtr;
  1103.             Request : RequesterPtr) : Boolean;
  1104.     External;
  1105.  
  1106. Procedure ActivateWindow(Window : WindowPtr);
  1107.     External;
  1108.  
  1109. Function AddGadget(Window : WindowPtr;
  1110.            Gadget : GadgetPtr;
  1111.            Position : Short) : Short;
  1112.     External;
  1113.  
  1114.  
  1115. Function AddGList(Window : WindowPtr; Gadget : GadgetPtr;
  1116.           Position : Short; Numgad : Short;
  1117.           Requester : RequesterPtr) : Short;
  1118.     External;
  1119.  
  1120. Function AllocRemember(RememberKey : RememberPtr;
  1121.                Size, Flags : Integer) : Address;
  1122.     External;
  1123.  
  1124. Function AutoRequest(Window : WindowPtr;
  1125.              BodyText, PositiveText, NegativeText : IntuiTextPtr;
  1126.              PositiveFlags, NegativeFlags : Integer;
  1127.              Width, Height : Short) : Boolean;
  1128.     External;
  1129.  
  1130. Procedure BeginRefresh(Window : WindowPtr);
  1131.     External;
  1132.  
  1133. Function BuildSysRequest(window : WindowPtr;
  1134.             BodyText, PositiveText,NegativeText : IntuiTextPtr;
  1135.             IDCMPFlags : Integer;
  1136.             Width, Height : Short) : WindowPtr;
  1137.     External;
  1138.  
  1139. Function ClearDMRequest(window : WindowPtr) : Boolean;
  1140.     External;
  1141.  
  1142. Procedure ClearMenuStrip(window : WindowPtr);
  1143.     External;
  1144.  
  1145. Procedure ClearPointer(window : WindowPtr);
  1146.     External;
  1147.  
  1148. Procedure CloseScreen(screen : ScreenPtr);
  1149.     External;
  1150.  
  1151. Procedure CloseWindow(window : WindowPtr);
  1152.     External;
  1153.  
  1154. Function CloseWorkbench : Boolean;
  1155.     External;
  1156.  
  1157. Procedure CurrentTime(var Seconds, Micros : Integer);
  1158.     External;
  1159.  
  1160. Function DisplayAlert(AlertNumber : Integer;
  1161.             Str : String; Height : Short) : Boolean;
  1162.     External;
  1163.  
  1164. Procedure DisplayBeep(screen : ScreenPtr);
  1165.     External;
  1166.  
  1167. Function DoubleClick(StartSecs, StartMicros,
  1168.             CurrentSecs, CurrentMicros : Integer) : Boolean;
  1169.     External;
  1170.  
  1171. Procedure DrawBorder(rastport : RastPortPtr; Border : BorderPtr;
  1172.             LeftOffset, TopOffset : Short);
  1173.     External;
  1174.  
  1175. Procedure DrawImage(rastport : RastPortPtr; Image : ImagePtr;
  1176.             LeftOffset, TopOffset : Short);
  1177.     External;
  1178.  
  1179. Procedure EndRefresh(window : WindowPtr; Complete : Boolean);
  1180.     External;
  1181.  
  1182. Procedure EndRequest(requester : RequesterPtr; Window : WindowPtr);
  1183.     External;
  1184.  
  1185. Procedure FreeRemember(var RememberKey : RememberPtr; ReallyForget : Boolean);
  1186.     External;
  1187.  
  1188. Procedure FreeSysRequest(window : WindowPtr);
  1189.     External;
  1190.  
  1191. Function GetDefPrefs(PrefBuffer : PreferencesPtr;
  1192.             Size : Short) : PreferencesPtr;
  1193.     External;
  1194.  
  1195. Function GetPrefs(PrefBuffer : PreferencesPtr; Size : Short) : PreferencesPtr;
  1196.     External;
  1197.  
  1198. Function GetScreenData(Buffer : Address; Size, SType : Short;
  1199.             Screen : ScreenPtr) : Boolean;
  1200.     External;
  1201.  
  1202. Procedure InitRequester(requester : RequesterPtr);
  1203.     External;
  1204.  
  1205. Function IntuiTextLength(IText : IntuiTextPtr) : Integer;
  1206.     External;
  1207.  
  1208. Function ItemAddress(MenuStrip : MenuPtr; MenuNumber : Short) : MenuItemPtr;
  1209.     External;
  1210.  
  1211. Function ItemNum(MenuNumber : Short) : Short;
  1212.     External;
  1213.  
  1214. Function LockIBase(LockNumber : Integer) : Integer;
  1215.     External;
  1216.  
  1217. Procedure MakeScreen(Screen : ScreenPtr);
  1218.     External;
  1219.  
  1220. Function MenuNum(MenuNumber : Short) : Short;
  1221.     External;
  1222.  
  1223. Procedure ModifyIDCMP(window : WindowPtr; IDCMPFlags : Integer);
  1224.     External;
  1225.  
  1226. Procedure ModifyProp(gadget : GadgetPtr; window : WindowPtr;
  1227.             requester : RequesterPtr; Flags : Short;
  1228.             HorizPot, VertPot, HorizBody, VertBody : Short);
  1229.     External;
  1230.  
  1231. Procedure MoveScreen(screen : ScreenPtr; DeltaX, DeltaY : Short);
  1232.     External;
  1233.  
  1234. Procedure MoveWindow(window : WindowPtr; DeltaX, DeltaY : Short);
  1235.     External;
  1236.  
  1237. Procedure NewModifyProp(gadget : GadgetPtr; window : WindowPtr;
  1238.             requester : RequesterPtr; Flags : Short;
  1239.             HorizPot, VertPot, HorizBody, VertBody : Short;
  1240.             NumGad : Integer);
  1241.     External;
  1242.  
  1243. Procedure OffGadget(gadget : GadgetPtr;
  1244.             window : WindowPtr;
  1245.             requester : RequesterPtr);
  1246.     External;
  1247.  
  1248. Procedure OffMenu(window : WindowPtr; MenuNumber : Short);
  1249.     External;
  1250.  
  1251. Procedure OnGadget(gadget : GadgetPtr;
  1252.             window : WindowPtr;
  1253.             requester : RequesterPtr);
  1254.     External;
  1255.  
  1256. Procedure OnMenu(window : WindowPtr; MenuNumber : Short);
  1257.     External;
  1258.  
  1259. Function OpenScreen(newscreen : NewScreenPtr) : ScreenPtr;
  1260.     External;
  1261.  
  1262. Function OpenWindow(newwindow : NewWindowPtr) : WindowPtr;
  1263.     External;
  1264.  
  1265. Function OpenWorkBench : ScreenPtr;
  1266.     External;
  1267.  
  1268. Procedure PrintIText(rastport : RastPortPtr; IText : IntuiTextPtr;
  1269.             LeftOffset, TopOffset : Short);
  1270.     External;
  1271.  
  1272. Procedure RefreshGadgets(gadgets : GadgetPtr;
  1273.             window : WindowPtr;
  1274.             requester : RequesterPtr);
  1275.     External;
  1276.  
  1277. Procedure RefreshGList(gadgets : GadgetPtr; window : WindowPtr;
  1278.             requester : RequesterPtr; NumGad : Short);
  1279.     External;
  1280.  
  1281. Procedure RefreshWindowFrame(window : WindowPtr);
  1282.     External;
  1283.  
  1284. Procedure RemakeDisplay;
  1285.     External;
  1286.  
  1287. Function RemoveGadget(window : WindowPtr; gadget : GadgetPtr) : Short;
  1288.     External;
  1289.  
  1290. Function RemoveGList(window : WindowPtr; gadget : GadgetPtr;
  1291.             NumGad : Short) : Short;
  1292.     External;
  1293.  
  1294. Procedure ReportMouse(window : WindowPtr; DoIt : Boolean);
  1295.     External;
  1296.  
  1297. Function Request(requester : RequesterPtr; window : WindowPtr) : Boolean;
  1298.     External;
  1299.  
  1300. Procedure RethinkDisplay;
  1301.     External;
  1302.  
  1303. Procedure ScreenToBack(screen : ScreenPtr);
  1304.     External;
  1305.  
  1306. Procedure ScreenToFront(screen : ScreenPtr);
  1307.     External;
  1308.  
  1309. Procedure SetDMRequest(window : WindowPtr; DMRequester : RequesterPtr);
  1310.     External;
  1311.  
  1312. Function SetMenuStrip(window : WindowPtr; Menu : MenuPtr) : Boolean;
  1313.     External;
  1314.  
  1315. Procedure SetPointer(window : WindowPtr; pointer : Address;
  1316.             Height, Width, XOffset, YOffset : Short);
  1317.     External;
  1318.  
  1319. Function SetPrefs(PrefBuffer : PreferencesPtr; Size : Integer;
  1320.             Inform : Boolean) : PreferencesPtr;
  1321.     External;
  1322.     
  1323.  
  1324. Procedure SetWindowTitles(window : WindowPtr;
  1325.             WindowTitle, ScreenTitle : String);
  1326.     External;
  1327.  
  1328. Procedure ShowTitle(screen : ScreenPtr; ShowIt : Boolean);
  1329.     External;
  1330.  
  1331. Procedure SizeWindow(window : WindowPtr; DeltaX, DeltaY : Short);
  1332.     External;
  1333.  
  1334. Function SubNum(MenuNumber : Short) : Short;
  1335.     External;
  1336.  
  1337. Procedure UnlockIBase(Lock : Integer);
  1338.     External;
  1339.  
  1340. Function ViewAddress : ViewPtr;
  1341.     External;
  1342.  
  1343. Function ViewPortAddress(window : WindowPtr) : ViewPortPtr;
  1344.     External;
  1345.  
  1346. Function WBenchToBack : Boolean;
  1347.     External;
  1348.  
  1349. Function WBenchToFront : Boolean;
  1350.     External;
  1351.  
  1352. Function WindowLimits(window : WindowPtr; MinWidth, MinHeight,
  1353.             MaxWidth, MaxHeight : Short) : Boolean;
  1354.     External;
  1355.  
  1356. Procedure WindowToBack(window : WindowPtr);
  1357.     External;
  1358.  
  1359. Procedure WindowToFront(window : WindowPtr);
  1360.     External;
  1361.  
  1362.