Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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