sys7.1-doc-wip/Toolbox/ResourceMgr/OpenResFile.a
2019-07-27 22:37:48 +08:00

74 lines
2.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; 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 dont change CurMap to SysMap before doing the GetString; this
; fixes some problems with PrintMonitor, and doesnt 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 ; dont 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 shouldnt 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