{$if not def AP_DATEIOPERATIONEN_H}
   
CONST
  AP_DATEIOPERATIONEN_H = 0;

VAR fs,akt:LONG;STATIC;

PROCEDURE datensatzlesen;
VAR  s : STRING[256];
     b : STRING[50];
     x : STR;
     d : BOOLEAN;
    
 BEGIN
          New(PNode);
          Readln(f,PNode^.name);
          akt := akt + Length(PNode^.name)+1;
          Readln(f,PNode^.vorname);
          akt := akt + Length(PNode^.vorname)+1;
          Readln(f,PNode^.strasse);
          akt := akt + Length(PNode^.strasse)+1;
          Readln(f,PNode^.plz);
          akt := akt + Length(PNode^.plz)+1;
          Readln(f,PNode^.ort);
          akt := akt + Length(PNode^.ort)+1;
          Readln(f,PNode^.tel);
          akt := akt + Length(PNode^.tel)+1;
          Readln(f,PNode^.fax);
          akt := akt + Length(PNode^.fax)+1;
          Readln(f,PNode^.geb);
          akt := akt + Length(PNode^.geb)+1;
          ReadLn(f,PNode^.EMail1);
          akt := akt + Length(PNode^.EMail1)+1;
          Readln(f,PNode^.EMail2);
          akt := akt + Length(PNode^.EMail2)+1;
          Readln(f,PNode^.kommentar);
          akt := akt + Length(PNode^.kommentar)+1;
          Readln(f,PNode^.anrede);
          akt := akt + Length( IntStr(PNode^.anrede) )+1;
          Readln(f,Pnode^.anrede_s);
          akt := akt + Length(PNode^.anrede_s)+1;
          FOR i := 1 TO 10 DO
          BEGIN
            Read(f,c);
            Inc(akt);
            PNode^.select[i] := (c = "1");
          END;
          Readln(f);
          PNode^.pn.ln_succ := NIL;
          PNode^.pn.ln_pred := NIL;
          PNode^.pn.ln_Type := NT_UNKNOWN;
          PNode^.pn.ln_Pri := 0;
          b := PNode^.name+", "+PNode^.vorname;
          x := b;
          NeuePerson(PNode,x);
          ShowProzent(fs, akt);
          Inc(Anzahl);
	END;

PROCEDURE doteil2;
 BEGIN
  WHILE NOT Eof(f) DO datensatzlesen;
  CloseProzentWin;
  t[1] := TagItem(GTLV_Labels,LONG(PList));
  t[2].ti_Tag := TAG_DONE;
  GT_SetGadgetAttrsA(mgad[1],wp,NIL,^t);
  GT_RefreshWindow(wp,NIL);
  IF Anzahl > 0 THEN
  BEGIN 
   AktuellGewählt := 0;
   t[1] := TagItem(GTLV_Selected, AktuellGewählt);
   t[2].ti_Tag := TAG_DONE;
   GhostGadget(mgad[M_SUCHEN],wp,FALSE);
   GhostGadget(mgad[M_SORTIEREN],wp,FALSE);
   GhostGadget(mgad[M_ÄNDERN],wp,FALSE);
   GhostGadget(mgad[M_BLÄTTERN],wp,FALSE);
   GhostGadget(mgad[M_LÖSCHEN],wp,FALSE);
   GhostGadget(mgad[M_SERIENDRUCK],wp,FALSE);
   GhostGadget(mgad[M_FORMULARDRUCK],wp,FALSE);
   GhostGadget(mgad[M_LISTENDRUCK],wp,FALSE);
   AktuellePerson := SucheNode(0);
  END;
 END;

