program epson;

var
   inp        : char;
   i          : integer;

procedure menue;

begin

   clrscr;
   gotoxy ( 0 , 0 );
   writeln;
   writeln ( '         Programm zur Einstellung der FX-80 Parameter' );
   writeln;  writeln;
   writeln ( '                  1   =>    Linker Rand' );
   writeln;
   writeln ( '                  2   =>    Schriftart' );
   writeln;
   writeln ( '                  3   =>    Zeilenabstand' );
   writeln;
   writeln ( '                  4   =>    Zeichensatz' );
   writeln;
   writeln ( '                  5   =>    Italic' );
   writeln;
   writeln ( '                  6   =>    Standard' );
   writeln;
   writeln ( '                  7   =>    Drucker-Reset' );
   writeln;
   writeln ( '                  e   =>    Zurueck zu CP/M' );
   writeln;
   write ( '              Gewuenschte Funktion eingeben : ' );
  end;

procedure eps ( c : char );
  begin
    bdos ( 5 , ord ( c ) );
  end;

procedure esc;
  begin
    eps ( chr ( 27 ) );
  end;

procedure reset;
  begin
    esc; eps('@');
  end;

procedure chrset;
  begin
    clrscr; gotoxy( 0 , 1 );
    writeln( '            Waehle den Internationalen Zeichensatz' );
    writeln; writeln;
    writeln ( '                  1   =>    USA' );
    writeln;
    writeln ( '                  2   =>    Frankreich' );
    writeln;
    writeln ( '                  3   =>    Deutschland' );
    writeln;
    writeln ( '                  4   =>    England' );
    writeln;
    writeln ( '                  5   =>    Daenemark' );
    writeln;
    writeln ( '                  6   =>    Schweden' );
    writeln;
    writeln ( '                  7   =>    Italien' );
    writeln;
    writeln ( '                  8   =>    Spanien' );
    writeln;
    writeln ( '                  9   =>    Japan' );
    writeln;
    write ( '                Zeichensatz eingeben : ' );

    read ( i );
    if i in [1..9]
    then begin
         esc;  eps ( 'R' );  eps ( chr ( i -1 ) );
         end
    else write ( chr ( 7 ) );
  end;

procedure lmar;
  begin
    clrscr; gotoxy( 0 , 4 );
    write( '      Wie breit soll der Rand sein : ' );
    read ( i );
    esc;  eps( 'l' );  eps( chr ( i ) );
  end;

procedure sart;
  begin
    clrscr; gotoxy( 0 , 1 );
    writeln( '                Waehle die Schriftart ' );
    writeln; writeln;
    writeln ( '                  1   =>    Normal' );
    writeln;
    writeln ( '                  2   =>    Elite' );
    writeln;
    writeln ( '                  3   =>    Condensed' );
    writeln;
    writeln ( '                  4   =>    Emphasized' );
    writeln;
    writeln ( '                  5   =>    Condensed Double' );
    writeln;
    writeln ( '                  6   =>    Enlarged' );
    writeln;
    writeln ( '                  7   =>    Elite Enlarged' );
    writeln;
    writeln ( '                  8   =>    Emphasized Enlarged' );
    writeln;
    writeln ( '                  9   =>    Emph. Enl. Double' );
    writeln;
    write ( '                 Schriftart eingeben : ' );

    read ( i );
    case i of
     1 : i := 0;
     2 : i := 1;
     3 : i := 4;
     4 : i := 8;
     5 : i := 20;
     6 : i := 32;
     7 : i := 33;
     8 : i := 40;
     9 : i := 57;
    end;

    esc;   eps ( '!' );   eps ( chr ( i ) );
  end;

procedure italic;
  begin
    esc;  eps ( '4' );
  end;

procedure standard;
  begin
    esc;  eps ( '5' );
  end;

procedure lineabst;
  begin
    clrscr; gotoxy( 0 , 4 );
    writeln( ' Wieviele Punkte sollen zwischen den Zeilen sein ?' );
    write  ( ' Standart = 15   Zeichenhoehe = 8    Eingabe : ' );
    read ( i );
    esc;  eps( 'A' );  eps( chr ( i ) );
  end;

begin { hauptprogramm }

   repeat
   begin
     menue;

     repeat until keypressed;

     inp := chr ( bdos ( 6 , 255 ) );

     case inp of
      '1' : lmar;
      '2' : sart;
      '3' : lineabst;
      '4' : chrset;
      '5' : italic;
      '6' : standard;
      '7' : reset;
     end;
   end;
   until ( inp = 'e' ) or ( inp = 'E' );

end.