xref: /plan9-contrib/sys/src/9/pcboot/iso9660.h (revision 25210b069a6ed8c047fa67220cf1dff32812f121)
1*25210b06SDavid du Colombier /*
2*25210b06SDavid du Colombier  * ISO 9660 CD format
3*25210b06SDavid du Colombier  */
4*25210b06SDavid du Colombier 
5*25210b06SDavid du Colombier #define	VOLDESC	16	/* sector number */
6*25210b06SDavid du Colombier 
7*25210b06SDavid du Colombier /*
8*25210b06SDavid du Colombier  * L means little-endian, M means big-endian, and LM means little-endian
9*25210b06SDavid du Colombier  * then again big-endian.
10*25210b06SDavid du Colombier  */
11*25210b06SDavid du Colombier typedef uchar		Byte2L[2];
12*25210b06SDavid du Colombier typedef uchar		Byte2M[2];
13*25210b06SDavid du Colombier typedef uchar		Byte4LM[4];
14*25210b06SDavid du Colombier typedef uchar		Byte4L[4];
15*25210b06SDavid du Colombier typedef uchar		Byte4M[4];
16*25210b06SDavid du Colombier typedef uchar		Byte8LM[8];
17*25210b06SDavid du Colombier typedef union Drec	Drec;
18*25210b06SDavid du Colombier typedef union Voldesc	Voldesc;
19*25210b06SDavid du Colombier 
20*25210b06SDavid du Colombier enum {
21*25210b06SDavid du Colombier 	BootIso		= 0,
22*25210b06SDavid du Colombier 	PrimaryIso	= 1,
23*25210b06SDavid du Colombier 	SupplementaryIso = 2,
24*25210b06SDavid du Colombier 	PartitionIso	= 3,
25*25210b06SDavid du Colombier 	TerminatorIso	= 255,
26*25210b06SDavid du Colombier };
27*25210b06SDavid du Colombier 
28*25210b06SDavid du Colombier enum {
29*25210b06SDavid du Colombier 	Cdsec	= 2048,
30*25210b06SDavid du Colombier 	Maxname = 256,
31*25210b06SDavid du Colombier };
32*25210b06SDavid du Colombier 
33*25210b06SDavid du Colombier union Voldesc {			/* volume descriptor */
34*25210b06SDavid du Colombier 	uchar	byte[Cdsec];
35*25210b06SDavid du Colombier 	union {			/* for CD001, the ECMA standard */
36*25210b06SDavid du Colombier 		struct {
37*25210b06SDavid du Colombier 			uchar	type;
38*25210b06SDavid du Colombier 			uchar	stdid[5];
39*25210b06SDavid du Colombier 			uchar	version;
40*25210b06SDavid du Colombier 			uchar	unused;
41*25210b06SDavid du Colombier 			uchar	sysid[32];
42*25210b06SDavid du Colombier 			uchar	bootid[32];
43*25210b06SDavid du Colombier 			uchar	data[1977];
44*25210b06SDavid du Colombier 		} boot;
45*25210b06SDavid du Colombier 		struct {
46*25210b06SDavid du Colombier 			uchar	type;
47*25210b06SDavid du Colombier 			uchar	stdid[5];
48*25210b06SDavid du Colombier 			uchar	version;
49*25210b06SDavid du Colombier 			uchar	flags;
50*25210b06SDavid du Colombier 			uchar	sysid[32];
51*25210b06SDavid du Colombier 			uchar	volid[32];
52*25210b06SDavid du Colombier 			Byte8LM	partloc;
53*25210b06SDavid du Colombier 			Byte8LM	size;
54*25210b06SDavid du Colombier 			uchar	escapes[32];
55*25210b06SDavid du Colombier 			Byte4LM	vsetsize;
56*25210b06SDavid du Colombier 			Byte4LM	vseqno;
57*25210b06SDavid du Colombier 			Byte4LM	blksize;
58*25210b06SDavid du Colombier 			Byte8LM	ptabsize;
59*25210b06SDavid du Colombier 			Byte4L	lptable;
60*25210b06SDavid du Colombier 			Byte4L	optlptable;
61*25210b06SDavid du Colombier 			Byte4M	mptable;
62*25210b06SDavid du Colombier 			Byte4M	optmptable;
63*25210b06SDavid du Colombier 			uchar	rootdir[34];
64*25210b06SDavid du Colombier 			uchar	volsetid[128];
65*25210b06SDavid du Colombier 			uchar	pubid[128];
66*25210b06SDavid du Colombier 			uchar	prepid[128];
67*25210b06SDavid du Colombier 			uchar	appid[128];
68*25210b06SDavid du Colombier 			uchar	copyright[37];
69*25210b06SDavid du Colombier 			uchar	abstract[37];
70*25210b06SDavid du Colombier 			uchar	bibliography[37];
71*25210b06SDavid du Colombier 			uchar	cdate[17];
72*25210b06SDavid du Colombier 			uchar	mdate[17];
73*25210b06SDavid du Colombier 			uchar	expdate[17];
74*25210b06SDavid du Colombier 			uchar	effdate[17];
75*25210b06SDavid du Colombier 			uchar	fsversion;
76*25210b06SDavid du Colombier 			uchar	unused3[1];
77*25210b06SDavid du Colombier 			uchar	appuse[512];
78*25210b06SDavid du Colombier 			uchar	unused4[653];
79*25210b06SDavid du Colombier 		} desc;
80*25210b06SDavid du Colombier 	} z;
81*25210b06SDavid du Colombier 	union {			/* for CDROM, the `High Sierra' standard */
82*25210b06SDavid du Colombier 		struct {
83*25210b06SDavid du Colombier 			Byte8LM	number;
84*25210b06SDavid du Colombier 			uchar	type;
85*25210b06SDavid du Colombier 			uchar	stdid[5];
86*25210b06SDavid du Colombier 			uchar	version;
87*25210b06SDavid du Colombier 			uchar	flags;
88*25210b06SDavid du Colombier 			uchar	sysid[32];
89*25210b06SDavid du Colombier 			uchar	volid[32];
90*25210b06SDavid du Colombier 			Byte8LM	partloc;
91*25210b06SDavid du Colombier 			Byte8LM	size;
92*25210b06SDavid du Colombier 			uchar	escapes[32];
93*25210b06SDavid du Colombier 			Byte4LM	vsetsize;
94*25210b06SDavid du Colombier 			Byte4LM	vseqno;
95*25210b06SDavid du Colombier 			Byte4LM	blksize;
96*25210b06SDavid du Colombier 			uchar	quux[40];
97*25210b06SDavid du Colombier 			uchar	rootdir[34];
98*25210b06SDavid du Colombier 			uchar	volsetid[128];
99*25210b06SDavid du Colombier 			uchar	pubid[128];
100*25210b06SDavid du Colombier 			uchar	prepid[128];
101*25210b06SDavid du Colombier 			uchar	appid[128];
102*25210b06SDavid du Colombier 			uchar	copyright[32];
103*25210b06SDavid du Colombier 			uchar	abstract[32];
104*25210b06SDavid du Colombier 			uchar	cdate[16];
105*25210b06SDavid du Colombier 			uchar	mdate[16];
106*25210b06SDavid du Colombier 			uchar	expdate[16];
107*25210b06SDavid du Colombier 			uchar	effdate[16];
108*25210b06SDavid du Colombier 			uchar	fsversion;
109*25210b06SDavid du Colombier 		} desc;
110*25210b06SDavid du Colombier 	} r;
111*25210b06SDavid du Colombier };
112*25210b06SDavid du Colombier 
113*25210b06SDavid du Colombier union Drec {
114*25210b06SDavid du Colombier 	struct {
115*25210b06SDavid du Colombier 		uchar	reclen;
116*25210b06SDavid du Colombier 		uchar	attrlen;
117*25210b06SDavid du Colombier 		Byte8LM	addr;
118*25210b06SDavid du Colombier 		Byte8LM	size;
119*25210b06SDavid du Colombier 		uchar	date[6];
120*25210b06SDavid du Colombier 		uchar	tzone;		/* flags in high sierra */
121*25210b06SDavid du Colombier 		uchar	flags;		/* ? in high sierra */
122*25210b06SDavid du Colombier 		uchar	unitsize;	/* ? in high sierra */
123*25210b06SDavid du Colombier 		uchar	gapsize;	/* ? in high sierra */
124*25210b06SDavid du Colombier 		Byte4LM	vseqno;		/* ? in high sierra */
125*25210b06SDavid du Colombier 		uchar	namelen;
126*25210b06SDavid du Colombier 		uchar	name[1];
127*25210b06SDavid du Colombier 	};
128*25210b06SDavid du Colombier 	struct {
129*25210b06SDavid du Colombier 		uchar	r_pad[24];
130*25210b06SDavid du Colombier 		uchar	r_flags;
131*25210b06SDavid du Colombier 	};
132*25210b06SDavid du Colombier };
133*25210b06SDavid du Colombier 
134*25210b06SDavid du Colombier struct Isofile {
135*25210b06SDavid du Colombier 	short	fmt;		/* 'z' if iso, 'r' if high sierra */
136*25210b06SDavid du Colombier 	short	blksize;
137*25210b06SDavid du Colombier 	vlong	offset;		/* true offset when reading directory */
138*25210b06SDavid du Colombier 	long	odelta;		/* true size of directory just read */
139*25210b06SDavid du Colombier 	vlong	doffset;	/* plan9 offset when reading directory */
140*25210b06SDavid du Colombier 	Drec	d;
141*25210b06SDavid du Colombier };
142