Subversion Repositories planix.SVN

Rev

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

typedef struct Dosboot          Dosboot;
typedef struct Dosboot32        Dosboot32;
typedef struct Dosbpb           Dosbpb;
typedef struct Dosdir           Dosdir;
typedef struct Dospart          Dospart;
typedef struct Dosptr           Dosptr;
typedef struct Fatinfo          Fatinfo;
typedef struct Xfs              Xfs;
typedef struct Xfile            Xfile;

struct Dospart{
        uchar   active;
        uchar   hstart;
        uchar   cylstart[2];
        uchar   type;
        uchar   hend;
        uchar   cylend[2];
        uchar   start[4];
        uchar   length[4];
};

enum
{
        /*
         * dos partition types
         */
        FAT12           = 0x01,
        FAT16           = 0x04,         /* partitions smaller than 32MB */
        FATHUGE         = 0x06,         /* fat16 partitions larger than 32MB */
        FAT32           = 0x0b,
        FAT32X          = 0x0c,
        FATHUGEX        = 0x0e,
        DMDDO           = 0x54,

        FATRESRV        = 2,            /* number of reserved fat entries */
};

/*
 * dos boot sector, the start of every dos partition
 */
struct Dosboot{
        uchar   magic[3];
        uchar   version[8];
        uchar   sectsize[2];
        uchar   clustsize;
        uchar   nresrv[2];
        uchar   nfats;
        uchar   rootsize[2];
        uchar   volsize[2];
        uchar   mediadesc;
        uchar   fatsize[2];
        uchar   trksize[2];
        uchar   nheads[2];
        uchar   nhidden[4];
        uchar   bigvolsize[4];          /* same as Dosboot32 up to here */
        uchar   driveno;
        uchar   reserved0;
        uchar   bootsig;
        uchar   volid[4];
        uchar   label[11];
        uchar   reserved1[8];
};

/*
 * dos boot sector for FAT32
 */
enum
{
        NOFATMIRROR     = 0x0080,       /* masks for extflags */
        ACTFATMASK      = 0x000f,
};

struct Dosboot32{
        uchar   magic[3];
        uchar   version[8];
        uchar   sectsize[2];
        uchar   clustsize;
        uchar   nresrv[2];
        uchar   nfats;
        uchar   rootsize[2];
        uchar   volsize[2];
        uchar   mediadesc;
        uchar   fatsize[2];
        uchar   trksize[2];
        uchar   nheads[2];
        uchar   nhidden[4];
        uchar   bigvolsize[4];          /* same as Dosboot up to here */
        uchar   fatsize32[4];           /* sectors per fat */
        uchar   extflags[2];            /* active fat flags */
        uchar   version1[2];            /* fat32 version; major & minor bytes */
        uchar   rootstart[4];           /* starting cluster of root dir */
        uchar   infospec[2];            /* fat allocation info sector */
        uchar   backupboot[2];          /* backup boot sector */
        uchar   reserved[12];
};

/*
 * optional FAT32 info sector
 */
enum
{
        FATINFOSIG1     = 0x41615252UL,
        FATINFOSIG      = 0x61417272UL,
};

struct Fatinfo
{
        uchar   sig1[4];
        uchar   pad[480];
        uchar   sig[4];
        uchar   freeclust[4];   /* num frre clusters; -1 is unknown */
        uchar   nextfree[4];    /* most recently allocated cluster */
        uchar   resrv[4*3];
};

/*
 * BIOS paramater block
 */
