123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- {
- This file is part of the Free Pascal Integrated Development Environment
- Copyright (c) 1998 by Berczi Gabor
- Tools menu entries
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program 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.
- **********************************************************************}
- procedure TIDEApp.Messages;
- begin
- if MessagesWindow=nil then
- Desktop^.Insert(New(PMessagesWindow, Init))
- else
- MessagesWindow^.Focus;
- end;
- procedure TIDEApp.DoAsciiTable;
- begin
- if ASCIIChart=nil then
- begin
- New(ASCIIChart, Init);
- Desktop^.Insert(ASCIIChart);
- end
- else
- ASCIIChart^.Focus;
- end;
- procedure TIDEApp.Calculator;
- begin
- with CalcWindow^ do
- begin
- if GetState(sfVisible)=false then Show;
- MakeFirst;
- end;
- end;
- procedure TIDEApp.ExecuteTool(Idx: integer);
- var Title,ProgramPath,Params: string;
- W: PSourceWindow;
- ToFocus : sw_integer;
- Wo: word;
- Err: integer;
- CaptureFile: string;
- TextFile : Text;
- ExecMode: TExecType;
- Executed: boolean;
- begin
- if (Idx<1) or (Idx>GetToolCount) then Exit;
- InitToolProcessing;
- GetToolParams(Idx-1,Title,ProgramPath,Params,Wo);
- InitToolTempFiles;
- Err:=ParseToolParams(Params,false);
- if Err=-1 then
- begin
- DoneToolTempFiles;
- Exit;
- end;
- if Err<>0 then
- begin ErrorBox(msg_errorparsingtoolparams,nil); Exit; end;
- if CaptureToolTo<>capNone then
- begin
- if ToolOutput<>'' then
- begin
- CaptureFile:=ToolOutput;
- end
- else
- CaptureFile:=ToolCaptureName;
- ExecMode:=exNoSwap;
- end
- else
- begin
- CaptureFile:='';
- ExecMode:=exNormal;
- end;
- EraseFile(CaptureFile);
- EraseFile(FilterCaptureName);
- EraseFile(ToolCaptureErr);
- if CaptureToolTo=capMessageWindow then
- begin
- Messages;
- AddToolCommand(ProgramPath+' '+Params);
- UpdateToolMessages;
- ToFocus:=ToolMessages^.count-1;
- end
- else
- ToFocus:=-1;
- if CaptureToolTo<>capNone then
- ShowMessage(FormatStrStr(msg_executingtool,KillTilde(Title)));
- Executed:=DoExecute(ProgramPath,Params,'',CaptureFile,ToolCaptureErr,ExecMode);
- if CaptureToolTo<>capNone then
- HideMessage;
- if Executed then
- begin
- if (DosError=0) {and (DosExitCode=0)} then
- begin
- if CaptureToolTo=capEditWindow then
- begin
- if ToolOutput<>'' then
- W:=OpenEditorWindow(nil,ToolOutput,0,0)
- else
- begin
- W:=OpenEditorWindow(nil,'',0,0);
- if W<>nil then
- if StartEditor(W^.Editor,CaptureFile)=false then
- ErrorBox(msg_errorreadingoutput,nil);
- end;
- end
- else if (ToolFilter<>'') or (CaptureToolTo=capMessageWindow) then
- begin
- if ToolFilter<>'' then
- begin
- ShowMessage(FormatStrStr(msg_executingfilterfor,KillTilde(Title)));
- DoExecute(ToolFilter,'',CaptureFile,FilterCaptureName,'',exNoSwap);
- HideMessage;
- if (DosError=0) and (DosExitCode=0) then
- begin
- if ExistsFile(FilterCaptureName)=false then
- ErrorBox(msg_cantfindfilteredoutput,nil)
- else
- if ProcessMessageFile(FilterCaptureName)=false then
- ErrorBox(msg_errorprocessingfilteredoutput,nil);
- end;
- if (DosError<>0) then
- ErrorBox(FormatStrStr(msg_errorexecutingfilter,KillTilde(GetToolName(Idx-1))),nil) else
- if DosExitCode<>0 then
- ErrorBox(FormatStrInt(msg_filterexecutionsuccessfulexitcodeis,DosExitCode),nil);
- end
- else
- begin
- if ExistsFile(CaptureFile) then
- begin
- Assign(TextFile,CaptureFile);
- Reset(TextFile);
- while not eof(TextFile) do
- begin
- Readln(TextFile,Params);
- AddToolCommand(Params);
- end;
- Close(TextFile);
- UpdateToolMessages;
- if Assigned(MessagesWindow) then
- MessagesWindow^.MakeFirst;
- end;
- end;
- UpdateToolMessages;
- if (ToFocus<>-1) then
- if Assigned(MessagesWindow) then
- MessagesWindow^.FocusItem(ToFocus);
- if DosError=0 then
- Messages;
- end;
- end;
- end;
- if (DosError<>0) or (DosExitCode<>0) or (SizeOfFile(ToolCaptureErr)>0) then
- begin
- if (DosError<>0) then
- ErrorBox(FormatStrStr(msg_errorexecutingtool,KillTilde(GetToolName(Idx-1))),nil) else
- if DosExitCode<>0 then
- ErrorBox(FormatStrInt(msg_toolexecutionsuccessfulexitcodeis,DosExitCode),nil);
- {$i-}
- Assign(TextFile,ToolCaptureErr);
- Reset(TextFile);
- while not eof(TextFile) do
- begin
- Readln(TextFile,Params);
- AddToolCommand(Params);
- end;
- Close(TextFile);
- UpdateToolMessages;
- if Assigned(MessagesWindow) then
- begin
- MessagesWindow^.MakeFirst;
- if (ToFocus<>-1) then
- MessagesWindow^.FocusItem(ToFocus);
- end;
- end;
- {$ifndef DEBUG}
- if ToolOutput='' then
- begin
- EraseFile(CaptureFile);
- ToolOutput:='';
- end;
- EraseFile(FilterCaptureName);
- EraseFile(ToolCaptureErr);
- {$endif}
- { In case we have something that the compiler touched }
- AskToReloadAllModifiedFiles;
- DoneToolTempFiles;
- end;
- procedure TIDEApp.DoGrep;
- Const
- GrepExeName = 'grep'+ExeExt;
- var
- PGrepDialog : PCenterDialog;
- R,R1,R2 : TRect;
- Control : PView;
- IL1,IL2 : PEditorInputLine;
- s : string;
- p,lineNb,GrepOutputLine : longint;
- error : word;
- PosText : longint;
- showmsg,error_in_reading,FirstMsg : boolean;
- ToFocus : sw_integer;
- searchword,
- GrepExe,GrepArgs,Line,ModuleName : String;
- GrepOut : text;
- Params : Array[0..4] of longint;
- begin
- showmsg:=false;
- ToFocus:=-1;
- { Find grep.exe }
- GrepExe:=GrepExeName;
- If not LocateExeFile(GrepExe) then
- Begin
- ErrorBox(msg_grepprogramnotfound,nil);
- Exit;
- End;
- { Try to load the word from the editor }
- If not(DeskTop^.Current=nil) and
- (DeskTop^.Current^.HelpCtx=hcSourceWindow) then
- Searchword:=PSourceWindow(DeskTop^.Current)^.Editor^.GetCurrentWord
- else
- Searchword:='';
- { Don't use the listseparator in the file list else it's seen as 1 file
- (at least under linux }
- s:=highlightexts;
- ReplaceStr(s,';',' ');
- { add "" for args with spaces }
- { WARNING : text must still be entered in usual grep syntax }
- { -n is always added later because otherwise
- we don't get the line info PM }
- GrepArgs:=' -i "$TEXT" '+s;
- { Dialog }
- R.Assign(0,0,50,8);
- new(PGrepDialog,Init(R,dialog_greparguments));
- with PGrepDialog^ do
- begin
- R2.A.Y:=R.A.Y+3;
- R2.B.Y:=R2.A.Y+1;
- R2.A.X:=R.A.X+3;
- R2.B.X:=R.B.X-6;
- New(IL1, Init(R2, 128));
- IL1^.Data^:=SearchWord;
- Insert(IL1);
- R2.Move(0,-1);
- Insert(New(PLabel, Init(R2, label_grep_texttofind, IL1)));
- R1.Assign(R2.B.X, R2.A.Y+1, R2.B.X+3, R2.B.Y+1);
- Control := New(PHistory, Init(R1, IL1, TextGrepId));
- Insert(Control);
- R2.Move(0,4);
- New(IL2, Init(R2, 128));
- IL2^.Data^:=GrepArgs;
- Insert(IL2);
- R2.Move(0,-1);
- Insert(New(PLabel, Init(R2, label_grep_greparguments, IL2)));
- R1.Assign(R2.B.X, R2.A.Y+1, R2.B.X+3, R2.B.Y+1);
- Control := New(PHistory, Init(R1, IL2, GrepArgsId));
- Insert(Control);
- end;
- InsertButtons(PGrepDialog);
- IL1^.Select;
- if Desktop^.ExecView(PGrepDialog)=cmOK then
- begin
- SearchWord:=IL1^.Data^;
- if SearchWord<>'' then
- begin
- GrepArgs:=IL2^.Data^;
- { Remember last used Grep extensions }
- PosText:=pos('"$TEXT" ',GrepArgs);
- if PosText>0 then
- HighlightExts:=Trim(Copy(GrepArgs,PosText+Length('"$TEXT" '),Length(GrepArgs)));
- { change spaces back into ';' again }
- ReplaceStr(HighlightExts,' ',';');
- { Replace search string }
- ReplaceStr(GrepArgs,'$TEXT',SearchWord);
- { Linux ? }
- AddToolCommand(GrepExe+' -n '+GrepArgs);
- ToFocus:=ToolMessages^.count-1;
- UpdateToolMessages;
- if Assigned(MessagesWindow) then
- MessagesWindow^.FocusItem(ToFocus);
- showmsg:=true;
- Messages;
- PushStatus(FormatStrStr(msg_runninggrepwithargs,GrepArgs));
- if not ExecuteRedir(GrepExe,'-n '+GrepArgs,'',GrepOutName,GrepErrName) then
- Begin
- PopStatus;
- { 2 as exit code just means that
- some file vwere not found ! }
- if (IOStatus<>0) or (ExecuteResult<>2) then
- begin
- Params[0]:=IOStatus;
- Params[1]:=ExecuteResult;
- WarningBox(msg_errorrunninggrep,@Params);
- end;
- End
- else
- PopStatus;
- {$I-}
- Assign(GrepOut,GrepOutName);
- Reset(GrepOut);
- error_in_reading:=false;
- FirstMsg:=True;
- GrepOutputLine:=0;
- While not eof(GrepOut) do
- begin
- readln(GrepOut,Line);
- Inc(GrepOutputLine);
- p:=pos(':',line);
- if p>0 then
- begin
- ModuleName:=copy(Line,1,p-1);
- Line:=Copy(Line,p+1,255);
- p:=pos(':',Line);
- val(copy(Line,1,p-1),lineNb,error);
- if error=0 then
- begin
- AddToolMessage(ModuleName,Copy(Line,p+1,255),LineNb,1);
- if FirstMsg then
- begin
- Inc(ToFocus);
- FirstMsg:=false;
- end;
- end
- else
- error_in_reading:=true;
- end;
- end;
- Close(GrepOut);
- if not error_in_reading then
- Erase(GrepOut)
- else
- begin
- ClearFormatParams;
- AddFormatParamInt(GrepOutputLine);
- AddFormatParamStr(GrepOutName);
- WarningBox(msg_errorreadinggrepoutput,@FormatParams);
- end;
- { Delete also grep$$.err }
- if not error_in_reading then
- begin
- Assign(GrepOut,GrepErrName);
- Erase(GrepOut);
- end;
- {$I+}
- EatIO;
- end;
- end;
- Dispose(PGrepDialog, Done);
- UpdateToolMessages;
- if (ToFocus<>-1) then
- if Assigned(MessagesWindow) then
- begin
- MessagesWindow^.Lock;
- MessagesWindow^.FocusItem(ToolMessages^.count-1);
- if ToFocus>0 then
- MessagesWindow^.FocusItem(ToFocus-1);
- MessagesWindow^.FocusItem(ToFocus);
- MessagesWindow^.UnLock;
- end;
- if showmsg then
- Messages;
- end;
|