dat.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. enum {
  2. Maxtrack = 200,
  3. Ntrack = Maxtrack+1,
  4. BScdrom = 2048,
  5. BScdda = 2352,
  6. BScdxa = 2336,
  7. BSmax = 2352,
  8. Nalloc = 12*BScdda,
  9. DictBlock = 1,
  10. TypeDA = 0, /* Direct Access */
  11. TypeSA = 1, /* Sequential Access */
  12. TypeWO = 4, /* Worm */
  13. TypeCD = 5, /* CD-ROM */
  14. TypeMO = 7, /* rewriteable Magneto-Optical */
  15. TypeMC = 8, /* Medium Changer */
  16. TypeNone = 0,
  17. TypeAudio,
  18. TypeAwritable,
  19. TypeData,
  20. TypeDwritable,
  21. TypeDisk,
  22. TypeBlank,
  23. Cwrite = 1<<0,
  24. Ccdda = 1<<1,
  25. Nblock = 12,
  26. };
  27. typedef struct Buf Buf;
  28. typedef struct Drive Drive;
  29. typedef struct Track Track;
  30. typedef struct Otrack Otrack;
  31. typedef struct Dev Dev;
  32. typedef struct Msf Msf; /* minute, second, frame */
  33. struct Msf {
  34. int m;
  35. int s;
  36. int f;
  37. };
  38. struct Track
  39. {
  40. /* initialized while obtaining the toc (gettoc) */
  41. vlong size; /* total size in bytes */
  42. long bs; /* block size in bytes */
  43. ulong beg; /* beginning block number */
  44. ulong end; /* ending block number */
  45. int type;
  46. Msf mbeg;
  47. Msf mend;
  48. /* initialized by fs */
  49. char name[32];
  50. int mode;
  51. int mtime;
  52. };
  53. struct DTrack
  54. {
  55. uchar name[32];
  56. uchar beg[4];
  57. uchar end[4];
  58. uchar size[8];
  59. uchar magic[4];
  60. };
  61. struct Otrack
  62. {
  63. Track *track;
  64. Drive *drive;
  65. int nchange;
  66. int omode;
  67. Buf *buf;
  68. int nref; /* kept by file server */
  69. };
  70. struct Dev
  71. {
  72. Otrack* (*openrd)(Drive *d, int trackno);
  73. Otrack* (*create)(Drive *d, int bs);
  74. long (*read)(Otrack *t, void *v, long n, long off);
  75. long (*write)(Otrack *t, void *v, long n);
  76. void (*close)(Otrack *t);
  77. int (*gettoc)(Drive*);
  78. int (*fixate)(Drive *d);
  79. char* (*ctl)(Drive *d, int argc, char **argv);
  80. char* (*setspeed)(Drive *d, int r, int w);
  81. };
  82. struct Drive
  83. {
  84. QLock;
  85. Scsi;
  86. int type;
  87. int nopen;
  88. int firsttrack;
  89. int ntrack;
  90. int nchange;
  91. int changetime;
  92. int nameok;
  93. int writeok;
  94. Track track[Ntrack];
  95. ulong cap;
  96. uchar blkbuf[BScdda];
  97. int maxreadspeed;
  98. int maxwritespeed;
  99. int readspeed;
  100. int writespeed;
  101. Dev;
  102. void *aux; /* kept by driver */
  103. };
  104. struct Buf
  105. {
  106. uchar *data; /* buffer */
  107. long off; /* data[0] at offset off in file */
  108. int bs; /* block size */
  109. long ndata; /* no. valid bytes in data */
  110. int nblock; /* total buffer size in blocks */
  111. int omode; /* OREAD, OWRITE */
  112. long (*fn)(Buf*, void*, long, long); /* read, write */
  113. /* used only by client */
  114. Otrack *otrack;
  115. };
  116. extern int vflag;