mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 15:31:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			4700 lines
		
	
	
		
			180 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			4700 lines
		
	
	
		
			180 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| {
 | |
|     $Id$
 | |
|     This file is part of the Free Pascal run time library.
 | |
|     Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu>
 | |
| 
 | |
|     intuition.library interface unit for MorphOS/PowerPC
 | |
| 
 | |
|     Based on work of Nils Sjoholm member of the Amiga RTL
 | |
|     development team.
 | |
| 
 | |
|     MorphOS port was done on a free Pegasos II/G4 machine
 | |
|     provided by Genesi S.a.r.l. <www.genesi.lu>
 | |
| 
 | |
|     See the file COPYING.FPC, included in this distribution,
 | |
|     for details about the copyright.
 | |
| 
 | |
|     This program is distributed in the hope that it will be useful,
 | |
|     but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | |
| 
 | |
|  **********************************************************************}
 | |
| {$PACKRECORDS 2}
 | |
| 
 | |
| unit intuition;
 | |
| 
 | |
| interface
 | |
| 
 | |
| uses 
 | |
|   exec, graphics, utility, inputevent, timer, layers;
 | |
| 
 | |
| 
 | |
| {
 | |
|  * NOTE:  intuition/iobsolete.h is included at the END of this file!
 | |
|  }
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === IntuiText ========================================================== }
 | |
| { ================================= ======================================= }
 | |
| { IntuiText is a series of strings that start with a screen location
 | |
|  *  (always relative to the upper-left corner of something) and then the
 | |
|  *  text of the string.  The text is null-terminated.
 | |
|  }
 | |
| Type
 | |
|     pIntuiText = ^tIntuiText;
 | |
|     tIntuiText = record
 | |
|         FrontPen,
 | |
|         BackPen         : Byte;         { the pen numbers for the rendering }
 | |
|         DrawMode        : Byte;         { the mode for rendering the text }
 | |
|         LeftEdge        : smallint;        { relative start location for the text }
 | |
|         TopEdge         : smallint;        { relative start location for the text }
 | |
|         ITextFont       : pTextAttr;  { if NULL, you accept the default }
 | |
|         IText           : PChar;       { pointer to null-terminated text }
 | |
|         NextText        : pIntuiText;   { continuation to TxWrite another text }
 | |
|     end;
 | |
| 
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Border ============================================================= }
 | |
| { ======================================================================== }
 | |
| { Data type Border, used for drawing a series of lines which is intended for
 | |
|  *  use as a border drawing, but which may, in fact, be used to render any
 | |
|  *  arbitrary vector shape.
 | |
|  *  The routine DrawBorder sets up the RastPort with the appropriate
 | |
|  *  variables, then does a Move to the first coordinate, then does Draws
 | |
|  *  to the subsequent coordinates.
 | |
|  *  After all the Draws are done, if NextBorder is non-zero we call DrawBorder
 | |
|  *  recursively
 | |
|  }
 | |
| Type
 | |
|     pBorder = ^tBorder;
 | |
|     tBorder = record
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { initial offsets from the origin }
 | |
|         FrontPen,
 | |
|         BackPen         : Byte;         { pens numbers for rendering }
 | |
|         DrawMode        : Byte;         { mode for rendering }
 | |
|         Count           : Shortint;         { number of XY pairs }
 | |
|         XY              : Pointer;      { vector coordinate pairs rel to LeftTop}
 | |
|         NextBorder      : pBorder;      { pointer to any other Border too }
 | |
|     end;
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === MenuItem =========================================================== }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pMenuItem = ^tMenuItem;
 | |
|     tMenuItem = record
 | |
|         NextItem        : pMenuItem;    { pointer to next in chained list }
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { position of the select box }
 | |
|         Width,
 | |
|         Height          : smallint;        { dimensions of the select box }
 | |
|         Flags           : Word;        { see the defines below }
 | |
| 
 | |
|         MutualExclude   : Longint;      { set bits mean this item excludes that }
 | |
| 
 | |
|         ItemFill        : Pointer;      { points to Image, IntuiText, or NULL }
 | |
| 
 | |
|     { when this item is pointed to by the cursor and the items highlight
 | |
|      *  mode HIGHIMAGE is selected, this alternate image will be displayed
 | |
|      }
 | |
| 
 | |
|         SelectFill      : Pointer;      { points to Image, IntuiText, or NULL }
 | |
| 
 | |
|         Command         : Char;         { only if appliprog sets the COMMSEQ flag }
 | |
| 
 | |
|         SubItem         : pMenuItem;    { if non-zero, DrawMenu shows "->" }
 | |
| 
 | |
|     { The NextSelect field represents the menu number of next selected
 | |
|      *  item (when user has drag-selected several items)
 | |
|      }
 | |
| 
 | |
|         NextSelect      : Word;
 | |
|     end;
 | |
| 
 | |
| 
 | |
| Const
 | |
| 
 | |
| { FLAGS SET BY THE APPLIPROG }
 | |
|     CHECKIT     = $0001;        { whether to check this item if selected }
 | |
|     ITEMTEXT    = $0002;        { set if textual, clear if graphical item }
 | |
