mac-rom/Toolbox/MenuMgr/MenuMgrExtensions.a
Elliot Nunn 4325cdcc78 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 09:52:23 +08:00

77 lines
2.7 KiB
Plaintext

;
; File: MenuMgrExtensions.a
;
; Contains: New Menu manager routines (stolen from InvalMenuBarPatch.a)
;
; Written by: Tim Nichols
;
; Copyright: © 1990, 1992 by Apple Computer, Inc., all rights reserved.
;
; This file is used in these builds: BigBang
;
; Change History (most recent first):
;
; <1> 5/20/92 TN first checked in
;
; To Do:
;
load 'StandardEqu.d'
include 'LinkedPatchMacros.a'
include 'MenuMgrPriv.a'
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; InvalMenuBar
; Set the low memory bit
InvalMenuBar PatchProc _InvalMenuBar,(Plus,SE,II,Portable,IIci)
bset #MenuBarInvalidBit,MenuBarInvalidByte ; set the invalid bit
rts
EndProc
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; ValidateMenuBar is the routine that draws the menu bar only if necessary (local or global dirty bit set)
;
; Note that the Process Mgr will not let the _DrawMenuBar through if weÕre not the frontmost process.
;
; For the local dirty bit, we donÕt care, since weÕll get redrawn anyway when we come to the front. This
; means we can clear it here to eliminate multiple calls to _DrawMenuBar that wonÕt do anything.
;
; However, we want to only test (not clear) the global dirty bit here, which is set by DrawMBARString, since
; we want to make sure the menu bar gets redrawn eventually no matter which app is at the front.
;
; To avoid problems where apps patch any of DrawMenuBar, HiliteMenu, MenuSelect (i.e., the routines
; herein that utilize ValidateMenuBar) and recurse forever trying to validate the menu bar, we
; use a semaphore. (THINK Pascal 3.0 was our orignal culprit.) Note the InstallProc below to
; initialize the semaphore to zero (meaning we are not in ValidateMenuBar).
InitValidateMenuBarSemaphore InstallProc (Plus,SE,II,Portable,IIci) ; <7>
bclr #ValidateMenuBarSemaphoreBit,ValidateMenuBarSemaphoreByte ; clear semaphore at startup
rts
EndProc
ValidateMenuBar Proc EXPORT
bset #ValidateMenuBarSemaphoreBit,ValidateMenuBarSemaphoreByte ; Check and set semaphore <7>
bnz.s @dontRecurse ; If set, then do nothing. <7>
bclr #MenuBarInvalidBit,MenuBarInvalidByte ; clear the local invalid bit
bnz.s @dirty ; draw menu bar if set <6>
btst #MenuBarGlobalInvalidBit,MenuBarGlobalInvalidByte ; check the global invalid bit <6>
bz.s @notDirty ; exit if not set <6>
@dirty
_DrawMenuBar
@notDirty
bclr #ValidateMenuBarSemaphoreBit,ValidateMenuBarSemaphoreByte ; Clear semaphore at exit <7>
@dontRecurse
rts
EndProc
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
END