#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; | |
}; |