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