mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-22 04:31:30 +00:00
413 lines
15 KiB
Plaintext
413 lines
15 KiB
Plaintext
;
|
||
; File: ResourceMgrPriv.a
|
||
;
|
||
; Contains: private equates for the Resource Manager
|
||
;
|
||
; Copyright: © 1983-1993 by Apple Computer, Inc., all rights reserved.
|
||
;
|
||
; Change History (most recent first):
|
||
;
|
||
; <SM9> 5/27/93 SAM Added definition for mapForceSysHeap.
|
||
; <SM8> 3/31/93 SAM Changed kDeanBit from 2 (which was conflicting with
|
||
; systemEnabledBit) to bit 1.
|
||
; <SM7> 12/4/92 RB Added kFakeResourceOverrideMapRefNum
|
||
; <SM6> 7/27/92 FM Add elements to the ResourceMgr stack frame for use in StdEntry
|
||
; and StdExit to implement resource overrides.
|
||
; <4+> 6/14/92 CS Rollin changes from Reality :
|
||
; <14> 5/14/92 DTY #000000: Add interface for CloseResFileUnderSystemMap.
|
||
; <SM4> 4/24/92 CSS Integrated Reality changes: <13>
|
||
; <13> 3/30/92 DTY #1025140,<FM>: Add kAllOverrideAttributesMask and
|
||
; kAllButOverrideAttributesMask.
|
||
|
||
; <SM3> 4/24/92 PN Change ioQElSize to ioHQElSize.
|
||
; <SM2> 4/14/92 stb extend the standard stack frame to include the decompressor
|
||
; defproc handle
|
||
; <12> 1/30/92 DTY Add equates for preventFileFromBeingClosedBit and
|
||
; preventFileFromBeingClosedMask.
|
||
; <11> 12/17/91 DTY Add selector for _ResolveIDConflicts.
|
||
; <10> 12/6/91 DTY Add selector for _OpenResFileUnderSystemMap.
|
||
; <9> 11/5/91 DTY Add selectors for MakeOverrideMap, SetOverrideAttributes,
|
||
; GetOverrideAttributes, and SetScanOverride routines. Change
|
||
; GetMap and IsThisASystemResourceMap to negative selectors since
|
||
; these are really private routines. Switch mask values for
|
||
; kDontCountOrIndexDuplicates and kTwoDeep to match the bit
|
||
; definitions.
|
||
; <8> 11/1/91 DTY Add macro for _IsThisASystemResourceMap.
|
||
; <7> 10/23/91 DTY Add macros for _GetOverrideMap and _GetMaps, which are new
|
||
; selectors off of _ResourceDispatch.
|
||
; <6> 10/15/91 DTY Define yet another bit, twoDeepBit, which causes one deep calls
|
||
; to search the next lower map if a resource isn’t found in the
|
||
; current map. This search recurses if the lower map also has
|
||
; this bit set.
|
||
; <5> 10/15/91 DTY Add mapInsertedBit & dontCountOrIndexDuplicatesBit. Resource
|
||
; maps with mapInsertedBit set causes UseResFile to back up to the
|
||
; first map with this bit set. Maps with
|
||
; dontCountOrIndexDuplicatesBit set 1) will not consider duplicate
|
||
; resources in different maps during CountResources and
|
||
; GetIndResource calls and 2) contiguous maps with this bit set
|
||
; are considered one file (one deep calls will use the n-deep
|
||
; calls).
|
||
; <4> 1/30/91 gbm sab, #38: Change the ‘already including this file’ variable to
|
||
; all uppercase (for security reasons)
|
||
; <3> 10/24/90 dba add new attributes byte
|
||
; <1.1> 8/30/89 dba added some missing equates
|
||
; <1.0> 8/18/89 dba created from equates in ResourceMgr.a
|
||
;
|
||
|
||
IF &TYPE('__INCLUDINGRESOURCEMGRPRIV__') = 'UNDEFINED' THEN
|
||
__INCLUDINGRESOURCEMGRPRIV__ SET 1
|
||
|
||
;
|
||
; These selectors are for the System’s enjoyment only, and shouldn’t be made public.
|
||
;
|
||
|
||
selectCloseResFileUnderSystemMap equ -4
|
||
selectResolveIDConflicts equ -3
|
||
selectOpenResFileUnderSystemMap equ -2
|
||
selectIsThisASystemResourceMap equ -1
|
||
selectGetMap equ 0
|
||
|
||
Macro
|
||
_CloseResFileUnderSystemMap
|
||
DoDispatch _ResourceDispatch,selectCloseResFileUnderSystemMap
|
||
EndM
|
||
|
||
Macro
|
||
_ResolveIDConflicts
|
||
DoDispatch _ResourceDispatch,selectResolveIDConflicts
|
||
EndM
|
||
|
||
Macro
|
||
_OpenResFileUnderSystemMap
|
||
DoDispatch _ResourceDispatch,selectOpenResFileUnderSystemMap
|
||
EndM
|
||
|
||
Macro
|
||
_IsThisASystemResourceMap
|
||
DoDispatch _ResourceDispatch,selectIsThisASystemResourceMap
|
||
EndM
|
||
|
||
Macro
|
||
_GetMap
|
||
DoDispatch _ResourceDispatch,selectGetMap
|
||
EndM
|
||
|
||
;
|
||
; These declarations should be moved into Traps.a if we ever make it public.
|
||
;
|
||
|
||
kDecompressionPasswordMask equ 1
|
||
kOverrideNextMapMask equ 2
|
||
kDontCountOrIndexDuplicatesMask equ 4
|
||
kTwoDeepMask equ 8
|
||
kPreventFileFromBeingClosedMask equ 16
|
||
kAllOverrideAttributesMask equ kOverrideNextMapMask + \
|
||
kDontCountOrIndexDuplicatesMask + \
|
||
kTwoDeepMask + \
|
||
kPreventFileFromBeingClosedMask
|
||
kAllButOverrideAttributesMask equ 255 - kAllOverrideAttributesMask
|
||
|
||
selectMakeOverrideMap equ 4
|
||
selectInsertOverrideMap equ 5
|
||
selectGetOverrideMap equ 6
|
||
selectSetScanOverride equ 7
|
||
selectGetOverrideAttributes equ 8
|
||
selectSetOverrideAttributes equ 9
|
||
|
||
Macro
|
||
_MakeOverrideMap
|
||
DoDispatch _ResourceDispatch,selectMakeOverrideMap
|
||
EndM
|
||
|
||
Macro
|
||
_InsertOverrideMap
|
||
DoDispatch _ResourceDispatch,selectInsertOverrideMap
|
||
EndM
|
||
|
||
Macro
|
||
_GetOverrideMap
|
||
DoDispatch _ResourceDispatch,selectGetOverrideMap
|
||
EndM
|
||
|
||
Macro
|
||
_SetScanOverride
|
||
DoDispatch _ResourceDispatch,selectSetScanOverride
|
||
EndM
|
||
|
||
Macro
|
||
_GetOverrideAttributes
|
||
DoDispatch _ResourceDispatch,selectGetOverrideAttributes
|
||
EndM
|
||
|
||
Macro
|
||
_SetOverrideAttributes
|
||
DoDispatch _ResourceDispatch,selectSetOverrideAttributes
|
||
EndM
|
||
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Resource Fork format
|
||
;_______________________________________________________________________________
|
||
;
|
||
; The resource fork contains all the resource data, the resource map,
|
||
; and several special data objects in fixed locations. These data objects
|
||
; are normally accessed only by the Finder.
|
||
;
|
||
; --------------------------
|
||
; Picture of a Resource Fork
|
||
; --------------------------
|
||
;
|
||
; 0-------------------> ---------------------------------
|
||
; ! Resource Header !
|
||
; 16------------------> ! Directory copy !
|
||
; 128-----------------> ! ....other user data.... !
|
||
; ! ... !
|
||
; ResDataOffset-------> ! Resource Data !
|
||
; ! ... !
|
||
; ! !
|
||
; ResMapOffset--------> ! Resource Map !
|
||
; ! ... !
|
||
; ---------------------------------
|
||
;
|
||
; (Note ResDataOffset+DataSize=ResMapOffset,
|
||
; ResMapOffset+MapSize=EOF.)
|
||
;
|
||
;_______________________________________________________________________________
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Resource header is defined as follows:
|
||
|
||
resDataOffset EQU 0 ; 4 byte offset to resource data in the file
|
||
resMapOffset EQU resDataOffset+4 ; 4 byte offset to resource map in the file
|
||
dataSize EQU resMapOffset+4 ; 4 byte data size
|
||
mapSize EQU dataSize+4 ; 4 byte map size
|
||
|
||
hdrSize EQU mapSize+4
|
||
|
||
; After resource header, remaining block has the following info by convention:
|
||
|
||
dirCopy EQU hdrSize ; Copy of directory entry, truncated to 112 bytes
|
||
userData EQU dirCopy+112 ; User data starts here and continues
|
||
; up to ResDataOffset. CreateResFile
|
||
; allocates 128 bytes for userData.
|
||
dataFirstRes EQU userData+128 ; ResDataOffset usually points here.
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Resource Data format
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Each resource has a four-byte length, followed by the data. The data
|
||
; is packed initially, and UpdateResFile packs the data if fragmented
|
||
; by RmveResource, ChangedResData, and UpdateResFile calls.
|
||
;_______________________________________________________________________________
|
||
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Resource Map format
|
||
;_______________________________________________________________________________
|
||
;
|
||
; The Resource Map contains references to resources either in the current
|
||
; resource file or in Sys.rsrc. These references include the type, ID,
|
||
; and/or names of the resources, their locations in the data section of the
|
||
; resource fork, and special attributes of each resource.
|
||
;
|
||
; --------------------------
|
||
; Picture of a Resource Map
|
||
; --------------------------
|
||
;
|
||
; 0-------------------> ---------------------------------
|
||
; ! (Copy of Resource Hdr) !
|
||
; 16------------------> ! MNext !
|
||
; ! MRefNum !
|
||
; ! MAttr !
|
||
; ! MTypes !
|
||
; ! MNames !
|
||
; MTypes--------------> ! TypeCount !
|
||
; ! TypeA !
|
||
; ! CountA !
|
||
; ! OffsetA !
|
||
; ! TypeB !
|
||
; ! CountB !
|
||
; ! OffsetB !
|
||
; ! ... !
|
||
; MTypes+OffsetA-----> ! IDA1 !
|
||
; ! NameOffA1 !
|
||
; ! LocationA1 !
|
||
; ! HandleA1 !
|
||
; ! IDA2 !
|
||
; ! NameOffA2 !
|
||
; ! LocationA2 !
|
||
; ! HandleA2 !
|
||
; ! ... !
|
||
; MTypes+OffsetB-----> ! IDB1 !
|
||
; ! NameOffB1 !
|
||
; ! LocationB1 !
|
||
; ! HandleB1 !
|
||
; ! ... !
|
||
; MNames-------------> ! <length> !
|
||
; ! "Ascii String" !
|
||
; MNames+NameOff2----> ! <length2> !
|
||
; ! "Another String" !
|
||
; ! ... !
|
||
; ---------------------------------
|
||
;
|
||
; (Note: MTypes is always the same--right after
|
||
; the resource map header. )
|
||
;
|
||
;_______________________________________________________________________________
|
||
;
|
||
; The resource map is defined as follows:
|
||
;
|
||
; A copy of resource header precedes the other resource map info.
|
||
|
||
mNext EQU hdrSize ; Handle to next map
|
||
mRefNum EQU mNext+4 ; Map file reference number
|
||
mAttr EQU mRefNum+2 ; Map attributes word (high byte only used)
|
||
mInMemoryAttr equ mAttr+1 ; Attributes for use in memory only <3>
|
||
mTypes EQU mAttr+2 ; Type offset in map (64K max offset)
|
||
mNames EQU mTypes+2 ; Name offset in map (64K max offset)
|
||
|
||
; bits in mInMemoryAttr
|
||
|
||
decompressionPasswordBit equ 0 ; set this to search for dcmps in this map <3>
|
||
overrideNextMapBit equ 1 ; set this bit to recursively override resources in the next lower map when _UseResFile is called on the lower map <6>
|
||
dontCountOrIndexDuplicatesBit equ 2 ; set this bit to not count or index through duplicate resource types and IDs <5>
|
||
twoDeepBit equ 3 ; set this bit to recursively look in the current map and the next map on one deep calls <6>
|
||
preventFileFromBeingClosedBit equ 4 ; set this bit to prevent a resource file from being closed. <12>
|
||
|
||
; bits in mAttr
|
||
|
||
mapForceSysHeap equ 0 ; set this bit to force all map resources to load in SysHeap <SM9>
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Type Block:
|
||
|
||
typeCount EQU 0 ; TypeCount(A3) gives number of types
|
||
|
||
; Offsets into a type entry:
|
||
|
||
tType EQU 0 ; Type of resources
|
||
tCount EQU tType+4 ; 2 byte count, zero based
|
||
tOffset EQU tCount+2 ; 2 byte offset
|
||
tSize EQU tOffset+2 ; Type entry size
|
||
typeShift EQU 3 ; log2 TSize.
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Offsets into a resource entry:
|
||
|
||
rID EQU 0 ; ID of the resource
|
||
rNameOff EQU rID+2 ; name offset of the resource
|
||
|
||
rAttr EQU rNameOff+2 ; attribute byte (high byte of locn)
|
||
rLocn EQU rAttr ; location of the resource in source file
|
||
|
||
rHndl EQU rLocn+4 ; handle of the resource
|
||
refID EQU rHndl ; if reference, ID of ref’d resource
|
||
refNameOff EQU refID+2 ; if reference, NameOff of ref’d resource
|
||
|
||
reSize EQU rHndl+4 ; resource entry size
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Stack frame definition
|
||
|
||
ioStkFrame EQU -ioHQElSize ; stack frame is ioHQElSize long
|
||
rMgrStack EQU ioStkFrame ; Resource mgr stack frame = IOStkFrame
|
||
|
||
kDeanBit equ 1 ; <SM8><53> This bit in BrianBits will mark whether or not this call to CheckLoad allocates the master pointer
|
||
kBrianBits equ $B20 ; <53> We never define this in an interface file
|
||
|
||
kInitialEntryCount equ 30 ; Make space for 30 resources at first
|
||
|
||
; Cache flag bits
|
||
|
||
kCacheIsOneDeepBit equ 0 ; Cache was formed from a one deep call
|
||
kCacheHasROMResourcesBit equ 1 ; <34> Cache was formed when ROMMapInsert was set.
|
||
kCacheHasOverridesBit equ 2 ; <35> Cache was formed when emScanOverrides was on
|
||
|
||
; Cache flag masks
|
||
|
||
kCacheIsOneDeepMask equ 1 ; <34>
|
||
kCacheHasROMResourcesMask equ 2 ; <34>
|
||
kCacheHasOverridesMask equ 4 ; <35>
|
||
|
||
; Cache offsets
|
||
|
||
kCacheFlags equ 0 ; Flags for cache
|
||
kCachedMap equ 2 ; Resources cached from this resource map
|
||
kResourceType equ 4 ; Resource type in cache
|
||
kResourceCount equ 8 ; Number of entries cached
|
||
kCacheHeaderSize equ 12 ; Offset to cached information
|
||
|
||
; Cache entry offsets
|
||
|
||
kMapHandleEntry equ 0 ; Handle to resource map this resource came from
|
||
kDataOffsetEntry equ 4 ; Offset to resource data from beginning of resource map
|
||
kResourceIDEntry equ 6 ; ID of this resource
|
||
kCacheEntrySize equ kResourceIDEntry + 2 ; Size of each cache entry
|
||
|
||
;_______________________________________________________________________________
|
||
; stack frame record definition added <sm1>stb
|
||
|
||
ResourceMgrStack RECORD {a6Link},decr
|
||
a6Link DS.L 1
|
||
ioBlock DS.B ioHQElSize
|
||
realCurMap ds.w 1
|
||
overrideCurMap ds.w 1
|
||
OverrideSysMapHndl ds.l 1
|
||
OverrideSysMap ds.l 1
|
||
doOverrides ds.w 1
|
||
localSize EQU *
|
||
ENDR
|
||
|
||
; Length of length longword
|
||
|
||
lenWdLen EQU 4 ; a longword is 4 bytes.
|
||
|
||
|
||
; Special number for resource overrides <SM7> rb
|
||
|
||
kROMMapRefNum EQU 1 ; 1 has always been the ROM <SM7> rb
|
||
kFakeResourceOverrideMapRefNum equ 3 ; 3 is not a valid reference number, so it’s safe to use <SM7> rb
|
||
|
||
|
||
;_______________________________________________________________________________
|
||
;
|
||
; Equates added after <01jan85> by BBM
|
||
;_______________________________________________________________________________
|
||
|
||
ROMRsrcStart EQU $1A ; offset to beggining of rom Rsrc stuff <28aug85> BBM
|
||
|
||
preKey EQU $20B7A185 ; first key in preload key info <20jun85> BBM
|
||
preDataBuff EQU $00 ; offset key info inside cache 00:
|
||
preVersion EQU preDataBuff+4 ; four byte version number 04:
|
||
preLock EQU preVersion+4 ; Ptr to end of preload locked rsrcs 08:
|
||
preUnLock EQU preLock+4 ; Ptr to end of preload unlocked rsrcs 0C:
|
||
preExtra EQU preUnLock+4 ; Ptr to end of extra preload rsrcs 10:
|
||
preEnd EQU preExtra+4 ; $0C bytes reserved for future use 14:
|
||
preSize EQU preEnd-preDataBuff ; size of preload stuff in rsrc fork <11jul85> BBM
|
||
|
||
HSCache EQU RMGRHiVars ; start lowmem cache for HandleScan 00: <12mar85> BBM
|
||
HSCRType EQU HSCache ; D3.L = resource type cache 00:
|
||
HSCHandle EQU HSCRType+4 ; A1.L = handle to resource 04:
|
||
HSCROffset EQU HSCHandle+4 ; A2.L = offset to resource entry 08:
|
||
HSCTOffset EQU HSCROffset+4 ; A3.L = offset to TypeCount 0C:
|
||
HSCMapHndl EQU HSCTOffset+4 ; A4.L = handle to map 10:
|
||
HSCEntryCnt EQU HSCMapHndl+4 ; D4.W = entry count (-1) 14:
|
||
HSCTypeCnt EQU HSCEntryCnt+2 ; D5.W = type count (-1) 16:
|
||
HSCMapRNum EQU HSCTypeCnt+2 ; D6.W = Rsrc File Reference number 18:
|
||
|
||
ResOneDeep EQU HSCMapRNum+2 ; flag for onedeep (auto-cleared) 1A: <12mar85> BBM
|
||
GIROneDeep EQU ResOneDeep+1 ; flag (true means insert rom map) 1B: <09jul85> BBM
|
||
GIRIndex EQU GIROneDeep+1 ; last index + 1 used by GetIndResource 1C: <09jul85> BBM
|
||
|
||
NewResDefEnd EQU HSCache+$20 ; end of low mem space 20: <17jun85> BBM
|
||
|
||
ENDIF ; ...already included
|