mac-rom/Toolbox/DeskMgr/DeskMgrPatches.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

142 lines
5.5 KiB
Plaintext

;
; File: DeskMgrPatches.a
;
; Contains: Fixes to the Desk Manager
;
; Copyright: © 1990, 1992 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <5> 7/8/92 JSM Add comments about patches that have been rolled in.
; <4> 2/10/92 JSM Moved this file to DeskMgr folder, keeping all the old
; revisions.
; <3> 8/30/90 dba add code for SystemClick heap scramble bug fixes
; <2> 8/2/90 csd Patch SystemClick to be 32-Bit clean.
; <1> 7/2/90 stb first checked in
;
;
load 'StandardEqu.d'
include 'LinkedPatchMacros.a'
SysEvtAfterFrontWindow ROMBind (Plus, $15C2A), (SE, $10268), (II, $14FE0), (Portable, $15536), (IIci, $1C79C)
SysEvtDoneSEvt ROMBind (Plus, $15C20), (SE, $1025C), (II, $14FD4), (Portable, $1552C), (IIci, $1C790)
SystemClickContinue ROMBind (IIci, $1C856)
CheckDeskHook ROMBind (IIci, $1C8A0)
SearchWindow ROMBind (Plus, $15C40), (SE, $1027C), (II, $14FF4), (Portable, $15550), (IIci, $1C7B4)
DoneSClick ROMBind (IIci, $1C894)
AfterLoadResourceInSystemClick ROMBind (Plus, $15CDC), (SE, $10330), (II, $150A8), (Portable, $15606), (IIci, $1C86A)
AfterFrontWindowInSystemClick ROMBind (Plus, $15CF8), (SE, $1034C), (II, $150C4), (Portable, $15622), (IIci, $1C886)
AfterTrackGoAwayInSystemClick ROMBind (Plus, $15D58), (SE, $103AC), (II, $15124), (Portable, $15682), (IIci, $1C8E6)
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; SystemEvent Ñ bail out if there is no window up
; SystemEvent has a call to FrontWindow before dereferencing the front window's data structure.
; This is bad if FrontWindow returns nil. This come-from patch to FrontWindow causes SystemEvent
; to exit immediately with a return value of FALSE if FrontWindow returns nil.
;
; This patch has been rolled into DeskMgr.a.
;
SysEvtIgnoreNILFrontWindow ComeFromPatchProc \
_FrontWindow,SysEvtAfterFrontWindow,(Plus,SE,II,Portable,IIci)
addq #4,sp ; pop return address because we know it's always SysEvtAfterFrontWindow
jsrOld ; go ahead and finish the FrontWindow
tst.l (sp) ; is there no window up?
bneROM SysEvtAfterFrontWindow ; there's a window, so we can continue as normal
; we don't have a window, so bail out
addq #4,sp ; pop the windowptr from the FrontWindow call
jmpROM SysEvtDoneSEvt ; exit through the ROM
EndProc
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; SystemClick - Make this routine 32-bit clean when it calls the WDEF and fix heap scramble bugs.
;
; This patch has been rolled into DeskMgr.a.
;
FixSystemClick PatchProc _SystemClick,(IIci)
MOVEM.L D0/D3-D4/A3-A4,-(SP) ;preserve some work registers
;D0 to reserve space on stack
MOVE.L SP,-(SP) ;push "savePort"
_GetPort ;remember the current grafPort on stack
MOVE.L 24(SP),A4 ; get theWindow into A4
MOVE.L WindowDef(A4),A3 ; get the window def proc handle into A3
MOVE.L 28(SP),D4 ; get theEvent into D4
MOVE.L A4,D0 ; test the window ptr
beqROM CheckDeskHook ; if nil, check the desk hook
MOVE.L A4,A0 ;pass in A0
jsrROM SearchWindow ;find it in the driver list
bneROM DoneSClick ;if not found, ignore the call
MOVE.L A0,D3 ;remember DCE handle (formerly remembered the pointer) <3>
;
; we found the window in the device table; A1 points to the DCE entry of the driver
; that owns the window. First see what part of the window its in by calling
; the window definition proc to classify.
;
subq #2, SP ; room for window variant
move.l A4, -(SP) ; push window pointer
_GetWVariant ; legally get the window variant
move.w (SP)+, D0 ; put the var code into D0 for the ROM
jmpROM SystemClickContinue ; let the rom do the rest
EndProc
; The next patch is so that we keep the DCE handle instead of the pointer.
; Not needed on the IIci because the above patch fixes it for that ROM.
RememberDCEHandleInsteadOfPointer ComeFromPatchProc \
_LoadResource,AfterLoadResourceInSystemClick,(Plus,SE,Portable,II)
MOVE.L A4,A0 ;pass in A0
jsrROM SearchWindow ;find it in the driver list (we know it will be found, we found it before)
MOVE.L A0,D3 ;remember DCE handle (formerly remembered the pointer) <3>
jmpOld
EndProc
; The next patch is so that we get the dCtlRefNum properly when we send a message to the driver.
;
; This patch has been rolled into DeskMgr.a.
;
GetDCtlRefNumFromHandleForSendDrvrMsg ComeFromPatchProc \
_FrontWindow,AfterFrontWindowInSystemClick,(Plus,SE,Portable,II,IIci)
move.l d3,a0 ;put DCE handle in an address register to dereference it
move.l (a0),d3 ;get the DCE pointer now, like the ROM expects
jmpOld
EndProc
; The next patch is so that we get the dCtlRefNum properly when close the driver.
; This can be two different things Ñ either CloseDeskAcc or calling the CloseOrnHook.
;
; This patch has been rolled into DeskMgr.a.
;
GetDCtlRefNumFromHandleForClosingDeskAccessory ComeFromPatchProc \
_TrackGoAway,AfterTrackGoAwayInSystemClick,(Plus,SE,Portable,II,IIci)
addq #4,sp ;get rid of the return address in SystemClick
jsrOld ;call TrackGoAway, and the stack is right
move.l d3,a0 ;put DCE handle in an address register to dereference it
move.l (a0),d3 ;get the DCE pointer now, like the ROM expects
jmpROM AfterTrackGoAwayInSystemClick ; rejoin the ROM, just after the TrackGoAway call
EndProc
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
End