amos-professional/includes/intuition/intuition.i
2020-04-26 02:58:13 +02:00

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