|     COMMSEQ     = $0004;        { set if there's an command sequence }
 | |
|     MENUTOGGLE  = $0008;        { set to toggle the check of a menu item }
 | |
|     ITEMENABLED = $0010;        { set if this item is enabled }
 | |
| 
 | |
| { these are the SPECIAL HIGHLIGHT FLAG state meanings }
 | |
|     HIGHFLAGS   = $00C0;        { see definitions below for these bits }
 | |
|     HIGHIMAGE   = $0000;        { use the user's "select image" }
 | |
|     HIGHCOMP    = $0040;        { highlight by complementing the selectbox }
 | |
|     HIGHBOX     = $0080;        { highlight by "boxing" the selectbox }
 | |
|     HIGHNONE    = $00C0;        { don't highlight }
 | |
| 
 | |
| { FLAGS SET BY BOTH APPLIPROG AND INTUITION }
 | |
|     CHECKED     = $0100;        { if CHECKIT, then set this when selected }
 | |
| 
 | |
| { FLAGS SET BY INTUITION }
 | |
|     ISDRAWN     = $1000;        { this item's subs are currently drawn }
 | |
|     HIGHITEM    = $2000;        { this item is currently highlighted }
 | |
|     MENUTOGGLED = $4000;        { this item was already toggled }
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Menu =============================================================== }
 | |
| { ======================================================================== }
 | |
| Type
 | |
| 
 | |
|     pMenu = ^tMenu;
 | |
|     tMenu = record
 | |
|         NextMenu        : pMenu;        { same level }
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { position of the select box }
 | |
|         Width,
 | |
|         Height          : smallint;        { dimensions of the select box }
 | |
|         Flags           : Word;        { see flag definitions below }
 | |
|         MenuName        : PChar;       { text for this Menu Header }
 | |
|         FirstItem       : pMenuItem;  { pointer to first in chain }
 | |
| 
 | |
|     { these mysteriously-named variables are for internal use only }
 | |
| 
 | |
|         JazzX,
 | |
|         JazzY,
 | |
|         BeatX,
 | |
|         BeatY           : smallint;
 | |
|     end;
 | |
| 
 | |
| CONST
 | |
| { FLAGS SET BY BOTH THE APPLIPROG AND INTUITION }
 | |
|     MENUENABLED = $0001;        { whether or not this menu is enabled }
 | |
| 
 | |
| { FLAGS SET BY INTUITION }
 | |
|     MIDRAWN     = $0100;        { this menu's items are currently drawn }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Gadget ============================================================= }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pGadget = ^tGadget;
 | |
|     tGadget = record
 | |
|         NextGadget      : pGadget;      { next gadget in the list }
 | |
| 
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { "hit box" of gadget }
 | |
|         Width,
 | |
|         Height          : smallint;        { "hit box" of gadget }
 | |
| 
 | |
|         Flags           : Word;        { see below for list of defines }
 | |
| 
 | |
|         Activation      : Word;        { see below for list of defines }
 | |
| 
 | |
|         GadgetType      : Word;        { see below for defines }
 | |
| 
 | |
|     { appliprog can specify that the Gadget be rendered as either as Border
 | |
|      * or an Image.  This variable points to which (or equals NULL if there's
 | |
|      * nothing to be rendered about this Gadget)
 | |
|      }
 | |
| 
 | |
|         GadgetRender    : Pointer;
 | |
| 
 | |
|     { appliprog can specify "highlighted" imagery rather than algorithmic
 | |
|      * this can point to either Border or Image data
 | |
|      }
 | |
| 
 | |
|         SelectRender    : Pointer;
 | |
| 
 | |
|         GadgetText      : pIntuiText; { text for this gadget }
 | |
| 
 | |
|     { by using the MutualExclude word, the appliprog can describe
 | |
|      * which gadgets mutually-exclude which other ones.  The bits
 | |
|      * in MutualExclude correspond to the gadgets in object containing
 | |
|      * the gadget list.  If this gadget is selected and a bit is set
 | |
|      * in this gadget's MutualExclude and the gadget corresponding to
 | |
|      * that bit is currently selected (e.g. bit 2 set and gadget 2
 | |
|      * is currently selected) that gadget must be unselected.
 | |
|      * Intuition does the visual unselecting (with checkmarks) and
 | |
|      * leaves it up to the program to unselect internally
 | |
|      }
 | |
| 
 | |
|         MutualExclude   : Longint;      { set bits mean this gadget excludes that gadget }
 | |
| 
 | |
|     { pointer to a structure of special data required by Proportional,
 | |
|      * String and Longint Gadgets
 | |
|      }
 | |
| 
 | |
|         SpecialInfo     : Pointer;
 | |
| 
 | |
|         GadgetID        : Word;        { user-definable ID field }
 | |
|         UserData        : Pointer;      { ptr to general purpose User data (ignored by In) }
 | |
|     end;
 | |
| 
 | |
|  pExtGadget = ^tExtGadget;
 | |
|  tExtGadget = record
 | |
|     { The first fields match struct Gadget exactly }
 | |
|     NextGadget     : pExtGadget;  { Matches struct Gadget }
 | |
|     LeftEdge, TopEdge,            { Matches struct Gadget }
 | |
|     Width, Height  : smallint;     { Matches struct Gadget }
 | |
|     Flags,                        { Matches struct Gadget }
 | |
|     Activation,                   { Matches struct Gadget }
 | |
|     GadgetType     : WORD;        { Matches struct Gadget }
 | |
|     GadgetRender,                 { Matches struct Gadget }
 | |
|     SelectRender   : Pointer;     { Matches struct Gadget }
 | |
|     GadgetText     : pIntuiText;  { Matches struct Gadget }
 | |
|     MutualExclude  : Longint;     { Matches struct Gadget }
 | |
|     SpecialInfo    : Pointer;     { Matches struct Gadget }
 | |
|     GadgetID       : WORD;        { Matches struct Gadget }
 | |
|     UserData       : Pointer;     { Matches struct Gadget }
 | |
| 
 | |
|     { These fields only exist under V39 and only if GFLG_EXTENDED is set }
 | |
|     MoreFlags      : Cardinal;     { see GMORE_ flags below }
 | |
|     BoundsLeftEdge,             { Bounding extent for gadget, valid   }
 | |
|     BoundsTopEdge,              { only if GMORE_BOUNDS is set.  The   }
 | |
|     BoundsWidth,                { GFLG_RELxxx flags affect these      }
 | |
|     BoundsHeight   : smallint;      { coordinates as well.        }
 | |
|  end;
 | |
| 
 | |
| 
 | |
| CONST
 | |
| { --- Gadget.Flags values      --- }
 | |
| { combinations in these bits describe the highlight technique to be used }
 | |
|  GFLG_GADGHIGHBITS  = $0003;
 | |
|  GFLG_GADGHCOMP     = $0000;  { Complement the select box }
 | |
|  GFLG_GADGHBOX      = $0001;  { Draw a box around the image }
 | |
|  GFLG_GADGHIMAGE    = $0002;  { Blast in this alternate image }
 | |
|  GFLG_GADGHNONE     = $0003;  { don't highlight }
 | |
| 
 | |
|  GFLG_GADGIMAGE     = $0004;  { set IF GadgetRender AND SelectRender
 | |
|                                    * point to an Image structure, clear
 | |
|                                    * if they point to Border structures
 | |
|                                    }
 | |
| 
 | |
| { combinations in these next two bits specify to which corner the gadget's
 | |
|  *  Left & Top coordinates are relative.  If relative to Top/Left,
 | |
|  *  these are "normal" coordinates (everything is relative to something in
 | |
|  *  this universe).
 | |
|  *
 | |
|  * Gadget positions and dimensions are relative to the window or
 | |
|  * requester which contains the gadget
 | |
|  }
 | |
|  GFLG_RELBOTTOM   = $0008;  { vert. pos. is relative to bottom edge }
 | |
|  GFLG_RELRIGHT    = $0010;  { horiz. pos. is relative to right edge }
 | |
|  GFLG_RELWIDTH    = $0020;  { width is relative to req/window    }
 | |
|  GFLG_RELHEIGHT   = $0040;  { height is relative to req/window   }
 | |
| 
 | |
| { New for V39: GFLG_RELSPECIAL allows custom gadget implementors to
 | |
|  * make gadgets whose position and size depend in an arbitrary way
 | |
|  * on their window's dimensions.  The GM_LAYOUT method will be invoked
 | |
|  * for such a gadget (or any other GREL_xxx gadget) at suitable times,
 | |
|  * such as when the window opens or the window's size changes.
 | |
|  }
 | |
|  GFLG_RELSPECIAL  = $4000;  { custom gadget has special relativity.
 | |
|                                    * Gadget box values are absolutes, but
 | |
|                                    * can be changed via the GM_LAYOUT method.
 | |
|                                    }
 | |
| 
 | |
|  GFLG_SELECTED    = $0080;  { you may initialize AND look at this        }
 | |
| 
 | |
| { the GFLG_DISABLED flag is initialized by you and later set by Intuition
 | |
|  * according to your calls to On/OffGadget().  It specifies whether or not
 | |
|  * this Gadget is currently disabled from being selected
 | |
|  }
 | |
|  GFLG_DISABLED    = $0100;
 | |
| 
 | |
| { These flags specify the type of text field that Gadget.GadgetText
 | |
|  * points to.  In all normal (pre-V36) gadgets which you initialize
 | |
|  * this field should always be zero.  Some types of gadget objects
 | |
|  * created from classes will use these fields to keep track of
 | |
|  * types of labels/contents that different from IntuiText, but are
 | |
|  * stashed in GadgetText.
 | |
|  }
 | |
| 
 | |
|  GFLG_LABELMASK   = $3000;
 | |
|  GFLG_LABELITEXT  = $0000;  { GadgetText points to IntuiText     }
 | |
|  GFLG_LABELSTRING = $1000;  { GadgetText points to (UBYTE *)     }
 | |
|  GFLG_LABELIMAGE  = $2000;  { GadgetText points to Image (object)        }
 | |
| 
 | |
| { New for V37: GFLG_TABCYCLE }
 | |
|  GFLG_TABCYCLE    = $0200;  { (string OR custom) gadget participates in
 | |
|                                    * cycling activation with Tab or Shift-Tab
 | |
|                                    }
 | |
| { New for V37: GFLG_STRINGEXTEND.  We discovered that V34 doesn't properly
 | |
|  * ignore the value we had chosen for the Gadget->Activation flag
 | |
|  * GACT_STRINGEXTEND.  NEVER SET THAT FLAG WHEN RUNNING UNDER V34.
 | |
|  * The Gadget->Flags bit GFLG_STRINGEXTEND is provided as a synonym which is
 | |
|  * safe under V34, and equivalent to GACT_STRINGEXTEND under V37.
 | |
|  * (Note that the two flags are not numerically equal)
 | |
|  }
 | |
|  GFLG_STRINGEXTEND = $0400;  { this String Gadget has StringExtend        }
 | |
| 
 | |
| { New for V39: GFLG_IMAGEDISABLE.  This flag is automatically set if
 | |
|  * the custom image of this gadget knows how to do disabled rendering
 | |
|  * (more specifically, if its IA_SupportsDisable attribute is TRUE).
 | |
|  * Intuition uses this to defer the ghosting to the image-class,
 | |
|  * instead of doing it itself (the old compatible way).
 | |
|  * Do not set this flag yourself - Intuition will do it for you.
 | |
|  }
 | |
| 
 | |
|  GFLG_IMAGEDISABLE = $0800;  { Gadget's image knows how to do disabled
 | |
|                                    * rendering
 | |
|                                    }
 | |
| 
 | |
| { New for V39:  If set, this bit means that the Gadget is actually
 | |
|  * a struct ExtGadget, with new fields and flags.  All V39 boopsi
 | |
|  * gadgets are ExtGadgets.  Never ever attempt to read the extended
 | |
|  * fields of a gadget if this flag is not set.
 | |
|  }
 | |
|  GFLG_EXTENDED    = $8000;  { Gadget is extended }
 | |
| 
 | |
| { ---  Gadget.Activation flag values   --- }
 | |
| { Set GACT_RELVERIFY if you want to verify that the pointer was still over
 | |
|  * the gadget when the select button was released.  Will cause
 | |
|  * an IDCMP_GADGETUP message to be sent if so.
 | |
|  }
 | |
|  GACT_RELVERIFY    = $0001;
 | |
| 
 | |
| { the flag GACT_IMMEDIATE, when set, informs the caller that the gadget
 | |
|  *  was activated when it was activated.  This flag works in conjunction with
 | |
|  *  the GACT_RELVERIFY flag
 | |
|  }
 | |
|  GACT_IMMEDIATE    = $0002;
 | |
| 
 | |
| { the flag GACT_ENDGADGET, when set, tells the system that this gadget,
 | |
|  * when selected, causes the Requester to be ended.  Requesters
 | |
|  * that are ended are erased and unlinked from the system.
 | |
|  }
 | |
|  GACT_ENDGADGET    = $0004;
 | |
| 
 | |
| { the GACT_FOLLOWMOUSE flag, when set, specifies that you want to receive
 | |
|  * reports on mouse movements while this gadget is active.
 | |
|  * You probably want to set the GACT_IMMEDIATE flag when using
 | |
|  * GACT_FOLLOWMOUSE, since that's the only reasonable way you have of
 | |
|  * learning why Intuition is suddenly sending you a stream of mouse
 | |
|  * movement events.  If you don't set GACT_RELVERIFY, you'll get at
 | |
|  * least one Mouse Position event.
 | |
|  }
 | |
|  GACT_FOLLOWMOUSE = $0008;
 | |
| 
 | |
| { if any of the BORDER flags are set in a Gadget that's included in the
 | |
|  * Gadget list when a Window is opened, the corresponding Border will
 | |
|  * be adjusted to make room for the Gadget
 | |
|  }
 | |
|  GACT_RIGHTBORDER = $0010;
 | |
|  GACT_LEFTBORDER  = $0020;
 | |
|  GACT_TOPBORDER   = $0040;
 | |
|  GACT_BOTTOMBORDER= $0080;
 | |
|  GACT_BORDERSNIFF = $8000;  { neither set nor rely on this bit   }
 | |
| 
 | |
|  GACT_TOGGLESELECT= $0100;  { this bit for toggle-select mode }
 | |
|  GACT_BOOLEXTEND  = $2000;  { this Boolean Gadget has a BoolInfo }
 | |
| 
 | |
| { should properly be in StringInfo, but aren't }
 | |
|  GACT_STRINGLEFT  = $0000;  { NOTE WELL: that this has value zero        }
 | |
|  GACT_STRINGCENTER= $0200;
 | |
|  GACT_STRINGRIGHT = $0400;
 | |
|  GACT_LONGINT     = $0800;  { this String Gadget is for Long Ints        }
 | |
|  GACT_ALTKEYMAP   = $1000;  { this String has an alternate keymap        }
 | |
|  GACT_STRINGEXTEND= $2000;  { this String Gadget has StringExtend        }
 | |
|                                   { NOTE: NEVER SET GACT_STRINGEXTEND IF YOU
 | |
|                                    * ARE RUNNING ON LESS THAN V36!  SEE
 | |
|                                    * GFLG_STRINGEXTEND (ABOVE) INSTEAD
 | |
|                                    }
 | |
| 
 | |
|  GACT_ACTIVEGADGET = $4000;  { this gadget is "active".  This flag
 | |
|                                    * is maintained by Intuition, and you
 | |
|                                    * cannot count on its value persisting
 | |
|                                    * while you do something on your program's
 | |
|                                    * task.  It can only be trusted by
 | |
|                                    * people implementing custom gadgets
 | |
|                                    }
 | |
| 
 | |
| { note $8000 is used above (GACT_BORDERSNIFF);
 | |
|  * all Activation flags defined }
 | |
| 
 | |
| { --- GADGET TYPES ------------------------------------------------------- }
 | |
| { These are the Gadget Type definitions for the variable GadgetType
 | |
|  * gadget number type MUST start from one.  NO TYPES OF ZERO ALLOWED.
 | |
|  * first comes the mask for Gadget flags reserved for Gadget typing
 | |
|  }
 | |
|  GTYP_GADGETTYPE = $FC00;  { all Gadget Global Type flags (padded) }
 | |
|  GTYP_SYSGADGET  = $8000;  { 1 = Allocated by the system, 0 = by app. }
 | |
|  GTYP_SCRGADGET  = $4000;  { 1 = ScreenGadget, 0 = WindowGadget }
 | |
|  GTYP_GZZGADGET  = $2000;  { 1 = for WFLG_GIMMEZEROZERO borders }
 | |
|  GTYP_REQGADGET  = $1000;  { 1 = this is a Requester Gadget }
 | |
| { system gadgets }
 | |
|  GTYP_SIZING     = $0010;
 | |
|  GTYP_WDRAGGING  = $0020;
 | |
|  GTYP_SDRAGGING  = $0030;
 | |
|  GTYP_WUPFRONT   = $0040;
 | |
|  GTYP_SUPFRONT   = $0050;
 | |
|  GTYP_WDOWNBACK  = $0060;
 | |
|  GTYP_SDOWNBACK  = $0070;
 | |
|  GTYP_CLOSE      = $0080;
 | |
| { application gadgets }
 | |
|  GTYP_BOOLGADGET = $0001;
 | |
|  GTYP_GADGET0002 = $0002;
 | |
|  GTYP_PROPGADGET = $0003;
 | |
|  GTYP_STRGADGET  = $0004;
 | |
|  GTYP_CUSTOMGADGET    =   $0005;
 | |
| 
 | |
| 
 | |
| {* GTYP_GTYPEMASK is a mask you can apply to tell what class
 | |
|  * of gadget this is.  The possible classes follow.
 | |
|  *}
 | |
|  GTYP_GTYPEMASK        =  $0007;
 | |
| 
 | |
| { This bit in GadgetType is reserved for undocumented internal use
 | |
|  * by the Gadget Toolkit, and cannot be used nor relied on by
 | |
|  * applications:        $0100;
 | |
|  }
 | |
| 
 | |
| { New for V39.  Gadgets which have the GFLG_EXTENDED flag set are
 | |
|  * actually ExtGadgets, which have more flags.  The GMORE_xxx
 | |
|  * identifiers describe those flags.  For GMORE_SCROLLRASTER, see
 | |
|  * important information in the ScrollWindowRaster() autodoc.
 | |
|  * NB: GMORE_SCROLLRASTER must be set before the gadget is
 | |
|  * added to a window.
 | |
|  }
 | |
|  GMORE_BOUNDS       = $00000001; { ExtGadget has valid Bounds }
 | |
|  GMORE_GADGETHELP   = $00000002; { This gadget responds to gadget help }
 | |
|  GMORE_SCROLLRASTER = $00000004; { This (custom) gadget uses ScrollRaster }
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === BoolInfo======================================================= }
 | |
| { ======================================================================== }
 | |
| { This is the special data needed by an Extended Boolean Gadget
 | |
|  * Typically this structure will be pointed to by the Gadget field SpecialInfo
 | |
|  }
 | |
| Type
 | |
|     pBoolInfo = ^tBoolInfo;
 | |
|     tBoolInfo = record
 | |
|         Flags   : Word;        { defined below }
 | |
|         Mask    : Pointer; { bit mask for highlighting and selecting
 | |
|                          * mask must follow the same rules as an Image
 | |
|                          * plane.  It's width and height are determined
 | |
|                          * by the width and height of the gadget's
 | |
|                          * select box. (i.e. Gadget.Width and .Height).
 | |
|                          }
 | |
|         Reserved : Cardinal;     { set to 0      }
 | |
|     end;
 | |
| 
 | |
| Const
 | |
| 
 | |
| { set BoolInfo.Flags to this flag bit.
 | |
|  * in the future, additional bits might mean more stuff hanging
 | |
|  * off of BoolInfo.Reserved.
 | |
| }
 | |
|     BOOLMASK    = $0001;        { extension is for masked gadget }
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === PropInfo =========================================================== }
 | |
| { ======================================================================== }
 | |
| { this is the special data required by the proportional Gadget
 | |
|  * typically, this data will be pointed to by the Gadget variable SpecialInfo
 | |
|  }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pPropInfo = ^tPropInfo;
 | |
|     tPropInfo = record
 | |
|         Flags   : Word;        { general purpose flag bits (see defines below) }
 | |
| 
 | |
|     { You initialize the Pot variables before the Gadget is added to
 | |
|      * the system.  Then you can look here for the current settings
 | |
|      * any time, even while User is playing with this Gadget.  To
 | |
|      * adjust these after the Gadget is added to the System, use
 | |
|      * ModifyProp();  The Pots are the actual proportional settings,
 | |
|      * where a value of zero means zero and a value of MAXPOT means
 | |
|      * that the Gadget is set to its maximum setting.
 | |
|      }
 | |
| 
 | |
|         HorizPot        : WORD; { 16-bit FixedPoint horizontal quantity percentage }
 | |
|         VertPot         : WORD; { 16-bit FixedPoint vertical quantity percentage }
 | |
| 
 | |
|     { the 16-bit FixedPoint Body variables describe what percentage of
 | |
|      * the entire body of stuff referred to by this Gadget is actually
 | |
|      * shown at one time.  This is used with the AUTOKNOB routines,
 | |
|      * to adjust the size of the AUTOKNOB according to how much of
 | |
|      * the data can be seen.  This is also used to decide how far
 | |
|      * to advance the Pots when User hits the Container of the Gadget.
 | |
|      * For instance, if you were controlling the display of a 5-line
 | |
|      * Window of text with this Gadget, and there was a total of 15
 | |
|      * lines that could be displayed, you would set the VertBody value to
 | |
|      *     (MAXBODY / (TotalLines / DisplayLines)) = MAXBODY / 3.
 | |
|      * Therefore, the AUTOKNOB would fill 1/3 of the container, and
 | |
|      * if User hits the Cotainer outside of the knob, the pot would
 | |
|      * advance 1/3 (plus or minus) If there's no body to show, or
 | |
|      * the total amount of displayable info is less than the display area,
 | |
|      * set the Body variables to the MAX.  To adjust these after the
 | |
|      * Gadget is added to the System, use ModifyProp();
 | |
|      }
 | |
| 
 | |
|         HorizBody       : Word;        { horizontal Body }
 | |
|         VertBody        : Word;        { vertical Body }
 | |
| 
 | |
|     { these are the variables that Intuition sets and maintains }
 | |
| 
 | |
|         CWidth          : Word;        { Container width (with any relativity absoluted) }
 | |
|         CHeight         : Word;        { Container height (with any relativity absoluted) }
 | |
|         HPotRes,
 | |
|         VPotRes         : Word;        { pot increments }
 | |
|         LeftBorder      : Word;        { Container borders }
 | |
|         TopBorder       : Word;        { Container borders }
 | |
|     end;
 | |
| 
 | |
| CONST
 | |
| { --- FLAG BITS ---------------------------------------------------------- }
 | |
|  AUTOKNOB     =   $0001;  { this flag sez:  gimme that old auto-knob }
 | |
| { NOTE: if you do not use an AUTOKNOB for a proportional gadget,
 | |
|  * you are currently limited to using a single Image of your own
 | |
|  * design: Intuition won't handle a linked list of images as
 | |
|  * a proportional gadget knob.
 | |
|  }
 | |
| 
 | |
|  FREEHORIZ     =  $0002;  { IF set, the knob can move horizontally }
 | |
|  FREEVERT      =  $0004;  { IF set, the knob can move vertically }
 | |
|  PROPBORDERLESS =  $0008;  { IF set, no border will be rendered }
 | |
|  KNOBHIT       =  $0100;  { set when this Knob is hit }
 | |
|  PROPNEWLOOK   =  $0010;  { set this IF you want to get the new
 | |
|                                  * V36 look
 | |
|                                  }
 | |
| 
 | |
|  KNOBHMIN      =  6;       { minimum horizontal size of the Knob }
 | |
|  KNOBVMIN      =  4;       { minimum vertical size of the Knob }
 | |
|  MAXBODY       =  $FFFF;  { maximum body value }
 | |
|  MAXPOT        =  $FFFF;  { maximum pot value }
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === StringInfo ========================================================= }
 | |
| { ======================================================================== }
 | |
| { this is the special data required by the string Gadget
 | |
|  * typically, this data will be pointed to by the Gadget variable SpecialInfo
 | |
|  }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pStringInfo = ^tStringInfo;
 | |
|     tStringInfo = record
 | |
|     { you initialize these variables, and then Intuition maintains them }
 | |
|         Buffer          : PChar;       { the buffer containing the start and final string }
 | |
|         UndoBuffer      : PChar;       { optional buffer for undoing current entry }
 | |
|         BufferPos       : smallint;        { character position in Buffer }
 | |
|         MaxChars        : smallint;        { max number of chars in Buffer (including NULL) }
 | |
|         DispPos         : smallint;        { Buffer position of first displayed character }
 | |
| 
 | |
|     { Intuition initializes and maintains these variables for you }
 | |
| 
 | |
|         UndoPos         : smallint;        { character position in the undo buffer }
 | |
|         NumChars        : smallint;        { number of characters currently in Buffer }
 | |
|         DispCount       : smallint;        { number of whole characters visible in Container }
 | |
|         CLeft,
 | |
|         CTop            : smallint;        { topleft offset of the container }
 | |
| 
 | |
|     { you can initialize this variable before the gadget is submitted to
 | |
|      * Intuition, and then examine it later to discover what Longint
 | |
|      * the user has entered (if the user never plays with the gadget,
 | |
|      * the value will be unchanged from your initial setting)
 | |
|      }
 | |
|         Extension       : Pointer;
 | |
|         _LongInt         : Longint;
 | |
| 
 | |
|     { If you want this Gadget to use your own Console keymapping, you
 | |
|      * set the ALTKEYMAP bit in the Activation flags of the Gadget, and then
 | |
|      * set this variable to point to your keymap.  If you don't set the
 | |
|      * ALTKEYMAP, you'll get the standard ASCII keymapping.
 | |
|      }
 | |
| 
 | |
|         AltKeyMap       : Pointer;
 | |
|     end;
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Requester ========================================================== }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pRequester = ^tRequester;
 | |
|     tRequester = record
 | |
|     { the ClipRect and BitMap and used for rendering the requester }
 | |
|         OlderRequest    : pRequester;
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { dimensions of the entire box }
 | |
|         Width,
 | |
|         Height          : smallint;        { dimensions of the entire box }
 | |
|         RelLeft,
 | |
|         RelTop          : smallint;        { for Pointer relativity offsets }
 | |
| 
 | |
|         ReqGadget       : pGadget;    { pointer to a list of Gadgets }
 | |
|         ReqBorder       : pBorder;    { the box's border }
 | |
|         ReqText         : pIntuiText; { the box's text }
 | |
|         Flags           : Word;        { see definitions below }
 | |
| 
 | |
|     { pen number for back-plane fill before draws }
 | |
| 
 | |
|         BackFill        : Byte;
 | |
| 
 | |
|     { Layer in place of clip rect       }
 | |
| 
 | |
|         ReqLayer        : pLayer;
 | |
| 
 | |
|         ReqPad1         : Array [0..31] of Byte;
 | |
| 
 | |
|     { If the BitMap plane pointers are non-zero, this tells the system
 | |
|      * that the image comes pre-drawn (if the appliprog wants to define
 | |
|      * it's own box, in any shape or size it wants!);  this is OK by
 | |
|      * Intuition as long as there's a good correspondence between
 | |
|      * the image and the specified Gadgets
 | |
|      }
 | |
| 
 | |
|         ImageBMap       : pBitMap;    { points to the BitMap of PREDRAWN imagery }
 | |
|         RWindow         : Pointer;      { added.  points back to Window }
 | |
|         ReqImage        : Pointer;
 | |
|         ReqPad2         : Array [0..31] of Shortint;
 | |
|     end;
 | |
| 
 | |
| 
 | |
| Const
 | |
| 
 | |
| { FLAGS SET BY THE APPLIPROG }
 | |
|     POINTREL            = $0001;    { if POINTREL set, TopLeft is relative to pointer}
 | |
|     PREDRAWN            = $0002;    { if ReqBMap points to predrawn Requester imagery }
 | |
|     NOISYREQ            = $0004;    { if you don't want requester to filter input          }
 | |
| 
 | |
|     SIMPLEREQ           = $0010;
 | |
|         { to use SIMPLEREFRESH layer (recommended)     }
 | |
| 
 | |
|     { New for V36          }
 | |
|     USEREQIMAGE         = $0020;
 | |
|          {  render linked list ReqImage after BackFill
 | |
|          * but before gadgets and text
 | |
|          }
 | |
|     NOREQBACKFILL       = $0040;
 | |
|         { don't bother filling requester with Requester.BackFill pen   }
 | |
| 
 | |
| 
 | |
| { FLAGS SET BY INTUITION }
 | |
|     REQOFFWINDOW        = $1000;        { part of one of the Gadgets was offwindow }
 | |
|     REQACTIVE           = $2000;        { this requester is active }
 | |
|     SYSREQUEST          = $4000;        { this requester caused by system }
 | |
|     DEFERREFRESH        = $8000;        { this Requester stops a Refresh broadcast }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Image ============================================================== }
 | |
| { ======================================================================== }
 | |
| { This is a brief image structure for very simple transfers of
 | |
|  * image data to a RastPort
 | |
|  }
 | |
| 
 | |
| Type
 | |
|     pImage = ^tImage;
 | |
|     tImage = record
 | |
|         LeftEdge        : smallint;        { starting offset relative to some origin }
 | |
|         TopEdge         : smallint;        { starting offsets relative to some origin }
 | |
|         Width           : smallint;        { pixel size (though data is word-aligned) }
 | |
|         Height,
 | |
|         Depth           : smallint;        { pixel sizes }
 | |
|         ImageData       : Pointer;      { pointer to the actual word-aligned bits }
 | |
| 
 | |
|     { the PlanePick and PlaneOnOff variables work much the same way as the
 | |
|      * equivalent GELS Bob variables.  It's a space-saving
 | |
|      * mechanism for image data.  Rather than defining the image data
 | |
|      * for every plane of the RastPort, you need define data only
 | |
|      * for the planes that are not entirely zero or one.  As you
 | |
|      * define your Imagery, you will often find that most of the planes
 | |
|      * ARE just as color selectors.  For instance, if you're designing
 | |
|      * a two-color Gadget to use colors two and three, and the Gadget
 | |
|      * will reside in a five-plane display, bit plane zero of your
 | |
|      * imagery would be all ones, bit plane one would have data that
 | |
|      * describes the imagery, and bit planes two through four would be
 | |
|      * all zeroes.  Using these flags allows you to avoid wasting all
 | |
|      * that memory in this way:  first, you specify which planes you
 | |
|      * want your data to appear in using the PlanePick variable.  For
 | |
|      * each bit set in the variable, the next "plane" of your image
 | |
|      * data is blitted to the display.  For each bit clear in this
 | |
|      * variable, the corresponding bit in PlaneOnOff is examined.
 | |
|      * If that bit is clear, a "plane" of zeroes will be used.
 | |
|      * If the bit is set, ones will go out instead.  So, for our example:
 | |
|      *   Gadget.PlanePick = $02;
 | |
|      *   Gadget.PlaneOnOff = $01;
 | |
|      * Note that this also allows for generic Gadgets, like the
 | |
|      * System Gadgets, which will work in any number of bit planes.
 | |
|      * Note also that if you want an Image that is only a filled
 | |
|      * rectangle, you can get this by setting PlanePick to zero
 | |
|      * (pick no planes of data) and set PlaneOnOff to describe the pen
 | |
|      * color of the rectangle.
 | |
|      }
 | |
| 
 | |
|         PlanePick,
 | |
|         PlaneOnOff      : Byte;
 | |
| 
 | |
|     { if the NextImage variable is not NULL, Intuition presumes that
 | |
|      * it points to another Image structure with another Image to be
 | |
|      * rendered
 | |
|      }
 | |
| 
 | |
|         NextImage       : pImage;
 | |
|     end;
 | |
| 
 | |
| 
 | |
| { New for V39, Intuition supports the IESUBCLASS_NEWTABLET subclass
 | |
|  * of the IECLASS_NEWPOINTERPOS event.  The ie_EventAddress of such
 | |
|  * an event points to a TabletData structure (see below).
 | |
|  *
 | |
|  * The TabletData structure contains certain elements including a taglist.
 | |
|  * The taglist can be used for special tablet parameters.  A tablet driver
 | |
|  * should include only those tag-items the tablet supports.  An application
 | |
|  * can listen for any tag-items that interest it.  Note: an application
 | |
|  * must set the WA_TabletMessages attribute to TRUE to receive this
 | |
|  * extended information in its IntuiMessages.
 | |
|  *
 | |
|  * The definitions given here MUST be followed.  Pay careful attention
 | |
|  * to normalization and the interpretation of signs.
 | |
|  *
 | |
|  * TABLETA_TabletZ:  the current value of the tablet in the Z direction.
 | |
|  * This unsigned value should typically be in the natural units of the
 | |
|  * tablet.  You should also provide TABLETA_RangeZ.
 | |
|  *
 | |
|  * TABLETA_RangeZ:  the maximum value of the tablet in the Z direction.
 | |
|  * Normally specified along with TABLETA_TabletZ, this allows the
 | |
|  * application to scale the actual Z value across its range.
 | |
|  *
 | |
|  * TABLETA_AngleX:  the angle of rotation or tilt about the X-axis.  This
 | |
|  * number should be normalized to fill a signed long Longint.  Positive
 | |
|  * values imply a clockwise rotation about the X-axis when viewing
 | |
|  * from +X towards the origin.
 | |
|  *
 | |
|  * TABLETA_AngleY:  the angle of rotation or tilt about the Y-axis.  This
 | |
|  * number should be normalized to fill a signed long Longint.  Positive
 | |
|  * values imply a clockwise rotation about the Y-axis when viewing
 | |
|  * from +Y towards the origin.
 | |
|  *
 | |
|  * TABLETA_AngleZ:  the angle of rotation or tilt about the Z axis.  This
 | |
|  * number should be normalized to fill a signed long Longint.  Positive
 | |
|  * values imply a clockwise rotation about the Z-axis when viewing
 | |
|  * from +Z towards the origin.
 | |
|  *
 | |
|  *      Note: a stylus that supports tilt should use the TABLETA_AngleX
 | |
|  *      and TABLETA_AngleY attributes.  Tilting the stylus so the tip
 | |
|  *      points towards increasing or decreasing X is actually a rotation
 | |
|  *      around the Y-axis.  Thus, if the stylus tip points towards
 | |
|  *      positive X, then that tilt is represented as a negative
 | |
|  *      TABLETA_AngleY.  Likewise, if the stylus tip points towards
 | |
|  *      positive Y, that tilt is represented by positive TABLETA_AngleX.
 | |
|  *
 | |
|  * TABLETA_Pressure:  the pressure reading of the stylus.  The pressure
 | |
|  * should be normalized to fill a signed long Longint.  Typical devices
 | |
|  * won't generate negative pressure, but the possibility is not precluded.
 | |
|  * The pressure threshold which is considered to cause a button-click is
 | |
|  * expected to be set in a Preferences program supplied by the tablet
 | |
|  * vendor.  The tablet driver would send IECODE_LBUTTON-type events as
 | |
|  * the pressure crossed that threshold.
 | |
|  *
 | |
|  * TABLETA_ButtonBits:  ti_Data is a long Longint whose bits are to
 | |
|  * be interpreted at the state of the first 32 buttons of the tablet.
 | |
|  *
 | |
|  * TABLETA_InProximity:  ti_Data is a boolean.  For tablets that support
 | |
|  * proximity, they should send the (TABLETA_InProximity,FALSE) tag item
 | |
|  * when the stylus is out of proximity.  One possible use we can forsee
 | |
|  * is a mouse-blanking commodity which keys off this to blank the
 | |
|  * mouse.  When this tag is absent, the stylus is assumed to be
 | |
|  * in proximity.
 | |
|  *
 | |
|  * TABLETA_ResolutionX:  ti_Data is an unsigned long Longint which
 | |
|  * is the x-axis resolution in dots per inch.
 | |
|  *
 | |
|  * TABLETA_ResolutionY:  ti_Data is an unsigned long Longint which
 | |
|  * is the y-axis resolution in dots per inch.
 | |
|  }
 | |
| 
 | |
| const
 | |
|  TABLETA_Dummy          = (TAG_USER + $3A000)  ;
 | |
|  TABLETA_TabletZ        = (TABLETA_Dummy + $01);
 | |
|  TABLETA_RangeZ         = (TABLETA_Dummy + $02);
 | |
|  TABLETA_AngleX         = (TABLETA_Dummy + $03);
 | |
|  TABLETA_AngleY         = (TABLETA_Dummy + $04);
 | |
|  TABLETA_AngleZ         = (TABLETA_Dummy + $05);
 | |
|  TABLETA_Pressure       = (TABLETA_Dummy + $06);
 | |
|  TABLETA_ButtonBits     = (TABLETA_Dummy + $07);
 | |
|  TABLETA_InProximity    = (TABLETA_Dummy + $08);
 | |
|  TABLETA_ResolutionX    = (TABLETA_Dummy + $09);
 | |
|  TABLETA_ResolutionY    = (TABLETA_Dummy + $0A);
 | |
| 
 | |
| { If your window sets WA_TabletMessages to TRUE, then it will receive
 | |
|  * extended IntuiMessages (struct ExtIntuiMessage) whose eim_TabletData
 | |
|  * field points at a TabletData structure.  This structure contains
 | |
|  * additional information about the input event.
 | |
|  }
 | |
| 
 | |
| Type
 | |
|  pTabletData = ^tTabletData;
 | |
|  tTabletData = record
 | |
|     { Sub-pixel position of tablet, in screen coordinates,
 | |
|      * scaled to fill a UWORD fraction:
 | |
|      }
 | |
|     td_XFraction, td_YFraction  : WORD;
 | |
| 
 | |
|     { Current tablet coordinates along each axis: }
 | |
|     td_TabletX, td_TabletY      : Cardinal;
 | |
| 
 | |
|     { Tablet range along each axis.  For example, if td_TabletX
 | |
|      * can take values 0-999, td_RangeX should be 1000.
 | |
|      }
 | |
|     td_RangeX, td_RangeY        : Cardinal;
 | |
| 
 | |
|     { Pointer to tag-list of additional tablet attributes.
 | |
|      * See <intuition/intuition.h> for the tag values.
 | |
|      }
 | |
|     td_TagList                  : pTagItem;
 | |
|  end;
 | |
| 
 | |
| { If a tablet driver supplies a hook for ient_CallBack, it will be
 | |
|  * invoked in the standard hook manner.  A0 will point to the Hook
 | |
|  * itself, A2 will point to the InputEvent that was sent, and
 | |
|  * A1 will point to a TabletHookData structure.  The InputEvent's
 | |
|  * ie_EventAddress field points at the IENewTablet structure that
 | |
|  * the driver supplied.
 | |
|  *
 | |
|  * Based on the thd_Screen, thd_Width, and thd_Height fields, the driver
 | |
|  * should scale the ient_TabletX and ient_TabletY fields and store the
 | |
|  * result in ient_ScaledX, ient_ScaledY, ient_ScaledXFraction, and
 | |
|  * ient_ScaledYFraction.
 | |
|  *
 | |
|  * The tablet hook must currently return NULL.  This is the only
 | |
|  * acceptable return-value under V39.
 | |
|  }
 | |
| 
 | |
|  pTabletHookData = ^tTabletHookData;
 | |
|  tTabletHookData = record
 | |
|     { Pointer to the active screen:
 | |
|      * Note: if there are no open screens, thd_Screen will be NULL.
 | |
|      * thd_Width and thd_Height will then describe an NTSC 64$400
 | |
|      * screen.  Please scale accordingly.
 | |
|      }
 | |
|     thd_Screen      : Pointer;
 | |
| 
 | |
|     { The width and height (measured in pixels of the active screen)
 | |
|      * that your are to scale to:
 | |
|      }
 | |
|     thd_Width,
 | |
|     thd_Height      : Cardinal;
 | |
| 
 | |
|     { Non-zero if the screen or something about the screen
 | |
|      * changed since the last time you were invoked:
 | |
|      }
 | |
|     thd_ScreenChanged   : Longint;
 | |
|  end;
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === IntuiMessage ======================================================= }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pIntuiMessage = ^tIntuiMessage;
 | |
|     tIntuiMessage = record
 | |
|         ExecMessage     : tMessage;
 | |
| 
 | |
|     { the Class bits correspond directly with the IDCMP Flags, except for the
 | |
|      * special bit LONELYMESSAGE (defined below)
 | |
|      }
 | |
| 
 | |
|         IClass           : Cardinal;
 | |
| 
 | |
|     { the Code field is for special values like MENU number }
 | |
| 
 | |
|         Code            : Word;
 | |
| 
 | |
|     { the Qualifier field is a copy of the current InputEvent's Qualifier }
 | |
| 
 | |
|         Qualifier       : Word;
 | |
| 
 | |
|     { IAddress contains particular addresses for Intuition functions, like
 | |
|      * the pointer to the Gadget or the Screen
 | |
|      }
 | |
| 
 | |
|         IAddress        : Pointer;
 | |
| 
 | |
|     { when getting mouse movement reports, any event you get will have the
 | |
|      * the mouse coordinates in these variables.  the coordinates are relative
 | |
|      * to the upper-left corner of your Window (GIMMEZEROZERO notwithstanding)
 | |
|      }
 | |
| 
 | |
|         MouseX,
 | |
|         MouseY          : smallint;
 | |
| 
 | |
|     { the time values are copies of the current system clock time.  Micros
 | |
|      * are in units of microseconds, Seconds in seconds.
 | |
|      }
 | |
| 
 | |
|         Seconds,
 | |
|         Micros          : Cardinal;
 | |
| 
 | |
|     { the IDCMPWindow variable will always have the Pointer of the Window of
 | |
|      * this IDCMP
 | |
|      }
 | |
| 
 | |
|         IDCMPWindow     : Pointer;
 | |
| 
 | |
|     { system-use variable }
 | |
| 
 | |
|         SpecialLink     : pIntuiMessage;
 | |
|     end;
 | |
| 
 | |
| { New for V39:
 | |
|  * All IntuiMessages are now slightly extended.  The ExtIntuiMessage
 | |
|  * structure has an additional field for tablet data, which is usually
 | |
|  * NULL.  If a tablet driver which is sending IESUBCLASS_NEWTABLET
 | |
|  * events is installed in the system, windows with the WA_TabletMessages
 | |
|  * property set will find that eim_TabletData points to the TabletData
 | |
|  * structure.  Applications must first check that this field is non-NULL;
 | |
|  * it will be NULL for certain kinds of message, including mouse activity
 | |
|  * generated from other than the tablet (i.e. the keyboard equivalents
 | |
|  * or the mouse itself).
 | |
|  *
 | |
|  * NEVER EVER examine any extended fields when running under pre-V39!
 | |
|  *
 | |
|  * NOTE: This structure is subject to grow in the future.  Making
 | |
|  * assumptions about its size is A BAD IDEA.
 | |
|  }
 | |
| 
 | |
|  pExtIntuiMessage = ^tExtIntuiMessage;
 | |
|  tExtIntuiMessage = record
 | |
|     eim_IntuiMessage  : tIntuiMessage;
 | |
|     eim_TabletData    : pTabletData;
 | |
|  end;
 | |
| 
 | |
| 
 | |
| CONST
 | |
| 
 | |
| { --- IDCMP Classes ------------------------------------------------------ }
 | |
| { Please refer to the Autodoc for OpenWindow() and to the Rom Kernel
 | |
|  * Manual for full details on the IDCMP classes.
 | |
|  }
 | |
|  IDCMP_SIZEVERIFY      =  $00000001;
 | |
|  IDCMP_NEWSIZE         =  $00000002;
 | |
|  IDCMP_REFRESHWINDOW   =  $00000004;
 | |
|  IDCMP_MOUSEBUTTONS    =  $00000008;
 | |
|  IDCMP_MOUSEMOVE       =  $00000010;
 | |
|  IDCMP_GADGETDOWN      =  $00000020;
 | |
|  IDCMP_GADGETUP        =  $00000040;
 | |
|  IDCMP_REQSET          =  $00000080;
 | |
|  IDCMP_MENUPICK        =  $00000100;
 | |
|  IDCMP_CLOSEWINDOW     =  $00000200;
 | |
|  IDCMP_RAWKEY          =  $00000400;
 | |
|  IDCMP_REQVERIFY       =  $00000800;
 | |
|  IDCMP_REQCLEAR        =  $00001000;
 | |
|  IDCMP_MENUVERIFY      =  $00002000;
 | |
|  IDCMP_NEWPREFS        =  $00004000;
 | |
|  IDCMP_DISKINSERTED    =  $00008000;
 | |
|  IDCMP_DISKREMOVED     =  $00010000;
 | |
|  IDCMP_WBENCHMESSAGE   =  $00020000;  {  System use only         }
 | |
|  IDCMP_ACTIVEWINDOW    =  $00040000;
 | |
|  IDCMP_INACTIVEWINDOW  =  $00080000;
 | |
|  IDCMP_DELTAMOVE       =  $00100000;
 | |
|  IDCMP_VANILLAKEY      =  $00200000;
 | |
|  IDCMP_INTUITICKS      =  $00400000;
 | |
| {  for notifications from "boopsi" gadgets               }
 | |
|  IDCMP_IDCMPUPDATE     =  $00800000;  { new for V36      }
 | |
| { for getting help key report during menu session        }
 | |
|  IDCMP_MENUHELP        =  $01000000;  { new for V36      }
 | |
| { for notification of any move/size/zoom/change window   }
 | |
|  IDCMP_CHANGEWINDOW    =  $02000000;  { new for V36      }
 | |
|  IDCMP_GADGETHELP      =  $04000000;  { new for V39      }
 | |
| 
 | |
| { NOTEZ-BIEN:                          $80000000 is reserved for internal use   }
 | |
| 
 | |
| { the IDCMP Flags do not use this special bit, which is cleared when
 | |
|  * Intuition sends its special message to the Task, and set when Intuition
 | |
|  * gets its Message back from the Task.  Therefore, I can check here to
 | |
|  * find out fast whether or not this Message is available for me to send
 | |
|  }
 | |
|  IDCMP_LONELYMESSAGE   =  $80000000;
 | |
| 
 | |
| 
 | |
| { --- IDCMP Codes -------------------------------------------------------- }
 | |
| { This group of codes is for the IDCMP_CHANGEWINDOW message }
 | |
|  CWCODE_MOVESIZE = $0000;  { Window was moved and/or sized }
 | |
|  CWCODE_DEPTH    = $0001;  { Window was depth-arranged (new for V39) }
 | |
| 
 | |
| { This group of codes is for the IDCMP_MENUVERIFY function }
 | |
|  MENUHOT       =  $0001;  { IntuiWants verification OR MENUCANCEL    }
 | |
|  MENUCANCEL    =  $0002;  { HOT Reply of this cancels Menu operation }
 | |
|  MENUWAITING   =  $0003;  { Intuition simply wants a ReplyMsg() ASAP }
 | |
| 
 | |
| { These are internal tokens to represent state of verification attempts
 | |
|  * shown here as a clue.
 | |
|  }
 | |
|  OKOK          =  MENUHOT; { guy didn't care                      }
 | |
|  OKABORT       =  $0004;  { window rendered question moot        }
 | |
|  OKCANCEL      =  MENUCANCEL; { window sent cancel reply          }
 | |
| 
 | |
| { This group of codes is for the IDCMP_WBENCHMESSAGE messages }
 | |
|  WBENCHOPEN    =  $0001;
 | |
|  WBENCHCLOSE   =  $0002;
 | |
| 
 | |
| 
 | |
| { A data structure common in V36 Intuition processing  }
 | |
| Type
 | |
|    pIBox = ^tIBox;
 | |
|    tIBox = record
 | |
|     Left,
 | |
|     Top,
 | |
|     Width,
 | |
|     Height : smallint;
 | |
|    END;
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Window ============================================================= }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pWindow = ^tWindow;
 | |
|     tWindow = record
 | |
|         NextWindow      : pWindow;      { for the linked list in a screen }
 | |
| 
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { screen dimensions of window }
 | |
|         Width,
 | |
|         Height          : smallint;        { screen dimensions of window }
 | |
| 
 | |
|         MouseY,
 | |
|         MouseX          : smallint;        { relative to upper-left of window }
 | |
| 
 | |
|         MinWidth,
 | |
|         MinHeight       : smallint;        { minimum sizes }
 | |
|         MaxWidth,
 | |
|         MaxHeight       : smallint;        { maximum sizes }
 | |
| 
 | |
|         Flags           : Cardinal;      { see below for defines }
 | |
| 
 | |
|         MenuStrip       : pMenu;      { the strip of Menu headers }
 | |
| 
 | |
|         Title           : PChar;       { the title text for this window }
 | |
| 
 | |
|         FirstRequest    : pRequester; { all active Requesters }
 | |
| 
 | |
|         DMRequest       : pRequester; { double-click Requester }
 | |
| 
 | |
|         ReqCount        : smallint;        { count of reqs blocking Window }
 | |
| 
 | |
|         WScreen         : Pointer;      { this Window's Screen }
 | |
|         RPort           : pRastPort;  { this Window's very own RastPort }
 | |
| 
 | |
|     { the border variables describe the window border.   If you specify
 | |
|      * GIMMEZEROZERO when you open the window, then the upper-left of the
 | |
|      * ClipRect for this window will be upper-left of the BitMap (with correct
 | |
|      * offsets when in SuperBitMap mode; you MUST select GIMMEZEROZERO when
 | |
|      * using SuperBitMap).  If you don't specify ZeroZero, then you save
 | |
|      * memory (no allocation of RastPort, Layer, ClipRect and associated
 | |
|      * Bitmaps), but you also must offset all your writes by BorderTop,
 | |
|      * BorderLeft and do your own mini-clipping to prevent writing over the
 | |
|      * system gadgets
 | |
|      }
 | |
| 
 | |
|         BorderLeft,
 | |
|         BorderTop,
 | |
|         BorderRight,
 | |
|         BorderBottom    : Shortint;
 | |
|         BorderRPort     : pRastPort;
 | |
| 
 | |
| 
 | |
|     { You supply a linked-list of Gadgets for your Window.
 | |
|      * This list DOES NOT include system gadgets.  You get the standard
 | |
|      * window system gadgets by setting flag-bits in the variable Flags (see
 | |
|      * the bit definitions below)
 | |
|      }
 | |
| 
 | |
|         FirstGadget     : pGadget;
 | |
| 
 | |
|     { these are for opening/closing the windows }
 | |
| 
 | |
|         Parent,
 | |
|         Descendant      : pWindow;
 | |
| 
 | |
|     { sprite data information for your own Pointer
 | |
|      * set these AFTER you Open the Window by calling SetPointer()
 | |
|      }
 | |
| 
 | |
|         _Pointer         : Pointer;      { sprite data }
 | |
|         PtrHeight       : Shortint;         { sprite height (not including sprite padding) }
 | |
|         PtrWidth        : Shortint;         { sprite width (must be less than or equal to 16) }
 | |
|         XOffset,
 | |
|         YOffset         : Shortint;         { sprite offsets }
 | |
| 
 | |
|     { the IDCMP Flags and User's and Intuition's Message Ports }
 | |
|         IDCMPFlags      : Cardinal;      { User-selected flags }
 | |
|         UserPort,
 | |
|         WindowPort      : pMsgPort;
 | |
|         MessageKey      : pIntuiMessage;
 | |
| 
 | |
|         DetailPen,
 | |
|         BlockPen        : Byte; { for bar/border/gadget rendering }
 | |
| 
 | |
|     { the CheckMark is a pointer to the imagery that will be used when
 | |
|      * rendering MenuItems of this Window that want to be checkmarked
 | |
|      * if this is equal to NULL, you'll get the default imagery
 | |
|      }
 | |
| 
 | |
|         CheckMark       : pImage;
 | |
| 
 | |
|         ScreenTitle     : PChar; { if non-null, Screen title when Window is active }
 | |
| 
 | |
|     { These variables have the mouse coordinates relative to the
 | |
|      * inner-Window of GIMMEZEROZERO Windows.  This is compared with the
 | |
|      * MouseX and MouseY variables, which contain the mouse coordinates
 | |
|      * relative to the upper-left corner of the Window, GIMMEZEROZERO
 | |
|      * notwithstanding
 | |
|      }
 | |
| 
 | |
|         GZZMouseX       : smallint;
 | |
|         GZZMouseY       : smallint;
 | |
| 
 | |
|     { these variables contain the width and height of the inner-Window of
 | |
|      * GIMMEZEROZERO Windows
 | |
|      }
 | |
| 
 | |
|         GZZWidth        : smallint;
 | |
|         GZZHeight       : smallint;
 | |
| 
 | |
|         ExtData         : Pointer;
 | |
| 
 | |
|         UserData        : Pointer;      { general-purpose pointer to User data extension }
 | |
| 
 | |
|     {* jimm: NEW: 11/18/85: this pointer keeps a duplicate of what
 | |
|      * Window.RPort->Layer is _supposed_ to be pointing at
 | |
|      }
 | |
| 
 | |
|         WLayer          : pLayer;
 | |
| 
 | |
|     { jimm: NEW 1.2: need to keep track of the font that
 | |
|      * OpenWindow opened, in case user SetFont's into RastPort
 | |
|      }
 | |
| 
 | |
|         IFont           : pTextFont;
 | |
|     {* (V36) another flag word (the Flags field is used up).
 | |
|      * At present, all flag values are system private.
 | |
|      * Until further notice, you may not change nor use this field.
 | |
|      *}
 | |
|         MoreFlags       : Cardinal;
 | |
| 
 | |
|     {**** Data beyond this point are Intuition Private.  DO NOT USE ****}
 | |
| 
 | |
|     end;
 | |
| 
 | |
| CONST
 | |
| { --- Flags requested at OpenWindow() time by the application --------- }
 | |
|  WFLG_SIZEGADGET   =  $00000001;  { include sizing system-gadget? }
 | |
|  WFLG_DRAGBAR      =  $00000002;  { include dragging system-gadget? }
 | |
|  WFLG_DEPTHGADGET  =  $00000004;  { include depth arrangement gadget? }
 | |
|  WFLG_CLOSEGADGET  =  $00000008;  { include close-box system-gadget? }
 | |
| 
 | |
|  WFLG_SIZEBRIGHT   =  $00000010;  { size gadget uses right border }
 | |
|  WFLG_SIZEBBOTTOM  =  $00000020;  { size gadget uses bottom border }
 | |
| 
 | |
| { --- refresh modes ------------------------------------------------------ }
 | |
| { combinations of the WFLG_REFRESHBITS select the refresh type }
 | |
|  WFLG_REFRESHBITS   = $000000C0;
 | |
|  WFLG_SMART_REFRESH = $00000000;
 | |
|  WFLG_SIMPLE_REFRESH= $00000040;
 | |
|  WFLG_SUPER_BITMAP  = $00000080;
 | |
|  WFLG_OTHER_REFRESH = $000000C0;
 | |
| 
 | |
|  WFLG_BACKDROP      = $00000100;  { this is a backdrop window }
 | |
| 
 | |
|  WFLG_REPORTMOUSE   = $00000200;  { to hear about every mouse move }
 | |
| 
 | |
|  WFLG_GIMMEZEROZERO = $00000400;  { a GimmeZeroZero window       }
 | |
| 
 | |
|  WFLG_BORDERLESS    = $00000800;  { to get a Window sans border }
 | |
| 
 | |
|  WFLG_ACTIVATE      = $00001000;  { when Window opens, it's Active }
 | |
| 
 | |
| 
 | |
| { --- Other User Flags --------------------------------------------------- }
 | |
|  WFLG_RMBTRAP       = $00010000;  { Catch RMB events for your own }
 | |
|  WFLG_NOCAREREFRESH = $00020000;  { not to be bothered with REFRESH }
 | |
| 
 | |
| { - V36 new Flags which the programmer may specify in NewWindow.Flags  }
 | |
|  WFLG_NW_EXTENDED   = $00040000;  { extension data provided      }
 | |
|                                         { see struct ExtNewWindow      }
 | |
| 
 | |
| { - V39 new Flags which the programmer may specify in NewWindow.Flags  }
 | |
|  WFLG_NEWLOOKMENUS  = $00200000;  { window has NewLook menus     }
 | |
| 
 | |
| { These flags are set only by Intuition.  YOU MAY NOT SET THEM YOURSELF! }
 | |
|  WFLG_WINDOWACTIVE  = $00002000;  { this window is the active one }
 | |
|  WFLG_INREQUEST     = $00004000;  { this window is in request mode }
 | |
|  WFLG_MENUSTATE     = $00008000;  { Window is active with Menus on }
 | |
|  WFLG_WINDOWREFRESH = $01000000;  { Window is currently refreshing }
 | |
|  WFLG_WBENCHWINDOW  = $02000000;  { WorkBench tool ONLY Window }
 | |
|  WFLG_WINDOWTICKED  = $04000000;  { only one timer tick at a time }
 | |
| 
 | |
| { --- V36 Flags to be set only by Intuition -------------------------  }
 | |
|  WFLG_VISITOR       = $08000000;  { visitor window               }
 | |
|  WFLG_ZOOMED        = $10000000;  { identifies "zoom state"      }
 | |
|  WFLG_HASZOOM       = $20000000;  { windowhas a zoom gadget      }
 | |
| 
 | |
| { --- Other Window Values ---------------------------------------------- }
 | |
|  DEFAULTMOUSEQUEUE  =     (5);     { no more mouse messages       }
 | |
| 
 | |
| { --- see struct IntuiMessage for the IDCMP Flag definitions ------------- }
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === NewWindow ========================================================== }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pNewWindow = ^tNewWindow;
 | |
|     tNewWindow = record
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { screen dimensions of window }
 | |
|         Width,
 | |
|         Height          : smallint;        { screen dimensions of window }
 | |
| 
 | |
|         DetailPen,
 | |
|         BlockPen        : Byte;         { for bar/border/gadget rendering }
 | |
| 
 | |
|         IDCMPFlags      : Cardinal;      { User-selected IDCMP flags }
 | |
| 
 | |
|         Flags           : Cardinal;      { see Window struct for defines }
 | |
| 
 | |
|     { You supply a linked-list of Gadgets for your Window.
 | |
|      *  This list DOES NOT include system Gadgets.  You get the standard
 | |
|      *  system Window Gadgets by setting flag-bits in the variable Flags (see
 | |
|      *  the bit definitions under the Window structure definition)
 | |
|      }
 | |
| 
 | |
|         FirstGadget     : pGadget;
 | |
| 
 | |
|     { the CheckMark is a pointer to the imagery that will be used when
 | |
|      * rendering MenuItems of this Window that want to be checkmarked
 | |
|      * if this is equal to NULL, you'll get the default imagery
 | |
|      }
 | |
| 
 | |
|         CheckMark       : pImage;
 | |
| 
 | |
|         Title           : PChar;  { the title text for this window }
 | |
| 
 | |
|     { the Screen pointer is used only if you've defined a CUSTOMSCREEN and
 | |
|      * want this Window to open in it.  If so, you pass the Pointer of the
 | |
|      * Custom Screen structure in this variable.  Otherwise, this variable
 | |
|      * is ignored and doesn't have to be initialized.
 | |
|      }
 | |
| 
 | |
|         Screen          : Pointer;
 | |
| 
 | |
|     { SUPER_BITMAP Window?  If so, put the Pointer of your BitMap structure
 | |
|      * in this variable.  If not, this variable is ignored and doesn't have
 | |
|      * to be initialized
 | |
|      }
 | |
| 
 | |
|         BitMap          : pBitMap;
 | |
| 
 | |
|     { the values describe the minimum and maximum sizes of your Windows.
 | |
|      * these matter only if you've chosen the WINDOWSIZING Gadget option,
 | |
|      * which means that you want to let the User to change the size of
 | |
|      * this Window.  You describe the minimum and maximum sizes that the
 | |
|      * Window can grow by setting these variables.  You can initialize
 | |
|      * any one these to zero, which will mean that you want to duplicate
 | |
|      * the setting for that dimension (if MinWidth == 0, MinWidth will be
 | |
|      * set to the opening Width of the Window).
 | |
|      * You can change these settings later using SetWindowLimits().
 | |
|      * If you haven't asked for a SIZING Gadget, you don't have to
 | |
|      * initialize any of these variables.
 | |
|      }
 | |
| 
 | |
|         MinWidth,
 | |
|         MinHeight       : smallint;        { minimums }
 | |
|         MaxWidth,
 | |
|         MaxHeight       : smallint;        { maximums }
 | |
| 
 | |
|     { the type variable describes the Screen in which you want this Window to
 | |
|      * open.  The type value can either be CUSTOMSCREEN or one of the
 | |
|      * system standard Screen Types such as WBENCHSCREEN.  See the
 | |
|      * type definitions under the Screen structure
 | |
|      }
 | |
| 
 | |
|         WType           : Word;        { is "Type" in C includes }
 | |
|     end;
 | |
| 
 | |
| 
 | |
| { The following structure is the future NewWindow.  Compatibility
 | |
|  * issues require that the size of NewWindow not change.
 | |
|  * Data in the common part (NewWindow) indicates the the extension
 | |
|  * fields are being used.
 | |
|  * NOTE WELL: This structure may be subject to future extension.
 | |
|  * Writing code depending on its size is not allowed.
 | |
|  }
 | |
|    pExtNewWindow = ^tExtNewWindow;
 | |
|    tExtNewWindow = record
 | |
|     LeftEdge, TopEdge : smallint;
 | |
|     Width, Height : smallint;
 | |
| 
 | |
|     DetailPen, BlockPen : Byte;
 | |
|     IDCMPFlags    : Cardinal;
 | |
|     Flags         : Cardinal;
 | |
|     FirstGadget   : pGadget;
 | |
| 
 | |
|     CheckMark     : pImage;
 | |
| 
 | |
|     Title         : PChar;
 | |
|     WScreen       : Pointer;
 | |
|     WBitMap       : pBitMap;
 | |
| 
 | |
|     MinWidth, MinHeight : smallint;
 | |
|     MaxWidth, MaxHeight : Word;
 | |
| 
 | |
|     { the type variable describes the Screen in which you want this Window to
 | |
|      * open.  The type value can either be CUSTOMSCREEN or one of the
 | |
|      * system standard Screen Types such as WBENCHSCREEN.  See the
 | |
|      * type definitions under the Screen structure.
 | |
|      * A new possible value for this field is PUBLICSCREEN, which
 | |
|      * defines the window as a 'visitor' window.  See below for
 | |
|      * additional information provided.
 | |
|      }
 | |
|     WType  : Word;
 | |
| 
 | |
|     { ------------------------------------------------------- *
 | |
|      * extensions for V36
 | |
|      * if the NewWindow Flag value WFLG_NW_EXTENDED is set, then
 | |
|      * this field is assumed to point to an array ( or chain of arrays)
 | |
|      * of TagItem structures.  See also ExtNewScreen for another
 | |
|      * use of TagItems to pass optional data.
 | |
|      *
 | |
|      * see below for tag values and the corresponding data.
 | |
|      }
 | |
|     Extension : pTagItem;
 | |
|   END;
 | |
| 
 | |
| {
 | |
|  * The TagItem ID's (ti_Tag values) for OpenWindowTagList() follow.
 | |
|  * They are values in a TagItem array passed as extension/replacement
 | |
|  * values for the data in NewWindow.  OpenWindowTagList() can actually
 | |
|  * work well with a NULL NewWindow pointer.
 | |
|  }
 | |
| CONST
 | |
|  WA_Dummy     =   (TAG_USER + 99); { $80000063   }
 | |
| 
 | |
| { these tags simply override NewWindow parameters }
 | |
|  WA_Left               =  (WA_Dummy + $01);
 | |
|  WA_Top                =  (WA_Dummy + $02);
 | |
|  WA_Width              =  (WA_Dummy + $03);
 | |
|  WA_Height             =  (WA_Dummy + $04);
 | |
|  WA_DetailPen          =  (WA_Dummy + $05);
 | |
|  WA_BlockPen           =  (WA_Dummy + $06);
 | |
|  WA_IDCMP              =  (WA_Dummy + $07);
 | |
|                         { "bulk" initialization of NewWindow.Flags }
 | |
|  WA_Flags              =  (WA_Dummy + $08);
 | |
|  WA_Gadgets            =  (WA_Dummy + $09);
 | |
|  WA_Checkmark          =  (WA_Dummy + $0A);
 | |
|  WA_Title              =  (WA_Dummy + $0B);
 | |
|                         { means you don't have to call SetWindowTitles
 | |
|                          * after you open your window
 | |
|                          }
 | |
|  WA_ScreenTitle        =  (WA_Dummy + $0C);
 | |
|  WA_CustomScreen       =  (WA_Dummy + $0D);
 | |
|  WA_SuperBitMap        =  (WA_Dummy + $0E);
 | |
|                         { also implies WFLG_SUPER_BITMAP property      }
 | |
|  WA_MinWidth           =  (WA_Dummy + $0F);
 | |
|  WA_MinHeight          =  (WA_Dummy + $10);
 | |
|  WA_MaxWidth           =  (WA_Dummy + $11);
 | |
|  WA_MaxHeight          =  (WA_Dummy + $12);
 | |
| 
 | |
| { The following are specifications for new features    }
 | |
| 
 | |
|  WA_InnerWidth         =  (WA_Dummy + $13);
 | |
|  WA_InnerHeight        =  (WA_Dummy + $14);
 | |
|                         { You can specify the dimensions of the interior
 | |
|                          * region of your window, independent of what
 | |
|                          * the border widths will be.  You probably want
 | |
|                          * to also specify WA_AutoAdjust to allow
 | |
|                          * Intuition to move your window or even
 | |
|                          * shrink it so that it is completely on screen.
 | |
|                          }
 | |
| 
 | |
|  WA_PubScreenName      =  (WA_Dummy + $15);
 | |
|                         { declares that you want the window to open as
 | |
|                          * a visitor on the public screen whose name is
 | |
|                          * pointed to by (UBYTE *) ti_Data
 | |
|                          }
 | |
|  WA_PubScreen          =  (WA_Dummy + $16);
 | |
|                         { open as a visitor window on the public screen
 | |
|                          * whose Pointer is in (struct Screen *) ti_Data.
 | |
|                          * To ensure that this screen remains open, you
 | |
|                          * should either be the screen's owner, have a
 | |
|                          * window open on the screen, or use LockPubScreen().
 | |
|                          }
 | |
|  WA_PubScreenFallBack  =  (WA_Dummy + $17);
 | |
|                         { A Boolean, specifies whether a visitor window
 | |
|                          * should "fall back" to the default public screen
 | |
|                          * (or Workbench) if the named public screen isn't
 | |
|                          * available
 | |
|                          }
 | |
|  WA_WindowName         =  (WA_Dummy + $18);
 | |
|                         { not implemented      }
 | |
|  WA_Colors             =  (WA_Dummy + $19);
 | |
|                         { a ColorSpec array for colors to be set
 | |
|                          * when this window is active.  This is not
 | |
|                          * implemented, and may not be, since the default
 | |
|                          * values to restore would be hard to track.
 | |
|                          * We'd like to at least support per-window colors
 | |
|                          * for the mouse pointer sprite.
 | |
|                          }
 | |
|  WA_Zoom       =  (WA_Dummy + $1A);
 | |
|                         { ti_Data points to an array of four WORD's,
 | |
|                          * the initial Left/Top/Width/Height values of
 | |
|                          * the "alternate" zoom position/dimensions.
 | |
|                          * It also specifies that you want a Zoom gadget
 | |
|                          * for your window, whether or not you have a
 | |
|                          * sizing gadget.
 | |
|                          }
 | |
|  WA_MouseQueue         =  (WA_Dummy + $1B);
 | |
|                         { ti_Data contains initial value for the mouse
 | |
|                          * message backlog limit for this window.
 | |
|                          }
 | |
|  WA_BackFill           =  (WA_Dummy + $1C);
 | |
|                         { unimplemented at present: provides a "backfill
 | |
|                          * hook" for your window's layer.
 | |
|                          }
 | |
|  WA_RptQueue           =  (WA_Dummy + $1D);
 | |
|                         { initial value of repeat key backlog limit    }
 | |
| 
 | |
|     { These Boolean tag items are alternatives to the NewWindow.Flags
 | |
|      * boolean flags with similar names.
 | |
|      }
 | |
|  WA_SizeGadget         =  (WA_Dummy + $1E);
 | |
|  WA_DragBar            =  (WA_Dummy + $1F);
 | |
|  WA_DepthGadget        =  (WA_Dummy + $20);
 | |
|  WA_CloseGadget        =  (WA_Dummy + $21);
 | |
|  WA_Backdrop           =  (WA_Dummy + $22);
 | |
|  WA_ReportMouse        =  (WA_Dummy + $23);
 | |
|  WA_NoCareRefresh      =  (WA_Dummy + $24);
 | |
|  WA_Borderless         =  (WA_Dummy + $25);
 | |
|  WA_Activate           =  (WA_Dummy + $26);
 | |
|  WA_RMBTrap            =  (WA_Dummy + $27);
 | |
|  WA_WBenchWindow       =  (WA_Dummy + $28);       { PRIVATE!! }
 | |
|  WA_SimpleRefresh      =  (WA_Dummy + $29);
 | |
|                         { only specify if TRUE }
 | |
|  WA_SmartRefresh       =  (WA_Dummy + $2A);
 | |
|                         { only specify if TRUE }
 | |
|  WA_SizeBRight         =  (WA_Dummy + $2B);
 | |
|  WA_SizeBBottom        =  (WA_Dummy + $2C);
 | |
| 
 | |
|     { New Boolean properties   }
 | |
|  WA_AutoAdjust         =  (WA_Dummy + $2D);
 | |
|                         { shift or squeeze the window's position and
 | |
|                          * dimensions to fit it on screen.
 | |
|                          }
 | |
| 
 | |
|  WA_GimmeZeroZero      =  (WA_Dummy + $2E);
 | |
|                         { equiv. to NewWindow.Flags WFLG_GIMMEZEROZERO }
 | |
| 
 | |
| { New for V37: WA_MenuHelp (ignored by V36) }
 | |
|  WA_MenuHelp           =  (WA_Dummy + $2F);
 | |
|                         { Enables IDCMP_MENUHELP:  Pressing HELP during menus
 | |
|                          * will return IDCMP_MENUHELP message.
 | |
|                          }
 | |
| 
 | |
| { New for V39:  (ignored by V37 and earlier) }
 | |
|  WA_NewLookMenus       =  (WA_Dummy + $30);
 | |
|                         { Set to TRUE if you want NewLook menus }
 | |
|  WA_AmigaKey           =  (WA_Dummy + $31);
 | |
|                         { Pointer to image for Amiga-key equiv in menus }
 | |
|  WA_NotifyDepth        =  (WA_Dummy + $32);
 | |
|                         { Requests IDCMP_CHANGEWINDOW message when
 | |
|                          * window is depth arranged
 | |
|                          * (imsg->Code = CWCODE_DEPTH)
 | |
|                          }
 | |
| 
 | |
| { WA_Dummy + $33 is obsolete }
 | |
| 
 | |
|  WA_Pointer            =  (WA_Dummy + $34);
 | |
|                         { Allows you to specify a custom pointer
 | |
|                          * for your window.  ti_Data points to a
 | |
|                          * pointer object you obtained via
 | |
|                          * "pointerclass". NULL signifies the
 | |
|                          * default pointer.
 | |
|                          * This tag may be passed to OpenWindowTags()
 | |
|                          * or SetWindowPointer().
 | |
|                          }
 | |
| 
 | |
|  WA_BusyPointer        =  (WA_Dummy + $35);
 | |
|                         { ti_Data is boolean.  Set to TRUE to
 | |
|                          * request the standard busy pointer.
 | |
|                          * This tag may be passed to OpenWindowTags()
 | |
|                          * or SetWindowPointer().
 | |
|                          }
 | |
| 
 | |
|  WA_PointerDelay       =  (WA_Dummy + $36);
 | |
|                         { ti_Data is boolean.  Set to TRUE to
 | |
|                          * request that the changing of the
 | |
|                          * pointer be slightly delayed.  The change
 | |
|                          * will be called off if you call NewSetPointer()
 | |
|                          * before the delay expires.  This allows
 | |
|                          * you to post a busy-pointer even if you think
 | |
|                          * the busy-time may be very Word, without
 | |
|                          * fear of a flashing pointer.
 | |
|                          * This tag may be passed to OpenWindowTags()
 | |
|                          * or SetWindowPointer().
 | |
|                          }
 | |
| 
 | |
|  WA_TabletMessages     =  (WA_Dummy + $37);
 | |
|                         { ti_Data is a boolean.  Set to TRUE to
 | |
|                          * request that tablet information be included
 | |
|                          * in IntuiMessages sent to your window.
 | |
|                          * Requires that something (i.e. a tablet driver)
 | |
|                          * feed IESUBCLASS_NEWTABLET InputEvents into
 | |
|                          * the system.  For a pointer to the TabletData,
 | |
|                          * examine the ExtIntuiMessage->eim_TabletData
 | |
|                          * field.  It is UNSAFE to check this field
 | |
|                          * when running on pre-V39 systems.  It's always
 | |
|                          * safe to check this field under V39 and up,
 | |
|                          * though it may be NULL.
 | |
|                          }
 | |
| 
 | |
|  WA_HelpGroup          =  (WA_Dummy + $38);
 | |
|                         { When the active window has gadget help enabled,
 | |
|                          * other windows of the same HelpGroup number
 | |
|                          * will also get GadgetHelp.  This allows GadgetHelp
 | |
|                          * to work for multi-windowed applications.
 | |
|                          * Use GetGroupID() to get an ID number.  Pass
 | |
|                          * this number as ti_Data to all your windows.
 | |
|                          * See also the HelpControl() function.
 | |
|                          }
 | |
| 
 | |
|  WA_HelpGroupWindow    =  (WA_Dummy + $39);
 | |
|                         { When the active window has gadget help enabled,
 | |
|                          * other windows of the same HelpGroup will also get
 | |
|                          * GadgetHelp.  This allows GadgetHelp to work
 | |
|                          * for multi-windowed applications.  As an alternative
 | |
|                          * to WA_HelpGroup, you can pass a pointer to any
 | |
|                          * other window of the same group to join its help
 | |
|                          * group.  Defaults to NULL, which has no effect.
 | |
|                          * See also the HelpControl() function.
 | |
|                          }
 | |
| 
 | |
| 
 | |
| { HelpControl() flags:
 | |
|  *
 | |
|  * HC_GADGETHELP - Set this flag to enable Gadget-Help for one or more
 | |
|  * windows.
 | |
|  }
 | |
| 
 | |
|  HC_GADGETHELP  = 1;
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Remember =========================================================== }
 | |
| { ======================================================================== }
 | |
| { this structure is used for remembering what memory has been allocated to
 | |
|  * date by a given routine, so that a premature abort or systematic exit
 | |
|  * can deallocate memory cleanly, easily, and completely
 | |
|  }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pRemember = ^tRemember;
 | |
|     tRemember = record
 | |
|         NextRemember    : pRemember;
 | |
|         RememberSize    : Cardinal;
 | |
|         Memory          : Pointer;
 | |
|     end;
 | |
| 
 | |
| 
 | |
| { === Color Spec ====================================================== }
 | |
| { How to tell Intuition about RGB values for a color table entry. }
 | |
| 
 | |
|   pColorSpec = ^tColorSpec;
 | |
|   tColorSpec = record
 | |
|     ColorIndex  : smallint;     { -1 terminates an array of ColorSpec  }
 | |
|     Red         : Word;     { only the _bottom_ 4 bits recognized }
 | |
|     Green       : Word;     { only the _bottom_ 4 bits recognized }
 | |
|     Blue        : Word;     { only the _bottom_ 4 bits recognized }
 | |
|   END;
 | |
| 
 | |
| { === Easy Requester Specification ======================================= }
 | |
| { see also autodocs for EasyRequest and BuildEasyRequest       }
 | |
| { NOTE: This structure may grow in size in the future          }
 | |
| 
 | |
|    pEasyStruct = ^tEasyStruct;
 | |
|    tEasyStruct = record
 | |
|     es_StructSize   : Cardinal;  { should be sizeof (struct EasyStruct )}
 | |
|     es_Flags        : Cardinal;  { should be 0 for now                  }
 | |
|     es_Title        : PChar;   { title of requester window            }
 | |
|     es_TextFormat   : PChar;   { 'printf' style formatting string     }
 | |
|     es_GadgetFormat : PChar;   { 'printf' style formatting string   }
 | |
|    END;
 | |
| 
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Miscellaneous ====================================================== }
 | |
| { ======================================================================== }
 | |
| CONST
 | |
| { = MENU STUFF =========================================================== }
 | |
|     NOMENU      = $001F;
 | |
|     NOITEM      = $003F;
 | |
|     NOSUB       = $001F;
 | |
|     MENUNULL    = -1;
 | |
| 
 | |
| 
 | |
| { = =RJ='s peculiarities ================================================= }
 | |
| 
 | |
| { these defines are for the COMMSEQ and CHECKIT menu stuff.  If CHECKIT,
 | |
|  * I'll use a generic Width (for all resolutions) for the CheckMark.
 | |
|  * If COMMSEQ, likewise I'll use this generic stuff
 | |
|  }
 | |
| 
 | |
|     CHECKWIDTH          = 19;
 | |
|     COMMWIDTH           = 27;
 | |
|     LOWCHECKWIDTH       = 13;
 | |
|     LOWCOMMWIDTH        = 16;
 | |
| 
 | |
| { these are the AlertNumber defines.  if you are calling DisplayAlert()
 | |
|  * the AlertNumber you supply must have the ALERT_TYPE bits set to one
 | |
|  * of these patterns
 | |
|  }
 | |
| 
 | |
|     ALERT_TYPE          = $80000000;
 | |
|     RECOVERY_ALERT      = $00000000;    { the system can recover from this }
 | |
|     DEADEND_ALERT       = $80000000;    { no recovery possible, this is it }
 | |
| 
 | |
| 
 | |
| { When you're defining IntuiText for the Positive and Negative Gadgets
 | |
|  * created by a call to AutoRequest(), these defines will get you
 | |
|  * reasonable-looking text.  The only field without a define is the IText
 | |
|  * field; you decide what text goes with the Gadget
 | |
|  }
 | |
| 
 | |
|     AUTOFRONTPEN        = 0;
 | |
|     AUTOBACKPEN         = 1;
 | |
|     AUTODRAWMODE        = JAM2;
 | |
|     AUTOLEFTEDGE        = 6;
 | |
|     AUTOTOPEDGE         = 3;
 | |
| 
 | |
| { -
 | |
|     AUTOITEXTFONT       = Nil;
 | |
|     AUTONEXTTEXT        = Nil;
 | |
| - }
 | |
| 
 | |
| 
 | |
| { --- RAWMOUSE Codes and Qualifiers (Console OR IDCMP) ------------------- }
 | |
| 
 | |
| 
 | |
|     SELECTUP            = IECODE_LBUTTON + IECODE_UP_PREFIX;
 | |
|     SELECTDOWN          = IECODE_LBUTTON;
 | |
|     MENUUP              = IECODE_RBUTTON + IECODE_UP_PREFIX;
 | |
|     MENUDOWN            = IECODE_RBUTTON;
 | |
|     ALTLEFT             = IEQUALIFIER_LALT;
 | |
|     ALTRIGHT            = IEQUALIFIER_RALT;
 | |
|     AMIGALEFT           = IEQUALIFIER_LCOMMAND;
 | |
|     AMIGARIGHT          = IEQUALIFIER_RCOMMAND;
 | |
|     AMIGAKEYS           = AMIGALEFT + AMIGARIGHT;
 | |
| 
 | |
|     CURSORUP            = $4C;
 | |
|     CURSORLEFT          = $4F;
 | |
|     CURSORRIGHT         = $4E;
 | |
|     CURSORDOWN          = $4D;
 | |
|     KEYCODE_Q           = $10;
 | |
|     KEYCODE_X           = $32;
 | |
|     KEYCODE_N           = $36;
 | |
|     KEYCODE_M           = $37;
 | |
|     KEYCODE_V           = $34;
 | |
|     KEYCODE_B           = $35;
 | |
|     KEYCODE_LESS        = $38;
 | |
|     KEYCODE_GREATER     = $39;
 | |
| 
 | |
| { these are the display modes for which we have corresponding parameter
 | |
|  *  settings in the config arrays
 | |
|  }
 | |
| CONST
 | |
|  DMODECOUNT    =  $0002;  { how many modes there are }
 | |
|  HIRESPICK     =  $0000;
 | |
|  LOWRESPICK    =  $0001;
 | |
| 
 | |
|  EVENTMAX = 10;             { size of event array }
 | |
| 
 | |
| { these are the system Gadget defines }
 | |
|  RESCOUNT       = 2;
 | |
|  HIRESGADGET    = 0;
 | |
|  LOWRESGADGET   = 1;
 | |
| 
 | |
|  GADGETCOUNT    = 8;
 | |
|  UPFRONTGADGET  = 0;
 | |
|  DOWNBACKGADGET = 1;
 | |
|  SIZEGADGET     = 2;
 | |
|  CLOSEGADGET    = 3;
 | |
|  DRAGGADGET     = 4;
 | |
|  SUPFRONTGADGET = 5;
 | |
|  SDOWNBACKGADGET= 6;
 | |
|  SDRAGGADGET    = 7;
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === DrawInfo ========================================================= }
 | |
| { ======================================================================== }
 | |
| 
 | |
| { This is a packet of information for graphics rendering.  It originates
 | |
|  * with a Screen, and is gotten using GetScreenDrawInfo( screen );
 | |
|  }
 | |
| 
 | |
| { If you find dri_Version >= DRI_VERSION, you know this structure
 | |
|  * has at least the fields defined in this version of the include file
 | |
|  }
 | |
| CONST
 | |
|  RI_VERSION  =    (1);     { obsolete, will be removed            }
 | |
|  DRI_VERSION =    (1);
 | |
| 
 | |
| Type
 | |
| 
 | |
|  pDrawInfo = ^tDrawInfo;
 | |
|  tDrawInfo = record
 | |
|     dri_Version : Word;    { will be  DRI_VERSION                 }
 | |
|     dri_NumPens : Word;    { guaranteed to be >= numDrIPens       }
 | |
|     dri_Pens    : Pointer;  { pointer to pen array                 }
 | |
| 
 | |
|     dri_Font    : pTextFont;      { screen default font          }
 | |
|     dri_Depth   : Word;            { (initial) depth of screen bitmap     }
 | |
| 
 | |
|     dri_Resolution : record      { from DisplayInfo database for initial display mode }
 | |
|                    x : word;
 | |
|                    y : word;
 | |
|                    end;
 | |
| 
 | |
|     dri_Flags : Cardinal;              { defined below                }
 | |
| { New for V39: dri_CheckMark, dri_AmigaKey. }
 | |
|     dri_CheckMark : pImage; { ImagePtr }         { pointer to scaled checkmark image
 | |
|                                                   * Will be NULL if DRI_VERSION < 2
 | |
|                                                   }
 | |
|     dri_AmigaKey  : pImage; { ImagePtr }    { pointer to scaled Amiga-key image
 | |
|                                              * Will be NULL if DRI_VERSION < 2
 | |
|                                              }
 | |
| 
 | |
|     dri_Reserved : Array[0..4] of Cardinal;        { avoid recompilation ;^)      }
 | |
|  END;
 | |
| 
 | |
| CONST
 | |
|  DRIF_NEWLOOK =   $00000001;      { specified SA_Pens, full treatment }
 | |
| 
 | |
| { rendering pen number indexes into DrawInfo.dri_Pens[]        }
 | |
|  DETAILPEN    =    ($0000);       { compatible Intuition rendering pens  }
 | |
|  BLOCKPEN     =    ($0001);       { compatible Intuition rendering pens  }
 | |
|  TEXTPEN      =    ($0002);       { text on background                   }
 | |
|  SHINEPEN     =    ($0003);       { bright edge on 3D objects            }
 | |
|  SHADOWPEN    =    ($0004);       { dark edge on 3D objects              }
 | |
|  FILLPEN      =    ($0005);       { active-window/selected-gadget fill   }
 | |
|  FILLTEXTPEN  =    ($0006);       { text over FILLPEN                    }
 | |
|  BACKGROUNDPEN =   ($0007);       { always color 0                       }
 | |
|  HIGHLIGHTTEXTPEN = ($0008);       { special color text, on background    }
 | |
| { New for V39, only present if DRI_VERSION >= 2: }
 | |
|  BARDETAILPEN   =  ($0009);       { text/detail in screen-bar/menus }
 | |
|  BARBLOCKPEN    =  ($000A);       { screen-bar/menus fill }
 | |
|  BARTRIMPEN     =  ($000B);       { trim under screen-bar }
 | |
| 
 | |
|  NUMDRIPENS   =    ($0009);
 | |
| 
 | |
| { New for V39:  It is sometimes useful to specify that a pen value
 | |
|  * is to be the complement of color zero to three.  The "magic" numbers
 | |
|  * serve that purpose:
 | |
|  }
 | |
|  PEN_C3        =  $FEFC;          { Complement of color 3 }
 | |
|  PEN_C2        =  $FEFD;          { Complement of color 2 }
 | |
|  PEN_C1        =  $FEFE;          { Complement of color 1 }
 | |
|  PEN_C0        =  $FEFF;          { Complement of color 0 }
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Screen ============================================================= }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pScreen = ^tScreen;
 | |
|     tScreen = record
 | |
|         NextScreen      : pScreen;      { linked list of screens }
 | |
|         FirstWindow     : pWindow;      { linked list Screen's Windows }
 | |
| 
 | |
|         LeftEdge,
 | |
|         TopEdge         : smallint;        { parameters of the screen }
 | |
|         Width,
 | |
|         Height          : smallint;        { parameters of the screen }
 | |
| 
 | |
|         MouseY,
 | |
|         MouseX          : smallint;        { position relative to upper-left }
 | |
| 
 | |
|         Flags           : Word;        { see definitions below }
 | |
| 
 | |
|         Title           : PChar;       { null-terminated Title text }
 | |
|         DefaultTitle    : PChar;       { for Windows without ScreenTitle }
 | |
| 
 | |
|     { Bar sizes for this Screen and all Window's in this Screen }
 | |
|         BarHeight,
 | |
|         BarVBorder,
 | |
|         BarHBorder,
 | |
|         MenuVBorder,
 | |
|         MenuHBorder     : Shortint;
 | |
|         WBorTop,
 | |
|         WBorLeft,
 | |
|         WBorRight,
 | |
|         WBorBottom      : Shortint;
 | |
| 
 | |
|         Font            : pTextAttr;  { this screen's default font       }
 | |
| 
 | |
|     { the display data structures for this Screen (note the prefix S)}
 | |
|         ViewPort        : tViewPort;     { describing the Screen's display }
 | |
|         RastPort        : tRastPort;     { describing Screen rendering      }
 | |
|         BitMap          : tBitMap;       { extra copy of RastPort BitMap   }
 | |
|         LayerInfo       : tLayer_Info;   { each screen gets a LayerInfo     }
 | |
| 
 | |
|     { You supply a linked-list of Gadgets for your Screen.
 | |
|      *  This list DOES NOT include system Gadgets.  You get the standard
 | |
|      *  system Screen Gadgets by default
 | |
|      }
 | |
| 
 | |
|         FirstGadget     : pGadget;
 | |
| 
 | |
|         DetailPen,
 | |
|         BlockPen        : Byte;         { for bar/border/gadget rendering }
 | |
| 
 | |
|     { the following variable(s) are maintained by Intuition to support the
 | |
|      * DisplayBeep() color flashing technique
 | |
|      }
 | |
|         SaveColor0      : Word;
 | |
| 
 | |
|     { This layer is for the Screen and Menu bars }
 | |
|         BarLayer        : pLayer;
 | |
| 
 | |
|         ExtData         : Pointer;
 | |
|         UserData        : Pointer;
 | |
|                         { general-purpose pointer to User data extension }
 | |
|     {**** Data below this point are SYSTEM PRIVATE ****}
 | |
| 
 | |
|     end;
 | |
| 
 | |
| Const
 | |
| 
 | |
| { The screen flags have the suffix "_f" added to avoid conflicts with
 | |
|   routine names. }
 | |
| 
 | |
| { --- FLAGS SET BY INTUITION --------------------------------------------- }
 | |
| { The SCREENTYPE bits are reserved for describing various Screen types
 | |
|  * available under Intuition.
 | |
|  }
 | |
|     SCREENTYPE_f        = $000F;        { all the screens types available       }
 | |
| { --- the definitions for the Screen Type ------------------------------- }
 | |
|     WBENCHSCREEN_f      = $0001;        { Ta Da!  The Workbench         }
 | |
|     CUSTOMSCREEN_f      = $000F;        { for that special look         }
 | |
| 
 | |
|     SHOWTITLE_f         = $0010;        { this gets set by a call to ShowTitle() }
 | |
| 
 | |
|     BEEPING_f           = $0020;        { set when Screen is beeping            }
 | |
| 
 | |
|     CUSTOMBITMAP_f      = $0040;        { if you are supplying your own BitMap }
 | |
| 
 | |
|     SCREENBEHIND_f      = $0080;        { if you want your screen to open behind
 | |
|                                          * already open screens
 | |
|                                          }
 | |
|     SCREENQUIET_f       = $0100;        { if you do not want Intuition to render
 | |
|                                          * into your screen (gadgets, title)     }
 | |
|     SCREENHIRES         = $0200;        { do no use lowres gadgets (private)       }
 | |
| 
 | |
|     NS_EXTENDED         = $1000;          { ExtNewScreen.Extension is valid      }
 | |
|     { V36 applications can use OpenScreenTagList() instead of NS_EXTENDED  }
 | |
| 
 | |
| { New for V39: }
 | |
|     PENSHARED           = $0400;  { Screen opener set (SA_SharePens,TRUE) }
 | |
| 
 | |
| 
 | |
|     AUTOSCROLL          = $4000;  { screen is to autoscoll               }
 | |
| 
 | |
|     STDSCREENHEIGHT     = -1;           { supply in NewScreen.Height            }
 | |
|     STDSCREENWIDTH      = -1;           { supply in NewScreen.Width             }
 | |
| 
 | |
| 
 | |
| 
 | |
| {
 | |
|  * Screen attribute tag ID's.  These are used in the ti_Tag field of
 | |
|  * TagItem arrays passed to OpenScreenTagList() (or in the
 | |
|  * ExtNewScreen.Extension field).
 | |
|  }
 | |
| 
 | |
| { Screen attribute tags.  Please use these versions, not those in
 | |
|  * iobsolete.h.
 | |
|  }
 | |
| CONST
 | |
|   SA_Dummy    =    (TAG_USER + 32);
 | |
| {
 | |
|  * these items specify items equivalent to fields in NewScreen
 | |
|  }
 | |
|  SA_Left     =    (SA_Dummy + $0001);
 | |
|  SA_Top      =    (SA_Dummy + $0002);
 | |
|  SA_Width    =    (SA_Dummy + $0003);
 | |
|  SA_Height   =    (SA_Dummy + $0004);
 | |
|                         { traditional screen positions and dimensions  }
 | |
|  SA_Depth    =    (SA_Dummy + $0005);
 | |
|                         { screen bitmap depth                          }
 | |
|  SA_DetailPen=    (SA_Dummy + $0006);
 | |
|                         { serves as default for windows, too           }
 | |
|  SA_BlockPen =    (SA_Dummy + $0007);
 | |
|  SA_Title    =    (SA_Dummy + $0008);
 | |
|                         { default screen title                         }
 | |
|  SA_Colors   =    (SA_Dummy + $0009);
 | |
|                         { ti_Data is an array of struct ColorSpec,
 | |
|                          * terminated by ColorIndex = -1.  Specifies
 | |
|                          * initial screen palette colors.
 | |
|                          }
 | |
|  SA_ErrorCode=    (SA_Dummy + $000A);
 | |
|                         { ti_Data points to LONG error code (values below)}
 | |
|  SA_Font     =    (SA_Dummy + $000B);
 | |
|                         { equiv. to NewScreen.Font                     }
 | |
|  SA_SysFont  =    (SA_Dummy + $000C);
 | |
|                         { Selects one of the preferences system fonts:
 | |
|                          *      0 - old DefaultFont, fixed-width
 | |
|                          *      1 - WB Screen preferred font
 | |
|                          }
 | |
|  SA_Type     =    (SA_Dummy + $000D);
 | |
|                         { equiv. to NewScreen.Type                     }
 | |
|  SA_BitMap   =    (SA_Dummy + $000E);
 | |
|                         { ti_Data is pointer to custom BitMap.  This
 | |
|                          * implies type of CUSTOMBITMAP
 | |
|                          }
 | |
|  SA_PubName  =    (SA_Dummy + $000F);
 | |
|                         { presence of this tag means that the screen
 | |
|                          * is to be a public screen.  Please specify
 | |
|                          * BEFORE the two tags below
 | |
|                          }
 | |
|  SA_PubSig   =    (SA_Dummy + $0010);
 | |
|  SA_PubTask  =    (SA_Dummy + $0011);
 | |
|                         { Task ID and signal for being notified that
 | |
|                          * the last window has closed on a public screen.
 | |
|                          }
 | |
|  SA_DisplayID=    (SA_Dummy + $0012);
 | |
|                         { ti_Data is new extended display ID from
 | |
|                          * <graphics/displayinfo.h>.
 | |
|                          }
 | |
|  SA_DClip    =    (SA_Dummy + $0013);
 | |
|                         { ti_Data points to a rectangle which defines
 | |
|                          * screen display clip region
 | |
|                          }
 | |
|  SA_Overscan =    (SA_Dummy + $0014);
 | |
|                         { was S_STDDCLIP.  Set to one of the OSCAN_
 | |
|                          * specifiers below to get a system standard
 | |
|                          * overscan region for your display clip,
 | |
|                          * screen dimensions (unless otherwise specified),
 | |
|                          * and automatically centered position (partial
 | |
|                          * support only so far).
 | |
|                          * If you use this, you shouldn't specify
 | |
|                          * SA_DClip.  SA_Overscan is for "standard"
 | |
|                          * overscan dimensions, SA_DClip is for
 | |
|                          * your custom numeric specifications.
 | |
|                          }
 | |
|  SA_Obsolete1=    (SA_Dummy + $0015);
 | |
|                         { obsolete S_MONITORNAME                       }
 | |
| 
 | |
| {* booleans *}
 | |
|  SA_ShowTitle  =  (SA_Dummy + $0016);
 | |
|                         { boolean equivalent to flag SHOWTITLE         }
 | |
|  SA_Behind     =  (SA_Dummy + $0017);
 | |
|                         { boolean equivalent to flag SCREENBEHIND      }
 | |
|  SA_Quiet      =  (SA_Dummy + $0018);
 | |
|                         { boolean equivalent to flag SCREENQUIET       }
 | |
|  SA_AutoScroll =  (SA_Dummy + $0019);
 | |
|                         { boolean equivalent to flag AUTOSCROLL        }
 | |
|  SA_Pens       =  (SA_Dummy + $001A);
 | |
|                         { pointer to ~0 terminated UWORD array, as
 | |
|                          * found in struct DrawInfo
 | |
|                          }
 | |
|  SA_FullPalette=  (SA_Dummy + $001B);
 | |
|                         { boolean: initialize color table to entire
 | |
|                          *  preferences palette (32 for V36), rather
 | |
|                          * than compatible pens 0-3, 17-19, with
 | |
|                          * remaining palette as returned by GetColorMap()
 | |
|                          }
 | |
| 
 | |
|  SA_ColorMapEntries = (SA_Dummy + $001C);
 | |
|                         { New for V39:
 | |
|                          * Allows you to override the number of entries
 | |
|                          * in the ColorMap for your screen.  Intuition
 | |
|                          * normally allocates (1<<depth) or 32, whichever
 | |
|                          * is more, but you may require even more if you
 | |
|                          * use certain V39 graphics.library features
 | |
|                          * (eg. palette-banking).
 | |
|                          }
 | |
| 
 | |
|  SA_Parent      = (SA_Dummy + $001D);
 | |
|                         { New for V39:
 | |
|                          * ti_Data is a pointer to a "parent" screen to
 | |
|                          * attach this one to.  Attached screens slide
 | |
|                          * and depth-arrange together.
 | |
|                          }
 | |
| 
 | |
|  SA_Draggable   = (SA_Dummy + $001E);
 | |
|                         { New for V39:
 | |
|                          * Boolean tag allowing non-draggable screens.
 | |
|                          * Do not use without good reason!
 | |
|                          * (Defaults to TRUE).
 | |
|                          }
 | |
| 
 | |
|  SA_Exclusive   = (SA_Dummy + $001F);
 | |
|                         { New for V39:
 | |
|                          * Boolean tag allowing screens that won't share
 | |
|                          * the display.  Use sparingly!  Starting with 3.01,
 | |
|                          * attached screens may be SA_Exclusive.  Setting
 | |
|                          * SA_Exclusive for each screen will produce an
 | |
|                          * exclusive family.   (Defaults to FALSE).
 | |
|                          }
 | |
| 
 | |
|  SA_SharePens   = (SA_Dummy + $0020);
 | |
|                         { New for V39:
 | |
|                          * For those pens in the screen's DrawInfo->dri_Pens,
 | |
|                          * Intuition obtains them in shared mode (see
 | |
|                          * graphics.library/ObtainPen()).  For compatibility,
 | |
|                          * Intuition obtains the other pens of a public
 | |
|                          * screen as PEN_EXCLUSIVE.  Screens that wish to
 | |
|                          * manage the pens themselves should generally set
 | |
|                          * this tag to TRUE.  This instructs Intuition to
 | |
|                          * leave the other pens unallocated.
 | |
|                          }
 | |
| 
 | |
|  SA_BackFill    = (SA_Dummy + $0021);
 | |
|                         { New for V39:
 | |
|                          * provides a "backfill hook" for your screen's
 | |
|                          * Layer_Info.
 | |
|                          * See layers.library/InstallLayerInfoHook()
 | |
|                          }
 | |
| 
 | |
|  SA_Interleaved = (SA_Dummy + $0022);
 | |
|                         { New for V39:
 | |
|                          * Boolean tag requesting that the bitmap
 | |
|                          * allocated for you be interleaved.
 | |
|                          * (Defaults to FALSE).
 | |
|                          }
 | |
| 
 | |
|  SA_Colors32    = (SA_Dummy + $0023);
 | |
|                         { New for V39:
 | |
|                          * Tag to set the screen's initial palette colors
 | |
|                          * at 32 bits-per-gun.  ti_Data is a pointer
 | |
|                          * to a table to be passed to the
 | |
|                          * graphics.library/LoadRGB32() function.
 | |
|                          * This format supports both runs of color
 | |
|                          * registers and sparse registers.  See the
 | |
|                          * autodoc for that function for full details.
 | |
|                          * Any color set here has precedence over
 | |
|                          * the same register set by SA_Colors.
 | |
|                          }
 | |
| 
 | |
|  SA_VideoControl = (SA_Dummy + $0024);
 | |
|                         { New for V39:
 | |
|                          * ti_Data is a pointer to a taglist that Intuition
 | |
|                          * will pass to graphics.library/VideoControl(),
 | |
|                          * upon opening the screen.
 | |
|                          }
 | |
| 
 | |
|  SA_FrontChild  = (SA_Dummy + $0025);
 | |
|                         { New for V39:
 | |
|                          * ti_Data is a pointer to an already open screen
 | |
|                          * that is to be the child of the screen being
 | |
|                          * opened.  The child screen will be moved to the
 | |
|                          * front of its family.
 | |
|                          }
 | |
| 
 | |
|  SA_BackChild   = (SA_Dummy + $0026);
 | |
|                         { New for V39:
 | |
|                          * ti_Data is a pointer to an already open screen
 | |
|                          * that is to be the child of the screen being
 | |
|                          * opened.  The child screen will be moved to the
 | |
|                          * back of its family.
 | |
|                          }
 | |
| 
 | |
|  SA_LikeWorkbench     =   (SA_Dummy + $0027);
 | |
|                         { New for V39:
 | |
|                          * Set ti_Data to 1 to request a screen which
 | |
|                          * is just like the Workbench.  This gives
 | |
|                          * you the same screen mode, depth, size,
 | |
|                          * colors, etc., as the Workbench screen.
 | |
|                          }
 | |
| 
 | |
|  SA_Reserved          =   (SA_Dummy + $0028);
 | |
|                         { Reserved for private Intuition use }
 | |
| 
 | |
|  SA_MinimizeISG       =   (SA_Dummy + $0029);
 | |
|                         { New for V40:
 | |
|                          * For compatibility, Intuition always ensures
 | |
|                          * that the inter-screen gap is at least three
 | |
|                          * non-interlaced lines.  If your application
 | |
|                          * would look best with the smallest possible
 | |
|                          * inter-screen gap, set ti_Data to TRUE.
 | |
|                          * If you use the new graphics VideoControl()
 | |
|                          * VC_NoColorPaletteLoad tag for your screen's
 | |
|                          * ViewPort, you should also set this tag.
 | |
|                           }
 | |
| 
 | |
| 
 | |
| { this is an obsolete tag included only for compatibility with V35
 | |
|  * interim release for the A2024 and Viking monitors
 | |
|  }
 | |
|  NSTAG_EXT_VPMODE = (TAG_USER + 1);
 | |
| 
 | |
| 
 | |
| { OpenScreen error codes, which are returned in the (optional) LONG
 | |
|  * pointed to by ti_Data for the SA_ErrorCode tag item
 | |
|  }
 | |
|  OSERR_NOMONITOR   = (1);     { named monitor spec not available     }
 | |
|  OSERR_NOCHIPS     = (2);     { you need newer custom chips          }
 | |
|  OSERR_NOMEM       = (3);     { couldn't get normal memory           }
 | |
|  OSERR_NOCHIPMEM   = (4);     { couldn't get chipmem                 }
 | |
|  OSERR_PUBNOTUNIQUE= (5);     { public screen name already used      }
 | |
|  OSERR_UNKNOWNMODE = (6);     { don't recognize mode asked for       }
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === NewScreen ========================================================== }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pNewScreen = ^tNewScreen;
 | |
|     tNewScreen = record
 | |
|         LeftEdge,
 | |
|         TopEdge,
 | |
|         Width,
 | |
|         Height,
 | |
|         Depth           : smallint;        { screen dimensions }
 | |
| 
 | |
|         DetailPen,
 | |
|         BlockPen        : Byte;         { for bar/border/gadget rendering }
 | |
| 
 | |
|         ViewModes       : Word;        { the Modes for the ViewPort (and View) }
 | |
| 
 | |
|         SType           : Word;        { the Screen type (see defines above) }
 | |
| 
 | |
|         Font            : pTextAttr;  { this Screen's default text attributes }
 | |
| 
 | |
|         DefaultTitle    : PChar;       { the default title for this Screen }
 | |
| 
 | |
|         Gadgets         : pGadget;      { your own Gadgets for this Screen }
 | |
| 
 | |
|     { if you are opening a CUSTOMSCREEN and already have a BitMap
 | |
|      * that you want used for your Screen, you set the flags CUSTOMBITMAP in
 | |
|      * the Type field and you set this variable to point to your BitMap
 | |
|      * structure.  The structure will be copied into your Screen structure,
 | |
|      * after which you may discard your own BitMap if you want
 | |
|      }
 | |
| 
 | |
|         CustomBitMap    : pBitMap;
 | |
|     end;
 | |
| 
 | |
| 
 | |
| type
 | |
| 
 | |
|  pExtNewScreen = ^tExtNewScreen;
 | |
|  tExtNewScreen = record
 | |
|   LeftEdge, TopEdge, Width, Height, Depth : smallint;
 | |
|   DetailPen, BlockPen : Byte;
 | |
|   ViewModes : Word;
 | |
|   ens_Type : Word;     { Type in C-Includes }
 | |
|   Font : pTextAttr;
 | |
|   DefaultTitle : PChar;
 | |
|   Gadgets : pGadget;
 | |
|   CustomBitMap : pBitMap;
 | |
|   Extension : pTagItem;
 | |
|  END;
 | |
| 
 | |
| 
 | |
| CONST
 | |
| { === Overscan Types ===       }
 | |
|  OSCAN_TEXT     = (1);     { entirely visible     }
 | |
|  OSCAN_STANDARD = (2);     { just past edges      }
 | |
|  OSCAN_MAX      = (3);     { as much as possible  }
 | |
|  OSCAN_VIDEO    = (4);     { even more than is possible   }
 | |
| 
 | |
| 
 | |
| { === Public Shared Screen Node ===    }
 | |
| 
 | |
| { This is the representative of a public shared screen.
 | |
|  * This is an internal data structure, but some functions may
 | |
|  * present a copy of it to the calling application.  In that case,
 | |
|  * be aware that the screen pointer of the structure can NOT be
 | |
|  * used safely, since there is no guarantee that the referenced
 | |
|  * screen will remain open and a valid data structure.
 | |
|  *
 | |
|  * Never change one of these.
 | |
|  }
 | |
| 
 | |
| Type
 | |
|    pPubScreenNode = ^tPubScreenNode;
 | |
|    tPubScreenNode = record
 | |
|     psn_Node    : tNode;       { ln_Name is screen name }
 | |
|     psn_Screen  : pScreen;
 | |
|     psn_Flags   : Word;      { below                }
 | |
|     psn_Size    : smallint;      { includes name buffer }
 | |
|     psn_VisitorCount  : smallint; { how many visitor windows }
 | |
|     psn_SigTask : pTask;    { who to signal when visitors gone }
 | |
|     psn_SigBit  : Byte;     { which signal }
 | |
|    END;
 | |
| 
 | |
| CONST
 | |
|  PSNF_PRIVATE  =  ($0001);
 | |
| 
 | |
|  MAXPUBSCREENNAME  =      (139);   { names no longer, please      }
 | |
| 
 | |
| { pub screen modes     }
 | |
|  SHANGHAI      =  $0001;  { put workbench windows on pub screen }
 | |
|  POPPUBSCREEN  =  $0002;  { pop pub screen to front when visitor opens }
 | |
| 
 | |
| { New for V39:  Intuition has new screen depth-arrangement and movement
 | |
|  * functions called ScreenDepth() and ScreenPosition() respectively.
 | |
|  * These functions permit the old behavior of ScreenToFront(),
 | |
|  * ScreenToBack(), and MoveScreen().  ScreenDepth() also allows
 | |
|  * independent depth control of attached screens.  ScreenPosition()
 | |
|  * optionally allows positioning screens even though they were opened
 | |
|  * (SA_Draggable,FALSE).
 | |
|  }
 | |
| 
 | |
| { For ScreenDepth(), specify one of SDEPTH_TOFRONT or SDEPTH_TOBACK,
 | |
|  * and optionally also SDEPTH_INFAMILY.
 | |
|  *
 | |
|  * NOTE: ONLY THE OWNER OF THE SCREEN should ever specify
 | |
|  * SDEPTH_INFAMILY.  Commodities, "input helper" programs,
 | |
|  * or any other program that did not open a screen should never
 | |
|  * use that flag.  (Note that this is a style-behavior
 | |
|  * requirement;  there is no technical requirement that the
 | |
|  * task calling this function need be the task which opened
 | |
|  * the screen).
 | |
|  }
 | |
| 
 | |
|  SDEPTH_TOFRONT        =  (0);     { Bring screen to front }
 | |
|  SDEPTH_TOBACK         =  (1);     { Send screen to back }
 | |
|  SDEPTH_INFAMILY       =  (2);     { Move an attached screen with
 | |
|                                          * respect to other screens of
 | |
|                                          * its family
 | |
|                                          }
 | |
| 
 | |
| { Here's an obsolete name equivalent to SDEPTH_INFAMILY: }
 | |
|  SDEPTH_CHILDONLY      =  SDEPTH_INFAMILY;
 | |
| 
 | |
| 
 | |
| { For ScreenPosition(), specify one of SPOS_RELATIVE, SPOS_ABSOLUTE,
 | |
|  * or SPOS_MAKEVISIBLE to describe the kind of screen positioning you
 | |
|  * wish to perform:
 | |
|  *
 | |
|  * SPOS_RELATIVE: The x1 and y1 parameters to ScreenPosition() describe
 | |
|  *      the offset in coordinates you wish to move the screen by.
 | |
|  * SPOS_ABSOLUTE: The x1 and y1 parameters to ScreenPosition() describe
 | |
|  *      the absolute coordinates you wish to move the screen to.
 | |
|  * SPOS_MAKEVISIBLE: (x1,y1)-(x2,y2) describes a rectangle on the
 | |
|  *      screen which you would like autoscrolled into view.
 | |
|  *
 | |
|  * You may additionally set SPOS_FORCEDRAG along with any of the
 | |
|  * above.  Set this if you wish to reposition an (SA_Draggable,FALSE)
 | |
|  * screen that you opened.
 | |
|  *
 | |
|  * NOTE: ONLY THE OWNER OF THE SCREEN should ever specify
 | |
|  * SPOS_FORCEDRAG.  Commodities, "input helper" programs,
 | |
|  * or any other program that did not open a screen should never
 | |
|  * use that flag.
 | |
|  }
 | |
| 
 | |
|  SPOS_RELATIVE         =  (0);     { Coordinates are relative }
 | |
| 
 | |
|  SPOS_ABSOLUTE         =  (1);     { Coordinates are expressed as
 | |
|                                          * absolutes, not relatives.
 | |
|                                          }
 | |
| 
 | |
|  SPOS_MAKEVISIBLE      =  (2);     { Coordinates describe a box on
 | |
|                                          * the screen you wish to be
 | |
|                                          * made visible by autoscrolling
 | |
|                                          }
 | |
| 
 | |
|  SPOS_FORCEDRAG        =  (4);     { Move non-draggable screen }
 | |
| 
 | |
| { New for V39: Intuition supports double-buffering in screens,
 | |
|  * with friendly interaction with menus and certain gadgets.
 | |
|  * For each buffer, you need to get one of these structures
 | |
|  * from the AllocScreenBuffer() call.  Never allocate your
 | |
|  * own ScreenBuffer structures!
 | |
|  *
 | |
|  * The sb_DBufInfo field is for your use.  See the graphics.library
 | |
|  * AllocDBufInfo() autodoc for details.
 | |
|  }
 | |
| Type
 | |
| 
 | |
|  pScreenBuffer = ^tScreenBuffer;
 | |
|  tScreenBuffer = record
 | |
|     sb_BitMap  : pBitMap;           { BitMap of this buffer }
 | |
|     sb_DBufInfo : pDBufInfo;       { DBufInfo for this buffer }
 | |
|  end;
 | |
| 
 | |
| const
 | |
| { These are the flags that may be passed to AllocScreenBuffer().
 | |
|  }
 | |
|  SB_SCREEN_BITMAP      =  1;
 | |
|  SB_COPY_BITMAP        =  2;
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === Preferences ======================================================== }
 | |
| { ======================================================================== }
 | |
| 
 | |
| Const
 | |
| 
 | |
| { these are the definitions for the printer configurations }
 | |
|     FILENAME_SIZE       = 30;           { Filename size }
 | |
| 
 | |
|     POINTERSIZE         = (1 + 16 + 1) * 2;     { Size of Pointer data buffer }
 | |
| 
 | |
| { These defines are for the default font size.   These actually describe the
 | |
|  * height of the defaults fonts.  The default font type is the topaz
 | |
|  * font, which is a fixed width font that can be used in either
 | |
|  * eighty-column or sixty-column mode.  The Preferences structure reflects
 | |
|  * which is currently selected by the value found in the variable FontSize,
 | |
|  * which may have either of the values defined below.  These values actually
 | |
|  * are used to select the height of the default font.  By changing the
 | |
|  * height, the resolution of the font changes as well.
 | |
|  }
 | |
|     TOPAZ_EIGHTY        = 8;
 | |
|     TOPAZ_SIXTY         = 9;
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pPreferences = ^tPreferences;
 | |
|     tPreferences = record
 | |
|     { the default font height }
 | |
|         FontHeight      : Shortint;         { height for system default font  }
 | |
| 
 | |
|     { constant describing what's hooked up to the port }
 | |
|         PrinterPort     : Byte;         { printer port connection     }
 | |
| 
 | |
|     { the baud rate of the port }
 | |
|         BaudRate        : Word;        { baud rate for the serial port   }
 | |
| 
 | |
|     { various timing rates }
 | |
|         KeyRptSpeed     : ttimeval;      { repeat speed for keyboard       }
 | |
|         KeyRptDelay     : ttimeval;      { Delay before keys repeat             }
 | |
|         DoubleClick     : ttimeval;      { Interval allowed between clicks }
 | |
| 
 | |
|     { Intuition Pointer data }
 | |
|         PointerMatrix   : Array [0..POINTERSIZE-1] of Word;
 | |
|                                         { Definition of pointer sprite     }
 | |
|         XOffset         : Shortint;         { X-Offset for active 'bit'       }
 | |
|         YOffset         : Shortint;         { Y-Offset for active 'bit'       }
 | |
|         color17         : Word;        {*********************************}
 | |
|         color18         : Word;        { Colours for sprite pointer      }
 | |
|         color19         : Word;        {*********************************}
 | |
|         PointerTicks    : Word;        { Sensitivity of the pointer       }
 | |
| 
 | |
|     { Workbench Screen colors }
 | |
|         color0          : Word;        {*********************************}
 | |
|         color1          : Word;        {   Standard default colours      }
 | |
|         color2          : Word;        {   Used in the Workbench         }
 | |
|         color3          : Word;        {*********************************}
 | |
| 
 | |
|     { positioning data for the Intuition View }
 | |
|         ViewXOffset     : Shortint;         { Offset for top lefthand corner  }
 | |
|         ViewYOffset     : Shortint;         { X and Y dimensions           }
 | |
|         ViewInitX,
 | |
|         ViewInitY       : smallint;        { View initial offset values      }
 | |
| 
 | |
|         EnableCLI       : Boolean;      { CLI availability switch }
 | |
| 
 | |
|     { printer configurations }
 | |
|         PrinterType     : Word;        { printer type                     }
 | |
|         PrinterFilename : Array [0..FILENAME_SIZE-1] of Char;
 | |
|                                         { file for printer         }
 | |
| 
 | |
|     { print format and quality configurations }
 | |
|         PrintPitch      : Word;        { print pitch              }
 | |
|         PrintQuality    : Word;        { print quality    }
 | |
|         PrintSpacing    : Word;        { number of lines per inch    }
 | |
|         PrintLeftMargin : Word;        { left margin in characters        }
 | |
|         PrintRightMargin : Word;       { right margin in characters       }
 | |
|         PrintImage      : Word;        { positive or negative         }
 | |
|         PrintAspect     : Word;        { horizontal or vertical      }
 | |
|         PrintShade      : Word;        { b&w, half-tone, or color    }
 | |
|         PrintThreshold  : smallint;        { darkness ctrl for b/w dumps      }
 | |
| 
 | |
|     { print paper descriptors }
 | |
|         PaperSize       : Word;        { paper size               }
 | |
|         PaperLength     : Word;        { paper length in number of lines }
 | |
|         PaperType       : Word;        { continuous or single sheet       }
 | |
| 
 | |
|     { Serial device settings: These are six nibble-fields in three bytes }
 | |
|     { (these look a little strange so the defaults will map out to zero) }
 | |
|         SerRWBits       : Byte;
 | |
|                              { upper nibble = (8-number of read bits)     }
 | |
|                              { lower nibble = (8-number of write bits)    }
 | |
|         SerStopBuf      : Byte;
 | |
|                              { upper nibble = (number of stop bits - 1)  }
 | |
|                              { lower nibble = (table value for BufSize)  }
 | |
|         SerParShk       : Byte;
 | |
|                              { upper nibble = (value for Parity setting) }
 | |
|                              { lower nibble = (value for Handshake mode) }
 | |
|         LaceWB          : Byte;         { if workbench is to be interlaced      }
 | |
| 
 | |
|         WorkName        : Array [0..FILENAME_SIZE-1] of Char;
 | |
|                                         { temp file for printer         }
 | |
| 
 | |
|         RowSizeChange   : Shortint;
 | |
|         ColumnSizeChange : Shortint;
 | |
| 
 | |
|         PrintFlags      : Word;        { user preference flags }
 | |
|         PrintMaxWidth   : Word;        { max width of printed picture in 10ths/inch }
 | |
|         PrintMaxHeight  : Word;        { max height of printed picture in 10ths/inch }
 | |
|         PrintDensity    : Byte;         { print density }
 | |
|         PrintXOffset    : Byte;         { offset of printed picture in 10ths/inch }
 | |
| 
 | |
|         wb_Width        : Word;        { override default workbench width       }
 | |
|         wb_Height       : Word;        { override default workbench height }
 | |
|         wb_Depth        : Byte;         { override default workbench depth       }
 | |
| 
 | |
|         ext_size        : Byte;         { extension information -- do not touch! }
 | |
|                             { extension size in blocks of 64 bytes }
 | |
|     end;
 | |
| 
 | |
| Const
 | |
| 
 | |
| { Workbench Interlace (use one bit) }
 | |
|     LACEWB              = $01;
 | |
|     LW_RESERVED         = 1;     { internal use only }
 | |
| 
 | |
| { PrinterPort }
 | |
|     PARALLEL_PRINTER    = $00;
 | |
|     SERIAL_PRINTER      = $01;
 | |
| 
 | |
| { BaudRate }
 | |
|     BAUD_110            = $00;
 | |
|     BAUD_300            = $01;
 | |
|     BAUD_1200           = $02;
 | |
|     BAUD_2400           = $03;
 | |
|     BAUD_4800           = $04;
 | |
|     BAUD_9600           = $05;
 | |
|     BAUD_19200          = $06;
 | |
|     BAUD_MIDI           = $07;
 | |
| 
 | |
| { PaperType }
 | |
|     FANFOLD             = $00;
 | |
|     SINGLE              = $80;
 | |
| 
 | |
| { PrintPitch }
 | |
|     PICA                = $000;
 | |
|     ELITE               = $400;
 | |
|     FINE                = $800;
 | |
| 
 | |
| { PrintQuality }
 | |
|     DRAFT               = $000;
 | |
|     LETTER              = $100;
 | |
| 
 | |
| { PrintSpacing }
 | |
|     SIX_LPI             = $000;
 | |
|     EIGHT_LPI           = $200;
 | |
| 
 | |
| { Print Image }
 | |
|     IMAGE_POSITIVE      = $00;
 | |
|     IMAGE_NEGATIVE      = $01;
 | |
| 
 | |
| { PrintAspect }
 | |
|     ASPECT_HORIZ        = $00;
 | |
|     ASPECT_VERT         = $01;
 | |
| 
 | |
| { PrintShade }
 | |
|     SHADE_BW            = $00;
 | |
|     SHADE_GREYSCALE     = $01;
 | |
|     SHADE_COLOR         = $02;
 | |
| 
 | |
| { PaperSize }
 | |
|     US_LETTER           = $00;
 | |
|     US_LEGAL            = $10;
 | |
|     N_TRACTOR           = $20;
 | |
|     W_TRACTOR           = $30;
 | |
|     CUSTOM_PAPER        = $40;
 | |
| 
 | |
| { New PaperSizes for V36: }
 | |
|  EURO_A0 = $50;            { European size A0: 841 x 1189 }
 | |
|  EURO_A1 = $60;            { European size A1: 594 x 841 }
 | |
|  EURO_A2 = $70;            { European size A2: 420 x 594 }
 | |
|  EURO_A3 = $80;            { European size A3: 297 x 420 }
 | |
|  EURO_A4 = $90;            { European size A4: 210 x 297 }
 | |
|  EURO_A5 = $A0;            { European size A5: 148 x 210 }
 | |
|  EURO_A6 = $B0;            { European size A6: 105 x 148 }
 | |
|  EURO_A7 = $C0;            { European size A7: 74 x 105 }
 | |
|  EURO_A8 = $D0;            { European size A8: 52 x 74 }
 | |
| 
 | |
| { PrinterType }
 | |
|     CUSTOM_NAME         = $00;
 | |
|     ALPHA_P_101         = $01;
 | |
|     BROTHER_15XL        = $02;
 | |
|     CBM_MPS1000         = $03;
 | |
|     DIAB_630            = $04;
 | |
|     DIAB_ADV_D25        = $05;
 | |
|     DIAB_C_150          = $06;
 | |
|     EPSON               = $07;
 | |
|     EPSON_JX_80         = $08;
 | |
|     OKIMATE_20          = $09;
 | |
|     QUME_LP_20          = $0A;
 | |
| { new printer entries, 3 October 1985 }
 | |
|     HP_LASERJET         = $0B;
 | |
|     HP_LASERJET_PLUS    = $0C;
 | |
| 
 | |
| { Serial Input Buffer Sizes }
 | |
|     SBUF_512            = $00;
 | |
|     SBUF_1024           = $01;
 | |
|     SBUF_2048           = $02;
 | |
|     SBUF_4096           = $03;
 | |
|     SBUF_8000           = $04;
 | |
|     SBUF_16000          = $05;
 | |
| 
 | |
| { Serial Bit Masks }
 | |
|     SREAD_BITS          = $F0;          { for SerRWBits   }
 | |
|     SWRITE_BITS         = $0F;
 | |
| 
 | |
|     SSTOP_BITS          = $F0;          { for SerStopBuf  }
 | |
|     SBUFSIZE_BITS       = $0F;
 | |
| 
 | |
|     SPARITY_BITS        = $F0;          { for SerParShk }
 | |
|     SHSHAKE_BITS        = $0F;
 | |
| 
 | |
| { Serial Parity (upper nibble, after being shifted by
 | |
|  * macro SPARNUM() )
 | |
|  }
 | |
|     SPARITY_NONE        = 0;
 | |
|     SPARITY_EVEN        = 1;
 | |
|     SPARITY_ODD         = 2;
 | |
| 
 | |
| { Serial Handshake Mode (lower nibble, after masking using
 | |
|  * macro SHANKNUM() )
 | |
|  }
 | |
|     SHSHAKE_XON         = 0;
 | |
|     SHSHAKE_RTS         = 1;
 | |
|     SHSHAKE_NONE        = 2;
 | |
| 
 | |
| { new defines for PrintFlags }
 | |
| 
 | |
|     CORRECT_RED         = $0001;        { color correct red shades }
 | |
|     CORRECT_GREEN       = $0002;        { color correct green shades }
 | |
|     CORRECT_BLUE        = $0004;        { color correct blue shades }
 | |
| 
 | |
|     CENTER_IMAGE        = $0008;        { center image on paper }
 | |
| 
 | |
|     IGNORE_DIMENSIONS   = $0000;        { ignore max width/height settings }
 | |
|     BOUNDED_DIMENSIONS  = $0010;        { use max width/height as boundaries }
 | |
|     ABSOLUTE_DIMENSIONS = $0020;        { use max width/height as absolutes }
 | |
|     PIXEL_DIMENSIONS    = $0040;        { use max width/height as prt pixels }
 | |
|     MULTIPLY_DIMENSIONS = $0080;        { use max width/height as multipliers }
 | |
| 
 | |
|     INTEGER_SCALING     = $0100;        { force integer scaling }
 | |
| 
 | |
|     ORDERED_DITHERING   = $0000;        { ordered dithering }
 | |
|     HALFTONE_DITHERING  = $0200;        { halftone dithering }
 | |
|     FLOYD_DITHERING     = $0400;        { Floyd-Steinberg dithering }
 | |
| 
 | |
|     ANTI_ALIAS          = $0800;        { anti-alias image }
 | |
|     GREY_SCALE2         = $1000;        { for use with hi-res monitor }
 | |
| 
 | |
| { masks used for checking bits }
 | |
| 
 | |
|     CORRECT_RGB_MASK    = CORRECT_RED + CORRECT_GREEN + CORRECT_BLUE;
 | |
|     DIMENSIONS_MASK     = BOUNDED_DIMENSIONS + ABSOLUTE_DIMENSIONS +
 | |
|                                 PIXEL_DIMENSIONS + MULTIPLY_DIMENSIONS;
 | |
|     DITHERING_MASK      = HALFTONE_DITHERING + FLOYD_DITHERING;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| { ======================================================================== }
 | |
| { === IntuitionBase ====================================================== }
 | |
| { ======================================================================== }
 | |
| {
 | |
|  * Be sure to protect yourself against someone modifying these data as
 | |
|  * you look at them.  This is done by calling:
 | |
|  *
 | |
|  * lock = LockIBase(0), which returns an Integer.  When done call
 | |
|  * UnlockIBase(lock) where lock is what LockIBase() returned.
 | |
|  }
 | |
| 
 | |
| Type
 | |
| 
 | |
|     pIntuitionBase = ^tIntuitionBase;
 | |
|     tIntuitionBase = record
 | |
| { IntuitionBase should never be directly modified by programs   }
 | |
| { even a little bit, guys/gals; do you hear me? }
 | |
| 
 | |
|         LibNode         : tLibrary;
 | |
| 
 | |
|         ViewLord        : tView;
 | |
| 
 | |
|         ActiveWindow    : pWindow;
 | |
|         ActiveScreen    : pScreen;
 | |
| 
 | |
|     { the FirstScreen variable points to the frontmost Screen.   Screens are
 | |
|      * then maintained in a front to back order using Screen.NextScreen
 | |
|      }
 | |
| 
 | |
|         FirstScreen     : pScreen;    { for linked list of all screens }
 | |
| 
 | |
|         Flags           : Cardinal;      { see definitions below }
 | |
|         MouseY,
 | |
|         MouseX          : smallint;        { mouse position relative to View }
 | |
| 
 | |
|         Seconds         : Cardinal;      { timestamp of most current input event }
 | |
|         Micros          : Cardinal;      { timestamp of most current input event }
 | |
| 
 | |
|     { I told you this was private.
 | |
|      * The data beyond this point has changed, is changing, and
 | |
|      * will continue to change.
 | |
|      }
 | |
| 
 | |
|     end;
 | |
| 
 | |
| 
 | |
| {
 | |
|  * Package of information passed to custom and 'boopsi'
 | |
|  * gadget 'hook' functions.  This structure is READ ONLY.
 | |
|  }
 | |
| Type
 | |
| 
 | |
|    pGadgetInfo = ^tGadgetInfo;
 | |
|    tGadgetInfo = record
 | |
|     gi_Screen                   : pScreen;       { ScreenPtr }
 | |
|     gi_Window                   : pWindow;       { null for screen gadgets }    { WindowPtr }
 | |
|     gi_Requester                : pRequester;    { null IF not GTYP_REQGADGET } { RequesterPtr }
 | |
| 
 | |
|     { rendering information:
 | |
|      * don't use these without cloning/locking.
 | |
|      * Official way is to call ObtainRPort()
 | |
|      }
 | |
|     gi_RastPort                 : pRastPort;     { RastPortPtr }
 | |
|     gi_Layer                    : pLayer;        { LayerPtr }
 | |
| 
 | |
|     { copy of dimensions of screen/window/g00/req(/group)
 | |
|      * that gadget resides in.  Left/Top of this box is
 | |
|      * offset from window mouse coordinates to gadget coordinates
 | |
|      *          screen gadgets:                 0,0 (from screen coords)
 | |
|      *  window gadgets (no g00):        0,0
 | |
|      *  GTYP_GZZGADGETs (borderlayer):          0,0
 | |
|      *  GZZ innerlayer gadget:          borderleft, bordertop
 | |
|      *  Requester gadgets:              reqleft, reqtop
 | |
|      }
 | |
|     gi_Domain                   : tIBox;
 | |
| 
 | |
|     gi_Pens                     : record
 | |
|                       DetailPen : Byte;
 | |
|                       BlockPen  : Byte;
 | |
|                                   end;
 | |
| 
 | |
|     { the Detail and Block pens in gi_DrInfo->dri_Pens[] are
 | |
|      * for the screen.  Use the above for window-sensitive
 | |
|      * colors.
 | |
|      }
 | |
|     gi_DrInfo                   : pDrawInfo;  { DrawInfoPtr }
 | |
| 
 | |
|     { reserved space: this structure is extensible
 | |
|      * anyway, but using these saves some recompilation
 | |
|      }
 | |
|     gi_Reserved                 : Array[0..5] of Cardinal;
 | |
|    END;
 | |
| 
 | |
| {** system private data structure for now **}
 | |
| { prop gadget extra info       }
 | |
| 
 | |
|    pPGX = ^tPGX;
 | |
|    tPGX = record
 | |
|     pgx_Container : tIBox;
 | |
|     pgx_NewKnob   : tIBox;
 | |
|    END;
 | |
| 
 | |
| { this casts MutualExclude for easy assignment of a hook
 | |
|  * pointer to the unused MutualExclude field of a custom gadget
 | |
|  }
 | |
| 
 | |
| {** User visible handles on objects, classes, messages **}
 | |
| Type
 | |
|  Object_ = Cardinal;
 | |
|  pObject_ = ^Object_;
 | |
|  ClassID = ^Byte;
 | |
| 
 | |
| {
 | |
|  you can use this type to point to a 'generic' message,
 | |
|  * in the object-oriented programming parlance.  Based on
 | |
|  * the value of 'MethodID', you dispatch to processing
 | |
|  * for the various message types.  The meaningful parameter
 | |
|  * packet structure definitions are defined below.
 | |
| 
 | |
| typedef struct
 | |
|     Cardinal MethodID;
 | |
|      method-specific data follows, some examples below
 | |
|                *Msg; }
 | |
| 
 | |
|   pMsg = ^tMsg;
 | |
|   tMsg = record
 | |
|      MethodID : Cardinal;
 | |
|   end;
 | |
| 
 | |
| {
 | |
|  * Class id strings for Intuition classes.
 | |
|  * There's no real reason to use the uppercase constants
 | |
|  * over the lowercase strings, but this makes a good place
 | |
|  * to list the names of the built-in classes.
 | |
|  }
 | |
| CONST
 | |
|  ROOTCLASS      : PChar = 'rootclass'    ;         { classusr.h   }
 | |
|  IMAGECLASS     : PChar = 'imageclass'   ;         { imageclass.h }
 | |
|  FRAMEICLASS    : PChar = 'frameiclass'  ;
 | |
|  SYSICLASS      : PChar = 'sysiclass'    ;
 | |
|  FILLRECTCLASS  : PChar = 'fillrectclass';
 | |
|  GADGETCLASS    : PChar = 'gadgetclass'  ;         { gadgetclass.h }
 | |
|  PROPGCLASS     : PChar = 'propgclass'   ;
 | |
|  STRGCLASS      : PChar = 'strgclass'    ;
 | |
|  BUTTONGCLASS   : PChar = 'buttongclass' ;
 | |
|  FRBUTTONCLASS  : PChar = 'frbuttonclass';
 | |
|  GROUPGCLASS    : PChar = 'groupgclass'  ;
 | |
|  ICCLASS        : PChar = 'icclass'      ;         { icclass.h    }
 | |
|  MODELCLASS     : PChar = 'modelclass'   ;
 | |
|  ITEXTICLASS    : PChar = 'itexticlass'  ;
 | |
|  POINTERCLASS   : PChar = 'pointerclass' ;         { pointerclass.h }
 | |
| 
 | |
| 
 | |
| { Dispatched method ID's
 | |
|  * NOTE: Applications should use Intuition entry points, not direct
 | |
|  * DoMethod() calls, for NewObject, DisposeObject, SetAttrs,
 | |
|  * SetGadgetAttrs, and GetAttr.
 | |
|  }
 | |
| 
 | |
|  OM_Dummy       = ($100);
 | |
|  OM_NEW         = ($101); { 'object' parameter is 'true class'   }
 | |
|  OM_DISPOSE     = ($102); { delete self (no parameters)          }
 | |
|  OM_SET         = ($103); { set attributes (in tag list)         }
 | |
|  OM_GET         = ($104); { return single attribute value        }
 | |
|  OM_ADDTAIL     = ($105); { add self to a List (let root do it)  }
 | |
|  OM_REMOVE      = ($106); { remove self from list                }
 | |
|  OM_NOTIFY      = ($107); { send to self: notify dependents      }
 | |
|  OM_UPDATE      = ($108); { notification message from somebody   }
 | |
|  OM_ADDMEMBER   = ($109); { used by various classes with lists   }
 | |
|  OM_REMMEMBER   = ($10A); { used by various classes with lists   }
 | |
| 
 | |
| { Parameter 'Messages' passed to methods       }
 | |
| 
 | |
| { OM_NEW and OM_SET    }
 | |
| Type
 | |
|    popSet = ^topSet;
 | |
|    topSet = record
 | |
|     MethodID            : Cardinal;
 | |
|     ops_AttrList        : pTagItem;    { new attributes       }
 | |
|     ops_GInfo           : pGadgetInfo; { always there for gadgets,
 | |
|                                          * when SetGadgetAttrs() is used,
 | |
|                                          * but will be NULL for OM_NEW
 | |
|                                          }
 | |
|    END;
 | |
| 
 | |
| { OM_NOTIFY, and OM_UPDATE     }
 | |
| 
 | |
|   popUpdate = ^topUpdate;
 | |
|   topUpdate = record
 | |
|     MethodID            : Cardinal;
 | |
|     opu_AttrList        : pTagItem;     { new attributes       }
 | |
|     opu_GInfo           : pGadgetInfo;  { non-NULL when SetGadgetAttrs OR
 | |
|                                          * notification resulting from gadget
 | |
|                                          * input occurs.
 | |
|                                          }
 | |
|     opu_Flags           : Cardinal;        { defined below        }
 | |
|   END;
 | |
| 
 | |
| { this flag means that the update message is being issued from
 | |
|  * something like an active gadget, a la GACT_FOLLOWMOUSE.  When
 | |
|  * the gadget goes inactive, it will issue a final update
 | |
|  * message with this bit cleared.  Examples of use are for
 | |
|  * GACT_FOLLOWMOUSE equivalents for propgadclass, and repeat strobes
 | |
|  * for buttons.
 | |
|  }
 | |
| CONST
 | |
|  OPUF_INTERIM   = 1;
 | |
| 
 | |
| { OM_GET       }
 | |
| Type
 | |
| 
 | |
|   popGet = ^topGet;
 | |
|   topGet = record
 | |
|     MethodID,
 | |
|     opg_AttrID          : Cardinal;
 | |
|     opg_Storage         : Pointer;   { may be other types, but 'int'
 | |
|                                          * types are all Cardinal
 | |
|                                          }
 | |
|   END;
 | |
| 
 | |
| { OM_ADDTAIL   }
 | |
| 
 | |
|   popAddTail = ^topAddTail;
 | |
|   topAddTail = record
 | |
|     MethodID  : Cardinal;
 | |
|     opat_List : pList;
 | |
|   END;
 | |
| 
 | |
| { OM_ADDMEMBER, OM_REMMEMBER   }
 | |
| Type
 | |
| 
 | |
|    popMember = ^topMember;
 | |
|    topMember = record
 | |
|     MethodID   : Cardinal;
 | |
|     opam_Object : pObject_;
 | |
|    END;
 | |
| 
 | |
| 
 | |
| 
 | |
| {*****************************************}
 | |
| {** 'White box' access to struct IClass **}
 | |
| {*****************************************}
 | |
| 
 | |
| { This structure is READ-ONLY, and allocated only by Intuition }
 | |
| TYPE
 | |
| 
 | |
|    pIClass = ^tIClass;
 | |
|    tIClass = record
 | |
|     cl_Dispatcher       : tHook;
 | |
|     cl_Reserved         : Cardinal;    { must be 0  }
 | |
|     cl_Super            : pIClass;
 | |
|     cl_ID               : ClassID;
 | |
| 
 | |
|     { where within an object is the instance data for this class? }
 | |
|     cl_InstOffset       : Word;
 | |
|     cl_InstSize         : Word;
 | |
| 
 | |
|     cl_UserData         : Cardinal;    { per-class data of your choice }
 | |
|     cl_SubclassCount    : Cardinal;
 | |
|                                         { how many direct subclasses?  }
 | |
|     cl_ObjectCount      : Cardinal;
 | |
|                                 { how many objects created of this class? }
 | |
|     cl_Flags            : Cardinal;
 | |
|    END;
 | |
| 
 | |
| CONST
 | |
|  CLF_INLIST    =  $00000001;      { class is in public class list }
 | |
| 
 | |
| 
 | |
| 
 | |
| {************************************************}
 | |
| {** 'White box' access to struct _Object       **}
 | |
| {************************************************}
 | |
| 
 | |
| {
 | |
|  * We have this, the instance data of the root class, PRECEDING
 | |
|  * the 'object'.  This is so that Gadget objects are Gadget pointers,
 | |
|  * and so on.  If this structure grows, it will always have o_Class
 | |
|  * at the end, so the macro OCLASS(o) will always have the same
 | |
|  * offset back from the pointer returned from NewObject().
 | |
|  *
 | |
|  * This data structure is subject to change.  Do not use the o_Node
 | |
|  * embedded structure.
 | |
|  }
 | |
| Type
 | |
|   p_Object = ^t_Object;
 | |
|   t_Object = record
 | |
|     o_Node    : tMinNode;
 | |
|     o_Class   : pIClass;
 | |
|   END;
 | |
| 
 | |
| { BOOPSI class libraries should use this structure as the base for their
 | |
|  * library data.  This allows developers to obtain the class pointer for
 | |
|  * performing object-less inquiries. }
 | |
| 
 | |
| 
 | |
|        PClassLibrary = ^tClassLibrary;
 | |
|        tClassLibrary = record
 | |
|             cl_Lib : tLibrary;    { Embedded library }
 | |
|             cl_Pad : Word;       { Align the structure }
 | |
|             cl_Class : PIClass;   { Class pointer }
 | |
|          end;
 | |
| 
 | |
| {
 | |
|  * NOTE:  <intuition/iobsolete.h> is included at the END of this file!
 | |
|  }
 | |
| 
 | |
| { Gadget Class attributes      }
 | |
| CONST
 | |
|     GA_Dummy           =  (TAG_USER +$30000);
 | |
|     
 | |
|     { (LONG) Left edge of the gadget relative to the left edge of
 | |
|      * the window }
 | |
|     GA_Left            =  (GA_Dummy + $0001);
 | |
|     
 | |
|     { (LONG) Left edge of the gadget relative to the right edge of
 | |
|      * the window }
 | |
|     GA_RelRight        =  (GA_Dummy + $0002);
 | |
|     
 | |
|     { (LONG) Top edge of the gadget relative to the top edge of
 | |
|      * the window }
 | |
|     GA_Top             =  (GA_Dummy + $0003);
 | |
| 
 | |
|     { (LONG) Top edge of the gadget relative to the bottom edge
 | |
|      * of the window }
 | |
|     GA_RelBottom       =  (GA_Dummy + $0004);
 | |
|     
 | |
|     { (LONG) Width of the gadget }
 | |
|     GA_Width           =  (GA_Dummy + $0005);
 | |
|     
 | |
|     { (LONG) Width of the gadget relative to the width of the
 | |
|      * window }
 | |
|     GA_RelWidth        =  (GA_Dummy + $0006);
 | |
|     
 | |
|     { (LONG) Height of the gadget }
 | |
|     GA_Height          =  (GA_Dummy + $0007);
 | |
| 
 | |
|     { (LONG) Height of the gadget relative to the height of
 | |
|      * the window }
 | |
|     GA_RelHeight       =  (GA_Dummy + $0008);
 | |
|     
 | |
|     { (PChar) Gadget imagry is NULL terminated string }
 | |
|     GA_Text            =  (GA_Dummy + $0009); { ti_Data is (UBYTE *) }
 | |
|     
 | |
|     { (struct Image *) Gadget imagry is an image }
 | |
|     GA_Image           =  (GA_Dummy + $000A);
 | |
|     
 | |
|     { (struct Border *) Gadget imagry is a border }
 | |
|     GA_Border          =  (GA_Dummy + $000B);
 | |
| 
 | |
|     { (struct Image *) Selected gadget imagry }
 | |
|     GA_SelectRender    =  (GA_Dummy + $000C);
 | |
|     
 | |
|     { (UWORD) One of GFLG_GADGHNONE, GFLG_GADGHBOX, GFLG_GADGHCOMP,
 | |
|      * or GFLG_GADGHIMAGE }
 | |
|     GA_Highlight       =  (GA_Dummy + $000D);
 | |
|     
 | |
|     { (BOOL) Indicate whether gadget is disabled or not.
 | |
|      * Defaults to FALSE. }
 | |
|     GA_Disabled        =  (GA_Dummy + $000E);
 | |
|     
 | |
|     { (BOOL) Indicate whether the gadget is for
 | |
|      * WFLG_GIMMEZEROZERO window borders or not.  Defaults
 | |
|      * to FALSE. }
 | |
|     GA_GZZGadget       =  (GA_Dummy + $000F);
 | |
|     
 | |
|     { (UWORD) Gadget ID assigned by the application }
 | |
|     GA_ID              =  (GA_Dummy + $0010);
 | |
|     
 | |
|     { (APTR) Application specific data }
 | |
|     GA_UserData        =  (GA_Dummy + $0011);
 | |
|     
 | |
|     { (APTR) Gadget specific data }
 | |
|     GA_SpecialInfo     =  (GA_Dummy + $0012);
 | |
|     
 | |
|     { (BOOL) Indicate whether the gadget is selected or not.
 | |
|      * Defaults to FALSE }
 | |
|     GA_Selected        =  (GA_Dummy + $0013);
 | |
|     
 | |
|     { (BOOL) When set tells the system that when this gadget
 | |
|      * is selected causes the requester that it is in to be
 | |
|      * ended.  Defaults to FALSE. }
 | |
|     GA_EndGadget       =  (GA_Dummy + $0014);
 | |
|     
 | |
|     { (BOOL) When set indicates that the gadget is to
 | |
|      * notify the application when it becomes active.  Defaults
 | |
|      * to FALSE. }
 | |
|     GA_Immediate       =  (GA_Dummy + $0015);
 | |
|     
 | |
|     { (BOOL) When set indicates that the application wants to
 | |
|      * verify that the pointer was still over the gadget when
 | |
|      * the select button is released.  Defaults to FALSE. }
 | |
|     GA_RelVerify       =  (GA_Dummy + $0016);
 | |
|     
 | |
|     { (BOOL) When set indicates that the application wants to
 | |
|      * be notified of mouse movements while the gadget is active.
 | |
|      * It is recommmended that GA_Immediate and GA_RelVerify are
 | |
|      * also used so that the active gadget can be tracked by the
 | |
|      * application.  Defaults to FALSE. }
 | |
|     GA_FollowMouse     =  (GA_Dummy + $0017);
 | |
|     
 | |
|     { (BOOL) Indicate whether the gadget is in the right border
 | |
|      * or not.  Defaults to FALSE. }
 | |
|     GA_RightBorder     =  (GA_Dummy + $0018);
 | |
|     
 | |
|     { (BOOL) Indicate whether the gadget is in the left border
 | |
|      * or not.  Defaults to FALSE. }
 | |
|     GA_LeftBorder      =  (GA_Dummy + $0019);
 | |
|     
 | |
|     { (BOOL) Indicate whether the gadget is in the top border
 | |
|      * or not.  Defaults to FALSE. }
 | |
|     GA_TopBorder       =  (GA_Dummy + $001A);
 | |
|     
 | |
|     { (BOOL) Indicate whether the gadget is in the bottom border
 | |
|      * or not.  Defaults to FALSE. }
 | |
|     GA_BottomBorder    =  (GA_Dummy + $001B);
 | |
|     
 | |
|     { (BOOL) Indicate whether the gadget is toggle-selected
 | |
|      * or not.  Defaults to FALSE. }
 | |
|     GA_ToggleSelect    =  (GA_Dummy + $001C);
 | |
| 
 | |
|     { (BOOL) Reserved for system use to indicate that the
 | |
|      * gadget belongs to the system.  Defaults to FALSE. }
 | |
|     GA_SysGadget       =  (GA_Dummy + $001D);
 | |
|     
 | |
|     { (UWORD) Reserved for system use to indicate the
 | |
|      * gadget type. }
 | |
|     GA_SysGType        =  (GA_Dummy + $001E);
 | |
| 
 | |
|     { (struct Gadget *) Previous gadget in the linked list.
 | |
|      * NOTE: This attribute CANNOT be used to link new gadgets
 | |
|      * into the gadget list of an open window or requester.
 | |
|      * You must use AddGList(). }
 | |
|     GA_Previous        =  (GA_Dummy + $001F);
 | |
| 
 | |
|     { (struct Gadget *) Next gadget in the linked list. }
 | |
|     GA_Next            =  (GA_Dummy + $0020);
 | |
| 
 | |
|     { (struct DrawInfo *) Some gadgets need a DrawInfo at creation time }
 | |
|     GA_DrawInfo        =  (GA_Dummy + $0021);
 | |
| 
 | |
|     { You should use at most ONE of GA_Text, GA_IntuiText, and GA_LabelImage }
 | |
|     { (struct IntuiText *) Label is an IntuiText. }
 | |
|     GA_IntuiText          =  (GA_Dummy + $0022);
 | |
| 
 | |
|     { (Object *) Label is an image object. }
 | |
|     GA_LabelImage         =  (GA_Dummy + $0023);
 | |
| 
 | |
|     { New for V37:
 | |
|          * Boolean indicates that this gadget is to participate in
 | |
|          * cycling activation with Tab or Shift-Tab.
 | |
|     }
 | |
|     GA_TabCycle           =  (GA_Dummy + $0024);
 | |
| 
 | |
|     { New for V39:
 | |
|          * Boolean indicates that this gadget sends gadget-help
 | |
|     }
 | |
|     GA_GadgetHelp         =  (GA_Dummy + $0025);
 | |
| 
 | |
|     { New for V39:
 | |
|          * ti_Data is a pointer to an IBox structure which is
 | |
|          * to be copied into the extended gadget's bounds.
 | |
|     }
 | |
|     GA_Bounds             =  (GA_Dummy + $0026);
 | |
| 
 | |
|     { New for V39:
 | |
|          * Boolean indicates that this gadget has the "special relativity"
 | |
|          * property, which is useful for certain fancy relativity
 | |
|          * operations through the GM_LAYOUT method.
 | |
|     }
 | |
|     GA_RelSpecial         =  (GA_Dummy + $0027);
 | |
| 
 | |
|     
 | |
|      GA_TextAttr = GA_Dummy + 40;
 | |
|   { (struct TextAttr  ) Indicate the font to use for the gadget.
 | |
|          New for V42.  }
 | |
| 
 | |
|      GA_ReadOnly = GA_Dummy + 41;
 | |
|   { (BOOL) Indicate that the gadget is read-only (non-selectable).
 | |
|          Defaults to FALSE. New for V42.  }
 | |
| 
 | |
|      GA_Underscore = GA_Dummy + 42;
 | |
|   { (UBYTE) Underscore/escape character for keyboard shortcuts.
 | |
|          Defaults to '_' . New for V44.  }
 | |
| 
 | |
|      GA_ActivateKey = GA_Dummy + 43;
 | |
|   { (PChar) Set/Get the gadgets shortcut/activation key(s)
 | |
|          Defaults to NULL. New for V44.  }
 | |
| 
 | |
|      GA_BackFill = GA_Dummy + 44;
 | |
|   { (struct Hook  ) Backfill pattern hook.
 | |
|          Defaults to NULL. New for V44.  }
 | |
| 
 | |
|      GA_GadgetHelpText = GA_Dummy + 45;
 | |
|   { (PChar)   RESERVERD/PRIVATE DO NOT USE
 | |
|          Defaults to NULL. New for V44.  }
 | |
| 
 | |
|      GA_UserInput = GA_Dummy + 46;
 | |
|   { (BOOL) Notification tag indicates this notification is from the activite
 | |
|   	   gadget receiving user input - an attempt to make IDCMPUPDATE more efficient.
 | |
|          Defaults to FALSE. New for V44.  }
 | |
| { PROPGCLASS attributes }
 | |
| 
 | |
|  PGA_Dummy      = (TAG_USER + $31000);
 | |
|  PGA_Freedom    = (PGA_Dummy + $0001);
 | |
|         { only one of FREEVERT or FREEHORIZ }
 | |
|  PGA_Borderless = (PGA_Dummy + $0002);
 | |
|  PGA_HorizPot   = (PGA_Dummy + $0003);
 | |
|  PGA_HorizBody  = (PGA_Dummy + $0004);
 | |
|  PGA_VertPot    = (PGA_Dummy + $0005);
 | |
|  PGA_VertBody   = (PGA_Dummy + $0006);
 | |
|  PGA_Total      = (PGA_Dummy + $0007);
 | |
|  PGA_Visible    = (PGA_Dummy + $0008);
 | |
|  PGA_Top        = (PGA_Dummy + $0009);
 | |
| { New for V37: }
 | |
|  PGA_NewLook    = (PGA_Dummy + $000A);
 | |
| 
 | |
| { STRGCLASS attributes }
 | |
| 
 | |
|  STRINGA_Dummy         =  (TAG_USER      +$32000);
 | |
|  STRINGA_MaxChars      =  (STRINGA_Dummy + $0001);
 | |
|  STRINGA_Buffer        =  (STRINGA_Dummy + $0002);
 | |
|  STRINGA_UndoBuffer    =  (STRINGA_Dummy + $0003);
 | |
|  STRINGA_WorkBuffer    =  (STRINGA_Dummy + $0004);
 | |
|  STRINGA_BufferPos     =  (STRINGA_Dummy + $0005);
 | |
|  STRINGA_DispPos       =  (STRINGA_Dummy + $0006);
 | |
|  STRINGA_AltKeyMap     =  (STRINGA_Dummy + $0007);
 | |
|  STRINGA_Font          =  (STRINGA_Dummy + $0008);
 | |
|  STRINGA_Pens          =  (STRINGA_Dummy + $0009);
 | |
|  STRINGA_ActivePens    =  (STRINGA_Dummy + $000A);
 | |
|  STRINGA_EditHook      =  (STRINGA_Dummy + $000B);
 | |
|  STRINGA_EditModes     =  (STRINGA_Dummy + $000C);
 | |
| 
 | |
| { booleans }
 | |
|  STRINGA_ReplaceMode    = (STRINGA_Dummy + $000D);
 | |
|  STRINGA_FixedFieldMode = (STRINGA_Dummy + $000E);
 | |
|  STRINGA_NoFilterMode   = (STRINGA_Dummy + $000F);
 | |
| 
 | |
|  STRINGA_Justification  = (STRINGA_Dummy + $0010);
 | |
|         { GACT_STRINGCENTER, GACT_STRINGLEFT, GACT_STRINGRIGHT }
 | |
|  STRINGA_LongVal        = (STRINGA_Dummy + $0011);
 | |
|  STRINGA_TextVal        = (STRINGA_Dummy + $0012);
 | |
| 
 | |
|  STRINGA_ExitHelp       = (STRINGA_Dummy + $0013);
 | |
|         { STRINGA_ExitHelp is new for V37, and ignored by V36.
 | |
|          * Set this if you want the gadget to exit when Help is
 | |
|          * pressed.  Look for a code of $5F, the rawkey code for Help
 | |
|          }
 | |
| 
 | |
|  SG_DEFAULTMAXCHARS     = (128);
 | |
| 
 | |
| { Gadget Layout related attributes     }
 | |
| 
 | |
|  LAYOUTA_Dummy          = (TAG_USER  + $38000);
 | |
|  LAYOUTA_LayoutObj      = (LAYOUTA_Dummy + $0001);
 | |
|  LAYOUTA_Spacing        = (LAYOUTA_Dummy + $0002);
 | |
|  LAYOUTA_Orientation    = (LAYOUTA_Dummy + $0003);
 | |
|  
 | |
|  LAYOUTA_ChildMaxWidth = LAYOUTA_Dummy + $0004;
 | |
|   { (BOOL) Child objects are of equal width.  Should default to TRUE for
 | |
|          gadgets with a horizontal orientation.  New for V42.  }
 | |
| 
 | |
|  LAYOUTA_ChildMaxHeight = LAYOUTA_Dummy + $0005;
 | |
|   { (BOOL) Child objects are of equal height.  Should default to TRUE for
 | |
|          gadgets with a vertical orientation.  New for V42.  }
 | |
| 
 | |
| { orientation values   }
 | |
|  LORIENT_NONE   = 0;
 | |
|  LORIENT_HORIZ  = 1;
 | |
|  LORIENT_VERT   = 2;
 | |
| 
 | |
| 
 | |
| { Gadget Method ID's   }
 | |
| 
 | |
|  GM_Dummy      =  (-1);    { not used for anything                }
 | |
|  GM_HITTEST    =  (0);     { return GMR_GADGETHIT IF you are clicked on
 | |
|                                  * (whether or not you are disabled).
 | |
|                                  }
 | |
|  GM_RENDER      = (1);     { draw yourself, in the appropriate state }
 | |
|  GM_GOACTIVE    = (2);     { you are now going to be fed input    }
 | |
|  GM_HANDLEINPUT = (3);     { handle that input                    }
 | |
|  GM_GOINACTIVE  = (4);     { whether or not by choice, you are done  }
 | |
|  GM_HELPTEST    = (5);     { Will you send gadget help if the mouse is
 | |
|                                  * at the specified coordinates?  See below
 | |
|                                  * for possible GMR_ values.
 | |
|                                  }
 | |
|  GM_LAYOUT      = (6);     { re-evaluate your size based on the GadgetInfo
 | |
|                                  * Domain.  Do NOT re-render yourself yet, you
 | |
|                                  * will be called when it is time...
 | |
|                                  }
 | |
| 
 | |
| { Parameter "Messages" passed to gadget class methods  }
 | |
| 
 | |
| { GM_HITTEST   }
 | |
| type
 | |
| 
 | |
|   pgpHitTest = ^tgpHitTest;
 | |
|   tgpHitTest = record
 | |
|     MethodID  : Cardinal;
 | |
|     gpht_GInfo : pGadgetInfo;
 | |
|     gpht_Mouse : record
 | |
|              x : smallint;
 | |
|              y : smallint;
 | |
|                  end;
 | |
|   END;
 | |
| 
 | |
| const
 | |
| { For GM_HITTEST, return GMR_GADGETHIT if you were indeed hit,
 | |
|  * otherwise return zero.
 | |
|  *
 | |
|  * For GM_HELPTEST, return GMR_NOHELPHIT (zero) if you were not hit.
 | |
|  * Typically, return GMR_HELPHIT if you were hit.
 | |
|  * It is possible to pass a UWORD to the application via the Code field
 | |
|  * of the IDCMP_GADGETHELP message.  Return GMR_HELPCODE or'd with
 | |
|  * the UWORD-sized result you wish to return.
 | |
|  *
 | |
|  * GMR_HELPHIT yields a Code value of ((UWORD) ~0), which should
 | |
|  * mean "nothing particular" to the application.
 | |
|  }
 | |
| 
 | |
|  GMR_GADGETHIT  = ($00000004);    { GM_HITTEST hit }
 | |
| 
 | |
|  GMR_NOHELPHIT  = ($00000000);    { GM_HELPTEST didn't hit }
 | |
|  GMR_HELPHIT    = ($FFFFFFFF);    { GM_HELPTEST hit, return code = ~0 }
 | |
|  GMR_HELPCODE   = ($00010000);    { GM_HELPTEST hit, return low word as code }
 | |
| 
 | |
| 
 | |
| { GM_RENDER    }
 | |
| Type
 | |
|    pgpRender = ^tgpRender;
 | |
|    tgpRender = record
 | |
|     MethodID  : Cardinal;
 | |
|     gpr_GInfo : pGadgetInfo;      { gadget context               }
 | |
|     gpr_RPort : pRastPort;        { all ready for use            }
 | |
|     gpr_Redraw : Longint;           { might be a "highlight pass"  }
 | |
|    END;
 | |
| 
 | |
| { values of gpr_Redraw }
 | |
| CONST
 | |
|  GREDRAW_UPDATE = (2);     { incremental update, e.g. prop slider }
 | |
|  GREDRAW_REDRAW = (1);     { redraw gadget        }
 | |
|  GREDRAW_TOGGLE = (0);     { toggle highlight, IF applicable      }
 | |
| 
 | |
| { GM_GOACTIVE, GM_HANDLEINPUT  }
 | |
| Type
 | |
| 
 | |
|   pgpInput = ^tgpInput;
 | |
|   tgpInput = record
 | |
|     MethodID : Cardinal;
 | |
|     gpi_GInfo : pGadgetInfo;
 | |
|     gpi_IEvent : pInputEvent;
 | |
|     gpi_Termination : Pointer;
 | |
|     gpi_Mouse : record
 | |
|             x : smallint;
 | |
|             y : smallint;
 | |
|                 end;
 | |
|     {* (V39) Pointer to TabletData structure, if this event originated
 | |
|      * from a tablet which sends IESUBCLASS_NEWTABLET events, or NULL if
 | |
|      * not.
 | |
|      *
 | |
|      * DO NOT ATTEMPT TO READ THIS FIELD UNDER INTUITION PRIOR TO V39!
 | |
|      * IT WILL BE INVALID!
 | |
|      *}
 | |
|    gpi_TabletData  : pTabletData;
 | |
|   END;
 | |
| 
 | |
| { GM_HANDLEINPUT and GM_GOACTIVE  return code flags    }
 | |
| { return GMR_MEACTIVE (0) alone if you want more input.
 | |
|  * Otherwise, return ONE of GMR_NOREUSE and GMR_REUSE, and optionally
 | |
|  * GMR_VERIFY.
 | |
|  }
 | |
| CONST
 | |
|  GMR_MEACTIVE  =  (0);
 | |
|  GMR_NOREUSE   =  (2);
 | |
|  GMR_REUSE     =  (4);
 | |
|  GMR_VERIFY    =  (8);        { you MUST set cgp_Termination }
 | |
| 
 | |
| { New for V37:
 | |
|  * You can end activation with one of GMR_NEXTACTIVE and GMR_PREVACTIVE,
 | |
|  * which instructs Intuition to activate the next or previous gadget
 | |
|  * that has GFLG_TABCYCLE set.
 | |
|  }
 | |
|  GMR_NEXTACTIVE = (16);
 | |
|  GMR_PREVACTIVE = (32);
 | |
| 
 | |
| { GM_GOINACTIVE }
 | |
| Type
 | |
| 
 | |
|    pgpGoInactive = ^tgpGoInactive;
 | |
|    tgpGoInactive = record
 | |
|     MethodID    : Cardinal;
 | |
|     gpgi_GInfo  : pGadgetInfo;
 | |
| 
 | |
|     { V37 field only!  DO NOT attempt to read under V36! }
 | |
|     gpgi_Abort  : Cardinal;               { gpgi_Abort=1 IF gadget was aborted
 | |
|                                          * by Intuition and 0 if gadget went
 | |
|                                          * inactive at its own request
 | |
|                                          }
 | |
|    END;
 | |
| 
 | |
| {* New for V39: Intuition sends GM_LAYOUT to any GREL_ gadget when
 | |
|  * the gadget is added to the window (or when the window opens, if
 | |
|  * the gadget was part of the NewWindow.FirstGadget or the WA_Gadgets
 | |
|  * list), or when the window is resized.  Your gadget can set the
 | |
|  * GA_RelSpecial property to get GM_LAYOUT events without Intuition
 | |
|  * changing the interpretation of your gadget select box.  This
 | |
|  * allows for completely arbitrary resizing/repositioning based on
 | |
|  * window size.
 | |
|  *}
 | |
| {* GM_LAYOUT *}
 | |
| Type
 | |
| 
 | |
|  pgpLayout = ^tgpLayout;
 | |
|  tgpLayout = record
 | |
|     MethodID            : Cardinal;
 | |
|     gpl_GInfo           : pGadgetInfo;
 | |
|     gpl_Initial         : Cardinal;      {* non-zero if this method was invoked
 | |
|                                          * during AddGList() or OpenWindow()
 | |
|                                          * time.  zero if this method was invoked
 | |
|                                          * during window resizing.
 | |
|                                          *}
 | |
|  end;
 | |
| 
 | |
| {***************************************************************************}
 | |
| 
 | |
| { The GM_DOMAIN method is used to obtain the sizing requirements of an
 | |
|  * object for a class before ever creating an object. }
 | |
| 
 | |
| { GM_DOMAIN }
 | |
| 
 | |
|     PgpDomain = ^tgpDomain;
 | |
|      tgpDomain = record
 | |
|           MethodID : Cardinal;
 | |
|           gpd_GInfo : PGadgetInfo;
 | |
|           gpd_RPort : PRastPort;    { RastPort to layout for }
 | |
|           gpd_Which : LongInt;
 | |
|           gpd_Domain : tIBox;       { Resulting domain }
 | |
|           gpd_Attrs : PTagItem;     { Additional attributes }
 | |
|        end;
 | |
| 
 | |
| 
 | |
|   const
 | |
|      GDOMAIN_MINIMUM = 0;
 | |
|   { Minimum size  }
 | |
| 
 | |
|      GDOMAIN_NOMINAL = 1;
 | |
|   { Nominal size  }
 | |
| 
 | |
|      GDOMAIN_MAXIMUM = 2;
 | |
|   { Maximum size  }
 | |
| 
 | |
| {***************************************************************************}
 | |
| 
 | |
| { The GM_KEYTEST method is used to determin if a key press matches an
 | |
|  * object's activation key(s). }
 | |
| 
 | |
| { GM_KEYTEST send this message.
 | |
|  }
 | |
|  
 | |
|   type
 | |
|      PgpKeyTest = ^tgpKeyTest;
 | |
|      tgpKeyTest = record
 | |
|           MethodID : Cardinal;
 | |
|           gpkt_GInfo : PGadgetInfo;
 | |
|           gpkt_IMsg : PIntuiMessage;   { The IntuiMessage that triggered this }
 | |
|           gpkt_VanillaKey : Cardinal;
 | |
|        end;
 | |
| 
 | |
| {***************************************************************************}
 | |
| 
 | |
| { The GM_KEYGOACTIVE method is called to "simulate" a gadget going down.
 | |
|  * A gadget should render itself in a selected state when receiving
 | |
|  * this message. If the class supports this method, it must return
 | |
|  * GMR_KEYACTIVE.
 | |
|  *
 | |
|  * If a gadget returns zero for this method, it will subsequently be
 | |
|  * activated via ActivateGadget() with a NULL IEvent.
 | |
|  }
 | |
|  
 | |
|      PgpKeyInput = ^tgpKeyInput;
 | |
|      tgpKeyInput = record
 | |
|           MethodID : Cardinal;        { GM_KEYGOACTIVE }
 | |
|           gpk_GInfo : PGadgetInfo;
 | |
|           gpk_IEvent : PInputEvent;
 | |
|           gpk_Termination : ^LongInt;
 | |
|        end;
 | |
| 
 | |
| 
 | |
|   const
 | |
|      GMR_KEYACTIVE = 1 shl 4;
 | |
| 
 | |
|   { you MUST set gpk_Termination  }
 | |
|      GMR_KEYVERIFY = 1 shl 5;
 | |
| 
 | |
| { The GM_KEYGOINACTIVE method is called to simulate the gadget release.
 | |
|  * Upon receiving this message, the gadget should do everything a
 | |
|  * normal gadget release would do.
 | |
|  }
 | |
| 
 | |
|   type
 | |
|      PgpKeyGoInactive = ^tgpKeyGoInactive;
 | |
|      tgpKeyGoInactive = record
 | |
|           MethodID : Cardinal;
 | |
|           gpki_GInfo : PGadgetInfo;
 | |
|           gpki_Abort : Cardinal;
 | |
|        end;
 | |
| 
 | |
| CONST
 | |
|  ICM_Dummy      = ($0401);       { used for nothing             }
 | |
|  ICM_SETLOOP    = ($0402);       { set/increment loop counter   }
 | |
|  ICM_CLEARLOOP  = ($0403);       { clear/decrement loop counter }
 | |
|  ICM_CHECKLOOP  = ($0404);       { set/increment loop           }
 | |
| 
 | |
| { no parameters for ICM_SETLOOP, ICM_CLEARLOOP, ICM_CHECKLOOP  }
 | |
| 
 | |
| { interconnection attributes used by icclass, modelclass, and gadgetclass }
 | |
|  ICA_Dummy      = (TAG_USER+$40000);
 | |
|  ICA_TARGET     = (ICA_Dummy + 1);
 | |
|         { interconnection target               }
 | |
|  ICA_MAP        = (ICA_Dummy + 2);
 | |
|         { interconnection map tagitem list     }
 | |
|  ICSPECIAL_CODE = (ICA_Dummy + 3);
 | |
|         { a "pseudo-attribute", see below.     }
 | |
| 
 | |
| { Normally, the value for ICA_TARGET is some object pointer,
 | |
|  * but if you specify the special value ICTARGET_IDCMP, notification
 | |
|  * will be send as an IDCMP_IDCMPUPDATE message to the appropriate window's
 | |
|  * IDCMP port.  See the definition of IDCMP_IDCMPUPDATE.
 | |
|  *
 | |
|  * When you specify ICTARGET_IDCMP for ICA_TARGET, the map you
 | |
|  * specify will be applied to derive the attribute list that is
 | |
|  * sent with the IDCMP_IDCMPUPDATE message.  If you specify a map list
 | |
|  * which results in the attribute tag id ICSPECIAL_CODE, the
 | |
|  * lower sixteen bits of the corresponding ti_Data value will
 | |
|  * be copied into the Code field of the IDCMP_IDCMPUPDATE IntuiMessage.
 | |
|  }
 | |
|  ICTARGET_IDCMP = (NOT 0);
 | |
| 
 | |
| 
 | |
| CONST
 | |
|  CUSTOMIMAGEDEPTH     =   (-1);
 | |
| { if image.Depth is this, it's a new Image class object }
 | |
| 
 | |
| 
 | |
| {****************************************************}
 | |
| CONST
 | |
|  IA_Dummy             =   (TAG_USER + $20000);
 | |
|  IA_Left              =   (IA_Dummy + $01);
 | |
|  IA_Top               =   (IA_Dummy + $02);
 | |
|  IA_Width             =   (IA_Dummy + $03);
 | |
|  IA_Height            =   (IA_Dummy + $04);
 | |
|  IA_FGPen             =   (IA_Dummy + $05);
 | |
|                     { IA_FGPen also means "PlanePick"  }
 | |
|  IA_BGPen             =   (IA_Dummy + $06);
 | |
|                     { IA_BGPen also means "PlaneOnOff" }
 | |
|  IA_Data              =   (IA_Dummy + $07);
 | |
|                     { bitplanes, for classic image,
 | |
|                      * other image classes may use it for other things
 | |
|                      }
 | |
|  IA_LineWidth         =   (IA_Dummy + $08);
 | |
|  IA_Pens              =   (IA_Dummy + $0E);
 | |
|                     { pointer to UWORD pens[],
 | |
|                      * ala DrawInfo.Pens, MUST be
 | |
|                      * terminated by ~0.  Some classes can
 | |
|                      * choose to have this, or SYSIA_DrawInfo,
 | |
|                      * or both.
 | |
|                      }
 | |
|  IA_Resolution        =   (IA_Dummy + $0F);
 | |
|                     { packed uwords for x/y resolution into a longword
 | |
|                      * ala DrawInfo.Resolution
 | |
|                      }
 | |
| 
 | |
| {*** see class documentation to learn which    ****}
 | |
| {*** classes recognize these                   ****}
 | |
|  IA_APattern           =  (IA_Dummy + $10);
 | |
|  IA_APatSize           =  (IA_Dummy + $11);
 | |
|  IA_Mode               =  (IA_Dummy + $12);
 | |
|  IA_Font               =  (IA_Dummy + $13);
 | |
|  IA_Outline            =  (IA_Dummy + $14);
 | |
|  IA_Recessed           =  (IA_Dummy + $15);
 | |
|  IA_DoubleEmboss       =  (IA_Dummy + $16);
 | |
|  IA_EdgesOnly          =  (IA_Dummy + $17);
 | |
| 
 | |
| {*** "sysiclass" attributes                    ****}
 | |
|  SYSIA_Size            =  (IA_Dummy + $0B);
 | |
|                     { 's below          }
 | |
|  SYSIA_Depth           =  (IA_Dummy + $0C);
 | |
|                     { this is unused by Intuition.  SYSIA_DrawInfo
 | |
|                      * is used instead for V36
 | |
|                      }
 | |
|  SYSIA_Which           =  (IA_Dummy + $0D);
 | |
|                     { see 's below      }
 | |
|  SYSIA_DrawInfo        =  (IA_Dummy + $18);
 | |
|                     { pass to sysiclass, please }
 | |
| 
 | |
| {****  obsolete: don't use these, use IA_Pens  ****}
 | |
|  SYSIA_Pens            =  IA_Pens;
 | |
|  IA_ShadowPen          =  (IA_Dummy + $09);
 | |
|  IA_HighlightPen       =  (IA_Dummy + $0A);
 | |
| 
 | |
| { New for V39: }
 | |
|  SYSIA_ReferenceFont   =  (IA_Dummy + $19);
 | |
|                     { Font to use as reference for scaling
 | |
|                      * certain sysiclass images
 | |
|                      }
 | |
|  IA_SupportsDisable    =  (IA_Dummy + $1a);
 | |
|                     { By default, Intuition ghosts gadgets itself,
 | |
|                      * instead of relying on IDS_DISABLED or
 | |
|                      * IDS_SELECTEDDISABLED.  An imageclass that
 | |
|                      * supports these states should return this attribute
 | |
|                      * as TRUE.  You cannot set or clear this attribute,
 | |
|                      * however.
 | |
|                      }
 | |
| 
 | |
|  IA_FrameType          =  (IA_Dummy + $1b);
 | |
|                     { Starting with V39, FrameIClass recognizes
 | |
|                      * several standard types of frame.  Use one
 | |
|                      * of the FRAME_ specifiers below.  Defaults
 | |
|                      * to FRAME_DEFAULT.
 | |
|                      }
 | |
| 
 | |
|      IA_Underscore = IA_Dummy + $1c;
 | |
|   { V44, Indicate underscore keyboard shortcut for image labels.
 | |
|   		       (UBYTE) Defaults to '_'
 | |
|   		      }
 | |
| 
 | |
|      IA_Scalable = IA_Dummy + $1d;
 | |
|   { V44, Attribute indicates this image is allowed
 | |
|   			   to/can scale its rendering.
 | |
|   		       (BOOL) Defaults to FALSE.
 | |
|   		      }
 | |
| 
 | |
|      IA_ActivateKey = IA_Dummy + $1e;
 | |
|   { V44, Used to get an underscored label shortcut.
 | |
|   		       Useful for labels attached to string gadgets.
 | |
|   		       (UBYTE) Defaults to NULL.
 | |
|   		      }
 | |
| 
 | |
|      IA_Screen = IA_Dummy + $1f;
 | |
|   { V44 Screen pointer, may be useful/required by certain classes.
 | |
|   		       (struct Screen  )
 | |
|   		      }
 | |
| 
 | |
|      IA_Precision = IA_Dummy + $20;
 | |
|   { V44 Precision value, typically pen precision but may be
 | |
|   		       used for similar custom purposes.
 | |
|   		       (Cardinal)
 | |
|   		      }
 | |
| 
 | |
| {* next attribute: (IA_Dummy + $1c)   *}
 | |
| 
 | |
| {***********************************************}
 | |
| 
 | |
| { data values for SYSIA_Size   }
 | |
|  SYSISIZE_MEDRES = (0);
 | |
|  SYSISIZE_LOWRES = (1);
 | |
|  SYSISIZE_HIRES  = (2);
 | |
| 
 | |
| {
 | |
|  * SYSIA_Which tag data values:
 | |
|  * Specifies which system gadget you want an image for.
 | |
|  * Some numbers correspond to internal Intuition s
 | |
|  }
 | |
|  DEPTHIMAGE     = ($00);
 | |
|  ZOOMIMAGE      = ($01);
 | |
|  SIZEIMAGE      = ($02);
 | |
|  CLOSEIMAGE     = ($03);
 | |
|  SDEPTHIMAGE    = ($05); { screen depth gadget }
 | |
|  LEFTIMAGE      = ($0A);
 | |
|  UPIMAGE        = ($0B);
 | |
|  RIGHTIMAGE     = ($0C);
 | |
|  DOWNIMAGE      = ($0D);
 | |
|  CHECKIMAGE     = ($0E);
 | |
|  MXIMAGE        = ($0F); { mutual exclude "button" }
 | |
| {* New for V39: *}
 | |
|  MENUCHECK      = ($10); { Menu checkmark image }
 | |
|  AMIGAKEY       = ($11); { Menu Amiga-key image }
 | |
| 
 | |
| { Data values for IA_FrameType (recognized by FrameIClass)
 | |
|  *
 | |
|  * FRAME_DEFAULT:  The standard V37-type frame, which has
 | |
|  *	thin edges.
 | |
|  * FRAME_BUTTON:  Standard button gadget frames, having thicker
 | |
|  *	sides and nicely edged corners.
 | |
|  * FRAME_RIDGE:  A ridge such as used by standard string gadgets.
 | |
|  *	You can recess the ridge to get a groove image.
 | |
|  * FRAME_ICONDROPBOX: A broad ridge which is the standard imagery
 | |
|  *	for areas in AppWindows where icons may be dropped.
 | |
|  }
 | |
|  
 | |
|      FRAME_DEFAULT = 0;
 | |
|      FRAME_BUTTON = 1;
 | |
|      FRAME_RIDGE = 2;
 | |
|      FRAME_ICONDROPBOX = 3;
 | |
| 
 | |
| { image message id's   }
 | |
|     IM_DRAW     = $202;  { draw yourself, with "state"          }
 | |
|     IM_HITTEST  = $203;  { return TRUE IF click hits image      }
 | |
|     IM_ERASE    = $204;  { erase yourself                       }
 | |
|     IM_MOVE     = $205;  { draw new AND erase old, smoothly     }
 | |
| 
 | |
|     IM_DRAWFRAME= $206;  { draw with specified dimensions       }
 | |
|     IM_FRAMEBOX = $207;  { get recommended frame around some box}
 | |
|     IM_HITFRAME = $208;  { hittest with dimensions              }
 | |
|     IM_ERASEFRAME= $209; { hittest with dimensions              }
 | |
|     IM_DOMAINFRAME = $20A;{ query image for its domain info (V44)  }
 | |
| 
 | |
| { image draw states or styles, for IM_DRAW }
 | |
|     IDS_NORMAL          = (0);
 | |
|     IDS_SELECTED        = (1);    { for selected gadgets     }
 | |
|     IDS_DISABLED        = (2);    { for disabled gadgets     }
 | |
|     IDS_BUSY            = (3);    { for future functionality }
 | |
|     IDS_INDETERMINATE   = (4);    { for future functionality }
 | |
|     IDS_INACTIVENORMAL  = (5);    { normal, in inactive window border }
 | |
|     IDS_INACTIVESELECTED= (6);    { selected, in inactive border }
 | |
|     IDS_INACTIVEDISABLED= (7);    { disabled, in inactive border }
 | |
|     IDS_SELECTEDDISABLED = 8;     { disabled and selected     }
 | |
| 
 | |
| { oops, please forgive spelling error by jimm }
 | |
|  IDS_INDETERMINANT = IDS_INDETERMINATE;
 | |
| 
 | |
| { IM_FRAMEBOX  }
 | |
| Type
 | |
| 
 | |
|   pimpFrameBox = ^timpFrameBox;
 | |
|   timpFrameBox = record
 | |
|     MethodID   : Cardinal;
 | |
|     imp_ContentsBox  : pIBox;       { input: relative box of contents }
 | |
|     imp_FrameBox     : pIBox;          { output: rel. box of encl frame  }
 | |
|     imp_DrInfo       : pDrawInfo;
 | |
|     imp_FrameFlags   : Cardinal;
 | |
|   END;
 | |
| 
 | |
| CONST
 | |
|  FRAMEF_SPECIFY = (1);  { Make do with the dimensions of FrameBox
 | |
|                                  * provided.
 | |
|                                  }
 | |
| 
 | |
| { IM_DRAW, IM_DRAWFRAME        }
 | |
| Type
 | |
| 
 | |
|    pimpDraw = ^timpDraw;
 | |
|    timpDraw = record
 | |
|     MethodID    : Cardinal;
 | |
|     imp_RPort   : pRastPort;
 | |
|     imp_Offset  : record
 | |
|               x : Word;
 | |
|               y : Word;
 | |
|                   end;
 | |
|     imp_State   : Cardinal;
 | |
|     imp_DrInfo  : pDrawInfo;
 | |
| 
 | |
|     { these parameters only valid for IM_DRAWFRAME }
 | |
|     imp_Dimensions : record
 | |
|              Width : Word;
 | |
|             Height : Word;
 | |
|                      end;
 | |
|    END;
 | |
| 
 | |
| { IM_ERASE, IM_ERASEFRAME      }
 | |
| { NOTE: This is a subset of impDraw    }
 | |
| 
 | |
|    pimpErase = ^timpErase;
 | |
|    timpErase = record
 | |
|     MethodID       : Cardinal;
 | |
|     imp_RPort      : pRastPort;
 | |
|     imp_Offset     : record
 | |
|                  x : Word;
 | |
|                  y : Word;
 | |
|                      end;
 | |
| 
 | |
|     { these parameters only valid for IM_ERASEFRAME }
 | |
|     imp_Dimensions : record
 | |
|              Width : Word;
 | |
|             Height : Word;
 | |
|                      end;
 | |
|    END;
 | |
| 
 | |
| { IM_HITTEST, IM_HITFRAME      }
 | |
| 
 | |
|    pimpHitTest = ^timpHitTest;
 | |
|    timpHitTest = record
 | |
|     MethodID   : Cardinal;
 | |
|     imp_Point  : record
 | |
|              x : Word;
 | |
|              y : Word;
 | |
|                  end;
 | |
| 
 | |
|     { these parameters only valid for IM_HITFRAME }
 | |
|     imp_Dimensions : record
 | |
|                Width : Word;
 | |
|                Height : Word;
 | |
|                end;
 | |
|    END;
 | |
| 
 | |
| 
 | |
| { The IM_DOMAINFRAME method is used to obtain the sizing
 | |
|  * requirements of an image object within a layout group.
 | |
|  }
 | |
| 
 | |
| { IM_DOMAINFRAME }
 | |
|      PimpDomainFrame = ^timpDomainFrame;
 | |
|      timpDomainFrame = record
 | |
|           MethodID : Cardinal;
 | |
|           imp_DrInfo : PDrawInfo;
 | |
|           imp_RPort : PRastPort;
 | |
|           imp_Which : LongInt;
 | |
|           imp_Domain : tIBox;
 | |
|           imp_Attrs : PTagItem;
 | |
|        end;
 | |
| 
 | |
|   { Accepted vales for imp_Which.
 | |
|     }
 | |
| 
 | |
|   const
 | |
|      IDOMAIN_MINIMUM = 0;
 | |
|      IDOMAIN_NOMINAL = 1;
 | |
|      IDOMAIN_MAXIMUM = 2;
 | |
| 
 | |
|  { **  'boopsi' pointer class interface }
 | |
| 
 | |
| const
 | |
| { The following tags are recognized at NewObject() time by
 | |
|  * pointerclass:
 | |
|  *
 | |
|  * POINTERA_BitMap (struct BitMap *) - Pointer to bitmap to
 | |
|  *      get pointer imagery from.  Bitplane data need not be
 | |
|  *      in chip RAM.
 | |
|  * POINTERA_XOffset (LONG) - X-offset of the pointer hotspot.
 | |
|  * POINTERA_YOffset (LONG) - Y-offset of the pointer hotspot.
 | |
|  * POINTERA_WordWidth (Cardinal) - designed width of the pointer in words
 | |
|  * POINTERA_XResolution (Cardinal) - one of the POINTERXRESN_ flags below
 | |
|  * POINTERA_YResolution (Cardinal) - one of the POINTERYRESN_ flags below
 | |
|  *
 | |
|  }
 | |
| 
 | |
|  POINTERA_Dummy = (TAG_USER + $39000);
 | |
| 
 | |
|  POINTERA_BitMap        = (POINTERA_Dummy + $01);
 | |
|  POINTERA_XOffset       = (POINTERA_Dummy + $02);
 | |
|  POINTERA_YOffset       = (POINTERA_Dummy + $03);
 | |
|  POINTERA_WordWidth     = (POINTERA_Dummy + $04);
 | |
|  POINTERA_XResolution   = (POINTERA_Dummy + $05);
 | |
|  POINTERA_YResolution   = (POINTERA_Dummy + $06);
 | |
| 
 | |
| { These are the choices for the POINTERA_XResolution attribute which
 | |
|  * will determine what resolution pixels are used for this pointer.
 | |
|  *
 | |
|  * POINTERXRESN_DEFAULT (ECS-compatible pointer width)
 | |
|  *      = 70 ns if SUPERHIRES-type mode, 140 ns if not
 | |
|  *
 | |
|  * POINTERXRESN_SCREENRES
 | |
|  *      = Same as pixel speed of screen
 | |
|  *
 | |
|  * POINTERXRESN_LORES (pointer always in lores-like pixels)
 | |
|  *      = 140 ns in 15kHz modes, 70 ns in 31kHz modes
 | |
|  *
 | |
|  * POINTERXRESN_HIRES (pointer always in hires-like pixels)
 | |
|  *      = 70 ns in 15kHz modes, 35 ns in 31kHz modes
 | |
|  *
 | |
|  * POINTERXRESN_140NS (pointer always in 140 ns pixels)
 | |
|  *      = 140 ns always
 | |
|  *
 | |
|  * POINTERXRESN_70NS (pointer always in 70 ns pixels)
 | |
|  *      = 70 ns always
 | |
|  *
 | |
|  * POINTERXRESN_35NS (pointer always in 35 ns pixels)
 | |
|  *      = 35 ns always
 | |
|  }
 | |
| 
 | |
|  POINTERXRESN_DEFAULT   = 0;
 | |
|  POINTERXRESN_140NS     = 1;
 | |
|  POINTERXRESN_70NS      = 2;
 | |
|  POINTERXRESN_35NS      = 3;
 | |
| 
 | |
|  POINTERXRESN_SCREENRES = 4;
 | |
|  POINTERXRESN_LORES     = 5;
 | |
|  POINTERXRESN_HIRES     = 6;
 | |
| 
 | |
| { These are the choices for the POINTERA_YResolution attribute which
 | |
|  * will determine what vertical resolution is used for this pointer.
 | |
|  *
 | |
|  * POINTERYRESN_DEFAULT
 | |
|  *      = In 15 kHz modes, the pointer resolution will be the same
 | |
|  *        as a non-interlaced screen.  In 31 kHz modes, the pointer
 | |
|  *        will be doubled vertically.  This means there will be about
 | |
|  *        200-256 pointer lines per screen.
 | |
|  *
 | |
|  * POINTERYRESN_HIGH
 | |
|  * POINTERYRESN_HIGHASPECT
 | |
|  *      = Where the hardware/software supports it, the pointer resolution
 | |
|  *        will be high.  This means there will be about 400-480 pointer
 | |
|  *        lines per screen.  POINTERYRESN_HIGHASPECT also means that
 | |
|  *        when the pointer comes out double-height due to hardware/software
 | |
|  *        restrictions, its width would be doubled as well, if possible
 | |
|  *        (to preserve aspect).
 | |
|  *
 | |
|  * POINTERYRESN_SCREENRES
 | |
|  * POINTERYRESN_SCREENRESASPECT
 | |
|  *      = Will attempt to match the vertical resolution of the pointer
 | |
|  *        to the screen's vertical resolution.  POINTERYRESN_SCREENASPECT also
 | |
|  *        means that when the pointer comes out double-height due to
 | |
|  *        hardware/software restrictions, its width would be doubled as well,
 | |
|  *        if possible (to preserve aspect).
 | |
|  *
 | |
|  }
 | |
| 
 | |
|  POINTERYRESN_DEFAULT          =  0;
 | |
|  POINTERYRESN_HIGH             =  2;
 | |
|  POINTERYRESN_HIGHASPECT       =  3;
 | |
|  POINTERYRESN_SCREENRES        =  4;
 | |
|  POINTERYRESN_SCREENRESASPECT  =  5;
 | |
| 
 | |
| { Compatibility note:
 | |
|  *
 | |
|  * The AA chipset supports variable sprite width and resolution, but
 | |
|  * the setting of width and resolution is global for all sprites.
 | |
|  * When no other sprites are in use, Intuition controls the sprite
 | |
|  * width and sprite resolution for correctness based on pointerclass
 | |
|  * attributes specified by the creator of the pointer.  Intuition
 | |
|  * controls sprite resolution with the VTAG_DEFSPRITERESN_SET tag
 | |
|  * to VideoControl().  Applications can override this on a per-viewport
 | |
|  * basis with the VTAG_SPRITERESN_SET tag to VideoControl().
 | |
|  *
 | |
|  * If an application uses a sprite other than the pointer sprite,
 | |
|  * Intuition will automatically regenerate the pointer sprite's image in
 | |
|  * a compatible width.  This might involve BitMap scaling of the imagery
 | |
|  * you supply.
 | |
|  *
 | |
|  * If any sprites other than the pointer sprite were obtained with the
 | |
|  * old GetSprite() call, Intuition assumes that the owner of those
 | |
|  * sprites is unaware of sprite resolution, hence Intuition will set the
 | |
|  * default sprite resolution (VTAG_DEFSPRITERESN_SET) to ECS-compatible,
 | |
|  * instead of as requested by the various pointerclass attributes.
 | |
|  *
 | |
|  * No resolution fallback occurs when applications use ExtSprites.
 | |
|  * Such applications are expected to use VTAG_SPRITERESN_SET tag if
 | |
|  * necessary.
 | |
|  *
 | |
|  * NB:  Under release V39, only sprite width compatibility is implemented.
 | |
|  * Sprite resolution compatibility was added for V40.
 | |
|  }
 | |
| 
 | |
| 
 | |
| Type
 | |
| 
 | |
|    pStringExtend = ^tStringExtend;
 | |
|    tStringExtend = record
 | |
|     { display specifications   }
 | |
|     Font        : pTextFont;      { must be an open Font (not TextAttr)  }
 | |
|     Pens        : Array[0..1] of Byte;        { color of text/backgroun              }
 | |
|     ActivePens  : Array[0..1] of Byte;  { colors when gadget is active         }
 | |
| 
 | |
|     { edit specifications      }
 | |
|     InitialModes : Cardinal;   { initial mode flags, below            }
 | |
|     EditHook     : pHook;      { IF non-NULL, must supply WorkBuffer  }
 | |
|     WorkBuffer   : PChar;    { must be as large as StringInfo.Buffer}
 | |
| 
 | |
|     Reserved     : Array[0..3] of Cardinal;    { set to 0                             }
 | |
|    END;
 | |
| 
 | |
|    pSGWork = ^tSGWork;
 | |
|    tSGWork = record
 | |
|     { set up when gadget is first activated    }
 | |
|     Gad       : pGadget;         { the contestant itself        }   { Gadget in C-Includes }
 | |
|     StrInfo   : pStringInfo;     { easy access to sinfo         }   { StrInfo in C-Includes }
 | |
|     WorkBuffer : PChar;           { intuition's planned result   }
 | |
|     PrevBuffer : PChar;           { what was there before        }
 | |
|     Modes      : Cardinal;          { current mode                 }
 | |
| 
 | |
|     { modified for each input event    }
 | |
|     IEvent     : pInputEvent;    { actual event: do not change  }
 | |
|     Code       : Word;            { character code, IF one byte  }
 | |
|     BufferPos  : smallint;            { cursor position              }
 | |
|     NumChars   : smallint;
 | |
|     Actions    : Cardinal;          { what Intuition will do       }
 | |
|     LongInt_   : Longint;          { temp storage for longint     }
 | |
| 
 | |
|     GInfo      : pGadgetInfo;    { see cghooks.h                }   { GadgetInfo in C-Includes }
 | |
|     EditOp     : Word;            { from constants below         }
 | |
|    END;
 | |
| 
 | |
| { SGWork.EditOp -
 | |
|  * These values indicate what basic type of operation the global
 | |
|  * editing hook has performed on the string before your gadget's custom
 | |
|  * editing hook gets called.  You do not have to be concerned with the
 | |
|  * value your custom hook leaves in the EditOp field, only if you
 | |
|  * write a global editing hook.
 | |
|  *
 | |
|  * For most of these general edit operations, you'll want to compare
 | |
|  * the BufferPos and NumChars of the StringInfo (before global editing)
 | |
|  * and SGWork (after global editing).
 | |
|  }
 | |
| 
 | |
| CONST
 | |
|  EO_NOOP       =  ($0001);
 | |
|         { did nothing                                                  }
 | |
|  EO_DELBACKWARD=  ($0002);
 | |
|         { deleted some chars (maybe 0).                                }
 | |
|  EO_DELFORWARD =  ($0003);
 | |
|         { deleted some characters under and in front of the cursor     }
 | |
|  EO_MOVECURSOR =  ($0004);
 | |
|         { moved the cursor                                             }
 | |
|  EO_ENTER      =  ($0005);
 | |
|         { "enter" or "return" key, terminate                           }
 | |
|  EO_RESET      =  ($0006);
 | |
|         { current Intuition-style undo                                 }
 | |
|  EO_REPLACECHAR=  ($0007);
 | |
|         { replaced one character and (maybe) advanced cursor           }
 | |
|  EO_INSERTCHAR =  ($0008);
 | |
|         { inserted one char into string or added one at end            }
 | |
|  EO_BADFORMAT  =  ($0009);
 | |
|         { didn't like the text data, e.g., Bad LONGINT                 }
 | |
|  EO_BIGCHANGE  =  ($000A);        { unused by Intuition  }
 | |
|         { complete or major change to the text, e.g. new string        }
 | |
|  EO_UNDO       =  ($000B);        { unused by Intuition  }
 | |
|         { some other style of undo                                     }
 | |
|  EO_CLEAR      =  ($000C);
 | |
|         { clear the string                                             }
 | |
|  EO_SPECIAL    =  ($000D);        { unused by Intuition  }
 | |
|         { some operation that doesn't fit into the categories here     }
 | |
| 
 | |
| 
 | |
| { Mode Flags definitions (ONLY first group allowed as InitialModes)    }
 | |
|  SGM_REPLACE   =  (1);       { replace mode                 }
 | |
| { please initialize StringInfo with in-range value of BufferPos
 | |
|  * if you are using SGM_REPLACE mode.
 | |
|  }
 | |
| 
 | |
|  SGM_FIXEDFIELD = (2);       { fixed length buffer          }
 | |
|                                         { always set SGM_REPLACE, too  }
 | |
|  SGM_NOFILTER   = (4);       { don't filter control chars   }
 | |
| 
 | |
| { SGM_EXITHELP is new for V37, and ignored by V36: }
 | |
|  SGM_EXITHELP   = (128);       { exit with code = $5F IF HELP hit }
 | |
| 
 | |
| 
 | |
| { These Mode Flags are for internal use only                           }
 | |
|  SGM_NOCHANGE   = (8);       { no edit changes yet          }
 | |
|  SGM_NOWORKB    = (16);       { Buffer == PrevBuffer         }
 | |
|  SGM_CONTROL    = (32);       { control char escape mode     }
 | |
|  SGM_LONGINT    = (64);       { an intuition longint gadget  }
 | |
| 
 | |
| { String Gadget Action Flags (put in SGWork.Actions by EditHook)       }
 | |
|  SGA_USE        = ($1);  { use contents of SGWork               }
 | |
|  SGA_END        = ($2);  { terminate gadget, code in Code field }
 | |
|  SGA_BEEP       = ($4);  { flash the screen for the user        }
 | |
|  SGA_REUSE      = ($8);  { reuse input event                    }
 | |
|  SGA_REDISPLAY  = ($10); { gadget visuals changed               }
 | |
| 
 | |
| { New for V37: }
 | |
|  SGA_NEXTACTIVE = ($20); { Make next possible gadget active.    }
 | |
|  SGA_PREVACTIVE = ($40); { Make previous possible gadget active.}
 | |
| 
 | |
| { function id for only existing custom string gadget edit hook }
 | |
| 
 | |
|  SGH_KEY        = (1);    { process editing keystroke            }
 | |
|  SGH_CLICK      = (2);    { process mouse click cursor position  }
 | |
| 
 | |
| { Here's a brief summary of how the custom string gadget edit hook works:
 | |
|  *      You provide a hook in StringInfo.Extension.EditHook.
 | |
|  *      The hook is called in the standard way with the 'object'
 | |
|  *      a pointer to SGWork, and the 'message' a pointer to a command
 | |
|  *      block, starting either with (longword) SGH_KEY, SGH_CLICK,
 | |
|  *      or something new.
 | |
|  *
 | |
|  *      You return 0 if you don't understand the command (SGH_KEY is
 | |
|  *      required and assumed).  Return non-zero if you implement the
 | |
|  *      command.
 | |
|  *
 | |
|  *   SGH_KEY:
 | |
|  *      There are no parameters following the command longword.
 | |
|  *
 | |
|  *      Intuition will put its idea of proper values in the SGWork
 | |
|  *      before calling you, and if you leave SGA_USE set in the
 | |
|  *      SGWork.Actions field, Intuition will use the values
 | |
|  *      found in SGWork fields WorkBuffer, NumChars, BufferPos,
 | |
|  *      and LongInt, copying the WorkBuffer back to the StringInfo
 | |
|  *      Buffer.
 | |
|  *
 | |
|  *      NOTE WELL: You may NOT change other SGWork fields.
 | |
|  *
 | |
|  *      If you clear SGA_USE, the string gadget will be unchanged.
 | |
|  *
 | |
|  *      If you set SGA_END, Intuition will terminate the activation
 | |
|  *      of the string gadget.  If you also set SGA_REUSE, Intuition
 | |
|  *      will reuse the input event after it deactivates your gadget.
 | |
|  *
 | |
|  *      In this case, Intuition will put the value found in SGWork.Code
 | |
|  *      into the IntuiMessage.Code field of the IDCMP_GADGETUP message it
 | |
|  *      sends to the application.
 | |
|  *
 | |
|  *      If you set SGA_BEEP, Intuition will call DisplayBeep(); use
 | |
|  *      this if the user has typed in error, or buffer is full.
 | |
|  *
 | |
|  *      Set SGA_REDISPLAY if the changes to the gadget warrant a
 | |
|  *      gadget redisplay.  Note: cursor movement requires a redisplay.
 | |
|  *
 | |
|  *      Starting in V37, you may set SGA_PREVACTIVE or SGA_NEXTACTIVE
 | |
|  *      when you set SGA_END.  This tells Intuition that you want
 | |
|  *      the next or previous gadget with GFLG_TABCYCLE to be activated.
 | |
|  *
 | |
|  *   SGH_CLICK:
 | |
|  *      This hook command is called when Intuition wants to position
 | |
|  *      the cursor in response to a mouse click in the string gadget.
 | |
|  *
 | |
|  *      Again, here are no parameters following the command longword.
 | |
|  *
 | |
|  *      This time, Intuition has already calculated the mouse position
 | |
|  *      character cell and put it in SGWork.BufferPos.  The previous
 | |
|  *      BufferPos value remains in the SGWork.StringInfo.BufferPos.
 | |
|  *
 | |
|  *      Intuition will again use the SGWork fields listed above for
 | |
|  *      SGH_KEY.  One restriction is that you are NOT allowed to set
 | |
|  *      SGA_END or SGA_REUSE for this command.  Intuition will not
 | |
|  *      stand for a gadget which goes inactive when you click in it.
 | |
|  *
 | |
|  *      You should always leave the SGA_REDISPLAY flag set, since Intuition
 | |
|  *      uses this processing when activating a string gadget.
 | |
|  }
 | |
| 
 | |
| const
 | |
|   INTUITIONNAME : PChar = 'intuition.library';
 | |
| 
 | |
| var 
 | |
|   intuitionbase : PIntuitionBase;
 | |
| 
 | |
| 
 | |
| procedure OpenIntuition;
 | |
| SysCall IntuitionBase 030;
 | |
| 
 | |
| procedure Intuition(iEvent : pInputEvent location 'a0');
 | |
| SysCall IntuitionBase 036;
 | |
| 
 | |
| function AddGadget(window : pWindow location 'a0'; gadget : pGadget location 'a1'; position : CARDINAL location 'd0') : Word;
 | |
| SysCall IntuitionBase 042;
 | |
| 
 | |
| function ClearDMRequest(window : pWindow location 'a0') : BOOLEAN;
 | |
| SysCall IntuitionBase 048;
 | |
| 
 | |
| procedure ClearMenuStrip(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 054;
 | |
| 
 | |
| procedure ClearPointer(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 060;
 | |
| 
 | |
| function CloseScreen(screen : pScreen location 'a0') : BOOLEAN;
 | |
| SysCall IntuitionBase 066;
 | |
| 
 | |
| procedure CloseWindow(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 072;
 | |
| 
 | |
| function CloseWorkBench : LongInt;
 | |
| SysCall IntuitionBase 078;
 | |
| 
 | |
| procedure CurrentTime(VAR seconds : CARDINAL location 'a0'; VAR micros : CARDINAL location 'a1');
 | |
| SysCall IntuitionBase 084;
 | |
| 
 | |
| function DisplayAlert(alertNumber : CARDINAL location 'd0'; string1 : PChar location 'a0'; height : CARDINAL location 'd1') : BOOLEAN;
 | |
| SysCall IntuitionBase 090;
 | |
| 
 | |
| procedure DisplayBeep(screen : pScreen location 'a0');
 | |
| SysCall IntuitionBase 096;
 | |
| 
 | |
| function DoubleClick(sSeconds : CARDINAL location 'd0'; sMicros : CARDINAL location 'd1'; cSeconds : CARDINAL location 'd2'; cMicros : CARDINAL location 'd3') : BOOLEAN;
 | |
| SysCall IntuitionBase 102;
 | |
| 
 | |
| procedure DrawBorder(rp : pRastPort location 'a0'; border : pBorder location 'a1'; leftOffset : LongInt location 'd0'; topOffset : LongInt location 'd1');
 | |
| SysCall IntuitionBase 108;
 | |
| 
 | |
| procedure DrawImage(rp : pRastPort location 'a0'; image : pImage location 'a1'; leftOffset : LongInt location 'd0'; topOffset : LongInt location 'd1');
 | |
| SysCall IntuitionBase 114;
 | |
| 
 | |
| procedure EndRequest(requester : pRequester location 'a0'; window : pWindow location 'a1');
 | |
| SysCall IntuitionBase 120;
 | |
| 
 | |
| function GetDefPrefs(preferences : pPreferences location 'a0'; size : LongInt location 'd0') : pPreferences;
 | |
| SysCall IntuitionBase 126;
 | |
| 
 | |
| function GetPrefs(preferences : pPreferences location 'a0'; size : LongInt location 'd0') : pPreferences;
 | |
| SysCall IntuitionBase 132;
 | |
| 
 | |
| procedure InitRequester(requester : pRequester location 'a0');
 | |
| SysCall IntuitionBase 138;
 | |
| 
 | |
| function ItemAddress(menuStrip : pMenu location 'a0'; menuNumber : CARDINAL location 'd0') : pMenuItem;
 | |
| SysCall IntuitionBase 144;
 | |
| 
 | |
| function ModifyIDCMP(window : pWindow location 'a0'; flags : CARDINAL location 'd0') : BOOLEAN;
 | |
| SysCall IntuitionBase 150;
 | |
| 
 | |
| procedure ModifyProp(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'; flags : CARDINAL location 'd0'; horizPot : CARDINAL location 'd1'; vertPot : CARDINAL location 'd2'; horizBody : CARDINAL location 'd3'; vertBody : CARDINAL location 'd4');
 | |
| SysCall IntuitionBase 156;
 | |
| 
 | |
| procedure MoveScreen(screen : pScreen location 'a0'; dx : LongInt location 'd0'; dy : LongInt location 'd1');
 | |
| SysCall IntuitionBase 162;
 | |
| 
 | |
| procedure MoveWindow(window : pWindow location 'a0'; dx : LongInt location 'd0'; dy : LongInt location 'd1');
 | |
| SysCall IntuitionBase 168;
 | |
| 
 | |
| procedure OffGadget(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2');
 | |
| SysCall IntuitionBase 174;
 | |
| 
 | |
| procedure OffMenu(window : pWindow location 'a0'; menuNumber : CARDINAL location 'd0');
 | |
| SysCall IntuitionBase 180;
 | |
| 
 | |
| procedure OnGadget(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2');
 | |
| SysCall IntuitionBase 186;
 | |
| 
 | |
| procedure OnMenu(window : pWindow location 'a0'; menuNumber : CARDINAL location 'd0');
 | |
| SysCall IntuitionBase 192;
 | |
| 
 | |
| function OpenScreen(newScreen : pNewScreen location 'a0') : pScreen;
 | |
| SysCall IntuitionBase 198;
 | |
| 
 | |
| function OpenWindow(newWindow : pNewWindow location 'a0') : pWindow;
 | |
| SysCall IntuitionBase 204;
 | |
| 
 | |
| function OpenWorkBench : CARDINAL;
 | |
| SysCall IntuitionBase 210;
 | |
| 
 | |
| procedure PrintIText(rp : pRastPort location 'a0'; iText : pIntuiText location 'a1'; left : LongInt location 'd0'; top : LongInt location 'd1');
 | |
| SysCall IntuitionBase 216;
 | |
| 
 | |
| procedure RefreshGadgets(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2');
 | |
| SysCall IntuitionBase 222;
 | |
| 
 | |
| function RemoveGadget(window : pWindow location 'a0'; gadget : pGadget location 'a1') : Word;
 | |
| SysCall IntuitionBase 228;
 | |
| 
 | |
| procedure ReportMouse(flag : LongInt location 'd0'; window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 234;
 | |
| 
 | |
| function Request(requester : pRequester location 'a0'; window : pWindow location 'a1') : BOOLEAN;
 | |
| SysCall IntuitionBase 240;
 | |
| 
 | |
| procedure ScreenToBack(screen : pScreen location 'a0');
 | |
| SysCall IntuitionBase 246;
 | |
| 
 | |
| procedure ScreenToFront(screen : pScreen location 'a0');
 | |
| SysCall IntuitionBase 252;
 | |
| 
 | |
| function SetDMRequest(window : pWindow location 'a0'; requester : pRequester location 'a1') : BOOLEAN;
 | |
| SysCall IntuitionBase 258;
 | |
| 
 | |
| function SetMenuStrip(window : pWindow location 'a0'; menu : pMenu location 'a1') : BOOLEAN;
 | |
| SysCall IntuitionBase 264;
 | |
| 
 | |
| procedure SetPointer(window : pWindow location 'a0'; VAR pointer : Word location 'a1'; height : LongInt location 'd0'; width : LongInt location 'd1'; xOffset : LongInt location 'd2'; yOffset : LongInt location 'd3');
 | |
| SysCall IntuitionBase 270;
 | |
| 
 | |
| procedure SetWindowTitles(window : pWindow location 'a0'; windowTitle : PChar location 'a1'; screenTitle : PChar location 'a2');
 | |
| SysCall IntuitionBase 276;
 | |
| 
 | |
| procedure ShowTitle(screen : pScreen location 'a0'; showIt : LongInt location 'd0');
 | |
| SysCall IntuitionBase 282;
 | |
| 
 | |
| procedure SizeWindow(window : pWindow location 'a0'; dx : LongInt location 'd0'; dy : LongInt location 'd1');
 | |
| SysCall IntuitionBase 288;
 | |
| 
 | |
| function ViewAddress : pView;
 | |
| SysCall IntuitionBase 294;
 | |
| 
 | |
| function ViewPortAddress(window : pWindow location 'a0') : pViewPort;
 | |
| SysCall IntuitionBase 300;
 | |
| 
 | |
| procedure WindowToBack(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 306;
 | |
| 
 | |
| procedure WindowToFront(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 312;
 | |
| 
 | |
| function WindowLimits(window : pWindow location 'a0'; widthMin : LongInt location 'd0'; heightMin : LongInt location 'd1'; widthMax : CARDINAL location 'd2'; heightMax : CARDINAL location 'd3') : BOOLEAN;
 | |
| SysCall IntuitionBase 318;
 | |
| 
 | |
| function SetPrefs(preferences : pPreferences location 'a0'; size : LongInt location 'd0'; inform : LongInt location 'd1') : pPreferences;
 | |
| SysCall IntuitionBase 324;
 | |
| 
 | |
| function IntuiTextLength(iText : pIntuiText location 'a0') : LongInt;
 | |
| SysCall IntuitionBase 330;
 | |
| 
 | |
| function WBenchToBack : BOOLEAN;
 | |
| SysCall IntuitionBase 336;
 | |
| 
 | |
| function WBenchToFront : BOOLEAN;
 | |
| SysCall IntuitionBase 342;
 | |
| 
 | |
| function AutoRequest(window : pWindow location 'a0'; body : pIntuiText location 'a1'; posText : pIntuiText location 'a2'; negText : pIntuiText location 'a3'; pFlag : CARDINAL location 'd0'; nFlag : CARDINAL location 'd1'; width : CARDINAL location 'd2'; height : CARDINAL location 'd3') : BOOLEAN;
 | |
| SysCall IntuitionBase 348;
 | |
| 
 | |
| procedure BeginRefresh(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 354;
 | |
| 
 | |
| function BuildSysRequest(window : pWindow location 'a0'; body : pIntuiText location 'a1'; posText : pIntuiText location 'a2'; negText : pIntuiText location 'a3'; flags : CARDINAL location 'd0'; width : CARDINAL location 'd1'; height : CARDINAL location 'd2') : pWindow;
 | |
| SysCall IntuitionBase 360;
 | |
| 
 | |
| procedure EndRefresh(window : pWindow location 'a0'; complete : LongInt location 'd0');
 | |
| SysCall IntuitionBase 366;
 | |
| 
 | |
| procedure FreeSysRequest(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 372;
 | |
| 
 | |
| function MakeScreen(screen : pScreen location 'a0') : LongInt;
 | |
| SysCall IntuitionBase 378;
 | |
| 
 | |
| function RemakeDisplay : LongInt;
 | |
| SysCall IntuitionBase 384;
 | |
| 
 | |
| function RethinkDisplay : LongInt;
 | |
| SysCall IntuitionBase 390;
 | |
| 
 | |
| function AllocRemember(var rememberKey : pRemember location 'a0'; size : CARDINAL location 'd0'; flags : CARDINAL location 'd1') : POINTER;
 | |
| SysCall IntuitionBase 396;
 | |
| 
 | |
| procedure FreeRemember(var rememberKey : pRemember location 'a0'; reallyForget : LongInt location 'd0');
 | |
| SysCall IntuitionBase 408;
 | |
| 
 | |
| function LockIBase(dontknow : CARDINAL location 'd0') : CARDINAL;
 | |
| SysCall IntuitionBase 414;
 | |
| 
 | |
| procedure UnlockIBase(ibLock : CARDINAL location 'a0');
 | |
| SysCall IntuitionBase 420;
 | |
| 
 | |
| function GetScreenData(buffer : POINTER location 'a0'; size : CARDINAL location 'd0'; type1 : CARDINAL location 'd1'; screen : pScreen location 'a1') : LongInt;
 | |
| SysCall IntuitionBase 426;
 | |
| 
 | |
| procedure RefreshGList(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'; numGad : LongInt location 'd0');
 | |
| SysCall IntuitionBase 432;
 | |
| 
 | |
| function AddGList(window : pWindow location 'a0'; gadget : pGadget location 'a1'; position : CARDINAL location 'd0'; numGad : LongInt location 'd1'; requester : pRequester location 'a2') : Word;
 | |
| SysCall IntuitionBase 438;
 | |
| 
 | |
| function RemoveGList(remPtr : pWindow location 'a0'; gadget : pGadget location 'a1'; numGad : LongInt location 'd0') : Word;
 | |
| SysCall IntuitionBase 444;
 | |
| 
 | |
| procedure ActivateWindow(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 450;
 | |
| 
 | |
| procedure RefreshWindowFrame(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 456;
 | |
| 
 | |
| function ActivateGadget(gadgets : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2') : BOOLEAN;
 | |
| SysCall IntuitionBase 462;
 | |
| 
 | |
| procedure NewModifyProp(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'; flags : CARDINAL location 'd0'; horizPot : CARDINAL location 'd1'; vertPot : CARDINAL location 'd2'; horizBody : CARDINAL location 'd3'; vertBody : CARDINAL location 'd4'; numGad : LongInt location 'd5');
 | |
| SysCall IntuitionBase 468;
 | |
| 
 | |
| function QueryOverscan(displayID : CARDINAL location 'a0'; rect : pRectangle location 'a1'; oScanType : LongInt location 'd0') : LongInt;
 | |
| SysCall IntuitionBase 474;
 | |
| 
 | |
| procedure MoveWindowInFrontOf(window : pWindow location 'a0'; behindWindow : pWindow location 'a1');
 | |
| SysCall IntuitionBase 480;
 | |
| 
 | |
| procedure ChangeWindowBox(window : pWindow location 'a0'; left : LongInt location 'd0'; top : LongInt location 'd1'; width : LongInt location 'd2'; height : LongInt location 'd3');
 | |
| SysCall IntuitionBase 486;
 | |
| 
 | |
| function SetEditHook(hook : pHook location 'a0') : pHook;
 | |
| SysCall IntuitionBase 492;
 | |
| 
 | |
| function SetMouseQueue(window : pWindow location 'a0'; queueLength : CARDINAL location 'd0') : LongInt;
 | |
| SysCall IntuitionBase 498;
 | |
| 
 | |
| procedure ZipWindow(window : pWindow location 'a0');
 | |
| SysCall IntuitionBase 504;
 | |
| 
 | |
| function LockPubScreen(name : PChar location 'a0') : pScreen;
 | |
| SysCall IntuitionBase 510;
 | |
| 
 | |
| procedure UnlockPubScreen(name : PChar location 'a0'; screen : pScreen location 'a1');
 | |
| SysCall IntuitionBase 516;
 | |
| 
 | |
| function LockPubScreenList : pList;
 | |
| SysCall IntuitionBase 522;
 | |
| 
 | |
| procedure UnlockPubScreenList;
 | |
| SysCall IntuitionBase 528;
 | |
| 
 | |
| function NextPubScreen(screen : pScreen location 'a0'; namebuf : PChar location 'a1') : PChar;
 | |
| SysCall IntuitionBase 534;
 | |
| 
 | |
| procedure SetDefaultPubScreen(name : PChar location 'a0');
 | |
| SysCall IntuitionBase 540;
 | |
| 
 | |
| function SetPubScreenModes(modes : CARDINAL location 'd0') : Word;
 | |
| SysCall IntuitionBase 546;
 | |
| 
 | |
| function PubScreenStatus(screen : pScreen location 'a0'; statusFlags : CARDINAL location 'd0') : Word;
 | |
| SysCall IntuitionBase 552;
 | |
| 
 | |
| function ObtainGIRPort(gInfo : pGadgetInfo location 'a0') : pRastPort;
 | |
| SysCall IntuitionBase 558;
 | |
| 
 | |
| procedure ReleaseGIRPort(rp : pRastPort location 'a0');
 | |
| SysCall IntuitionBase 564;
 | |
| 
 | |
| procedure GadgetMouse(gadget : pGadget location 'a0'; gInfo : pGadgetInfo location 'a1'; VAR mousePoint : INTEGER location 'a2');
 | |
| SysCall IntuitionBase 570;
 | |
| 
 | |
| procedure GetDefaultPubScreen(nameBuffer : PChar location 'a0');
 | |
| SysCall IntuitionBase 582;
 | |
| 
 | |
| function EasyRequestArgs(window : pWindow location 'a0'; easyStruct : pEasyStruct location 'a1'; idcmpPtr : Pointer location 'a2'; args : POINTER location 'a3') : LongInt;
 | |
| SysCall IntuitionBase 588;
 | |
| 
 | |
| function BuildEasyRequestArgs(window : pWindow location 'a0'; easyStruct : pEasyStruct location 'a1'; idcmp : CARDINAL location 'd0'; args : POINTER location 'a3') : pWindow;
 | |
| SysCall IntuitionBase 594;
 | |
| 
 | |
| function SysReqHandler(window : pWindow location 'a0'; VAR idcmpPtr : CARDINAL location 'a1'; waitInput : LongInt location 'd0') : LongInt;
 | |
| SysCall IntuitionBase 600;
 | |
| 
 | |
| function OpenWindowTagList(newWindow : pNewWindow location 'a0'; tagList : pTagItem location 'a1') : pWindow;
 | |
| SysCall IntuitionBase 606;
 | |
| 
 | |
| function OpenWindowTags(newWindow : pNewWindow; tagList : array of DWord) : pWindow; Inline;
 | |
| 
 | |
| function OpenScreenTagList(newScreen : pNewScreen location 'a0'; tagList : pTagItem location 'a1') : pScreen;
 | |
| SysCall IntuitionBase 612;
 | |
| 
 | |
| function OpenScreenTags(newScreen : pNewScreen; tagList : array of DWord) : pScreen; Inline;
 | |
| 
 | |
| procedure DrawImageState(rp : pRastPort location 'a0'; image : pImage location 'a1'; leftOffset : LongInt location 'd0'; topOffset : LongInt location 'd1'; state : CARDINAL location 'd2'; drawInfo : pDrawInfo location 'a2');
 | |
| SysCall IntuitionBase 618;
 | |
| 
 | |
| function PointInImage(point : CARDINAL location 'd0'; image : pImage location 'a0') : BOOLEAN;
 | |
| SysCall IntuitionBase 624;
 | |
| 
 | |
| procedure EraseImage(rp : pRastPort location 'a0'; image : pImage location 'a1'; leftOffset : LongInt location 'd0'; topOffset : LongInt location 'd1');
 | |
| SysCall IntuitionBase 630;
 | |
| 
 | |
| function NewObjectA(classPtr : pIClass location 'a0'; classID : PChar location 'a1'; tagList : pTagItem location 'a2') : POINTER;
 | |
| SysCall IntuitionBase 636;
 | |
| 
 | |
| procedure DisposeObject(object1 : POINTER location 'a0');
 | |
| SysCall IntuitionBase 642;
 | |
| 
 | |
| function SetAttrsA(object1 : POINTER location 'a0'; tagList : pTagItem location 'a1') : CARDINAL;
 | |
| SysCall IntuitionBase 648;
 | |
| 
 | |
| function GetAttr(attrID : CARDINAL location 'd0'; object1 : POINTER location 'a0'; VAR storagePtr : CARDINAL location 'a1') : CARDINAL;
 | |
| SysCall IntuitionBase 654;
 | |
| 
 | |
| function SetGadgetAttrsA(gadget : pGadget location 'a0'; window : pWindow location 'a1'; requester : pRequester location 'a2'; tagList : pTagItem location 'a3') : CARDINAL;
 | |
| SysCall IntuitionBase 660;
 | |
| 
 | |
| function NextObject(objectPtrPtr : POINTER location 'a0') : POINTER;
 | |
| SysCall IntuitionBase 666;
 | |
| 
 | |
| function MakeClass(classID : PChar location 'a0'; superClassID : PChar location 'a1'; superClassPtr : pIClass location 'a2'; instanceSize : CARDINAL location 'd0'; flags : CARDINAL location 'd1') : pIClass;
 | |
| SysCall IntuitionBase 678;
 | |
| 
 | |
| procedure AddClass(classPtr : pIClass location 'a0');
 | |
| SysCall IntuitionBase 684;
 | |
| 
 | |
| function GetScreenDrawInfo(screen : pScreen location 'a0') : pDrawInfo;
 | |
| SysCall IntuitionBase 690;
 | |
| 
 | |
| procedure FreeScreenDrawInfo(screen : pScreen location 'a0'; drawInfo : pDrawInfo location 'a1');
 | |
| SysCall IntuitionBase 696;
 | |
| 
 | |
| function ResetMenuStrip(window : pWindow location 'a0'; menu : pMenu location 'a1') : BOOLEAN;
 | |
| SysCall IntuitionBase 702;
 | |
| 
 | |
| procedure RemoveClass(classPtr : pIClass location 'a0');
 | |
| SysCall IntuitionBase 708;
 | |
| 
 | |
| function FreeClass(classPtr : pIClass location 'a0') : BOOLEAN;
 | |
| SysCall IntuitionBase 714;
 | |
| 
 | |
| function AllocScreenBuffer(sc : pScreen location 'a0'; bm : pBitMap location 'a1'; flags : CARDINAL location 'd0') : pScreenBuffer;
 | |
| SysCall IntuitionBase 768;
 | |
| 
 | |
| procedure FreeScreenBuffer(sc : pScreen location 'a0'; sb : pScreenBuffer location 'a1');
 | |
| SysCall IntuitionBase 774;
 | |
| 
 | |
| function ChangeScreenBuffer(sc : pScreen location 'a0'; sb : pScreenBuffer location 'a1') : CARDINAL;
 | |
| SysCall IntuitionBase 780;
 | |
| 
 | |
| procedure ScreenDepth(screen : pScreen location 'a0'; flags : CARDINAL location 'd0'; reserved : POINTER location 'a1');
 | |
| SysCall IntuitionBase 786;
 | |
| 
 | |
| procedure ScreenPosition(screen : pScreen location 'a0'; flags : CARDINAL location 'd0'; x1 : LongInt location 'd1'; y1 : LongInt location 'd2'; x2 : LongInt location 'd3'; y2 : LongInt location 'd4');
 | |
| SysCall IntuitionBase 792;
 | |
| 
 | |
| procedure ScrollWindowRaster(win : pWindow location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1'; xMin : LongInt location 'd2'; yMin : LongInt location 'd3'; xMax : LongInt location 'd4'; yMax : LongInt location 'd5');
 | |
| SysCall IntuitionBase 798;
 | |
| 
 | |
| procedure LendMenus(fromwindow : pWindow location 'a0'; towindow : pWindow location 'a1');
 | |
| SysCall IntuitionBase 804;
 | |
| 
 | |
| function DoGadgetMethodA(gad : pGadget location 'a0'; win : pWindow location 'a1'; req : pRequester location 'a2'; message : pLongInt location 'a3') : CARDINAL;
 | |
| SysCall IntuitionBase 810;
 | |
| 
 | |
| procedure SetWindowPointerA(win : pWindow location 'a0'; taglist : pTagItem location 'a1');
 | |
| SysCall IntuitionBase 816;
 | |
| 
 | |
| function TimedDisplayAlert(alertNumber : CARDINAL location 'd0'; string1 : PChar location 'a0'; height : CARDINAL location 'd1'; time : CARDINAL location 'a1') : BOOLEAN;
 | |
| SysCall IntuitionBase 822;
 | |
| 
 | |
| procedure HelpControl(win : pWindow location 'a0'; flags : CARDINAL location 'd0');
 | |
| SysCall IntuitionBase 828;
 | |
| 
 | |
| procedure ShowWindow(win : pWindow location 'a0');
 | |
| SysCall IntuitionBase 840;
 | |
| 
 | |
| procedure HideWindow(win : pWindow location 'a0');
 | |
| SysCall IntuitionBase 846;
 | |
| 
 | |
| function GetSkinInfoAttrA(drawinfo : pDrawInfo location 'a0'; attr : CARDINAL location 'd0'; taglist : pTagItem location 'a1') : CARDINAL;
 | |
| SysCall IntuitionBase 918;
 | |
| 
 | |
| function GetDrawInfoAttr(drawinfo : pDrawInfo location 'a0'; attr : CARDINAL location 'd0'; VAR errorPtr : CARDINAL location 'a1') : CARDINAL;
 | |
| SysCall IntuitionBase 936;
 | |
| 
 | |
| procedure WindowAction(window : pWindow location 'a0'; action : CARDINAL location 'd0'; tags : pTagItem location 'a1');
 | |
| SysCall IntuitionBase 942;
 | |
| 
 | |
| function TransparencyControl(window : pWindow location 'a0'; method : CARDINAL location 'd0'; tags : pTagItem location 'a1') : BOOLEAN;
 | |
| SysCall IntuitionBase 948;
 | |
| 
 | |
| procedure ScrollWindowRasterNoFill(win : pWindow location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1'; xMin : LongInt location 'd2'; yMin : LongInt location 'd3'; xMax : LongInt location 'd4'; yMax : LongInt location 'd5');
 | |
| SysCall IntuitionBase 954;
 | |
| 
 | |
| 
 | |
| { Intuition macros }
 | |
| function INST_DATA (cl: pIClass; o: p_Object): Pointer;
 | |
| function SIZEOF_INSTANCE (cl: pIClass): Longint;
 | |
| function BASEOBJECT (o: p_Object): Pointer;
 | |
| function _OBJ(o: p_Object): p_Object;
 | |
| function __OBJECT (o: Pointer): p_Object;
 | |
| function OCLASS (o: Pointer): pIClass;
 | |
| function SHIFTITEM (n: smallint): word;
 | |
| function SHIFTMENU (n: smallint): word;
 | |
| function SHIFTSUB (n: smallint): word;
 | |
| function FULLMENUNUM (menu, item, sub: smallint): word;
 | |
| function IM_BGPEN (im: pImage): byte;
 | |
| function IM_BOX (im: pImage): pIBox;
 | |
| function IM_FGPEN (im: pImage): byte;
 | |
| function GADGET_BOX (g: pGadget): pIBox;
 | |
| function CUSTOM_HOOK (gadget: pGadget): pHook;
 | |
| function ITEMNUM( n : Word): Word;
 | |
| function MENUNUM( n : Word): Word;
 | |
| function SUBNUM( n : Word): Word;
 | |
| 
 | |
| {
 | |
| FUNCTION DisplayAlert(alertNumber : Cardinal;string_ : string; height : Cardinal) : BOOLEAN;
 | |
| FUNCTION LockPubScreen(name : string) : pScreen;
 | |
| FUNCTION MakeClass(classID : string;superClassID : pCHAR;superClassPtr : pIClass; instanceSize : Cardinal; flags : Cardinal) : pIClass;
 | |
| FUNCTION MakeClass(classID : pCHAR;superClassID : string;superClassPtr : pIClass; instanceSize : Cardinal; flags : Cardinal) : pIClass;
 | |
| FUNCTION MakeClass(classID : string;superClassID : string;superClassPtr : pIClass; instanceSize : Cardinal; flags : Cardinal) : pIClass;
 | |
| FUNCTION NewObjectA(classPtr : pIClass;classID : string;tagList : pTagItem) : POINTER;
 | |
| PROCEDURE SetDefaultPubScreen(name : string);
 | |
| PROCEDURE SetWindowTitles(window : pWindow;windowTitle : string;screenTitle : pCHAR);
 | |
| PROCEDURE SetWindowTitles(window : pWindow;windowTitle : pCHAR;screenTitle : string);
 | |
| PROCEDURE SetWindowTitles(window : pWindow;windowTitle : string;screenTitle : string);
 | |
| FUNCTION TimedDisplayAlert(alertNumber : Cardinal;string_ : string; height : Cardinal; time : Cardinal) : BOOLEAN;
 | |
| PROCEDURE UnlockPubScreen(name : string; screen : pScreen);
 | |
| }
 | |
| 
 | |
| { Helper calls }
 | |
| function InitIntuitionLibrary : boolean;
 | |
| 
 | |
| 
 | |
| implementation
 | |
| 
 | |
| {$WARNING Ugly workaround, this still needs support in the compiler}
 | |
| function OpenScreenTags(newScreen : pNewScreen; tagList : array of DWord) : pScreen; Inline;
 | |
| begin
 | |
|   OpenScreenTags:=OpenScreenTagList(newScreen,@tagList);
 | |
| end;
 | |
| 
 | |
| function OpenWindowTags(newWindow : pNewWindow; tagList : array of DWord) : pWindow; Inline;
 | |
| begin
 | |
|   OpenWindowTags:=OpenWindowTagList(newWindow,@tagList);
 | |
| end;
 | |
| 
 | |
| 
 | |
| function INST_DATA (cl: pIClass; o: p_Object): Pointer;
 | |
| begin
 | |
|     INST_DATA := Pointer(Longint(o) + cl^.cl_InstOffset);
 | |
| end;
 | |
| 
 | |
| function SIZEOF_INSTANCE (cl: pIClass): Longint;
 | |
| begin
 | |
|     SIZEOF_INSTANCE := cl^.cl_InstOffset + cl^.cl_InstSize + sizeof(t_Object);
 | |
| end;
 | |
| 
 | |
| function BASEOBJECT (o: p_Object): Pointer;
 | |
| begin
 | |
|     BASEOBJECT := Pointer(Longint(o) + sizeof(t_Object));
 | |
| end;
 | |
| 
 | |
| function _OBJ(o: p_Object): p_Object;
 | |
| begin
 | |
|      _OBJ := p_Object(o);
 | |
| END;
 | |
| 
 | |
| function __OBJECT (o: Pointer): p_Object;
 | |
| begin
 | |
|     __OBJECT := p_Object(Longint(o) - sizeof(t_Object))
 | |
| end;
 | |
| 
 | |
| function OCLASS (o: Pointer): pIClass;
 | |
| var
 | |
|     obj: p_Object;
 | |
| begin
 | |
|     obj := p_Object(Longint(o) - sizeof(t_Object));
 | |
|     OCLASS := obj^.o_Class;
 | |
| end;
 | |
| 
 | |
| function SHIFTITEM (n: smallint): word;
 | |
| begin
 | |
|     SHIFTITEM := (n and $3f) shl 5
 | |
| end;
 | |
| 
 | |
| function SHIFTMENU (n: smallint): word;
 | |
| begin
 | |
|     SHIFTMENU := n and $1f
 | |
| end;
 | |
| 
 | |
| function SHIFTSUB (n: smallint): word;
 | |
| begin
 | |
|     SHIFTSUB := (n and $1f) shl 11
 | |
| end;
 | |
| 
 | |
| function FULLMENUNUM (menu, item, sub: smallint): word;
 | |
| begin
 | |
|     FULLMENUNUM := ((sub and $1f) shl 11) or
 | |
|                     ((item and $3f) shl 5) or
 | |
|                       (menu and $1f)
 | |
| end;
 | |
| 
 | |
| 
 | |
| { The next functons _BGPEN AND _FGPEN aren't a full replacement of the
 | |
|   C macros because the C preprocessor makes it possible to set the
 | |
|   A/BPen values of the image class objects as well. This can't work
 | |
|   in pascal, of course! }
 | |
| 
 | |
| function IM_BGPEN (im: pImage): byte;
 | |
| begin
 | |
|     IM_BGPEN := im^.PlaneOnOff;
 | |
| end;
 | |
| 
 | |
| function IM_BOX (im: pImage): pIBox;
 | |
| begin
 | |
|     IM_BOX := pIBox(@im^.LeftEdge);
 | |
| END;
 | |
| 
 | |
| function IM_FGPEN (im: pImage): byte;
 | |
| begin
 | |
|     IM_FGPEN := im^.PlanePick;
 | |
| end;
 | |
| 
 | |
| function GADGET_BOX (g: pGadget): pIBox;
 | |
| begin
 | |
|     GADGET_BOX := pIBox(@g^.LeftEdge);
 | |
| end;
 | |
| 
 | |
| function CUSTOM_HOOK (gadget: pGadget): pHook;
 | |
| begin
 | |
|     CUSTOM_HOOK := pHook(gadget^.MutualExclude);
 | |
| end;
 | |
| 
 | |
| function ITEMNUM( n : Word): Word;
 | |
| begin
 | |
|     ITEMNUM := (n shr 5) and $3F
 | |
| end;
 | |
| 
 | |
| function MENUNUM( n : Word): Word;
 | |
| begin
 | |
|     MENUNUM := n and $1f
 | |
| end;
 | |
| 
 | |
| function SUBNUM( n : Word): Word;
 | |
| begin
 | |
|     SUBNUM := (n shr 11) and $1f
 | |
| end;
 | |
| 
 | |
| {
 | |
| FUNCTION DisplayAlert(alertNumber : Cardinal;string_ : string; height : Cardinal) : BOOLEAN;
 | |
| begin
 | |
|       DisplayAlert := DisplayAlert(alertNumber,pas2c(string_),height);
 | |
| end;
 | |
| 
 | |
| FUNCTION LockPubScreen(name : string) : pScreen;
 | |
| begin
 | |
|       LockPubScreen := LockPubScreen(pas2c(name));
 | |
| end;
 | |
| 
 | |
| FUNCTION MakeClass(classID : string;superClassID : pCHAR;superClassPtr : pIClass; instanceSize : Cardinal; flags : Cardinal) : pIClass;
 | |
| begin
 | |
|       MakeClass := MakeClass(pas2c(classID),superClassID,superClassPtr,instanceSize,flags);
 | |
| end;
 | |
| 
 | |
| FUNCTION MakeClass(classID : pCHAR;superClassID : string;superClassPtr : pIClass; instanceSize : Cardinal; flags : Cardinal) : pIClass;
 | |
| begin
 | |
|       MakeClass := MakeClass(classID,pas2c(superClassID),superClassPtr,instanceSize,flags); 
 | |
| end;
 | |
| 
 | |
| FUNCTION MakeClass(classID : string;superClassID : string;superClassPtr : pIClass; instanceSize : Cardinal; flags : Cardinal) : pIClass;
 | |
| begin
 | |
|       MakeClass := MakeClass(pas2c(classID),pas2c(superClassID),superClassPtr,instanceSize,flags);
 | |
| end;
 | |
| 
 | |
| FUNCTION NewObjectA(classPtr : pIClass;classID : string;tagList : pTagItem) : POINTER;
 | |
| begin
 | |
|       NewObjectA := NewObjectA(classPtr,pas2c(classID),taglist);
 | |
| end;
 | |
| 
 | |
| PROCEDURE SetDefaultPubScreen(name : string);
 | |
| begin
 | |
|       SetDefaultPubScreen(pas2c(name)); 
 | |
| end;
 | |
| 
 | |
| PROCEDURE SetWindowTitles(window : pWindow;windowTitle : string;screenTitle : pCHAR);
 | |
| begin
 | |
|       SetWindowTitles(window,pas2c(windowTitle),screenTitle);
 | |
| end;
 | |
| 
 | |
| PROCEDURE SetWindowTitles(window : pWindow;windowTitle : pCHAR;screenTitle : string);
 | |
| begin
 | |
|       SetWindowTitles(window,windowTitle,pas2c(screenTitle));
 | |
| end;
 | |
| 
 | |
| PROCEDURE SetWindowTitles(window : pWindow;windowTitle : string;screenTitle : string);
 | |
| begin
 | |
|       SetWindowTitles(window,pas2c(windowTitle),pas2c(screenTitle));
 | |
| end;
 | |
| 
 | |
| FUNCTION TimedDisplayAlert(alertNumber : Cardinal;string_ : string; height : Cardinal; time : Cardinal) : BOOLEAN;
 | |
| begin
 | |
|       TimedDisplayAlert := TimedDisplayAlert(alertNumber,pas2c(string_),height,time);
 | |
| end;
 | |
| 
 | |
| PROCEDURE UnlockPubScreen(name : string; screen : pScreen);
 | |
| begin
 | |
|       UnlockPubScreen(pas2c(name),screen);
 | |
| end;
 | |
| }
 | |
| 
 | |
| 
 | |
| const
 | |
|   { Change VERSION and LIBVERSION to proper values }
 | |
|   VERSION : string[2] = '50';
 | |
|   LIBVERSION : longword = 50;
 | |
| 
 | |
| var
 | |
|   intuition_exit : Pointer;
 | |
| 
 | |
| procedure CloseIntuitionLibrary;
 | |
| begin
 | |
|   ExitProc := intuition_exit;
 | |
|   if IntuitionBase <> nil then begin
 | |
|     CloseLibrary(PLibrary(IntuitionBase));
 | |
|     IntuitionBase := nil;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| function InitIntuitionLibrary : boolean;
 | |
| begin
 | |
|   IntuitionBase := nil;
 | |
|   IntuitionBase := OpenLibrary(INTUITIONNAME,LIBVERSION);
 | |
|   if IntuitionBase <> nil then begin
 | |
|     intuition_exit := ExitProc;
 | |
|     ExitProc := @CloseIntuitionLibrary;
 | |
|     InitIntuitionLibrary:=True;
 | |
|   end else begin
 | |
|     InitIntuitionLibrary:=False;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| 
 | |
| end. (* UNIT INTUITION *)
 | |
| 
 | |
| {
 | |
|   $Log$
 | |
|   Revision 1.2  2005-01-30 19:00:09  karoly
 | |
|     * changes for ASL and AHI support
 | |
| 
 | |
|   Revision 1.1  2004/12/07 19:30:13  karoly
 | |
|     * initial revision
 | |
| 
 | |
| }
 | 
