xref: /openbsd-src/gnu/usr.sbin/mkhybrid/src/libhfs_iso/low.h (revision f0d9efc08bdf8f314c206a5c81ebc300245394f8)
1*f0d9efc0Sbeck /*
2*f0d9efc0Sbeck  * hfsutils - tools for reading and writing Macintosh HFS volumes
3*f0d9efc0Sbeck  * Copyright (C) 1996, 1997 Robert Leslie
4*f0d9efc0Sbeck  *
5*f0d9efc0Sbeck  * This program is free software; you can redistribute it and/or modify
6*f0d9efc0Sbeck  * it under the terms of the GNU General Public License as published by
7*f0d9efc0Sbeck  * the Free Software Foundation; either version 2 of the License, or
8*f0d9efc0Sbeck  * (at your option) any later version.
9*f0d9efc0Sbeck  *
10*f0d9efc0Sbeck  * This program is distributed in the hope that it will be useful,
11*f0d9efc0Sbeck  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*f0d9efc0Sbeck  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*f0d9efc0Sbeck  * GNU General Public License for more details.
14*f0d9efc0Sbeck  *
15*f0d9efc0Sbeck  * You should have received a copy of the GNU General Public License
16*f0d9efc0Sbeck  * along with this program; if not, write to the Free Software
17*f0d9efc0Sbeck  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18*f0d9efc0Sbeck  */
19*f0d9efc0Sbeck 
20*f0d9efc0Sbeck typedef struct {
21*f0d9efc0Sbeck   Integer	sbSig;		/* device signature (should be 0x4552) */
22*f0d9efc0Sbeck   Integer	sbBlkSize;	/* block size of the device (in bytes) */
23*f0d9efc0Sbeck   LongInt	sbBlkCount;	/* number of blocks on the device */
24*f0d9efc0Sbeck   Integer	sbDevType;	/* reserved */
25*f0d9efc0Sbeck   Integer	sbDevId;	/* reserved */
26*f0d9efc0Sbeck   LongInt	sbData;		/* reserved */
27*f0d9efc0Sbeck   Integer	sbDrvrCount;	/* number of driver descriptor entries */
28*f0d9efc0Sbeck   LongInt	ddBlock;	/* first driver's starting block */
29*f0d9efc0Sbeck   Integer	ddSize;		/* size of the driver, in 512-byte blocks */
30*f0d9efc0Sbeck   Integer	ddType;		/* driver operating system type (MacOS = 1) */
31*f0d9efc0Sbeck   Integer	ddPad[243];	/* additional drivers, if any */
32*f0d9efc0Sbeck } Block0;
33*f0d9efc0Sbeck 
34*f0d9efc0Sbeck typedef struct {
35*f0d9efc0Sbeck   Integer	bbID;		/* boot blocks signature */
36*f0d9efc0Sbeck   LongInt	bbEntry;	/* entry point to boot code */
37*f0d9efc0Sbeck   Integer	bbVersion;	/* boot blocks version number */
38*f0d9efc0Sbeck   Integer	bbPageFlags;	/* used internally */
39*f0d9efc0Sbeck   Str15		bbSysName;	/* System filename */
40*f0d9efc0Sbeck   Str15		bbShellName;	/* Finder filename */
41*f0d9efc0Sbeck   Str15		bbDbg1Name;	/* debugger filename */
42*f0d9efc0Sbeck   Str15		bbDbg2Name;	/* debugger filename */
43*f0d9efc0Sbeck   Str15		bbScreenName;	/* name of startup screen */
44*f0d9efc0Sbeck   Str15		bbHelloName;	/* name of startup program */
45*f0d9efc0Sbeck   Str15		bbScrapName;	/* name of system scrap file */
46*f0d9efc0Sbeck   Integer	bbCntFCBs;	/* number of FCBs to allocate */
47*f0d9efc0Sbeck   Integer	bbCntEvts;	/* number of event queue elements */
48*f0d9efc0Sbeck   LongInt	bb128KSHeap;	/* system heap size on 128K Mac */
49*f0d9efc0Sbeck   LongInt	bb256KSHeap;	/* used internally */
50*f0d9efc0Sbeck   LongInt	bbSysHeapSize;	/* system heap size on all machines */
51*f0d9efc0Sbeck   Integer	filler;		/* reserved */
52*f0d9efc0Sbeck   LongInt	bbSysHeapExtra;	/* additional system heap space */
53*f0d9efc0Sbeck   LongInt	bbSysHeapFract;	/* fraction of RAM for system heap */
54*f0d9efc0Sbeck } BootBlkHdr;
55*f0d9efc0Sbeck 
56*f0d9efc0Sbeck typedef struct {
57*f0d9efc0Sbeck   Integer	pmSig;		/* partition signature (0x504d or 0x5453) */
58*f0d9efc0Sbeck   Integer	pmSigPad;	/* reserved */
59*f0d9efc0Sbeck   LongInt	pmMapBlkCnt;	/* number of blocks in partition map */
60*f0d9efc0Sbeck   LongInt	pmPyPartStart;	/* first physical block of partition */
61*f0d9efc0Sbeck   LongInt	pmPartBlkCnt;	/* number of blocks in partition */
62*f0d9efc0Sbeck   Char		pmPartName[33];	/* partition name */
63*f0d9efc0Sbeck   Char		pmParType[33];	/* partition type */
64*f0d9efc0Sbeck   /*
65*f0d9efc0Sbeck    * Apple_partition_map	partition map
66*f0d9efc0Sbeck    * Apple_Driver		device driver
67*f0d9efc0Sbeck    * Apple_Driver43		SCSI Manager 4.3 device driver
68*f0d9efc0Sbeck    * Apple_MFS			Macintosh 64K ROM filesystem
69*f0d9efc0Sbeck    * Apple_HFS			Macintosh hierarchical filesystem
70*f0d9efc0Sbeck    * Apple_Unix_SVR2		Unix filesystem
71*f0d9efc0Sbeck    * Apple_PRODOS		ProDOS filesystem
72*f0d9efc0Sbeck    * Apple_Free			unused
73*f0d9efc0Sbeck    * Apple_Scratch		empty
74*f0d9efc0Sbeck    */
75*f0d9efc0Sbeck   LongInt	pmLgDataStart;	/* first logical block of data area */
76*f0d9efc0Sbeck   LongInt	pmDataCnt;	/* number of blocks in data area */
77*f0d9efc0Sbeck   LongInt	pmPartStatus;	/* partition status information */
78*f0d9efc0Sbeck   LongInt	pmLgBootStart;	/* first logical block of boot code */
79*f0d9efc0Sbeck   LongInt	pmBootSize;	/* size of boot code, in bytes */
80*f0d9efc0Sbeck   LongInt	pmBootAddr;	/* boot code load address */
81*f0d9efc0Sbeck   LongInt	pmBootAddr2;	/* reserved */
82*f0d9efc0Sbeck   LongInt	pmBootEntry;	/* boot code entry point */
83*f0d9efc0Sbeck   LongInt	pmBootEntry2;	/* reserved */
84*f0d9efc0Sbeck   LongInt	pmBootCksum;	/* boot code checksum */
85*f0d9efc0Sbeck   Char		pmProcessor[17];/* processor type */
86*f0d9efc0Sbeck   Integer	pmPad[188];	/* reserved */
87*f0d9efc0Sbeck } Partition;
88*f0d9efc0Sbeck 
89*f0d9efc0Sbeck int l_lockvol(hfsvol *);
90*f0d9efc0Sbeck 
91*f0d9efc0Sbeck int l_readblock0(hfsvol *);
92*f0d9efc0Sbeck int l_readpm(hfsvol *);
93*f0d9efc0Sbeck 
94*f0d9efc0Sbeck int l_readmdb(hfsvol *);
95*f0d9efc0Sbeck int l_writemdb(hfsvol *);
96*f0d9efc0Sbeck 
97*f0d9efc0Sbeck int l_readvbm(hfsvol *);
98*f0d9efc0Sbeck int l_writevbm(hfsvol *);
99