dosfs.h 1.4 KB

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