sys7.1-doc-wip/Internal/Asm/ResourceMgrPriv.a
2019-07-27 22:37:48 +08:00

413 lines
15 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: 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 isnt 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 Systems enjoyment only, and shouldnt 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 refd resource
refNameOff EQU refID+2 ; if reference, NameOff of refd 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 its 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