PROGRAM comsend;

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

VAR fname        : STRING [14];
    comfile      : FILE;
    aus          : char;
    pufferzeiger,
    filegroesse,
    blockzaehler : integer;
    puffer       : ARRAY [0..16383] OF byte;
    i, j         : byte;
    lonibble,
    hinibble     : 32..47;

BEGIN { comsend }
  write ('Name des zu sendenden Files : ');
  read (fname);
  {$I-}
  assign (comfile, fname);
  reset (comfile);
  {$I+}
  IF ioresult <> 0
    THEN
      BEGIN
        writeln ('File existiert nicht.');
        halt
      END;
  clrscr;
  writeln ('Gesendet wird : ', fname);
  filegroesse := filesize (comfile);
  writeln ('Filegroesse : ', filegroesse, ' CP/M - Sektoren.');
  write (aux, chr (32+filegroesse DIV 64));
  read (aux, aus);
  write (aux, chr (32+filegroesse MOD 64));
  read (aux, aus);
  gotoxy (5, 5);
  write ('wird uebertragen.');
  blockzaehler := 1;
  WHILE filegroesse > 0 DO
    BEGIN
      IF filegroesse >= 128
        THEN
          pufferzeiger := 128
        ELSE
          pufferzeiger := filegroesse MOD 128;
      filegroesse := filegroesse-pufferzeiger;
      blockread (comfile, puffer, pufferzeiger);
      FOR j := 0 TO pufferzeiger-1 DO
        BEGIN
          gotoxy (1,5);
          write (blockzaehler:3);
          FOR i := 0 TO 127 DO
            BEGIN
              lonibble := 32 OR puffer [(j SHL 7)+i] AND 15;
              hinibble := 32 OR puffer [(j SHL 7)+i] SHR 4;
              write (aux, chr (hinibble), chr (lonibble))
            END;
          read (aux, aus);
          blockzaehler := succ (blockzaehler)
        END
    END;
  close (comfile);
  gotoxy (1,6);
  writeln ('Uebertragung beendet.')
END.  { comsend }