PROGRAM Adressen_Verwaltung;
USES Printer;
CONST A = 500;
      B = 5;
TYPE Angaben = STRING[30];
     T_Adressen = ARRAY[1..A,1..B] OF Angaben;

VAR Adressen             : T_Adressen;
    Dateiname            : Angaben;
    Anzahl,IntWahl,Daten : INTEGER;
    Wahl                 : CHAR;
    Options              : STRING;
    Window               : TEXT;

PROCEDURE Nothing
BEGIN
END;

PROCEDURE COORD(x,y:INTEGER);
BEGIN
  WRITE(Window,chr($9b),y,';',x,'H');
END;

PROCEDURE DownWindow;
BEGIN

  COORD(1,25);
  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=',Options,'=');
  WRITELN(Window,'=========================================================================');

END;

PROCEDURE MainMenu;
BEGIN
  Wahl := ' ';
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=        A M I G A  A D R E S S E N  V E R W A L T U N G  V 1 . 0       =');
  WRITELN(Window,'=========================================================================');

  Options :=' ©1993 Holger Mense **** Freeware *** !Copy Me, I Want To Travel! **** ';
  DownWindow;
  COORD(1,4);
  WRITELN(window);
  WRITELN(Window,'              [1] ... Adressen eingeben');
  WRITELN(Window,'              [2] ... Adressen ausgeben');
  WRITELN(Window,'              [3] ... Adressen laden');
  WRITELN(Window,'              [4] ... Adressen speichern');
  WRITELN(Window,'              [5] ... Adressen sortieren');
  WRITELN(Window,'              [6] ... Adressen suchen');
  WRITELN(Window,'              [7] ... Adressen löschen');
  WRITELN(Window,'              [8] ... Adressen drucken');
  WRITELN(Window,'              [9] ... Informationen');
  WRITELN(Window,'              [0] ... Ende');
  WRITELN(Window);
  WRITE(Window,'             > ');
  READLN(Window,IntWahl);
END;

PROCEDURE Eingeben;
BEGIN
  REPEAT;
  Wahl := ' ';
  Inc(Anzahl);
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                   A D R E S S E N  E I N G A B E                      =');
  WRITELN(Window,'=========================================================================');

  Options :=' Benutzen Sie die Tastatur für Ihre Eingaben, RETURN zum bestätigen... ';
  DownWindow;
  COORD(1,4);
  WRITELN(Window);
  REPEAT;
  COORD(1,5);
  WRITELN(Window,'Hausname      : ');
  WRITELN(Window,'Vorname       : ');
  WRITELN(Window,'Straße        : ');
  WRITELN(Window,'Stadt         : ');
  WRITELN(Window,'Telefonnummer : ');
  COORD(17,5);READLN(Window,Adressen[Anzahl,1]);
  COORD(17,6);READLN(Window,Adressen[Anzahl,2]);
  COORD(17,7);READLN(Window,Adressen[Anzahl,3]);
  COORD(17,8);READLN(Window,Adressen[Anzahl,4]);
  COORD(17,9);READLN(Window,Adressen[Anzahl,5]);
  COORD(1,23);
  WRITE(Window,'Möchten Sie noch etwas ändern (j/n)? ');
  READLN(Window,Wahl);
  UNTIL (Wahl = 'n') OR (Wahl = 'N');
  COORD(1,23);
  WRITE(Window,'Möchten Sie noch eine Adresse eingeben (j/n)? '); READLN(Window,Wahl);
  UNTIL (Wahl = 'n') OR (Wahl ='N');
  Daten := 1;
END;

PROCEDURE Ausgeben;
VAR x      : INTEGER;
    Action : CHAR;
