home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / misc / isam / isamglob.d < prev    next >
Encoding:
Modula Definition  |  1991-11-22  |  7.1 KB  |  177 lines

  1. DEFINITION MODULE IsamGlobals;
  2.  
  3. (*                             Von Michael H.                               *)
  4. (*  portiert nach M-2 August '91 von Christian Felsch und Peter Oleski.     *)       
  5. (*  Diese ISAM ist Public Domain und darf von jedem für zivile Aufgaben     *)
  6. (*  benutzt werden. Eine Nutzung für militärische Zwecke ist untersagt !    *)
  7. (*                         Diese ISAM ist Peace-Ware !                      *)
  8. (*                         ---------------------------                      *)
  9. (*  Diese ISAM darf verändert und erweitert werden. Bei guten Erweiterungen *)
  10. (*  und Fehlern benachrichtigung bitte an uns senden.                       *)
  11. (*  Die ISAM hat unsere Platte NICHT zerstört aber wir übernehmen keine     *)
  12. (*  Verantwortung für nichts.                                               *)
  13. (*  Wir bitten aber, falls diese ISAM einmal eine Verwendung findet, uns    *)
  14. (*  mit dem Satz ' ISAM by Jau-Team ' zu erwähnen.                          *)
  15. (*  Wird mit dieser Bibliothek ein kommerzielles Programm erstellt, so ist  *)
  16. (*  uns ein kostenloses Exemplar zuzusenden                                 *)
  17. (*  Zu erreichen unter:                                                     *)
  18. (*                                                                          *)
  19. (*      E-Mail: Peter Oleski        oder   Christian Felsch @ HH (MausNet)  *)
  20. (*  gelbe Post: Eißendorfergrenzweg 83a     Bevenser Weg 18                 *)
  21. (*                             2100 Hamburg 90                              *)
  22.  
  23.  
  24.  (* Modul mit allen Konstanten und Type für ISAM sowie der   *)
  25.  (* Prozeduren zur Verwaltung des Status-Headers der Dateien *)
  26.  
  27.  (*  I  : Eingabewerte vom Benutzer                       *)
  28.  (*  o  : nur interne Statusinformationen werden geändert *)
  29.  (*  O  : relevante Informationen werden zurückgeliefert  *)
  30.  
  31.  
  32.  FROM SYSTEM    IMPORT ADDRESS, BYTE;
  33.  FROM Files     IMPORT File;
  34.   
  35.  
  36.  CONST Order          = 64;    (* Ordnung des B+Tree *)
  37.        PageSize       = 2 * Order;  
  38.        PageStackSize  = 32;    (* Anzahl der B+Tree Seiten im Cache *)
  39.        MaxHeight      = 8;     (* Maximale Höhe des B+Tree *)
  40.        MaxDataRecSize = 10240; (* Maximale Gröβe eines Datensatzes in Bytes *)
  41.        MaxKeyLen      = 16;    (* Maximale Länge eines Indexeintrags *)
  42.  
  43.        FileHeaderSize = 19;
  44.        MinDataRecSize = FileHeaderSize;
  45.        RestartCode    = 200;
  46.  
  47.        RecTooLargeError     = 10; (* selbstdefinierte FehlerCodes   *)
  48.        RecTooSmallError     = 11;
  49.        RecSizeMismatchError = 12;
  50.        KeyTooLargeError     = 13;
  51.        KeySizeMismatchError = 14;
  52.  
  53.        True                 = 'T';           (* Für einen Boolean, der *)
  54.        False                = 'F';           (* nur ein Byte lang ist  *)
  55.                                              (*  echt heftig           *)
  56.  
  57.  TYPE  IndexType      = (Singles, Dups, AutoInc); (* siehe 'Readme' File *)
  58.  
  59.        FixFile        = RECORD                         (* Aufbau Datendateien *)
  60.                          DosDatei    : File;
  61.                          NumRec      : LONGINT;
  62.                          FirstFree   : LONGINT;
  63.                          NumberFree  : LONGINT;
  64.                          Int1        : LONGINT;
  65.                          ItemSize    : CARDINAL;
  66.                          Integritaet : CHAR;
  67.                          Zaehler     : CARDINAL;
  68.                          CheckSum1   : CHAR;
  69.                          CheckSum2   : CHAR;
  70.                         END(*RECORD*);
  71.  
  72.       IsamKeyStr      = ARRAY [0..MaxKeyLen] OF CHAR;            (* Schlüssel *)
  73.  
  74.       Item            = RECORD                            (* Eintrag der Page *)
  75.                          DataRef, 
  76.                          PageRef : LONGINT;
  77.                          Key     : IsamKeyStr;
  78.                         END(*RECORD*);
  79.  
  80.       Page            = RECORD                          (* Element des B+Tree *)
  81.                          ItemsOnPage : INTEGER[0..PageSize];
  82.                          BckwPageRef : LONGINT;
  83.                          ItemArray   : ARRAY [1..PageSize] OF Item;
  84.                         END(*RECORD*);
  85.  
  86.       PagePtr         = POINTER TO Page;
  87.   
  88.       TaSearchStep    = RECORD
  89.                          PageRef,
  90.                          ItemArrIndex : LONGINT;
  91.                         END(*RECORD*);
  92.  
  93.       Path            = ARRAY [1..MaxHeight] OF TaSearchStep;
  94.   
  95.       IdxFile         = RECORD                         (* Aufbau Indexdateien *)
  96.                          DataF       : FixFile;
  97.                          Typ         : IndexType;
  98.                          KeyL        : BYTE;
  99.                          WurzelDsNr,
  100.                          SeitenDsNr  : LONGINT;
  101.                          Pfad        : Path;
  102.                         END(*RECORD*);
  103.  
  104.       IndexFilePtr    = POINTER TO IdxFile;
  105.  
  106.       TaStackRec      = RECORD
  107.                          Seite     : Page;
  108.                          IndexFPtr : IndexFilePtr;
  109.                          PageRef   : LONGINT;
  110.                          Updated   : CHAR;
  111.                         END(*RECORD*);
  112.  
  113.       TaStackRecPtr   = POINTER TO TaStackRec;
  114.  
  115.       TaPageStack     = ARRAY [1..PageStackSize] OF TaStackRecPtr;
  116.  
  117.       TaPageStackPtr  = POINTER TO TaPageStack;
  118.  
  119.       TaPageMap       = ARRAY [1..PageStackSize] OF CARDINAL;
  120.  
  121.       TaPageMapPtr    = POINTER TO TaPageMap;
  122.  
  123.       TaRecordBuffer  = RECORD
  124.                          CASE :INTEGER OF
  125.                           0 : Seite : TaStackRec; |
  126.                           1 : R : ARRAY [1..MaxDataRecSize] OF BYTE;|
  127.                           2 : I : LONGINT;|
  128.                          END(*CASE*);
  129.                         END(*RECORD*);
  130.  
  131.       TaRecordBufPtr  = POINTER TO TaRecordBuffer;
  132.  
  133.       Profile         = RECORD 
  134.                          Handle : BYTE;
  135.                          Lg     : CARDINAL;
  136.                         END(*RECORD*);
  137.  
  138.  
  139.  VAR ErrorCode : INTEGER;
  140.      TaRecBuf  : TaRecordBufPtr;
  141.  
  142.  
  143.  PROCEDURE CreateHeader(VAR DatF      : FixFile;        (* O *)
  144.                             RecLen    : CARDINAL;       (* I *)
  145.                             ZaehlStart: CARDINAL);      (* I *)
  146.                             
  147.   (* Kreiert neun Status-Header für eine Datendatei und schreibt ihn *)
  148.  
  149.  
  150.  PROCEDURE ReadHeader(VAR DatF     : FixFile;           (* O *)
  151.                           MaxCount : CARDINAL);         (* I *)
  152.  
  153.   (* Liest den Status-Header einer Datendatei ein *)
  154.   
  155.  
  156.  PROCEDURE PutHeader(VAR DatF: FixFile);                (* I/o *) 
  157.   (* Schreibt den Status-Header in eine Datendatei *)
  158.   
  159.   
  160.  PROCEDURE FileUpdated(VAR DatF: FixFile);              (* I/o *)
  161.  
  162.   (* Updated eine Dateindatei, wenn noch nicht alles gesichert *)
  163.   (* wurde. ( Siehe auch <Flush> ) *)
  164.   
  165.  
  166.  PROCEDURE CloseInternFile(VAR DatF: FixFile);          (* I/o *)
  167.  
  168.   (* Schließt Datendatei *)
  169.  
  170.  
  171. (*---------------------------------------------------------------------------*)
  172.  
  173.  PROCEDURE Move(Quelle, Ziel: ADDRESS; Anzahl: LONGCARD);
  174.  
  175.   (* Kopiert <Anzahl> Bytes von <Quelle> nach <Ziel>  *)
  176.  
  177. END IsamGlobals.