PROGRAM WOBE;

USES {Dos,}Crt,Printer;

TYPE    Bereich_A               = ARRAY [0..24] OF STRING[65];
        Bereich_B               = ARRAY [0..16] OF STRING[65];
        Bereich_C               = ARRAY [0..16] OF STRING[65];

CONST   SMax                    = 7;
        AMax                    = 24;
        BMax                    = 16;
        CMax                    = 16;
        ESC                     = CHR(27);
        RETURN                  = CHR(13);
        Version                 = 0.55;

VAR     Name                    : STRING [26];
        Abteilung               : STRING [26];
        Ausgabe                 : STRING [ 4];
        WAnfang                 : STRING [ 7];
        WEnde                   : STRING [ 7];
        Anno                    : STRING [ 3];
        Lehrjahr                : STRING [ 3];
        I                       : BYTE;
        X                       : BYTE;
        Y                       : BYTE;
        L                       : BYTE;
        FeldA                   : Bereich_A;
        FeldB                   : Bereich_B;
        FeldC                   : Bereich_C;
        Wahl                    : CHAR;
        Code                    : INTEGER;
        Zeile                   : INTEGER;
        Dummy                   : CHAR;
        DummyTxt                : STRING;
        Year                    : WORD;
        Month                   : WORD;
        Day                     : WORD;
        DoWeek                  : WORD;
 Datum                   : STRING;
 Tag   : STRING;
 Monat   : STRING;
 Jahr   : STRING;

PROCEDURE Menu; FORWARD;
PROCEDURE Verbessern; FORWARD;
PROCEDURE Verb1Feld; FORWARD;
PROCEDURE Verb2Feld; FORWARD;
PROCEDURE Verb3Feld; FORWARD;

PROCEDURE Unterstrich(X,Y,I : BYTE);
VAR Zaehler                     : BYTE;
BEGIN
  GOTOXY (X,Y);
  FOR Zaehler:=1 TO I DO WRITE ('-');
END;

PROCEDURE ShowReturn(X,Y : BYTE);
BEGIN
  GOTOXY (X,Y);WRITE ('<RETURN>');
  Dummy := ReadKey
END;

PROCEDURE Ls(I : INTEGER);
BEGIN
  WRITE (' ':I);
END;
{
PROCEDURE Date(VAR Datum:STRING);
BEGIN
  Datum := '';
  GetDate(Year,Month,Day,DoWeek);
  Str(Day:2,Tag);
  Str(Month:2,Monat);
  Str(Year:4,Jahr);
  Datum := Tag+'.'+ Monat+'.'+ Jahr;
END;
}
PROCEDURE Informationen;
BEGIN
  ClrScr;
  GOTOXY (28, 3);WRITE ('WOBE - WOCHENBERICHT');
  GOTOXY (26, 5);WRITE ('Amiga und PC Version 0.52');
  GOTOXY (29, 7);WRITE ('(C) 1991,1992');
  GOTOXY ( 3, 9);WRITE ('Autor:');
  GOTOXY ( 3,11);WRITE ('Dirk Eschner, Riemerfeldring 19, 8046 Garching b. Mchn, Tel.320 63 38');
  GOTOXY ( 3,14);WRITE ('WOBE wurde auf einem Amiga 2000 unter OS 2.0 in KickPascal V 2.10 ent-');
  GOTOXY ( 3,16);WRITE ('wickelt. Anfang `92 wurde mit Hilfe von Turbo-Pascal V 5.5 der Source-');
  GOTOXY ( 3,18);WRITE ('code an das Betriebssystem MS-DOS angepasst.');
  GOTOXY ( 3,20);WRITE ('Ich bitte um Fehlerberichte, denn nur so ist eine kontinuierliche Ver-');
  GOTOXY ( 3,22);WRITE ('besserung von WoBe möglich.');
  ShowReturn (30,26);
  ClrScr;
  GOTOXY ( 3, 3);WRITE ('Bedanken möchte ich mich bei');
  GOTOXY ( 3, 5);WRITE ('- Frau Kolb,           (Rechner, Drucker und Geduld)      WP-PS-123');
  GOTOXY ( 3, 7);WRITE ('- Herrn Weilamann,     (dto.)                             WP-PS-123');
  GOTOXY ( 3, 9);WRITE ('- Herrn Leo Sach,      (Source-Codes und Unterstützung)   WK-A III.2.3');
  GOTOXY ( 3,11);WRITE ('- Herrn Apfel,         (HP Laserjet IIP Drucker-Codes)    WK-A III.1');
  GOTOXY ( 3,14);WRITE ('- Herrn Rosenberg,     (EDV-Seminar + Magnetbänder)       WK-A III.1');
  GOTOXY ( 3,16);WRITE ('- Herrn Kiesel und     (für die Mühe mit Works, TDB usw.) WT-VB-A 12-A');
  GOTOXY ( 3,18);WRITE ('  die vielen anderen, die ich jetzt vergessen habe. Sorry!');
  ShowReturn (30,26);
  ClrScr;
  GOTOXY ( 3, 9);WRITE ('     __');
  GOTOXY ( 3,10);WRITE ('    ///');
  GOTOXY ( 3,11);WRITE ('__ ///');
  GOTOXY ( 3,12);WRITE ('\\X// AMIGA - Quite Simply the Best Computer Ever. Thanks Commodore!');
  GOTOXY ( 3,13);WRITE (' ¯¯¯');
  ShowReturn (30,29);
  Menu