BEGIN
  IF Daten = 0 THEN Nothing
  ELSE BEGIN
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================')
  WRITELN(Window,'=                     A D R E S S E N  A U S G A B E                    =')
  WRITELN(Window,'=========================================================================')

  Options :='   + = Datensatz weiter     |    - = Datensatz zurück   |   0 = Ende  ='
  DownWindow;
  COORD(1,4);
  WRITELN(Window);
  x := 1;
  REPEAT;
  IF Action = '+' THEN x := x + 1;
  IF Action = '-' THEN x := x - 1;
  IF x > Anzahl THEN x := Anzahl;
  IF x < 1 THEN x := 1;
  COORD(1,5);
  WRITELN(Window,'Adressen Gesamt: ',Anzahl,' *** Adressennummer: ',x);
  COORD(1,7);
  WRITELN(Window,'Hausname      : ',Adressen[x,1],'                          ');
  WRITELN(Window,'Vorname       : ',Adressen[x,2],'                          ');
  WRITELN(Window,'Straße        : ',Adressen[x,3],'                          ');
  WRITELN(Window,'Stadt         : ',Adressen[x,4],'                          ');
  WRITELN(Window,'Telefonnummer : ',Adressen[x,5],'                          ');
  WRITELN(Window);
  WRITE(Window,'> ');
  READLN(Window,Action);
  UNTIL Action = '0';
END;
END;

PROCEDURE Laden;
VAR Datei   : TEXT;
    y,z     : INTEGER;
    DatName : STRING
BEGIN
  Wahl := ' ';
  CLRSCR(Window);
  WRITELN(Window,'==========================================================================');
  WRITELN(Window,'=                        A D R E S S E N  L A D E N                      =');
  WRITELN(Window,'==========================================================================');
  WRITELN(Window);
  IF Daten = 1 THEN WRITELN(Window,'ACHTUNG! NICHT GESPEICHERTE DATEN SIND IM SPEICHER! DIESE WERDEN GELÖSCHT!');
  WRITE(Window,'Name der Datei [RETURN = Exit]: ');
  READLN(Window,DatName);
  IF DatName = '' THEN WRITELN(Window)
  ELSE BEGIN
  DatName := CONCAT(DatName,'.AAV');
  WRITELN(Window);WRITELN(Window,'Lade Daten aus dem File ',DatName,'... Bitte warten...');
  ASSIGN(Datei,DatName);
  RESET(Datei);
  READLN(Window,Datei,Anzahl);
  FOR y := 1 to Anzahl DO
    BEGIN
      FOR z := 1 to 5 DO
       READLN(Window,Datei,Adressen[y,z]);
    END;
  CLOSE(Datei);
  Daten := 1;
 END;
END;

PROCEDURE Speichern;
VAR Datei   : TEXT;
    y,z     : INTEGER;
    DatName : STRING;
BEGIN
  IF Daten = 0 THEN Nothing
  ELSE BEGIN
  Wahl := ' ';
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================')
  WRITELN(Window,'=                    A D R E S S E N  S P E I C H E R N                 =')
  WRITELN(Window,'=========================================================================')
  WRITELN(Window);
  WRITE(Window,'Name der Datei [RETURN = Exit]: ');
  READLN(Window,DatName);
  IF DatName = '' THEN WRITELN
  ELSE BEGIN
  DatName := CONCAT(DatName,'.AAV');
  WRITELN(Window);WRITELN(Window,'Speicher Daten in das File ',DatName,'... Bitte warten...');
  ASSIGN(Datei,DatName);
  REWRITE(Datei);
  WRITELN(Datei,Anzahl);
  FOR y := 1 to Anzahl DO
    BEGIN
      FOR z := 1 to 5 DO
       WRITELN(Datei,Adressen[y,z]);
    END;
  CLOSE(Datei);
 Daten := 0;
 END;
END;
END;

PROCEDURE Sortieren;
VAR z,u,Src  : INTEGER;
    Help     : ARRAY[1..5] OF Angaben;
