home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 05 / disptext.pas next >
Encoding:
Pascal/Delphi Source File  |  1988-02-09  |  4.1 KB  |  136 lines

  1. TYPE Cpm_Name  = STRING [ 14] ;
  2.  
  3. PROCEDURE DispText( Quell_Name : CPM_Name );
  4.  
  5. { Diese Prozedur gibt einen Text von der Diskette auf den  }
  6. { Bildschirm aus.                                          }
  7.  
  8. {     -    Copyright (c) 1988 Pascal International   -     }
  9. {     -          Autor  :   Heinz Hagemeyer          -     }
  10.  
  11. { -------------------------------------------------------- }
  12.  
  13.  
  14. CONST   WS        = TRUE ;
  15.  
  16. { Wird WS auf false gesetzt, erfolgt keine Ausblendung des }
  17. { Bit 7 und keine Auswertung der von Wordstar benutzten    }
  18. { Steuerzeichen.                                           }
  19.  
  20.         Max_Zeile = 24 ;  { maximal mögliche Zeilen        }
  21.         CR        = 13 ;  { ASCII 13 = Zeilenende          }
  22.  
  23. VAR anzahl,
  24.     ascii    : INTEGER ;
  25.     c        : CHAR;
  26.     Quelle   : TEXT;
  27.  
  28. PROCEDURE Oeffne_Quell_Datei (Quell_Name : Cpm_Name );
  29.  
  30. { Oeffnet die Quelldatei zum Lesen. Ueberprueft gleichzei- }
  31. { tig, ob diese ueberhaupt vorhanden ist. Falls nicht, er- }
  32. { folgt Programmabbruch !                                  }
  33.  
  34. BEGIN
  35.      Assign (Quelle, Quell_Name  );
  36.  
  37.      {$I-}                      { Fehlerueberwachung aus   }
  38.           Reset (Quelle);
  39.      {$I+}                      { und wieder ein.          }
  40.  
  41.      IF IOResult <> 0 THEN      { Falls Fehler aufgetreten }
  42.      BEGIN
  43.           WriteLn;WriteLn;
  44.           WriteLn ('**    Quelldatei existiert nicht !    ',
  45.                    '  **': 38);
  46.           WriteLn ('**  Programm wird daher abgebrochen ! ',
  47.                    '  **': 38);
  48.           HALT;
  49.      END;
  50.      WriteLn;
  51. END { Oeffne_Quell_Datei } ;
  52.  
  53. { ---------------------------------------------------------}
  54.  
  55. FUNCTION Naechste_Seite : BOOLEAN ;
  56.  
  57. CONST Klingel       = #07      ;
  58.       Loesche_Zeile = #27'[2K' ;       { ANSI - Terminal ! }
  59.       Cursor_Up     = #27'[1A' ;       { dto.              }
  60.       INVERS_On     = #27'[7m' ;       { dto.              }
  61.       INVERS_Off    = #27'[0m' ;       { dto.              }
  62.  
  63. VAR c : CHAR;
  64.  
  65. BEGIN
  66.      Write (Invers_On);                { Umschalten auf    }
  67.                                        { INVERSE - Ausgabe }
  68.      Write (Klingel,'Fuer naechste Seite Taste pressen.   ',
  69.             'Wenn genug gelesen, "." druecken : ');
  70.  
  71.      Write (Invers_Off) ;            { Zurueckschalten auf }
  72.                                      { normale Ausgabe     }
  73.  
  74.      REPEAT
  75.            Read (kbd,c) ;
  76.      UNTIL Ord (c) > 0  ;
  77.  
  78.      WriteLn (Loesche_Zeile,Cursor_Up);  { Hier geht auch  }
  79.                                          { DelLine, wenn   }
  80.      Naechste_Seite := c <> '.';         { initialisiert   }
  81. END;
  82.  
  83. BEGIN
  84.      Oeffne_Quell_Datei (Quell_Name) ;
  85.      Anzahl := 0;
  86.  
  87.      WHILE NOT EoF (quelle) DO
  88.      BEGIN
  89.           Read (quelle,c);
  90.           ascii := Ord (c);
  91.  
  92.      { Fuer  Wordstar-Muffel : Bei bestehenden Texten, die }
  93.      { nicht durch Wordstar unter CP/M erzeugt wurden,     }
  94.      { sind die folgenden Zeilen zu entfernen bzw. geeig-  }
  95.      { net zu aendern, wenn das verwendetete Textprogramm  }
  96.      { das 7. Bit anders nutzt. Am Einfachsten geht dies   }
  97.      { durch Aendern der Konstanten  WS. Bei Benutzung des }
  98.      { Turbo Pascal Editors ist das nicht noetig, es sei   }
  99.      { denn, man benutzt das ^P - Steuerzeichen.           }
  100.  
  101.           IF WS THEN
  102.           BEGIN
  103.                WHILE ascii > $7F DO ascii := ascii - $80;
  104.                c := Chr (ascii);
  105.                IF ascii = $1F THEN Write ('-');
  106.                                   { "weiches" Trennzeichen }
  107.           END;
  108.  
  109.           IF ascii > $1F              { kein Steuerzeichen }
  110.           THEN Write (c);
  111.  
  112.           IF ascii = CR
  113.           THEN
  114.           BEGIN
  115.                WriteLn;
  116.                anzahl := Succ (anzahl);
  117.           END;
  118.  
  119.           IF Anzahl > Max_Zeile - 2 THEN
  120.           BEGIN
  121.                IF NOT Naechste_Seite
  122.                THEN
  123.                BEGIN
  124.                     Close (Quelle);
  125.                     Exit;
  126.                END ;
  127.                Anzahl := 0;
  128.           END;
  129.  
  130.      END { WHILE } ;
  131.  
  132.      Close (Quelle);
  133.  
  134. END; { DispText }
  135.  
  136.