home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 September
/
Chip_2002-09_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d123456
/
STR_BIT.ZIP
/
32
/
skr32
/
SkrPr.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2000-03-30
|
3KB
|
81 lines
unit SkrPr;
interface
uses Dialogs, StrBit32;
{ φαδεµσφΦσ ∞≤δⁿ≥Φ∩δΦΩα≥ΦΓφεπε ±Ω≡σ∞ßδσ≡α }
procedure SkrSS(NameIs, NameRez: String; Otv, OtvMax: byte);
{ ±φ ≥Φσ ∞≤δⁿ≥Φ∩δΦΩα≥ΦΓφεπε ±Ω≡σ∞ßδσ≡α }
procedure DeskrSS(NameIs, NameRez: String; Otv1,Otv2: byte);
implementation
procedure SkrSS(NameIs, NameRez: String; Otv, OtvMax: byte);
{ φαδεµσφΦσ ∞≤δⁿ≥Φ∩δΦΩα≥ΦΓφεπε ±Ω≡σ∞ßδσ≡α }
Var Reg : TStr_Bit;
FIn, FOut : TBitFile;
PrBit : byte;
OtvMaxVn, OtvVn : Integer;
begin
if (NameIs = '') or (NameRez = '') then Exit;
Reg := TStr_Bit.Create;
FIn := TBitFile.Create; {┬√ΣσδσφΦσ ∩α∞ ≥Φ}
FOut := TBitFile.Create; {┬√ΣσδσφΦσ ∩α∞ ≥Φ}
Try
FIn.OpenBitFile(NameIs, btOpenRead,bt8); {╬≥Ω≡√≥Φσ ⌠αΘδα}
FOut.OpenBitFile(NameRez, btCreate, bt8);
{ ╙±≥αφεΓΩα φα≈αδⁿφεπε ±ε±≥ε φΦ ≡σπΦ±≥≡α ±Ω≡σ∞ßδσ≡α }
Reg.Init_0(OtvMax); Reg[0]:= 1;
{ ▀Γφεσ ∩≡σεß≡ατεΓαφΦσ ≥Φ∩α ≤±Ωε≡ σ≥ Γ√τεΓ ∩≡ε÷σΣ≤≡ }
OtvMaxVn := OtvMax-1; OtvVn := Otv-1;
PrBit := Fin.ReadBit;
while PrBit < 2 do
begin
PrBit := (Reg[OtvMaxVn] + Reg[OtvVn] + PrBit) mod 2;
FOut.WriteBit(PrBit);
Reg.BitDisplase(PrBit);
PrBit := Fin.ReadBit;
end;
Except on EfileBitError do {╬°ΦßΩα εß≡αßε≥ΩΦ ⌠αΘδα}
ShowMessage('╬°ΦßΩα εß≡αßε≥ΩΦ');
end; {Except}
FIn.CloseBitFile; { ╟αΩ≡√≥Φσ εß≡αßα≥√Γασ∞√⌡ ⌠αΘδεΓ}
FOut.CloseBitFile;
Reg.Free;
FIn.Free; FOut.Free; {╬±ΓεßεµΣσφΦσ ∩α∞ ≥Φ}
ShowMessage('╬ß≡αßε≥Ωα ταΓσ≡°σφα');
end;
procedure DeskrSS(NameIs, NameRez: String; Otv1,Otv2: byte);
{ ±φ ≥Φσ ∞≤δⁿ≥Φ∩δΦΩα≥ΦΓφεπε ±Ω≡σ∞ßδσ≡α }
const DlinaBl = 8192;
var FIn, FOut : TBitFile;
TekPoz : Longint;
begin
if (NameIs = '') or (NameRez = '') then Exit;
FIn := TBitFile.Create; {┬√ΣσδσφΦσ ∩α∞ ≥Φ}
FOut := TBitFile.Create; {┬√ΣσδσφΦσ ∩α∞ ≥Φ}
TekPoz := 0;
Try
FIn.OpenBitFile(NameIs, btOpenRead,bt8); {╬≥Ω≡√≥Φσ ⌠αΘδα}
FOut.OpenBitFile(NameRez, btCreate,bt8);
while Fin.ReadStr(DlinaBl+Otv2) = btOk do
begin
FOut.Copy(FIn, Otv2, DlinaBl);
FOut.Bool(Fin,btXOR);
FIn.Delete(0, Otv2 - Otv1);
FOut.Bool(Fin,btXOR);
FOut.WriteStr;
inc(TekPoz, DlinaBl); Fin.SeekStr(TekPoz);
end;
Except on EfileBitError do {╬°ΦßΩα εß≡αßε≥ΩΦ ⌠αΘδα}
ShowMessage('╬°ΦßΩα εß≡αßε≥ΩΦ');
end; {Except}
FIn.CloseBitFile; { ╟αΩ≡√≥Φσ εß≡αßα≥√Γασ∞√⌡ ⌠αΘδεΓ}
FOut.CloseBitFile;
FIn.Free; FOut.Free; {╬±ΓεßεµΣσφΦσ ∩α∞ ≥Φ}
ShowMessage('╬ß≡αßε≥Ωα ταΓσ≡°σφα');
end;
end.