BEGIN
  IF Daten = 0 THEN Nothing
  ELSE BEGIN
  REPEAT;
  Wahl := ' ';
  CLRSCR(Window);
  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                   A D R E S S E N  S O R T I E R E N                  =');
  WRITELN(Window,'=========================================================================');

  WRITELN(Window);
  WRITELN(Window,'                    Sortierkriterium:');
  WRITELN(Window);
  WRITELN(Window,'                    [1] ... Hausname');
  WRITELN(Window,'                    [2] ... Vorname');
  WRITELN(Window,'                    [3] ... Straße');
  WRITELN(Window,'                    [4] ... Stadt');
  WRITELN(Window,'                    [5] ... Ende');
  WRITELN(Window);
  WRITE(Window,'                   > ');
  READLN(Window,Wahl);
  UNTIL (Wahl > '0') AND (Wahl < '6');
  CASE Wahl OF
    '1' : BEGIN
            Src := 1; END;
    '2' : BEGIN
            Src := 2; END;
    '3' : BEGIN
            Src := 3; END;
    '4' : BEGIN
            Src := 4; END;
    '5' : BEGIN
            MainMenu; END;
  END;
  CLRSCR(Window);
  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                   A D R E S S E N  S O R T I E R E N                  =');
  WRITELN(Window,'=========================================================================');

  WRITELN(Window);WRITELN(Window,'Sortiere ',Anzahl,' Adressen nach dem Alphabet... Bitte warten...');
  WRITELN(Window);
  FOR z := 2 TO Anzahl DO
   BEGIN
   IF Adressen[z-1,Src] > Adressen [Z,Src] THEN BEGIN
                                                  FOR u := 1 TO 5 DO
                                                   BEGIN
                                                     Help[u] := Adressen[z-1,u];
                                                     Adressen[z-1,u] := Adressen[z,u];
                                                     Adressen[z,u] := Help[u];
                                                   END;
                                                END;
   COORD(1,7);
   IF Anzahl-z = 1 THEN WRITELN(Window,Anzahl-z,' Adresse muß noch sortiert werden...      ')
                  ELSE WRITELN(Window,Anzahl-z,' Adressen müssen noch sortiert werden...')
   COORD(1,9); WRITELN(Window,'Hausname      : ',Adressen[z,1]);
   COORD(1,10);WRITELN(Window,'Vorname       : ',Adressen[z,2]);
   COORD(1,11);WRITELN(Window,'Straße        : ',Adressen[z,3]);
   COORD(1,12);WRITELN(Window,'Stadt         : ',Adressen[z,4]);
   COORD(1,13);WRITELN(Window,'Telefonnummer : ',Adressen[z,5]);
  END;
END;
END;

PROCEDURE Suchen;
VAR Return,Gesucht:STRING[30]
    x,SuchWahl,y : INTEGER;

BEGIN
  IF Daten = 0 THEN Nothing
  ELSE BEGIN
  REPEAT;
  Wahl := ' ';
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                      A D R E S S E N  S U C H E N                     =');
  WRITELN(Window,'=========================================================================');

  WRITELN(Window);
  WRITELN(Window,'                       Suchkriterium:');
  WRITELN(Window);
  WRITELN(Window,'                       [1] ... Hausname');
  WRITELN(Window,'                       [2] ... Vorname');
  WRITELN(Window,'                       [3] ... Straße');
  WRITELN(Window,'                       [4] ... Stadt');
  WRITELN(Window,'                       [5] ... Telefonnummer');
  WRITELN(Window,'                       [0] ... Ende');
  WRITELN(Window);
  WRITE(Window,'                      > ');
  READLN(Window,SuchWahl);
  UNTIL (SuchWahl > -1) AND (SuchWahl < 6);
  IF Wahl = '0' THEN MainMenu;
  CLRSCR(Window);
  Wahl := ' ';

  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                      A D R E S S E N  S U C H E N                     =');
  WRITELN(Window,'=========================================================================');

  WRITELN(Window);
  CASE SuchWahl OF
   1 : BEGIN
           x := 1;
          END;
   2 : BEGIN
           x := 2;
         END;
   3 : BEGIN
           x := 3;
         END;
   4 : BEGIN
           x := 4;
         END;
   5 : BEGIN
           x := 5;
         END;
   0 : BEGIN
           MainMenu;
         END;
  END;
