home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 September
/
Chip_2002-09_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d123456
/
STR_BIT.ZIP
/
32
/
UnSvKod
/
Main.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2002-07-05
|
6KB
|
182 lines
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Buttons, Menus, StrBit32, Gauges, MaxMin, ExtCtrls,
Mask;
type
TMainForm = class(TForm)
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
EdMatr: TEdit;
Label3: TLabel;
Label4: TLabel;
Edit2: TEdit;
Edit3: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
StatusBar1: TStatusBar;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
mnHelp: TMenuItem;
miHelp: TMenuItem;
Gauge1: TGauge;
BitBtn3: TBitBtn;
mnExit: TMenuItem;
BnExit: TBitBtn;
BnExecute: TBitBtn;
mnKod: TMenuItem;
miIshFile: TMenuItem;
miRezFile: TMenuItem;
miExecute: TMenuItem;
Bevel1: TBevel;
procedure BnExitClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BnExecuteClick(Sender: TObject);
procedure miHelpClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure EdMatrExit(Sender: TObject);
private
{ Private declarations }
public
FIn,FOut : TBitFile;
Registr : TStr_Bit;
ZnSk, // τφα∞σφα≥σδⁿ ±Ωε≡ε±≥Φ ╤╩
ChislSk, // ≈Φ±δΦ≥σδⁿ ±Ωε≡ε±≥Φ ╤╩
MaxSize:integer; // ΩεδΦ≈σ±≥Γε ≈σσΩ Γ ≡σπΦ±≥≡σ ΩεΣσ≡α
MatrixMass: array[1..16,1..16] of String[200];
KoderMass: array[1..16] of TStr_Bit;
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.BnExitClick(Sender: TObject);
begin { ┬√⌡εΣ Φτ ∩≡επ≡α∞∞√ }
FIn.Free; // ╬±ΓεßεµΣσφΦσ ∩α∞ ≥Φ, ταφ ≥εΘ ßΦ≥εΓ√∞Φ ∩σ≡σ∞σφφ√∞Φ
FOut.Free;
Registr.Free;
Close;
end;
procedure TMainForm.BitBtn1Click(Sender: TObject);
begin { ╬∩≡σΣσδΦ≥ⁿ ╘αΘδ ± Φ±⌡εΣφεΘ ßΦ≥εΓεΘ ∩ε±δσΣεΓα≥σδⁿφε±≥ⁿ■ }
if OpenDialog1.Execute then Edit2.Text:=OpenDialog1.FileName;
end;
procedure TMainForm.BitBtn2Click(Sender: TObject);
begin { ╬∩≡σΣσδΦ≥ⁿ ╘αΘδ ± ΩεΣΦ≡εΓαφφεΘ ßΦ≥εΓεΘ ∩ε±δσΣεΓα≥σδⁿφε±≥ⁿ■ }
if OpenDialog1.Execute then Edit3.Text:=OpenDialog1.FileName;
end;
procedure TMainForm.BnExecuteClick(Sender: TObject);
var PosSim, K, j : Integer;
I: Byte; S:String;
begin { ┬√∩εδφΦ≥ⁿ ΩεΣΦ≡εΓαφΦσ Σαφφ√⌡ }
Gauge1.Visible := True;
if ( Edit2.Text = '' ) or ( Edit3.Text = '' )
then begin ShowMessage('═σ ταΣαφ√ ∩α≡α∞σ≥≡√ εß≡αßε≥ΩΦ');
Exit;
end;
// Γ√ΣσδΦ≥ⁿ εß≡ατ≤■∙Φσ ∩εδΦφε∞√
for i:=1 to ChislSk do begin
S:=Memo1.Lines.Strings[I-1];
for j:=1 to ZnSk do begin
S := Trim(S);
K := Pos(' ',S)-1; if K= -1 then K := length(S);
if K=0 then ShowMessage('┬ετ∞εµφε ∩α≡α∞σ≥≡√ ∞α≥≡Φ÷√ ταΣαφ√ φσ∩≡αΓΦδⁿφε')
else MatrixMass[I,J]:=Copy(S,1,K);
Delete(S,1,K);
end; end;
// ╧≡σεß≡ατεΓα≥ⁿ ∞α≥≡Φ÷≤ Γ δΦφσΘφ√Θ ΣΓεΦ≈φ√Θ ΓΦΣ
MaxSize := 0;
for J := 1 to ZnSk do begin
K := 0;
KoderMass[J] := TStr_Bit.Create;
For PosSim := 1 to length(MatrixMass[1,J]) do
for I:=1 to ChislSk do begin
KoderMass[J][K] := Ord(MatrixMass[I,J][PosSim])-Ord('0');
inc(K);
end;
S := KoderMass[J].Val_sim;
MaxSize:= Max(MaxSize,K);
end;
{ ╩εΣΦ≡εΓα≥ⁿ Σαφφ√σ Φτ ⌠αΘδα }
Registr.Init_0(MaxSize);
try
FOut.OpenBitFile(Edit3.Text,btCreate,bt32);
FIn.OpenBitFile(Edit2.Text,btOpenRead,bt32);
Gauge1.MaxValue := FIn.SizeOfFile div ChislSk;
PosSim := 0;
while FIn.ReadStr(ChislSk) = btOk do begin // ╬ß≡αßε≥α≥ⁿ Σαφφ√σ Γ±σπε ⌠αΘδα
for j:=1 to ChislSk do Registr.LastBitDisplase(FIn[j-1]); // τα∩εδφΦ≥ⁿ ≡σπΦ±≥≡
Inc(PosSim);
if (PosSim mod 10000)=0 then begin // ┬√Γσ±≥Φ ΦφΣΦΩα≥ε≡
Gauge1.Progress:=PosSim;
Application.ProcessMessages; // ─α≥ⁿ Γετ∞εµφε±≥ⁿ ≡αßε≥α≥ⁿ Σ≡≤πΦ∞ ∩≡επ≡α∞∞α∞
end;
{ ╤⌠ε≡∞Φ≡εΓα≥ⁿ Γ√⌡εΣφ√σ ßΦ≥√ }
for j:=1 to ZnSk do FOut.WriteBit(Registr.ModReg(KoderMass[J]) );
end;
FIn.CloseBitFile; FOut.CloseBitFile;
ShowMessage('╩εΣΦ≡εΓαφΦσ ≤±∩σ°φε ταΓσ≡°σφε.');
Gauge1.Progress:=0;
Except on EFileBitZacr do
ShowMessage('═σΓετ∞εµφε ≡αßε≥α≥ⁿ ± ⌠αΘδα∞Φ.'); end;
{ ╬±ΓεßεΣΦ≥ⁿ ∩α∞ ≥ⁿ, ταφ ≥≤■ ∞α±±ΦΓε∞ ßΦ≥εΓ√⌡ ∩σ≡σ∞σφφ√⌡ }
for J := 1 to ZnSk do KoderMass[J].Free;
Gauge1.Visible := False;
end;
procedure TMainForm.miHelpClick(Sender: TObject);
begin { ╧εδ≤≈Φ≥ⁿ ±∩≡αΓΩ≤ ε ∩≡επ≡α∞∞σ }
BitBtn3.Click;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin { ╟αΣαφΦσ φα≈αδⁿφ√⌡ ∩α≡α∞σ≥≡εΓ ∩≡Φ ΦφΦ÷ΦαδΦτα÷ΦΦ ∩≡επ≡α∞∞√ }
if ParamCount > 0 then Edit2.Text:=ParamStr(1);
if ParamCount > 1 then Edit3.Text:=ParamStr(2);
OpenDialog1.InitialDir := ParamStr(0);
ZnSk := 2; ChislSk := 1;
{ ┬√ΣσδΦ≥ⁿ ∩α∞ ≥ⁿ Σδ ßΦ≥εΓ√⌡ ∩σ≡σ∞σφφ√⌡, Φ±∩εδⁿτ≤σ∞√⌡ ∩ε±≥ε φφε }
FIn := TBitFile.Create;
FOut := TBitFile.Create;
Registr := TStr_Bit.Create;
end;
procedure TMainForm.EdMatrExit(Sender: TObject);
{ ╧≡εΓσ≡Φ≥ⁿ ∩≡αΓΦδⁿφε±≥ⁿ ΓΓεΣα ∩α≡α∞σ≥≡εΓ Φ ∩≡σεß≡ατεΓα≥ⁿ Σαφφ√σ
Γε Γφ≤≥≡σφφΦσ ∩σ≡σ∞σφφ√σ}
Var S : String; Kode : Integer;
procedure ShowError(Soob : String);
begin { ┬√Γσ±≥Φ ±εεß∙σφΦσ εß ε°ΦßΩσ Φ Γσ≡φ≤≥ⁿ± Ω ≡σΣαΩ≥Φ≡εΓαφΦ■ τφα≈σφΦ }
ShowMessage(Soob);
EdMatr.SetFocus;
end;
begin // ╧εδ≤≈Φ≥ⁿ τφα≈σφΦ ≡ατ∞σ≡φε±≥Φ ∩ε≡εµΣα■∙σΘ ∞α≥≡Φ÷√
ZnSk := 0; ChislSk := 0;
S:=Copy(EdMatr.Text,1,Pos('/',EdMatr.Text)-1);
{$R-}
Val(S,ChislSk, Kode); // ≈Φ±δΦ≥σδⁿ ±Ωε≡ε±≥Φ ╤╩
If (Kode <> 0) or (ChislSk>16) or (ChislSk<1)
then ShowError('═σΓσ≡φε ταΣαφ ≈Φ±δΦ≥σδⁿ ±Ωε≡ε±≥Φ ΩεΣα.');
S:=Copy(EdMatr.Text,Pos('/',EdMatr.Text)+1,Length(EdMatr.Text));
Val(S,ZnSk, Kode); // τφα∞σφα≥σδⁿ ±Ωε≡ε±≥Φ ╤╩
{$R+}
If (Kode <> 0) or (ZnSk>16) or (ZnSk<2) or (ZnSk <= ChislSk)
then ShowError('═σΓσ≡φε ταΣαφ τφα∞σφα≥σδⁿ ±Ωε≡ε±≥Φ ΩεΣα.');
end;
end.