{*************************************************
 **              L I S T I N G  1               **
 **                                             **
 **   1st_Word Konvertierung als Rahmenprozedur **
 **                                             **
 **   written by M.Baldauf   3/87               **
 **                                             **
 *************************************************}
procedure st_word_print;
var i:integer;     { hier mssen sicherlich noch einige Variablen mehr }
                   { Deklariert werden, aber dies Prozedur ist ja auch }
                   { nicht lauff„hig }

  procedure print_line(line:string);    { Ausdrucken einer Zeile je nach }
  begin                                 { eingestellten Schriftwnschen }
    { hier wird dann in eine Routine }
    { verzweigt die den Ausdruck des }
    { Strings 'line' bernimmt.      }
    { In meinem Programm ist dies eine }
    { NLQ-Druckroutine, kann aber auch }
    { jede andere Routine benutzt werden }
  end;

  procedure kopf;                       { Erzeugen und Ausdrucken der Kopf- }
  begin                                 { zeile }
    { Denken Sie daran, daž die Kopf- }
    { mitte auch in die Mitte kommt.  }
    { Weiter ist wichtig zu testen wo }
    { der Seitenz„hler '#' steht.     }
    { Er kann im Kopf links, rechts,  }
    { in der Mitte stehen sowie auch  }
    { mehrmals.                       }
    { Die Seiten muž das Programm     }
    { selbst z„hlen. Die Seitenzahl   }
    { wird dann in einen String umge- }
    { wandelt und ersetzt dann das    }
    { Doppelkreuz '#' }
  end;

  procedure fuss;                      { Zusammenstellen der Fužzeile }
    { Hier gilt das Gleiche wie bei   }
    { der Kopfzeile }
  end;

  procedure read_zeile;               { 10 Zeilen von Diskette einlesen }
  begin
    { hier werden eine bestimmte     }
    { Anzahl Zeilen von Diskette in  }
    { ein String Array eingelesen.   }
    { Immer auch testen ob File-Ende }
    { erreicht ist }
    { Das Einlesen mehrerer Zeilen   }
    { beschleunigt den Druckvorgang  }
    { nicht unwesentlich }
  end;

begin      { Begin von st_word_print }
  { Seitenzahl auf Startwert setzen }
  { Zeilenz„hler auf 0 setzen }
  { Text-Datei ”ffnen }
  { Ausgaben auf Drucker umleiten }
  { Drucker initialisieren }

  repeat
    read_zeile;
    zaehler := 0;
    while ((zaehler < {eingelesene Zeilen} ) and (keypress = false)) do
      begin
        zaehler := zaehler + 1;
        line := {eingelesene Zeile}[zaehler];
        if ((length(line) > 1) and (ord(line[1]) = 31)) then
          begin
            case line[2] of
              '0' : begin   { Layout Daten }
                      { Hier werden die Layout-Daten }
                      { herausgefiltert. Die eingelesene }
                      { Linie wird also nach der '0' in }
                      { Teile zu je 2 Zeichen zerlegt. }
                      { Diese 2 Zeichen werden dann in einen }
                      { Zahlenwert umgerechnet }
                    end;
              '1' : begin   { Kopfzeile, eventuell mit # als Seitenz„hler }
                      { Hier werden die einzelnen Teile der Kopf-Zeile }
                      { herausgefiltert und jeweils einem String zu- }
                      { gewiesen }
                    end;
              '2' : begin   { Fusszeile, eventuell mit # als Seitenzaehler }
                      { Genauso wie bei der Kopf-Zeile }
                    end;
              '9' : begin   { Formatzeile mit Tabulator-Zeichen }
                      pap_breit := pos(']',line) - 2;   { Druckbreite festl. }
                    end;
            end;
          end
        else
          begin
            if ((length(line) > 0) and (ord(line[1]) = 12)) then
              begin                           { Formfeed -> Vorschub }
                { Vorschub bis Foot-Marke }
                { Fužzeile drucken und Seitenz„hler erh”hen }
                { Zeilenz„hler auf 0 }
              end;
            if pap_zeil = pap_len-pap_foot-pap_bof then
              begin                           { Seite voll -> Vorschub }
                { Fužzeile drucken und Seitenz„hler erh”hen }
                { Zeilenz„hler auf 0 }
              end;
            if pap_zeil < 1 then              { Es ist wohl Zeit einen - }
              begin                           { Kopf auszudrucken }
                kopf;
                pap_zeil := pap_tof+pap_head; { Kopf gedruckt -> Zeilen- }
              end;                            { z„hler setzen }
            ganz_zeil := '';
            lang:=length(line);        { Wie lang ist denn die Zeile ? }
            for i := 1 to lang do
              begin
                zei:=copy(line,i,1);   { Aktuelles zeichen holen }
                zeich := ord(zei[1]);  { ASCII-Code }
                if flag = 1 then       { Aha, jetzt kommt ein Style change }
                  flag := 0
                else
                  if zeich > 31 then   { Alles in Ordnung, also hinzufgen }
                    ganz_zeil := concat(ganz_zeil,chr(zeich))
                  else                 { Ansonsten mal testen was anliegt }
                    case zeich of
                      25 :    { Variable Trennung }
                           ganz_zeil := concat(ganz_zeil,'-');
                      27 : flag := 1;       { Style change }
                      28 :    { Stretch space }
                           ganz_zeil := concat(ganz_zeil,chr(32));
                      29 :    { Indent space }
                           ganz_zeil := concat(ganz_zeil,chr(32));
                      30 :    { Variable space }
                           ganz_zeil := concat(ganz_zeil,chr(32));
                    end;
              end;
            { jetzt die Zeile ausgeben }
            print_line(ganz_zeil);
            pap_zeil := pap_zeil + 1;  { Wieder eine Zeile gedruckt }
          end;
      end;
    if eof(fil) then                   { Was, Text schon zu Ende ? }
      begin                            { Noch schnell Vorschub bis Fuž  - }
        { Fužzeile ausdrucken - }
        quit := true;   { und jetzt ist Feierabend }
      end;
    if keypress then                   { Was soll der Quatsch - }
      begin                            { Abbrechen wo es gerade Spaž macht? }
        { wollen Sie wirklich abbrechen }
        { Wenn ja, dann 'Okay, berzeugt' quit := true; ansonsten weiter }
      end;
  until quit = true;                   { solange weiter bis Abbruch oder Ende }
  close(fil);                          { Text-Datei schliesen }
  rewrite(output,'CON:');    { Standart-Ausgabe auf Konsole lenken }
end;      { Ende von st_word_print }
