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