|
|
1.1 root 1: /*
2: * libhfs - library for reading and writing Macintosh HFS volumes
3: * Copyright (C) 1996-1998 Robert Leslie
4: *
5: * This program is free software; you can redistribute it and/or modify
6: * it under the terms of the GNU General Public License as published by
7: * the Free Software Foundation; either version 2 of the License, or
8: * (at your option) any later version.
9: *
10: * This program is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: * GNU General Public License for more details.
14: *
15: * You should have received a copy of the GNU General Public License
16: * along with this program; if not, write to the Free Software
17: * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
18: * MA 02110-1301, USA.
19: *
20: * $Id: apple.h,v 1.1 1998/04/11 08:27:11 rob Exp $
21: */
22:
23: typedef signed char Char;
24: typedef unsigned char UChar;
25: typedef signed char SignedByte;
26: typedef signed short Integer;
27: typedef unsigned short UInteger;
28: typedef signed long LongInt;
29: typedef unsigned long ULongInt;
30: typedef char Str15[16];
31: typedef char Str31[32];
32: typedef long OSType;
33:
34: typedef struct {
35: Integer sbSig; /* device signature (should be 0x4552) */
36: Integer sbBlkSize; /* block size of the device (in bytes) */
37: LongInt sbBlkCount; /* number of blocks on the device */
38: Integer sbDevType; /* reserved */
39: Integer sbDevId; /* reserved */
40: LongInt sbData; /* reserved */
41: Integer sbDrvrCount; /* number of driver descriptor entries */
42: LongInt ddBlock; /* first driver's starting block */
43: Integer ddSize; /* size of the driver, in 512-byte blocks */
44: Integer ddType; /* driver operating system type (MacOS = 1) */
45: Integer ddPad[243]; /* additional drivers, if any */
46: } Block0;
47:
48: typedef struct {
49: Integer pmSig; /* partition signature (0x504d or 0x5453) */
50: Integer pmSigPad; /* reserved */
51: LongInt pmMapBlkCnt; /* number of blocks in partition map */
52: LongInt pmPyPartStart; /* first physical block of partition */
53: LongInt pmPartBlkCnt; /* number of blocks in partition */
54: Char pmPartName[33]; /* partition name */
55: Char pmParType[33]; /* partition type */
56: LongInt pmLgDataStart; /* first logical block of data area */
57: LongInt pmDataCnt; /* number of blocks in data area */
58: LongInt pmPartStatus; /* partition status information */
59: LongInt pmLgBootStart; /* first logical block of boot code */
60: LongInt pmBootSize; /* size of boot code, in bytes */
61: LongInt pmBootAddr; /* boot code load address */
62: LongInt pmBootAddr2; /* reserved */
63: LongInt pmBootEntry; /* boot code entry point */
64: LongInt pmBootEntry2; /* reserved */
65: LongInt pmBootCksum; /* boot code checksum */
66: Char pmProcessor[17];/* processor type */
67: Integer pmPad[188]; /* reserved */
68: } Partition;
69:
70: typedef struct {
71: Integer bbID; /* boot blocks signature */
72: LongInt bbEntry; /* entry point to boot code */
73: Integer bbVersion; /* boot blocks version number */
74: Integer bbPageFlags; /* used internally */
75: Str15 bbSysName; /* System filename */
76: Str15 bbShellName; /* Finder filename */
77: Str15 bbDbg1Name; /* debugger filename */
78: Str15 bbDbg2Name; /* debugger filename */
79: Str15 bbScreenName; /* name of startup screen */
80: Str15 bbHelloName; /* name of startup program */
81: Str15 bbScrapName; /* name of system scrap file */
82: Integer bbCntFCBs; /* number of FCBs to allocate */
83: Integer bbCntEvts; /* number of event queue elements */
84: LongInt bb128KSHeap; /* system heap size on 128K Mac */
85: LongInt bb256KSHeap; /* used internally */
86: LongInt bbSysHeapSize; /* system heap size on all machines */
87: Integer filler; /* reserved */
88: LongInt bbSysHeapExtra; /* additional system heap space */
89: LongInt bbSysHeapFract; /* fraction of RAM for system heap */
90: } BootBlkHdr;
91:
92: typedef struct {
93: UInteger xdrStABN; /* first allocation block */
94: UInteger xdrNumABlks; /* number of allocation blocks */
95: } ExtDescriptor;
96:
97: typedef ExtDescriptor ExtDataRec[3];
98:
99: typedef struct {
100: SignedByte xkrKeyLen; /* key length */
101: SignedByte xkrFkType; /* fork type (0x00/0xff == data/resource */
102: ULongInt xkrFNum; /* file number */
103: UInteger xkrFABN; /* starting file allocation block */
104: } ExtKeyRec;
105:
106: typedef struct {
107: SignedByte ckrKeyLen; /* key length */
108: SignedByte ckrResrv1; /* reserved */
109: ULongInt ckrParID; /* parent directory ID */
110: Str31 ckrCName; /* catalog node name */
111: } CatKeyRec;
112:
113: typedef struct {
114: Integer v; /* vertical coordinate */
115: Integer h; /* horizontal coordinate */
116: } Point;
117:
118: typedef struct {
119: Integer top; /* top edge of rectangle */
120: Integer left; /* left edge */
121: Integer bottom; /* bottom edge */
122: Integer right; /* right edge */
123: } Rect;
124:
125: typedef struct {
126: Rect frRect; /* folder's rectangle */
127: Integer frFlags; /* flags */
128: Point frLocation; /* folder's location */
129: Integer frView; /* folder's view */
130: } DInfo;
131:
132: typedef struct {
133: Point frScroll; /* scroll position */
134: LongInt frOpenChain; /* directory ID chain of open folders */
135: Integer frUnused; /* reserved */
136: Integer frComment; /* comment ID */
137: LongInt frPutAway; /* directory ID */
138: } DXInfo;
139:
140: typedef struct {
141: OSType fdType; /* file type */
142: OSType fdCreator; /* file's creator */
143: Integer fdFlags; /* flags */
144: Point fdLocation; /* file's location */
145: Integer fdFldr; /* file's window */
146: } FInfo;
147:
148: typedef struct {
149: Integer fdIconID; /* icon ID */
150: Integer fdUnused[4]; /* reserved */
151: Integer fdComment; /* comment ID */
152: LongInt fdPutAway; /* home directory ID */
153: } FXInfo;
154:
155: typedef struct {
156: Integer drSigWord; /* volume signature (0x4244 for HFS) */
157: LongInt drCrDate; /* date and time of volume creation */
158: LongInt drLsMod; /* date and time of last modification */
159: Integer drAtrb; /* volume attributes */
160: UInteger drNmFls; /* number of files in root directory */
161: UInteger drVBMSt; /* first block of volume bit map (always 3) */
162: UInteger drAllocPtr; /* start of next allocation search */
163: UInteger drNmAlBlks; /* number of allocation blocks in volume */
164: ULongInt drAlBlkSiz; /* size (in bytes) of allocation blocks */
165: ULongInt drClpSiz; /* default clump size */
166: UInteger drAlBlSt; /* first allocation block in volume */
167: LongInt drNxtCNID; /* next unused catalog node ID (dir/file ID) */
168: UInteger drFreeBks; /* number of unused allocation blocks */
169: char drVN[28]; /* volume name (1-27 chars) */
170: LongInt drVolBkUp; /* date and time of last backup */
171: Integer drVSeqNum; /* volume backup sequence number */
172: ULongInt drWrCnt; /* volume write count */
173: ULongInt drXTClpSiz; /* clump size for extents overflow file */
174: ULongInt drCTClpSiz; /* clump size for catalog file */
175: UInteger drNmRtDirs; /* number of directories in root directory */
176: ULongInt drFilCnt; /* number of files in volume */
177: ULongInt drDirCnt; /* number of directories in volume */
178: LongInt drFndrInfo[8]; /* information used by the Finder */
179: UInteger drEmbedSigWord; /* type of embedded volume */
180: ExtDescriptor drEmbedExtent; /* location of embedded volume */
181: ULongInt drXTFlSize; /* size (in bytes) of extents overflow file */
182: ExtDataRec drXTExtRec; /* first extent record for extents file */
183: ULongInt drCTFlSize; /* size (in bytes) of catalog file */
184: ExtDataRec drCTExtRec; /* first extent record for catalog file */
185: } MDB;
186:
187: typedef enum {
188: cdrDirRec = 1,
189: cdrFilRec = 2,
190: cdrThdRec = 3,
191: cdrFThdRec = 4
192: } CatDataType;
193:
194: typedef struct {
195: SignedByte cdrType; /* record type */
196: SignedByte cdrResrv2; /* reserved */
197: union {
198: struct { /* cdrDirRec */
199: Integer dirFlags; /* directory flags */
200: UInteger dirVal; /* directory valence */
201: ULongInt dirDirID; /* directory ID */
202: LongInt dirCrDat; /* date and time of creation */
203: LongInt dirMdDat; /* date and time of last modification */
204: LongInt dirBkDat; /* date and time of last backup */
205: DInfo dirUsrInfo; /* Finder information */
206: DXInfo dirFndrInfo; /* additional Finder information */
207: LongInt dirResrv[4]; /* reserved */
208: } dir;
209: struct { /* cdrFilRec */
210: SignedByte
211: filFlags; /* file flags */
212: SignedByte
213: filTyp; /* file type */
214: FInfo filUsrWds; /* Finder information */
215: ULongInt filFlNum; /* file ID */
216: UInteger filStBlk; /* first alloc block of data fork */
217: ULongInt filLgLen; /* logical EOF of data fork */
218: ULongInt filPyLen; /* physical EOF of data fork */
219: UInteger filRStBlk; /* first alloc block of resource fork */
220: ULongInt filRLgLen; /* logical EOF of resource fork */
221: ULongInt filRPyLen; /* physical EOF of resource fork */
222: LongInt filCrDat; /* date and time of creation */
223: LongInt filMdDat; /* date and time of last modification */
224: LongInt filBkDat; /* date and time of last backup */
225: FXInfo filFndrInfo; /* additional Finder information */
226: UInteger filClpSize; /* file clump size */
227: ExtDataRec
228: filExtRec; /* first data fork extent record */
229: ExtDataRec
230: filRExtRec; /* first resource fork extent record */
231: LongInt filResrv; /* reserved */
232: } fil;
233: struct { /* cdrThdRec */
234: LongInt thdResrv[2]; /* reserved */
235: ULongInt thdParID; /* parent ID for this directory */
236: Str31 thdCName; /* name of this directory */
237: } dthd;
238: struct { /* cdrFThdRec */
239: LongInt fthdResrv[2]; /* reserved */
240: ULongInt fthdParID; /* parent ID for this file */
241: Str31 fthdCName; /* name of this file */
242: } fthd;
243: } u;
244: } CatDataRec;
245:
246: typedef struct {
247: ULongInt ndFLink; /* forward link */
248: ULongInt ndBLink; /* backward link */
249: SignedByte ndType; /* node type */
250: SignedByte ndNHeight; /* node level */
251: UInteger ndNRecs; /* number of records in node */
252: Integer ndResv2; /* reserved */
253: } NodeDescriptor;
254:
255: enum {
256: ndIndxNode = (SignedByte) 0x00,
257: ndHdrNode = (SignedByte) 0x01,
258: ndMapNode = (SignedByte) 0x02,
259: ndLeafNode = (SignedByte) 0xff
260: };
261:
262: typedef struct {
263: UInteger bthDepth; /* current depth of tree */
264: ULongInt bthRoot; /* number of root node */
265: ULongInt bthNRecs; /* number of leaf records in tree */
266: ULongInt bthFNode; /* number of first leaf node */
267: ULongInt bthLNode; /* number of last leaf node */
268: UInteger bthNodeSize; /* size of a node */
269: UInteger bthKeyLen; /* maximum length of a key */
270: ULongInt bthNNodes; /* total number of nodes in tree */
271: ULongInt bthFree; /* number of free nodes */
272: SignedByte bthResv[76]; /* reserved */
273: } BTHdrRec;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.