aaauses Crt, Strings;
var
aafin: file;
aafout: file;
aap: PChar;
aazs: longint;
aazr: longint;
aalp: word;
aalz: word;
function kodujznak(c: char; klucz: byte): char;
aavar
aai: word;
aaj: byte;
begin
aaj:=ord(c);
aai:=j+klucz;
aaif(j+klucz)>255 then
aaaaaaadec(i,255); {zmniejsza o 255}
aakodujznak:=chr(i);
end;
function dekodujznak(c: char; klucz: byte): char;
avar
aai: word;
aaj: byte;
abegin
aaj:=ord(c);
aai:=j-klucz;
aaif(j-klucz)<0 then
aaaaaaainc(i,255); {zwieksza o 255}
aadekodujznak:=chr(i);
end;
procedure szyf(Co :Pchar; haslo: string);
avar
aai:longint;
aab:byte;
abegin
aab:=1;
aafor i:=0 to strlen(co)-1 do
aabegin
aaaaaaaco[i]:=kodujznak(co[i], ord(haslo[b]));
aaaaaaainc(b); if b>length(haslo) then b:=1;
aaend;
end;
procedure deszyf(Co :Pchar; haslo: string);
avar
aai:longint;
aab:byte;
abegin
aab:=1;
aafor i:=0 to strlen(co)-1 do
aaabegin
aaaaaaaco[i]:=dekodujznak(co[i], ord(haslo[b]));
aaaaaaainc(b); if b>length(haslo) then b:=1;
aaend;
aend;
{************ Poczatek glownego programu *****************}
begin
aaclrscr;
aaassign(fin, paramstr(1));
aaassign(fout, paramstr(2));
aareset(fin,1);
aarewrite(fout,1);
aazs:=filesize(fin);
aawhile zs>0 do
aaabegin
aaaaaaaazr:=maxavail-1024*3;
aaaaaaaaif zr>65535 then zr:=65534;
aaaaaaaaif zr>zs then
aaaaaaaaaaaaabegin
aaaaaaaaaaaaaaaaaaazr:=zs;
aaaaaaaaaaaaaaaaaaazs:=0;
aaaaaaaaaaaaaaend
aaaaaaaaelse
aaaaaaaaaaaaazs:=zs-zr;
aaaaaaaagetmem(p,zr);
a aaaaaarepeat
aaaaaaaaaaaablockread(fin, P^, zr, lz);
aaaaaaaaaaaaszyf(p,paramstr(3));
{dla programu deszyfrujacego powyzsza linijke nalezy zamienic na: deszyf(p, paramstr(3));}
aaaaaaaaaaaablockwrite(fout,p^,lz,lp);
aaaaaaaauntil (lz=0) or (lp<>lz);
aaaaaaaaif assigned(p) then
aaaaaaaaaaaaaaaafreemem(p,zr);
aaaaend;
aaclose(fin);
aaclose(fout);
end.
{**************** Koniec programu *************************}