home *** CD-ROM | disk | FTP | other *** search
-
- #ifndef INTUITION_INTUITION_H
- #define INTUITION_INTUITION_H TRUE
- /*
- ** $VER: intuition.h 38.26 (15.2.93)
- ** Includes Release 40.15
- **
- ** Interface definitions for Intuition applications.
- **
- ** (C) Copyright 1985-1993 Commodore-Amiga, Inc.
- ** All Rights Reserved
- */
-
- #ifndef EXEC_TYPES_H
- #include <exec/types.h>
- #endif
-
- #ifndef GRAPHICS_GFX_H
- #include <graphics/gfx.h>
- #endif
-
- #ifndef GRAPHICS_CLIP_H
- #include <graphics/clip.h>
- #endif
-
- #ifndef GRAPHICS_VIEW_H
- #include <graphics/view.h>
- #endif
-
- #ifndef GRAPHICS_RASTPORT_H
- #include <graphics/rastport.h>
- #endif
-
- #ifndef GRAPHICS_LAYERS_H
- #include <graphics/layers.h>
- #endif
-
- #ifndef GRAPHICS_TEXT_H
- #include <graphics/text.h>
- #endif
-
- #ifndef EXEC_PORTS_H
- #include <exec/ports.h>
- #endif
-
- #ifndef DEVICES_INPUTEVENT_H
- #include <devices/inputevent.h>
- #endif
-
- #ifndef UTILITY_TAGITEM_H
- #include <utility/tagitem.h>
- #endif
-
- /*
- * NOTE: intuition/iobsolete.h is included at the END of this file!
- */
-
- /* ======================================================================== */
- /* === Menu =============================================================== */
- /* ======================================================================== */
- struct Menu
- {
- struct Menu *NextMenu; /* same level */
- WORD LeftEdge, TopEdge; /* position of the select box */
- WORD Width, Height; /* dimensions of the select box */
- UWORD Flags; /* see flag definitions below */
- BYTE *MenuName; /* text for this Menu Header */
- struct MenuItem *FirstItem; /* pointer to first in chain */
-
- /* these mysteriously-named variables are for internal use only */
- WORD JazzX, JazzY, BeatX, BeatY;
- };
-
-
- /* FLAGS SET BY BOTH THE APPLIPROG AND INTUITION */
- #define MENUENABLED 0x0001 /* whether or not this menu is enabled */
-
- /* FLAGS SET BY INTUITION */
- #define MIDRAWN 0x0100 /* this menu's items are currently drawn */
-
-
-
-
-
-
- /* ======================================================================== */
- /* === MenuItem =========================================================== */
- /* ======================================================================== */
- struct MenuItem
- {
- struct MenuItem *NextItem; /* pointer to next in chained list */
- WORD LeftEdge, TopEdge; /* position of the select box */
- WORD Width, Height; /* dimensions of the select box */
- UWORD Flags; /* see the defines below */
-
- LONG MutualExclude; /* set bits mean this item excludes that */
-
- APTR ItemFill; /* 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
- */
- APTR SelectFill; /* points to Image, IntuiText, or NULL */
-
- BYTE Command; /* only if appliprog sets the COMMSEQ flag */
-
- struct MenuItem *SubItem; /* if non-zero, points to MenuItem for submenu */
-
- /* The NextSelect field represents the menu number of next selected
- * item (when user has drag-selected several items)
- */
- UWORD NextSelect;
- };
-
-
- /* FLAGS SET BY THE APPLIPROG */
- #define CHECKIT 0x0001 /* set to indicate checkmarkable item */
- #define ITEMTEXT 0x0002 /* set if textual, clear if graphical item */
- #define COMMSEQ 0x0004 /* set if there's an command sequence */
- #define MENUTOGGLE 0x0008 /* set for toggling checks (else mut. exclude) */
- #define ITEMENABLED 0x0010 /* set if this item is enabled */
-
- /* these are the SPECIAL HIGHLIGHT FLAG state meanings */
- #define HIGHFLAGS 0x00C0 /* see definitions below for these bits */
- #define HIGHIMAGE 0x0000 /* use the user's "select image" */
- #define HIGHCOMP 0x0040 /* highlight by complementing the selectbox */
- #define HIGHBOX 0x0080 /* highlight by "boxing" the selectbox */
- #define HIGHNONE 0x00C0 /* don't highlight */
-
- /* FLAGS SET BY BOTH APPLIPROG AND INTUITION */
- #define CHECKED 0x0100 /* state of the checkmark */
-
- /* FLAGS SET BY INTUITION */
- #define ISDRAWN 0x1000 /* this item's subs are currently drawn */
- #define HIGHITEM 0x2000 /* this item is currently highlighted */
- #define MENUTOGGLED 0x4000 /* this item was already toggled */
-
-
-
-
-
- /* ======================================================================== */
- /* === Requester ========================================================== */
- /* ======================================================================== */
- struct Requester
- {
- struct Requester *OlderRequest;
- WORD LeftEdge, TopEdge; /* dimensions of the entire box */
- WORD Width, Height; /* dimensions of the entire box */
- WORD RelLeft, RelTop; /* for Pointer relativity offsets */
-
- struct Gadget *ReqGadget; /* pointer to a list of Gadgets */
- struct Border *ReqBorder; /* the box's border */
- struct IntuiText *ReqText; /* the box's text */
- UWORD Flags; /* see definitions below */
-
- /* pen number for back-plane fill before draws */
- UBYTE BackFill;
- /* Layer in place of clip rect */
- struct Layer *ReqLayer;
-
- UBYTE ReqPad1[32];
-
- /* If the BitMap plane pointers are non-zero, this tells the system
- * that the image comes pre-drawn (if the appliprog wants to define
- * its 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
- */
- struct BitMap *ImageBMap; /* points to the BitMap of PREDRAWN imagery */
- struct Window *RWindow; /* added. points back to Window */
-
- struct Image *ReqImage; /* new for V36: drawn if USEREQIMAGE set */
-
- UBYTE ReqPad2[32];
- };
-
-
- /* FLAGS SET BY THE APPLIPROG */
- #define POINTREL 0x0001
- /* if POINTREL set, TopLeft is relative to pointer
- * for DMRequester, relative to window center
- * for Request().
- */
- #define PREDRAWN 0x0002
- /* set if Requester.ImageBMap points to predrawn Requester imagery */
- #define NOISYREQ 0x0004
- /* if you don't want requester to filter input */
- #define SIMPLEREQ 0x0010
- /* to use SIMPLEREFRESH layer (recommended) */
-
- /* New for V36 */
- #define USEREQIMAGE 0x0020
- /* render linked list ReqImage after BackFill
- * but before gadgets and text
- */
- #define NOREQBACKFILL 0x0040
- /* don't bother filling requester with Requester.BackFill pen */
-
-
- /* FLAGS SET BY INTUITION */
- #define REQOFFWINDOW 0x1000 /* part of one of the Gadgets was offwindow */
- #define REQACTIVE 0x2000 /* this requester is active */
- #define SYSREQUEST 0x4000 /* (unused) this requester caused by system */
- #define DEFERREFRESH 0x8000 /* this Requester stops a Refresh broadcast */
-
-
-
-
-
-
- /* ======================================================================== */
- /* === Gadget ============================================================= */
- /* ======================================================================== */
- struct Gadget
- {
- struct Gadget *NextGadget; /* next gadget in the list */
-
- WORD LeftEdge, TopEdge; /* "hit box" of gadget */
- WORD Width, Height; /* "hit box" of gadget */
-
- UWORD Flags; /* see below for list of defines */
-
- UWORD Activation; /* see below for list of defines */
-
- UWORD GadgetType; /* 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)
- */
- APTR GadgetRender;
-
- /* appliprog can specify "highlighted" imagery rather than algorithmic
- * this can point to either Border or Image data
- */
- APTR SelectRender;
-
- struct IntuiText *GadgetText; /* text for this gadget */
-
- /* MutualExclude, never implemented, is now declared obsolete.
- * There are published examples of implementing a more general
- * and practical exclusion in your applications.
- *
- * Starting with V36, this field is used to point to a hook
- * for a custom gadget.
- *
- * Programs using this field for their own processing will
- * continue to work, as long as they don't try the
- * trick with custom gadgets.
- */
- LONG MutualExclude; /* obsolete */
-
- /* pointer to a structure of special data required by Proportional,
- * String and Integer Gadgets
- */
- APTR SpecialInfo;
-
- UWORD GadgetID; /* user-definable ID field */
- APTR UserData; /* ptr to general purpose User data (ignored by In) */
- };
-
-
- struct ExtGadget
- {
- /* The first fields match struct Gadget exactly */
- struct ExtGadget *NextGadget; /* Matches struct Gadget */
- WORD LeftEdge, TopEdge; /* Matches struct Gadget */
- WORD Width, Height; /* Matches struct Gadget */
- UWORD Flags; /* Matches struct Gadget */
- UWORD Activation; /* Matches struct Gadget */
- UWORD GadgetType; /* Matches struct Gadget */
- APTR GadgetRender; /* Matches struct Gadget */
- APTR SelectRender; /* Matches struct Gadget */
- struct IntuiText *GadgetText; /* Matches struct Gadget */
- LONG MutualExclude; /* Matches struct Gadget */
- APTR SpecialInfo; /* Matches struct Gadget */
- UWORD GadgetID; /* Matches struct Gadget */
- APTR UserData; /* Matches struct Gadget */
-
- /* These fields only exist under V39 and only if GFLG_EXTENDED is set */
- ULONG MoreFlags; /* see GMORE_ flags below */
- WORD BoundsLeftEdge; /* Bounding extent for gadget, valid */
- WORD BoundsTopEdge; /* only if GMORE_BOUNDS is set. The */
- WORD BoundsWidth; /* GFLG_RELxxx flags affect these */
- WORD BoundsHeight; /* coordinates as well. */
- };
-
-
- /* --- Gadget.Flags values --- */
- /* combinations in these bits describe the highlight technique to be used */
- #define GFLG_GADGHIGHBITS 0x0003
- #define GFLG_GADGHCOMP 0x0000 /* Complement the select box */
- #define GFLG_GADGHBOX 0x0001 /* Draw a box around the image */
- #define GFLG_GADGHIMAGE 0x0002 /* Blast in this alternate image */
- #define GFLG_GADGHNONE 0x0003 /* don't highlight */
-
- #define GFLG_GADGIMAGE 0x0004 /* 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
- */
- #define GFLG_RELBOTTOM 0x0008 /* vert. pos. is relative to bottom edge */
- #define GFLG_RELRIGHT 0x0010 /* horiz. pos. is relative to right edge */
- #define GFLG_RELWIDTH 0x0020 /* width is relative to req/window */
- #define GFLG_RELHEIGHT 0x0040 /* 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.
- */
- #define GFLG_RELSPECIAL 0x4000 /* custom gadget has special relativity.
- * Gadget box values are absolutes, but
- * can be changed via the GM_LAYOUT method.
- */
- #define GFLG_SELECTED 0x0080 /* 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
- */
- #define GFLG_DISABLED 0x0100
-
- /* 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.
- */
-
- #define GFLG_LABELMASK 0x3000
- #define GFLG_LABELITEXT 0x0000 /* GadgetText points to IntuiText */
- #define GFLG_LABELSTRING 0x1000 /* GadgetText points to (UBYTE *) */
- #define GFLG_LABELIMAGE 0x2000 /* GadgetText points to Image (object) */
-
- /* New for V37: GFLG_TABCYCLE */
- #define GFLG_TABCYCLE 0x0200 /* (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)
- */
- #define GFLG_STRINGEXTEND 0x0400 /* 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.
- */
-
- #define GFLG_IMAGEDISABLE 0x0800 /* 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.
- */
- #define GFLG_EXTENDED 0x8000 /* 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.
- */
- #define GACT_RELVERIFY 0x0001
-
- /* 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
- */
- #define GACT_IMMEDIATE 0x0002
-
- /* 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.
- */
- #define GACT_ENDGADGET 0x0004
-
- /* 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.
- * Note: boolean FOLLOWMOUSE gadgets require GACT_RELVERIFY to get
- * _any_ mouse movement events (this unusual behavior is a compatibility
- * hold-over from the old days).
- */
- #define GACT_FOLLOWMOUSE 0x0008
-
- /* 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
- */
- #define GACT_RIGHTBORDER 0x0010
- #define GACT_LEFTBORDER 0x0020
- #define GACT_TOPBORDER 0x0040
- #define GACT_BOTTOMBORDER 0x0080
- #define GACT_BORDERSNIFF 0x8000 /* neither set nor rely on this bit */
-
- #define GACT_TOGGLESELECT 0x0100 /* this bit for toggle-select mode */
- #define GACT_BOOLEXTEND 0x2000 /* this Boolean Gadget has a BoolInfo */
-
- /* should properly be in StringInfo, but aren't */
- #define GACT_STRINGLEFT 0x0000 /* NOTE WELL: that this has value zero */
- #define GACT_STRINGCENTER 0x0200
- #define GACT_STRINGRIGHT 0x0400
- #define GACT_LONGINT 0x0800 /* this String Gadget is for Long Ints */
- #define GACT_ALTKEYMAP 0x1000 /* this String has an alternate keymap */
- #define GACT_STRINGEXTEND 0x2000 /* this String Gadget has StringExtend */
- /* NOTE: NEVER SET GACT_STRINGEXTEND IF YOU
- * ARE RUNNING ON LESS THAN V36! SEE
- * GFLG_STRINGEXTEND (ABOVE) INSTEAD
- */
-
- #define GACT_ACTIVEGADGET 0x4000 /* 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 0x8000 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
- */
- #define GTYP_GADGETTYPE 0xFC00 /* all Gadget Global Type flags (padded) */
-
- #define GTYP_SCRGADGET 0x4000 /* 1 = ScreenGadget, 0 = WindowGadget */
- #define GTYP_GZZGADGET 0x2000 /* 1 = for WFLG_GIMMEZEROZERO borders */
- #define GTYP_REQGADGET 0x1000 /* 1 = this is a Requester Gadget */
-
- /* GTYP_SYSGADGET means that Intuition ALLOCATED the gadget.
- * GTYP_SYSTYPEMASK is the mask you can apply to tell what type of
- * system-gadget it is. The possible types follow.
- */
- #define GTYP_SYSGADGET 0x8000
- #define GTYP_SYSTYPEMASK 0x00F0
-
- /* These definitions describe system gadgets in V36 and higher: */
- #define GTYP_SIZING 0x0010 /* Window sizing gadget */
- #define GTYP_WDRAGGING 0x0020 /* Window drag bar */
- #define GTYP_SDRAGGING 0x0030 /* Screen drag bar */
- #define GTYP_WDEPTH 0x0040 /* Window depth gadget */
- #define GTYP_SDEPTH 0x0050 /* Screen depth gadget */
- #define GTYP_WZOOM 0x0060 /* Window zoom gadget */
- #define GTYP_SUNUSED 0x0070 /* Unused screen gadget */
- #define GTYP_CLOSE 0x0080 /* Window close gadget */
-
- /* These definitions describe system gadgets prior to V36: */
- #define GTYP_WUPFRONT GTYP_WDEPTH /* Window to-front gadget */
- #define GTYP_SUPFRONT GTYP_SDEPTH /* Screen to-front gadget */
- #define GTYP_WDOWNBACK GTYP_WZOOM /* Window to-back gadget */
- #define GTYP_SDOWNBACK GTYP_SUNUSED /* Screen to-back gadget */
-
- /* GTYP_GTYPEMASK is a mask you can apply to tell what class
- * of gadget this is. The possible classes follow.
- */
- #define GTYP_GTYPEMASK 0x0007
-
- #define GTYP_BOOLGADGET 0x0001
- #define GTYP_GADGET0002 0x0002
- #define GTYP_PROPGADGET 0x0003
- #define GTYP_STRGADGET 0x0004
- #define GTYP_CUSTOMGADGET 0x0005
-
- /* This bit in GadgetType is reserved for undocumented internal use
- * by the Gadget Toolkit, and cannot be used nor relied on by
- * applications: 0x0100
- */
-
- /* 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.
- */
- #define GMORE_BOUNDS 0x00000001 /* ExtGadget has valid Bounds */
- #define GMORE_GADGETHELP 0x00000002 /* This gadget responds to gadget help */
- #define GMORE_SCROLLRASTER 0x00000004 /* 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
- */
- struct BoolInfo
- {
- UWORD Flags; /* defined below */
- UWORD *Mask; /* bit mask for highlighting and selecting
- * mask must follow the same rules as an Image
- * plane. Its width and height are determined
- * by the width and height of the gadget's
- * select box. (i.e. Gadget.Width and .Height).
- */
- ULONG Reserved; /* set to 0 */
- };
-
- /* set BoolInfo.Flags to this flag bit.
- * in the future, additional bits might mean more stuff hanging
- * off of BoolInfo.Reserved.
- */
- #define BOOLMASK 0x0001 /* 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
- */
- struct PropInfo
- {
- UWORD Flags; /* 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.
- */
- UWORD HorizPot; /* 16-bit FixedPoint horizontal quantity percentage */
- UWORD VertPot; /* 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();
- */
- UWORD HorizBody; /* horizontal Body */
- UWORD VertBody; /* vertical Body */
-
- /* these are the variables that Intuition sets and maintains */
- UWORD CWidth; /* Container width (with any relativity absoluted) */
- UWORD CHeight; /* Container height (with any relativity absoluted) */
- UWORD HPotRes, VPotRes; /* pot increments */
- UWORD LeftBorder; /* Container borders */
- UWORD TopBorder; /* Container borders */
- };
-
-
- /* --- FLAG BITS ---------------------------------------------------------- */
- #define AUTOKNOB 0x0001 /* 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.
- */
-
- #define FREEHORIZ 0x0002 /* if set, the knob can move horizontally */
- #define FREEVERT 0x0004 /* if set, the knob can move vertically */
- #define PROPBORDERLESS 0x0008 /* if set, no border will be rendered */
- #define KNOBHIT 0x0100 /* set when this Knob is hit */
- #define PROPNEWLOOK 0x0010 /* set this if you want to get the new
- * V36 look
- */
-
- #define KNOBHMIN 6 /* minimum horizontal size of the Knob */
- #define KNOBVMIN 4 /* minimum vertical size of the Knob */
- #define MAXBODY 0xFFFF /* maximum body value */
- #define MAXPOT 0xFFFF /* 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
- */
- struct StringInfo
- {
- /* you initialize these variables, and then Intuition maintains them */
- UBYTE *Buffer; /* the buffer containing the start and final string */
- UBYTE *UndoBuffer; /* optional buffer for undoing current entry */
- WORD BufferPos; /* character position in Buffer */
- WORD MaxChars; /* max number of chars in Buffer (including NULL) */
- WORD DispPos; /* Buffer position of first displayed character */
-
- /* Intuition initializes and maintains these variables for you */
- WORD UndoPos; /* character position in the undo buffer */
- WORD NumChars; /* number of characters currently in Buffer */
- WORD DispCount; /* number of whole characters visible in Container */
- WORD CLeft, CTop; /* topleft offset of the container */
-
- /* This unused field is changed to allow extended specification
- * of string gadget parameters. It is ignored unless the flag
- * GACT_STRINGEXTEND is set in the Gadget's Activation field
- * or the GFLG_STRINGEXTEND flag is set in the Gadget Flags field.
- * (See GFLG_STRINGEXTEND for an important note)
- */
- /* struct Layer *LayerPtr; --- obsolete --- */
- struct StringExtend *Extension;
-
- /* you can initialize this variable before the gadget is submitted to
- * Intuition, and then examine it later to discover what integer
- * the user has entered (if the user never plays with the gadget,
- * the value will be unchanged from your initial setting)
- */
- LONG LongInt;
-
- /* If you want this Gadget to use your own Console keymapping, you
- * set the GACT_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 GACT_ALTKEYMAP, you'll get the standard ASCII keymapping.
- */
- struct KeyMap *AltKeyMap;
- };
-
- /* ======================================================================== */
- /* === IntuiText ========================================================== */
- /* ======================================================================== */
- /* IntuiText is a series of strings that start with a location
- * (always relative to the upper-left corner of something) and then the
- * text of the string. The text is null-terminated.
- */
- struct IntuiText
- {
- UBYTE FrontPen, BackPen; /* the pen numbers for the rendering */
- UBYTE DrawMode; /* the mode for rendering the text */
- WORD LeftEdge; /* relative start location for the text */
- WORD TopEdge; /* relative start location for the text */
- struct TextAttr *ITextFont; /* if NULL, you accept the default */
- UBYTE *IText; /* pointer to null-terminated text */
- struct IntuiText *NextText; /* pointer to another IntuiText to render */
- };
-
-
-
-
-
-
- /* ======================================================================== */
- /* === 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
- * on NextBorder
- */
- struct Border
- {
- WORD LeftEdge, TopEdge; /* initial offsets from the origin */
- UBYTE FrontPen, BackPen; /* pens numbers for rendering */
- UBYTE DrawMode; /* mode for rendering */
- BYTE Count; /* number of XY pairs */
- WORD *XY; /* vector coordinate pairs rel to LeftTop */
- struct Border *NextBorder; /* pointer to any other Border too */
- };
-
-
-
-
-
-
- /* ======================================================================== */
- /* === Image ============================================================== */
- /* ======================================================================== */
- /* This is a brief image structure for very simple transfers of
- * image data to a RastPort
- */
- struct Image
- {
- WORD LeftEdge; /* starting offset relative to some origin */
- WORD TopEdge; /* starting offsets relative to some origin */
- WORD Width; /* pixel size (though data is word-aligned) */
- WORD Height;
- WORD Depth; /* >= 0, for images you create */
- UWORD *ImageData; /* 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 one 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 avoids 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 = 0x02;
- * Gadget.PlaneOnOff = 0x01;
- * 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.
- *
- * NOTE: Intuition relies on PlanePick to know how many planes
- * of data are found in ImageData. There should be no more
- * '1'-bits in PlanePick than there are planes in ImageData.
- */
- UBYTE PlanePick, PlaneOnOff;
-
- /* if the NextImage variable is not NULL, Intuition presumes that
- * it points to another Image structure with another Image to be
- * rendered
- */
- struct Image *NextImage;
- };
-
-
-
-
-
-
- /* ======================================================================== */
- /* === IntuiMessage ======================================================= */
- /* ======================================================================== */
- struct IntuiMessage
- {
- struct Message ExecMessage;
-
- /* the Class bits correspond directly with the IDCMP Flags, except for the
- * special bit IDCMP_LONELYMESSAGE (defined below)
- */
- ULONG Class;
-
- /* the Code field is for special values like MENU number */
- UWORD Code;
-
- /* the Qualifier field is a copy of the current InputEvent's Qualifier */
- UWORD Qualifier;
-
- /* IAddress contains particular addresses for Intuition functions, like
- * the pointer to the Gadget or the Screen
- */
- APTR IAddress;
-
- /* 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 (WFLG_GIMMEZEROZERO
- * notwithstanding). If IDCMP_DELTAMOVE is set, these values will
- * be deltas from the last reported position.
- */
- WORD MouseX, MouseY;
-
- /* the time values are copies of the current system clock time. Micros
- * are in units of microseconds, Seconds in seconds.
- */
- ULONG Seconds, Micros;
-
- /* the IDCMPWindow variable will always have the address of the Window of
- * this IDCMP
- */
- struct Window *IDCMPWindow;
-
- /* system-use variable */
- struct IntuiMessage *SpecialLink;
- };
-
- /* 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.
- */
-
- struct ExtIntuiMessage
- {
- struct IntuiMessage eim_IntuiMessage;
- struct TabletData *eim_TabletData;
- };
-
- /* --- IDCMP Classes ------------------------------------------------------ */
- /* Please refer to the Autodoc for OpenWindow() and to the Rom Kernel
- * Manual for full details on the IDCMP classes.
- */
- #define IDCMP_SIZEVERIFY 0x00000001
- #define IDCMP_NEWSIZE 0x00000002
- #define IDCMP_REFRESHWINDOW 0x00000004
- #define IDCMP_MOUSEBUTTONS 0x00000008
- #define IDCMP_MOUSEMOVE 0x00000010
- #define IDCMP_GADGETDOWN 0x00000020
- #define IDCMP_GADGETUP 0x00000040
- #define IDCMP_REQSET 0x00000080
- #define IDCMP_MENUPICK 0x00000100
- #define IDCMP_CLOSEWINDOW 0x00000200
- #define IDCMP_RAWKEY 0x00000400
- #define IDCMP_REQVERIFY 0x00000800
- #define IDCMP_REQCLEAR 0x00001000
- #define IDCMP_MENUVERIFY 0x00002000
- #define IDCMP_NEWPREFS 0x00004000
- #define IDCMP_DISKINSERTED 0x00008000
- #define IDCMP_DISKREMOVED 0x00010000
- #define IDCMP_WBENCHMESSAGE 0x00020000 /* System use only */
- #define IDCMP_ACTIVEWINDOW 0x00040000
- #define IDCMP_INACTIVEWINDOW 0x00080000
- #define IDCMP_DELTAMOVE 0x00100000
- #define IDCMP_VANILLAKEY 0x00200000
- #define IDCMP_INTUITICKS 0x00400000
- /* for notifications from "boopsi" gadgets */
- #define IDCMP_IDCMPUPDATE 0x00800000 /* new for V36 */
- /* for getting help key report during menu session */
- #define IDCMP_MENUHELP 0x01000000 /* new for V36 */
- /* for notification of any move/size/zoom/change window */
- #define IDCMP_CHANGEWINDOW 0x02000000 /* new for V36 */
- #define IDCMP_GADGETHELP 0x04000000 /* new for V39 */
-
- /* NOTEZ-BIEN: 0x80000000 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
- */
- #define IDCMP_LONELYMESSAGE 0x80000000
-
-
- /* --- IDCMP Codes -------------------------------------------------------- */
- /* This group of codes is for the IDCMP_CHANGEWINDOW message */
- #define CWCODE_MOVESIZE 0x0000 /* Window was moved and/or sized */
- #define CWCODE_DEPTH 0x0001 /* Window was depth-arranged (new for V39) */
-
- /* This group of codes is for the IDCMP_MENUVERIFY message */
- #define MENUHOT 0x0001 /* IntuiWants verification or MENUCANCEL */
- #define MENUCANCEL 0x0002 /* HOT Reply of this cancels Menu operation */
- #define MENUWAITING 0x0003 /* Intuition simply wants a ReplyMsg() ASAP */
-
- /* These are internal tokens to represent state of verification attempts
- * shown here as a clue.
- */
- #define OKOK MENUHOT /* guy didn't care */
- #define OKABORT 0x0004 /* window rendered question moot */
- #define OKCANCEL MENUCANCEL /* window sent cancel reply */
-
- /* This group of codes is for the IDCMP_WBENCHMESSAGE messages */
- #define WBENCHOPEN 0x0001
- #define WBENCHCLOSE 0x0002
-
-
- /* A data structure common in V36 Intuition processing */
- struct IBox
- {
- WORD Left;
- WORD Top;
- WORD Width;
- WORD Height;
- };
-
-
-
- /* ======================================================================== */
- /* === Window ============================================================= */
- /* ======================================================================== */
- struct Window
- {
- struct Window *NextWindow; /* for the linked list in a screen */
-
- WORD LeftEdge, TopEdge; /* screen dimensions of window */
- WORD Width, Height; /* screen dimensions of window */
-
- WORD MouseY, MouseX; /* relative to upper-left of window */
-
- WORD MinWidth, MinHeight; /* minimum sizes */
- UWORD MaxWidth, MaxHeight; /* maximum sizes */
-
- ULONG Flags; /* see below for defines */
-
- struct Menu *MenuStrip; /* the strip of Menu headers */
-
- UBYTE *Title; /* the title text for this window */
-
- struct Requester *FirstRequest; /* all active Requesters */
-
- struct Requester *DMRequest; /* double-click Requester */
-
- WORD ReqCount; /* count of reqs blocking Window */
-
- struct Screen *WScreen; /* this Window's Screen */
- struct RastPort *RPort; /* this Window's very own RastPort */
-
- /* the border variables describe the window border. If you specify
- * WFLG_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
- * WFLG_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
- */
- BYTE BorderLeft, BorderTop, BorderRight, BorderBottom;
- struct RastPort *BorderRPort;
-
-
- /* 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)
- */
- struct Gadget *FirstGadget;
-
- /* these are for opening/closing the windows */
- struct Window *Parent, *Descendant;
-
- /* sprite data information for your own Pointer
- * set these AFTER you Open the Window by calling SetPointer()
- */
- UWORD *Pointer; /* sprite data */
- BYTE PtrHeight; /* sprite height (not including sprite padding) */
- BYTE PtrWidth; /* sprite width (must be less than or equal to 16) */
- BYTE XOffset, YOffset; /* sprite offsets */
-
- /* the IDCMP Flags and User's and Intuition's Message Ports */
- ULONG IDCMPFlags; /* User-selected flags */
- struct MsgPort *UserPort, *WindowPort;
- struct IntuiMessage *MessageKey;
-
- UBYTE DetailPen, BlockPen; /* 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
- */
- struct Image *CheckMark;
-
- UBYTE *ScreenTitle; /* if non-null, Screen title when Window is active */
-
- /* These variables have the mouse coordinates relative to the
- * inner-Window of WFLG_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, WFLG_GIMMEZEROZERO
- * notwithstanding
- */
- WORD GZZMouseX;
- WORD GZZMouseY;
- /* these variables contain the width and height of the inner-Window of
- * WFLG_GIMMEZEROZERO Windows
- */
- WORD GZZWidth;
- WORD GZZHeight;
-
- UBYTE *ExtData;
-
- BYTE *UserData; /* general-purpose pointer to User data extension */
-
- /** 11/18/85: this pointer keeps a duplicate of what
- * Window.RPort->Layer is _supposed_ to be pointing at
- */
- struct Layer *WLayer;
-
- /* NEW 1.2: need to keep track of the font that
- * OpenWindow opened, in case user SetFont's into RastPort
- */
- struct TextFont *IFont;
-
- /* (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.
- */
- ULONG MoreFlags;
-
- /**** Data beyond this point are Intuition Private. DO NOT USE ****/
- };
-
-
- /* --- Flags requested at OpenWindow() time by the application --------- */
- #define WFLG_SIZEGADGET 0x00000001 /* include sizing system-gadget? */
- #define WFLG_DRAGBAR 0x00000002 /* include dragging system-gadget? */
- #define WFLG_DEPTHGADGET 0x00000004 /* include depth arrangement gadget? */
- #define WFLG_CLOSEGADGET 0x00000008 /* include close-box system-gadget? */
-
- #define WFLG_SIZEBRIGHT 0x00000010 /* size gadget uses right border */
- #define WFLG_SIZEBBOTTOM 0x00000020 /* size gadget uses bottom border */
-
- /* --- refresh modes ------------------------------------------------------ */
- /* combinations of the WFLG_REFRESHBITS select the refresh type */
- #define WFLG_REFRESHBITS 0x000000C0
- #define WFLG_SMART_REFRESH 0x00000000
- #define WFLG_SIMPLE_REFRESH 0x00000040
- #define WFLG_SUPER_BITMAP 0x00000080
- #define WFLG_OTHER_REFRESH 0x000000C0
-
- #define WFLG_BACKDROP 0x00000100 /* this is a backdrop window */
-
- #define WFLG_REPORTMOUSE 0x00000200 /* to hear about every mouse move */
-
- #define WFLG_GIMMEZEROZERO 0x00000400 /* a GimmeZeroZero window */
-
- #define WFLG_BORDERLESS 0x00000800 /* to get a Window sans border */
-
- #define WFLG_ACTIVATE 0x00001000 /* when Window opens, it's Active */
-
- /* --- Other User Flags --------------------------------------------------- */
- #define WFLG_RMBTRAP 0x00010000 /* Catch RMB events for your own */
- #define WFLG_NOCAREREFRESH 0x00020000 /* not to be bothered with REFRESH */
-
- /* - V36 new Flags which the programmer may specify in NewWindow.Flags */
- #define WFLG_NW_EXTENDED 0x00040000 /* extension data provided */
- /* see struct ExtNewWindow */
-
- /* - V39 new Flags which the programmer may specify in NewWindow.Flags */
- #define WFLG_NEWLOOKMENUS 0x00200000 /* window has NewLook menus */
-
-
- /* These flags are set only by Intuition. YOU MAY NOT SET THEM YOURSELF! */
- #define WFLG_WINDOWACTIVE 0x00002000 /* this window is the active one */
- #define WFLG_INREQUEST 0x00004000 /* this window is in request mode */
- #define WFLG_MENUSTATE 0x00008000 /* Window is active with Menus on */
- #define WFLG_WINDOWREFRESH 0x01000000 /* Window is currently refreshing */
- #define WFLG_WBENCHWINDOW 0x02000000 /* WorkBench tool ONLY Window */
- #define WFLG_WINDOWTICKED 0x04000000 /* only one timer tick at a time */
-
- /* V36 and higher flags to be set only by Intuition: */
- #define WFLG_VISITOR 0x08000000 /* visitor window */
- #define WFLG_ZOOMED 0x10000000 /* identifies "zoom state" */
- #define WFLG_HASZOOM 0x20000000 /* window has a zoom gadget */
-
-
- /* --- Other Window Values ---------------------------------------------- */
- #define DEFAULTMOUSEQUEUE (5) /* no more mouse messages */
-
- /* --- see struct IntuiMessage for the IDCMP Flag definitions ------------- */
-
-
- /* ======================================================================== */
- /* === NewWindow ========================================================== */
- /* ======================================================================== */
- /*
- * Note that the new extension fields have been removed. Use ExtNewWindow
- * structure below to make use of these fields
- */
- struct NewWindow
- {
- WORD LeftEdge, TopEdge; /* screen dimensions of window */
- WORD Width, Height; /* screen dimensions of window */
-
- UBYTE DetailPen, BlockPen; /* for bar/border/gadget rendering */
-
- ULONG IDCMPFlags; /* User-selected IDCMP flags */
-
- ULONG Flags; /* 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)
- */
- struct Gadget *FirstGadget;
-
- /* 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
- */
- struct Image *CheckMark;
-
- UBYTE *Title; /* 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 address of the
- * Custom Screen structure in this variable. Otherwise, this variable
- * is ignored and doesn't have to be initialized.
- */
- struct Screen *Screen;
-
- /* WFLG_SUPER_BITMAP Window? If so, put the address of your BitMap
- * structure in this variable. If not, this variable is ignored and
- * doesn't have to be initialized
- */
- struct BitMap *BitMap;
-
- /* the values describe the minimum and maximum sizes of your Windows.
- * these matter only if you've chosen the WFLG_SIZEGADGET 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.
- */
- WORD MinWidth, MinHeight; /* minimums */
- UWORD MaxWidth, MaxHeight; /* 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.
- */
- UWORD Type;
-
- };
-
- /* 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.
- */
- struct ExtNewWindow
- {
- WORD LeftEdge, TopEdge;
- WORD Width, Height;
-
- UBYTE DetailPen, BlockPen;
- ULONG IDCMPFlags;
- ULONG Flags;
- struct Gadget *FirstGadget;
-
- struct Image *CheckMark;
-
- UBYTE *Title;
- struct Screen *Screen;
- struct BitMap *BitMap;
-
- WORD MinWidth, MinHeight;
- UWORD MaxWidth, MaxHeight;
-
- /* 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.
- */
- UWORD Type;
-
- /* ------------------------------------------------------- *
- * 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.
- */
- struct TagItem *Extension;
- };
-
- /*
- * 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.
- */
-
- #define WA_Dummy (TAG_USER + 99) /* 0x80000063 */
-
- /* these tags simply override NewWindow parameters */
- #define WA_Left (WA_Dummy + 0x01)
- #define WA_Top (WA_Dummy + 0x02)
- #define WA_Width (WA_Dummy + 0x03)
- #define WA_Height (WA_Dummy + 0x04)
- #define WA_DetailPen (WA_Dummy + 0x05)
- #define WA_BlockPen (WA_Dummy + 0x06)
- #define WA_IDCMP (WA_Dummy + 0x07)
- /* "bulk" initialization of NewWindow.Flags */
- #define WA_Flags (WA_Dummy + 0x08)
- #define WA_Gadgets (WA_Dummy + 0x09)
- #define WA_Checkmark (WA_Dummy + 0x0A)
- #define WA_Title (WA_Dummy + 0x0B)
- /* means you don't have to call SetWindowTitles
- * after you open your window
- */
- #define WA_ScreenTitle (WA_Dummy + 0x0C)
- #define WA_CustomScreen (WA_Dummy + 0x0D)
- #define WA_SuperBitMap (WA_Dummy + 0x0E)
- /* also implies WFLG_SUPER_BITMAP property */
- #define WA_MinWidth (WA_Dummy + 0x0F)
- #define WA_MinHeight (WA_Dummy + 0x10)
- #define WA_MaxWidth (WA_Dummy + 0x11)
- #define WA_MaxHeight (WA_Dummy + 0x12)
-
- /* The following are specifications for new features */
-
- #define WA_InnerWidth (WA_Dummy + 0x13)
- #define WA_InnerHeight (WA_Dummy + 0x14)
- /* 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.
- */
-
- #define WA_PubScreenName (WA_Dummy + 0x15)
- /* declares that you want the window to open as
- * a visitor on the public screen whose name is
- * pointed to by (UBYTE *) ti_Data
- */
- #define WA_PubScreen (WA_Dummy + 0x16)
- /* open as a visitor window on the public screen
- * whose address 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().
- */
- #define WA_PubScreenFallBack (WA_Dummy + 0x17)
- /* 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
- */
- #define WA_WindowName (WA_Dummy + 0x18)
- /* not implemented */
- #define WA_Colors (WA_Dummy + 0x19)
- /* 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.
- */
- #define WA_Zoom (WA_Dummy + 0x1A)
- /* 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.
- */
- #define WA_MouseQueue (WA_Dummy + 0x1B)
- /* ti_Data contains initial value for the mouse
- * message backlog limit for this window.
- */
- #define WA_BackFill (WA_Dummy + 0x1C)
- /* provides a "backfill hook" for your window's Layer.
- * See layers.library/CreateUpfrontHookLayer().
- */
- #define WA_RptQueue (WA_Dummy + 0x1D)
- /* initial value of repeat key backlog limit */
-
- /* These Boolean tag items are alternatives to the NewWindow.Flags
- * boolean flags with similar names.
- */
- #define WA_SizeGadget (WA_Dummy + 0x1E)
- #define WA_DragBar (WA_Dummy + 0x1F)
- #define WA_DepthGadget (WA_Dummy + 0x20)
- #define WA_CloseGadget (WA_Dummy + 0x21)
- #define WA_Backdrop (WA_Dummy + 0x22)
- #define WA_ReportMouse (WA_Dummy + 0x23)
- #define WA_NoCareRefresh (WA_Dummy + 0x24)
- #define WA_Borderless (WA_Dummy + 0x25)
- #define WA_Activate (WA_Dummy + 0x26)
- #define WA_RMBTrap (WA_Dummy + 0x27)
- #define WA_WBenchWindow (WA_Dummy + 0x28) /* PRIVATE!! */
- #define WA_SimpleRefresh (WA_Dummy + 0x29)
- /* only specify if TRUE */
- #define WA_SmartRefresh (WA_Dummy + 0x2A)
- /* only specify if TRUE */
- #define WA_SizeBRight (WA_Dummy + 0x2B)
- #define WA_SizeBBottom (WA_Dummy + 0x2C)
-
- /* New Boolean properties */
- #define WA_AutoAdjust (WA_Dummy + 0x2D)
- /* shift or squeeze the window's position and
- * dimensions to fit it on screen.
- */
-
- #define WA_GimmeZeroZero (WA_Dummy + 0x2E)
- /* equiv. to NewWindow.Flags WFLG_GIMMEZEROZERO */
-
- /* New for V37: WA_MenuHelp (ignored by V36) */
- #define WA_MenuHelp (WA_Dummy + 0x2F)
- /* Enables IDCMP_MENUHELP: Pressing HELP during menus
- * will return IDCMP_MENUHELP message.
- */
-
- /* New for V39: (ignored by V37 and earlier) */
- #define WA_NewLookMenus (WA_Dummy + 0x30)
- /* Set to TRUE if you want NewLook menus */
- #define WA_AmigaKey (WA_Dummy + 0x31)
- /* Pointer to image for Amiga-key equiv in menus */
- #define WA_NotifyDepth (WA_Dummy + 0x32)
- /* Requests IDCMP_CHANGEWINDOW message when
- * window is depth arranged
- * (imsg->Code = CWCODE_DEPTH)
- */
-
- /* WA_Dummy + 0x33 is obsolete */
-
- #define WA_Pointer (WA_Dummy + 0x34)
- /* 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().
- */
-
- #define WA_BusyPointer (WA_Dummy + 0x35)
- /* ti_Data is boolean. Set to TRUE to
- * request the standard busy pointer.
- * This tag may be passed to OpenWindowTags()
- * or SetWindowPointer().
- */
-
- #define WA_PointerDelay (WA_Dummy + 0x36)
- /* 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 short, without
- * fear of a flashing pointer.
- * This tag may be passed to OpenWindowTags()
- * or SetWindowPointer().
- */
-
- #define WA_TabletMessages (WA_Dummy + 0x37)
- /* 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.
- */
-
- #define WA_HelpGroup (WA_Dummy + 0x38)
- /* 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.
- */
-
- #define WA_HelpGroupWindow (WA_Dummy + 0x39)
- /* 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.
- */
-
- #define HC_GADGETHELP (1)
-
-
- #ifndef INTUITION_SCREENS_H
- #include <intuition/screens.h>
- #endif
-
- #ifndef INTUITION_PREFERENCES_H
- #include <intuition/preferences.h>
- #endif
-
- /* ======================================================================== */
- /* === 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
- */
- struct Remember
- {
- struct Remember *NextRemember;
- ULONG RememberSize;
- UBYTE *Memory;
- };
-
-
- /* === Color Spec ====================================================== */
- /* How to tell Intuition about RGB values for a color table entry.
- * NOTE: The way the structure was defined, the color value was
- * right-justified within each UWORD. This poses problems for
- * extensibility to more bits-per-gun. The SA_Colors32 tag to
- * OpenScreenTags() provides an alternate way to specify colors
- * with greater precision.
- */
- struct ColorSpec
- {
- WORD ColorIndex; /* -1 terminates an array of ColorSpec */
- UWORD Red; /* only the _bottom_ 4 bits recognized */
- UWORD Green; /* only the _bottom_ 4 bits recognized */
- UWORD Blue; /* only the _bottom_ 4 bits recognized */
- };
-
- /* === Easy Requester Specification ======================================= */
- /* see also autodocs for EasyRequest and BuildEasyRequest */
- /* NOTE: This structure may grow in size in the future */
- struct EasyStruct {
- ULONG es_StructSize; /* should be sizeof (struct EasyStruct )*/
- ULONG es_Flags; /* should be 0 for now */
- UBYTE *es_Title; /* title of requester window */
- UBYTE *es_TextFormat; /* 'printf' style formatting string */
- UBYTE *es_GadgetFormat; /* 'printf' style formatting string */
- };
-
-
-
- /* ======================================================================== */
- /* === Miscellaneous ====================================================== */
- /* ======================================================================== */
-
- /* = MACROS ============================================================== */
- #define MENUNUM(n) (n & 0x1F)
- #define ITEMNUM(n) ((n >> 5) & 0x003F)
- #define SUBNUM(n) ((n >> 11) & 0x001F)
-
- #define SHIFTMENU(n) (n & 0x1F)
- #define SHIFTITEM(n) ((n & 0x3F) << 5)
- #define SHIFTSUB(n) ((n & 0x1F) << 11)
-
- #define FULLMENUNUM( menu, item, sub ) \
- ( SHIFTSUB(sub) | SHIFTITEM(item) | SHIFTMENU(menu) )
-
- #define SRBNUM(n) (0x08 - (n >> 4)) /* SerRWBits -> read bits per char */
- #define SWBNUM(n) (0x08 - (n & 0x0F))/* SerRWBits -> write bits per chr */
- #define SSBNUM(n) (0x01 + (n >> 4)) /* SerStopBuf -> stop bits per chr */
- #define SPARNUM(n) (n >> 4) /* SerParShk -> parity setting */
- #define SHAKNUM(n) (n & 0x0F) /* SerParShk -> handshake mode */
-
-
- /* = MENU STUFF =========================================================== */
- #define NOMENU 0x001F
- #define NOITEM 0x003F
- #define NOSUB 0x001F
- #define MENUNULL 0xFFFF
-
-
- /* = =RJ='s peculiarities ================================================= */
- #define FOREVER for(;;)
- #define SIGN(x) ( ((x) > 0) - ((x) < 0) )
- #define NOT !
-
- /* 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
- */
- #define CHECKWIDTH 19
- #define COMMWIDTH 27
- #define LOWCHECKWIDTH 13
- #define 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
- */
- #define ALERT_TYPE 0x80000000
- #define RECOVERY_ALERT 0x00000000 /* the system can recover from this */
- #define DEADEND_ALERT 0x80000000 /* 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
- */
- #define AUTOFRONTPEN 0
- #define AUTOBACKPEN 1
- #define AUTODRAWMODE JAM2
- #define AUTOLEFTEDGE 6
- #define AUTOTOPEDGE 3
- #define AUTOITEXTFONT NULL
- #define AUTONEXTTEXT NULL
-
-
- /* --- RAWMOUSE Codes and Qualifiers (Console OR IDCMP) ------------------- */
- #define SELECTUP (IECODE_LBUTTON | IECODE_UP_PREFIX)
- #define SELECTDOWN (IECODE_LBUTTON)
- #define MENUUP (IECODE_RBUTTON | IECODE_UP_PREFIX)
- #define MENUDOWN (IECODE_RBUTTON)
- #define MIDDLEUP (IECODE_MBUTTON | IECODE_UP_PREFIX)
- #define MIDDLEDOWN (IECODE_MBUTTON)
- #define ALTLEFT (IEQUALIFIER_LALT)
- #define ALTRIGHT (IEQUALIFIER_RALT)
- #define AMIGALEFT (IEQUALIFIER_LCOMMAND)
- #define AMIGARIGHT (IEQUALIFIER_RCOMMAND)
- #define AMIGAKEYS (AMIGALEFT | AMIGARIGHT)
-
- #define CURSORUP 0x4C
- #define CURSORLEFT 0x4F
- #define CURSORRIGHT 0x4E
- #define CURSORDOWN 0x4D
- #define KEYCODE_Q 0x10
- #define KEYCODE_Z 0x31
- #define KEYCODE_X 0x32
- #define KEYCODE_V 0x34
- #define KEYCODE_B 0x35
- #define KEYCODE_N 0x36
- #define KEYCODE_M 0x37
- #define KEYCODE_LESS 0x38
- #define KEYCODE_GREATER 0x39
-
-
-
- /* 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 integer. 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 integer. 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 integer. 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 integer. 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 integer 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 integer which
- * is the x-axis resolution in dots per inch.
- *
- * TABLETA_ResolutionY: ti_Data is an unsigned long integer which
- * is the y-axis resolution in dots per inch.
- */
-
- #define TABLETA_Dummy (TAG_USER + 0x3A000)
- #define TABLETA_TabletZ (TABLETA_Dummy + 0x01)
- #define TABLETA_RangeZ (TABLETA_Dummy + 0x02)
- #define TABLETA_AngleX (TABLETA_Dummy + 0x03)
- #define TABLETA_AngleY (TABLETA_Dummy + 0x04)
- #define TABLETA_AngleZ (TABLETA_Dummy + 0x05)
- #define TABLETA_Pressure (TABLETA_Dummy + 0x06)
- #define TABLETA_ButtonBits (TABLETA_Dummy + 0x07)
- #define TABLETA_InProximity (TABLETA_Dummy + 0x08)
- #define TABLETA_ResolutionX (TABLETA_Dummy + 0x09)
- #define TABLETA_ResolutionY (TABLETA_Dummy + 0x0A)
-
- /* 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.
- */
-
- struct TabletData
- {
- /* Sub-pixel position of tablet, in screen coordinates,
- * scaled to fill a UWORD fraction:
- */
- UWORD td_XFraction, td_YFraction;
-
- /* Current tablet coordinates along each axis: */
- ULONG td_TabletX, td_TabletY;
-
- /* Tablet range along each axis. For example, if td_TabletX
- * can take values 0-999, td_RangeX should be 1000.
- */
- ULONG td_RangeX, td_RangeY;
-
- /* Pointer to tag-list of additional tablet attributes.
- * See <intuition/intuition.h> for the tag values.
- */
- struct TagItem *td_TagList;
- };
-
- /* 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.
- */
-
- struct TabletHookData
- {
- /* 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 640x400
- * screen. Please scale accordingly.
- */
- struct Screen *thd_Screen;
-
- /* The width and height (measured in pixels of the active screen)
- * that your are to scale to:
- */
- ULONG thd_Width;
- ULONG thd_Height;
-
- /* Non-zero if the screen or something about the screen
- * changed since the last time you were invoked:
- */
- LONG thd_ScreenChanged;
- };
-
- /* Include obsolete identifiers: */
- #ifndef INTUITION_IOBSOLETE_H
- #include <intuition/iobsolete.h>
- #endif
-
- #endif
-