/*
* ISO 9660 CD format
*/
#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 {
BootIso = 0,
PrimaryIso = 1,
SupplementaryIso = 2,
PartitionIso = 3,
TerminatorIso = 255,
};
enum {
Cdsec = 2048,
Maxname = 256,
};
union Voldesc { /* volume descriptor */
uchar byte[Cdsec];
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;
};
|