mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-01-01 11:29:27 +00:00
0ba83392d4
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.
142 lines
5.5 KiB
Plaintext
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
|