#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];
};
struct
{
uchar r_pad[24];
uchar r_flags;
};
};
struct Isofile
{
short fmt; /* 'z' if iso, 'r' if high sierra */
short blksize;
vlong offset; /* true offset when reading directory */
long odelta; /* true size of directory just read */
vlong doffset; /* plan9 offset when reading directory */
Drec d;
};
|