END;

PROCEDURE Initialisieren;
BEGIN
  Name          := '';
  Abteilung     := '';
  Ausgabe       := '';
  WAnfang       := '';
  WEnde         := '';
  Anno          := '';
  Lehrjahr      := '';
  FOR I := 1 TO AMax DO FeldA[i] := '';
  FOR I := 1 TO BMax DO FeldB[i] := '';
  FOR I := 1 TO CMax DO FeldC[i] := '';
END;


PROCEDURE Grundmaske;
BEGIN
  ClrScr;
  GOTOXY (40, 3);WRITE ('Name ')         ; Unterstrich(45, 4,25);
  GOTOXY (33, 5);WRITE ('Ausbilungs-')   ;
  GOTOXY (35, 6);WRITE ('abteilung ')    ; Unterstrich(45, 7,25);
  GOTOXY (05,10);WRITE ('Nr. ')          ; Unterstrich(09,11, 3);
  GOTOXY (16, 9);WRITE ('Woche ')        ;
  GOTOXY (18,10);WRITE ('vom ')          ; Unterstrich(22,11, 6);
  GOTOXY (35,10);WRITE ('bis ')          ; Unterstrich(39,11, 6);
  GOTOXY (50,10);WRITE ('19')            ; Unterstrich(52,11, 2);
  GOTOXY (60, 9);WRITE ('Ausbild-')      ;
  GOTOXY (60,10);WRITE ('ungsjahr ')     ; Unterstrich(69,11, 2);
END;

PROCEDURE Stammdaten(I : BYTE);
BEGIN
  CASE I OF 1 : BEGIN GOTOXY (45, 3) ; LS(28); GOTOXY (45, 3) ; READLN (Name)      END;
            2 : BEGIN GOTOXY (45, 6) ; LS(28); GOTOXY (45, 6) ; READLN (Abteilung) END;
            3 : BEGIN GOTOXY (09,10) ; LS( 5); GOTOXY (09,10) ; READLN (Ausgabe)   END;
            4 : BEGIN GOTOXY (22,10) ; LS( 8); GOTOXY (22,10) ; READLN (WAnfang)   END;
            5 : BEGIN GOTOXY (39,10) ; LS( 8); GOTOXY (39,10) ; READLN (WEnde)     END;
            6 : BEGIN GOTOXY (52,10) ; LS( 4); GOTOXY (52,10) ; READLN (Anno)      END;
            7 : BEGIN GOTOXY (69,10) ; LS( 4); GOTOXY (69,10) ; READLN (Lehrjahr)  END;
  END;
