IFND INTUITION_INTUITION_I INTUITION_INTUITION_I SET 1 ** ** $Filename: intuition/intuition.i $ ** $Release: 2.04 Includes, V37.4 $ ** $Revision: 36.30 $ ** $Date: 91/03/28 $ ** ** Interface definitions for Intuition applications ** ** (C) Copyright 1985-1999 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 IFND UTILITY_TAGITEM_I INCLUDE "utility/tagitem.i" ENDC * * NOTE: intuition/iobsolete.i is included at the END of this file! * ; ========================================================================; ; === 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, points to MenuItem for submenu ; 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 ; set to indicate checkmarkable item ITEMTEXT EQU $0002 ; set if textual, clear if graphical item COMMSEQ EQU $0004 ; set if there's an command sequence MENUTOGGLE EQU $0008 ; set for toggling checks (else mut. exclude) 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 ; state of the checkmark ; --- 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 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 ; 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 APTR rq_ImageBMap ; points to the BitMap of PREDRAWN imagery APTR rq_RWindow ; points back to requester's window APTR rq_ReqImage ; new for V36: drawn if USEREQIMAGE set STRUCT rq_ReqPad2,32 ; for backwards compatibility (reserved) LABEL rq_SIZEOF ; FLAGS SET BY THE APPLIPROG POINTREL EQU $0001 ; if POINTREL set, TopLeft is relative to pointer ; for DMRequester, relative to window center ; for Request(). PREDRAWN EQU $0002 ; if ReqBMap points to predrawn Requester imagery NOISYREQ EQU $0004 ; if you don't want requester to filter input ; New for V36 SIMPLEREQ EQU $0010 ; to use SIMPLEREFRESH layer (recommended) USEREQIMAGE EQU $0020 ; render linked list ReqImage after BackFill ; but before gadgets and text NOREQBACKFILL EQU $0040 ; don't bother filling with Requester.BackFill ; 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 ; (unused) 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; ; MutualExclude, never implemented, is now declared obsolete. ; There are published examples of implementing a more general ; and practical exclusion in your applications. ; ; Starting 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 gg_MutualExclude ; obsolete ; 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 ; --- Gadget.Flags values --- ; combinations in these bits describe the highlight technique to be used GFLG_GADGHIGHBITS EQU $0003 GFLG_GADGHCOMP EQU $0000 ; Complement the select box GFLG_GADGHBOX EQU $0001 ; Draw a box around the image GFLG_GADGHIMAGE EQU $0002 ; Blast in this alternate image GFLG_GADGHNONE EQU $0003 ; don't highlight ; set this flag if the GadgetRender and SelectRender point to Image imagery, ; clear if it's a Border GFLG_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) GFLG_RELBOTTOM EQU $0008 ; set if rel to bottom, clear if to top GFLG_RELRIGHT EQU $0010 ; set if rel to right, clear if to left ; set the GFLG_RELWIDTH bit to spec that Width is relative to width of screen GFLG_RELWIDTH EQU $0020 ; set the GFLG_RELHEIGHT bit to spec that Height is rel to height of screen GFLG_RELHEIGHT EQU $0040 ; the GFLG_SELECTED flag is initialized by you and set by Intuition. It ; specifies whether or not this Gadget is currently selected/highlighted GFLG_SELECTED EQU $0080 ; the GFLG_DISABLED flag is initialized by you and later set by Intuition ; according to your calls to On/OffGadget(). It specifies whether or not ; this Gadget is currently disabled from being selected GFLG_DISABLED EQU $0100 * These flags specify the type of text field that Gadget.GadgetText * points to. In all normal (pre-V36) gadgets which you initialize * this field should always be zero. Some types of gadget objects * created from classes will use these fields to keep track of * types of labels/contents that different from IntuiText, but are * stashed in GadgetText. GFLG_LABELMASK EQU $3000 GFLG_LABELITEXT EQU $0000 ; GadgetText points to IntuiText GFLG_LABELSTRING EQU $1000 ; GadgetText points to (UBYTE *) GFLG_LABELIMAGE EQU $2000 ; GadgetText points to Image (object) ; New for V37: GFLG_TABCYCLE GFLG_TABCYCLE EQU $0200 ; (string or custom) gadget ; participates in cycling activation with ; Tab or Shift-Tab ; New for V37: GFLG_STRINGEXTEND. We discovered that V34 doesn't properly ; ignore the value we had chosen for the Gadget->Activation flag ; GACT_STRINGEXTEND. NEVER SET THAT FLAG WHEN RUNNING UNDER V34. ; The Gadget->Flags bit GFLG_STRINGEXTEND is provided as a synonym which is ; safe under V34, and equivalent to GACT_STRINGEXTEND under V37. ; (Note that the two flags are not numerically equal) GFLG_STRINGEXTEND EQU $0400 ; this String Gadget has StringExtend ; --- These are the Activation flag bits ---------------------------------- ; GACT_RELVERIFY is set if you want to verify that the pointer was still over ; the gadget when the select button was released. Will cause ; an IDCMP_GADGETUP message to be sent if so. GACT_RELVERIFY EQU $0001 ; the flag GACT_IMMEDIATE, when set, informs the caller that the gadget ; was activated when it was activated. this flag works in conjunction with ; the GACT_RELVERIFY flag GACT_IMMEDIATE EQU $0002 ; the flag GACT_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 GACT_ENDGADGET EQU $0004 ; the GACT_FOLLOWMOUSE flag, when set, specifies that you want to receive ; reports on mouse movements while this gadget is active. ; You probably want to set the GACT_IMMEDIATE flag when using ; GACT_FOLLOWMOUSE, since that's the only reasonable way you have of learning ; why Intuition is suddenly sending you a stream of mouse movement events. ; If you don't set GACT_RELVERIFY, you'll get at least one Mouse Position ; event. ; 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). GACT_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 GACT_RIGHTBORDER EQU $0010 GACT_LEFTBORDER EQU $0020 GACT_TOPBORDER EQU $0040 GACT_BOTTOMBORDER EQU $0080 GACT_BORDERSNIFF EQU $8000 ; neither set nor rely on this bit GACT_TOGGLESELECT EQU $0100 ; this bit for toggle-select mode GACT_BOOLEXTEND EQU $2000 ; This Boolean Gadget has a BoolInfo ; should properly be in StringInfo, but aren't GACT_STRINGLEFT EQU $0000 ; NOTE WELL: that this has value zero GACT_STRINGCENTER EQU $0200 ; center the String GACT_STRINGRIGHT EQU $0400 ; right-justify the String GACT_LONGINT EQU $0800 ; This String Gadget is a Long Integer GACT_ALTKEYMAP EQU $1000 ; has an alternate keymapping GACT_STRINGEXTEND EQU $2000 ; this String Gadget has an extension ; NOTE: NEVER SET GACT_STRINGEXTEND ; IF YOU ARE RUNNING ON LESS THAN V36! ; SEE GFLG_STRINGEXTEND (ABOVE) INSTEAD GACT_ACTIVEGADGET EQU $4000 ; this gadget is "active". This flag ; is maintained by Intuition, and you ; cannot count on its value persisting ; while you do something on your program's ; task. It can only be trusted by ; people implementing custom gadgets * note $8000 is used above (GACT_BORDERSNIFF); all Activation flags defined ; --- GADGET TYPES ----------------------------------------------------------- ; These are the 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 GTYP_GADGETTYPE EQU $FC00 ; all Gadget Global Type flags ; (padded) GTYP_SYSGADGET EQU $8000 ; 1 = Allocated by the system, 0 = by app. GTYP_SCRGADGET EQU $4000 ; 1 = ScreenGadget, 0 = WindowGadget GTYP_GZZGADGET EQU $2000 ; 1 = Gadget for WFLG_GIMMEZEROZERO ; borders GTYP_REQGADGET EQU $1000 ; 1 = this is a Requester Gadget ; system gadgets GTYP_SIZING EQU $0010 GTYP_WDRAGGING EQU $0020 GTYP_SDRAGGING EQU $0030 GTYP_WUPFRONT EQU $0040 GTYP_SUPFRONT EQU $0050 GTYP_WDOWNBACK EQU $0060 GTYP_SDOWNBACK EQU $0070 GTYP_CLOSE EQU $0080 ; application gadgets GTYP_BOOLGADGET EQU $0001 GTYP_GADGET0002 EQU $0002 GTYP_PROPGADGET EQU $0003 GTYP_STRGADGET EQU $0004 GTYP_CUSTOMGADGET EQU $0005 GTYP_GTYPEMASK EQU $0004 ; masks out to gadget class ; ======================================================================== ; === 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. Its 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 PROPNEWLOOK EQU $0010 ; set this if you want to get the new ; V36 look 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 ; 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) ;APTR si_LayerPtr ; --- obsolete --- APTR si_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 si_LongInt ; the LONG return value of a GACT_LONGINT String Gad. ; 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. APTR si_AltKeyMap LABEL si_SIZEOF ; ======================================================================== ; === 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. 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 ; pointer to another IntuiText to render 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 ; on NextBorder 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. ; ; 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. 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 IDCMP_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 (WFLG_GIMMEZEROZERO ; notwithstanding) ; If the DELTAMOVE IDCMP flag is set, these values will be deltas from ; the last reported position. 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 ------------------------------------------------------ ; Please refer to the Autodoc for OpenWindow() and to the Rom Kernel ; Manual for full details on the IDCMP classes. IDCMP_SIZEVERIFY EQU $00000001 IDCMP_NEWSIZE EQU $00000002 IDCMP_REFRESHWINDOW EQU $00000004 IDCMP_MOUSEBUTTONS EQU $00000008 IDCMP_MOUSEMOVE EQU $00000010 IDCMP_GADGETDOWN EQU $00000020 IDCMP_GADGETUP EQU $00000040 IDCMP_REQSET EQU $00000080 IDCMP_MENUPICK EQU $00000100 IDCMP_CLOSEWINDOW EQU $00000200 IDCMP_RAWKEY EQU $00000400 IDCMP_REQVERIFY EQU $00000800 IDCMP_REQCLEAR EQU $00001000 IDCMP_MENUVERIFY EQU $00002000 IDCMP_NEWPREFS EQU $00004000 IDCMP_DISKINSERTED EQU $00008000 IDCMP_DISKREMOVED EQU $00010000 IDCMP_WBENCHMESSAGE EQU $00020000 ; System use only IDCMP_ACTIVEWINDOW EQU $00040000 IDCMP_INACTIVEWINDOW EQU $00080000 IDCMP_DELTAMOVE EQU $00100000 IDCMP_VANILLAKEY EQU $00200000 IDCMP_INTUITICKS EQU $00400000 ; for notifications from "boopsi" gadgets: IDCMP_IDCMPUPDATE EQU $00800000 ; new for V36 ; for getting help key report during menu session: IDCMP_MENUHELP EQU $01000000 ; new for V36 ; for notification of any move/size/zoom/change window: IDCMP_CHANGEWINDOW EQU $02000000 ; new for V36 ; 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 IDCMP_LONELYMESSAGE EQU $80000000 ; --- IDCMP Codes -------------------------------------------------------- ; This group of codes is for the IDCMP_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 IDCMP_WBENCHMESSAGE messages WBENCHOPEN EQU $0001 WBENCHCLOSE EQU $0002 ; A data structure common in V36 Intuition processing STRUCTURE IBox,0 WORD ibox_Left WORD ibox_Top WORD ibox_Width WORD ibox_Height LABEL ibox_SIZEOF ; ======================================================================== ; === 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 ; 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 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 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 wd_GZZMouseX WORD wd_GZZMouseY ; these variables contain the width and height of the inner-Window of ; WFLG_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 wd_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 wd_MoreFlags ; ----- subsequent fields are INTUITION PRIVATE --- LABEL wd_Size LABEL wd_SIZEOF ; you should never use this: only Intuition allocates ; --- Flags requested at OpenWindow() time by the application ------------- WFLG_SIZEGADGET EQU $0001 ; include sizing system-gadget? WFLG_DRAGBAR EQU $0002 ; include dragging system-gadget? WFLG_DEPTHGADGET EQU $0004 ; include depth arrangement gadget? WFLG_CLOSEGADGET EQU $0008 ; include close-box system-gadget? WFLG_SIZEBRIGHT EQU $0010 ; size gadget uses right border WFLG_SIZEBBOTTOM EQU $0020 ; size gadget uses bottom border ; --- refresh modes ---------------------------------------------------------- ; combinations of the WFLG_REFRESHBITS select the refresh type WFLG_REFRESHBITS EQU $00C0 WFLG_SMART_REFRESH EQU $0000 WFLG_SIMPLE_REFRESH EQU $0040 WFLG_SUPER_BITMAP EQU $0080 WFLG_OTHER_REFRESH EQU $00C0 WFLG_BACKDROP EQU $0100 ; this is a backdrop window WFLG_REPORTMOUSE EQU $0200 ; set this to hear every mouse move WFLG_GIMMEZEROZERO EQU $0400 ; make extra border stuff WFLG_BORDERLESS EQU $0800 ; set this to get a Window sans border WFLG_ACTIVATE EQU $1000 ; when Window opens, it's the Active ; one ; FLAGS SET BY INTUITION WFLG_WINDOWACTIVE EQU $2000 ; this window is the active one WFLG_INREQUEST EQU $4000 ; this window is in request mode WFLG_MENUSTATE EQU $8000 ; this Window is active with its ; Menus on ; --- Other User Flags ------------------------------------------------------- WFLG_RMBTRAP EQU $00010000 ; Catch RMB events for your own WFLG_NOCAREREFRESH EQU $00020000 ; not to be bothered with REFRESH ; --- Other Intuition Flags ---------------------------------------------- WFLG_WINDOWREFRESH EQU $01000000 ; Window is currently refreshing WFLG_WBENCHWINDOW EQU $02000000 ; WorkBench Window WFLG_WINDOWTICKED EQU $04000000 ; only one timer tick at a time SUPER_UNUSED EQU $FCFC0000 ;bits of Flag unused yet ; - V36 new Flags which the programmer may specify in NewScreen.Flags WFLG_NW_EXTENDED EQU $00040000 ; extension data provided ; see ExtNewWindow structure ; --- V36 Flags to be set only by Intuition ------------------------- WFLG_VISITOR EQU $08000000 ; visitor window (see autodoc for OpenWindow) WFLG_ZOOMED EQU $10000000 ; identifies "zoom state" WFLG_HASZOOM EQU $20000000 ; window has a zoom gadget ; --- Other Window Values ---------------------------------------------- DEFAULTMOUSEQUEUE EQU 5 ; no more mouse messages ; --- see struct IntuiMessage for the IDCMP Flag definitions ----------------- ; ======================================================================== ; === NewWindow ========================================================== ; ======================================================================== ; NOTE: to use the new features of V36, you may need to use the ; ExtNewWindow structure, below. 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 ; 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 APTR nw_BitMap ; the values describe the minimum and maximum sizes of your Windows. ; these matter only if you've chosen the WFLG_SIZEGADGET 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 GTYP_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 ; A new possible value for this field is PUBLICSCREEN, which ; defines the window as a 'visitor' window. See below for ; additional information provided. WORD nw_Type LABEL nw_SIZE LABEL nw_SIZEOF ; ExtNewWindow -- NewWindow plus extension fields. ; This structure may be extended again, so programs depending on its ; size are incorrect. STRUCTURE ExtNewWindow,nw_SIZE ; extensions for V36 ; if the NewWindow Flag 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 APTR enw_Extension ; pointer to TagItem array LABEL enw_SIZEOF * 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. ENUM TAG_USER+100 ; these tags simply override NewWindow parameters EITEM WA_Left EITEM WA_Top EITEM WA_Width EITEM WA_Height EITEM WA_DetailPen EITEM WA_BlockPen EITEM WA_IDCMP EITEM WA_Flags ; not implemented at present EITEM WA_Gadgets EITEM WA_Checkmark EITEM WA_Title EITEM WA_ScreenTitle ; means you don't have to call SetWindowTitles ; after you open your window EITEM WA_CustomScreen EITEM WA_SuperBitMap ; also implies WFLG_SUPER_BITMAP property EITEM WA_MinWidth EITEM WA_MinHeight EITEM WA_MaxWidth EITEM WA_MaxHeight ; The following are specifications for new features EITEM WA_InnerWidth EITEM WA_InnerHeight ; 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. EITEM WA_PubScreenName ; declares that you want the window to open as ; a visitor on the public screen whose name is ; pointed to by (UBYTE *) ti_Data EITEM WA_PubScreen ; 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(). EITEM WA_PubScreenFallBack ; 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 EITEM WA_WindowName ; not implemented EITEM WA_Colors ; 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. EITEM WA_Zoom ; 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. EITEM WA_MouseQueue ; ti_Data contains initial value for the mouse ; message backlog limit for this window. EITEM WA_BackFill ; unimplemented at present: provides a "backfill ; hook" for your window's layer. EITEM WA_RptQueue ; initial value of repeat key backlog limit ; These Boolean tag items are alternatives to the NewWindow.Flags ; boolean flags with similar names. EITEM WA_SizeGadget EITEM WA_DragBar EITEM WA_DepthGadget EITEM WA_CloseGadget EITEM WA_Backdrop EITEM WA_ReportMouse EITEM WA_NoCareRefresh EITEM WA_Borderless EITEM WA_Activate EITEM WA_RMBTrap EITEM WA_WBenchWindow ; PRIVATE!! EITEM WA_SimpleRefresh ; only specify if TRUE EITEM WA_SmartRefresh ; only specify if TRUE EITEM WA_SizeBRight EITEM WA_SizeBBottom ; New Boolean properties EITEM WA_AutoAdjust ; shift or squeeze the window's position and ; dimensions to fit it on screen. EITEM WA_GimmeZeroZero ; equiv. to NewWindow.Flags WFLG_GIMMEZEROZERO ; New for V37: WA_MenuHelp (ignored by V36) EITEM WA_MenuHelp ; Enables IDCMP_MENUHELP: Pressing HELP during menus ; will return IDCMP_MENUHELP IDCMP message. *** End of Window attribute enumeration *** 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 STRUCTURE ColorSpec,0 WORD cs_ColorIndex ; -1 terminates an array of ColorSpec UWORD cs_Red ; only six bits recognized in V36 UWORD cs_Green ; only six bits recognized in V36 UWORD cs_Blue ; only six bits recognized in V36 LABEL cs_SIZEOF * === Easy Requester Specification ======================================= * * see also autodocs for EasyRequest and BuildEasyRequest * NOTE: This structure may grow in size in the future STRUCTURE EasyStruct,0 ULONG es_StructSize ; should be es_SIZEOF ULONG es_Flags ; should be 0 for now APTR es_Title ; title of requester window APTR es_TextFormat ; 'printf' style formatting string APTR es_GadgetFormat ; 'printf' style formatting string LABEL es_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 KEYCODE_LESS EQU $38 KEYCODE_GREATER EQU $39 IFND INTUITION_INTUITIONBASE_I INCLUDE "intuition/intuitionbase.i" ENDC * Include obsolete identifiers: IFND INTUITION_IOBSOLETE_I INCLUDE "intuition/iobsolete.i" ENDC ENDC