fpmrun.inc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679
  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.Parameters;
  246. var R,R2: TRect;
  247. D: PCenterDialog;
  248. IL: PInputLine;
  249. begin
  250. R.Assign(0,0,round(ScreenWidth*54/80),4);
  251. New(D, Init(R, dialog_programparameters));
  252. with D^ do
  253. begin
  254. GetExtent(R); R.Grow(-2,-1); Inc(R.A.Y); R.B.Y:=R.A.Y+1;
  255. R2.Copy(R); R2.A.X:=16; Dec(R2.B.X,4);
  256. New(IL, Init(R2, 255));
  257. IL^.Data^:=GetRunParameters;
  258. Insert(IL);
  259. R2.Copy(R); R2.A.X:=R2.B.X-3; R2.B.X:=R2.A.X+3;
  260. Insert(New(PHistory, Init(R2, IL, hidRunParameters)));
  261. R2.Copy(R); R2.B.X:=16;
  262. Insert(New(PLabel, Init(R2, label_parameters_parameter, IL)));
  263. end;
  264. InsertButtons(D);
  265. IL^.Select;
  266. if Desktop^.ExecView(D)=cmOK then
  267. begin
  268. SetRunParameters(IL^.Data^);
  269. end;
  270. Dispose(D, Done);
  271. end;
  272. procedure TIDEApp.DoResetDebugger;
  273. begin
  274. {$ifndef NODEBUG}
  275. if assigned(Debugger) then
  276. DoneDebugger;
  277. UpdateScreen(true);
  278. {$else NODEBUG}
  279. NoDebugger;
  280. {$endif NODEBUG}
  281. end;
  282. procedure TIDEApp.DoContToCursor;
  283. {$ifndef NODEBUG}
  284. var
  285. W : PFPWindow;
  286. PDL : PDisasLine;
  287. S,FileName : string;
  288. P,CurY,LineNr : longint;
  289. {$endif}
  290. begin
  291. {$ifndef NODEBUG}
  292. if (DeskTop^.Current=nil) or
  293. ((TypeOf(DeskTop^.Current^)<>TypeOf(TSourceWindow)) and
  294. (TypeOf(DeskTop^.Current^)<>TypeOf(TDisassemblyWindow))) then
  295. Begin
  296. ErrorBox(msg_impossibletoreachcursor,nil);
  297. Exit;
  298. End;
  299. If not assigned(Debugger) or Not Debugger^.HasExe then
  300. begin
  301. InitDebugger;
  302. if not assigned(Debugger) then
  303. begin
  304. NoDebugger;
  305. exit;
  306. end;
  307. end;
  308. W:=PFPWindow(DeskTop^.Current);
  309. If assigned(W) then
  310. begin
  311. If TypeOf(W^)=TypeOf(TSourceWindow) then
  312. begin
  313. FileName:=PSourceWindow(W)^.Editor^.FileName;
  314. LineNr:=PSourceWindow(W)^.Editor^.CurPos.Y+1;
  315. Debugger^.Command('tbreak '+GDBFileName(NameAndExtOf(FileName))+':'+IntToStr(LineNr));
  316. Debugger^.Continue;
  317. end
  318. else
  319. begin
  320. CurY:=PDisassemblyWindow(W)^.Editor^.CurPos.Y;
  321. if CurY<PDisassemblyWindow(W)^.Editor^.GetLineCount then
  322. PDL:=PDisasLine(PDisassemblyWindow(W)^.Editor^.GetLine(CurY))
  323. else
  324. PDL:=nil;
  325. if assigned(PDL) then
  326. begin
  327. if PDL^.Address<>0 then
  328. begin
  329. Debugger^.Command('tbreak *0x'+IntToHex(PDL^.Address,8));
  330. end
  331. else
  332. begin
  333. S:=PDisassemblyWindow(W)^.Editor^.GetDisplayText(PDisassemblyWindow(W)^.Editor^.CurPos.Y);
  334. p:=pos(':',S);
  335. FileName:=Copy(S,1,p-1);
  336. S:=Copy(S,p+1,high(S));
  337. p:=pos(' ',S);
  338. S:=Copy(S,1,p-1);
  339. LineNr:=StrToInt(S);
  340. Debugger^.Command('tbreak '+GDBFileName(NameAndExtOf(FileName))+':'+IntToStr(LineNr));
  341. end;
  342. Debugger^.Continue;
  343. end;
  344. end;
  345. end;
  346. {$else NODEBUG}
  347. NoDebugger;
  348. {$endif NODEBUG}
  349. end;
  350. procedure TIDEApp.DoOpenGDBWindow;
  351. begin
  352. {$ifndef NODEBUG}
  353. InitGDBWindow;
  354. if not assigned(Debugger) then
  355. begin
  356. new(Debugger,Init);
  357. if assigned(Debugger) then
  358. Debugger^.SetExe(ExeFile);
  359. end;
  360. If assigned(GDBWindow) then
  361. GDBWindow^.MakeFirst;
  362. {$else NODEBUG}
  363. NoDebugger;
  364. {$endif NODEBUG}
  365. end;
  366. procedure TIDEApp.DoToggleBreak;
  367. {$ifndef NODEBUG}
  368. var
  369. W : PSourceWindow;
  370. WD : PDisassemblyWindow;
  371. PDL : PDisasLine;
  372. PB : PBreakpoint;
  373. S,FileName : string;
  374. b : boolean;
  375. CurY,P,LineNr : longint;
  376. {$endif}
  377. begin
  378. {$ifndef NODEBUG}
  379. if (DeskTop^.Current=nil) or
  380. (TypeOf(DeskTop^.Current^)<>TypeOf(TSourceWindow)) and
  381. (TypeOf(DeskTop^.Current^)<>TypeOf(TDisassemblyWindow)) then
  382. Begin
  383. ErrorBox(msg_impossibletosetbreakpoint,nil);
  384. Exit;
  385. End;
  386. if assigned (DeskTop^.Current) and
  387. (TypeOf(DeskTop^.Current^)=TypeOf(TSourceWindow)) then
  388. begin
  389. W:=PSourceWindow(DeskTop^.Current);
  390. FileName:=W^.Editor^.FileName;
  391. LineNr:=W^.Editor^.CurPos.Y+1;
  392. BreakpointsCollection^.ToggleFileLine(FileName,LineNr);
  393. end
  394. else if assigned (DeskTop^.Current) and
  395. (TypeOf(DeskTop^.Current^)=TypeOf(TDisassemblyWindow)) then
  396. begin
  397. WD:=PDisassemblyWindow(DeskTop^.Current);
  398. CurY:=WD^.Editor^.CurPos.Y;
  399. if CurY<WD^.Editor^.GetLineCount then
  400. PDL:=PDisasLine(WD^.Editor^.GetLine(CurY))
  401. else
  402. PDL:=nil;
  403. if assigned(PDL) then
  404. begin
  405. if PDL^.Address<>0 then
  406. begin
  407. PB:=New(PBreakpoint,init_address(IntToHex(PDL^.Address,8)));
  408. BreakpointsCollection^.Insert(PB);
  409. WD^.Editor^.SetLineFlagState(CurY,lfBreakpoint,true);
  410. end
  411. else
  412. begin
  413. S:=WD^.Editor^.GetDisplayText(WD^.Editor^.CurPos.Y);
  414. p:=pos(':',S);
  415. FileName:=Copy(S,1,p-1);
  416. S:=Copy(S,p+1,high(S));
  417. p:=pos(' ',S);
  418. S:=Copy(S,1,p-1);
  419. LineNr:=StrToInt(S);
  420. b:=BreakpointsCollection^.ToggleFileLine(FileName,LineNr);
  421. WD^.Editor^.SetLineFlagState(CurY,lfBreakpoint,b);
  422. end;
  423. end;
  424. end;
  425. {$else NODEBUG}
  426. NoDebugger;
  427. {$endif NODEBUG}
  428. end;
  429. {
  430. $Log$
  431. Revision 1.2 2001-11-07 00:28:53 pierre
  432. + Disassembly window made public
  433. Revision 1.1 2001/08/04 11:30:23 peter
  434. * ide works now with both compiler versions
  435. Revision 1.1.2.13 2001/03/12 17:34:55 pierre
  436. + Disassembly window started
  437. Revision 1.1.2.12 2001/03/06 21:47:59 pierre
  438. * avoid restart of debugger when opening GDB Window
  439. Revision 1.1.2.11 2001/02/19 10:40:50 pierre
  440. * Check for changed files after Running tool or shell
  441. Revision 1.1.2.10 2001/02/13 16:04:01 pierre
  442. * fixes for bugs 1280
  443. Revision 1.1.2.9 2000/12/30 22:52:27 peter
  444. * check modified while in debug mode. But placed it between a
  445. conditional again as it reports also if the file was already modified
  446. before the first compile.
  447. * remove unsaved file checks when compiling without primary file so it
  448. works the same as with a primary file set.
  449. Revision 1.1.2.8 2000/12/13 16:59:09 pierre
  450. * ErrFile filed added to DoExecute method
  451. Revision 1.1.2.7 2000/12/08 15:04:27 pierre
  452. * fix stupid error in DoRun
  453. Revision 1.1.2.6 2000/11/27 17:41:46 pierre
  454. * better GDB window opening if nothing compiled yet
  455. Revision 1.1.2.5 2000/11/19 00:23:33 pierre
  456. Task 23: nicer error message when trying to run unit or library
  457. Revision 1.1.2.4 2000/11/16 23:06:31 pierre
  458. * correct handling of Compile/Make if primary file is set
  459. Revision 1.1.2.3 2000/11/03 13:29:59 pierre
  460. Start GDB if opening GDB window
  461. Revision 1.1.2.2 2000/10/18 21:53:27 pierre
  462. * several Gabor fixes
  463. Revision 1.1.2.1 2000/10/09 16:28:25 pierre
  464. * several linux enhancements
  465. Revision 1.1 2000/07/13 09:48:35 michael
  466. + Initial import
  467. Revision 1.32 2000/05/02 08:42:28 pierre
  468. * new set of Gabor changes: see fixes.txt
  469. Revision 1.31 2000/04/18 11:42:37 pierre
  470. lot of Gabor changes : see fixes.txt
  471. Revision 1.30 2000/03/21 23:27:35 pierre
  472. Gabor fixes to avoid unused vars
  473. Revision 1.29 2000/03/08 16:58:12 pierre
  474. Uses Debugger^.IsRunning
  475. Revision 1.28 2000/02/04 00:15:31 pierre
  476. * adapted to change in fpdebug unit
  477. Revision 1.27 2000/02/02 22:48:25 pierre
  478. * Use desktop^.current instead of desktop^.first
  479. * Avoid stopping at main if debugger started with CrtlF9
  480. Revision 1.26 2000/01/31 16:02:08 pierre
  481. * avoid the Impossible to set breakpoints here
  482. Revision 1.25 2000/01/28 22:38:21 pierre
  483. * CrtlF9 starts debugger if there are active breakpoints
  484. Revision 1.24 2000/01/10 13:23:28 pierre
  485. * Debugger test missing in ContTo
  486. Revision 1.23 1999/12/10 13:01:01 pierre
  487. * do not recompile a program inside Debugging session
  488. Revision 1.22 1999/11/10 17:17:02 pierre
  489. + Information box if exit code <> 0 or DosError
  490. Revision 1.21 1999/09/16 14:34:59 pierre
  491. + TBreakpoint and TWatch registering
  492. + WatchesCollection and BreakpointsCollection stored in desk file
  493. * Syntax highlighting was broken
  494. Revision 1.20 1999/09/09 14:11:56 pierre
  495. * GDB needs lowercase filenames for tbreak
  496. Revision 1.19 1999/08/31 16:20:37 pierre
  497. * DoContUntilReturn call Step instead of UnitlReturn
  498. Revision 1.18 1999/08/16 18:25:23 peter
  499. * Adjusting the selection when the editor didn't contain any line.
  500. * Reserved word recognition redesigned, but this didn't affect the overall
  501. syntax highlight speed remarkably (at least not on my Amd-K6/350).
  502. The syntax scanner loop is a bit slow but the main problem is the
  503. recognition of special symbols. Switching off symbol processing boosts
  504. the performance up to ca. 200%...
  505. * The editor didn't allow copying (for ex to clipboard) of a single character
  506. * 'File|Save as' caused permanently run-time error 3. Not any more now...
  507. * Compiler Messages window (actually the whole desktop) did not act on any
  508. keypress when compilation failed and thus the window remained visible
  509. + Message windows are now closed upon pressing Esc
  510. + At 'Run' the IDE checks whether any sources are modified, and recompiles
  511. only when neccessary
  512. + BlockRead and BlockWrite (Ctrl+K+R/W) implemented in TCodeEditor
  513. + LineSelect (Ctrl+K+L) implemented
  514. * The IDE had problems closing help windows before saving the desktop
  515. Revision 1.17 1999/07/28 23:11:20 peter
  516. * fixes from gabor
  517. Revision 1.16 1999/07/12 13:14:19 pierre
  518. * LineEnd bug corrected, now goes end of text even if selected
  519. + Until Return for debugger
  520. + Code for Quit inside GDB Window
  521. Revision 1.15 1999/04/07 21:55:50 peter
  522. + object support for browser
  523. * html help fixes
  524. * more desktop saving things
  525. * NODEBUG directive to exclude debugger
  526. Revision 1.14 1999/03/01 15:41:58 peter
  527. + Added dummy entries for functions not yet implemented
  528. * MenuBar didn't update itself automatically on command-set changes
  529. * Fixed Debugging/Profiling options dialog
  530. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  531. set
  532. * efBackSpaceUnindents works correctly
  533. + 'Messages' window implemented
  534. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  535. + Added TP message-filter support (for ex. you can call GREP thru
  536. GREP2MSG and view the result in the messages window - just like in TP)
  537. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  538. so topic search didn't work...
  539. * In FPHELP.PAS there were still context-variables defined as word instead
  540. of THelpCtx
  541. * StdStatusKeys() was missing from the statusdef for help windows
  542. + Topic-title for index-table can be specified when adding a HTML-files
  543. Revision 1.13 1999/02/18 13:44:33 peter
  544. * search fixed
  545. + backward search
  546. * help fixes
  547. * browser updates
  548. Revision 1.12 1999/02/11 19:07:24 pierre
  549. * GDBWindow redesigned :
  550. normal editor apart from
  551. that any kbEnter will send the line (for begin to cursor)
  552. to GDB command !
  553. GDBWindow opened in Debugger Menu
  554. still buggy :
  555. -echo should not be present if at end of text
  556. -GDBWindow becomes First after each step (I don't know why !)
  557. Revision 1.11 1999/02/10 09:51:59 pierre
  558. small cleanup
  559. Revision 1.10 1999/02/08 17:43:45 pierre
  560. * RestDebugger or multiple running of debugged program now works
  561. + added DoContToCursor(F4)
  562. * Breakpoints are now inserted correctly (was mainlyy a problem
  563. of directories)
  564. Revision 1.9 1999/02/05 17:21:53 pierre
  565. Invalid_line renamed InvalidSourceLine
  566. Revision 1.8 1999/02/04 17:56:17 pierre
  567. * Set breakpoint only possible if source window
  568. Revision 1.7 1999/02/04 13:32:07 pierre
  569. * Several things added (I cannot commit them independently !)
  570. + added TBreakpoint and TBreakpointCollection
  571. + added cmResetDebugger,cmGrep,CmToggleBreakpoint
  572. + Breakpoint list in INIFile
  573. * Select items now also depend of SwitchMode
  574. * Reading of option '-g' was not possible !
  575. + added search for -Fu args pathes in TryToOpen
  576. + added code for automatic opening of FileDialog
  577. if source not found
  578. Revision 1.6 1999/01/22 10:24:05 peter
  579. * first debugger things
  580. Revision 1.5 1999/01/21 11:54:20 peter
  581. + tools menu
  582. + speedsearch in symbolbrowser
  583. * working run command
  584. Revision 1.4 1999/01/14 21:42:22 peter
  585. * source tracking from Gabor
  586. Revision 1.3 1999/01/12 14:29:36 peter
  587. + Implemented still missing 'switch' entries in Options menu
  588. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  589. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  590. ASCII chars and inserted directly in the text.
  591. + Added symbol browser
  592. * splitted fp.pas to fpide.pas
  593. Revision 1.2 1999/01/04 11:49:48 peter
  594. * 'Use tab characters' now works correctly
  595. + Syntax highlight now acts on File|Save As...
  596. + Added a new class to syntax highlight: 'hex numbers'.
  597. * There was something very wrong with the palette managment. Now fixed.
  598. + Added output directory (-FE<xxx>) support to 'Directories' dialog...
  599. * Fixed some possible bugs in Running/Compiling, and the compilation/run
  600. process revised
  601. Revision 1.1 1998/12/28 15:47:50 peter
  602. + Added user screen support, display & window
  603. + Implemented Editor,Mouse Options dialog
  604. + Added location of .INI and .CFG file
  605. + Option (INI) file managment implemented (see bottom of Options Menu)
  606. + Switches updated
  607. + Run program
  608. }