mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-01-03 09:31:04 +00:00
4325cdcc78
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.
80 lines
2.8 KiB
Plaintext
80 lines
2.8 KiB
Plaintext
;
|
|
; File: ScrapMgrPatches.a
|
|
;
|
|
; Contains: Fixes to the ROM Scrap Manager
|
|
;
|
|
; Written by: Nick Kledzik
|
|
;
|
|
; Copyright: © 1990, 1992 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <2> 2/10/92 JSM Moved this file to ScrapMgr folder, keeping all the old
|
|
; revisions.
|
|
; <1> 8/22/90 ngk first checked in
|
|
;
|
|
|
|
|
|
LOAD 'StandardEqu.d'
|
|
INCLUDE 'LinkedPatchMacros.a'
|
|
|
|
|
|
ROMs Plus,SE,II,Portable,IIci
|
|
|
|
|
|
|
|
PutScrapExit ROMBind (Plus,$16F70), (SE,$127BA), (II,$1776E), (Portable,$1E064), (IIci,$25F16)
|
|
DoPutAppendMem ROMBind (Plus,$16F80), (SE,$127CA), (II,$1777E), (Portable,$1E074), (IIci,$25F26)
|
|
DoPutAppendFile ROMBind (Plus,$16F8E), (SE,$127D8), (II,$1778C), (Portable,$1E082), (IIci,$25F34)
|
|
|
|
|
|
; PutScrap has a bug. If you put a chunk of data that is to large, it
|
|
; will return an error, but the scrap handle block and low-mem length will
|
|
; be updated as if the chunk was successfully written. The next app to do
|
|
; a GetScrap will then get garbage for that chunk.
|
|
;
|
|
; To fix this, we do a come from patch on _PtrAndHand, which PutScrap uses
|
|
; to append each chunk to the scrap handle. If _PtrAndHand returns an error
|
|
; (in D0), then we skip over the updating of low-mem scrapSize and cut back the
|
|
; scrap handle to the last scrapSize. Similarly we patch _Write.
|
|
;
|
|
; PutScrap calls "DoPut" from two places: one to write the type and size, the
|
|
; other to write the data itself. Either of these can fail. So we change the
|
|
; return address of who called DoPut to be the end of PutScrap, then return to DoPut.
|
|
; DoPut then "returns" to the end of PutScrap.
|
|
;
|
|
FixPutScrap ComeFromPatchProc _PtrAndHand, DoPutAppendMem
|
|
|
|
jsrOld ; _PtrAndHand is register based, so just jsr to it
|
|
tst.w d0 ; did _PtrAndHand return an error?
|
|
beq.s @done ; if so, do our fix
|
|
move.w d0,-(sp) ; save orginal error code
|
|
move.l scrapSize,d0 ; resize handle to last good size, to delete last 'next entry'
|
|
_SetHandleSize
|
|
move.w (sp)+,d0 ; return with original error code
|
|
leaROM PutScrapExit,a0
|
|
move.l a0,ReturnAddressDepth+4(sp) ; make DoPut "return" to end of PutScrap
|
|
@done rts
|
|
|
|
EndProc ; FixPutScrap
|
|
|
|
|
|
F2PutScrap ComeFromPatchProc _Write, DoPutAppendFile
|
|
|
|
jsrOld ; _Write is register based, so just jsr to it
|
|
tst.w d0 ; did _Write return an error?
|
|
beq.s @done ; if not, then continue as if patch not here
|
|
move.w d0,-(sp) ; save orginal error code
|
|
move.l scrapSize,ioMix(a0) ; resize file to last good size, to delete last 'next entry'
|
|
_SetEOF
|
|
move.w (sp)+,d0 ; return with original error code
|
|
leaROM PutScrapExit,a0
|
|
move.l a0,ReturnAddressDepth+4(sp) ; make DoPut "return" to end of PutScrap
|
|
@done rts
|
|
EndProc ; FixPutScrap
|
|
|
|
|
|
|
|
END
|
|
|
|
|