PROCEDURE DateiLaden(filer:BOOLEAN);
{ -- Lädt eine Datei -- }
VAR
  s : STRING[256];
  b : STRING[50];
  x : STR;
  d : BOOLEAN;
  
  PROCEDURE Laden(VAR datei:String256);
  VAR 
    j :CHAR;
  BEGIN
    Reset(f,datei);
    IF IOResult = 0 THEN
    BEGIN
      Readln(f,erkenn);
      IF (erkenn=kennung) THEN
      BEGIN
        d := OpenProzentWin("Lade Datei....");
        fs := FileSize(f) - Length(erkenn);
        akt := 0;
        IF Anzahl > 0 THEN
        BEGIN
          PNode := p_Person(PList^.lh_head);
          WHILE PNode<>NIL DO
          BEGIN
            FreeVec(PTR(PNode^.pn.ln_Name));
            Remove(p_Node(PNode));
            Dispose(PNode);
            PNode := p_Person(PNode^.pn.ln_Succ);
          END;
        END;
        NeuePList;
        Anzahl := 0;
		      doteil2;
      END ELSE DisplayBeep(NIL);
      Close(f);
    END;
  END;
  
BEGIN
  IF filer THEN
  BEGIN
    ok:=AddPart(pfad,datei,200);  
    datei:=filepart(pfad);
    delete(pfad,pos(datei,pfad),length(datei));
    dummy := FileReqPattern("Datei laden",datei,pfad,"~(#?.info)");
    IF dummy THEN
    BEGIN
      s := pfad+datei;
      Laden(s);
    END;
  END ELSE
  BEGIN
{    IF (pfad<>'') AND (pfad[length(pfad)]<>'/') AND (pfad[length(pfad)]<>':')
    THEN pfad:=pfad+'/'
    s := pfad+datei;}
    s:=pfad;
    ok:=AddPart({pfad}s,datei,200);   {Das selbe mit der dos.lib klappt aber nur mit OS39 richtig}
{    s:=pfad;}
    Laden(s);   
  END;
END;


PROCEDURE anhaengen;
VAR
  s : STRING[256];
  b : STRING[50];
  x : STR;
  d : BOOLEAN;

 BEGIN
  ok:=AddPart(pfad,datei,200); 
  datei:=filepart(pfad);
  delete(pfad,pos(datei,pfad),length(datei));
  dummy := FileReqPattern("Datensätze anhängen",datei,pfad,"~(#?.info)");
  IF dummy THEN
  BEGIN
   s := pfad+datei;
	  IF Anzahl > 0 THEN
   BEGIN
		  reset(f,s);
	   IF IORESULT=0 THEN
	   BEGIN
		   read(f,erkenn);
		   IF erkenn=kennung THEN 
 		  BEGIN
		    d:=OpenProzentwin("Lade Datei ... ");
		    fs:=Filesize(f)-length(erkenn)-1;
		    akt:=0;
	 	   WHILE NOT eof(f) DO datensatzlesen; 
      doteil2;
    END ELSE displaybeep(NIL); {kennung stimmt nicht}
   END ELSE displaybeep(NIL); {Datei nicht gefunden}
  END ELSE Dateiladen(FALSE);
	END;
END;

PROCEDURE iconspeichern(s:STRING256);
 
VAR dobj      : p_DiskObject;
    success   : boolean;
	   meld      : STRING200;
    	 
BEGIN
  meld:=iconname+'.info'	
	 IF NOT dateivorhanden(meld) THEN 
   BEGIN
		  meld:='FEHLER !'+CHR(10)+'Kann Icondatei '+iconname+'.info nicht finden'+chr(10)+
	         'Bitte Tooltype ICON ändern oder die Anleitung lesen'+chr(10)+
			       'Keine Panik, Adressen werden trotzdem gespeichert ;-)';
		  umeld(meld);
	  END
	 ELSE
  BEGIN
 	 dobj:=NIL;
   dobj:=GetDiskObject(iconname);        { Icon des Programms  holen         }
 	 IF dobj<>NIL THEN 
   BEGIN
    dobj^.do_defaulttool:=eigenName;     { DefaultToolzeiger auf Addipro umbiegen}
    success:=PutDiskObject(^s,dobj);     { wenn success=true Icon gespeichert}
    FreeDiskObject(dobj);                { Speicher freigeben                }
 		END;
	END;
