home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d7xx
/
d756
/
popupmenu.lha
/
PopUpMenu
/
Source
/
PopUp.i
< prev
next >
Wrap
Text File
|
1992-11-06
|
7KB
|
245 lines
; System constants
AbsExecBase equ 4
TRUE equ 1
FALSE equ 0
WORD_MAX equ $7fff
WORD_MIN equ $8000
NULL equ 0
; We need kickstart 2.04 (Not sure if V36 is OK)
KICK204 equ 37
; Macros to call functions
; Call a library function (Library base in A6)
libcall macro
jsr _LVO\1(A6)
endm
; Call a standard C function
call macro
bsr @\1
endm
MAXREMEMBER equ 10 ; Remember last 10 selected menus
DEFAULT_TIMEOUT equ 50 ; == 1s
INPUT_DEVICE_WAIT equ 12 ; ~0,25 s
; Don't know if this exists as a system constant
HOTKEYBUFLENGTH equ 40
; Qualifiers that may be used to cancel PopUpMenu
QUALIFIERS set IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT!IEQUALIFIER_CONTROL
QUALIFIERS set QUALIFIERS!IEQUALIFIER_LALT!IEQUALIFIER_RALT
QUALIFIERS set QUALIFIERS!IEQUALIFIER_LCOMMAND!IEQUALIFIER_RCOMMAND
; My versions of the flag bits
; Name_B* (* = no of bytes into flag field)
; ex. bset WFLG_MENUSTATE_B2,wd_Flags+2(A?)
WFLG_MENUSTATE_B2 equ 7
WFLG_RMBTRAP_B1 equ 0
IDCMP_REFRESHWINDOW_B3 equ 2
IDCMP_GADGETUP_B3 equ 6
IDCMP_CLOSEWINDOW_B2 equ 1
IDCMP_VANILLAKEY_B1 equ 5
IDCMP_MENUVERIFY_B2 equ 5
IDCMP_DELTAMOVE_B1 equ 4
MENUTOGGLED_B0 equ 6
ISDRAWN_B0 equ 4
HIGHITEM_B0 equ 5
MENUTOGGLE_B1 equ 3
MENUENABLED_B1 equ 0
MIDRAWN_B0 equ 0
ITEMENABLED_B1 equ 4
CHECKIT_B1 equ 0
CHECKED_B0 equ 0
V_HIRES_B0 equ 7
; Our options
CLICKMENUS equ %00000001
SHOWSINGLEMENU equ %00000010
ITEMSCENTERED equ %00000100
POPUPWITHQUAL equ %00001000
POPUPNOQUAL equ %00010000
OPENOPTWINDOW equ %00100000
CLICKMENUS_B0 equ 0
SHOWSINGLEMENU_B0 equ 1
ITEMSCENTERED_B0 equ 2
POPUPWITHQUAL_B0 equ 3
POPUPNOQUAL_B0 equ 4
OPENOPTWINDOW_B0 equ 5
; Handler flags
MENUS_ON_B equ 0
M_DOWN_B equ 1
S_DOWN_B equ 2
CLICKON_B equ 3
NO_POPUP_B equ 4
; Data about the "Windows" used to display menus,items & subitems.
STRUCTURE WindowData,0
BOOL wwd_BitMapOk ; TRUE => window has bitmap
BOOL wwd_ItemsEnabled ; >0 if items are enabled
WORD wwd_LeftEdge ; On screen position
WORD wwd_TopEdge
WORD wwd_RightEdge
WORD wwd_Bottom
WORD wwd_Width ; Size of window
WORD wwd_Height
WORD wwd_TopValue ; Values to add to items position
WORD wwd_LeftValue ; to create screen coordinates
WORD wwd_CommKeySize ; Largest CommKey in this window
APTR wwd_Items ; List of items
APTR wwd_Current ; Currently selected item
STRUCT wwd_Bm,bm_SIZEOF ; Offscreen bitmap
LABEL wwd_SIZEOF
; This structure is used to calculate the size of a window.
STRUCTURE WindowSize,0
WORD wws_Left
WORD wws_Top
WORD wws_Right
WORD wws_Bottom
WORD wws_CommKey
LABEL wws_SIZEOF
; Used to remember selections between menu operations.
; Notice that it is the menus (not the window) that is saved
STRUCTURE LastMenus,0
APTR llm_Menus ; the menus
WORD llm_Num ; last selected menu
LABEL llm_SIZEOF
; Used to keep data about allocated signals.
STRUCTURE Signal,0
UWORD ssi_Num
ULONG ssi_Mask
LABEL ssi_SIZEOF
; Data passed to our custom commodity handler.
STRUCTURE SignalData,0
APTR ssd_PopUpMenuTask ; Where signals will go
UBYTE ssd_Flags ; internal to the handler
UBYTE ssd_Options ; Global options
UWORD ssd_EndQualifier ; Qualifiers pressed when signal sent
LABEL ssd_FirstSignal
STRUCT ssd_MenuUpSig,ssi_SIZEOF ; Menu button released
STRUCT ssd_MenuDownSig,ssi_SIZEOF ; Menu button pressed
STRUCT ssd_SelectUpSig,ssi_SIZEOF ; Select button released
STRUCT ssd_SelectDownSig,ssi_SIZEOF ; Select button pressed
STRUCT ssd_MouseMovedSig,ssi_SIZEOF ; Input device is still running
LABEL ssd_LastSignal
STRUCT ssd_NotifySig,ssi_SIZEOF ; Not used in our handler
; but is allocated in the same time
LABEL ssd_SIZEOF
NO_OF_SIGNALS EQU (ssd_LastSignal-ssd_FirstSignal)/ssi_SIZEOF+1
; This is our expanded IntuiMessage that is sent to MENUVERIFY windows
; ---> We are not increasing the size parameter in the ExecMessage! <---
STRUCTURE MyMsg,im_SIZEOF
ULONG mmn_Session
LABEL mmn_SIZEOF
; All these global data are cleared at startup.
STRUCTURE Globals,0
; Library bases (Always open)
APTR _ExecBase ; Placed first for speed
APTR _DOSBase
APTR _IntuitionBase
APTR _GfxBase
APTR _LayersBase
APTR _CxBase
; Data used by the OptWindow routines [only valid when OptWindow open]
APTR _GadToolsBase
APTR _OptWindow
APTR _GadgetList ; all gadgets in window
APTR _VisualInfo
STRUCT _Gadgets,6*4 ; pointers to first six gadgets
; Following data is cleared before each menu popup
LABEL _ClearStart
; MenuWindows (cleared)
STRUCT _SubWindow,wwd_SIZEOF
STRUCT _ItemWindow,wwd_SIZEOF
STRUCT _MenuWindow,wwd_SIZEOF
; Selection data (cleared)
WORD _CurrentMenuNr ; Currently selected menu
WORD _FirstSelected ; First item selected MENUNUMBER
APTR _LastSelected ; Previus selection
APTR _FirstDrag ; First item to dragselect
WORD _LastSelectedNum
; Some global data for selection (cleared)
APTR _Menus ; Menus we are using
WORD _MenuTextHeight ; Size of the menu strip
WORD _CommKeyWidth ; Default with of command key
BOOL _ScreenType ; TRUE = HIRES (for Amiga symbol)
STRUCT _Rp,rp_SIZEOF ; Copy of screens rastport
UBYTE _DetailPen ; Pens to use when drawing menus
UBYTE _BlockPen ; from window
WORD _MouseX ; Mouse position
WORD _MouseY
STRUCT _MenuSorted,32*4 ; sorted menus array
STRUCT _Size,wws_SIZEOF ; Used to determine size of windows
LABEL _ClearEnd
; not cleared
APTR _ActiveWindow ; Window and screen to use
APTR _Screen
; startup data
APTR _WBenchMsg ; Startup message from WorkBench
; timer device stuff
APTR _TimerReqBlock
APTR _TimerPort
ULONG _TimerSigMask
APTR _ReplyPort
; broker data
APTR _PopUpBroker ; Our broker
APTR _HotKeyFilterCxObj ; translator object (needed to change hotkey)
STRUCT _HotKeyString,HOTKEYBUFLENGTH+1
ALIGNWORD
* ------------ Previus menus (array)
STRUCT _LastMenus,(llm_SIZEOF*MAXREMEMBER)
* ------------ Data for the input handler
STRUCT _CxHandlerData,ssd_SIZEOF
* ------------ that's all folks
LABEL Globals_SIZEOF
; For some reason are all prefs includes missing in version 2.04.
IFND IControlPrefs
STRUCTURE IControlPrefs,0
STRUCT ic_Reserved,4*4
UWORD ic_TimeOut
WORD ic_MetaDrag
ULONG ic_Flags
UBYTE ic_WBtoFront
UBYTE ic_FrontToBack
UBYTE ic_ReqTrue
UBYTE ic_ReqFalse
LABEL ic_SIZEOF
ENDC