const JmenoProgramu='ce~s';
type poradityp=record pocet1:word;por1:byte;end;
const datablok=10000; {tak, aby 4x max do 65535}
      delka_hlavicky=17;
      max_delka_mapy=((9*datablok)shr 3)+delka_hlavicky;
var
    FromF,ToF: file;
    jmeno1,jmeno2,komprimuj:string;
    Nacteno, Zapsano, NactenoX, ZapsanoX: Word;
    vstbuf: array[1..datablok] of byte;
    vystbuf:  array[1..datablok+1] of byte; {!!! pro A/N komprimovat?}
      {zatim se neuvazuje +1, ale +17}
    mapa: array[1..max_delka_mapy] of byte; {...odhad}
    Konec:boolean;
    p,pocty_mapa,pocty_huff:array[0..3] of poradityp; {pocet poradi}
    komprimovat:boolean;
    a,b,c,d:word;
    e,f:byte;
    ovl_byte,ovl_byte_tab:word;ovl_bit:byte;                    {komp,dekomp}
    huff_ovl_byte,mapa_ovl_byte,dek_ovl_byte:word;
    huff_ovl_bit, mapa_ovl_bit, dek_ovl_bit: byte; {dekomp}
    je_dekod:boolean;                                                {dekomp}
    tabulka:array[0..3] of record t_data:string;t_pocet:byte;end;
    komprimovane:boolean;

const tabmax=3;

{$I ces_zakl.inc}
{$I ces_komp.inc}
{$I ces_de.inc}




procedure koduj_vse;
begin
  Konec:=True;
  repeat
    Nacti_Blok_k;
    if Konec<>False then
      begin CompK;if zapsanoX<>0 then Zapis_Blok_k;ZapsanoX:=0;end;
  until Konec=False;
end;

procedure dekoduj_vse;
begin
  Konec:=True;
  repeat
    Nacti_Blok_d;
    if Konec<>False then
      begin DeCompK;if zapsanoX<>0 then Zapis_Blok_d;ZapsanoX:=0;end;
  until Konec=False;
end;


begin
  Komprimuj:=ParamStr(1);
  jmeno1:=ParamStr(2);
  jmeno2:=ParamStr(3);
  if (komprimuj<>'k') and (komprimuj<>'d') then halt;
  if (jmeno1=jmeno2) or (jmeno1='') or (jmeno2='') then
   begin writeln('> Chyba v zadavani jmen souboru.');chyba;end;

  Otevri;
  if komprimuj='k' then Koduj_Vse;
  if komprimuj='d' then Dekoduj_Vse;
  Zavri;
end.

