1 typedef struct Dosboot Dosboot; 2 typedef struct Dos Dos; 3 typedef struct Dosdir Dosdir; 4 typedef struct Dosfile Dosfile; 5 typedef struct Dospart Dospart; 6 7 struct Dospart 8 { 9 uchar flag; /* active flag */ 10 uchar shead; /* starting head */ 11 uchar scs[2]; /* starting cylinder/sector */ 12 uchar type; /* partition type */ 13 uchar ehead; /* ending head */ 14 uchar ecs[2]; /* ending cylinder/sector */ 15 uchar start[4]; /* starting sector */ 16 uchar len[4]; /* length in sectors */ 17 }; 18 19 #define FAT12 0x01 20 #define FAT16 0x04 21 #define FATHUGE 0x06 22 #define DMDDO 0x54 23 24 struct Dosboot{ 25 uchar magic[3]; 26 uchar version[8]; 27 uchar sectsize[2]; 28 uchar clustsize; 29 uchar nresrv[2]; 30 uchar nfats; 31 uchar rootsize[2]; 32 uchar volsize[2]; 33 uchar mediadesc; 34 uchar fatsize[2]; 35 uchar trksize[2]; 36 uchar nheads[2]; 37 uchar nhidden[4]; 38 uchar bigvolsize[4]; 39 uchar driveno; 40 uchar reserved0; 41 uchar bootsig; 42 uchar volid[4]; 43 uchar label[11]; 44 uchar reserved1[8]; 45 }; 46 47 struct Dosfile{ 48 Dos *dos; /* owning dos file system */ 49 char name[8]; 50 char ext[3]; 51 uchar attr; 52 long length; 53 long pstart; /* physical start cluster address */ 54 long pcurrent; /* physical current cluster address */ 55 long lcurrent; /* logical current cluster address */ 56 long offset; 57 }; 58 59 struct Dos{ 60 int dev; /* device id */ 61 long (*read)(int, void*, long); /* read routine */ 62 long (*seek)(int, long); /* seek routine */ 63 64 int start; /* start of file system */ 65 int sectsize; /* in bytes */ 66 int clustsize; /* in sectors */ 67 int clustbytes; /* in bytes */ 68 int nresrv; /* sectors */ 69 int nfats; /* usually 2 */ 70 int rootsize; /* number of entries */ 71 int volsize; /* in sectors */ 72 int mediadesc; 73 int fatsize; /* in sectors */ 74 int fatclusters; 75 int fatbits; /* 12 or 16 */ 76 long fataddr; /* sector number */ 77 long rootaddr; 78 long dataaddr; 79 long freeptr; 80 81 Dosfile root; 82 }; 83 84 struct Dosdir{ 85 uchar name[8]; 86 uchar ext[3]; 87 uchar attr; 88 uchar reserved[10]; 89 uchar time[2]; 90 uchar date[2]; 91 uchar start[2]; 92 uchar length[4]; 93 }; 94 95 #define DRONLY 0x01 96 #define DHIDDEN 0x02 97 #define DSYSTEM 0x04 98 #define DVLABEL 0x08 99 #define DDIR 0x10 100 #define DARCH 0x20 101 102 extern int chatty; 103 104 extern int dosboot(Dos*, char*); 105 extern int dosinit(Dos*, int, int); 106 extern long dosread(Dosfile*, void*, long); 107 extern int dosstat(Dos*, char*, Dosfile*); 108 extern int doswalk(Dosfile*, char*); 109 110 extern int plan9ini(Dos*, char*); 111