; 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