mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-29 20:49:19 +00:00
74 lines
2.9 KiB
Plaintext
74 lines
2.9 KiB
Plaintext
;
|
||
; File: OpenResFile.a
|
||
;
|
||
; Contains: patch to OpenResFile to fix old print glues
|
||
;
|
||
; Copyright: © 1990 by Apple Computer, Inc., all rights reserved.
|
||
;
|
||
; This file is used in these builds: BigBang
|
||
;
|
||
; Change History (most recent first):
|
||
;
|
||
; <4> 1/16/91 stb & gbm; preserve d1-d2/a1 like all good Resource Mgr calls should
|
||
; <3> 4/23/90 dba don’t change CurMap to SysMap before doing the GetString; this
|
||
; fixes some problems with PrintMonitor, and doesn’t hurt
|
||
; anything, since no one except PrintMonitor and the System is
|
||
; supposed to have an STR -8192
|
||
; <1> 4/6/90 NB Added a call to PrLoadDriver. This replaces all the driver
|
||
; load hacks from before.
|
||
;
|
||
|
||
load 'StandardEqu.d'
|
||
include 'LinkedPatchMacros.a'
|
||
|
||
macro
|
||
_PrLoadDriver ; Only available on System 7.0 or better.
|
||
move.l #$D8000000,-(SP)
|
||
dc.w $A8FD
|
||
endm
|
||
|
||
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
||
; OpenResFile — open the printer driver whenever anyone opens 'STR ' ($E000)
|
||
|
||
OpenResFile PatchProc _OpenResFile, (Plus,SE,II,Portable,IIci)
|
||
|
||
move.b ResLoad,-(sp) ; save the old value for whether to load resources
|
||
sf ResLoad ; don’t load the resource
|
||
|
||
subq #4,sp ; make room for resource handle
|
||
move.w #$E000,-(sp) ; get that resource handle
|
||
_GetString ; got the string now!
|
||
move.l (sp)+,d0 ; get the string into a register
|
||
|
||
move.b (sp)+,ResLoad ; restore ResLoad
|
||
|
||
tst.l d0 ; check if the handle is nil
|
||
bz.s NotForPrinting ; nope, it is not the printer driver name
|
||
exg d0,a0 ; move to address register for dereference
|
||
move.l (a0),a0 ; dereference to get the pointer
|
||
exg d0,a0 ; move file name pointer back to A1
|
||
cmp.l 4(sp), d0 ; check and see if it is the printer name
|
||
bne.s NotForPrinting ; nope, it is not the printer driver
|
||
|
||
movem.l d1-d2/a1,-(sp) ; Resource Mgr calls shouldn’t touch these <4>
|
||
_PrLoadDriver ; function result is in D0
|
||
movem.l (sp)+,d1-d2/a1 ; restore registers <4>
|
||
move.w D0, ResErr ; copy the error result into ResErr
|
||
move.w $952, D0 ; copy the printing refnum into the function result
|
||
; This will be the error from HOpenResFile if it didn't work.
|
||
|
||
move.l (sp)+, a0 ; save return address
|
||
add.l #4, sp ; strip the parameter
|
||
move.w d0, (sp) ; set the function result
|
||
jmp (a0) ; out of here
|
||
|
||
NotForPrinting
|
||
|
||
jmpold ; go to the old OpenResFile
|
||
|
||
EndProc
|
||
|
||
; ——————————————————————————————————————————————————————————————————————————————————————————————————
|
||
|
||
End
|