| #define	VOLDESC	16	/* sector number */ | 
 |  | 
 | /* | 
 |  * L means little-endian, M means big-endian, and LM means little-endian | 
 |  * then again big-endian. | 
 |  */ | 
 | typedef uchar		Byte2L[2]; | 
 | typedef uchar		Byte2M[2]; | 
 | typedef uchar		Byte4LM[4]; | 
 | typedef uchar		Byte4L[4]; | 
 | typedef uchar		Byte4M[4]; | 
 | typedef uchar		Byte8LM[8]; | 
 | typedef union Drec	Drec; | 
 | typedef union Voldesc	Voldesc; | 
 |  | 
 | enum | 
 | { | 
 | 	Boot		= 0, | 
 | 	Primary		= 1, | 
 | 	Supplementary	= 2, | 
 | 	Partition	= 3, | 
 | 	Terminator	= 255 | 
 | }; | 
 |  | 
 | union	Voldesc | 
 | {			/* volume descriptor */ | 
 | 	uchar	byte[Sectorsize]; | 
 | 	union {			/* for CD001, the ECMA standard */ | 
 | 		struct | 
 | 		{ | 
 | 			uchar	type; | 
 | 			uchar	stdid[5]; | 
 | 			uchar	version; | 
 | 			uchar	unused; | 
 | 			uchar	sysid[32]; | 
 | 			uchar	bootid[32]; | 
 | 			uchar	data[1977]; | 
 | 		} boot; | 
 | 		struct | 
 | 		{ | 
 | 			uchar	type; | 
 | 			uchar	stdid[5]; | 
 | 			uchar	version; | 
 | 			uchar	flags; | 
 | 			uchar	sysid[32]; | 
 | 			uchar	volid[32]; | 
 | 			Byte8LM	partloc; | 
 | 			Byte8LM	size; | 
 | 			uchar	escapes[32]; | 
 | 			Byte4LM	vsetsize; | 
 | 			Byte4LM	vseqno; | 
 | 			Byte4LM	blksize; | 
 | 			Byte8LM	ptabsize; | 
 | 			Byte4L	lptable; | 
 | 			Byte4L	optlptable; | 
 | 			Byte4M	mptable; | 
 | 			Byte4M	optmptable; | 
 | 			uchar	rootdir[34]; | 
 | 			uchar	volsetid[128]; | 
 | 			uchar	pubid[128]; | 
 | 			uchar	prepid[128]; | 
 | 			uchar	appid[128]; | 
 | 			uchar	copyright[37]; | 
 | 			uchar	abstract[37]; | 
 | 			uchar	bibliography[37]; | 
 | 			uchar	cdate[17]; | 
 | 			uchar	mdate[17]; | 
 | 			uchar	expdate[17]; | 
 | 			uchar	effdate[17]; | 
 | 			uchar	fsversion; | 
 | 			uchar	unused3[1]; | 
 | 			uchar	appuse[512]; | 
 | 			uchar	unused4[653]; | 
 | 		} desc; | 
 | 	} z; | 
 | 	union | 
 | 	{			/* for CDROM, the `High Sierra' standard */ | 
 | 		struct | 
 | 		{ | 
 | 			Byte8LM	number; | 
 | 			uchar	type; | 
 | 			uchar	stdid[5]; | 
 | 			uchar	version; | 
 | 			uchar	flags; | 
 | 			uchar	sysid[32]; | 
 | 			uchar	volid[32]; | 
 | 			Byte8LM	partloc; | 
 | 			Byte8LM	size; | 
 | 			uchar	escapes[32]; | 
 | 			Byte4LM	vsetsize; | 
 | 			Byte4LM	vseqno; | 
 | 			Byte4LM	blksize; | 
 | 			uchar	quux[40]; | 
 | 			uchar	rootdir[34]; | 
 | 			uchar	volsetid[128]; | 
 | 			uchar	pubid[128]; | 
 | 			uchar	prepid[128]; | 
 | 			uchar	appid[128]; | 
 | 			uchar	copyright[32]; | 
 | 			uchar	abstract[32]; | 
 | 			uchar	cdate[16]; | 
 | 			uchar	mdate[16]; | 
 | 			uchar	expdate[16]; | 
 | 			uchar	effdate[16]; | 
 | 			uchar	fsversion; | 
 | 		} desc; | 
 | 	} r; | 
 | }; | 
 |  | 
 | union	Drec | 
 | { | 
 | 	struct | 
 | 	{ | 
 | 		uchar	reclen; | 
 | 		uchar	attrlen; | 
 | 		Byte8LM	addr; | 
 | 		Byte8LM	size; | 
 | 		uchar	date[6]; | 
 | 		uchar	tzone;		/* flags in high sierra */ | 
 | 		uchar	flags;		/* ? in high sierra */ | 
 | 		uchar	unitsize;	/* ? in high sierra */ | 
 | 		uchar	gapsize;	/* ? in high sierra */ | 
 | 		Byte4LM	vseqno;		/* ? in high sierra */ | 
 | 		uchar	namelen; | 
 | 		uchar	name[1]; | 
 | 	} z; | 
 | 	struct | 
 | 	{ | 
 | 		uchar	pad[24]; | 
 | 		uchar	flags; | 
 | 	} r; | 
 | }; | 
 |  | 
 | struct	Isofile | 
 | { | 
 | 	short	fmt;		/* 'z' if iso, 'r' if high sierra */ | 
 | 	short	blksize; | 
 | 	long	offset;		/* true offset when reading directory */ | 
 | 	long odelta;	/* true size of directory just read */ | 
 | 	long	doffset;	/* plan9 offset when reading directory */ | 
 | 	Drec	d; | 
 | }; |