program konvert;
{

Konvertiert FAST Zeichensaetez in DOWNLOAD fuer EPSON FX-80(+)

Version 1.0 Stand: 02.05.88 (c) GHE, Gunkel

---------------------------------------------------------------------------
beim veraendern diese Files beachten Sie bitte:

- die Werte sind jetzt fest fuer FAST Zeichensaetze und Epson eingestellt
- jeder Drucker hat in der regel andere Werte ueber den Aufbau eines
  DownLoad-Zeichensatzes
- Lesen Sie daher den Aufbau der FAST-Zeichensaetze im FAST Handbuch
  Seite 12/13
- Lesen Sie in Ihrem Druckerhandbuch das entsprechende Kapitel ueber den
  DownLoad-Zeichensatz
- das ganze hat nur Sinn, wenn Ihr Drucker das 8.Bit hardwaremaessig nach-
  geruestet hat. Lesen Sie dazu im File README.DOC den entsprechenden Ab-
  schnitt.
- teilen Sie uns konvertierte Zeichensaetze fuer andere Drucker bzw. anderere
  Konvertierungsprogramme mit. Sie helfen damit anderen Usern

-----------------------------------------------------------------------------
}

const
     rec1 = 4096;       { Puffergroesse in Bytes }
     buf1 = 32;         { Puffergroesse in Records a 128 Bytes }
     attribut = 139;    { bei Proportional entsprechend Zeichenbreite
                          setzen, hier fest fuer maximale Breite gesetzt }


var
   datei1 : string[14];            { Quelldatei zum wandeln name.FON }
   datei2 : string[14];            { Zieldatei $+name.FON            }
   file1  : file;
   file2 : text;
   byte_zaehler1,
   record_zaehler1  : integer;


   buffer1 : array [1..rec1] of byte;
   byt     : array [0..7] of byte;
   bit     : array [0..7] of byte;

   file_end : boolean;

   i,j,k,m,n,send,laenge,
   zeichen_anzahl    : integer;

{ ======================================================================== }
procedure read_file1;

{ liesst die Quelldatei in ein Zug in Speicher }

begin
  byte_zaehler1 := 1;
  if record_zaehler1>buf1 then
  begin
    blockread(file1,buffer1,buf1);
    record_zaehler1 := record_zaehler1-buf1;
    file_end := false;
  end
  else
    begin
      blockread(file1,buffer1,record_zaehler1);
      file_end:=true;
    end;

end;
{ ======================================================================== }
procedure wandel;

begin
     for j := 1 to zeichen_anzahl do
     begin
        write(char(j+31));
        write(file2,char(attribut));

        (* die naechsten 8 Bytes laden *);
        for i:= 0 to 7 do
            begin
              byt[i]:=buffer1[byte_zaehler1+i];
            end;

        byte_zaehler1:=byte_zaehler1+8;


        (* Matrix wandeln *)
        n := 128;
        for i:=0 to 7  do
            begin

              for k:=0 to 7 do
                  begin
                    bit[k]:= 0; (* Bits loeschen *)
                  end;

              for k:=0 to 7 do
                  begin
                    bit[k]:=byt[k] div n;
                    byt[k]:= byt[k] - (bit[k]*n);
                  end;

              send := 0;

              (* nach bitwertigkeit neues byte bilden *)
              m := 128;
              for k:=0 to 7 do
                  begin
                    send:=send+(bit[k]*m);
                    m := m shr 1;
                  end;

              write(file2,char(send));

              n:= n shr 1;
            end; (* byte zeichenschleife *)

            write(file2,char(0),char(0),char(0));
     end; (* der Zeichenschleife *)
end;

{ ========================================================================== }

{ MAIN }

begin

   clrscr;
   writeln('Konvertierung FAST Zeichensaetze zu DownLoad-Zeichensaetze fuer');
   writeln('                        EPSON FX-80(+)');
   writeln('                     (c) 4/88 by GHE, Gunkel');
   writeln; writeln('Zur Programmfortfuehrung bitte Taste druecken');
   writeln;
   write('Name der zu wandelnden Zeichensatzdatei eingeben : ');
   readln (datei1);
   datei2 := '$'+datei1;
   writeln('Zieldatei = ',datei2);
   writeln; writeln('Bitte etwas Geduld ***** working');
   assign(file1,datei1);
   reset(file1);

   record_zaehler1 := filesize(file1);
   file_end:= false;
   while not file_end do
         begin
           read_file1;
         end;

  close(file1);

  assign(file2,datei2);
  rewrite(file2);

  laenge := ((buffer1[128]*256) + (buffer1[127]));
  zeichen_anzahl := laenge div 8;
  writeln (zeichen_anzahl);
  byte_zaehler1 := 129;

  wandel ;

  writeln;
  writeln('Ende der Umwandlung');

  close (file2);

end.