WRITE(Window,'Gesucht : ');READLN(Window,Gesucht);
FOR y := 1 TO Anzahl DO
BEGIN
  IF Gesucht = Adressen[y,x] THEN BEGIN
                                  COORD(1,5); WRITELN(Window,'Hausname      : ',Adressen[y,1],'                             ');
                                  COORD(1,6); WRITELN(Window,'Vorname       : ',Adressen[y,2],'                             ');
                                  COORD(1,7); WRITELN(Window,'Straße        : ',Adressen[y,3],'                             ');
                                  COORD(1,8); WRITELN(Window,'Stadt         : ',Adressen[y,4],'                             ');
                                  COORD(1,9); WRITELN(Window,'Telefonnummer : ',Adressen[y,5],'                             ');
                                  END;
 END;
COORD(1,12);
WRITE(Window,'                                     [RETURN]'); READLN(Window,Return);
END;


BEGIN
END;
END;

PROCEDURE Drucktyp1;
VAR x : INTEGER;
BEGIN
  FOR x := 1 TO Anzahl DO
    BEGIN
      COORD(1,8); WRITELN(Window,'Hausname      : ',Adressen[x,1],'                         '); WRITELN(lst,'Hausname      : ',Adressen[x,1]);
      COORD(1,9); WRITELN(Window,'Vorname       : ',Adressen[x,2],'                         '); WRITELN(lst,'Vorname       : ',Adressen[x,2]);
      COORD(1,10);WRITELN(Window,'Straße        : ',Adressen[x,3],'                         '); WRITELN(lst,'Straße        : ',Adressen[x,3]);
      COORD(1,11);WRITELN(Window,'Stadt         : ',Adressen[x,4],'                         '); WRITELN(lst,'Stadt         : ',Adressen[x,4]);
      COORD(1,12);WRITELN(Window,'Telefonnummer : ',Adressen[x,5],'                         '); WRITELN(lst,'Telefonnummer : ',Adressen[x,5]); WRITELN(lst,' ');
    END;
END;

PROCEDURE Drucktyp2;
VAR x : INTEGER;
BEGIN
  FOR x := 1 TO Anzahl DO
    BEGIN
      COORD(1,8); WRITELN(Window,Adressen[x,2],' ',Adressen[x,1],'                         '); WRITELN(lst,Adressen[x,2],' ',Adressen[x,1]);
      COORD(1,9); WRITELN(Window,Adressen[x,3],'                                           '); WRITELN(lst,Adressen[x,3]);
      COORD(1,10);WRITELN(Window,Adressen[x,4],'                                           '); WRITELN(lst,Adressen[x,4]);
      COORD(1,11);WRITELN(Window,'Tel.: ',Adressen[x,5],'                                           '); WRITELN(lst,'Tel.: ',Adressen[x,5]); WRITELN(lst,' ');
    END;
END;

PROCEDURE Drucken;
VAR x : INTEGER;
    NewWahl : CHAR;
