{ $Id$ 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; Wo: word; Err: integer; CaptureFile: string; ExecMode: TExecType; begin if (Idx<1) or (Idx>GetToolCount) then Exit; GetToolParams(Idx-1,Title,ProgramPath,Params,Wo); Err:=ParseToolParams(Params,false); if Err=-1 then Exit; if Err<>0 then begin ErrorBox(^C'Error parsing tool params.',nil); Exit; end; if CaptureToolTo<>capNone then begin CaptureFile:=ToolCaptureName; ExecMode:=exNoSwap; end else begin CaptureFile:=''; ExecMode:=exNormal; end; EraseFile(CaptureFile); EraseFile(FilterCaptureName); if CaptureToolTo=capMessageWindow then AddToolCommand(ProgramPath+' '+Params); if CaptureToolTo<>capNone then ShowMessage('Executing tool '+KillTilde(Title)+'...'); DoExecute(ProgramPath,Params,'',CaptureFile,ExecMode); if CaptureToolTo<>capNone then HideMessage; if (DosError=0) and (DosExitCode=0) then begin if CaptureToolTo=capEditWindow then begin W:=OpenEditorWindow(nil,'',0,0); if W<>nil then if StartEditor(W^.Editor,CaptureFile)=false then ErrorBox('Error reading output.',nil); end else if ToolFilter<>'' then begin ShowMessage('Executing filter for '+KillTilde(Title)+'...'); DoExecute(ToolFilter,'',CaptureFile,FilterCaptureName,exNoSwap); HideMessage; if (DosError=0) and (DosExitCode=0) then begin if ExistsFile(FilterCaptureName)=false then ErrorBox('Can''t find filtered output.',nil) else if ProcessMessageFile(FilterCaptureName)=false then ErrorBox('Error processing filtered output.',nil); end else if (DosError<>0) then ErrorBox('Error executing filter '+KillTilde(GetToolName(Idx-1)),nil) else if DosExitCode<>0 then ErrorBox('Filter execution successful. Exit code '+IntToStr(DosExitCode),nil); UpdateToolMessages; if DosError=0 then Messages; end; end else if (DosError<>0) then ErrorBox('Error executing tool '+KillTilde(GetToolName(Idx-1)),nil) else if DosExitCode<>0 then ErrorBox('Tool execution successful. Exit code '+IntToStr(DosExitCode),nil); {$ifndef DEBUG} EraseFile(CaptureFile); EraseFile(FilterCaptureName); {$endif} end; procedure TIDEApp.DoGrep; Const GrepOutName = 'grep$$.out'; GrepErrName = 'grep$$.err'; GrepExeName = 'grep'+ExeExt; var PGrepDialog : PCenterDialog; R,R2 : TRect; IL1,IL2 : PInputLine; s : string; p,lineNb : longint; error : word; showmsg : boolean; searchword, GrepExe,GrepArgs,Line,ModuleName : String; GrepOut : text; Params : Array[0..4] of longint; begin showmsg:=false; { Find grep.exe } GrepExe:=GrepExeName; If not LocateExeFile(GrepExe) then Begin ErrorBox('Grep program not found',nil); Exit; End; { Try to load the word from the editor } If not(DeskTop^.First=nil) and (DeskTop^.First^.HelpCtx=hcSourceWindow) then Searchword:=PSourceWindow(DeskTop^.First)^.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 } GrepArgs:='-n -i "$TEXT" '+s; { Dialog } R.Assign(0,0,45,8); new(PGrepDialog,Init(R,'Grep arguments')); 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-3; New(IL1, Init(R2, 128)); IL1^.Data^:=SearchWord; Insert(IL1); R2.Move(0,-1); Insert(New(PLabel, Init(R2, '~T~ext to find', IL1))); R2.Move(0,4); New(IL2, Init(R2, 128)); IL2^.Data^:=GrepArgs; Insert(IL2); R2.Move(0,-1); Insert(New(PLabel, Init(R2, '~G~rep arguments', IL2))); end; InsertButtons(PGrepDialog); IL1^.Select; if Desktop^.ExecView(PGrepDialog)=cmOK then begin SearchWord:=IL1^.Data^; if SearchWord<>'' then begin GrepArgs:=IL2^.Data^; ReplaceStr(GrepArgs,'$TEXT',SearchWord); { Linux ? } if not ExecuteRedir(GrepExe,GrepArgs,'',GrepOutName,GrepErrName) then Begin { 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(#3'Error running Grep'#13#3'DosError = %d'#13#3'Exit code = %d',@Params); end; End; {$I-} showmsg:=true; Assign(GrepOut,GrepOutName); Reset(GrepOut); While not eof(GrepOut) do begin readln(GrepOut,Line); 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 AddToolMessage(ModuleName,Copy(Line,p+1,255),LineNb,1); end; end; Close(GrepOut); Erase(GrepOut); { Delete also grep$$.err } Assign(GrepOut,GrepErrName); Erase(GrepOut); {$I+} EatIO; end; end; Dispose(PGrepDialog, Done); UpdateToolMessages; if showmsg then Messages; end; { $Log$ Revision 1.11 1999-03-02 13:48:30 peter * fixed far problem is fpdebug * tile/cascading with message window * grep fixes Revision 1.10 1999/02/22 12:46:57 peter * small fixes for linux and grep Revision 1.9 1999/02/22 11:29:37 pierre + added col info in MessageItem + grep uses HighLightExts and should work for linux Revision 1.8 1999/02/22 02:15:17 peter + default extension for save in the editor + Separate Text to Find for the grep dialog * fixed redir crash with tp7 Revision 1.7 1999/02/20 15:18:31 peter + ctrl-c capture with confirm dialog + ascii table in the tools menu + heapviewer * empty file fixed * fixed callback routines in fpdebug to have far for tp7 Revision 1.6 1999/02/05 13:51:42 peter * unit name of FPSwitches -> FPSwitch which is easier to use * some fixes for tp7 compiling Revision 1.5 1999/02/05 12:11:59 pierre + SourceDir that stores directories for sources that the compiler should not know about Automatically asked for addition when a new file that needed filedialog to be found is in an unknown directory Stored and retrieved from INIFile + Breakpoints conditions added to INIFile * Breakpoints insterted and removed at debin and end of debug session Revision 1.4 1999/02/04 15:59:08 pierre * grep$$$.out was not closed Revision 1.3 1999/02/04 13:32:09 pierre * Several things added (I cannot commit them independently !) + added TBreakpoint and TBreakpointCollection + added cmResetDebugger,cmGrep,CmToggleBreakpoint + Breakpoint list in INIFile * Select items now also depend of SwitchMode * Reading of option '-g' was not possible ! + added search for -Fu args pathes in TryToOpen + added code for automatic opening of FileDialog if source not found Revision 1.2 1999/01/21 11:54:21 peter + tools menu + speedsearch in symbolbrowser * working run command Revision 1.1 1998/12/22 14:27:54 peter * moved Revision 1.2 1998/12/22 10:39:49 peter + options are now written/read + find and replace routines }