summaryrefslogtreecommitdiff
path: root/genisoimage/mac_label.h
diff options
context:
space:
mode:
Diffstat (limited to 'genisoimage/mac_label.h')
-rw-r--r--genisoimage/mac_label.h169
1 files changed, 169 insertions, 0 deletions
diff --git a/genisoimage/mac_label.h b/genisoimage/mac_label.h
new file mode 100644
index 0000000..ada860f
--- /dev/null
+++ b/genisoimage/mac_label.h
@@ -0,0 +1,169 @@
+/*
+ * This file has been modified for the cdrkit suite.
+ *
+ * The behaviour and appearence of the program code below can differ to a major
+ * extent from the version distributed by the original author(s).
+ *
+ * For details, see Changelog file distributed with the cdrkit package. If you
+ * received this file from another source then ask the distributing person for
+ * a log of modifications.
+ *
+ */
+
+/* @(#)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 "genisoimage 1.05 PLUS" by Andy Polyakov <appro@fy.chalmers.se>
+ * (see http://fy.chalmers.se/~appro/genisoimage_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 */