BEGIN
  IF Daten = 0 THEN Nothing
  ELSE BEGIN
  Wahl := ' ';
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                      A D R E S S E N  D R U C K E N                   =');
  WRITELN(Window,'=========================================================================');

  Options :=' C.O.M.P.U.T.E.R  AN  D.R.U.C.K.E.R + C.O.M.P.U.T.E.R  AN  D.R.U.C.K.E.';
  DownWindow;
  COORD(1,4);
  WRITELN(Window);WRITE(Window,'Wollen Sie wirklich drucken (j/n)? ');
  READLN(Window,NewWahl);
  IF (NewWahl = 'n') OR (NewWahl = 'N') THEN MainMenu
                                                                       ELSE REPEAT
                                                                            CLRSCR(Window);

                                                                            WRITELN(Window,'=========================================================================');
                                                                            WRITELN(Window,'=                      A D R E S S E N  D R U C K E N                   =');
                                                                            WRITELN(Window,'=========================================================================');

                                                                            DownWindow;
                                                                            COORD(1,4);
                                                                            WRITELN(Window);
                                                                            WRITELN(Window,'Typ 1:                                   | Typ 2:');
                                                                            WRITELN(Window,'Hausname       : Mense                   | Holger Mense');
                                                                            WRITELN(Window,'Vorname        : Holger                  | Im Schilffeld 34');
                                                                            WRITELN(Window,'Straße         : Im Schilffeld 34        | 33378 Rheda-Wiedenbrück');
                                                                            WRITELN(Window,'Stadt          : 33378 Rheda-Wiedenbrück | Tel.: 05242 / 2891');
                                                                            WRITELN(Window,'Telefonnummmer : 05242 / 2891            |');
                                                                            WRITELN(Window,'-----------------------------------------+-------------------------------');
                                                                            WRITELN(Window);WRITE(Window,'In welchem Modus sollen Ihre Adressen gedruckt werden? Typ 1 oder 2 (1/2): ');
                                                                            READLN(Window,NewWahl);
                                                                            UNTIL (NewWahl = '1') OR (NewWahl = '2');
                                                                            CLRSCR(Window);

                                                                            WRITELN(Window,'=========================================================================');
                                                                            WRITELN(Window,'=                      A D R E S S E N  D R U C K E N                   =');
                                                                            WRITELN(Window,'=========================================================================');

                                                                            WRITELN(Window);WRITELN(Window,'Drucke...');
                                                                            WRITELN(Window);


                                                                            IF NewWahl = '1' THEN Drucktyp1
                                                                                             ELSE Drucktyp2



END;
END;





PROCEDURE AllesLoeschen;
VAR x,z : INTEGER;
BEGIN
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                        A D R E S S E N  L Ö S C H E N                 =');
  WRITELN(Window,'=========================================================================');

  WRITELN(Window);
  WRITELN(Window,'Wenn Sie jetzt "j" (JA) eingeben, dann sind ihre gesamten Adressen');
  WRITE(Window,'unwiederruflich verloren!! Sind Sie sicher (j/n)? ');READLN(Window,Wahl);
  IF (Wahl = 'j') OR (Wahl = 'J') THEN
                                       FOR x := 1 TO Anzahl DO
                                         BEGIN
                                         FOR z := 1 TO 5 DO
                                           BEGIN
                                           Adressen[x,z] := '';
                                         END;
                                         Anzahl := 0
                                         Daten := 1;
                                         END;


END;

PROCEDURE BestimmteLoeschen;
VAR a,b,Adressennummer : INTEGER;

BEGIN
  CLRSCR(Window);
  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                        A D R E S S E N  L Ö S C H E N                 =');
  WRITELN(Window,'=========================================================================');

  WRITELN(Window);
  WRITELN(Window,'Hausname      : ');
  WRITELN(Window,'Vorname       : ');
  WRITELN(Window,'Stadt         : ');
  WRITELN(Window,'Straße        : ');
  WRITELN(Window,'Telefonnummer : ');
  WRITELN(Window);
  WRITE(Window,'Welche Adressennummer wollen Sie löschen (',Anzahl-Anzahl+1,' -> ',Anzahl,'): ');
  READLN(Window,Adressennummer);
  IF Adressennummer = 0 THEN Nothing
  ELSE BEGIN
  COORD(17,5); WRITELN(Window,Adressen[Adressennummer,1]);
  COORD(17,6); WRITELN(Window,Adressen[Adressennummer,2]);
  COORD(17,7); WRITELN(Window,Adressen[Adressennummer,3]);
  COORD(17,8); WRITELN(Window,Adressen[Adressennummer,4]);
  COORD(17,9); WRITELN(Window,Adressen[Adressennummer,5]);
  COORD(1,11); WRITELN(Window,'                                                                                                    ');
  COORD(1,11); WRITE(Window,'Sind Sie sicher (j/n)? '); READLN(Window,Wahl);
  IF (Wahl = 'j') OR (Wahl= 'J') THEN BEGIN
                                       FOR a := Adressennummer to Anzahl-1 DO
                                        BEGIN
                                          FOR b := 1 to 5 DO
                                            BEGIN
                                              Adressen[a,b] := Adressen[a+1,b];
                                            END;
                                          END;
                                       FOR b := 1 to 5 DO
                                         BEGIN
                                           Adressen[Anzahl,b] := '';
                                       END;
                                     Anzahl := Anzahl - 1;
                                     Daten := 1;
                                    END;
