/examples/codepageconverter/mainunit.pas
http://github.com/graemeg/lazarus · Pascal · 288 lines · 240 code · 24 blank · 24 comment · 29 complexity · bfec68ca881f1ff174a02141ccae28fe MD5 · raw file
- {
- Author: BARKO, OPINFOS d.o.o., SLOVENIA http://www.opinfos.com
- ***************************************************************************
- * *
- * This source is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This code is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * General Public License for more details. *
- * *
- * A copy of the GNU General Public License is available on the World *
- * Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
- * obtain it by writing to the Free Software Foundation, *
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- ***************************************************************************
- }
- unit mainunit;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, Menus, FileCtrl,
- LazFileUtils, LazUTF8;
- type
- { TLazConverterForm }
- TLazConverterForm = class(TForm)
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- ComboBox1: TComboBox;
- ComboBox2: TComboBox;
- Edit1: TEdit;
- FileListBox1: TFileListBox;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label6: TLabel;
- MenuItem1: TMenuItem;
- Panel1: TPanel;
- PopupMenu1: TPopupMenu;
- ProgressBar1: TProgressBar;
- SelectDirectoryDialog1: TSelectDirectoryDialog;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Form1Show(Sender: TObject);
- procedure MenuItem1Click(Sender: TObject);
- private
- public
- procedure CountFiles;
- end;
- var
- LazConverterForm: TLazConverterForm;
-
- const msgdone = 'Searching done... press CONVERT button! Files: ';
- implementation
- {$R *.lfm}
- function replace (source: string; src, rep: string):string;
- begin
- result:=StringReplace(source,src,rep,[rfReplaceAll]);
- end;
- function origpath:string;
- var tmp:string;
- begin
- tmp:=StrPas(argv[0]);
- tmp:=ExpandFileNameUTF8(tmp);
- tmp:=ExtractFileDir(tmp);
- tmp:=IncludeTrailingPathDelimiter(tmp);
- result:=tmp;
- end;
- procedure TLazConverterForm.CountFiles;
- begin
- if FileListBox1.Items.Count-1<>-1 then
- begin
- label6.caption:=msgdone+inttostr(FileListBox1.Items.Count-1);
- end else label6.caption:=msgdone+'0';
- end;
- procedure TLazConverterForm.Button1Click(Sender: TObject);
- begin
- if SelectDirectoryDialog1.Execute then
- begin
- edit1.text:=IncludeTrailingPathDelimiter(SelectDirectoryDialog1.FileName);
- end;
- end;
- procedure TLazConverterForm.Button2Click(Sender: TObject);
- begin
- if trim(edit1.text)='' then
- begin
- button1click(sender);abort;
- end;
- FileListBox1.Mask:='';
- FileListBox1.Directory:='';
- FileListBox1.Clear;
- FileListBox1.Directory:=Edit1.text;
- FileListBox1.Mask:='*.pas;*.lfm;*.lrs;*.inc;*.lrt';
- CountFiles;
- end;
- procedure TLazConverterForm.Button3Click(Sender: TObject);
- var tmp:tstringlist;
- i:integer;
- ok:boolean;
- function ConvertMe(var tmp:tstringlist):boolean;
- var cpin,cpout:tstringlist;
- ok:boolean;
- i:integer;
- begin
- ok:=true;result:=true;
- if trim(tmp.text)='' then result:=false else
- begin
- cpin:=tstringlist.create;
- cpout:=tstringlist.create;
- try
- try
- cpin.LoadFromFile(UTF8ToSys(origpath+combobox1.text));
- except
- ok:=false;
- end;
- try
- cpout.LoadFromFile(UTF8ToSys(origpath+combobox2.text));
- except
- ok:=false;
- end;
- if ok then
- begin
- if cpin.Count=cpout.Count then
- begin
- for i:=0 to cpin.Count-1 do
- begin
- cpin[i]:=trim(cpin[i]);
- cpout[i]:=trim(cpout[i]);
- if (cpin[i]<>'') and (cpout[i]<>'') then
- begin
- tmp.text:=Replace(tmp.text,char(strtoint(cpin[i])),char(strtoint(cpout[i])));
- end;
- end;
- end else result:=false;
- end else result:=false;
- finally
- cpin.free;
- cpout.free;
- end;
- end;
- end;
- function ConvertMeLRS(var tmp:tstringlist):boolean;
- var cpin,cpout:tstringlist;
- ok:boolean;
- i:integer;
- begin
- result:=true;
- ok:=true;
- if trim(tmp.text)='' then result:=false else
- begin
- cpin:=tstringlist.create;
- cpout:=tstringlist.create;
- try
- try
- cpin.LoadFromFile(UTF8ToSys(origpath+combobox1.text));
- except
- ok:=false;
- end;
- try
- cpout.LoadFromFile(UTF8ToSys(origpath+combobox2.text));
- except
- ok:=false;
- end;
- if ok then
- begin
- if cpin.Count=cpout.Count then
- begin
- for i:=0 to cpin.Count-1 do
- begin
- cpin[i]:=trim(cpin[i]);
- cpout[i]:=trim(cpout[i]);
- if (cpin[i]<>'') and (cpout[i]<>'') then
- begin
- tmp.text:=Replace(tmp.text,'#'+cpin[i],'#'+cpout[i]);
- end;
- end;
- end else result:=false;
- end else result:=false;
- finally
- cpin.free;
- cpout.free;
- end;
- end;
- end;
- begin
- if FileListBox1.Items.count-1=-1 then abort;
- if trim(combobox1.text)='' then abort;
- if trim(combobox2.text)='' then abort;
- tmp:=tstringlist.create;
- try
- ProgressBar1.Min:=0;
- ProgressBar1.Max:=FileListBox1.Items.count;
- ProgressBar1.StepBy(1);
- for i:=0 to FileListBox1.Items.count-1 do
- begin
- ok:=true;
- try
- tmp.LoadFromFile(UTF8ToSys(FileListBox1.Directory+FileListBox1.Items[i]));
- except
- ok:=false;
- end;
- if ok then
- begin
- if uppercase(ExtractFileExt(FileListBox1.Items[i]))='.LRS' then
- begin
- if ConvertMeLRS(tmp) then
- begin
- ok:=true;
- try
- tmp.SaveToFile(UTF8ToSys(FileListBox1.Directory+FileListBox1.Items[i]));
- except ok:=false; end;
- end;
- end else
- begin
- if ConvertMe(tmp) then
- begin
- ok:=true;
- try
- tmp.SaveToFile(UTF8ToSys(FileListBox1.Directory+FileListBox1.Items[i]));
- except ok:=false; end;
- end;
- end;
- end;
- ProgressBar1.StepIt;
- end;
- finally
- ProgressBar1.Position:=0;
- tmp.free;
- label6.caption:='Done!';
- FileListBox1.Mask:='';
- FileListBox1.Directory:='';
- FileListBox1.Clear;
- end;
- end;
- procedure TLazConverterForm.Form1Show(Sender: TObject);
- begin
- if paramcount<>0 then edit1.text:=ParamStrUTF8(1) else edit1.text:='';
- try
- ComboBox1.items.LoadFromFile(UTF8ToSys(origpath+'codepages.ini'));
- except end;
- try
- ComboBox2.items.LoadFromFile(UTF8ToSys(origpath+'codepages.ini'));
- except end;
- ComboBox1.text:='';
- ComboBox2.text:='';
- Edit1.SetFocus;
- FileListBox1.Mask:='';
- FileListBox1.Directory:='';
- FileListBox1.Clear;
- end;
- procedure TLazConverterForm.MenuItem1Click(Sender: TObject);
- begin
- if FileListBox1.Items.count-1=-1 then abort;
- try
- FileListBox1.Items.Delete(FileListBox1.ItemIndex);
- except end;
- CountFiles;
- end;
- end.