1*74a4d8c2SCharles.Forsyth typedef struct Dosboot Dosboot; 2*74a4d8c2SCharles.Forsyth typedef struct Dos Dos; 3*74a4d8c2SCharles.Forsyth typedef struct Dosdir Dosdir; 4*74a4d8c2SCharles.Forsyth typedef struct Dosfile Dosfile; 5*74a4d8c2SCharles.Forsyth typedef struct Dospart Dospart; 6*74a4d8c2SCharles.Forsyth 7*74a4d8c2SCharles.Forsyth struct Dospart 8*74a4d8c2SCharles.Forsyth { 9*74a4d8c2SCharles.Forsyth uchar flag; /* active flag */ 10*74a4d8c2SCharles.Forsyth uchar shead; /* starting head */ 11*74a4d8c2SCharles.Forsyth uchar scs[2]; /* starting cylinder/sector */ 12*74a4d8c2SCharles.Forsyth uchar type; /* partition type */ 13*74a4d8c2SCharles.Forsyth uchar ehead; /* ending head */ 14*74a4d8c2SCharles.Forsyth uchar ecs[2]; /* ending cylinder/sector */ 15*74a4d8c2SCharles.Forsyth uchar start[4]; /* starting sector */ 16*74a4d8c2SCharles.Forsyth uchar len[4]; /* length in sectors */ 17*74a4d8c2SCharles.Forsyth }; 18*74a4d8c2SCharles.Forsyth 19*74a4d8c2SCharles.Forsyth #define FAT12 0x01 20*74a4d8c2SCharles.Forsyth #define FAT16 0x04 21*74a4d8c2SCharles.Forsyth #define EXTEND 0x05 22*74a4d8c2SCharles.Forsyth #define FATHUGE 0x06 23*74a4d8c2SCharles.Forsyth #define FAT32 0x0b 24*74a4d8c2SCharles.Forsyth #define FAT32X 0x0c 25*74a4d8c2SCharles.Forsyth #define EXTHUGE 0x0f 26*74a4d8c2SCharles.Forsyth #define DMDDO 0x54 27*74a4d8c2SCharles.Forsyth #define PLAN9 0x39 28*74a4d8c2SCharles.Forsyth #define LEXTEND 0x85 29*74a4d8c2SCharles.Forsyth 30*74a4d8c2SCharles.Forsyth struct Dosfile{ 31*74a4d8c2SCharles.Forsyth Dos *dos; /* owning dos file system */ 32*74a4d8c2SCharles.Forsyth char name[8]; 33*74a4d8c2SCharles.Forsyth char ext[3]; 34*74a4d8c2SCharles.Forsyth uchar attr; 35*74a4d8c2SCharles.Forsyth long length; 36*74a4d8c2SCharles.Forsyth long pstart; /* physical start cluster address */ 37*74a4d8c2SCharles.Forsyth long pcurrent; /* physical current cluster address */ 38*74a4d8c2SCharles.Forsyth long lcurrent; /* logical current cluster address */ 39*74a4d8c2SCharles.Forsyth long offset; 40*74a4d8c2SCharles.Forsyth }; 41*74a4d8c2SCharles.Forsyth 42*74a4d8c2SCharles.Forsyth struct Dos{ 43*74a4d8c2SCharles.Forsyth long start; /* start of file system */ 44*74a4d8c2SCharles.Forsyth int sectsize; /* in bytes */ 45*74a4d8c2SCharles.Forsyth int clustsize; /* in sectors */ 46*74a4d8c2SCharles.Forsyth int clustbytes; /* in bytes */ 47*74a4d8c2SCharles.Forsyth int nresrv; /* sectors */ 48*74a4d8c2SCharles.Forsyth int nfats; /* usually 2 */ 49*74a4d8c2SCharles.Forsyth int rootsize; /* number of entries */ 50*74a4d8c2SCharles.Forsyth int volsize; /* in sectors */ 51*74a4d8c2SCharles.Forsyth int mediadesc; 52*74a4d8c2SCharles.Forsyth int fatsize; /* in sectors */ 53*74a4d8c2SCharles.Forsyth int fatclusters; 54*74a4d8c2SCharles.Forsyth int fatbits; /* 12 or 16 */ 55*74a4d8c2SCharles.Forsyth long fataddr; /* sector number */ 56*74a4d8c2SCharles.Forsyth long rootaddr; 57*74a4d8c2SCharles.Forsyth long rootclust; 58*74a4d8c2SCharles.Forsyth long dataaddr; 59*74a4d8c2SCharles.Forsyth long freeptr; 60*74a4d8c2SCharles.Forsyth }; 61*74a4d8c2SCharles.Forsyth 62*74a4d8c2SCharles.Forsyth extern int dosinit(Fs*); 63