1010 lines
38 KiB
OpenEdge ABL
1010 lines
38 KiB
OpenEdge ABL
IFND INTUITION_INTUITION_I
|
|
INTUITION_INTUITION_I SET 1
|
|
**
|
|
** $Filename: intuition/intuition.i $
|
|
** $Release: 1.3 $
|
|
**
|
|
** main intuition include
|
|
**
|
|
** (C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
|
|
** All Rights Reserved
|
|
**
|
|
|
|
IFND EXEC_TYPES_I
|
|
INCLUDE "exec/types.i"
|
|
ENDC
|
|
|
|
IFND GRAPHICS_GFX_I
|
|
include "graphics/gfx.i"
|
|
ENDC
|
|
|
|
IFND GRAPHICS_CLIP_I
|
|
include "graphics/clip.i"
|
|
ENDC
|
|
|
|
IFND GRAPHICS_VIEW_I
|
|
include "graphics/view.i"
|
|
ENDC
|
|
|
|
IFND GRAPHICS_RASTPORT_I
|
|
include "graphics/rastport.i"
|
|
ENDC
|
|
|
|
IFND GRAPHICS_LAYERS_I
|
|
include "graphics/layers.i"
|
|
ENDC
|
|
|
|
IFND GRAPHICS_TEXT_I
|
|
include "graphics/text.i"
|
|
ENDC
|
|
|
|
IFND EXEC_PORTS_I
|
|
include "exec/ports.i"
|
|
ENDC
|
|
|
|
IFND DEVICES_TIMER_I
|
|
include "devices/timer.i"
|
|
ENDC
|
|
|
|
IFND DEVICES_INPUTEVENT_I
|
|
include "devices/inputevent.i"
|
|
ENDC
|
|
|
|
|
|
; ========================================================================;
|
|
; === Menu ===============================================================;
|
|
; ========================================================================;
|
|
STRUCTURE Menu,0
|
|
|
|
APTR mu_NextMenu ; menu pointer, same level
|
|
WORD mu_LeftEdge ; position of the select box
|
|
WORD mu_TopEdge ; position of the select box
|
|
WORD mu_Width ; dimensions of the select box
|
|
WORD mu_Height ; dimensions of the select box
|
|
WORD mu_Flags ; see flag definitions below
|
|
APTR mu_MenuName ; text for this Menu Header
|
|
APTR mu_FirstItem ; pointer to first in chain
|
|
|
|
; these mysteriously-named variables are for internal use only
|
|
WORD mu_JazzX
|
|
WORD mu_JazzY
|
|
WORD mu_BeatX
|
|
WORD mu_BeatY
|
|
|
|
LABEL mu_SIZEOF
|
|
|
|
;*** FLAGS SET BY BOTH THE APPLIPROG AND INTUITION ***
|
|
MENUENABLED EQU $0001 ; whether or not this menu is enabled
|
|
|
|
;*** FLAGS SET BY INTUITION ***
|
|
MIDRAWN EQU $0100 ; this menu's items are currently drawn
|
|
|
|
; ========================================================================;
|
|
; === MenuItem ===========================================================;
|
|
; ========================================================================;
|
|
STRUCTURE MenuItem,0
|
|
|
|
APTR mi_NextItem ; pointer to next in chained list
|
|
WORD mi_LeftEdge ; position of the select box
|
|
WORD mi_TopEdge ; position of the select box
|
|
WORD mi_Width ; dimensions of the select box
|
|
WORD mi_Height ; dimensions of the select box
|
|
WORD mi_Flags ; see the defines below
|
|
|
|
LONG mi_MutualExclude ; set bits mean this item excludes that item
|
|
|
|
APTR mi_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 mi_SelectFill ; points to Image, IntuiText, or NULL
|
|
|
|
BYTE mi_Command ; only if appliprog sets the COMMSEQ flag
|
|
|
|
BYTE mi_KludgeFill00 ; This is strictly for word-alignment
|
|
|
|
APTR mi_SubItem ; if non-zero, DrawMenu shows "->"
|
|
|
|
; The NextSelect field represents the menu number of next selected
|
|
; item (when user has drag-selected several items)
|
|
WORD mi_NextSelect
|
|
|
|
LABEL mi_SIZEOF
|
|
|
|
; --- FLAGS SET BY THE APPLIPROG --------------------------------------------
|
|
CHECKIT EQU $0001 ; whether to check this item if selected
|
|
ITEMTEXT EQU $0002 ; set if textual, clear if graphical item
|
|
COMMSEQ EQU $0004 ; set if there's an command sequence
|
|
MENUTOGGLE EQU $0008 ; set to toggle the check of a menu item
|
|
ITEMENABLED EQU $0010 ; set if this item is enabled
|
|
|
|
; these are the SPECIAL HIGHLIGHT FLAG state meanings
|
|
HIGHFLAGS EQU $00C0 ; see definitions below for these bits
|
|
HIGHIMAGE EQU $0000 ; use the user's "select image"
|
|
HIGHCOMP EQU $0040 ; highlight by complementing the select box
|
|
HIGHBOX EQU $0080 ; highlight by drawing a box around the image
|
|
HIGHNONE EQU $00C0 ; don't highlight
|
|
|
|
; --- FLAGS SET BY BOTH APPLIPROG AND INTUITION -----------------------------
|
|
CHECKED EQU $0100 ; if CHECKIT, then set this when selected
|
|
|
|
|
|
; --- FLAGS SET BY INTUITION ------------------------------------------------
|
|
ISDRAWN EQU $1000 ; this item's subs are currently drawn
|
|
HIGHITEM EQU $2000 ; this item is currently highlighted
|
|
MENUTOGGLED EQU $4000 ; this item was already toggled
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === Requester ==========================================================
|
|
; ========================================================================
|
|
STRUCTURE Requester,0
|
|
|
|
; the ClipRect and BitMap and used for rendering the requester
|
|
APTR rq_OlderRequest
|
|
WORD rq_LeftEdge ; dimensions of the entire box
|
|
WORD rq_TopEdge ; dimensions of the entire box
|
|
WORD rq_Width ; dimensions of the entire box
|
|
WORD rq_Height ; dimensions of the entire box
|
|
|
|
WORD rq_RelLeft ; get POINTREL Pointer relativity offsets
|
|
WORD rq_RelTop ; get POINTREL Pointer relativity offsets
|
|
|
|
APTR rq_ReqGadget ; pointer to the first of a list of gadgets
|
|
APTR rq_ReqBorder ; the box's border
|
|
APTR rq_ReqText ; the box's text
|
|
|
|
WORD rq_Flags ; see definitions below
|
|
|
|
UBYTE rq_BackFill ; pen number for back-plane fill before draws
|
|
|
|
BYTE rq_KludgeFill00 ; This is strictly for word-alignment
|
|
|
|
APTR rq_ReqLayer ; layer in which requester rendered
|
|
STRUCT rq_ReqPad1,32 ; for backwards compatibility (reserved)
|
|
|
|
; 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
|
|
APTR rq_ImageBMap ; points to the BitMap of PREDRAWN imagery
|
|
|
|
APTR rq_RWindow ; points back to requester's window
|
|
STRUCT rq_ReqPad2,36 ; for backwards compatibility (reserved)
|
|
|
|
LABEL rq_SIZEOF
|
|
|
|
; FLAGS SET BY THE APPLIPROG
|
|
POINTREL EQU $0001 ; if POINTREL set, TopLeft is relative to pointer
|
|
PREDRAWN EQU $0002 ; if ReqBMap points to predrawn Requester imagery
|
|
NOISYREQ EQU $0004 ; if you don't want requester to filter input
|
|
|
|
; FLAGS SET BY INTUITION;
|
|
REQOFFWINDOW EQU $1000 ; part of one of the Gadgets was offwindow
|
|
REQACTIVE EQU $2000 ; this requester is active
|
|
SYSREQUEST EQU $4000 ; this requester caused by system
|
|
DEFERREFRESH EQU $8000 ; this Requester stops a Refresh broadcast
|
|
|
|
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === Gadget =============================================================
|
|
; ========================================================================
|
|
STRUCTURE Gadget,0
|
|
|
|
APTR gg_NextGadget ; next gadget in the list
|
|
|
|
WORD gg_LeftEdge ; "hit box" of gadget
|
|
WORD gg_TopEdge ; "hit box" of gadget
|
|
WORD gg_Width ; "hit box" of gadget
|
|
WORD gg_Height ; "hit box" of gadget
|
|
|
|
WORD gg_Flags ; see below for list of defines
|
|
|
|
WORD gg_Activation ; see below for list of defines
|
|
|
|
WORD gg_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 gg_GadgetRender
|
|
|
|
; appliprog can specify "highlighted" imagery rather than algorithmic
|
|
; this can point to either Border or Image data
|
|
APTR gg_SelectRender
|
|
|
|
APTR gg_GadgetText ; 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
|
|
LONG gg_MutualExclude ; set bits mean this gadget excludes that
|
|
|
|
; pointer to a structure of special data required by Proportional, String
|
|
; and Integer Gadgets
|
|
APTR gg_SpecialInfo
|
|
|
|
WORD gg_GadgetID ; user-definable ID field
|
|
APTR gg_UserData ; ptr to general purpose User data (ignored by Intuit)
|
|
|
|
LABEL gg_SIZEOF
|
|
|
|
; --- FLAGS SET BY THE APPLIPROG --------------------------------------------
|
|
; combinations in these bits describe the highlight technique to be used
|
|
GADGHIGHBITS EQU $0003
|
|
GADGHCOMP EQU $0000 ; Complement the select box
|
|
GADGHBOX EQU $0001 ; Draw a box around the image
|
|
GADGHIMAGE EQU $0002 ; Blast in this alternate image
|
|
GADGHNONE EQU $0003 ; don't highlight
|
|
|
|
; set this flag if the GadgetRender and SelectRender point to Image imagery,
|
|
; clear if it's a Border
|
|
GADGIMAGE EQU $0004
|
|
|
|
; 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)
|
|
GRELBOTTOM EQU $0008 ; set if rel to bottom, clear if rel top
|
|
GRELRIGHT EQU $0010 ; set if rel to right, clear if to left
|
|
; set the RELWIDTH bit to spec that Width is relative to width of screen
|
|
GRELWIDTH EQU $0020
|
|
; set the RELHEIGHT bit to spec that Height is rel to height of screen
|
|
GRELHEIGHT EQU $0040
|
|
|
|
; the SELECTED flag is initialized by you and set by Intuition. It
|
|
; specifies whether or not this Gadget is currently selected/highlighted
|
|
SELECTED EQU $0080
|
|
|
|
|
|
; the GADGDISABLED 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
|
|
GADGDISABLED EQU $0100
|
|
|
|
|
|
; --- These are the Activation flag bits ----------------------------------
|
|
; RELVERIFY is set if you want to verify that the pointer was still over
|
|
; the gadget when the select button was released
|
|
RELVERIFY EQU $0001
|
|
|
|
; the flag GADGIMMEDIATE, when set, informs the caller that the gadget
|
|
; was activated when it was activated. this flag works in conjunction with
|
|
; the RELVERIFY flag
|
|
GADGIMMEDIATE EQU $0002
|
|
|
|
; the flag ENDGADGET, when set, tells the system that this gadget, when
|
|
; selected, causes the Requester or AbsMessage to be ended. Requesters or
|
|
; AbsMessages that are ended are erased and unlinked from the system
|
|
ENDGADGET EQU $0004
|
|
|
|
; the FOLLOWMOUSE flag, when set, specifies that you want to receive
|
|
; reports on mouse movements (ie, you want the REPORTMOUSE function for
|
|
; your Window). When the Gadget is deselected (immediately if you have
|
|
; no RELVERIFY) the previous state of the REPORTMOUSE flag is restored
|
|
; You probably want to set the GADGIMMEDIATE flag when using 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 RELVERIFY, you'll get at least one Mouse Position event.
|
|
FOLLOWMOUSE EQU $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
|
|
RIGHTBORDER EQU $0010
|
|
LEFTBORDER EQU $0020
|
|
TOPBORDER EQU $0040
|
|
BOTTOMBORDER EQU $0080
|
|
|
|
TOGGLESELECT EQU $0100 ; this bit for toggle-select mode
|
|
|
|
STRINGCENTER EQU $0200 ; center the String
|
|
STRINGRIGHT EQU $0400 ; right-justify the String
|
|
|
|
LONGINT EQU $0800 ; This String Gadget is a Long Integer
|
|
|
|
ALTKEYMAP EQU $1000 ; This String has an alternate keymapping
|
|
|
|
BOOLEXTEND EQU $2000 ; This Boolean Gadget has a BoolInfo
|
|
|
|
; --- GADGET TYPES -----------------------------------------------------------
|
|
; These are the Gaget 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
|
|
GADGETTYPE EQU $FC00 ; all Gadget Global Type flags (padded)
|
|
SYSGADGET EQU $8000 ; 1 = SysGadget, 0 = AppliGadget
|
|
SCRGADGET EQU $4000 ; 1 = ScreenGadget, 0 = WindowGadget
|
|
GZZGADGET EQU $2000 ; 1 = Gadget for GIMMEZEROZERO borders
|
|
REQGADGET EQU $1000 ; 1 = this is a Requester Gadget
|
|
; system gadgets
|
|
SIZING EQU $0010
|
|
WDRAGGING EQU $0020
|
|
SDRAGGING EQU $0030
|
|
WUPFRONT EQU $0040
|
|
SUPFRONT EQU $0050
|
|
WDOWNBACK EQU $0060
|
|
SDOWNBACK EQU $0070
|
|
CLOSE EQU $0080
|
|
; application gadgets
|
|
BOOLGADGET EQU $0001
|
|
GADGET0002 EQU $0002
|
|
PROPGADGET EQU $0003
|
|
STRGADGET EQU $0004
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === BoolInfo============================================================
|
|
; ========================================================================
|
|
; This is the special data needed by an Extended Boolean Gadget
|
|
; Typically this structure will be pointed to by the Gadget field SpecialInfo
|
|
|
|
STRUCTURE BoolInfo,0
|
|
|
|
WORD bi_Flags ; defined below
|
|
APTR bi_Mask ; 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).
|
|
LONG bi_Reserved ; set to 0
|
|
|
|
LABEL bi_SIZEOF
|
|
|
|
; set BoolInfo.Flags to this flag bit.
|
|
; in the future, additional bits might mean more stuff hanging
|
|
; off of BoolInfo.Reserved.
|
|
|
|
BOOLMASK EQU $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
|
|
STRUCTURE PropInfo,0
|
|
|
|
WORD pi_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.
|
|
WORD pi_HorizPot ; 16-bit FixedPoint horizontal quantity percentage;
|
|
WORD pi_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().
|
|
WORD pi_HorizBody ; horizontal Body
|
|
WORD pi_VertBody ; vertical Body
|
|
|
|
; these are the variables that Intuition sets and maintains
|
|
WORD pi_CWidth ; Container width (with any relativity absoluted)
|
|
WORD pi_CHeight ; Container height (with any relativity absoluted)
|
|
WORD pi_HPotRes ; pot increments
|
|
WORD pi_VPotRes ; pot increments
|
|
WORD pi_LeftBorder ; Container borders
|
|
WORD pi_TopBorder ; Container borders
|
|
LABEL pi_SIZEOF
|
|
|
|
; --- FLAG BITS --------------------------------------------------------------
|
|
AUTOKNOB EQU $0001 ; this flag sez: gimme that old auto-knob
|
|
FREEHORIZ EQU $0002 ; if set, the knob can move horizontally
|
|
FREEVERT EQU $0004 ; if set, the knob can move vertically
|
|
PROPBORDERLESS EQU $0008 ; if set, no border will be rendered
|
|
KNOBHIT EQU $0100 ; set when this Knob is hit
|
|
|
|
|
|
KNOBHMIN EQU 6 ; minimum horizontal size of the knob
|
|
KNOBVMIN EQU 4 ; minimum vertical size of the knob
|
|
MAXBODY EQU $FFFF ; maximum body value
|
|
MAXPOT EQU $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
|
|
STRUCTURE StringInfo,0
|
|
|
|
; you initialize these variables, and then Intuition maintains them
|
|
APTR si_Buffer ; the buffer containing the start and final string
|
|
APTR si_UndoBuffer ; optional buffer for undoing current entry
|
|
WORD si_BufferPos ; character position in Buffer
|
|
WORD si_MaxChars ; max number of chars in Buffer (including NULL)
|
|
WORD si_DispPos ; Buffer position of first displayed character
|
|
|
|
; Intuition initializes and maintains these variables for you
|
|
WORD si_UndoPos ; character position in the undo buffer
|
|
WORD si_NumChars ; number of characters currently in Buffer
|
|
WORD si_DispCount ; number of whole characters visible in Container
|
|
WORD si_CLeft ; topleft offset of the container
|
|
WORD si_CTop ; topleft offset of the container
|
|
APTR si_LayerPtr ; the RastPort containing this Gadget
|
|
|
|
; 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 si_LongInt ; the LONG return value of a LONGINT String Gadget
|
|
|
|
; 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.
|
|
APTR si_AltKeyMap
|
|
|
|
LABEL si_SIZEOF
|
|
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === 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.
|
|
STRUCTURE IntuiText,0
|
|
|
|
BYTE it_FrontPen ; the pens for rendering the text
|
|
BYTE it_BackPen ; the pens for rendering the text
|
|
|
|
BYTE it_DrawMode ; the mode for rendering the text
|
|
|
|
BYTE it_KludgeFill00 ; This is strictly for word-alignment
|
|
|
|
WORD it_LeftEdge ; relative start location for the text
|
|
WORD it_TopEdge ; relative start location for the text
|
|
|
|
APTR it_ITextFont ; if NULL, you accept the defaults
|
|
|
|
APTR it_IText ; pointer to null-terminated text
|
|
|
|
APTR it_NextText ; continuation to TxWrite another text
|
|
|
|
LABEL it_SIZEOF
|
|
|
|
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === 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
|
|
STRUCTURE Border,0
|
|
|
|
WORD bd_LeftEdge ; initial offsets from the origin
|
|
WORD bd_TopEdge ; initial offsets from the origin
|
|
BYTE bd_FrontPen ; pen number for rendering
|
|
BYTE bd_BackPen ; pen number for rendering
|
|
BYTE bd_DrawMode ; mode for rendering
|
|
BYTE bd_Count ; number of XY pairs
|
|
APTR bd_XY ; vector coordinate pairs rel to LeftTop
|
|
APTR bd_NextBorder ; pointer to any other Border too
|
|
|
|
LABEL bd_SIZEOF
|
|
|
|
|
|
; ========================================================================
|
|
; === Image ==============================================================
|
|
; ========================================================================
|
|
; This is a brief image structure for very simple transfers of
|
|
; image data to a RastPort
|
|
STRUCTURE Image,0
|
|
|
|
WORD ig_LeftEdge ; starting offset relative to something
|
|
WORD ig_TopEdge ; starting offset relative to something
|
|
WORD ig_Width ; pixel size (though data is word-aligned)
|
|
WORD ig_Height ; pixel size
|
|
WORD ig_Depth ; pixel size
|
|
APTR ig_ImageData ; pointer to the actual image 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 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, 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 = 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.
|
|
BYTE ig_PlanePick
|
|
BYTE ig_PlaneOnOff
|
|
|
|
; if the NextImage variable is not NULL, Intuition presumes that
|
|
; it points to another Image structure with another Image to be
|
|
; rendered
|
|
APTR ig_NextImage
|
|
|
|
|
|
LABEL ig_SIZEOF
|
|
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === IntuiMessage =======================================================
|
|
; ========================================================================
|
|
STRUCTURE IntuiMessage,0
|
|
|
|
STRUCT im_ExecMessage,MN_SIZE
|
|
|
|
; the Class bits correspond directly with the IDCMP Flags, except for the
|
|
; special bit LONELYMESSAGE (defined below)
|
|
LONG im_Class
|
|
|
|
; the Code field is for special values like MENU number
|
|
WORD im_Code
|
|
|
|
; the Qualifier field is a copy of the current InputEvent's Qualifier
|
|
WORD im_Qualifier
|
|
|
|
; IAddress contains particular addresses for Intuition functions, like
|
|
; the pointer to the Gadget or the Screen
|
|
APTR im_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 (GIMMEZEROZERO notwithstanding)
|
|
WORD im_MouseX
|
|
WORD im_MouseY
|
|
|
|
; the time values are copies of the current system clock time. Micros
|
|
; are in units of microseconds, Seconds in seconds.
|
|
LONG im_Seconds
|
|
LONG im_Micros
|
|
|
|
; the IDCMPWindow variable will always have the address of the Window of
|
|
; this IDCMP
|
|
APTR im_IDCMPWindow
|
|
|
|
; system-use variable
|
|
APTR im_SpecialLink
|
|
|
|
LABEL im_SIZEOF
|
|
|
|
|
|
|
|
; --- IDCMP Classes ------------------------------------------------------
|
|
SIZEVERIFY EQU $00000001 ; See the Programmer's Guide
|
|
NEWSIZE EQU $00000002 ; See the Programmer's Guide
|
|
REFRESHWINDOW EQU $00000004 ; See the Programmer's Guide
|
|
MOUSEBUTTONS EQU $00000008 ; See the Programmer's Guide
|
|
MOUSEMOVE EQU $00000010 ; See the Programmer's Guide
|
|
GADGETDOWN EQU $00000020 ; See the Programmer's Guide
|
|
GADGETUP EQU $00000040 ; See the Programmer's Guide
|
|
REQSET EQU $00000080 ; See the Programmer's Guide
|
|
MENUPICK EQU $00000100 ; See the Programmer's Guide
|
|
CLOSEWINDOW EQU $00000200 ; See the Programmer's Guide
|
|
RAWKEY EQU $00000400 ; See the Programmer's Guide
|
|
REQVERIFY EQU $00000800 ; See the Programmer's Guide
|
|
REQCLEAR EQU $00001000 ; See the Programmer's Guide
|
|
MENUVERIFY EQU $00002000 ; See the Programmer's Guide
|
|
NEWPREFS EQU $00004000 ; See the Programmer's Guide
|
|
DISKINSERTED EQU $00008000 ; See the Programmer's Guide
|
|
DISKREMOVED EQU $00010000 ; See the Programmer's Guide
|
|
WBENCHMESSAGE EQU $00020000 ; See the Programmer's Guide
|
|
ACTIVEWINDOW EQU $00040000 ; See the Programmer's Guide
|
|
INACTIVEWINDOW EQU $00080000 ; See the Programmer's Guide
|
|
DELTAMOVE EQU $00100000 ; See the Programmer's Guide
|
|
VANILLAKEY EQU $00200000 ; See the Programmer's Guide
|
|
INTUITICKS EQU $00400000 ; See the Programmer's Guide
|
|
; NOTEZ-BIEN: $80000000 is reserved for internal use by IDCMP
|
|
|
|
; 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
|
|
LONELYMESSAGE EQU $80000000
|
|
|
|
|
|
|
|
; --- IDCMP Codes --------------------------------------------------------
|
|
; This group of codes is for the MENUVERIFY function
|
|
MENUHOT EQU $0001 ; IntuiWants verification or MENUCANCEL
|
|
MENUCANCEL EQU $0002 ; HOT Reply of this cancels Menu operation
|
|
MENUWAITING EQU $0003 ; Intuition simply wants a ReplyMsg() ASAP
|
|
|
|
; These are internal tokens to represent state of verification attempts
|
|
; shown here as a clue.
|
|
OKOK EQU MENUHOT ; guy didn't care
|
|
OKABORT EQU $0004 ; window rendered question moot
|
|
OKCANCEL EQU MENUCANCEL ; window sent cancel reply
|
|
|
|
; This group of codes is for the WBENCHMESSAGE messages
|
|
WBENCHOPEN EQU $0001
|
|
WBENCHCLOSE EQU $0002
|
|
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === Window =============================================================
|
|
; ========================================================================
|
|
STRUCTURE Window,0
|
|
|
|
APTR wd_NextWindow ; for the linked list of a Screen
|
|
|
|
WORD wd_LeftEdge ; screen dimensions
|
|
WORD wd_TopEdge ; screen dimensions
|
|
WORD wd_Width ; screen dimensions
|
|
WORD wd_Height ; screen dimensions
|
|
|
|
WORD wd_MouseY ; relative top top-left corner
|
|
WORD wd_MouseX ; relative top top-left corner
|
|
|
|
WORD wd_MinWidth ; minimum sizes
|
|
WORD wd_MinHeight ; minimum sizes
|
|
WORD wd_MaxWidth ; maximum sizes
|
|
WORD wd_MaxHeight ; maximum sizes
|
|
|
|
LONG wd_Flags ; see below for definitions
|
|
|
|
APTR wd_MenuStrip ; first in a list of menu headers
|
|
|
|
APTR wd_Title ; title text for the Window
|
|
|
|
APTR wd_FirstRequest ; first in linked list of active Requesters
|
|
APTR wd_DMRequest ; the double-menu Requester
|
|
WORD wd_ReqCount ; number of Requesters blocking this Window
|
|
APTR wd_WScreen ; this Window's Screen
|
|
APTR wd_RPort ; 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
|
|
BYTE wd_BorderLeft
|
|
BYTE wd_BorderTop
|
|
BYTE wd_BorderRight
|
|
BYTE wd_BorderBottom
|
|
APTR wd_BorderRPort
|
|
|
|
; You supply a linked-list of gadget that you want 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)
|
|
APTR wd_FirstGadget
|
|
|
|
; these are for opening/closing the windows
|
|
APTR wd_Parent
|
|
APTR wd_Descendant
|
|
|
|
; sprite data information for your own Pointer
|
|
; set these AFTER you Open the Window by calling SetPointer()
|
|
APTR wd_Pointer
|
|
BYTE wd_PtrHeight
|
|
BYTE wd_PtrWidth
|
|
BYTE wd_XOffset
|
|
BYTE wd_YOffset
|
|
|
|
; the IDCMP Flags and User's and Intuition's Message Ports
|
|
ULONG wd_IDCMPFlags
|
|
APTR wd_UserPort
|
|
APTR wd_WindowPort
|
|
APTR wd_MessageKey
|
|
|
|
BYTE wd_DetailPen
|
|
BYTE wd_BlockPen
|
|
|
|
; 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
|
|
APTR wd_CheckMark
|
|
|
|
; if non-null, Screen title when Window is active
|
|
APTR wd_ScreenTitle
|
|
|
|
; 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
|
|
WORD wd_GZZMouseX
|
|
WORD wd_GZZMouseY
|
|
; these variables contain the width and height of the inner-Window of
|
|
; GIMMEZEROZERO Windows
|
|
WORD wd_GZZWidth
|
|
WORD wd_GZZHeight
|
|
|
|
APTR wd_ExtData
|
|
|
|
; general-purpose pointer to User data extension
|
|
APTR wd_UserData
|
|
APTR wd_WLayer ; stash of Window.RPort->Layer
|
|
|
|
; NEW 1.2: need to keep track of the font that OpenWindow opened,
|
|
; in case user SetFont's into RastPort
|
|
APTR IFont
|
|
|
|
LABEL wd_Size
|
|
|
|
; --- FLAGS REQUESTED (NOT DIRECTLY SET THOUGH) BY THE APPLIPROG -------------
|
|
WINDOWSIZING EQU $0001 ; include sizing system-gadget?
|
|
WINDOWDRAG EQU $0002 ; include dragging system-gadget?
|
|
WINDOWDEPTH EQU $0004 ; include depth arrangement gadget?
|
|
WINDOWCLOSE EQU $0008 ; include close-box system-gadget?
|
|
|
|
SIZEBRIGHT EQU $0010 ; size gadget uses right border
|
|
SIZEBBOTTOM EQU $0020 ; size gadget uses bottom border
|
|
|
|
; --- refresh modes ----------------------------------------------------------
|
|
; combinations of the REFRESHBITS select the refresh type
|
|
REFRESHBITS EQU $00C0
|
|
SMART_REFRESH EQU $0000
|
|
SIMPLE_REFRESH EQU $0040
|
|
SUPER_BITMAP EQU $0080
|
|
OTHER_REFRESH EQU $00C0
|
|
|
|
BACKDROP EQU $0100 ; this is an ever-popular BACKDROP window
|
|
|
|
REPORTMOUSE EQU $0200 ; set this to hear about every mouse move
|
|
|
|
GIMMEZEROZERO EQU $0400 ; make extra border stuff
|
|
|
|
BORDERLESS EQU $0800 ; set this to get a Window sans border
|
|
|
|
ACTIVATE EQU $1000 ; when Window opens, it's the Active one
|
|
|
|
; FLAGS SET BY INTUITION
|
|
WINDOWACTIVE EQU $2000 ; this window is the active one
|
|
INREQUEST EQU $4000 ; this window is in request mode
|
|
MENUSTATE EQU $8000 ; this Window is active with its Menus on
|
|
|
|
; --- Other User Flags -------------------------------------------------------
|
|
RMBTRAP EQU $00010000 ; Catch RMB events for your own
|
|
NOCAREREFRESH EQU $00020000 ; not to be bothered with REFRESH
|
|
|
|
; --- Other Intuition Flags ----------------------------------------------
|
|
WINDOWREFRESH EQU $01000000 ; Window is currently refreshing
|
|
WBENCHWINDOW EQU $02000000 ; WorkBench Window
|
|
WINDOWTICKED EQU $04000000 ; only one timer tick at a time
|
|
|
|
SUPER_UNUSED EQU $FCFC0000 ;bits of Flag unused yet
|
|
|
|
|
|
; --- see struct IntuiMessage for the IDCMP Flag definitions -----------------
|
|
|
|
|
|
; ========================================================================
|
|
; === NewWindow ==========================================================
|
|
; ========================================================================
|
|
STRUCTURE NewWindow,0
|
|
|
|
WORD nw_LeftEdge ; initial Window dimensions
|
|
WORD nw_TopEdge ; initial Window dimensions
|
|
WORD nw_Width ; initial Window dimensions
|
|
WORD nw_Height ; initial Window dimensions
|
|
|
|
BYTE nw_DetailPen ; for rendering the detail bits of the Window
|
|
BYTE nw_BlockPen ; for rendering the block-fill bits
|
|
|
|
LONG nw_IDCMPFlags ; initial IDCMP state
|
|
|
|
LONG nw_Flags ; see the Flag definition under Window
|
|
|
|
; 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)
|
|
APTR nw_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
|
|
APTR nw_CheckMark
|
|
|
|
APTR nw_Title ; title text for the 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.
|
|
APTR nw_Screen
|
|
|
|
; 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
|
|
APTR nw_BitMap
|
|
|
|
; 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.
|
|
WORD nw_MinWidth
|
|
WORD nw_MinHeight
|
|
WORD nw_MaxWidth
|
|
WORD nw_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
|
|
WORD nw_Type
|
|
|
|
LABEL nw_SIZE
|
|
|
|
|
|
IFND INTUITION_SCREENS_I
|
|
INCLUDE "intuition/screens.i"
|
|
ENDC
|
|
|
|
IFND INTUITION_PREFERENCES_I
|
|
INCLUDE "intuition/preferences.i"
|
|
ENDC
|
|
|
|
; ========================================================================
|
|
; === 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
|
|
STRUCTURE Remember,0
|
|
|
|
APTR rm_NextRemember
|
|
LONG rm_RememberSize
|
|
APTR rm_Memory
|
|
|
|
LABEL rm_SIZEOF
|
|
|
|
|
|
|
|
; ========================================================================
|
|
; === 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 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 ===========================================================
|
|
NOMENU EQU $001F
|
|
NOITEM EQU $003F
|
|
NOSUB EQU $001F
|
|
MENUNULL EQU $FFFF
|
|
|
|
|
|
; = =RJ='s peculiarities =================================================
|
|
;#define FOREVER for(;;)
|
|
;#define SIGN(x) ( ((x) > 0) - ((x) < 0) )
|
|
|
|
|
|
; 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 EQU 19
|
|
COMMWIDTH EQU 27
|
|
LOWCHECKWIDTH EQU 13
|
|
LOWCOMMWIDTH EQU 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 EQU $80000000
|
|
RECOVERY_ALERT EQU $00000000 ; the system can recover from this
|
|
DEADEND_ALERT EQU $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 EQU 0
|
|
AUTOBACKPEN EQU 1
|
|
AUTODRAWMODE EQU RP_JAM2
|
|
AUTOLEFTEDGE EQU 6
|
|
AUTOTOPEDGE EQU 3
|
|
AUTOITEXTFONT EQU 0
|
|
AUTONEXTTEXT EQU 0
|
|
|
|
|
|
|
|
;* --- RAWMOUSE Codes and Qualifiers (Console OR IDCMP) -------------------
|
|
SELECTUP EQU (IECODE_LBUTTON+IECODE_UP_PREFIX)
|
|
SELECTDOWN EQU (IECODE_LBUTTON)
|
|
MENUUP EQU (IECODE_RBUTTON+IECODE_UP_PREFIX)
|
|
MENUDOWN EQU (IECODE_RBUTTON)
|
|
ALTLEFT EQU (IEQUALIFIER_LALT)
|
|
ALTRIGHT EQU (IEQUALIFIER_RALT)
|
|
AMIGALEFT EQU (IEQUALIFIER_LCOMMAND)
|
|
AMIGARIGHT EQU (IEQUALIFIER_RCOMMAND)
|
|
AMIGAKEYS EQU (AMIGALEFT+AMIGARIGHT)
|
|
|
|
CURSORUP EQU $4C
|
|
CURSORLEFT EQU $4F
|
|
CURSORRIGHT EQU $4E
|
|
CURSORDOWN EQU $4D
|
|
KEYCODE_Q EQU $10
|
|
KEYCODE_X EQU $32
|
|
KEYCODE_N EQU $36
|
|
KEYCODE_M EQU $37
|
|
KEYCODE_V EQU $34
|
|
KEYCODE_B EQU $35
|
|
|
|
IFND INTUITION_INTUITIONBASE_I
|
|
include "intuition/intuitionbase.i"
|
|
ENDC
|
|
|
|
ENDC ; INTUITION_INTUITION_I
|