END;
  
PROCEDURE DateiSpeichern(filereq:BOOLEAN);
{ Adressen in eine Datei speichern... }
VAR
  s : STRING256;
 
  PROCEDURE schreibedatensatz;
   BEGIN
    Writeln(f,PNode^.name);
    Writeln(f,PNode^.vorname);
    Writeln(f,PNode^.strasse);
    Writeln(f,PNode^.plz);
    Writeln(f,PNode^.ort);
    Writeln(f,PNode^.tel);
    Writeln(f,PNode^.fax);
    Writeln(f,PNode^.geb);
    Writeln(f,PNode^.EMail1);
    Writeln(f,PNode^.EMail2);
    Writeln(f,PNode^.kommentar);
    Writeln(f,PNode^.anrede);
    Writeln(f,PNode^.anrede_s);
    FOR i := 1 TO 10 DO
     BEGIN
      IF PNode^.select[i] THEN Write(f,"1")
                          ELSE Write(f,"0");
     END;
    Writeln(f);
   END;
  
  PROCEDURE Speichern(VAR s:STRING256); {alle Datensätze speichern (standard)}
  BEGIN
      ReWrite(f,s);
      IF IOResult = 0 THEN
      BEGIN
        { AddiPro-Kennung schreiben }
        Writeln(f,kennung);
        PNode := p_Person(PList^.lh_head);
        WHILE PNode^.pn.ln_succ<>NIL DO
        BEGIN
           schreibedatensatz;
           PNode := p_Person(PNode^.pn.ln_succ);
        END;
        Close(f);
      END;
  END;
  
  PROCEDURE s0(VAR s:STRING256);     { aktuellen Datensatz speichern }
   BEGIN 
      ReWrite(f,s);
      IF IOResult = 0 THEN
      BEGIN
        pnode:=aktuelleperson;
        Writeln(f,kennung);
        schreibedatensatz;
        Close(f);
      END;
   END;
  
  PROCEDURE sx(VAR s:STRING256); 
   BEGIN 
    ReWrite(f,s);
    IF IOResult = 0 THEN
    BEGIN                                      { Selectionsmenge x speichern }
     pnode:=p_person(Plist^.lh_head);
     dec(j);
     writeln(f,kennung);
     IF pnode<>NIL THEN IF pnode^.select[j] THEN schreibedatensatz;
     WHILE pnode^.pn.ln_succ^.ln_succ<>NIL DO
     BEGIN
      pnode:=p_Person(pnode^.pn.ln_succ);
      IF pnode^.select[j] THEN schreibedatensatz;
     END;
     close(f);
    END;
  END;
  
BEGIN
  { Sind überhaupt Adressen vorhanden? }
	    IF Anzahl > 0 THEN
  BEGIN
    ok:=AddPart(pfad,datei,200);   { sehr trickreich B-) }
    datei:=filepart(pfad);
    delete(pfad,pos(datei,pfad),length(datei));
    IF filereq THEN
    BEGIN
     IF speichernalsoberfläche THEN 
     BEGIN
      { Filerequester aufrufen }
      dummy := FileReqPattern("Datensätze speichern",datei,pfad,"~(#?.info)");
      IF dummy THEN
      BEGIN
        s := pfad+datei;
        CASE j OF  
         0:s0(s);
         1:Speichern(s)
        ELSE sx(s) END;
   	    IF iconsave THEN iconspeichern(s);
      END;
     END;
    END ELSE
    BEGIN
     s:=pfad+datei;
      IF s<>"" THEN BEGIN Speichern(s); IF iconsave THEN iconspeichern(s); END
      ELSE
      BEGIN
        dummy := FileReqPattern("Datensätze speichern",datei,pfad,"~(#?.info)");
        IF dummy THEN
        BEGIN
          s := pfad + datei;
          Speichern(s);
          IF iconsave THEN iconspeichern(s);			 
        END;
      END;
    END;
  END;
END;

{$endif}