END;

PROCEDURE Feld_A_Maske;
BEGIN
  ClrScr;
  GOTOXY ( 6, 3); WRITELN ('Betriebliche Tätigkeit');
  Unterstrich (6,4,65);
  GOTOXY (01,5);
  FOR I := 1 TO AMax DO WRITELN (I:4);
END;

PROCEDURE Feld_A_Daten(I : BYTE);
BEGIN
  X:=6;
  Y:=4+I;
  GOTOXY (X,Y);
  READLN (FeldA[i])
END;

PROCEDURE Feld_B_Maske;
BEGIN
  ClrScr;
  GOTOXY ( 6, 3); WRITELN ('Unterweisungen, Lehrgespräche, betrieblicher Unterricht usw.');
  Unterstrich (6,4,65);
  GOTOXY (01,5);
  FOR I := 1 TO BMax DO WRITELN (I:4)
END;

PROCEDURE Feld_B_Daten(I : BYTE);
BEGIN
  X:=6;
  Y:=4+I;
  GOTOXY (X,Y);
  READLN (FeldB[i])
END;

PROCEDURE Feld_C_Maske;
BEGIN
  ClrScr;
  GOTOXY ( 6, 3); WRITELN ('Berufsschule (Unterrichtsthemen)');
  Unterstrich (6,4,65);
  GOTOXY (01,5);
  FOR I := 1 TO CMax DO WRITELN (I:4);
END;

PROCEDURE Feld_C_Daten(I : BYTE);
BEGIN
  X:=6;
  Y:=4+I;
  GOTOXY (X,Y);
  READLN (FeldC[i])
END;

PROCEDURE LiesAll;
BEGIN
    Initialisieren;
    Grundmaske;
    FOR I:=1 TO  7 DO Stammdaten(I);
    Feld_A_Maske;
    FOR I:=1 TO 24 DO Feld_A_Daten(I);
    Feld_B_Maske;
    FOR I:=1 TO 16 DO Feld_B_Daten(I);
    Feld_C_Maske;
    FOR I:=1 TO 16 DO Feld_C_Daten(I);
    Menu;
END;

PROCEDURE ZeigeStamm(Wahl : CHAR);
BEGIN
  Grundmaske;
  GOTOXY (45, 3); WRITE (Name);
  GOTOXY (45, 6); WRITE (Abteilung);
  GOTOXY (09,10); WRITE (Ausgabe);
  GOTOXY (22,10); WRITE (WAnfang);
  GOTOXY (39,10); WRITE (WEnde);
  GOTOXY (52,10); WRITE (Anno);
  GOTOXY (69,10); WRITE (Lehrjahr);
  IF (Wahl = 'J') THEN ShowReturn(63,2);
END;

PROCEDURE ZeigeFeldA(Wahl : CHAR);
BEGIN
  Feld_A_Maske;
  X := 6;
  Y := 4;
  FOR I := 1 TO AMax DO
  BEGIN
     Y := Y + 1;
     GOTOXY (X,Y);WRITELN (FeldA[i]);
  END;
  IF (Wahl = 'J') THEN ShowReturn(63,2);
END;

PROCEDURE ZeigeFeldB(Wahl : CHAR);
BEGIN
  Feld_B_Maske;
  X := 6;
  Y := 4;
  FOR I := 1 TO BMax DO
  BEGIN
    Y := Y + 1;
    GOTOXY (X,Y);WRITELN (FeldB[i]);
  END;
  IF (Wahl = 'J') THEN ShowReturn(63,2);
END;

PROCEDURE ZeigeFeldC(Wahl : CHAR);
BEGIN
  Feld_C_Maske;
  X := 6;
  Y := 4;
  FOR I := 1 TO CMax DO
  BEGIN
    Y := Y + 1;
    GOTOXY (X,Y);WRITELN (FeldC[i]);
  END;
  IF (Wahl = 'J') THEN ShowReturn(63,2);
