adf_blk.h
上传用户:hy_wanghao
上传日期:2007-01-08
资源大小:279k
文件大小:6k
源码类别:

Shell编程

开发平台:

Visual C++

  1. /*
  2.  *  ADF Library. (C) 1997-1999 Laurent Clevy
  3.  *
  4.  *  adf_blk.h
  5.  *
  6.  *  general blocks structures
  7.  */
  8. #ifndef ADF_BLK_H
  9. #define ADF_BLK_H 1
  10. #define ULONG   unsigned long
  11. #define USHORT  unsigned short
  12. #define UCHAR   unsigned char
  13. #define LOGICAL_BLOCK_SIZE    512
  14. /* ----- FILE SYSTEM ----- */
  15. #define FSMASK_FFS         1
  16. #define FSMASK_INTL        2
  17. #define FSMASK_DIRCACHE    4
  18. #define isFFS(c)           ((c)&FSMASK_FFS)
  19. #define isOFS(c)           (!((c)&FSMASK_FFS))
  20. #define isINTL(c)          ((c)&FSMASK_INTL)
  21. #define isDIRCACHE(c)      ((c)&FSMASK_DIRCACHE)
  22. /* ----- ENTRIES ----- */
  23. /* access constants */
  24. #define ACCMASK_D (1<<0)
  25. #define ACCMASK_E (1<<1)
  26. #define ACCMASK_W (1<<2)
  27. #define ACCMASK_R (1<<3)
  28. #define ACCMASK_A (1<<4)
  29. #define ACCMASK_P (1<<5)
  30. #define ACCMASK_S (1<<6)
  31. #define ACCMASK_H (1<<7)
  32. #define hasD(c)    ((c)&ACCMASK_D)
  33. #define hasE(c)    ((c)&ACCMASK_E)
  34. #define hasW(c)    ((c)&ACCMASK_W)
  35. #define hasR(c)    ((c)&ACCMASK_R)
  36. #define hasA(c)    ((c)&ACCMASK_A)
  37. #define hasP(c)    ((c)&ACCMASK_P)
  38. #define hasS(c)    ((c)&ACCMASK_S)
  39. #define hasH(c)    ((c)&ACCMASK_H)
  40. /* ----- BLOCKS ----- */
  41. /* block constants */
  42. #define BM_VALID -1
  43. #define BM_INVALID 0
  44. #define HT_SIZE 72
  45. #define BM_SIZE     25
  46. #define MAX_DATABLK 72
  47. #define MAXNAMELEN 30
  48. #define MAXCMMTLEN 79
  49. /* block primary and secondary types */
  50. #define T_HEADER 2
  51. #define ST_ROOT 1
  52. #define ST_DIR 2
  53. #define ST_FILE -3
  54. #define ST_LFILE -4
  55. #define ST_LDIR 4
  56. #define ST_LSOFT 3
  57. #define T_LIST 16
  58. #define T_DATA 8
  59. #define T_DIRC 33
  60. /*--- blocks structures --- */
  61. struct bBootBlock {
  62. /*000*/ char dosType[4];
  63. /*004*/ ULONG checkSum;
  64. /*008*/ long rootBlock;
  65. /*00c*/ UCHAR data[500+512];
  66. };
  67. struct bRootBlock {
  68. /*000*/ long type;
  69.         long headerKey;
  70.         long highSeq;
  71. /*00c*/ long hashTableSize;
  72.         long firstData;
  73. /*014*/ ULONG checkSum;
  74. /*018*/ long hashTable[HT_SIZE]; /* hash table */
  75. /*138*/ long bmFlag; /* bitmap flag, -1 means VALID */
  76. /*13c*/ long bmPages[BM_SIZE];
  77. /*1a0*/ long bmExt;
  78. /*1a4*/ long cDays;  /* creation date FFS and OFS */
  79. /*1a8*/ long cMins;
  80. /*1ac*/ long cTicks;
  81. /*1b0*/ char nameLen;
  82. /*1b1*/ char  diskName[MAXNAMELEN+1];
  83.         char r2[8];
  84. /*1d8*/ long days; /* last access : days after 1 jan 1978 */
  85. /*1dc*/ long mins; /* hours and minutes in minutes */
  86. /*1e0*/ long ticks; /* 1/50 seconds */
  87. /*1e4*/ long coDays; /* creation date OFS */
  88. /*1e8*/ long coMins;
  89. /*1ec*/ long coTicks;
  90.         long nextSameHash; /* == 0 */
  91.         long parent; /* == 0 */
  92. /*1f8*/ long extension; /* FFS: first directory cache block */
  93. /*1fc*/ long secType; /* == 1 */
  94. };
  95. struct bFileHeaderBlock {
  96. /*000*/ long type; /* == 2 */
  97. /*004*/ long headerKey; /* current block number */
  98. /*008*/ long highSeq; /* number of data block in this hdr block */
  99. /*00c*/ long dataSize; /* == 0 */
  100. /*010*/ long firstData;
  101. /*014*/ ULONG checkSum;
  102. /*018*/ long dataBlocks[MAX_DATABLK];
  103. /*138*/ long r1;
  104. /*13c*/ long r2;
  105. /*140*/ long access; /* bit0=del, 1=modif, 2=write, 3=read */
  106. /*144*/ unsigned long byteSize;
  107. /*148*/ char commLen;
  108. /*149*/ char comment[MAXCMMTLEN+1];
  109.         char r3[91-(MAXCMMTLEN+1)];
  110. /*1a4*/ long days;
  111. /*1a8*/ long mins;
  112. /*1ac*/ long ticks;
  113. /*1b0*/ char nameLen;
  114. /*1b1*/ char fileName[MAXNAMELEN+1];
  115.         long r4;
  116. /*1d4*/ long real; /* unused == 0 */
  117. /*1d8*/ long nextLink; /* link chain */
  118.         long r5[5];
  119. /*1f0*/ long nextSameHash; /* next entry with sane hash */
  120. /*1f4*/ long parent; /* parent directory */
  121. /*1f8*/ long extension; /* pointer to extension block */
  122. /*1fc*/ long secType; /* == -3 */
  123. };
  124. /*--- file header extension block structure ---*/
  125. struct bFileExtBlock {
  126. /*000*/ long type; /* == 0x10 */
  127. /*004*/ long headerKey;
  128. /*008*/ long highSeq;
  129. /*00c*/ long dataSize; /* == 0 */
  130. /*010*/ long firstData; /* == 0 */
  131. /*014*/ ULONG checkSum;
  132. /*018*/ long dataBlocks[MAX_DATABLK];
  133.         long r[45];
  134.         long info; /* == 0 */
  135.         long nextSameHash; /* == 0 */
  136. /*1f4*/ long parent; /* header block */
  137. /*1f8*/ long extension; /* next header extension block */
  138. /*1fc*/ long secType; /* -3 */
  139. };
  140. struct bDirBlock {
  141. /*000*/ long type; /* == 2 */
  142. /*004*/ long headerKey;
  143. /*008*/ long highSeq; /* == 0 */
  144. /*00c*/ long hashTableSize; /* == 0 */
  145.         long r1; /* == 0 */
  146. /*014*/ ULONG checkSum;
  147. /*018*/ long hashTable[HT_SIZE]; /* hash table */
  148.         long r2[2];
  149. /*140*/ long access;
  150.         long r4; /* == 0 */
  151. /*148*/ char commLen;
  152. /*149*/ char comment[MAXCMMTLEN+1];
  153.         char r5[91-(MAXCMMTLEN+1)];
  154. /*1a4*/ long days; /* last access */
  155. /*1a8*/ long mins;
  156. /*1ac*/ long ticks;
  157. /*1b0*/ char nameLen;
  158. /*1b1*/ char  dirName[MAXNAMELEN+1];
  159.         long r6;
  160. /*1d4*/ long real; /* ==0 */
  161. /*1d8*/ long nextLink; /* link list */
  162.         long r7[5];
  163. /*1f0*/ long nextSameHash;
  164. /*1f4*/ long parent;
  165. /*1f8*/ long extension; /* FFS : first directory cache */
  166. /*1fc*/ long secType; /* == 2 */
  167. };
  168. struct bOFSDataBlock{
  169. /*000*/ long type; /* == 8 */
  170. /*004*/ long headerKey; /* pointer to file_hdr block */
  171. /*008*/ long seqNum; /* file data block number */
  172. /*00c*/ long dataSize; /* <= 0x1e8 */
  173. /*010*/ long nextData; /* next data block */
  174. /*014*/ ULONG checkSum;
  175. /*018*/ UCHAR data[488];
  176. /*200*/ };
  177. /* --- bitmap --- */
  178. struct bBitmapBlock {
  179. /*000*/ ULONG checkSum;
  180. /*004*/ ULONG map[127];
  181. };
  182. struct bBitmapExtBlock {
  183. /*000*/ long bmPages[127];
  184. /*1fc*/ long nextBlock;
  185. };
  186. struct bLinkBlock {
  187. /*000*/ long type; /* == 2 */
  188. /*004*/ long headerKey; /* self pointer */
  189.         long r1[3];
  190. /*014*/ ULONG checkSum;
  191. /*018*/ char realName[64];
  192.         long r2[83];
  193. /*1a4*/ long days; /* last access */
  194. /*1a8*/ long mins;
  195. /*1ac*/ long ticks;
  196. /*1b0*/ char nameLen;
  197. /*1b1*/ char  name[MAXNAMELEN+1];
  198.         long r3;
  199. /*1d4*/ long realEntry;
  200. /*1d8*/ long nextLink;
  201.         long r4[5];
  202. /*1f0*/ long nextSameHash;
  203. /*1f4*/ long parent;
  204.         long r5;
  205. /*1fc*/ long secType; /* == -4, 4, 3 */
  206. };
  207. /*--- directory cache block structure ---*/
  208. struct bDirCacheBlock {
  209. /*000*/ long type; /* == 33 */
  210. /*004*/ long headerKey;
  211. /*008*/ long parent;
  212. /*00c*/ long recordsNb;
  213. /*010*/ long nextDirC;
  214. /*014*/ ULONG checkSum;
  215. /*018*/ unsigned char records[488];
  216. };
  217. #endif /* ADF_BLK_H */
  218. /*##########################################################################*/