aboutsummaryrefslogtreecommitdiff
path: root/disk/part_iso.h
blob: c139d4b6316e5f9be921d7b7b007b691317538a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 * (C) Copyright 2001
 * Denis Peter, MPL AG Switzerland, d.peter@mpl.ch.
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * 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 of
 * the License, 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; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */
#ifndef _PART_CD_H
#define _PART_CD_H

#define BRVD	0x11
#define PVD_OFFSET 0x10


typedef struct iso_boot_rec {
	unsigned char desctype;			/* type of Volume descriptor: 0 = boot record, 1 = primary, 2 = Supplement, 3 = volume part 0xff trminator */
	unsigned char stand_ident[5]; /* "CD001" */
	unsigned char vers;					/* Version */
	char					ident_str[0x20]; /* Ident String "EL TORITO SPECIFICATION" */
	unsigned char unused[0x20];		/* unused */
	unsigned char pointer[4];		/* absolute pointer to Boot Catalog */
} iso_boot_rec_t;


typedef struct iso_pri_rec {
	unsigned char desctype;			/* type of Volume descriptor: 0 = boot record, 1 = primary, 2 = Supplement, 3 = volume part 0xff trminator */
	unsigned char stand_ident[5]; /* "CD001" */
	unsigned char vers;					/* Version */
	unsigned char unused;
	char					sysid[32];		/* system Identifier */
	char					volid[32];		/* volume Identifier */
	unsigned char zeros1[8];		/* unused */
	unsigned long volsiz_LE;		/* volume size Little Endian */
	unsigned long volsiz_BE;		/* volume size Big Endian */
	unsigned char zeros2[32];		/* unused */
	unsigned short setsize_LE;	/* volume set size LE */
	unsigned short setsize_BE;	/* volume set size BE */
	unsigned short seqnum_LE;		/* volume sequence number LE */
	unsigned short seqnum_BE;		/* volume sequence number BE */
	unsigned short secsize_LE;	/* sector size LE */
	unsigned short secsize_BE;	/* sector size BE */
	unsigned long pathtablen_LE;/* Path Table size LE */
	unsigned long pathtablen_BE;/* Path Table size BE */
	unsigned long firstsek_LEpathtab1_LE; /* location of first occurrence of little endian type path table */
	unsigned long firstsek_LEpathtab2_LE; /* location of optional occurrence of little endian type path table */
	unsigned long firstsek_BEpathtab1_BE; /* location of first occurrence of big endian type path table */
	unsigned long firstsek_BEpathtab2_BE; /* location of optional occurrence of big endian type path table */
	unsigned char rootdir[34];	/* directory record for root dir */
	char					volsetid[128];/* Volume set identifier */
	char					pubid[128];		/* Publisher identifier */
	char					dataprepid[128]; /* data preparer identifier */
	char					appid[128];		/* application identifier */
	char					copyr[37];		/* copyright string */
	char					abstractfileid[37]; /* abstract file identifier */
	char					bibliofileid[37]; /* bibliographic file identifier */
	unsigned char creationdate[17]; /* creation date */
	unsigned char modify[17];		/* modification date */
	unsigned char expire[17];		/* expiring date */
	unsigned char effective[17];/* effective date */
	unsigned char filestruc_ver;	/* file structur version */
} iso_pri_rec_t;

