BTREE.DEF 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. (*# call(o_a_size=>off) *)
  2. (*# call(o_a_copy=>off) *)
  3. (*# data(var_enum_size=>off) *)
  4. DEFINITION MODULE Btree;
  5. (*
  6. Copyright (C) 1988,1989,1990 Jensen & Partners International
  7. *)
  8. CONST
  9. MaxKeySize = 128;
  10. LockQSize = 20;
  11. TYPE
  12. AccessMode = (FixSize,Size16,Size32,NoDealoc,Compress);
  13. CmpRes = (Less,Eq,Greater);
  14. CompareFunction = PROCEDURE (ADDRESS,ADDRESS) : CmpRes;
  15. KeyFunction = PROCEDURE (ADDRESS,ADDRESS);
  16. FHandle = POINTER TO IndexFile;
  17. IHandle = RECORD
  18. ID : FHandle;
  19. In : CARDINAL;
  20. END;
  21. Errors = (OK, (* no error *)
  22. BadOpen, (* unable to open *)
  23. NoSlot, (* no slot available *)
  24. NotFHandle, (* not an FHandle *)
  25. NotIHandle, (* not an IHandle *)
  26. NotData, (* not a data file *)
  27. NotIndex, (* not an index file *)
  28. BadIndex, (* incorrect index *)
  29. BadSize, (* illegal size *)
  30. KeyTooBig, (* key size is too large *)
  31. ErrDupKey, (* duplicate key *)
  32. BadFree, (* deallocate not allowed *)
  33. BadRead, (* error during read *)
  34. BadWrite, (* error during write *)
  35. Locked, (* cannot acquire lock *)
  36. NotLocked, (* must already be locked *)
  37. FileError, (* file i/o error *)
  38. LockOverflow, (* too many locks *)
  39. UnknownError); (* other error *)
  40. (*# save *)
  41. (*# call(o_a_size=>on) *)
  42. ErrorProc = PROCEDURE(Errors,ARRAY OF CHAR);
  43. (*# restore *)
  44. VAR
  45. ErrorHandler : ErrorProc;
  46. CONST
  47. Null = IHandle(NIL,MAX(CARDINAL));
  48. PROCEDURE Open(Name: ARRAY OF CHAR; MaxIHandle: CARDINAL;
  49. AMode : AccessMode;
  50. readOnly,shared,Create: BOOLEAN): FHandle;
  51. PROCEDURE OpenData(F: FHandle; I,RecordSize: CARDINAL; New: BOOLEAN): IHandle;
  52. PROCEDURE OpenIndex(F: FHandle; D: IHandle; I: CARDINAL;
  53. CompFct: CompareFunction; KeyFct: KeyFunction;
  54. KeySize: CARDINAL; DupKey,New: BOOLEAN): IHandle;
  55. PROCEDURE Close(VAR F: FHandle);
  56. PROCEDURE FreeIHandle(VAR I: IHandle);
  57. PROCEDURE Flush(F: FHandle);
  58. PROCEDURE LastError (H: IHandle) : Errors;
  59. PROCEDURE LastFError(F: FHandle) : Errors;
  60. PROCEDURE Add (D: IHandle; Data: ARRAY OF BYTE; Length: CARDINAL);
  61. PROCEDURE AddIndex(I: IHandle; Key: ARRAY OF BYTE; DataLoc: LONGCARD);
  62. PROCEDURE Delete (D: IHandle);
  63. PROCEDURE DeleteIndex(I: IHandle; Key: ARRAY OF BYTE; DataLoc: LONGCARD);
  64. PROCEDURE Change(D: IHandle; Data: ARRAY OF BYTE; Length: CARDINAL);
  65. PROCEDURE Find (I: IHandle; Key: ARRAY OF BYTE;
  66. VAR Data: ARRAY OF BYTE): BOOLEAN;
  67. PROCEDURE FindIndex(I: IHandle; Key: ARRAY OF BYTE;
  68. VAR DataLoc: LONGCARD): BOOLEAN;
  69. PROCEDURE Search (I: IHandle; Key: ARRAY OF BYTE;
  70. VAR Data: ARRAY OF BYTE): BOOLEAN;
  71. PROCEDURE SearchIndex(I: IHandle; Key: ARRAY OF BYTE;
  72. VAR DataLoc: LONGCARD): BOOLEAN;
  73. PROCEDURE Next (I: IHandle; VAR Data: ARRAY OF BYTE): BOOLEAN;
  74. PROCEDURE NextIndex(I: IHandle; VAR DataLoc: LONGCARD): BOOLEAN;
  75. PROCEDURE Prev (I: IHandle; VAR Data: ARRAY OF BYTE): BOOLEAN;
  76. PROCEDURE PrevIndex(I: IHandle; VAR DataLoc: LONGCARD): BOOLEAN;
  77. PROCEDURE Reset (H: IHandle);
  78. PROCEDURE SetSyncMode(D: IHandle; On: BOOLEAN);
  79. PROCEDURE ClearIndex(VAR I: IHandle);
  80. PROCEDURE Release(H: IHandle);
  81. PROCEDURE Lock (F: FHandle; DataLoc: LONGCARD): BOOLEAN;
  82. PROCEDURE UnLock(F: FHandle; DataLoc: LONGCARD);
  83. PROCEDURE LockIHandle (H: IHandle): BOOLEAN;
  84. PROCEDURE UnLockIHandle(H: IHandle);
  85. PROCEDURE Allocate (F: FHandle; Length: LONGCARD) : LONGCARD;
  86. PROCEDURE DeAllocate(F: FHandle; Position: LONGCARD);
  87. PROCEDURE Read (F: FHandle; Position: LONGCARD; Length: CARDINAL;
  88. VAR Data: ARRAY OF BYTE);
  89. PROCEDURE Write(F: FHandle; Position: LONGCARD; Length: CARDINAL;
  90. Data: ARRAY OF BYTE);
  91. PROCEDURE LastRef(I : IHandle): LONGCARD;
  92. PROCEDURE RecordCount(I: IHandle): LONGCARD;
  93. (*# save,call(near_call=>on) *)
  94. VAR
  95. Packer : PROCEDURE(CARDINAL,ADDRESS,ADDRESS): CARDINAL;
  96. Unpacker : PROCEDURE(CARDINAL,ADDRESS,ADDRESS);
  97. UnpackedSize : PROCEDURE(CARDINAL,ADDRESS): CARDINAL;
  98. Packing : PROCEDURE(): BOOLEAN;
  99. AdjustBlock : PROCEDURE(CARDINAL): CARDINAL;
  100. (*# restore *)
  101. END Btree.
  102.