home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 12 / adrewa1.inc < prev    next >
Encoding:
Text File  |  1987-09-03  |  4.7 KB  |  163 lines

  1. (*------------------------------------------------------------*)
  2. (*                        ADREWA1.INC                         *)
  3. (*         Erste Include-Datei zur Adressverwaltung           *)
  4. (*------------------------------------------------------------*)
  5. (* Dateiposition eines Datensatzes in der Indextabelle suchen *)
  6. FUNCTION SucheIndex(Name : tSchluessel;
  7.                     VAR Start : INTEGER) : INTEGER;
  8.  
  9. VAR i, MaxZahl : INTEGER;
  10.     Gefunden : BOOLEAN;
  11.  
  12. BEGIN
  13.   (* Anzahl Datensaetze bestimmen *)
  14.   MaxZahl := FileSize(Datenfile);
  15.   i := Start;
  16.   Gefunden := FALSE;
  17.   WHILE ((i <= MaxZahl) AND NOT(Gefunden)) DO
  18.     BEGIN
  19.       Gefunden := (Indexfeld[i].Schluessel=Name);
  20.       i := i + 1;
  21.     END;
  22.   IF Gefunden THEN BEGIN
  23.     SucheIndex := Indexfeld[i-1].RecNr;
  24.     Start := i-1;
  25.   END
  26.   ELSE
  27.     SucheIndex := -1;
  28.   (* Rueckgabe -1 signalisiert NICHT GEFUNDEN *)
  29. END;
  30.  
  31. (*------------------------------------------------------------*)
  32. (*   Frage wiederholen bis 'j' oder 'n' geantwortet wird.     *)
  33. (*        Wenn Antwort = 'j' TRUE zurueckgeben.               *)
  34. FUNCTION JaNein(Frage : tEintrag) : BOOLEAN;
  35.  
  36. VAR Wahl : CHAR;
  37.  
  38. BEGIN
  39.   REPEAT
  40.     Write(Frage,'?');  ReadLn(Wahl);
  41.   UNTIL (Wahl IN ['j','J','n','N']);
  42.   JaNein := (Wahl IN ['j','J']);
  43. END;
  44.  
  45. (*------------------------------------------------------------*)
  46. (*         Ueberpruefen ob eine Datei schon existiert         *)
  47. FUNCTION FileExist(Name : tEintrag) : BOOLEAN;
  48.  
  49. VAR f : FILE;
  50.  
  51. BEGIN
  52.   Assign(f,Name);
  53. (*$I-*)
  54.   ReSet(f);
  55. (*$I+*)
  56.   FileExist := (IOResult = 0);
  57. END;
  58.  
  59. (*------------------------------------------------------------*)
  60. (*            Adressdatei oeffnen (neu anlegen)               *)
  61. PROCEDURE Oeffnen;
  62.  
  63. VAR Name : STRING[8];
  64.     exist : BOOLEAN;
  65.     i : INTEGER;
  66.  
  67. BEGIN
  68.   ClrScr;
  69.   SchreibeUeberschrift('Datei Oeffnen');
  70.   WriteLn; WriteLn; WriteLn;
  71.   IF JaNein('Ggf. noch offene Datei schon geschlossen (j/n) ')
  72.   THEN BEGIN
  73.     WriteLn;
  74.     IF JaNein('Vorhandene Datei benutzen (j/n) ') THEN BEGIN
  75.       WriteLn; WriteLn;
  76.       REPEAT
  77.         Write('Dateiname: '); ReadLn(Name);
  78.         exist := FileExist(Concat(Name,'.DAT'));
  79.         IF NOT exist THEN
  80.           WriteLn('Datei existiert nicht !');
  81.       UNTIL (exist OR (Name = ''));
  82.       IF (Name <> '') THEN BEGIN
  83.         Assign(Datenfile,Concat(Name,'.DAT'));
  84.         ReSet(Datenfile);
  85.         Assign(Indexfile,Concat(Name,'.IND'));
  86.         ReSet(Indexfile);
  87.         IF (FileSize(Indexfile) > 0) THEN
  88.           Read(Indexfile,Indexfeld); (* Indextabelle einlesen *)
  89.       END;
  90.     END
  91.     ELSE BEGIN (* Neue Dateien anlegen *)
  92.       Write('Dateiname: '); ReadLn(Name);
  93.       Assign(Datenfile,Concat(Name,'.DAT'));
  94.       ReWrite(Datenfile);
  95.       Assign(Indexfile,Concat(Name,'.IND'));
  96.       ReWrite(Indexfile);
  97.       (* Indexfeld initialisieren *)
  98.       FOR i := 1 TO MaxDaten DO
  99.         Indexfeld[i].Schluessel := '@';
  100.     END;
  101.   END;
  102. END;
  103.  
  104. (*------------------------------------------------------------*)
  105. (*                 Adressdatei schliessen                     *)
  106. PROCEDURE Schliessen;
  107.  
  108. VAR Name : STRING[8];
  109.     temp : tDatenfile;
  110.     i1, i2 : INTEGER;
  111.  
  112. BEGIN
  113.   ClrScr;
  114.   SchreibeUeberschrift('Datei Schliessen');
  115.   WriteLn; WriteLn; WriteLn;
  116.   (* Temporaere Datei oeffnen; ungueltige Datensaetze loeschen *)
  117.   Assign(temp,'TEMP.TMP');
  118.   ReWrite(temp);
  119.   ReSet(Datenfile);
  120.   (* GUELTIGE Datensaetze nach 'temp' uebertragen *)
  121.   WHILE NOT Eof(Datenfile) DO BEGIN
  122.     Read(Datenfile,Datensatz);
  123.     IF Datensatz.Name <> '@' THEN
  124.       Write(temp,Datensatz);
  125.   END;
  126.   (* Wieder zurueck zu Datenfile *)
  127.   ReSet(temp); ReWrite(Datenfile);
  128.   WHILE NOT Eof(temp) DO BEGIN
  129.     Read(temp,Datensatz);
  130.     Write(Datenfile,Datensatz);
  131.   END;
  132.   Close(temp);  Erase(temp);  (* Temp loeschen *)
  133.   Close(Datenfile);           (* Datei schliessen *)
  134.   (* Indexfeld sichern, ungueltige Eintraege loeschen *)
  135.   i1 := 1;
  136.   FOR i2 := 1 TO MaxDaten DO
  137.     IF Indexfeld[i2].Schluessel <> '@' THEN BEGIN
  138.       Indexfeld[i1] := Indexfeld[i2];
  139.       i1 := i1 + 1;
  140.     END;
  141.   ReWrite(Indexfile);
  142.   Write(Indexfile,Indexfeld);
  143.   Close(Indexfile);
  144. END;
  145.  
  146. (*------------------------------------------------------------*)
  147. (*              Einen Datensatz einfuegen                     *)
  148. PROCEDURE Einfuegen(Datensatz : tDatensatz);
  149.  
  150. VAR Pos : INTEGER;
  151.  
  152. BEGIN
  153.   (* Auf Dateiende positionieren *)
  154.   Pos := FileSize(Datenfile);
  155.   Seek(Datenfile,Pos);
  156.   Write(Datenfile,Datensatz);
  157.   Indexfeld[Pos + 1].Schluessel := Datensatz.Name;
  158.   Indexfeld[Pos + 1].RecNr := Pos;
  159. END;
  160.  
  161. (*------------------------------------------------------------*)
  162. (*                    Ende ADREWA1.INC                        *)
  163.