typedef struct iso_sup_rec {
	unsigned char desctype;			/* type of Volume descriptor: 0 = boot record, 1 = primary, 2 = Supplement, 3 = volume part 0xff trminator */
	unsigned char stand_ident[5]; /* "CD001" */
	unsigned char vers;					/* Version */
	unsigned char volumeflags;	/* if bit 0 = 0 => all escape sequences are according ISO 2375 */
	char					sysid[32];		/* system Identifier */
	char					volid[32];		/* volume Identifier */
	unsigned char zeros1[8];		/* unused */
	unsigned long volsiz_LE;		/* volume size Little Endian */
	unsigned long volsiz_BE;		/* volume size Big Endian */
	unsigned char escapeseq[32];/* Escape sequences */
	unsigned short setsize_LE;	/* volume set size LE */
	unsigned short setsize_BE;	/* volume set size BE */
	unsigned short seqnum_LE;		/* volume sequence number LE */
	unsigned short seqnum_BE;		/* volume sequence number BE */
	unsigned short secsize_LE;	/* sector size LE */
	unsigned short secsize_BE;	/* sector size BE */
	unsigned long pathtablen_LE;/* Path Table size LE */
	unsigned long pathtablen_BE;/* Path Table size BE */
	unsigned long firstsek_LEpathtab1_LE; /* location of first occurrence of little endian type path table */
	unsigned long firstsek_LEpathtab2_LE; /* location of optional occurrence of little endian type path table */
	unsigned long firstsek_BEpathtab1_BE; /* location of first occurrence of big endian type path table */
	unsigned long firstsek_BEpathtab2_BE; /* location of optional occurrence of big endian type path table */
	unsigned char rootdir[34];	/* directory record for root dir */
	char					volsetid[128];/* Volume set identifier */
	char					pubid[128];		/* Publisher identifier */
	char					dataprepid[128]; /* data preparer identifier */
	char					appid[128];		/* application identifier */
	char					copyr[37];		/* copyright string */
	char					abstractfileid[37]; /* abstract file identifier */
	char					bibliofileid[37]; /* bibliographic file identifier */
	unsigned char creationdate[17]; /* creation date */
	unsigned char modify[17];		/* modification date */
	unsigned char expire[17];		/* expiring date */
	unsigned char effective[17];/* effective date */
	unsigned char filestruc_ver;	/* file structur version */
}iso_sup_rec_t;

typedef struct iso_part_rec {
	unsigned char desctype;			/* type of Volume descriptor: 0 = boot record, 1 = primary, 2 = Supplement, 3 = volume part 0xff trminator */
	unsigned char stand_ident[5]; /* "CD001" */
	unsigned char vers;					/* Version */
	unsigned char unused;
	char					sysid[32];		 /* system Identifier */
	char					volid[32];		/* volume partition Identifier */
	unsigned long partloc_LE;		/* volume partition location LE */
	unsigned long partloc_BE;		/* volume partition location BE */
	unsigned long partsiz_LE;		/* volume partition size LE */
	unsigned long partsiz_BE;		/* volume partition size BE */
}iso_part_rec_t;


typedef struct iso_val_entry {
	unsigned char	header_id;		/* Header ID must be 0x01 */
	unsigned char	platform;			/* Platform: 0=x86, 1=PowerPC, 2=MAC */
	unsigned char res[2];				/* reserved */
	char					manu_str[0x18]; /* Ident String of manufacturer/developer */
	unsigned char chk_sum[2];	/* Check sum (all words must be zero)  */
	unsigned char key[2];				/* key[0]=55, key[1]=0xAA */
} iso_val_entry_t;

typedef struct iso_header_entry {
	unsigned char	header_id;		/* Header ID must be 0x90 or 0x91 */
	unsigned char	platform;			/* Platform: 0=x86, 1=PowerPC, 2=MAC */
	unsigned char numentry[2];	/* number of entries */
	char					id_str[0x1C]; /* Ident String of sectionr */
} iso_header_entry_t;


typedef struct iso_init_def_entry {
	unsigned char	boot_ind;			/* Boot indicator 0x88=bootable 0=not bootable */
	unsigned char	boot_media;		/* boot Media Type: 0=no Emulation, 1=1.2MB floppy, 2=1.44MB floppy, 3=2.88MB floppy 4=hd (0x80) */
	unsigned char ld_seg[2];		/* Load segment (flat model=addr/10) */
	unsigned char systype;			/* System Type copy of byte5 of part table */
	unsigned char res;					/* reserved */
	unsigned char sec_cnt[2];		/* sector count in VIRTUAL Blocks (0x200) */
	unsigned char rel_block_addr[4];	/* relative Block address */
} iso_init_def_entry_t;


void print_partition_cd(int dev);

#endif /* _PART_CD_H */