FATS - Fast Access Tree System
Inhaltsverzeichnis
Programmierschnittstellen
MS-Pascal für OS/2


Das nachfolgende Microsoft Pascal Beispiel demonstriert die Verwendung der von FATS bereitgestellten  Index-Befehle:

(*

   FATS 02.30
   (c) GCS Software, Udo Gertz 1993-1998

   Testprogramm (Microsoft Pascal, IBM Pascal)
 
   Datei KUNDEN.DAT re-indizieren

   19-03-2009 U.Gertz
*) 

program REBLDGER (input, output);


type

  kundenrec = record
      LOESCHKENNZ: char;
      ANREDE: lstring(5);
      NAME: lstring(25);
      BRANCHE: lstring(25);
      STRASSE: lstring(25);
      PLZ: lstring(5);
      ORT: lstring(20);
   end;


const

  fn_cust = 'KUNDEN.DAT';


var
  hKunden: file of kundenrec;
  kpuffer: kundenrec;
  szCmnd: lstring(255);
  szFATSkey: lstring(255);
  szRecno: lstring(8);
  uFATSError: word;
  dwFATSRecno: integer4;
  dwRecords: integer4;
  cChar: char;


       function FATSCALL (vars szCmnd: lstring; vars nErrorcode: word;
                          vars szReturnKey: lstring) : integer4; extern;


begin

  writeln;
  writeln ('Um Ihre Programme zu übersetzen ist eine der folgenden Methoden zu wählen: ');
  writeln;
  writeln ('  1. Methode: FATS an das Anwendungsprogramm binden ');
  writeln;
  writeln ('     PAS1 REBLDGER');
  writeln ('     PAS2');
  writeln ('     LINK REBLDGER FATS.OBJ FATS_MSP.OBJ');
  writeln;
  writeln ('  2. Methode: Aufruf der Dynamischen Bibliothek (DLL)');
  writeln;
  writeln ('     PAS1 REBLDGER');
  writeln ('     PAS2');
  writeln ('     LINK REBLDGER FATSMSPD.OBJ FATS_O16.LIB');
  writeln;
  writeln ('     oder wenn Sie die erweiterte Version von FATS besitzen:');
  writeln;
  writeln ('     LINK REBLDGER FATSMSPD.OBJ FATSXO16.LIB');
  writeln;
  writeln ('Bitte [ENTER] drücken...');
  writeln;
  read(cChar);


  (*
     -------> Aktivierung des FATS Cachesystems
   
     Standardmäßig ist die Cacheverwaltung ausgeschaltet. Sie können diese
     mit dem Befehl  "Y" Auto Refresh initialisieren.
   
     Mit diesem Befehl können Sie vor einer Reorganisation den FATS-Cache
     mittels "Y\5" oder "Y\106" einschalten, die entsprechende Indexdatei
     erzeugen oder öffnen und dann die Schlüssel einfügen.
     Nach Beenden der Reorganisation stellen Sie den ursprünglichen Zustand
     mit "Y\0", "Y\2" etc. wieder her. Die Operation kann dadurch im
     günstigsten Fall bis zu 30x schneller ablaufen.
   
     Bei der Einstellung "Y\5" werden die Daten nicht sofort nach jedem
     schreibenden Befehl auf die Platte geschrieben, sondern solange in den
     FATS internen Cachepuffern behalten, bis diese überlaufen. Beim ersten
     Schreibzugriff werden jedoch sämtliche zu der jeweiligen Datei gehörende
     Puffer auf die Platte geschrieben, wodurch die Integrität der Indexdatei
     garantiert wird. Das Zurückschreiben der Cachepuffer kann auch jederzeit
     durch den Befehl W (Write Page Map) erreicht werden.
   
     Diese Einstellung bringt im günstigsten Fall eine bis zu 30-fache
     Beschleunigung gegenüber den herkömmlichen Einstellungen ("Y\0" & "Y\2"),
     es muß jedoch selbst dafür gesorgt werden, daß die Indexdatei bei
     Beendigung des Programmes mit dem Befehl Close Indexfile (K) geschlossen
     wird.
   
     Als Äquivalent im Netzwerkbetrieb dient der Befehl "Y\106"
   

  *)  

  szCmnd:='Y\5';
  dwFATSRecno:=FATSCALL(szCmnd, uFATSError, szFATSkey);


  (*
     -------> Datendatei öffnen
  *) 

  assign  (hKunden, fn_cust);
  hKunden.mode:=direct;
  reset (hKunden);


  (*
     -------> Indexdatei erstellen
  *) 

  szCmnd:='C\KUNDEN.KEY\25\3\A\1';
  dwFATSRecno:=FATSCALL(szCmnd, uFATSError, szFATSkey);


  (*
     ========================================================================
               Indexdatei wiederherstellen
     ========================================================================
  *) 

  dwRecords:=0;

  repeat

    seek(hKunden, dwRecords + 1);
    get(hKunden);
    kpuffer:=hKunden^;

    If EOF( hKunden ) Then Begin

      break;
    End;

    dwRecords:=dwRecords + 1;

    If kpuffer.LOESCHKENNZ = ' ' Then Begin

      (*
          "BK" Build Keys
       
         Diesem Befehl wird die im Befehl Create Indexfile (C)
         angegebene Anzahl Schlüssel im Kommandostring übergeben.
         Die Schlüssel werden in die Indexdatei einsortiert und
         der Satznummer "RecNo" zugeordnet.
       
         Dieser Befehl entspricht dem Befehl Insert Keys (IK), die
         Daten werden jedoch nicht sofort nach dem Befehl auf die
         Platte geschrieben, sondern solange in den FATS internen
         Cachepuffern behalten, bis diese überlaufen.
       
         Der Aufbau des Kommandostrings:
       
           szCmnd = "BK\{RecNo}\{FileNo}\{KeyStr1}[\{KeyStr2}[\{KeyStr3}]]"
       
             RecNo      Datensatznummer
       
             FileNo     Nummer der Indexdatei
       
             KeyStr#    Schlüssel

      *)  

      szCmnd:='BK\';
      If encode(szRecno, dwRecords:8) Then concat(szCmnd, szRecno);
      concat (szCmnd, '\1\');
      concat(szCmnd, kpuffer.NAME);
      concat(szCmnd, '\');
      concat(szCmnd, kpuffer.BRANCHE);
      concat(szCmnd, '\');
      concat(szCmnd, kpuffer.PLZ);
      concat(szCmnd, kpuffer.ORT);

    End Else Begin

      (*
          "DL" Manipulate Deleted List

      *)  

      szCmnd:='DL\';
      If encode(szRecno, dwRecords:8) Then concat(szCmnd, szRecno);
      concat (szCmnd, '\S\1');
    End;

    dwFATSRecno:=FATSCALL(szCmnd, uFATSError, szFATSkey);

  until uFATSError <> 0;

  (*
     --------> Indexdatei schließen
  *) 

  szCmnd:='K\1';
  dwFATSRecno:=FATSCALL(szCmnd, uFATSError, szFATSkey);

  close(hKunden);

end.

© 2008  GCS Software, Udo Gertz