diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e0b6672cd7f4f97dfa43b95d73c6461a558d5f96 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +__history/ +*.local +codereplace.identcache +codereplace.stat +Win32/Debug/codereplace.ini +Win32/Debug/codereplace.srs +*.dcu diff --git a/MainFrm.dfm b/MainFrm.dfm new file mode 100644 index 0000000000000000000000000000000000000000..431368fb6a1eae0b73b63180fc4a3aa6bc5c3c0c --- /dev/null +++ b/MainFrm.dfm @@ -0,0 +1,326 @@ +object FrmMain: TFrmMain + Left = 0 + Top = 0 + BorderStyle = bsSingle + Caption = #28304#20195#30721#26597#25214#26367#25442#24037#20855 + ClientHeight = 571 + ClientWidth = 994 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 16 + object Panel2: TPanel + Left = 0 + Top = 0 + Width = 209 + Height = 571 + Align = alLeft + BevelOuter = bvNone + TabOrder = 0 + object DriveComboBox1: TDriveComboBox + Left = 0 + Top = 0 + Width = 209 + Height = 22 + Align = alTop + DirList = DirectoryListBox1 + TabOrder = 0 + end + object DirectoryListBox1: TDirectoryListBox + Left = 0 + Top = 22 + Width = 209 + Height = 549 + Align = alClient + DirLabel = lblPath + TabOrder = 1 + end + end + object Panel3: TPanel + Left = 209 + Top = 0 + Width = 785 + Height = 571 + Align = alClient + BevelOuter = bvNone + TabOrder = 1 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 785 + Height = 89 + Align = alTop + BevelInner = bvRaised + BevelOuter = bvLowered + ParentColor = True + TabOrder = 0 + object Label1: TLabel + Left = 22 + Top = 48 + Width = 150 + Height = 16 + Caption = #25991#20214#31867#22411#65288#25193#23637#21517#65289#65306 + end + object Label2: TLabel + Left = 22 + Top = 19 + Width = 150 + Height = 16 + Caption = #28304#20195#30721#25991#20214#25152#22312#36335#24452#65306 + end + object lblPath: TLabel + Left = 188 + Top = 20 + Width = 129 + Height = 13 + Caption = 'C:\Windows\System32' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object edtFileType: TEdit + Left = 188 + Top = 47 + Width = 128 + Height = 24 + TabOrder = 0 + Text = '*.java' + end + object chkSubFolder: TCheckBox + Left = 336 + Top = 51 + Width = 217 + Height = 17 + Caption = #21253#25324#23376#30446#24405#19968#36215#25628#32034#26367#25442 + Checked = True + State = cbChecked + TabOrder = 1 + end + object btnSearch: TBitBtn + Left = 559 + Top = 27 + Width = 95 + Height = 30 + Caption = #25628#32034'(&S)' + TabOrder = 2 + OnClick = btnSearchClick + end + object btnReplace: TBitBtn + Left = 672 + Top = 27 + Width = 95 + Height = 30 + Caption = #26367#25442'(&R)' + TabOrder = 3 + OnClick = btnReplaceClick + end + end + object PageControl1: TPageControl + Left = 0 + Top = 89 + Width = 785 + Height = 482 + ActivePage = TabSheet1 + Align = alClient + Style = tsFlatButtons + TabOrder = 1 + object TabSheet1: TTabSheet + Caption = #25805#20316#21488 + object DBGrid1: TDBGrid + Left = 0 + Top = 0 + Width = 777 + Height = 448 + Align = alClient + DataSource = dsView + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -13 + TitleFont.Name = 'Tahoma' + TitleFont.Style = [] + OnDblClick = DBGrid1DblClick + Columns = < + item + Expanded = False + FieldName = 'FileName' + Title.Alignment = taCenter + Width = 600 + Visible = True + end + item + Expanded = False + FieldName = 'Count' + Title.Alignment = taCenter + Width = 55 + Visible = True + end + item + Alignment = taCenter + Expanded = False + FieldName = 'Replace' + Title.Alignment = taCenter + Width = 75 + Visible = True + end> + end + end + object TabSheet2: TTabSheet + Caption = #26367#25442#37197#32622 + ImageIndex = 1 + object Splitter1: TSplitter + Left = 0 + Top = 212 + Width = 777 + Height = 3 + Cursor = crVSplit + Align = alTop + ExplicitWidth = 236 + end + object memRule: TMemo + Left = 0 + Top = 0 + Width = 777 + Height = 212 + Align = alTop + BevelInner = bvNone + BevelOuter = bvNone + Lines.Strings = ( + '# '#33539#20363#65306#23558'getId'#26367#25442#20026'getCode'#65292#27880#24847#65292#25152#26377#26597#25214#19982#26367#25442#22343#21306#20998#22823#23567#20889 + 'getId=>getCode' + 'getcode()=>getCode()') + ScrollBars = ssBoth + TabOrder = 0 + ExplicitTop = 312 + end + object Panel4: TPanel + Left = 0 + Top = 215 + Width = 777 + Height = 233 + Align = alClient + BevelOuter = bvNone + TabOrder = 1 + ExplicitLeft = 232 + ExplicitTop = 271 + ExplicitWidth = 545 + ExplicitHeight = 177 + object Panel5: TPanel + Left = 0 + Top = 0 + Width = 777 + Height = 39 + Align = alTop + BevelOuter = bvNone + ParentColor = True + TabOrder = 0 + ExplicitLeft = 1 + ExplicitTop = 1 + ExplicitWidth = 543 + object Label3: TLabel + Left = 14 + Top = 12 + Width = 75 + Height = 16 + Caption = #27979#35797#25991#20214#65306 + end + object sbSelectFile: TSpeedButton + Left = 526 + Top = 7 + Width = 24 + Height = 24 + Caption = '...' + OnClick = sbSelectFileClick + end + object btnLoadFile: TBitBtn + Left = 584 + Top = 6 + Width = 75 + Height = 25 + Caption = #36733#20837'(&L)' + TabOrder = 0 + OnClick = btnLoadFileClick + end + object BitBtn2: TBitBtn + Left = 680 + Top = 6 + Width = 75 + Height = 25 + Caption = #27979#35797'(&T)' + TabOrder = 1 + OnClick = BitBtn2Click + end + object edtTestFile: TEdit + Left = 95 + Top = 7 + Width = 425 + Height = 24 + TabOrder = 2 + end + end + object Memo1: TMemo + Left = 0 + Top = 39 + Width = 777 + Height = 194 + Align = alClient + ScrollBars = ssBoth + TabOrder = 1 + ExplicitLeft = 1 + ExplicitTop = 40 + ExplicitWidth = 543 + ExplicitHeight = 136 + end + end + end + end + end + object cdsView: TClientDataSet + Aggregates = <> + FieldDefs = <> + IndexDefs = < + item + Name = 'cdsViewIndex1' + Fields = 'Count' + Options = [ixDescending] + end> + IndexName = 'cdsViewIndex1' + Params = <> + StoreDefs = True + Left = 248 + Top = 152 + object cdsViewFileName: TWideStringField + FieldName = 'FileName' + Size = 255 + end + object cdsViewCount: TIntegerField + FieldName = 'Count' + end + object cdsViewReplace: TBooleanField + FieldName = 'Replace' + OnGetText = cdsViewReplaceGetText + end + end + object dsView: TDataSource + DataSet = cdsView + Left = 248 + Top = 216 + end + object OpenDialog1: TOpenDialog + Filter = 'java file|*.java' + Left = 249 + Top = 280 + end +end diff --git a/MainFrm.pas b/MainFrm.pas new file mode 100644 index 0000000000000000000000000000000000000000..343ae5fc3ee8fe4c8a5a2f327d56d198b95def2a --- /dev/null +++ b/MainFrm.pas @@ -0,0 +1,338 @@ +unit MainFrm; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls, + Vcl.Buttons, Data.DB, Vcl.Grids, Vcl.DBGrids, Datasnap.DBClient, Vcl.FileCtrl, + IniFiles; + +type + TKeyValue = record + key: string; + value: string; + public + function split(const text: string): Boolean; + end; + TFrmMain = class(TForm) + cdsView: TClientDataSet; + dsView: TDataSource; + cdsViewFileName: TWideStringField; + cdsViewCount: TIntegerField; + Panel2: TPanel; + DriveComboBox1: TDriveComboBox; + DirectoryListBox1: TDirectoryListBox; + Panel3: TPanel; + Panel1: TPanel; + Label1: TLabel; + Label2: TLabel; + lblPath: TLabel; + edtFileType: TEdit; + chkSubFolder: TCheckBox; + btnSearch: TBitBtn; + btnReplace: TBitBtn; + PageControl1: TPageControl; + TabSheet1: TTabSheet; + DBGrid1: TDBGrid; + TabSheet2: TTabSheet; + memRule: TMemo; + OpenDialog1: TOpenDialog; + Panel4: TPanel; + Panel5: TPanel; + Label3: TLabel; + btnLoadFile: TBitBtn; + BitBtn2: TBitBtn; + edtTestFile: TEdit; + Memo1: TMemo; + Splitter1: TSplitter; + sbSelectFile: TSpeedButton; + cdsViewReplace: TBooleanField; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure btnSearchClick(Sender: TObject); + procedure btnReplaceClick(Sender: TObject); + procedure sbSelectFileClick(Sender: TObject); + procedure btnLoadFileClick(Sender: TObject); + procedure BitBtn2Click(Sender: TObject); + procedure cdsViewReplaceGetText(Sender: TField; var Text: string; + DisplayText: Boolean); + procedure DBGrid1DblClick(Sender: TObject); + private + { Private declarations } + rules: TList; + replaceFlag: Boolean; + procedure searchDirectory(path: string); + procedure appendFile(path: string; sr: TSearchRec); + function getReplaceCount(fileName: string): Integer; + function getReplaceText(const text: string): string; + procedure resetRules; + public + { Public declarations } + end; + +var + FrmMain: TFrmMain; + +implementation + +{$R *.dfm} + +procedure TFrmMain.FormCreate(Sender: TObject); +var + ini: TIniFile; + dataFile: string; +begin + self.PageControl1.ActivePageIndex := 0; + ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); + try + self.chkSubFolder.Checked := ini.ReadBool('config', 'SubFolder', self.chkSubFolder.Checked); + self.edtFileType.Text := ini.ReadString('config', 'FileType', self.edtFileType.Text); + self.edtTestFile.Text := ini.ReadString('config', 'TestFile', self.edtTestFile.Text); + finally + ini.Free; + end; + + dataFile := ChangeFileExt(Application.ExeName, '.srs'); + if FileExists(dataFile) then + memRule.Lines.LoadFromFile(dataFile); + + cdsView.CreateDataSet; + rules := TList.Create; +end; + +procedure TFrmMain.FormDestroy(Sender: TObject); +var + ini: TIniFile; + dataFile: string; +begin + rules.Free; + ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); + try + ini.WriteBool('config', 'SubFolder', self.chkSubFolder.Checked); + ini.WriteString('config', 'FileType', self.edtFileType.Text); + ini.WriteString('config', 'TestFile', self.edtTestFile.Text); + finally + ini.Free; + end; + + dataFile := ChangeFileExt(Application.ExeName, '.srs'); + memRule.Lines.SaveToFile(dataFile); +end; + +procedure TFrmMain.BitBtn2Click(Sender: TObject); +var + i, count: Integer; + t1, t2: string; +begin + self.resetRules; + count := 0; + for i := 0 to Memo1.Lines.Count - 1 do + begin + t1 := Memo1.Lines.Strings[i]; + t2 := self.getReplaceText(t1); + if t1 <> t2 then + begin + inc(count); + Memo1.Lines.Strings[i] := t2; + end; + end; + showMessage(Format('²âÊÔÍê³É£¬¹²Ìæ»» %d ´Î', [count])); +end; + +procedure TFrmMain.btnLoadFileClick(Sender: TObject); +var + fileName: string; +begin + fileName := edtTestFile.Text; + if fileName = '' then + exit; + if not fileExists(fileName) then + begin + showMessage('²âÊÔÎļþûÓÐÕÒµ½£¡'); + exit; + end; + self.Memo1.Lines.LoadFromFile(fileName); +end; + +procedure TFrmMain.btnSearchClick(Sender: TObject); +begin + try + self.PageControl1.ActivePageIndex := 0; + Screen.Cursor := crHourGlass; + cdsView.EmptyDataSet; + resetRules; + searchDirectory(self.lblPath.Caption); + cdsView.First; + finally + Screen.Cursor := crDefault; + end; +end; + +procedure TFrmMain.btnReplaceClick(Sender: TObject); +begin + try + replaceFlag := true; + btnSearch.click; + finally + replaceFlag := false; + end; +end; + +procedure TFrmMain.resetRules; +var + rule: ^TKeyValue; + i: Integer; +begin + rules.Clear; + for i := 0 to memRule.Lines.Count - 1 do + begin + new(rule); + if rule.split(memRule.Lines.Strings[i]) then + rules.Add(rule); + end; +end; + +procedure TFrmMain.searchDirectory(path: string); +var + sr: TSearchRec; +begin + if (path = '') then + exit; + + if FindFirst(path + '\' + edtFileType.Text, faAnyFile, sr) = 0 then + begin + repeat + if FileExists(path + '\' + sr.Name) then + appendFile(path, sr); + until FindNext(sr) <> 0; + FindClose(sr); + end; + + if not self.chkSubFolder.Checked then + exit; + + if FindFirst(path + '\*.*', faAnyFile, sr) = 0 then + begin + repeat + if (sr.Name <> '.') and (sr.Name <> '..') + and System.SysUtils.DirectoryExists(path + '\' + sr.Name) then + searchDirectory(path + '\' + sr.Name); + until FindNext(sr) <> 0; + FindClose(sr); + end; +end; + +procedure TFrmMain.sbSelectFileClick(Sender: TObject); +begin + self.OpenDialog1.Filter := edtFileType.Text + '|' + edtFileType.Text; + if self.OpenDialog1.Execute then + begin + self.edtTestFile.Text := self.OpenDialog1.FileName; + btnLoadFile.click; + end; +end; + +procedure TFrmMain.appendFile(path: string; sr: TSearchRec); +var + fileName: string; + count: Integer; +begin + fileName := path + '\' + sr.Name; + count := getReplaceCount(fileName); + if count = 0 then + exit; + + cdsView.Append; + cdsView.FieldByName('FileName').AsString := fileName; + cdsView.FieldByName('Count').AsInteger := count; + cdsView.FieldByName('Replace').AsBoolean := replaceFlag; + cdsView.Post; +end; + +function TFrmMain.getReplaceCount(fileName: string): Integer; +var + src, tar: TStringList; + s0, s1: string; + i: Integer; +begin + result := 0; + src := TStringList.Create; + tar := TStringList.Create; + try + src.LoadFromFile(fileName); + for i := 0 to src.Count - 1 do + begin + s0 := src.Strings[i]; + s1 := getReplaceText(s0); + if s0 <> s1 then + inc(result); + if self.replaceFlag then + tar.Append(s1); + end; + if self.replaceFlag then + tar.SaveToFile(fileName); + finally + src.Free; + tar.Free; + end; +end; + +function TFrmMain.getReplaceText(const text: string): string; +var + i: Integer; + rule: ^TKeyValue; +begin + result := text; + for i := 0 to rules.Count - 1 do + begin + rule := rules.Items[i]; + result := StringReplace(result, rule.key, rule.value, [rfReplaceAll]); + end; +end; + +procedure TFrmMain.cdsViewReplaceGetText(Sender: TField; var Text: string; + DisplayText: Boolean); +begin + if Sender.AsBoolean then + Text := 'completed'; +end; + +procedure TFrmMain.DBGrid1DblClick(Sender: TObject); +var + fileName: string; +begin + with cdsView do + begin + fileName := cdsView.FieldByName('FileName').AsString; + if fileName <> '' then + begin + self.PageControl1.ActivePageIndex := 1; + edtTestFile.Text := fileName; + btnLoadFile.Click; + end; + end; +end; + +{ TKeyValue } + +function TKeyValue.split(const text: string): Boolean; +var + i: Integer; +begin + result := false; + key := ''; + value := ''; + if (trim(text) = '') then + exit; + if (copy(trim(text),1,1) = '#') then + exit; + i := pos('=>', text); + if i < 2 then + exit; + key := copy(text, 0, i - 1); + value := copy(text, i + 2, length(text)); + result := true; +end; + +end. diff --git a/Win32/Debug/codereplace.exe b/Win32/Debug/codereplace.exe new file mode 100644 index 0000000000000000000000000000000000000000..2f1453038e7f8fb7eec71f6a7b506069e611a9aa Binary files /dev/null and b/Win32/Debug/codereplace.exe differ diff --git a/codereplace.dpr b/codereplace.dpr new file mode 100644 index 0000000000000000000000000000000000000000..f9dd8af9df78779a491bcc0a1e70febd66537f39 --- /dev/null +++ b/codereplace.dpr @@ -0,0 +1,14 @@ +program codereplace; + +uses + Vcl.Forms, + MainFrm in 'MainFrm.pas' {FrmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TFrmMain, FrmMain); + Application.Run; +end. diff --git a/codereplace.dproj b/codereplace.dproj new file mode 100644 index 0000000000000000000000000000000000000000..193dd171a5dbc0d8db3acaa9256a3288fec70394 --- /dev/null +++ b/codereplace.dproj @@ -0,0 +1,612 @@ + + + {0B5A5910-EC31-43EB-858E-F2787530B17F} + 18.6 + VCL + codereplace.dpr + True + Debug + Win32 + 1 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + codereplace + + + DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;fs26;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;frx26;cef4;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;frxDB26;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;fsDB26;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;fqb260;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + + + DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + + MainSource + + +
FrmMain
+ dfm +
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + codereplace.dpr + + + + + + codereplace.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + + + res\values + 1 + + + + + res\values-v21 + 1 + + + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + True + False + + + 12 + + + + +
diff --git a/codereplace.res b/codereplace.res new file mode 100644 index 0000000000000000000000000000000000000000..f4f45860360872b79acd5d82d41a8a500106c8b6 Binary files /dev/null and b/codereplace.res differ