hfs-boot/hfs.aii

194 lines
8.7 KiB
Plaintext

; borrowed from HFSVolumes.a
Str31 RECORD 0
elements ds.b 32
sizeof EQU * ; size: $20 (32)
ENDR
Str27 RECORD 0
elements ds.b 28
sizeof EQU * ; size: $1C (28)
ENDR
;
; extents
;
kHFSExtentDensity EQU 3
; HFS extent descriptor
HFSExtentDescriptor RECORD 0
startBlock ds.w 1 ; offset: $0 (0) ; first allocation block
blockCount ds.w 1 ; offset: $2 (2) ; number of allocation blocks
sizeof EQU * ; size: $4 (4)
ENDR
; HFS extent record
HFSExtentRecord RECORD 0
elements ds.b 3*HFSExtentDescriptor.sizeof
sizeof EQU * ; size: $C (12)
ENDR
;
; catalog
;
kHFSRootParentID EQU 1 ; Parent ID of the root folder
kHFSRootFolderID EQU 2 ; Folder ID of the root folder
kHFSExtentsFileID EQU 3 ; File ID of the extents file
kHFSCatalogFileID EQU 4 ; File ID of the catalog file
kHFSBadBlockFileID EQU 5 ; File ID of the bad allocation block file
kHFSAllocationFileID EQU 6 ; File ID of the allocation file (HFS Plus only)
kHFSStartupFileID EQU 7 ; File ID of the startup file (HFS Plus only)
kHFSAttributesFileID EQU 8 ; File ID of the attribute file (HFS Plus only)
kHFSBogusExtentFileID EQU 15 ; Used for exchanging extents in extents file
kHFSFirstUserCatalogNodeID EQU 16
kHFSFolderRecord EQU $01 ; Folder record
kHFSFileRecord EQU $02 ; File record
kHFSFolderThreadRecord EQU $03 ; Folder thread record
kHFSFileThreadRecord EQU $04 ; File thread record
; HFS catalog key
HFSCatalogKey RECORD 0
keyLength ds.b 1 ; offset: $0 (0) ; key length (in bytes)
reserved ds.b 1 ; offset: $1 (1) ; reserved (set to zero)
parentID ds.l 1 ; offset: $2 (2) ; parent folder ID
nodeName ds Str31 ; offset: $6 (6) ; catalog node name
sizeof EQU * ; size: $26 (38)
ENDR
; HFS catalog folder record - 70 bytes
HFSCatalogFolder RECORD 0
recordType ds.b 1 ; offset: $0 (0) ; record type
ds.b 1 ; reserved
flags ds.w 1 ; offset: $2 (2) ; folder flags
valence ds.w 1 ; offset: $4 (4) ; folder valence
folderID ds.l 1 ; offset: $6 (6) ; folder ID
createDate ds.l 1 ; offset: $A (10) ; date and time of creation
modifyDate ds.l 1 ; offset: $E (14) ; date and time of last modification
backupDate ds.l 1 ; offset: $12 (18) ; date and time of last backup
userInfo ds.b 16 ; offset: $16 (22) ; Finder information
finderInfo ds.b 16 ; offset: $26 (38) ; additional Finder information
reserved ds.l 4 ; offset: $36 (54) ; reserved - set to zero
sizeof EQU * ; size: $46 (70)
ENDR
; HFS catalog file record - 102 bytes
HFSCatalogFile RECORD 0
recordType ds.w 1 ; offset: $0 (0) ; record type
flags ds.b 1 ; offset: $2 (2) ; file flags
fileType ds.b 1 ; offset: $3 (3) ; file type (unused ?)
userInfo ds.b 16 ; offset: $4 (4) ; Finder information
fileID ds.l 1 ; offset: $14 (20) ; file ID
dataStartBlock ds.w 1 ; offset: $18 (24) ; not used - set to zero
dataLogicalSize ds.l 1 ; offset: $1A (26) ; logical EOF of data fork
dataPhysicalSize ds.l 1 ; offset: $1E (30) ; physical EOF of data fork
rsrcStartBlock ds.w 1 ; offset: $22 (34) ; not used - set to zero
rsrcLogicalSize ds.l 1 ; offset: $24 (36) ; logical EOF of resource fork
rsrcPhysicalSize ds.l 1 ; offset: $28 (40) ; physical EOF of resource fork
createDate ds.l 1 ; offset: $2C (44) ; date and time of creation
modifyDate ds.l 1 ; offset: $30 (48) ; date and time of last modification
backupDate ds.l 1 ; offset: $34 (52) ; date and time of last backup
finderInfo ds.b 16 ; offset: $38 (56) ; additional Finder information
clumpSize ds.w 1 ; offset: $48 (72) ; file clump size (not used)
dataExtents ds HFSExtentRecord ; offset: $4A (74) ; first data fork extent record
rsrcExtents ds HFSExtentRecord ; offset: $56 (86) ; first resource fork extent record
reserved ds.l 1 ; offset: $62 (98) ; reserved - set to zero
sizeof EQU * ; size: $66 (102)
ENDR
; HFS catalog thread record - 46 bytes
HFSCatalogThread RECORD 0
recordType ds.w 1 ; offset: $0 (0) ; record type
reserved ds.l 2 ; offset: $2 (2) ; reserved - set to zero
parentID ds.l 1 ; offset: $A (10) ; parent ID for this catalog node
nodeName ds Str31 ; offset: $E (14) ; name of this catalog node
sizeof EQU * ; size: $2E (46)
ENDR
; Master Directory Block (HFS only) - 162 bytes
; Stored at sector #2 (3rd sector)
HFSMasterDirectoryBlock RECORD 0
; These first fields are also used by MFS
drSigWord ds.w 1 ; offset: $0 (0) ; volume signature
drCrDate ds.l 1 ; offset: $2 (2) ; date and time of volume creation
drLsMod ds.l 1 ; offset: $6 (6) ; date and time of last modification
drAtrb ds.w 1 ; offset: $A (10) ; volume attributes
drNmFls ds.w 1 ; offset: $C (12) ; number of files in root folder
drVBMSt ds.w 1 ; offset: $E (14) ; first block of volume bitmap
drAllocPtr ds.w 1 ; offset: $10 (16) ; start of next allocation search
drNmAlBlks ds.w 1 ; offset: $12 (18) ; number of allocation blocks in volume
drAlBlkSiz ds.l 1 ; offset: $14 (20) ; size (in bytes) of allocation blocks
drClpSiz ds.l 1 ; offset: $18 (24) ; default clump size
drAlBlSt ds.w 1 ; offset: $1C (28) ; first allocation block in volume
drNxtCNID ds.l 1 ; offset: $1E (30) ; next unused catalog node ID
drFreeBks ds.w 1 ; offset: $22 (34) ; number of unused allocation blocks
drVN ds Str27 ; offset: $24 (36) ; volume name
; Master Directory Block extensions for HFS
drVolBkUp ds.l 1 ; offset: $40 (64) ; date and time of last backup
drVSeqNum ds.w 1 ; offset: $44 (68) ; volume backup sequence number
drWrCnt ds.l 1 ; offset: $46 (70) ; volume write count
drXTClpSiz ds.l 1 ; offset: $4A (74) ; clump size for extents overflow file
drCTClpSiz ds.l 1 ; offset: $4E (78) ; clump size for catalog file
drNmRtDirs ds.w 1 ; offset: $52 (82) ; number of directories in root folder
drFilCnt ds.l 1 ; offset: $54 (84) ; number of files in volume
drDirCnt ds.l 1 ; offset: $58 (88) ; number of directories in volume
drFndrInfo ds.l 8 ; offset: $5C (92) ; information used by the Finder
drEmbedSigWord ds.w 1 ; offset: $7C (124) ; embedded volume signature (formerly drVCSize)
drEmbedExtent ds HFSExtentDescriptor ; offset: $7E (126) ; embedded volume location and size (formerly drVBMCSize and drCtlCSize)
drXTFlSize ds.l 1 ; offset: $82 (130) ; size of extents overflow file
drXTExtRec ds HFSExtentRecord ; offset: $86 (134) ; extent record for extents overflow file
drCTFlSize ds.l 1 ; offset: $92 (146) ; size of catalog file
drCTExtRec ds HFSExtentRecord ; offset: $96 (150) ; extent record for catalog file
sizeof EQU * ; size: $A2 (162)
ENDR
; ---------- HFS and HFS Plus B-tree structures ----------
; BTNodeDescriptor -- Every B-tree node starts with these fields.
BTNodeDescriptor RECORD 0
fLink ds.l 1 ; offset: $0 (0) ; next node at this level
bLink ds.l 1 ; offset: $4 (4) ; previous node at this level
kind ds.b 1 ; offset: $8 (8) ; kind of node (leaf, index, header, map)
height ds.b 1 ; offset: $9 (9) ; zero for header, map; child is one more than parent
numRecords ds.w 1 ; offset: $A (10) ; number of records in this node
reserved ds.w 1 ; offset: $C (12) ; reserved; set to zero
sizeof EQU * ; size: $E (14)
ENDR
; Constants for BTNodeDescriptor kind
kBTLeafNode EQU -1
kBTIndexNode EQU 0
kBTHeaderNode EQU 1
kBTMapNode EQU 2
; BTHeaderRec -- The first record of a B-tree header node
BTHeaderRec RECORD 0
treeDepth ds.w 1 ; offset: $0 (0) ; maximum height (usually leaf nodes)
rootNode ds.l 1 ; offset: $2 (2) ; node number of root node
leafRecords ds.l 1 ; offset: $6 (6) ; number of leaf records in all leaf nodes
firstLeafNode ds.l 1 ; offset: $A (10) ; node number of first leaf node
lastLeafNode ds.l 1 ; offset: $E (14) ; node number of last leaf node
nodeSize ds.w 1 ; offset: $12 (18) ; size of a node, in bytes
maxKeyLength ds.w 1 ; offset: $14 (20) ; reserved
totalNodes ds.l 1 ; offset: $16 (22) ; total number of nodes in tree
freeNodes ds.l 1 ; offset: $1A (26) ; number of unused (free) nodes in tree
reserved1 ds.w 1 ; offset: $1E (30) ; unused
clumpSize ds.l 1 ; offset: $20 (32) ; reserved
btreeType ds.b 1 ; offset: $24 (36) ; reserved
reserved2 ds.b 1 ; offset: $25 (37) ; reserved
attributes ds.l 1 ; offset: $26 (38) ; persistent attributes about the tree
reserved3 ds.l 16 ; offset: $2A (42) ; reserved
sizeof EQU * ; size: $6A (106)
ENDR