procedure kodująca plik:
Type
TBuff=array [0..1024] of byte;
Procedure CodeFile(InFile, OutFile: String; Key: Byte);
var
Buff, Buff2: TBuff;
I, Count: Integer;
FSIn, FSOut: TFileStream;
Function CTab(Tab: TBuff): TBuff;//by Johnny_Bit, idea by SXIorHACK
var
TabOut: TBuff;
I: Integer;
begin
For I:=0 to High(Tab) do
begin
TabOut[I]:=Cod.Transcode(Tab[I], Key, 1);//kodowanie bajtu I w Tablicy Tab do bajtu I w tablicy TabOut
end;
Result:=TabOut; //Rezultatem jest tablica TabOut
end;
Function XCTab(Tab: TBuff): TBuff;//by Johnny_Bit, idea by SXIorHACK
var
TabOut: TBuff;
I: Integer;
begin
For I:=0 to High(Tab) do
begin
TabOut[I]:=XCod.Transcode(Tab[I], Key); //kodowanie (tym razem przez Xor-owanie reszta j.w.
end;
Result:=TabOut; //j.w.
end;
Function MixTabs(var Buff: TBuff; const Tb: TBuff; Count: Integer):Integer; //mixowanie hybrydowe tablicy Tb do tablicy Buff
var
I: Integer; //liczba iteracji
XC: Boolean;//XorCoding
Tmp1, Tmp2: TBuff; //Zmienne typu TBuff
begin
Tmp1:=CTab(Tb);//Kodowanie podstawowe
Tmp2:=XCTab(Tb);//Kodowanie przez Xorowanie
XC:=True;//inicjalizacja zmiennej XC (pierwszy będzie Xor)
For I:=0 To Count-1 do
begin
If XC then //jeżeli XorCoding to
Buff[I]:=Tmp2[I] //bajt I w tablicy Buff Przypisz do Bajta I w tablicy zakodowanej metodą Xor-owania
else
Buff[I]:=Tmp1[I];//w przeciwnym wypadku metodą zwykłą
XC:=not XC; //negacja zmiennej XC
end;
Result:=Count;//wynikiem jest podany parametr Count (Liczba elementów w tablicy
end;
begin
FSIn:=TFileStream.Create(InFile, fmOpenRead or fmShareDenyWrite); //otwarcie pliku do zakodowania w trybie odczytu jednocześnie plokując innym aplikacjom zapis do tegoż pliku
If FileExists(OutFile) then //jeżeli istnieje plik wyjściowy
begin
DeleteFile(OutFile);//to go usuń
end;
FSOut:=TFileStream.Create(OutFile, fmCreate or fmShareExclusive); //utworzenie pliku oraz zablokowanie innym aplikacjom dostępu do niego
while FSIn.Position!!!!!