PROGRAM comrec;

{ Zusammen mit COMSEND zur Uebertragung von Dateien aller Art
  ( auch .COM) ueber RS 232 Schnittstelle geeignet.           }

VAR fname        : STRING [14];
    comfile      : FILE;
    filegroesse,
    blockzaehler : integer;
    puffer       : ARRAY [0..16383] OF byte;
    ein          : char;
    count        : byte;
    block        : ARRAY [0..255] OF char;

{====================================================================}

PROCEDURE liesblock;

VAR i : byte;

BEGIN { liesblock }
  FOR i := 0 TO 255 DO
    read (aux, block [i])
END;  { liesblock }

{====================================================================}

PROCEDURE schreibinpuffer;

VAR i : byte;

BEGIN { schreibinpuffer }
  FOR i := 0 TO 127 DO
    puffer [(((blockzaehler-1) AND 127) SHL 7)+i] :=
           ((ord (block [i SHL 1]) AND 15) SHL 4)
        OR (ord (block [(i SHL 1)+1]) AND 15)
END;  { schreibinpuffer }

{====================================================================}

BEGIN { comrec }
  clrscr;
  write ('Name des Files : ');
  readln (fname);
  assign (comfile, fname);
  {$I-}
  reset (comfile);
  {$I+}
  IF ioresult = 0
    THEN
      BEGIN
        write ('File existiert bereits. Loeschen (J/N) ? ');
        REPEAT
          read (kbd, ein)
        UNTIL ein IN ['j', 'J', 'n', 'N'];
        IF ein IN ['n', 'N']
          THEN
            halt
      END;
  rewrite (comfile);
  writeln ('Fertig zur Uebernahme.');
  read (aux, ein);
  filegroesse := (ord (ein)-32)*64;
  write (aux, ein);
  read (aux, ein);
  filegroesse := filegroesse+ord (ein)-32;
  write (aux, ein);
  write ('Filegrosse : ', filegroesse, ' CP/M - Sektoren.');
  gotoxy (5, 5);
  write ('wird uebertragen.');
  FOR blockzaehler := 1 TO filegroesse DO
    BEGIN
      gotoxy (1, 5);
      write (blockzaehler:3);
      liesblock;
      schreibinpuffer;
      IF blockzaehler MOD 128 = 0
        THEN
          blockwrite (comfile, puffer, 128);
      write (aux, ein)
    END;
  blockwrite (comfile, puffer, filegroesse MOD 128);
  close (comfile);
  gotoxy (1, 6);
  writeln ('Uebertragung beendet.')
END.  { comrec }