Вот код:
Код:
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ButtonEncode: TButton;
ButtonDecode: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
InputFileName: TEdit;
OutputFileName: TEdit;
ButtonExit: TButton;
Label1: TLabel;
Label2: TLabel;
ButtonSelectInputFile: TButton;
ButtonSelectOutputFile: TButton;
Label3: TLabel;
procedure ButtonSelectInputFileClick(Sender: TObject);
procedure ButtonSelectOutputFileClick(Sender: TObject);
procedure ButtonDecodeEncodeClick(Sender: TObject);
procedure ButtonExitClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
basE91;
procedure TForm1.ButtonDecodeEncodeClick(Sender: TObject);
var
basE91: TBasE91;
fin, fout: TFileStream;
Buf: array[0..1024] of byte;
c: integer;
written: integer;
begin
written := 0;
fin := TFileStream.Create(InputFileName.Text, fmOpenRead);
fout := TFileStream.Create(OutputFileName.Text, fmCreate);
if (TComponent(Sender).Name = 'ButtonEncode') then
base91 := TBase91Encoder.Create(fout);
if (TComponent(Sender).Name = 'ButtonDecode') then
base91 := TBase91Decoder.Create(fout);
if not assigned(basE91) then
begin
Beep;
exit;
end;
while ((fin.Position + SizeOf(Buf)) < fin.Size) do
begin
fin.Read(Buf, SizeOf(Buf));
c := base91.Update(@Buf, 0, SizeOf(Buf));
Inc(written, c);
end;
c := fin.Size - fin.Position;
fin.Read(Buf, c);
c := base91.Update(@Buf, 0, c);
Inc(written, c);
c := base91.Finalize();
Inc(written, c);
base91.Free;
fin.Free;
fout.Free;
ShowMessageFmt('Total bytes written: %d', [written]);
end;