Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / fs / hfs / include / apple.h
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;