program Printer_Initialisierung;

(* T. Reh 15.9.87 *)

const ziffern : set of char = ['0'..'9'];

var   eingabe : string[80];
      i       : byte;
      bef,u   : char;

procedure menue;
begin
  write(#27'G8M|gliche Schalter :'#27'G0'^M^J,
  ^J'I  : Initialisieren         6  : 6 Zeilen/Zoll',
^M^J'Bn : Breitschrift an/aus    8  : 8 Zeilen/Zoll',
^M^J'Dn : Doppeldruck an/aus     Pn : Seitenl{nge in Zeilen',
^M^J'En : Elite an/aus           Ln : Linker Rand',
^M^J'Fn : Fettdruck an/aus       Rn : Rechter Rand',
^M^J'Kn : Kursivschrift an/aus   Un : Unterer Rand',
^M^J'Qn : NLQ-Druck an/aus       Zn : Zeichensatz',
^M^J'Sn : Schmalschrift an/aus   Xn : Einzelblatt an/aus',
^M^J'M  : Miniaturdruck          Yn : Ende-F}hler an/aus'^M^J^J);
  end;

function wert:char;
var hilf : byte;
begin
  hilf:=0;
  while (eingabe[i] in ziffern) and (i<=length(eingabe)) do begin
    hilf:=10*hilf+ord(eingabe[i])-$30;
    i:=succ(i);
    end;
  wert:=chr(hilf);
  end;

begin
  writeln('Printer-Init V1.1 vom 15.9.87'^M^J);
  move(mem[$80],eingabe,succ(mem[$80]));
  if length(eingabe)=0 then begin
    menue;
    write('Eingabe : ');
    readln(eingabe);
    end;
  i:=1;
  while i<=length(eingabe) do begin
    bef:=upcase(eingabe[i]);
    i:=succ(i);
    case bef of
      '6' : write(lst,#27'2');              (* 6 Zeilen/Zoll *)
      '8' : write(lst,#27'0');              (* 8 Zeilen/Zoll *)
      'B' : write(lst,#27'W',wert);         (* Breitschrift  *)
      'D' : case wert of
              #0 : write(lst,#27'H');
              #1 : write(lst,#27'G');       (* Doppeldruck   *)
              end;
      'E' : case wert of
              #0 : write(lst,#27'P');
              #1 : write(lst,#27'M');       (* Elite         *)
              end;
      'F' : case wert of
              #0 : write(lst,#27'F');
              #1 : write(lst,#27'E');       (* Fettdruck     *)
              end;
      'I' : write(lst,#27'@');              (* INIT          *)
      'K' : case wert of
              #0 : write(lst,#27'5');
              #1 : write(lst,#27'4');       (* Kursivschrift *)
              end;
      'L' : write(lst,#27'l',wert);         (* Linker Rand   *)
      'M' : write(lst,#27'S'#0#27'A'#6#15); (* Miniaturdruck *)
      'P' : write(lst,#27'C',wert);         (* Seitenlaenge  *)
      'Q' : write(lst,#27'x',wert);         (* NLQ-Druck     *)
      'R' : write(lst,#27'Q',wert);         (* Rechter Rand  *)
      'S' : case wert of
              #0 : write(lst,#18);
              #1 : write(lst,#15);          (* Schmalschrift *)
              end;
      'U' : begin
              u:=wert;
              if u=#0 then write(lst,#27'O')
              else write(lst,#27'N',u);     (* Unterer Rand  *)
              end;
      'X' : case wert of
              #0 : write(lst,#27#25#4);
              #1 : write(lst,#27#25#0);     (* Einzelblatt   *)
              end;
      'Y' : case wert of
              #0 : write(lst,#27'8');
              #1 : write(lst,#27'9');       (* Ende-Fuehler  *)
              end;
      'Z' : write(lst,#27'R',wert);         (* Zeichensatz   *)
      end;
    end;
  end.

