Вот код:
Код:
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;