fpmrun.inc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703
  1. {
  2. $Id$
  3. This file is part of the Free Pascal Integrated Development Environment
  4. Copyright (c) 1998 by Berczi Gabor
  5. Run menu entries
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {$define MODIFIEDINDEBUG}
  13. function TIDEApp.AskRecompileIfModified:boolean;
  14. var
  15. PW,PPW : PSourceWindow;
  16. Checkmodifiededitor : boolean;
  17. begin
  18. AskRecompileIfModified:=false;
  19. {$ifdef MODIFIEDINDEBUG}
  20. if not AskRecompileIfModifiedFlag then
  21. exit;
  22. Checkmodifiededitor:=false;
  23. PW:=FirstEditorWindow;
  24. PPW:=PW;
  25. while assigned(PW) do
  26. begin
  27. If PW^.HelpCtx=hcSourceWindow then
  28. begin
  29. if pw^.editor^.getmodified then
  30. if pw^.editor^.core^.getmodifytime > LastCompileTime then
  31. begin
  32. Checkmodifiededitor:=true;
  33. break;
  34. end;
  35. end;
  36. PW:=PSourceWindow(PW^.next);
  37. While assigned(PW) and (PW<>PPW) and (PW^.HelpCtx<>hcSourceWindow) do
  38. PW:=PSourceWindow(PW^.next);
  39. If PW=PPW then
  40. break;
  41. end;
  42. if Checkmodifiededitor then
  43. begin
  44. if (MessageBox(#3+'You''ve edited a file, recompile the project?',nil,mfinformation+mfyesbutton+mfnobutton)=cmYes) then
  45. begin
  46. DoResetDebugger;
  47. DoRun;
  48. AskRecompileIfModified:=true;
  49. end
  50. else
  51. AskRecompileIfModifiedFlag:=false;
  52. end;
  53. {$endif MODIFIEDINDEBUG}
  54. end;
  55. procedure TIDEApp.DoStepOver;
  56. begin
  57. {$ifndef NODEBUG}
  58. if not assigned(Debugger) or Not Debugger^.HasExe then
  59. begin
  60. InitDebugger;
  61. if not assigned(Debugger) then
  62. begin
  63. NoDebugger;
  64. exit;
  65. end;
  66. end;
  67. if not Debugger^.IsRunning then
  68. Debugger^.StartTrace
  69. else
  70. begin
  71. if AskRecompileIfModified then
  72. exit;
  73. if InDisassemblyWindow then
  74. Debugger^.TraceNextI
  75. else
  76. Debugger^.TraceNext;
  77. end;
  78. {While (Debugger^.InvalidSourceLine and
  79. Debugger^.IsRunning and
  80. not Debugger^.error) do
  81. begin
  82. Inc(Debugger^.HiddenStepsCount);
  83. if InDisassemblyWindow then
  84. Debugger^.TraceNextI
  85. else
  86. Debugger^.TraceNext;
  87. end;}
  88. Debugger^.AnnotateError;
  89. {$else NODEBUG}
  90. NoDebugger;
  91. {$endif NODEBUG}
  92. end;
  93. procedure TIDEApp.DoTraceInto;
  94. begin
  95. {$ifndef NODEBUG}
  96. if not assigned(Debugger) or Not Debugger^.HasExe then
  97. begin
  98. InitDebugger;
  99. if not assigned(Debugger) then
  100. begin
  101. NoDebugger;
  102. exit;
  103. end;
  104. end;
  105. if not debugger^.IsRunning then
  106. Debugger^.StartTrace
  107. else
  108. begin
  109. if AskRecompileIfModified then
  110. exit;
  111. if InDisassemblyWindow then
  112. Debugger^.TraceStepI
  113. else
  114. Debugger^.TraceStep;
  115. end;
  116. { I think we should not try to go deeper !
  117. if the source is not found PM }
  118. While (Debugger^.InvalidSourceLine and
  119. Debugger^.IsRunning and
  120. not Debugger^.error) do
  121. begin
  122. Inc(Debugger^.HiddenStepsCount);
  123. if InDisassemblyWindow then
  124. Debugger^.TraceNextI
  125. else
  126. Debugger^.TraceNext;
  127. end;
  128. Debugger^.AnnotateError;
  129. {$else NODEBUG}
  130. NoDebugger;
  131. {$endif NODEBUG}
  132. end;
  133. procedure TIDEApp.DoContUntilReturn;
  134. begin
  135. {$ifndef NODEBUG}
  136. if not assigned(Debugger) or Not Debugger^.HasExe then
  137. begin
  138. InitDebugger;
  139. if not assigned(Debugger) then
  140. begin
  141. NoDebugger;
  142. exit;
  143. end;
  144. end;
  145. if not debugger^.IsRunning then
  146. Debugger^.Run
  147. else
  148. begin
  149. if AskRecompileIfModified then
  150. exit;
  151. Debugger^.UntilReturn;
  152. end;
  153. Debugger^.AnnotateError;
  154. {$else NODEBUG}
  155. NoDebugger;
  156. {$endif NODEBUG}
  157. end;
  158. procedure TIDEApp.DoRun;
  159. var
  160. RunDirect : boolean;
  161. begin
  162. {$ifndef NODEBUG}
  163. if not assigned(Debugger) or not Debugger^.HasExe or not Debugger^.IsRunning then
  164. {$endif}
  165. begin
  166. if (not ExistsFile(ExeFile)) or (CompilationPhase<>cpDone) or
  167. NeedRecompile(cRun,false) then
  168. begin
  169. DoCompile(cRun);
  170. if CompilationPhase<>cpDone then
  171. Exit;
  172. if not Status.IsExe then
  173. begin
  174. ErrorBox(msg_cannotrununit,nil);
  175. Exit;
  176. end;
  177. if IsLibrary then
  178. begin
  179. ErrorBox(msg_cannotrunlibrary,nil);
  180. Exit;
  181. end;
  182. end;
  183. if (EXEFile='') then
  184. begin
  185. ErrorBox(msg_nothingtorun,nil);
  186. Exit;
  187. end;
  188. if not ExistsFile(ExeFile) then
  189. begin
  190. MsgParms[1].Ptr:=@EXEFile;
  191. ErrorBox(msg_invalidfilename,@MsgParms);
  192. Exit;
  193. end;
  194. RunDirect:=true;
  195. {$ifndef NODEBUG}
  196. { we use debugger if and only if there are active breakpoints
  197. AND the target is correct for debugging !! PM }
  198. if ActiveBreakpoints and
  199. {$ifdef COMPILER_1_0}
  200. (target_os.shortname=source_os.shortname)
  201. {$else COMPILER_1_0}
  202. (target_info.shortname=source_info.shortname)
  203. {$endif COMPILER_1_0}
  204. then
  205. begin
  206. if not assigned(Debugger) or Not Debugger^.HasExe then
  207. InitDebugger;
  208. if assigned(Debugger) then
  209. begin
  210. Debugger^.Run;
  211. RunDirect:=false;
  212. end;
  213. end;
  214. {$endif ndef NODEBUG}
  215. if Not RunDirect then
  216. exit;
  217. {$ifdef Unix}
  218. if (DebuggeeTTY<>'') then
  219. DoExecute(ExeFile,GetRunParameters,DebuggeeTTY,DebuggeeTTY,DebuggeeTTY,exNormal)
  220. else
  221. {$endif Unix}
  222. DoExecute(ExeFile,GetRunParameters,'','','',exNormal);
  223. { In case we have something that the compiler touched }
  224. AskToReloadAllModifiedFiles;
  225. LastExitCode:=ExecuteResult;
  226. If IOStatus<>0 then
  227. begin
  228. MsgParms[1].Ptr:=@EXEFile;
  229. MsgParms[2].long:=IOStatus;
  230. InformationBox(msg_programnotrundoserroris,@MsgParms);
  231. end
  232. else If LastExitCode<>0 then
  233. begin
  234. MsgParms[1].Ptr:=@EXEFile;
  235. MsgParms[2].long:=LastExitCode;
  236. InformationBox(msg_programfileexitedwithexitcode,@MsgParms);
  237. end;
  238. end
  239. {$ifndef NODEBUG}
  240. else
  241. Debugger^.Continue
  242. {$endif}
  243. ;
  244. end;
  245. procedure TIDEApp.UpdateRunMenu(DebuggeeRunning : boolean);
  246. var MenuItem : PMenuItem;
  247. begin
  248. MenuItem:=PAdvancedMenuBar(MenuBar)^.GetMenuItem(cmRun);
  249. if assigned(MenuItem) then
  250. begin
  251. If assigned(MenuItem^.Name) then
  252. DisposeStr(MenuItem^.Name);
  253. if DebuggeeRunning then
  254. MenuItem^.Name:=NewStr(menu_run_continue)
  255. else
  256. MenuItem^.Name:=NewStr(menu_run_run);
  257. end;
  258. MenuItem:=PAdvancedMenuBar(MenuBar)^.GetMenuItem(cmResetDebugger);
  259. if assigned(MenuItem) then
  260. MenuItem^.Disabled:=not DebuggeeRunning;
  261. MenuItem:=PAdvancedMenuBar(MenuBar)^.GetMenuItem(cmUntilReturn);
  262. if assigned(MenuItem) then
  263. MenuItem^.Disabled:=not DebuggeeRunning;
  264. end;
  265. procedure TIDEApp.Parameters;
  266. var R,R2: TRect;
  267. D: PCenterDialog;
  268. IL: PInputLine;
  269. begin
  270. R.Assign(0,0,round(ScreenWidth*54/80),4);
  271. New(D, Init(R, dialog_programparameters));
  272. with D^ do
  273. begin
  274. GetExtent(R); R.Grow(-2,-1); Inc(R.A.Y); R.B.Y:=R.A.Y+1;
  275. R2.Copy(R); R2.A.X:=16; Dec(R2.B.X,4);
  276. New(IL, Init(R2, 255));
  277. IL^.Data^:=GetRunParameters;
  278. Insert(IL);
  279. R2.Copy(R); R2.A.X:=R2.B.X-3; R2.B.X:=R2.A.X+3;
  280. Insert(New(PHistory, Init(R2, IL, hidRunParameters)));
  281. R2.Copy(R); R2.B.X:=16;
  282. Insert(New(PLabel, Init(R2, label_parameters_parameter, IL)));
  283. end;
  284. InsertButtons(D);
  285. IL^.Select;
  286. if Desktop^.ExecView(D)=cmOK then
  287. begin
  288. SetRunParameters(IL^.Data^);
  289. end;
  290. Dispose(D, Done);
  291. end;
  292. procedure TIDEApp.DoResetDebugger;
  293. begin
  294. {$ifndef NODEBUG}
  295. if assigned(Debugger) then
  296. DoneDebugger;
  297. UpdateScreen(true);
  298. {$else NODEBUG}
  299. NoDebugger;
  300. {$endif NODEBUG}
  301. end;
  302. procedure TIDEApp.DoContToCursor;
  303. {$ifndef NODEBUG}
  304. var
  305. W : PFPWindow;
  306. PDL : PDisasLine;
  307. S,FileName : string;
  308. P,CurY,LineNr : longint;
  309. {$endif}
  310. begin
  311. {$ifndef NODEBUG}
  312. if (DeskTop^.Current=nil) or
  313. ((TypeOf(DeskTop^.Current^)<>TypeOf(TSourceWindow)) and
  314. (TypeOf(DeskTop^.Current^)<>TypeOf(TDisassemblyWindow))) then
  315. Begin
  316. ErrorBox(msg_impossibletoreachcursor,nil);
  317. Exit;
  318. End;
  319. If not assigned(Debugger) or Not Debugger^.HasExe then
  320. begin
  321. InitDebugger;
  322. if not assigned(Debugger) then
  323. begin
  324. NoDebugger;
  325. exit;
  326. end;
  327. end;
  328. W:=PFPWindow(DeskTop^.Current);
  329. If assigned(W) then
  330. begin
  331. If TypeOf(W^)=TypeOf(TSourceWindow) then
  332. begin
  333. FileName:=PSourceWindow(W)^.Editor^.FileName;
  334. LineNr:=PSourceWindow(W)^.Editor^.CurPos.Y+1;
  335. Debugger^.Command('tbreak '+GDBFileName(NameAndExtOf(FileName))+':'+IntToStr(LineNr));
  336. Debugger^.Continue;
  337. end
  338. else
  339. begin
  340. CurY:=PDisassemblyWindow(W)^.Editor^.CurPos.Y;
  341. if CurY<PDisassemblyWindow(W)^.Editor^.GetLineCount then
  342. PDL:=PDisasLine(PDisassemblyWindow(W)^.Editor^.GetLine(CurY))
  343. else
  344. PDL:=nil;
  345. if assigned(PDL) then
  346. begin
  347. if PDL^.Address<>0 then
  348. begin
  349. Debugger^.Command('tbreak *0x'+IntToHex(PDL^.Address,8));
  350. end
  351. else
  352. begin
  353. S:=PDisassemblyWindow(W)^.Editor^.GetDisplayText(PDisassemblyWindow(W)^.Editor^.CurPos.Y);
  354. p:=pos(':',S);
  355. FileName:=Copy(S,1,p-1);
  356. S:=Copy(S,p+1,high(S));
  357. p:=pos(' ',S);
  358. S:=Copy(S,1,p-1);
  359. LineNr:=StrToInt(S);
  360. Debugger^.Command('tbreak '+GDBFileName(NameAndExtOf(FileName))+':'+IntToStr(LineNr));
  361. end;
  362. Debugger^.Continue;
  363. end;
  364. end;
  365. end;
  366. {$else NODEBUG}
  367. NoDebugger;
  368. {$endif NODEBUG}
  369. end;
  370. procedure TIDEApp.DoOpenGDBWindow;
  371. begin
  372. {$ifndef NODEBUG}
  373. InitGDBWindow;
  374. if not assigned(Debugger) then
  375. begin
  376. new(Debugger,Init);
  377. if assigned(Debugger) then
  378. Debugger^.SetExe(ExeFile);
  379. end;
  380. If assigned(GDBWindow) then
  381. GDBWindow^.MakeFirst;
  382. {$else NODEBUG}
  383. NoDebugger;
  384. {$endif NODEBUG}
  385. end;
  386. procedure TIDEApp.DoToggleBreak;
  387. {$ifndef NODEBUG}
  388. var
  389. W : PSourceWindow;
  390. WD : PDisassemblyWindow;
  391. PDL : PDisasLine;
  392. PB : PBreakpoint;
  393. S,FileName : string;
  394. b : boolean;
  395. CurY,P,LineNr : longint;
  396. {$endif}
  397. begin
  398. {$ifndef NODEBUG}
  399. if (DeskTop^.Current=nil) or
  400. (TypeOf(DeskTop^.Current^)<>TypeOf(TSourceWindow)) and
  401. (TypeOf(DeskTop^.Current^)<>TypeOf(TDisassemblyWindow)) then
  402. Begin
  403. ErrorBox(msg_impossibletosetbreakpoint,nil);
  404. Exit;
  405. End;
  406. if assigned (DeskTop^.Current) and
  407. (TypeOf(DeskTop^.Current^)=TypeOf(TSourceWindow)) then
  408. begin
  409. W:=PSourceWindow(DeskTop^.Current);
  410. FileName:=W^.Editor^.FileName;
  411. LineNr:=W^.Editor^.CurPos.Y+1;
  412. BreakpointsCollection^.ToggleFileLine(FileName,LineNr);
  413. end
  414. else if assigned (DeskTop^.Current) and
  415. (TypeOf(DeskTop^.Current^)=TypeOf(TDisassemblyWindow)) then
  416. begin
  417. WD:=PDisassemblyWindow(DeskTop^.Current);
  418. CurY:=WD^.Editor^.CurPos.Y;
  419. if CurY<WD^.Editor^.GetLineCount then
  420. PDL:=PDisasLine(WD^.Editor^.GetLine(CurY))
  421. else
  422. PDL:=nil;
  423. if assigned(PDL) then
  424. begin
  425. if PDL^.Address<>0 then
  426. begin
  427. PB:=New(PBreakpoint,init_address(IntToHex(PDL^.Address,8)));
  428. BreakpointsCollection^.Insert(PB);
  429. WD^.Editor^.SetLineFlagState(CurY,lfBreakpoint,true);
  430. end
  431. else
  432. begin
  433. S:=WD^.Editor^.GetDisplayText(WD^.Editor^.CurPos.Y);
  434. p:=pos(':',S);
  435. FileName:=Copy(S,1,p-1);
  436. S:=Copy(S,p+1,high(S));
  437. p:=pos(' ',S);
  438. S:=Copy(S,1,p-1);
  439. LineNr:=StrToInt(S);
  440. b:=BreakpointsCollection^.ToggleFileLine(FileName,LineNr);
  441. WD^.Editor^.SetLineFlagState(CurY,lfBreakpoint,b);
  442. end;
  443. end;
  444. end;
  445. {$else NODEBUG}
  446. NoDebugger;
  447. {$endif NODEBUG}
  448. end;
  449. {
  450. $Log$
  451. Revision 1.3 2002-08-13 08:59:12 pierre
  452. + Run menu changes depending on wether the debuggee is running or not
  453. Revision 1.2 2001/11/07 00:28:53 pierre
  454. + Disassembly window made public
  455. Revision 1.1 2001/08/04 11:30:23 peter
  456. * ide works now with both compiler versions
  457. Revision 1.1.2.13 2001/03/12 17:34:55 pierre
  458. + Disassembly window started
  459. Revision 1.1.2.12 2001/03/06 21:47:59 pierre
  460. * avoid restart of debugger when opening GDB Window
  461. Revision 1.1.2.11 2001/02/19 10:40:50 pierre
  462. * Check for changed files after Running tool or shell
  463. Revision 1.1.2.10 2001/02/13 16:04:01 pierre
  464. * fixes for bugs 1280
  465. Revision 1.1.2.9 2000/12/30 22:52:27 peter
  466. * check modified while in debug mode. But placed it between a
  467. conditional again as it reports also if the file was already modified
  468. before the first compile.
  469. * remove unsaved file checks when compiling without primary file so it
  470. works the same as with a primary file set.
  471. Revision 1.1.2.8 2000/12/13 16:59:09 pierre
  472. * ErrFile filed added to DoExecute method
  473. Revision 1.1.2.7 2000/12/08 15:04:27 pierre
  474. * fix stupid error in DoRun
  475. Revision 1.1.2.6 2000/11/27 17:41:46 pierre
  476. * better GDB window opening if nothing compiled yet
  477. Revision 1.1.2.5 2000/11/19 00:23:33 pierre
  478. Task 23: nicer error message when trying to run unit or library
  479. Revision 1.1.2.4 2000/11/16 23:06:31 pierre
  480. * correct handling of Compile/Make if primary file is set
  481. Revision 1.1.2.3 2000/11/03 13:29:59 pierre
  482. Start GDB if opening GDB window
  483. Revision 1.1.2.2 2000/10/18 21:53:27 pierre
  484. * several Gabor fixes
  485. Revision 1.1.2.1 2000/10/09 16:28:25 pierre
  486. * several linux enhancements
  487. Revision 1.1 2000/07/13 09:48:35 michael
  488. + Initial import
  489. Revision 1.32 2000/05/02 08:42:28 pierre
  490. * new set of Gabor changes: see fixes.txt
  491. Revision 1.31 2000/04/18 11:42:37 pierre
  492. lot of Gabor changes : see fixes.txt
  493. Revision 1.30 2000/03/21 23:27:35 pierre
  494. Gabor fixes to avoid unused vars
  495. Revision 1.29 2000/03/08 16:58:12 pierre
  496. Uses Debugger^.IsRunning
  497. Revision 1.28 2000/02/04 00:15:31 pierre
  498. * adapted to change in fpdebug unit
  499. Revision 1.27 2000/02/02 22:48:25 pierre
  500. * Use desktop^.current instead of desktop^.first
  501. * Avoid stopping at main if debugger started with CrtlF9
  502. Revision 1.26 2000/01/31 16:02:08 pierre
  503. * avoid the Impossible to set breakpoints here
  504. Revision 1.25 2000/01/28 22:38:21 pierre
  505. * CrtlF9 starts debugger if there are active breakpoints
  506. Revision 1.24 2000/01/10 13:23:28 pierre
  507. * Debugger test missing in ContTo
  508. Revision 1.23 1999/12/10 13:01:01 pierre
  509. * do not recompile a program inside Debugging session
  510. Revision 1.22 1999/11/10 17:17:02 pierre
  511. + Information box if exit code <> 0 or DosError
  512. Revision 1.21 1999/09/16 14:34:59 pierre
  513. + TBreakpoint and TWatch registering
  514. + WatchesCollection and BreakpointsCollection stored in desk file
  515. * Syntax highlighting was broken
  516. Revision 1.20 1999/09/09 14:11:56 pierre
  517. * GDB needs lowercase filenames for tbreak
  518. Revision 1.19 1999/08/31 16:20:37 pierre
  519. * DoContUntilReturn call Step instead of UnitlReturn
  520. Revision 1.18 1999/08/16 18:25:23 peter
  521. * Adjusting the selection when the editor didn't contain any line.
  522. * Reserved word recognition redesigned, but this didn't affect the overall
  523. syntax highlight speed remarkably (at least not on my Amd-K6/350).
  524. The syntax scanner loop is a bit slow but the main problem is the
  525. recognition of special symbols. Switching off symbol processing boosts
  526. the performance up to ca. 200%...
  527. * The editor didn't allow copying (for ex to clipboard) of a single character
  528. * 'File|Save as' caused permanently run-time error 3. Not any more now...
  529. * Compiler Messages window (actually the whole desktop) did not act on any
  530. keypress when compilation failed and thus the window remained visible
  531. + Message windows are now closed upon pressing Esc
  532. + At 'Run' the IDE checks whether any sources are modified, and recompiles
  533. only when neccessary
  534. + BlockRead and BlockWrite (Ctrl+K+R/W) implemented in TCodeEditor
  535. + LineSelect (Ctrl+K+L) implemented
  536. * The IDE had problems closing help windows before saving the desktop
  537. Revision 1.17 1999/07/28 23:11:20 peter
  538. * fixes from gabor
  539. Revision 1.16 1999/07/12 13:14:19 pierre
  540. * LineEnd bug corrected, now goes end of text even if selected
  541. + Until Return for debugger
  542. + Code for Quit inside GDB Window
  543. Revision 1.15 1999/04/07 21:55:50 peter
  544. + object support for browser
  545. * html help fixes
  546. * more desktop saving things
  547. * NODEBUG directive to exclude debugger
  548. Revision 1.14 1999/03/01 15:41:58 peter
  549. + Added dummy entries for functions not yet implemented
  550. * MenuBar didn't update itself automatically on command-set changes
  551. * Fixed Debugging/Profiling options dialog
  552. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  553. set
  554. * efBackSpaceUnindents works correctly
  555. + 'Messages' window implemented
  556. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  557. + Added TP message-filter support (for ex. you can call GREP thru
  558. GREP2MSG and view the result in the messages window - just like in TP)
  559. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  560. so topic search didn't work...
  561. * In FPHELP.PAS there were still context-variables defined as word instead
  562. of THelpCtx
  563. * StdStatusKeys() was missing from the statusdef for help windows
  564. + Topic-title for index-table can be specified when adding a HTML-files
  565. Revision 1.13 1999/02/18 13:44:33 peter
  566. * search fixed
  567. + backward search
  568. * help fixes
  569. * browser updates
  570. Revision 1.12 1999/02/11 19:07:24 pierre
  571. * GDBWindow redesigned :
  572. normal editor apart from
  573. that any kbEnter will send the line (for begin to cursor)
  574. to GDB command !
  575. GDBWindow opened in Debugger Menu
  576. still buggy :
  577. -echo should not be present if at end of text
  578. -GDBWindow becomes First after each step (I don't know why !)
  579. Revision 1.11 1999/02/10 09:51:59 pierre
  580. small cleanup
  581. Revision 1.10 1999/02/08 17:43:45 pierre
  582. * RestDebugger or multiple running of debugged program now works
  583. + added DoContToCursor(F4)
  584. * Breakpoints are now inserted correctly (was mainlyy a problem
  585. of directories)
  586. Revision 1.9 1999/02/05 17:21:53 pierre
  587. Invalid_line renamed InvalidSourceLine
  588. Revision 1.8 1999/02/04 17:56:17 pierre
  589. * Set breakpoint only possible if source window
  590. Revision 1.7 1999/02/04 13:32:07 pierre
  591. * Several things added (I cannot commit them independently !)
  592. + added TBreakpoint and TBreakpointCollection
  593. + added cmResetDebugger,cmGrep,CmToggleBreakpoint
  594. + Breakpoint list in INIFile
  595. * Select items now also depend of SwitchMode
  596. * Reading of option '-g' was not possible !
  597. + added search for -Fu args pathes in TryToOpen
  598. + added code for automatic opening of FileDialog
  599. if source not found
  600. Revision 1.6 1999/01/22 10:24:05 peter
  601. * first debugger things
  602. Revision 1.5 1999/01/21 11:54:20 peter
  603. + tools menu
  604. + speedsearch in symbolbrowser
  605. * working run command
  606. Revision 1.4 1999/01/14 21:42:22 peter
  607. * source tracking from Gabor
  608. Revision 1.3 1999/01/12 14:29:36 peter
  609. + Implemented still missing 'switch' entries in Options menu
  610. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  611. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  612. ASCII chars and inserted directly in the text.
  613. + Added symbol browser
  614. * splitted fp.pas to fpide.pas
  615. Revision 1.2 1999/01/04 11:49:48 peter
  616. * 'Use tab characters' now works correctly
  617. + Syntax highlight now acts on File|Save As...
  618. + Added a new class to syntax highlight: 'hex numbers'.
  619. * There was something very wrong with the palette managment. Now fixed.
  620. + Added output directory (-FE<xxx>) support to 'Directories' dialog...
  621. * Fixed some possible bugs in Running/Compiling, and the compilation/run
  622. process revised
  623. Revision 1.1 1998/12/28 15:47:50 peter
  624. + Added user screen support, display & window
  625. + Implemented Editor,Mouse Options dialog
  626. + Added location of .INI and .CFG file
  627. + Option (INI) file managment implemented (see bottom of Options Menu)
  628. + Switches updated
  629. + Run program
  630. }