PROGRAM Lister;

USES CRT;   {Wird immer gebraucht}

CONST DateiName = 'c:\autoexec.bat';

VAR ZeilenAnzahl : WORD;
    Inhalt       : ARRAY[1..1000] OF ^STRING;

PROCEDURE LiesEin;
VAR Datei : Text;
BEGIN
 Assign(Datei,DateiName);
 Reset(Datei);
 ZeilenAnzahl := 0;
 WHILE NOT EOF(Datei) DO BEGIN
  Inc(ZeilenAnzahl);
  New(Inhalt[ZeilenAnzahl]);
  ReadLn(Datei,Inhalt[ZeilenAnzahl]^);
 END;
END;

PROCEDURE Oberflaeche;
VAR i : BYTE;
BEGIN
 ClrScr;
 Write(DateiName);
 GotoXY(1,2);
 FOR i := 1 TO 80 DO Write(#205);
 GotoXY(1,21);
 FOR i := 1 TO 80 DO Write(#205);
END;

PROCEDURE TextAusgabe(ErsteZeile : WORD; ErstesZeichen : BYTE);
VAR i : WORD;
BEGIN
{ GotoXY(1,3);}
 FOR i := ErsteZeile TO ErsteZeile + 17 DO BEGIN
  GotoXY(1,3+(i-ErsteZeile));
  ClrEol;
  IF i <= ZeilenAnzahl THEN
   WriteLn(Copy(Inhalt[i]^,ErstesZeichen,80))
  ELSE
   WriteLn;
 END;
 GotoXY(1,22);
 WriteLn(ErsteZeile:4,' - ',ErsteZeile+17:4,' / ',ZeilenAnzahl:4);
 WriteLn(ErstesZeichen:4,' - ',ErstesZeichen+79:4);
END;

PROCEDURE Handler;
VAR Key           : CHAR;
    ErsteZeile    : WORD;
    ErstesZeichen : BYTE;
BEGIN
 ErsteZeile := 1; ErstesZeichen := 1;
 TextAusgabe(ErsteZeile,ErstesZeichen);
 REPEAT
  Key := Readkey;
  CASE Key OF
   #72 : IF ErsteZeile > 1 THEN BEGIN
          Dec(ErsteZeile);
          TextAusgabe(ErsteZeile,ErstesZeichen);
         END;
   #73 : IF ErsteZeile > 1 THEN BEGIN
          IF ErsteZeile > 17 THEN
           Dec(ErsteZeile,17)
          ELSE
           ErsteZeile := 1;
          TextAusgabe(ErsteZeile,ErstesZeichen);
         END;
   #75 : IF ErstesZeichen > 1 THEN BEGIN
          Dec(ErstesZeichen);
          TextAusgabe(ErsteZeile,ErstesZeichen);
         END;
   #77 : IF ErstesZeichen < 176 THEN BEGIN
          Inc(ErstesZeichen);
          TextAusgabe(ErsteZeile,ErstesZeichen);
         END;
   #80 : IF ErsteZeile+17 < ZeilenAnzahl THEN BEGIN
          Inc(ErsteZeile);
          TextAusgabe(ErsteZeile,ErstesZeichen);
         END;
   #81 : IF ErsteZeile+17 < ZeilenAnzahl THEN BEGIN
          Inc(ErsteZeile,17);
          TextAusgabe(ErsteZeile,ErstesZeichen);
         END;
{      #81 : IF ErsteZeile+17 < ZeilenAnzahl THEN BEGIN
           IF ErsteZeile+34 <= ZeilenAnzahl THEN
            Inc(ErsteZeile,17)
           ELSE
            ErsteZeile := ZeilenAnzahl-17;
           TextAusgabe(ErsteZeile);
          END;                     }
  END;
 UNTIL Key = #27;  {ESC}
END;

BEGIN
 LiesEin;
 Oberflaeche;
 Handler;
 Write('Und Tschá... :-)');
END.

