mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-02-05 23:30:14 +00:00
288 lines
9.6 KiB
Plaintext
288 lines
9.6 KiB
Plaintext
|
;
|
|||
|
; File: MenuDispatch.a
|
|||
|
;
|
|||
|
; Contains: Dispatcher to new MenuManager calls.
|
|||
|
;
|
|||
|
; Written by: Kevin S. MacDonell
|
|||
|
;
|
|||
|
; Copyright: <09> 1989-1990, 1992 by Apple Computer, Inc., all rights reserved.
|
|||
|
;
|
|||
|
; This file is used in these builds: System
|
|||
|
;
|
|||
|
; Change History (most recent first):
|
|||
|
;
|
|||
|
; <14> 5/10/92 KSM Patches don<6F>t belong in this file.
|
|||
|
; <13> 3/27/92 DC KSM - added InsertIntlResMenu
|
|||
|
; <12> 1/20/92 PN Adding condition for ROM build
|
|||
|
; <11> 8/22/91 KSM DCC,#Bruges: Added utility routine InsertFontResMenu for Finder.
|
|||
|
; <10> 3/29/91 JSM dba, #85831: Set MenuBarGlobalInvalidBit in DrawMBARString.
|
|||
|
; <9> 3/26/91 dba gbm: handle system menus correctly
|
|||
|
; <8> 3/4/91 dba dty: get rid of SysVers conditionals
|
|||
|
; <7> 12/3/90 RLC <ksm> Fix GetMenuTitleRect to return noErr.
|
|||
|
; <6> 7/23/90 dba get rid of CallMBarProc, since this is now linked with
|
|||
|
; MenuMgr.a, which has CallMBarProc in it
|
|||
|
; <5> 6/8/90 KSM Add new IsSystemMenu(menuID) call.
|
|||
|
; <4> 6/5/90 KSM Return a reasonable OSErr result on success!
|
|||
|
; <3> 5/14/90 KSM Factor out common sections of rect calls.
|
|||
|
; <2> 5/14/90 KSM Rewrite it to: a) Be enabled (again) under System 7.0 b) Be a
|
|||
|
; linked patch and use the new dispatcher macros c) Add new calls
|
|||
|
; to the MBDF.
|
|||
|
; <1.0> 6/1/89 KSM Menu manager trap dispatcher for all new calls.
|
|||
|
;
|
|||
|
; To Do:
|
|||
|
; *** Make a common file for the utility routines used here to share with menu manager
|
|||
|
; *** Is it OK that D2 gets trashed calling GetMenuTitleRect from "C" (Pascal is OK)?
|
|||
|
;
|
|||
|
|
|||
|
|
|||
|
load 'StandardEqu.d'
|
|||
|
include 'InternalMacros.a'
|
|||
|
include 'LinkedPatchMacros.a'
|
|||
|
include 'Menus.a'
|
|||
|
include 'MenuMgrPriv.a'
|
|||
|
|
|||
|
DEBUG default false
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; MenuMgrDispatch
|
|||
|
|
|||
|
; The dispatcher to the new menu manager routines
|
|||
|
|
|||
|
MenuMgrDispatch BeginDispatcher _MenuDispatch,(Plus,SE,II,Portable,IIci)
|
|||
|
|
|||
|
; public routines
|
|||
|
|
|||
|
DispatchSelectors __InsertIntlResMenu=selectInsertIntlResMenu
|
|||
|
DispatchSelectors __InsrtFontResMenu=selectInsertFontResMenu
|
|||
|
|
|||
|
; private routines
|
|||
|
|
|||
|
DispatchSelectors GetMenuTitleRect=selectGetMenuTitleRect
|
|||
|
DispatchSelectors GetMBARRect=selectGetMBARRect
|
|||
|
DispatchSelectors GetAppMenusRect=selectGetAppMenusRect
|
|||
|
DispatchSelectors GetSysMenusRect=selectGetSysMenusRect
|
|||
|
DispatchSelectors DrawMBARString=selectDrawMBARString
|
|||
|
DispatchSelectors IsSystemMenu=selectIsSystemMenu
|
|||
|
|
|||
|
EndDispatcher
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
MACRO
|
|||
|
CallMBDFWithRectMsgSwappingD0First
|
|||
|
; It was more expensive to:
|
|||
|
; 1) fix up the stack on the GetMenuTitleRect call to look like the other rect calls
|
|||
|
; 2) then call the common rect code
|
|||
|
; than it was to have 2 copies of the code contained in this macro,
|
|||
|
; so it is here in this macro and referenced (expanded) ONLY twice.
|
|||
|
SWAP D0 ; Move param1 (6 B.O.) to high word
|
|||
|
MOVE.W #MBDFRectCall, D0 ; set up for rect info message
|
|||
|
MOVE.L 4(SP), D1 ; put rect ptr in D1 for CallMBarProc
|
|||
|
IMPORT CallMBarProc
|
|||
|
JSR CallMBarProc ; Go do it.
|
|||
|
ENDM
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; MBDFRectCommon
|
|||
|
|
|||
|
; Common routine for getting rect info from MBDF (msg #14)
|
|||
|
; On entry: D0: Rect selector in low word
|
|||
|
; 8(A6): Rect ptr param
|
|||
|
|
|||
|
MBDFRectCommon PROC ENTRY
|
|||
|
CallMBDFWithRectMsgSwappingD0First
|
|||
|
MOVE.L (SP)+, (SP) ; Pull off the rect param
|
|||
|
MOVE.W #noErr, 4(SP) ; Return success <4>
|
|||
|
RTS ; Back to where we came
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; GetMenuTitleRect (MBDF msg #14/param1=6 B.O.)
|
|||
|
|
|||
|
; FUNCTION GetMenuTitleRect(menuID: INTEGER; VAR theRect: Rect): OSErr;
|
|||
|
|
|||
|
|
|||
|
GetMenuTitleRect PROC EXPORT
|
|||
|
MOVE.W 8(SP), D1 ; Get the menu ID
|
|||
|
IMPORT GetIndex
|
|||
|
JSR GetIndex ; Convert menuID in D1 -> 6 B.O. in D0
|
|||
|
BNE.S @GoCallMBDF ; Not found
|
|||
|
MOVEQ #paramErr,D0
|
|||
|
BRA.S @Done
|
|||
|
|
|||
|
@GoCallMBDF
|
|||
|
CallMBDFWithRectMsgSwappingD0First
|
|||
|
MOVEQ #noErr,D0
|
|||
|
@Done
|
|||
|
MOVE.L (SP)+, A0 ; Get our return address
|
|||
|
ADDQ #6, SP ; Cut back the params
|
|||
|
MOVE.W D0, (SP) ; Return any error <7>
|
|||
|
JMP (A0) ; Return
|
|||
|
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; GetMBARRect (MBDF msg #14/param1=0)
|
|||
|
|
|||
|
; FUNCTION GetMBARRect(VAR theRect: Rect): OSErr;
|
|||
|
|
|||
|
GetMBARRect PROC EXPORT
|
|||
|
|
|||
|
MOVEQ #MBDFRectBar, D0 ; Param1 = MBDFRectBar
|
|||
|
IMPORT MBDFRectCommon
|
|||
|
JMP MBDFRectCommon ; Call the MBDF
|
|||
|
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; GetAppMenusRect (MBDF msg #14/param1=-1)
|
|||
|
|
|||
|
; FUNCTION GetAppMenusRect(VAR theRect: Rect): OSErr;
|
|||
|
|
|||
|
GetAppMenusRect PROC EXPORT
|
|||
|
|
|||
|
MOVEQ #MBDFRectApps, D0 ; Param1 = MBDFRectApps
|
|||
|
IMPORT MBDFRectCommon
|
|||
|
JMP MBDFRectCommon ; Call the MBDF
|
|||
|
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; GetSysMenusRect (MBDF msg #14/param1=-2)
|
|||
|
|
|||
|
; FUNCTION GetSysMenusRect(VAR theRect: Rect): OSErr;
|
|||
|
|
|||
|
GetSysMenusRect PROC EXPORT
|
|||
|
MOVEQ #MBDFRectSys, D0 ; Param1 = MBDFRectSys
|
|||
|
IMPORT MBDFRectCommon
|
|||
|
JMP MBDFRectCommon ; Call the MBDF
|
|||
|
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; DrawMBARString (MBDF msg #15)
|
|||
|
|
|||
|
; FUNCTION DrawMBARString(bannerMsg: StringPtr; scriptID: INTEGER; teJust: INTEGER): OSErr;
|
|||
|
|
|||
|
DrawMBARString PROC EXPORT
|
|||
|
|
|||
|
resultsStackFrame
|
|||
|
result ds.w 1 ; The result <4>
|
|||
|
parametersStackFrame
|
|||
|
bannerMsg ds.l 1 ; the string pointer
|
|||
|
scriptID ds.w 1 ; the script to use (0=use default)
|
|||
|
teJust ds.w 1 ; the justification in the menu bar
|
|||
|
endStackFrame
|
|||
|
|
|||
|
linkSave
|
|||
|
|
|||
|
; Just call the MBDF to get the rect
|
|||
|
; Param1:
|
|||
|
; lo byte=scriptID
|
|||
|
; hi byte=teJust for textbox
|
|||
|
|
|||
|
MOVE.W teJust(A6), D0 ; Param1 = teJust/Script
|
|||
|
ASL.W #8, D0 ; Move teJust to high byte of low word
|
|||
|
MOVE.W scriptID(A6), D1 ; Get the script ID
|
|||
|
MOVE.B D1, D0 ; Put the script ID into the low byte of D0
|
|||
|
SWAP D0 ; Move param1 to high word
|
|||
|
MOVE.W #MBDFDrawMBARString, D0 ; set up for draw MBAR string call
|
|||
|
MOVE.L bannerMsg(A6), D1 ; put msg in D1 for CallMBarProc
|
|||
|
IMPORT CallMBarProc
|
|||
|
JSR CallMBarProc ; Go do it.
|
|||
|
bset #MenuBarGlobalInvalidBit,MenuBarGlobalInvalidByte ; set the global invalid bit <10>
|
|||
|
MOVE.W #noErr, result(A6) ; Return success! <4>
|
|||
|
restoreUnlinkReturn
|
|||
|
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; IsSystemMenu
|
|||
|
|
|||
|
; FUNCTION IsSystemMenu(menuID: INTEGER; VAR isSys: BOOLEAN): OSErr;
|
|||
|
|
|||
|
IsSystemMenu PROC EXPORT
|
|||
|
|
|||
|
move.l (sp)+,a0 ; Get the return address
|
|||
|
move.l (sp)+,a1 ; Get the boolean address
|
|||
|
move.w (sp)+,d0 ; Get the menuID
|
|||
|
moveq #0,d1 ; Assume this is not a system menu
|
|||
|
cmp.w #kLoSystemMenuRange,d0 ; Is it below the lowest value?
|
|||
|
blt.s @done
|
|||
|
cmp.w #kHiSystemMenuRange,d0 ; Is it greater than the highest value?
|
|||
|
bgt.s @done
|
|||
|
moveq #1,d1 ; Return TRUE
|
|||
|
@done
|
|||
|
move.b d1,(a1) ; Set the boolean
|
|||
|
move.w #noErr,(sp) ; Return noErr
|
|||
|
jmp (a0)
|
|||
|
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; *********************************************************************************************
|
|||
|
; * UTILITY ROUTINES *
|
|||
|
; *********************************************************************************************
|
|||
|
; Stolen from the Menu Manager
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
IF NOT forRom THEN
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; GetIndex
|
|||
|
|
|||
|
; GetIndex is a utility routine that returns an index into the menuList given a
|
|||
|
; menuId. The menuId is passed in D1 while the index is returned in D0. If the
|
|||
|
; menuId can't be found, D0 will return a zero. A0, A1 and D2 are trashed.
|
|||
|
; The Z-flag can be used to determine if one was found. As a special bonus, on
|
|||
|
; exit A0 points to the menu, if a menu was found.
|
|||
|
|
|||
|
GETINDEX PROC ENTRY
|
|||
|
|
|||
|
TST D1 ; is index 0?
|
|||
|
BEQ.S NOINDEX ; if so, return 0
|
|||
|
IMPORT GetA1List
|
|||
|
JSR GetA1List ; get menuList into A1
|
|||
|
MOVE LASTMENU(A1),D2 ; get # of menus
|
|||
|
BEQ.S NOINDEX ; if none, say we can't find it
|
|||
|
|
|||
|
; here is the search loop. Get the next handle, and check the menuID
|
|||
|
|
|||
|
GILOOP MOVE.L MENUOH(A1,D2),D0 ; get the handle
|
|||
|
MOVE.L D0,A0 ; get handle in A-reg
|
|||
|
MOVE.L (A0),A0 ; handle -> pointer
|
|||
|
CMP MENUID(A0),D1 ; is this the one?
|
|||
|
BEQ.S GOTINDEX ; if they match, we're done
|
|||
|
;
|
|||
|
NEXTINDEX SUBQ #6,D2 ; bump to next entry
|
|||
|
BNE.S GILOOP ; loop if there's more to do
|
|||
|
|
|||
|
; we couldn't find it so return zero in D0
|
|||
|
|
|||
|
NOINDEX MOVEQ #0,D2 ; return 0
|
|||
|
|
|||
|
; we found it so return index in D0
|
|||
|
|
|||
|
GOTINDEX MOVE D2,D0 ; get index in D0
|
|||
|
RTS
|
|||
|
ENDPROC
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; GetA1List
|
|||
|
|
|||
|
GetA1List PROC ENTRY
|
|||
|
MOVE.L MenuList,A1 ; get the menuList handle
|
|||
|
TST.L (A1) ; has it been purged?
|
|||
|
BEQ.S @NoList ; Branch if it has
|
|||
|
MOVE.L (A1),A1 ; else get the pointer
|
|||
|
RTS ; and go to heaven
|
|||
|
@NoList
|
|||
|
MOVEQ #MenuPrgErr,D0 ; get our error code
|
|||
|
_SysError ; and roast in eternal damnation
|
|||
|
ENDPROC
|
|||
|
ENDIF
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
|
|||
|
END
|