Ficedula: S&R

  • Thread starter Thread starter RPGillespie
  • Start date Start date
Status
Not open for further replies.
R

RPGillespie

Guest
Hey, fice, If you are still here, I was wondering if you could help me out. I'm trying to fix your search and replace tool on "cosmo", your text editor, but I'm not really sure what the prob is. The actual code that is causing S&R to malfunction is in cosmosearch.pas right? well this is the code for it: I can't really tell why it gets stuck at initializing (BTW I fixed your spelling error)... anyways, can anyone help?

Code: [Select]
Code:
unit cosmosearch;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls, ExtCtrls, ComCtrls, Buttons, FF7Edit, LGPStruct, DebugLog,  BaseUtil, PluginTypes, CosmoUtil, FF7Types;type  TfrmSearchReplace = class(TForm)    radSearchIn: TRadioGroup;    GroupBox1: TGroupBox;    Label1: TLabel;    edtSearch: TEdit;    Label2: TLabel;    edtReplace: TEdit;    btnAdd: TButton;    btnRemove: TButton;    lstItems: TListView;    btnScan: TBitBtn;    btnClose: TBitBtn;    ProgAll: TProgressBar;    lblMsg: TLabel;    chkCase: TCheckBox;    GroupBox2: TGroupBox;    edtMask: TEdit;    chkConfirm: TCheckBox;    btnMask: TButton;    procedure btnRemoveClick(Sender: TObject);    procedure btnAddClick(Sender: TObject);    procedure btnScanClick(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure FormDestroy(Sender: TObject);    procedure FormShow(Sender: TObject);    procedure btnMaskClick(Sender: TObject);  private    { Private declarations }    Exclusions:       TStringList;    function ProcessLevel(Lvl:TFF7Level):Boolean;  public    { Public declarations }    CurFile:        String;    Data:           TCosmoPlugin;  end;var  frmSearchReplace: TfrmSearchReplace;implementation{$R *.DFM}{$R EXCLUSIONS.RES}Uses TxtEdt;procedure TfrmSearchReplace.btnRemoveClick(Sender: TObject);beginIf lstItems.Selected <> nil then  lstItems.Selected.Delete;end;procedure TfrmSearchReplace.btnAddClick(Sender: TObject);beginIf (edtReplace.Text<>'') and (edtSearch.Text<>'') then  With lstItems.Items.Add do begin    Caption := edtSearch.Text;    Subitems.Add(edtReplace.Text);  end;end;function TfrmSearchReplace.ProcessLevel(Lvl:TFF7Level):Boolean;varI,J,K:    Integer;Item:     TFF7TextItem;S,S2:     String;Conf:     Boolean;beginResult := False;Conf := chkConfirm.Checked;For I := 0 to Lvl.NumTextItems-1 do begin  Item := Lvl.TextItems[I];  If radSearchIn.ItemIndex <> 1 then begin //search in text    For J := 0 to lstItems.Items.Count-1 do begin      If chkCase.Checked then begin        S := Item.Text; S2 := lstItems.Items[J].Caption;      end else begin        S := Uppercase(Item.Text); S2 := Uppercase(lstItems.Items[J].Caption);      end;      K := Pos(S2,S);      If K<>0 then        If (Not Conf) or (MessageDlg('In text:'#13#13+Item.Name+#13+Item.Text+#13#13+' change '+S2+' to '+lstItems.Items[J].Subitems[0]+'?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then          While K<>0 do begin            Item.Text := Copy(Item.Text,1,K-1) + lstItems.Items[J].Subitems[0] + Copy(Item.Text,K+Length(S2),Length(S));            Result := True;            If chkCase.Checked then S := Item.Text else S := Uppercase(Item.Text);            K := Pos(S2,S);          end;    end;  end;  If radSearchIn.ItemIndex <> 0 then begin //search in name    For J := 0 to lstItems.Items.Count-1 do begin      If chkCase.Checked then begin        S := Item.Name; S2 := lstItems.Items[J].Caption;      end else begin        S := Uppercase(Item.Name); S2 := Uppercase(lstItems.Items[J].Caption);      end;      K := Pos(S2,S);      If K<>0 then        If (Not Conf) or (MessageDlg('In text:'#13+Item.Name+#13+Item.Text+#13+' change '+S2+' to '+lstItems.Items[J].Subitems[0]+'?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then          While K<>0 do begin            Item.Name := Copy(Item.Name,1,K-1) + lstItems.Items[J].Subitems[0] + Copy(Item.Name,K+Length(S2),Length(S));            Result := True;            If chkCase.Checked then S := Item.Name else S := Uppercase(Item.Name);            K := Pos(S2,S);          end;    end;  end;  Lvl.TextItems[I] := Item;end;end;procedure TfrmSearchReplace.btnScanClick(Sender: TObject);varRawLGP:       TRawLGPFile;SR:           TSearchRec;Tbl:          TLGP_TableEntry;J,MS,Sz,I,Cnt,Scan,Empty:     Integer;Mem:          TMemoryStream;Lvl:          TFF7Level;Details:      TStringList;Skip:         Boolean;beginIf GetFileRec(CurFile,SR) then Sz := SR.Size else Sz := 0;If edtMask.Text='' then begin  ShowMessage('You must enter a file mask. Try ''*'' for all files.');  Exit;end;If lstItems.Items.Count=0 then begin  ShowMessage('You must first add at least one search/replace pair to the list.');  Exit;end;MS := GetTickCount;lblMsg.Caption := 'Initializing...';lblMsg.Refresh;frmTextView.ClearList(True);RawLGP := TRawLGPFile.CreateFromFile(CurFile);ProgAll.Max := RawLGP.NumEntries;ProgAll.Position := 0; Cnt := 0; Scan := 0; Empty := 0;//Callback := Updater;Mem := TMemoryStream.Create;Lvl := TFF7Level.Create;Details := TStringList.Create;Data.Log('Starting search/replace...');For I := 0 to RawLGP.NumEntries-1 do begin  ProgAll.Position := I;  Tbl := RawLGP.TableEntry[I];  lblMsg.Caption := Tbl.Filename;  lblMsg.Refresh;  If Not MatchWildcard(edtMask.Text,Tbl.Filename) then Continue;  Skip := False;  For J := 0 to Exclusions.Count-1 do    If (Exclusions[J]<>'') and MatchWildcard(Uppercase(Exclusions[J]),Uppercase(Tbl.Filename)) then Skip := True;  If Skip then Continue;  Inc(Scan);  Mem.Clear;  RawLGP.Extract(I,Mem);  Lvl.LoadFromStream(Mem);  If Lvl.NumTextItems = 0 then Inc(Empty);  If ProcessLevel(Lvl) then begin    Data.Log('File '+Tbl.Filename+' changed - updating LGP');    Inc(Cnt);    Lvl.MidiIndex := $FF; //don't change midi    lblMsg.Caption := Tbl.Filename+' - compressing';    lblMsg.Refresh;    Mem.Clear;    Lvl.SaveToStream(Mem);    RawLGP.UpdateFile(I,Mem);    Details.Add(Tbl.Filename+' - edited and updated');  end else    If Lvl.NumTextItems=0 then Details.Add(Tbl.Filename+' - error opening text')      else Details.Add(Tbl.Filename+' - not changed');end;ProgAll.Position := ProgAll.Max;Data.Log('Search/replace done');Lvl.Free;Mem.Free;MS := GetTickCount - MS;ShowMessage('Search/Replace is complete.'#13+            Format('Took %d:%.2d to process files',[ (MS div 60000), (MS div 1000) mod 60 ] )+#13+            'Files in archive: '+IntToStr(RawLGP.NumEntries)+#13+            'Files actually examined: '+IntToStr(Scan)+#13+            'Files successfully opened: '+IntToStr(Scan-Empty)+#13+            'Files actually edited/changed: '+IntToStr(Cnt));RawLGP.Free;Data.Log(Details.Text);Details.Free;If Sz <> 0 then  If GetFileRec(CurFile,SR) then    If SR.Size > (Sz * 11) div 10 then      If MessageDlg('Archive has increased noticeably in size. Do you wish to pack the archive now?',mtConfirmation,[mbYes,mbNo],0)=mrYes then        LGP_Pack(CurFile);end;procedure TfrmSearchReplace.FormCreate(Sender: TObject);beginExclusions := TStringList.Create;end;procedure TfrmSearchReplace.FormDestroy(Sender: TObject);beginExclusions.Free;end;procedure TfrmSearchReplace.FormShow(Sender: TObject);varStrm:     TStream;beginStrm := Data.InputStream('Search_Exclusions');Exclusions.LoadFromStream(Strm);Data.Log('Search/Replace tool: '+IntToStr(Exclusions.Count)+' exclusions loaded');Strm.Free;end;procedure TfrmSearchReplace.btnMaskClick(Sender: TObject);beginShowMessage('This lets you specify which files to scan. Wildcard expressions (* and ?) are allowed.'#13+            'For example, "a*" means all files beginning with a, "?????" is all files with 5 letters in the name.'#13+            'In addition, the following files have been excluded automatically:'#13#13+            Exclusions.Text); end;end.
 
What is S&R ? And by the way try harder, just try and you can find it, its your job now.
 
I have no idea what the cause of the problem is because I don't know what problem you're having. But I'd firstly doubt it's in the visual code for the form you've posted; secondly, my spelling was correct, at least if you write English the way the English do... :P
 
The problem I'm having is that when I try to search and replace damn with darn, It just sits there saying "initialising" forever (well, at least for the 15 minutes I had the patience for)  Anyways, MS Word says that initializing is correct so maybe England is different? anyways, That is the code for your S&R tool, correct?

--RPGillespie
 
Yeah, quite a few of our words are slightly different to you Americans...
 
RPGillespie: heh hehe why are you trying to fix the english language syntax in the code instead of fixing the code ? I don't think that it is the reason for program not to work ;)

Try researching, debugging step by step and you will find out what is the problem. And by that you will learn programming.
 
Heh, heh, I know, but I really don't know where to begin so I just changed words so the spelling was American-correct. Ya, right now I'm getting used to fice's different functions and such so I can try and locate where the prob is...  :-?

RPGillespie
 
Status
Not open for further replies.
Back
Top