END;
END;

PROCEDURE Loeschen;
VAR Loesch : INTEGER;
BEGIN
  IF Daten = 0 THEN Nothing
  ELSE BEGIN
  REPEAT;
  CLRSCR(Window);

  WRITELN(Window,'=========================================================================');
  WRITELN(Window,'=                        A D R E S S E N  L Ö S C H E N                 =');
  WRITELN(Window,'=========================================================================');

  WRITELN(Window);
  WRITELN(Window,'                      [1] ... Alle Adressen löschen');
  WRITELN(Window,'                      [2] ... Bestimmte Adressen löschen');
  WRITELN(Window,'                      [0] ... Ende');
  WRITELN(Window);
  WRITE(Window,'                     > ');
  READLN(Window,Loesch);
  UNTIL (Loesch > -1) OR (Loesch < 3);
  IF Loesch = 1 THEN AllesLoeschen
  IF Loesch = 2 THEN BestimmteLoeschen;
  IF Loesch = 3 THEN MainMenu;
END;
END;

PROCEDURE Info;
VAR Return : STRING
BEGIN
  CLRSCR(Window);

  WRITELN(Window,'AMIGA ADRESSEN VERWALTUNG [AAV] V1.0');

  WRITELN(Window);
  WRITELN(Window,'Copyright 1993 Holger Mense');
  WRITELN(Window,'Freeware - kopieren erlaubt...');
  WRITELN(Window);
  WRITELN(Window,'Für Fragen, Verbesserungen, Programmfehler etc. schreiben Sie an:');
  WRITELN(Window);
  WRITELN(Window,'                   ***************************');
  WRITELN(Window,'                   *     Holger  Mense       *');
  WRITELN(Window,'                   *   Im  Schilffeld 34     *');
  WRITELN(Window,'                   * 33378 Rheda-Wiedenbrück *');
  WRITELN(Window,'                   *   Tel.:  05242 / 2891   *');
  WRITELN(Window,'                   ***************************');
  WRITELN(Window);
  WRITELN(Window);
  WRITE(Window,'                              [RETURN]');
  READLN(Window,Return)
END;

BEGIN
  ASSIGN(Window, 'CON:0/0/640/256/AAV V1.0');
  RESET(Window);
  IF EOF(Window) THEN ERROR('Could not open window!');
  Anzahl := 0;
  Daten := 0;
  REPEAT;
  REPEAT;
  REPEAT;
  MainMenu;
  IF IntWahl = 1 THEN Eingeben;
  IF IntWahl = 2 THEN Ausgeben;
  IF IntWahl = 3 THEN Laden;
  IF IntWahl = 4 THEN Speichern;
  IF IntWahl = 5 THEN Sortieren;
  IF IntWahl = 6 THEN Suchen;
  IF IntWahl = 7 THEN Loeschen;
  IF IntWahl = 8 THEN Drucken;
  IF IntWahl = 9 THEN Info;
 UNTIL (IntWahl > 0 ) OR (IntWahl <10);
 UNTIL IntWahl = 0;
 CLRSCR(Window);
 COORD(26,15); WRITE(Window,'Sind Sie sicher (j/n)? '); READLN(Window,Wahl);
 UNTIL (Wahl = 'j') OR (Wahl = 'J');
 CLOSE(Window);
 WRITELN;WRITELN('AMIGA ADRESSEN VERWALTUNG by HOLGER MENSE /// ©1993 /// FREEWARE');
 WRITELN;
END.