struct Dosbpb{
        MLock;                          /* access to fat */
        int     sectsize;               /* in bytes */
        int     clustsize;              /* in sectors */
        int     nresrv;                 /* sectors */
        int     nfats;                  /* usually 2; modified to 1 if fat mirroring disabled */
        int     rootsize;               /* number of entries, for fat12 and fat16 */
        long    volsize;                /* in sectors */
        int     mediadesc;
        long    fatsize;                /* in sectors */
        int     fatclusters;
        int     fatbits;                /* 12, 16, or 32 */
        long    fataddr;                /* sector number of first valid fat entry */
        long    rootaddr;               /* for fat16 or fat12, sector of root dir */
        long    rootstart;              /* for fat32, cluster of root dir */
        long    dataaddr;               /* initial sector of data clusters */
        long    freeptr;                /* next free cluster candidate */
        long    freeclusters;           /* count of free clusters, for fat32 */
        int     fatinfo;                /* fat info sector location; 0 => none */
};

enum
{
        DOSDIRSIZE      = 32,
        DOSEMPTY        = 0xe5,                 /* first char in name if entry is unused */
        DOSRUNE         = 13,                   /* runes per dosdir in a long file name */
        DOSNAMELEN      = 261                   /* max dos file name length */
};

struct Dosdir{
        uchar   name[8];
        uchar   ext[3];
        uchar   attr;
        uchar   reserved[1];
        uchar   ctime[3];               /* creation time */
        uchar   cdate[2];               /* creation date */
        uchar   adate[2];               /* last access date */
        uchar   hstart[2];              /* high bits of start for fat32 */
        uchar   time[2];                /* last modified time */
        uchar   date[2];                /* last modified date */
        uchar   start[2];
        uchar   length[4];
};

enum
{
        DRONLY          = 0x01,
        DHIDDEN         = 0x02,
        DSYSTEM         = 0x04,
        DVLABEL         = 0x08,
        DDIR            = 0x10,
        DARCH           = 0x20,
};

#define GSHORT(p)       (((p)[0])|(p)[1]<<8)
#define GLONG(p)        (((long)(p)[0])|(p)[1]<<8|(p)[2]<<16|(p)[3]<<24)
#define PSHORT(p,v)     ((p)[0]=(v),(p)[1]=(v)>>8)
#define PLONG(p,v)      ((p)[0]=(v),(p)[1]=(v)>>8,(p)[2]=(v)>>16,(p)[3]=(v)>>24)

struct Dosptr{
        ulong   addr;           /* sector & entry within of file's directory entry */
        ulong   offset;
        ulong   paddr;          /* of parent's directory entry */
        ulong   poffset;
        ulong   iclust;         /* ordinal within file */
        ulong   clust;
        ulong   naddr;          /* next block in directory (for writing multi entry elements) */
        ulong   prevaddr;
        Iosect *p;
        Dosdir *d;
};

#define QIDPATH(p)      ((p)->addr*(Sectorsize/DOSDIRSIZE) + \
                         (p)->offset/DOSDIRSIZE)

struct Xfs{
        Xfs     *next;
        int omode;              /* of file containing external fs */
        char    *name;          /* of file containing external f.s. */
        Qid     qid;            /* of file containing external f.s. */
        long    ref;            /* attach count */
        Qid     rootqid;        /* of plan9 constructed root directory */
        uchar   isfat32;        /* is a fat 32 file system? */
        short   dev;
        short   fmt;
        long    offset;
        void    *ptr;
};

struct Xfile{
        Xfile   *next;          /* in hash bucket */
        long    fid;
        ulong   flags;
        Qid     qid;
        Xfs     *xf;
        Dosptr  *ptr;
};

enum{
        Asis, Clean, Clunk
};

enum{
        Invalid, Short, ShortLower, Long
};

enum{   /* Xfile flags */
        Oread = 1,
        Owrite = 2,
        Orclose = 4,
        Omodes = 3,
};

enum{
        Enevermind,
        Eformat,
        Eio,
        Enoauth,
        Enomem,
        Enonexist,
        Eperm,
        Enofilsys,
        Eauth,
        Econtig,
        Ebadfcall,
        Ebadstat,
        Eversion,
        Etoolong,
        Eerrstr,
        ESIZE
};

extern int      chatty;
extern int      errno;
extern int      readonly;
extern char     *deffile;
extern int trspaces;

Generated by GNU Enscript 1.6.6.