158 lines
5.8 KiB
C
158 lines
5.8 KiB
C
/* @(#)mac_label.h 1.3 04/03/01 joerg, Copyright 1997, 1998, 1999, 2000 James Pearson */
|
|
/*
|
|
* Copyright (c) 1997, 1998, 1999, 2000 James Pearson
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
/*
|
|
* mac_label.h: defines Macintosh partition maps and label
|
|
*
|
|
* Taken from "mkisofs 1.05 PLUS" by Andy Polyakov <appro@fy.chalmers.se>
|
|
* (see http://fy.chalmers.se/~appro/mkisofs_plus.html for details)
|
|
*
|
|
* Much of this is already defined in the libhfs code, but to keep
|
|
* things simple we stick with these.
|
|
*/
|
|
|
|
#ifndef _MAC_LABEL_H
|
|
#define _MAC_LABEL_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef PREP_BOOT
|
|
struct fdiskPartition {
|
|
#define prepPartType 0x41
|
|
#define chrpPartType 0x96
|
|
unsigned char boot; /* bootable flag; not used */
|
|
unsigned char CHSstart[3]; /* start CHS; not used */
|
|
unsigned char type; /* Partition type, = 0x41 (PReP bootable) */
|
|
unsigned char CHSend[3]; /* end CHS; not used */
|
|
unsigned char startSect[4]; /* start sector (really start of boot image on CD */
|
|
unsigned char size[4]; /* size of partition (or boot image ;) ) */
|
|
};
|
|
typedef struct fdiskPartition fdiskPartition;
|
|
#endif
|
|
|
|
/* Driver Descriptor Map */
|
|
#define sbSigMagic "ER"
|
|
struct MacLabel {
|
|
unsigned char sbSig[2]; /* unique value for SCSI block 0 */
|
|
unsigned char sbBlkSize[2]; /* block size of device */
|
|
unsigned char sbBlkCount[4]; /* number of blocks on device */
|
|
unsigned char sbDevType[2]; /* device type */
|
|
unsigned char sbDevId[2]; /* device id */
|
|
unsigned char sbData[4]; /* not used */
|
|
unsigned char sbDrvrCount[2]; /* driver descriptor count */
|
|
unsigned char ddBlock[4]; /* 1st driver's starting block */
|
|
unsigned char ddSize[2]; /* size of 1st driver (512-byte blks) */
|
|
unsigned char ddType[2]; /* system type (1 for Mac+) */
|
|
#ifndef PREP_BOOT
|
|
unsigned char ddPad[486]; /* ARRAY[0..242] OF INTEGER; not used */
|
|
#else
|
|
#define fdiskMagic0 0x55
|
|
#define fdiskMagic1 0xAA
|
|
unsigned char pad1[420]; /* not used */
|
|
fdiskPartition image[4]; /* heh heh heh, we can have up to 4 */
|
|
/* different boot images */
|
|
unsigned char fdiskMagic[2]; /* PReP uses fdisk partition map */
|
|
#endif /* PREP_BOOT */
|
|
};
|
|
typedef struct MacLabel MacLabel;
|
|
|
|
#define IS_MAC_LABEL(d) (((MacLabel*)(d))->sbSig[0] == 'E' && \
|
|
((MacLabel*)(d))->sbSig[1] == 'R')
|
|
|
|
/* Partition Map Entry */
|
|
#define pmSigMagic "PM"
|
|
|
|
#define pmPartType_1 "Apple_partition_map"
|
|
#define pmPartName_11 "Apple"
|
|
|
|
#define pmPartType_2 "Apple_Driver"
|
|
#define pmPartType_21 "Apple_Driver43"
|
|
|
|
#define pmPartType_3 "Apple_UNIX_SVR2"
|
|
#define pmPartName_31 "A/UX Root"
|
|
#define pmPartName_32 "A/UX Usr"
|
|
#define pmPartName_33 "Random A/UX fs"
|
|
#define pmPartName_34 "Swap"
|
|
|
|
#define pmPartType_4 "Apple_HFS"
|
|
#define pmPartName_41 "MacOS"
|
|
|
|
#define pmPartType_5 "Apple_Free"
|
|
#define pmPartName_51 "Extra"
|
|
|
|
#define PM2 2
|
|
#define PM4 4
|
|
|
|
struct MacPart {
|
|
unsigned char pmSig[2]; /* unique value for map entry blk */
|
|
unsigned char pmSigPad[2]; /* currently unused */
|
|
unsigned char pmMapBlkCnt[4]; /* # of blks in partition map */
|
|
unsigned char pmPyPartStart[4]; /* physical start blk of partition */
|
|
unsigned char pmPartBlkCnt[4]; /* # of blks in this partition */
|
|
unsigned char pmPartName[32]; /* ASCII partition name */
|
|
unsigned char pmPartType[32]; /* ASCII partition type */
|
|
unsigned char pmLgDataStart[4]; /* log. # of partition's 1st data blk */
|
|
unsigned char pmDataCnt[4]; /* # of blks in partition's data area */
|
|
unsigned char pmPartStatus[4]; /* bit field for partition status */
|
|
unsigned char pmLgBootStart[4]; /* log. blk of partition's boot code */
|
|
unsigned char pmBootSize[4]; /* number of bytes in boot code */
|
|
unsigned char pmBootAddr[4]; /* memory load address of boot code */
|
|
unsigned char pmBootAddr2[4]; /* currently unused */
|
|
unsigned char pmBootEntry[4]; /* entry point of boot code */
|
|
unsigned char pmBootEntry2[4]; /* currently unused */
|
|
unsigned char pmBootCksum[4]; /* checksum of boot code */
|
|
unsigned char pmProcessor[16]; /* ASCII for the processor type */
|
|
unsigned char pmPad[376]; /* ARRAY[0..187] OF INTEGER; not used */
|
|
};
|
|
typedef struct MacPart MacPart;
|
|
|
|
#define IS_MAC_PART(d) (((MacPart*)(d))->pmSig[0] == 'P' && \
|
|
((MacPart*)(d))->pmSig[1] == 'M')
|
|
|
|
#define PM_STAT_VALID 0x01 /* Set if a valid partition map entry */
|
|
#define PM_STAT_ALLOC 0x02 /* Set if partition is already allocated; clear if available */
|
|
#define PM_STAT_INUSE 0x04 /* Set if partition is in use; may be cleared after a system reset */
|
|
#define PM_STAT_BOOTABLE 0x08 /* Set if partition contains valid boot information */
|
|
#define PM_STAT_READABLE 0x10 /* Set if partition allows reading */
|
|
#define PM_STAT_WRITABLE 0x20 /* Set if partition allows writing */
|
|
#define PM_STAT_BOOT_PIC 0x40 /* Set if boot code is position-independent */
|
|
#define PM_STAT_UNUSED 0x80 /* Unused */
|
|
#define PM_STAT_DEFAULT PM_STAT_VALID|PM_STAT_ALLOC|PM_STAT_READABLE|PM_STAT_WRITABLE
|
|
|
|
typedef struct {
|
|
char *name; /* Partition name */
|
|
char *type; /* Partition type */
|
|
int ntype; /* Partition type (numeric) */
|
|
int start; /* start extent (SECTOR_SIZE blocks) */
|
|
int size; /* extents (SECTOR_SIZE blocks) */
|
|
} mac_partition_table;
|
|
|
|
/* from libhfs */
|
|
#define HFS_BB_SIGWORD 0x4c4b
|
|
|
|
typedef struct deferred_write defer;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _MAC_LABEL_H */
|