END;
{
PROCEDURE Drucken(Rand : STRING);  {Rand 1 x von 3 und 1 x von 8 INCH}

  PROCEDURE ZeilenAbstand(LPI : STRING);
  BEGIN
    WRITELN (LST,#27+#38+#108+lpi+#68)
  END;

BEGIN
  WRITE (LST,#27+#69);                           {Drucker-RESET}
  WRITE (LST,#27+#38+#108+#49+#72);
  WRITE (LST,#27+#38+#108+'0'+#69);              {Oberer Rand}
  WRITELN (LST,#27+#38+#97+Rand+#76);            {linker Rand/ v 10 / r 3}
  ZeilenAbstand('0');
  ZeilenAbstand('21.5');
  WRITELN (LST,' ':41,Name);
  ZeilenAbstand('20');
  ZeilenAbstand('8');
  WRITELN (LST,' ':41,Abteilung);
  WRITELN (LST);
  ZeilenAbstand('7');
  WRITE   (LST,' ':23,Ausgabe);
  WRITE   (LST,     ' ': 11,WAnfang);
  WRITE   (LST,     ' ': 4,WEnde);
  WRITE   (LST,     ' ': 1,Anno);
  WRITE   (LST,     ' ': 8,Lehrjahr);
  ZeilenAbstand('4');
  WRITELN (LST);
  ZeilenAbstand('8');
  FOR I := 1 TO AMax DO WRITELN (LST,FeldA[i]);
  ZeilenAbstand('5');
  WRITELN(LST);
  WRITELN(LST);
  ZeilenAbstand('8');
  FOR I := 1 TO BMax DO WRITELN (LST,FeldB[i]);
  ZeilenAbstand('5');
  WRITELN(LST);
  WRITELN(LST);
  ZeilenAbstand('8');
  FOR I := 1 TO CMax DO WRITELN (LST,FeldC[i]);
  ZeilenAbstand('4');
  WRITELN (LST);
  WRITELN (LST,Datum);
  WRITELN (LST,chr(12));
  Menu
END;
}
PROCEDURE Stammfeld;
BEGIN
  ZeigeStamm('N');
  GOTOXY (25,15);WRITE ('Ich möchte...');
  GOTOXY (25,17);WRITE ('< 1 >   =   den Name');
  GOTOXY (25,18);WRITE ('< 2 >   =   die Abteilung');
  GOTOXY (25,19);WRITE ('< 3 >   =   die Ausgabe');
  GOTOXY (25,20);WRITE ('< 4 >   =   den Wochenbeginn');
  GOTOXY (25,21);WRITE ('< 5 >   =   das Wochenende');
  GOTOXY (25,22);WRITE ('< 6 >   =   das Jahr');
  GOTOXY (25,23);WRITE ('< 7 >   =   das Lehrjahr');
  GOTOXY (25,24);WRITE ('<ESC>   =   überhaupt nichts verbessern.');
  GOTOXY (25,26);WRITE ('Deine Wahl bitte: ');
  Wahl := ReadKey;

  CASE Wahl OF '1' : BEGIN
                       GOTOXY ( 5,29);
                       WRITE ('Gebe bitte den neuen Namen ein!');
                       Stammdaten(1);
                     END;

               '2' : BEGIN
                       GOTOXY ( 5,29);
                       WRITE ('Verbessere bitte die Abteilung!');
                       Stammdaten(2);
                     END;

               '3' : BEGIN
                       GOTOXY ( 5,29);
                       WRITE ('Der wievielte Bericht ist es wirklich?');
                       Stammdaten(3);
                     END;

               '4' : BEGIN
                       GOTOXY ( 5,29);
                       WRITE ('Die Woche begann am...');
                       Stammdaten(4);
                     END;

               '5' : BEGIN
                       GOTOXY ( 5,29);
                       WRITE ('Die Woche endete am...');
                       Stammdaten(5);
                     END;

               '6' : BEGIN
                       GOTOXY ( 5,29);
                       WRITE ('Welches Jahr?');
                       Stammdaten(6);
                     END;

               '7' : BEGIN
                       GOTOXY ( 5,29);
                       WRITE ('In welchem Lehrjahr bist Du wirklich? (1/2/3) ');
                       Stammdaten(7);
                     END;

               ESC : Verbessern;

  ELSE
  END;
 Wahl := chr(0);
 Stammfeld
END;

PROCEDURE ReadZeile(Wahl : CHAR);
BEGIN
    GOTOXY (3,29);ClrEol;
    WRITE ('T: ');
    CASE Wahl OF 'A' : BEGIN READLN (FeldA[Zeile]);Verb1Feld END;
                 'B' : BEGIN READLN (FeldB[Zeile]);Verb2Feld END;
                 'C' : BEGIN READLN (FeldC[Zeile]);Verb3Feld END;
    ELSE
    END
END;


PROCEDURE Verb1Feld;
BEGIN
  I := 0;
  L := 1;
  Dummy := chr(0);
  Dummytxt := '';
  ZeigeFeldA('N');
  REPEAT
    GOTOXY ( 7,29);ClrEol;
    WRITE ('Welche Zeile möchtest Du verbessern? (<ESC> = nichts) ');

    FOR I:=1 TO 2 DO
    BEGIN
      Dummy := ReadKey;
      Write (Dummy);
      IF Dummy = ESC THEN Verbessern;
      IF Dummy = RETURN THEN BEGIN
                               VAL (Dummytxt,Zeile,Code);
                               ReadZeile('A');
                               Verb1Feld;
                             END;
      IF (Dummy >= '0') AND (Dummy <= '9') THEN Dummytxt := Dummytxt + Dummy
                                           ELSE Verb1Feld;
    END;
    VAL (Dummytxt,Zeile,Code);
    IF (Zeile > AMax) THEN Verb1Feld;
    IF (Zeile = 0) THEN Verb1Feld;
    ReadZeile('A');
  UNTIL TRUE
END;

PROCEDURE Verb2Feld;
BEGIN
  I := 0;
  L := 1;
  Dummy := chr(0);
  Dummytxt := '';
  ZeigeFeldB('N');
  REPEAT
    GOTOXY ( 7,29);ClrEol;
    WRITE ('Welche Zeile möchtest Du verbessern? (<ESC> = nichts) ');

    FOR I:=1 TO 2 DO
    BEGIN
      Dummy := ReadKey;
      Write (Dummy);
      IF Dummy = ESC THEN Verbessern;
      IF Dummy = RETURN THEN BEGIN
                               VAL (Dummytxt,Zeile,Code);
                               ReadZeile('B');
                               Verb2Feld;
                             END;
      IF (Dummy >= '0') AND (Dummy <= '9') THEN Dummytxt := Dummytxt + Dummy
                                           ELSE Verb2Feld;
    END;
    VAL (Dummytxt,Zeile,Code);
    IF (Zeile > BMax) THEN Verb2Feld;
    IF (Zeile = 0) THEN Verb2Feld;
    ReadZeile('B');
  UNTIL TRUE
END;

PROCEDURE Verb3Feld;
BEGIN
  I := 0;
  L := 1;
  Dummy := chr(0);
  Dummytxt := '';
  ZeigeFeldC('N');
  REPEAT
    GOTOXY ( 7,29);ClrEol;
    WRITE ('Welche Zeile möchtest Du verbessern? (<ESC> = nichts) ');

    FOR I:=1 TO 2 DO
    BEGIN
      Dummy := ReadKey;
      Write (Dummy);
      IF Dummy = ESC THEN Verbessern;
      IF Dummy = RETURN THEN BEGIN
                               VAL (Dummytxt,Zeile,Code);
                               ReadZeile('C');
                               Verb3Feld;
                             END;
      IF (Dummy >= '0') AND (Dummy <= '9') THEN Dummytxt := Dummytxt + Dummy
                                           ELSE Verb3Feld;
    END;
    VAL (Dummytxt,Zeile,Code);
    IF (Zeile > CMax) THEN Verb3Feld;
    IF (Zeile = 0) THEN Verb3Feld;
    ReadZeile('C');
  UNTIL TRUE
END;


PROCEDURE Verbessern;
BEGIN
  ClrScr;
  GOTOXY (10,5) ; WRITE ('M O D U S  -  V E R B E S S E R N');
  GOTOXY (10,10); WRITE ('Welchen Teil möchtest Du verbessern ?');
  GOTOXY (10,12); WRITE ('< S >   =   Stammfeld');
  GOTOXY (10,14); WRITE ('< 1 >   =   Betriebliche Tätigkeiten');
  GOTOXY (10,16); WRITE ('< 2 >   =   Unterweisungen, Lehrgespräche usw.');
  GOTOXY (10,18); WRITE ('< 3 >   =   Berufsschule');
  GOTOXY (10,21); WRITE ('<ESC>   =   Unterprogramm verlassen');
  GOTOXY (10,28); WRITE ('Deine Wahl: ');
  Wahl := ReadKey;

  CASE Wahl OF 'S','s' : Stammfeld;
               '1'     : Verb1Feld;
               '2'     : Verb2Feld;
               '3'     : Verb3Feld;
               ESC     : Menu;
  ELSE                   Verbessern
  END;
END;

PROCEDURE Menu;
BEGIN
  ClrScr;
  GOTOXY (10, 3);WRITE ('WoBe - Version',Version,'          '{,Datum});
  GOTOXY (10, 7);WRITE ('Was möchtest Du jetzt erledigen ?');
  GOTOXY (10, 9);WRITE ('< V >   =   Vorderseite bedrucken  / Funktion ausgebaut {}');
  GOTOXY (10,11);WRITE ('< R >   =   Rückseite bedrucken    / dto.');
  GOTOXY (10,14);WRITE ('< Z >   =   Bericht anzeigen     ');
  GOTOXY (10,16);WRITE ('< Ä >   =   Bericht verbessern   ');
  GOTOXY (10,18);WRITE ('< N >   =   Bericht neu schreiben');
  GOTOXY (10,22);WRITE ('< I >   =   Informationen        ');
  GOTOXY (10,24);WRITE ('<ESC>   =   Programm beenden     ');
  GOTOXY (10,28);WRITE ('Deine Wahl bitte: ');ClrEol;Wahl := ReadKey;

  CASE Wahl OF 'V','v' :{ BEGIN
                           WRITELN ('Vorderseite wird bedruckt.');
                           Drucken ('10');
                           Delay (10);}
                           Menu
                        { END;}

               'R','r' :{ BEGIN
                           WRITELN ('Rückseite wird bedruckt.');
                           Drucken ('3');
                           Delay (10);}
                           Menu
                        { END;}

               'Z','z' : BEGIN
                           ZeigeStamm('J');
                           ZeigeFeldA('J');
                           ZeigeFeldB('J');
                           ZeigeFeldC('J');
                           Menu
                         END;

               'Ä','ä' : BEGIN
                           Verbessern;
                          END;

               'N','n' : BEGIN
                           ClrScr;
                           GOTOXY (12,15);WRITE ('Willst Du den Bericht wirklich nochmal von vorn schreiben? ');
                           Wahl := ReadKey;
                           Wahl := UpCase(Wahl);
                           IF (Wahl='J') THEN LiesAll;
                           Menu;
                         END;

               'I','i' : Informationen;

                ESC    : BEGIN
                          Wahl := ' ';
                          ClrScr;
                          WRITELN;
                          WRITE ('        Programm wirklich verlassen (j/n) ');
                          Wahl := ReadKey;
                          Wahl := UpCase(Wahl);
                          IF (Wahl='J') THEN BEGIN
{                                              TextMode(2);}
                                               Halt(0);
                                             END;
                          Menu;
                         END;
  ELSE Menu
  END;
END;

BEGIN
{    Textmode (263);
    Date(Datum);
    HighVideo;}
    LiesAll;
END.




