{ Program si vyzada zadani nazvu dvou souboru, pokud je u kterehokoliv z nich
  zadan prazdny retezec, skonci.
  Potom oba soubory otevre, prvni pro cteni, druhy pro zapis, a potom
  zkopiruje obsah prvniho souboru do druheho.
  Nakonec vypise hlaseni s informaci, kolik bylo skutecne precteno a jaka
  je velikost obou souboru. }

program kopirovani;

uses
  crt;

const
  MAX = 1000;

var
  f1, f2: file;               { netypove soubory, protoze pri kopirovani
                                na typu obsahu nezalezi }
  s1, s2: string;             { retezce pro nazvy souboru }
  pole: array[1..MAX] of char;{ do tohoto pole budeme nacitat kopirovana data }
  precteno, zapsano: word;    { kolik Bytu bylo skutecne precteno a zapsano }
  celkem: word;               { zde postupne pricitame skutecne prectene Byty }


procedure Init;
{ inicializace programu, vymalujeme par okynek na obrazovku }
begin
  window(1,1,80,3);
  textbackground(blue);
  textcolor(yellow);
  clrscr;
  writeln;
  write('                         Program pro kopirovani souboru');

  window(1,4,80,25);
  textbackground(black);
  textcolor(yellow);
  clrscr;
  writeln;
end;

procedure Done;
{ uklid obrazovky po skonceni prace programu }
begin
  window(1,1,80,25);
  textbackground(black);
  textcolor(lightgray);
  clrscr;
end;

procedure OtevriSoubory;
{ procedura nacte nazvy souboru a otevre je, prvni pro cteni, druhy pro zapis }
begin
  write(' Zadejte zdroj (soubor, ze ktereho chcete kopirovat): ');
  readln(s1);
  if s1='' then begin
    Done;
    write('Program ukoncen. Zadan prazdny retezec.');
    readln;
    halt;
  end;
  write(' Zadejte cil (cilovy soubor): ');
  readln(s2);
  if s2='' then begin
    Done;
    write('Program ukoncen. Zadan prazdny retezec.');
    readln;
    halt;
  end;

  assign(f1, s1);
  assign(f2, s2);
{$I-}
  reset(f1,1);
{$I+}
  if IOResult <> 0 then begin
    Done;
    write('Program ukoncen. Zdrojovy soubor '+s1+' se nepodarilo otevrit.');
    readln;
    halt;
  end;
{$I-}
  rewrite(f2,1);
{$I+}
  if IOResult <> 0 then begin
    close(f1);
    Done;
    write('Program ukoncen. Cilovy soubor '+s2+' se nepodarilo otevrit.');
    readln;
    halt;
  end;
end;


begin { hlavni program }
  Init;
  OtevriSoubory;
  celkem := 0;

  repeat
    BlockRead (f1, pole, sizeof(pole), precteno); { nacteme blok dat ... }
    BlockWrite(f2, pole, precteno, zapsano);      { ... a zapiseme je
                                                        do druheho souboru }
    celkem := celkem + precteno;
  until (precteno = 0) or (zapsano <> precteno);

  writeln;
  writeln('Celkem precteno:         ', celkem:5);
  writeln('Skutecna velikost zdroje:', FileSize(f1):5);
  writeln('Skutecna velikost cile:  ', FileSize(f2):5);

  close(f1);
  close(f2);
  readln;
  Done;
end.