fpide.pas 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064
  1. {
  2. $Id$
  3. This file is part of the Free Pascal Integrated Development Environment
  4. Copyright (c) 1998 by Berczi Gabor
  5. Main IDEApp object
  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. unit fpide;
  13. interface
  14. uses
  15. Objects,Drivers,Views,App,Gadgets,MsgBox,
  16. {$ifdef EDITORS}Editors,{$else}WEditor,{$endif}
  17. Comphook,Browcol,
  18. FPViews,FPSymbol;
  19. type
  20. TExecType = (exNormal,exNoSwap,exDosShell);
  21. TIDEApp = object(TApplication)
  22. constructor Init;
  23. procedure InitDesktop; virtual;
  24. procedure InitMenuBar; virtual;
  25. procedure InitStatusLine; virtual;
  26. procedure Open(FileName: string);
  27. function OpenSearch(FileName: string) : boolean;
  28. function SaveAll: boolean;
  29. function AutoSave: boolean;
  30. procedure Idle; virtual;
  31. procedure Update;
  32. procedure UpdateTarget;
  33. procedure GetEvent(var Event: TEvent); virtual;
  34. procedure HandleEvent(var Event: TEvent); virtual;
  35. procedure GetTileRect(var R: TRect); virtual;
  36. function GetPalette: PPalette; virtual;
  37. procedure DosShell; virtual;
  38. destructor Done; virtual;
  39. public
  40. procedure ShowUserScreen;
  41. procedure ShowIDEScreen;
  42. private
  43. procedure NewEditor;
  44. procedure NewFromTemplate;
  45. procedure OpenRecentFile(RecentIndex: integer);
  46. procedure ChangeDir;
  47. procedure ShowClipboard;
  48. procedure FindProcedure;
  49. procedure Objects;
  50. procedure Modules;
  51. procedure Globals;
  52. procedure SearchSymbol;
  53. procedure Parameters;
  54. procedure DoStepOver;
  55. procedure DoTraceInto;
  56. procedure DoRun;
  57. procedure DoResetDebugger;
  58. procedure DoContToCursor;
  59. procedure DoContUntilReturn;
  60. procedure Target;
  61. procedure DoCompilerMessages;
  62. procedure DoPrimaryFile;
  63. procedure DoClearPrimary;
  64. procedure DoUserScreenWindow;
  65. procedure DoUserScreen;
  66. procedure DoOpenGDBWindow;
  67. procedure DoToggleBreak;
  68. procedure DoShowCallStack;
  69. procedure DoShowBreakpointList;
  70. procedure DoShowWatches;
  71. procedure DoAddWatch;
  72. procedure DoInformation;
  73. procedure Messages;
  74. procedure Calculator;
  75. procedure DoAsciiTable;
  76. procedure ExecuteTool(Idx: integer);
  77. procedure SetSwitchesMode;
  78. procedure DoCompilerSwitch;
  79. procedure MemorySizes;
  80. procedure DoLinkerSwitch;
  81. procedure DoDebuggerSwitch;
  82. procedure Directories;
  83. procedure Tools;
  84. procedure DoGrep;
  85. procedure Preferences;
  86. procedure EditorOptions(Editor: PEditor);
  87. procedure BrowserOptions(Browser: PBrowserWindow);
  88. procedure DesktopOptions;
  89. procedure Mouse;
  90. procedure StartUp;
  91. procedure Colors;
  92. procedure OpenINI;
  93. procedure SaveINI;
  94. procedure SaveAsINI;
  95. procedure CloseAll;
  96. procedure WindowList;
  97. procedure HelpContents;
  98. procedure HelpHelpIndex;
  99. procedure HelpTopicSearch;
  100. procedure HelpPrevTopic;
  101. procedure HelpUsingHelp;
  102. procedure HelpFiles;
  103. procedure About;
  104. private
  105. function DoExecute(ProgramPath, Params, InFile, OutFile: string; ExecType: TExecType): boolean;
  106. private
  107. procedure AddRecentFile(AFileName: string; CurX, CurY: integer);
  108. function SearchRecentFile(AFileName: string): integer;
  109. procedure RemoveRecentFile(Index: integer);
  110. private
  111. SaveCancelled: boolean;
  112. LastEvent: longint;
  113. procedure CurDirChanged;
  114. procedure UpdatePrimaryFile;
  115. procedure UpdateINIFile;
  116. procedure UpdateRecentFileList;
  117. procedure UpdateTools;
  118. end;
  119. var
  120. MyApp: TIDEApp;
  121. implementation
  122. uses
  123. {$ifdef linux}
  124. linux,
  125. {$endif}
  126. {$ifdef go32v2}
  127. WinClip,
  128. {$endif go32v2}
  129. Video,Mouse,Keyboard,
  130. Dos,Memory,Menus,Dialogs,StdDlg,ColorSel,Commands,HelpCtx,
  131. AsciiTab,
  132. Systems,
  133. WUtils,WHelp,WHlpView,WINI,WViews,
  134. FPConst,FPVars,FPUtils,FPSwitch,FPIni,FPIntf,FPCompile,FPHelp,
  135. FPTemplt,FPCalc,FPUsrScr,FPTools,{$ifndef NODEBUG}FPDebug,{$endif}FPRedir,
  136. FPDesk;
  137. function IDEUseSyntaxHighlight(Editor: PFileEditor): boolean; {$ifndef FPC}far;{$endif}
  138. begin
  139. IDEUseSyntaxHighlight:=(Editor^.FileName='') or MatchesFileList(NameAndExtOf(Editor^.FileName),HighlightExts);
  140. end;
  141. function IDEUseTabsPattern(Editor: PFileEditor): boolean; {$ifndef FPC}far;{$endif}
  142. begin
  143. IDEUseTabsPattern:=(Editor^.FileName='') or MatchesFileList(NameAndExtOf(Editor^.FileName),TabsPattern);
  144. end;
  145. constructor TIDEApp.Init;
  146. var R: TRect;
  147. begin
  148. {$ifndef EDITORS}
  149. {$ifdef TP}
  150. UseSyntaxHighlight:=IDEUseSyntaxHighlight;
  151. UseTabsPattern:=IDEUseTabsPattern;
  152. {$else TP}
  153. UseSyntaxHighlight:=@IDEUseSyntaxHighlight;
  154. UseTabsPattern:=@IDEUseTabsPattern;
  155. {$endif TP}
  156. {$endif}
  157. inherited Init;
  158. New(ClipboardWindow, Init);
  159. Desktop^.Insert(ClipboardWindow);
  160. New(CalcWindow, Init); CalcWindow^.Hide;
  161. Desktop^.Insert(CalcWindow);
  162. {$ifndef OLDCOMP}
  163. New(CompilerMessageWindow, Init);
  164. CompilerMessageWindow^.Hide;
  165. Desktop^.Insert(CompilerMessageWindow);
  166. {$else}
  167. New(ProgramInfoWindow, Init);
  168. ProgramInfoWindow^.Hide;
  169. Desktop^.Insert(ProgramInfoWindow);
  170. {$endif}
  171. Message(@Self,evBroadcast,cmUpdate,nil);
  172. CurDirChanged;
  173. { heap viewer }
  174. GetExtent(R); Dec(R.B.X); R.A.X:=R.B.X-9; R.A.Y:=R.B.Y-1;
  175. New(HeapView, InitKb(R));
  176. Insert(HeapView);
  177. end;
  178. procedure TIDEApp.InitDesktop;
  179. var
  180. R: TRect;
  181. begin
  182. GetExtent(R);
  183. Inc(R.A.Y);
  184. Dec(R.B.Y);
  185. Desktop:=New(PFPDesktop, Init(R));
  186. end;
  187. procedure TIDEApp.InitMenuBar;
  188. var R: TRect;
  189. WinPMI : PMenuItem;
  190. begin
  191. GetExtent(R); R.B.Y:=R.A.Y+1;
  192. WinPMI:=nil;
  193. {$ifdef go32v2}
  194. if WinClipboardSupported then
  195. WinPMI:=NewLine(
  196. NewItem('Cop~y~ to Windows','', kbNoKey, cmCopyWin, hcCopyWin,
  197. NewItem('Paste from ~W~indows','', kbNoKey, cmPasteWin, hcPasteWin,
  198. nil)));
  199. {$endif go32v2}
  200. MenuBar:=New(PAdvancedMenuBar, Init(R, NewMenu(
  201. NewSubMenu('~F~ile',hcFileMenu, NewMenu(
  202. NewItem('~N~ew','',kbNoKey,cmNew,hcNew,
  203. NewItem('New from ~t~emplate...','',kbNoKey,cmNewFromTemplate,hcNewFromTemplate,
  204. NewItem('~O~pen...','F3',kbF3,cmOpen,hcOpen,
  205. NewItem('~S~ave','F2',kbF2,cmSave,hcSave,
  206. NewItem('Save ~a~s...','',kbNoKey,cmSaveAs,hcSaveAs,
  207. NewItem('Save a~l~l','',kbNoKey,cmSaveAll,hcSaveAll,
  208. NewLine(
  209. NewItem('~C~hange dir...','',kbNoKey,cmChangeDir,hcChangeDir,
  210. NewItem('~D~OS shell','',kbNoKey,cmDOSShell,hcDOSShell,
  211. NewItem('E~x~it','Alt+X',kbNoKey,cmQuit,hcQuit,
  212. nil))))))))))),
  213. NewSubMenu('~E~dit',hcEditMenu, NewMenu(
  214. NewItem('~U~ndo','Alt+BkSp', kbAltBack, cmUndo, hcUndo,
  215. NewItem('~R~edo','', kbNoKey, cmRedo, hcRedo,
  216. NewLine(
  217. NewItem('Cu~t~','Shift+Del', kbShiftDel, cmCut, hcCut,
  218. NewItem('~C~opy','Ctrl+Ins', kbCtrlIns, cmCopy, hcCut,
  219. NewItem('~P~aste','Shift+Ins', kbShiftIns, cmPaste, hcPaste,
  220. NewItem('C~l~ear','Ctrl+Del', kbCtrlDel, cmClear, hcClear,
  221. NewLine(
  222. NewItem('~S~how clipboard','', kbNoKey, cmShowClipboard, hcShowClipboard,
  223. WinPMI)))))))))),
  224. NewSubMenu('~S~earch',hcSearchMenu, NewMenu(
  225. NewItem('~F~ind...','', kbNoKey, cmFind, hcFind,
  226. NewItem('~R~eplace...','', kbNoKey, cmReplace, hcReplace,
  227. NewItem('~S~earch again','', kbNoKey, cmSearchAgain, hcSearchAgain,
  228. NewLine(
  229. NewItem('~G~o to line number...','', kbNoKey, cmJumpLine, hcGotoLine,
  230. NewItem('Find ~p~rocedure...','', kbNoKey, cmFindProcedure, hcFindProcedure,
  231. NewLine(
  232. NewItem('~O~bjects','', kbNoKey, cmObjects, hcObjects,
  233. NewItem('Mod~u~les','', kbNoKey, cmModules, hcModules,
  234. NewItem('G~l~obals','', kbNoKey, cmGlobals, hcGlobals,
  235. NewLine(
  236. NewItem('S~y~mbol','', kbNoKey, cmSymbol, hcSymbol,
  237. nil))))))))))))),
  238. NewSubMenu('~R~un',hcRunMenu, NewMenu(
  239. NewItem('~R~un','Ctrl+F9', kbCtrlF9, cmRun, hcRun,
  240. NewItem('~S~tep over','F8', kbF8, cmStepOver, hcRun,
  241. NewItem('~T~race into','F7', kbF7, cmTraceInto, hcRun,
  242. NewItem('~G~oto Cursor','F4', kbF4, cmContToCursor, hcContToCursor,
  243. NewItem('~U~ntil return','', kbNoKey,cmUntilReturn,hcUntilReturn,
  244. NewItem('P~a~rameters...','', kbNoKey, cmParameters, hcParameters,
  245. NewItem('~P~rogram reset','Ctrl+F2', kbCtrlF2, cmResetDebugger, hcResetDebugger,
  246. nil)))))))),
  247. NewSubMenu('~C~ompile',hcCompileMenu, NewMenu(
  248. NewItem('~C~ompile','Alt+F9', kbAltF9, cmCompile, hcCompile,
  249. NewItem('~M~ake','F9', kbF9, cmMake, hcMake,
  250. NewItem('~B~uild','', kbNoKey, cmBuild, hcBuild,
  251. NewLine(
  252. NewItem('~T~arget...','', kbNoKey, cmTarget, hcTarget,
  253. NewItem('~P~rimary file...','', kbNoKey, cmPrimaryFile, hcPrimaryFile,
  254. NewItem('C~l~ear primary file','', kbNoKey, cmClearPrimary, hcClearPrimary,
  255. NewLine(
  256. NewItem('~I~nformation...','', kbNoKey, cmInformation, hcInformation,
  257. NewItem('C~o~mpiler messages','F12', kbF12, cmCompilerMessages, hcCompilerMessages,
  258. nil))))))))))),
  259. NewSubMenu('~D~ebug', hcDebugMenu, NewMenu(
  260. NewItem('~O~utput','', kbNoKey, cmUserScreenWindow, hcUserScreenWindow,
  261. NewItem('~U~ser screen','Alt+F5', kbAltF5, cmUserScreen, hcUserScreen,
  262. NewItem('~B~reakpoint','Ctrl+F8', kbCtrlF8, cmToggleBreakpoint, hcToggleBreakpoint,
  263. NewItem('~C~all stack','Ctrl+F3', kbCtrlF3, cmStack, hcStack,
  264. NewItem('~A~dd Watch','Ctrl+F7', kbCtrlF7, cmAddWatch, hcAddWatch,
  265. NewItem('~W~atches','', kbNoKey, cmWatches, hcWatches,
  266. NewItem('Breakpoint ~L~ist','', kbNoKey, cmBreakpointList, hcBreakpointList,
  267. NewLine(
  268. NewItem('~G~DB window','', kbNoKey, cmOpenGDBWindow, hcOpenGDBWindow,
  269. nil)))))))))),
  270. NewSubMenu('~T~ools', hcToolsMenu, NewMenu(
  271. NewItem('~M~essages', 'F11', kbF11, cmToolsMessages, hcToolsMessages,
  272. NewItem('Goto ~n~ext','Alt+F8', kbAltF8, cmToolsMsgNext, hcToolsMsgNext,
  273. NewItem('Goto ~p~revious','Alt+F7', kbAltF7, cmToolsMsgPrev, hcToolsMsgPrev,
  274. NewLine(
  275. NewItem('~G~rep', 'Shift+F2', kbShiftF2, cmGrep, hcGrep,
  276. NewItem('~C~alculator', '', kbNoKey, cmCalculator, hcCalculator,
  277. NewItem('Ascii ~t~able', '', kbNoKey, cmAsciiTable, hcAsciiTable,
  278. nil)))))))),
  279. NewSubMenu('~O~ptions', hcOptionsMenu, NewMenu(
  280. NewItem('Mode~.~..','', kbNoKey, cmSwitchesMode, hcSwitchesMode,
  281. NewItem('~C~ompiler...','', kbNoKey, cmCompiler, hcCompiler,
  282. NewItem('~M~emory sizes...','', kbNoKey, cmMemorySizes, hcMemorySizes,
  283. NewItem('~L~inker...','', kbNoKey, cmLinker, hcLinker,
  284. NewItem('De~b~ugger...','', kbNoKey, cmDebugger, hcDebugger,
  285. NewItem('~D~irectories...','', kbNoKey, cmDirectories, hcDirectories,
  286. NewItem('Bro~w~ser...','',kbNoKey, cmBrowser, hcBrowser,
  287. NewItem('~T~ools...','', kbNoKey, cmTools, hcTools,
  288. NewLine(
  289. NewSubMenu('~E~nvironment', hcEnvironmentMenu, NewMenu(
  290. NewItem('~P~references...','', kbNoKey, cmPreferences, hcPreferences,
  291. NewItem('~E~ditor...','', kbNoKey, cmEditor, hcEditor,
  292. NewItem('~D~esktop...','', kbNoKey, cmDesktopOptions, hcDesktopOptions,
  293. NewItem('~M~ouse...','', kbNoKey, cmMouse, hcMouse,
  294. NewItem('~S~tartup...','', kbNoKey, cmStartup, hcStartup,
  295. NewItem('~C~olors...','', kbNoKey, cmColors, hcColors,
  296. nil))))))),
  297. NewLine(
  298. NewItem('~O~pen...','', kbNoKey, cmOpenINI, hcOpenINI,
  299. NewItem('~S~ave','', kbNoKey, cmSaveINI, hcSaveINI,
  300. NewItem('Save ~a~s...','', kbNoKey, cmSaveAsINI, hcSaveAsINI,
  301. nil))))))))))))))),
  302. NewSubMenu('~W~indow', hcWindowMenu, NewMenu(
  303. NewItem('~T~ile','', kbNoKey, cmTile, hcTile,
  304. NewItem('C~a~scade','', kbNoKey, cmCascade, hcCascade,
  305. NewItem('Cl~o~se all','', kbNoKey, cmCloseAll, hcCloseAll,
  306. NewLine(
  307. NewItem('~S~ize/Move','Ctrl+F5', kbCtrlF5, cmResize, hcResize,
  308. NewItem('~Z~oom','F5', kbF5, cmZoom, hcZoom,
  309. NewItem('~N~ext','F6', kbF6, cmNext, hcNext,
  310. NewItem('~P~revious','Shift+F6', kbShiftF6, cmPrev, hcPrev,
  311. NewItem('~C~lose','Alt+F3', kbAltF3, cmClose, hcClose,
  312. NewLine(
  313. NewItem('~L~ist...','Alt+0', kbAlt0, cmWindowList, hcWindowList,
  314. NewItem('~R~efresh display','', kbNoKey, cmUpdate, hcUpdate,
  315. nil))))))))))))),
  316. NewSubMenu('~H~elp', hcHelpMenu, NewMenu(
  317. NewItem('~C~ontents','', kbNoKey, cmHelpContents, hcHelpContents,
  318. NewItem('~I~ndex','Shift+F1', kbShiftF1, cmHelpIndex, hcHelpIndex,
  319. NewItem('~T~opic search','Ctrl+F1', kbCtrlF1, cmHelpTopicSearch, hcHelpTopicSearch,
  320. NewItem('~P~revious topic','Alt+F1', kbAltF1, cmHelpPrevTopic, hcHelpPrevTopic,
  321. NewItem('~U~sing help','',kbNoKey, cmHelpUsingHelp, hcHelpUsingHelp,
  322. NewItem('~F~iles...','',kbNoKey, cmHelpFiles, hcHelpFiles,
  323. NewLine(
  324. NewItem('~A~bout...','',kbNoKey, cmAbout, hcAbout,
  325. nil))))))))),
  326. nil)))))))))))));
  327. DisableCommands(EditorCmds+SourceCmds+CompileCmds);
  328. Update;
  329. end;
  330. procedure TIDEApp.InitStatusLine;
  331. var
  332. R: TRect;
  333. begin
  334. GetExtent(R);
  335. R.A.Y := R.B.Y - 1;
  336. StatusLine:=New(PIDEStatusLine, Init(R,
  337. NewStatusDef(hcFirstCommand, hcLastCommand,
  338. NewStatusKey('~F1~ Help', kbF1, cmHelp,
  339. StdStatusKeys(
  340. nil)),
  341. NewStatusDef(hcHelpWindow, hcHelpWindow,
  342. NewStatusKey('~F1~ Help on help', kbF1, cmHelpUsingHelp,
  343. NewStatusKey('~Alt+F1~ Previous topic', kbAltF1, cmHelpPrevTopic,
  344. NewStatusKey('~Shift+F1~ Help index', kbShiftF1, cmHelpIndex,
  345. NewStatusKey('~Esc~ Close help', kbEsc, cmClose,
  346. StdStatusKeys(
  347. nil))))),
  348. NewStatusDef(hcSourceWindow, hcSourceWindow,
  349. NewStatusKey('~F1~ Help', kbF1, cmHelp,
  350. NewStatusKey('~F2~ Save', kbF2, cmSave,
  351. NewStatusKey('~F3~ Open', kbF3, cmOpen,
  352. NewStatusKey('~Alt+F9~ Compile', kbAltF9, cmCompile,
  353. NewStatusKey('~F9~ Make', kbF9, cmMake,
  354. NewStatusKey('~Alt+F10~ Local menu', kbAltF10, cmLocalMenu,
  355. StdStatusKeys(
  356. nil))))))),
  357. NewStatusDef(hcMessagesWindow, hcMessagesWindow,
  358. NewStatusKey('~F1~ Help', kbF1, cmHelp,
  359. NewStatusKey('~'+EnterSign+'~ Goto source', kbEnter, cmMsgGotoSource,
  360. NewStatusKey('~Space~ Track source', kbNoKey, cmMsgTrackSource,
  361. NewStatusKey('~Alt+F10~ Local menu', kbAltF10, cmLocalMenu,
  362. NewStatusKey('', kbEsc, cmClose,
  363. StdStatusKeys(
  364. nil)))))),
  365. NewStatusDef(hcCalcWindow, hcCalcWindow,
  366. NewStatusKey('~F1~ Help', kbF1, cmHelp,
  367. NewStatusKey('~Esc~ Close', kbEsc, cmClose,
  368. NewStatusKey('~Ctrl+Enter~ Transfer result', kbCtrlEnter, cmCalculatorPaste,
  369. StdStatusKeys(
  370. nil)))),
  371. NewStatusDef(0, $FFFF,
  372. NewStatusKey('~F1~ Help', kbF1, cmHelp,
  373. NewStatusKey('~F3~ Open', kbF3, cmOpen,
  374. NewStatusKey('~Alt+F9~ Compile', kbAltF9, cmCompile,
  375. NewStatusKey('~F9~ Make', kbF9, cmMake,
  376. NewStatusKey('~Alt+F10~ Local menu', kbAltF10, cmLocalMenu,
  377. StdStatusKeys(
  378. nil)))))),
  379. nil))))))));
  380. end;
  381. procedure TIDEApp.Idle;
  382. begin
  383. inherited Idle;
  384. Message(Application,evIdle,0,nil);
  385. end;
  386. procedure TIDEApp.GetEvent(var Event: TEvent);
  387. begin
  388. inherited GetEvent(Event);
  389. if Event.What<>evNothing then
  390. LastEvent:=GetDosTicks
  391. else
  392. if abs(GetDosTicks-LastEvent)>SleepTimeOut then
  393. GiveUpTimeSlice;
  394. end;
  395. procedure TIDEApp.HandleEvent(var Event: TEvent);
  396. var DontClear: boolean;
  397. begin
  398. case Event.What of
  399. evCommand :
  400. begin
  401. DontClear:=false;
  402. case Event.Command of
  403. cmUpdate : Message(Application,evBroadcast,cmUpdate,nil);
  404. { -- File menu -- }
  405. cmNew : NewEditor;
  406. cmNewFromTemplate: NewFromTemplate;
  407. cmOpen : begin
  408. if (DirOf(OpenFileName)='') or (Pos(ListSeparator,OpenFileName)<>0) then
  409. OpenFileName:=LocateFile(OpenFileName);
  410. Open(OpenFileName);
  411. OpenFileName:='';
  412. end;
  413. cmSaveAll : SaveAll;
  414. cmChangeDir : ChangeDir;
  415. cmDOSShell : DOSShell;
  416. cmRecentFileBase..
  417. cmRecentFileBase+10
  418. : OpenRecentFile(Event.Command-cmRecentFileBase);
  419. { -- Edit menu -- }
  420. cmShowClipboard : ShowClipboard;
  421. { -- Search menu -- }
  422. cmFindProcedure : FindProcedure;
  423. cmObjects : Objects;
  424. cmModules : Modules;
  425. cmGlobals : Globals;
  426. cmSymbol : SearchSymbol;
  427. { -- Run menu -- }
  428. cmParameters : Parameters;
  429. cmStepOver : DoStepOver;
  430. cmTraceInto : DoTraceInto;
  431. cmRun : DoRun;
  432. cmResetDebugger : DoResetDebugger;
  433. cmContToCursor : DoContToCursor;
  434. cmUntilReturn : DoContUntilReturn;
  435. { -- Compile menu -- }
  436. cmCompile : DoCompile(cCompile);
  437. cmBuild : DoCompile(cBuild);
  438. cmMake : DoCompile(cMake);
  439. cmTarget : Target;
  440. cmPrimaryFile : DoPrimaryFile;
  441. cmClearPrimary : DoClearPrimary;
  442. cmInformation : DoInformation;
  443. cmCompilerMessages : DoCompilerMessages;
  444. { -- Debug menu -- }
  445. cmUserScreen : DoUserScreen;
  446. cmToggleBreakpoint : DoToggleBreak;
  447. cmStack : DoShowCallStack;
  448. cmBreakpointList : DoShowBreakpointList;
  449. cmWatches : DoShowWatches;
  450. cmAddWatch : DoAddWatch;
  451. cmOpenGDBWindow : DoOpenGDBWindow;
  452. { -- Options menu -- }
  453. cmSwitchesMode : SetSwitchesMode;
  454. cmCompiler : DoCompilerSwitch;
  455. cmMemorySizes : MemorySizes;
  456. cmLinker : DoLinkerSwitch;
  457. cmDebugger : DoDebuggerSwitch;
  458. cmDirectories : Directories;
  459. cmTools : Tools;
  460. cmPreferences : Preferences;
  461. cmEditor : EditorOptions(nil);
  462. cmEditorOptions : EditorOptions(Event.InfoPtr);
  463. cmBrowser : BrowserOptions(nil);
  464. cmBrowserOptions : BrowserOptions(Event.InfoPtr);
  465. cmMouse : Mouse;
  466. cmStartup : StartUp;
  467. cmDesktopOptions: DesktopOptions;
  468. cmColors : Colors;
  469. cmOpenINI : OpenINI;
  470. cmSaveINI : SaveINI;
  471. cmSaveAsINI : SaveAsINI;
  472. { -- Tools menu -- }
  473. cmToolsMessages : Messages;
  474. cmCalculator : Calculator;
  475. cmAsciiTable : DoAsciiTable;
  476. cmGrep : DoGrep;
  477. cmToolsBase+1..
  478. cmToolsBase+MaxToolCount
  479. : ExecuteTool(Event.Command-cmToolsBase);
  480. { -- Window menu -- }
  481. cmCloseAll : CloseAll;
  482. cmWindowList : WindowList;
  483. cmUserScreenWindow: DoUserScreenWindow;
  484. { -- Help menu -- }
  485. cmHelpContents : HelpContents;
  486. cmHelpIndex : HelpHelpIndex;
  487. { cmHelpTopicSearch: HelpTopicSearch;}
  488. cmHelpPrevTopic : HelpPrevTopic;
  489. cmHelpUsingHelp : HelpUsingHelp;
  490. cmHelpFiles : HelpFiles;
  491. cmAbout : About;
  492. else DontClear:=true;
  493. end;
  494. if DontClear=false then ClearEvent(Event);
  495. end;
  496. evBroadcast :
  497. case Event.Command of
  498. cmSaveCancelled :
  499. SaveCancelled:=true;
  500. cmUpdateTools :
  501. UpdateTools;
  502. cmCommandSetChanged :
  503. UpdateMenu(MenuBar^.Menu);
  504. cmUpdate :
  505. Update;
  506. cmSourceWndClosing :
  507. begin
  508. with PSourceWindow(Event.InfoPtr)^ do
  509. if Editor^.FileName<>'' then
  510. AddRecentFile(Editor^.FileName,Editor^.CurPos.X,Editor^.CurPos.Y);
  511. {$ifndef NODEBUG}
  512. if assigned(Debugger) and (PView(Event.InfoPtr)=Debugger^.LastSource) then
  513. Debugger^.LastSource:=nil;
  514. {$endif}
  515. end;
  516. end;
  517. end;
  518. inherited HandleEvent(Event);
  519. end;
  520. procedure TIDEApp.GetTileRect(var R: TRect);
  521. begin
  522. Desktop^.GetExtent(R);
  523. { Leave the compiler messages window in the bottom }
  524. if assigned(CompilerMessageWindow) and (CompilerMessageWindow^.GetState(sfVisible)) then
  525. R.B.Y:=Min(CompilerMessageWindow^.Origin.Y,Desktop^.Size.Y);
  526. { Leave the messages window in the bottom }
  527. if assigned(MessagesWindow) and (MessagesWindow^.GetState(sfVisible)) and
  528. (MessagesWindow^.Origin.Y<R.B.Y) then
  529. R.B.Y:=MessagesWindow^.Origin.Y;
  530. end;
  531. {****************************************************************************
  532. Switch Screens
  533. ****************************************************************************}
  534. procedure TIDEApp.ShowUserScreen;
  535. begin
  536. DoneSysError;
  537. DoneEvents;
  538. DoneMouse;
  539. DoneScreen; { this is available in FV app.pas (PFV) }
  540. DoneDosMem;
  541. if Assigned(UserScreen) then
  542. UserScreen^.SwitchTo;
  543. end;
  544. procedure TIDEApp.ShowIDEScreen;
  545. begin
  546. if Assigned(UserScreen) then
  547. UserScreen^.SwitchBack;
  548. InitDosMem;
  549. InitScreen;
  550. InitMouse;
  551. InitEvents;
  552. InitSysError;
  553. Redraw;
  554. CurDirChanged;
  555. Message(Application,evBroadcast,cmUpdate,nil);
  556. UpdateScreen(true);
  557. end;
  558. function TIDEApp.AutoSave: boolean;
  559. var IOK,SOK,DOK: boolean;
  560. begin
  561. IOK:=true; SOK:=true; DOK:=true;
  562. if (AutoSaveOptions and asEnvironment)<>0 then
  563. begin
  564. IOK:=WriteINIFile;
  565. if IOK=false then
  566. ErrorBox('Error saving configuration.',nil);
  567. end;
  568. if (AutoSaveOptions and asEditorFiles)=0 then
  569. SOK:=MyApp.SaveAll;
  570. if (AutoSaveOptions and asDesktop)<>0 then
  571. begin
  572. { destory all help & browser windows - we don't want to store them }
  573. CloseHelpWindows;
  574. CloseAllBrowsers;
  575. DOK:=SaveDesktop;
  576. if DOK=false then
  577. ErrorBox('Error saving desktop file.',nil);
  578. end;
  579. AutoSave:=IOK and SOK and DOK;
  580. end;
  581. function TIDEApp.DoExecute(ProgramPath, Params, InFile,OutFile: string; ExecType: TExecType): boolean;
  582. var CanRun: boolean;
  583. begin
  584. SaveCancelled:=false;
  585. CanRun:=AutoSave;
  586. if (CanRun=false) and (SaveCancelled=false) then
  587. CanRun:=true; { do not care about .DSK or .INI saving problems - just like TP }
  588. if CanRun then
  589. begin
  590. if UserScreen=nil then
  591. begin
  592. ErrorBox('Sorry, user screen not available.',nil);
  593. Exit;
  594. end;
  595. if ExecType<>exNoSwap then
  596. ShowUserScreen;
  597. if ExecType=exDosShell then
  598. WriteShellMsg;
  599. {$ifdef linux}
  600. Shell(ProgramPath+' '+Params);
  601. {$else}
  602. if (InFile='') and (OutFile='') then
  603. Dos.Exec(GetEnv('COMSPEC'),'/C '+ProgramPath+' '+Params)
  604. else
  605. ExecuteRedir(GetEnv('COMSPEC'),'/C '+ProgramPath+' '+Params,InFile,OutFile,'stderr');
  606. {$endif}
  607. if ExecType<>exNoSwap then
  608. ShowIDEScreen;
  609. end;
  610. DoExecute:=CanRun;
  611. end;
  612. procedure TIDEApp.Update;
  613. begin
  614. SetCmdState([cmSaveAll],IsThereAnyEditor);
  615. SetCmdState([cmCloseAll,cmTile,cmCascade,cmWindowList],IsThereAnyWindow);
  616. SetCmdState([cmFindProcedure,cmObjects,cmModules,cmGlobals,cmSymbol{,cmInformation}],IsSymbolInfoAvailable);
  617. {$ifndef NODEBUG}
  618. SetCmdState([cmResetDebugger,cmUntilReturn],assigned(debugger) and debugger^.debuggee_started);
  619. {$endif}
  620. SetCmdState([cmToolsMsgNext,cmToolsMsgPrev],MessagesWindow<>nil);
  621. UpdateTools;
  622. UpdateRecentFileList;
  623. UpdatePrimaryFile;
  624. UpdateINIFile;
  625. Message(Application,evBroadcast,cmCommandSetChanged,nil);
  626. end;
  627. procedure TIDEApp.CurDirChanged;
  628. begin
  629. Message(Application,evBroadcast,cmUpdateTitle,nil);
  630. UpdatePrimaryFile;
  631. UpdateINIFile;
  632. UpdateMenu(MenuBar^.Menu);
  633. end;
  634. procedure TIDEApp.UpdatePrimaryFile;
  635. begin
  636. SetMenuItemParam(SearchMenuItem(MenuBar^.Menu,cmPrimaryFile),SmartPath(PrimaryFile));
  637. SetCmdState([cmClearPrimary],PrimaryFile<>'');
  638. if PrimaryFile<>'' then
  639. SetCmdState(CompileCmds,true);
  640. UpdateMenu(MenuBar^.Menu);
  641. Message(ProgramInfoWindow,evBroadcast,cmUpdate,nil);
  642. end;
  643. procedure TIDEApp.UpdateINIFile;
  644. begin
  645. SetMenuItemParam(SearchMenuItem(MenuBar^.Menu,cmSaveINI),SmartPath(INIPath));
  646. end;
  647. procedure TIDEApp.UpdateRecentFileList;
  648. var P: PMenuItem;
  649. ID,I: word;
  650. FileMenu: PMenuItem;
  651. begin
  652. ID:=cmRecentFileBase;
  653. FileMenu:=SearchSubMenu(MenuBar^.Menu,menuFile);
  654. repeat
  655. { Inc(ID);
  656. P:=SearchMenuItem(FileMenu^.SubMenu,ID);
  657. if FileMenu^.SubMenu^.Default=P then
  658. FileMenu^.SubMenu^.Default:=FileMenu^.SubMenu^.Items;
  659. if P<>nil then RemoveMenuItem(FileMenu^.SubMenu,P);}
  660. P:=GetMenuItemBefore(FileMenu^.SubMenu,nil);
  661. if (P<>nil) then
  662. begin
  663. if (cmRecentFileBase<P^.Command) and (P^.Command<=cmRecentFileBase+MaxRecentFileCount) then
  664. begin
  665. RemoveMenuItem(FileMenu^.SubMenu,P);
  666. if FileMenu^.SubMenu^.Default=P then
  667. FileMenu^.SubMenu^.Default:=FileMenu^.SubMenu^.Items;
  668. end
  669. else
  670. P:=nil;
  671. end;
  672. until P=nil;
  673. P:=GetMenuItemBefore(FileMenu^.SubMenu,nil);
  674. if (P<>nil) and IsSeparator(P) then
  675. RemoveMenuItem(FileMenu^.SubMenu,P);
  676. if RecentFileCount>0 then
  677. AppendMenuItem(FileMenu^.SubMenu,NewLine(nil));
  678. for I:=1 to RecentFileCount do
  679. begin
  680. P:=NewItem('~'+IntToStr(I)+'~. '+SmartPath(RecentFiles[I].FileName),' ',
  681. kbNoKey,cmRecentFileBase+I,hcRecentFileBase+I,nil);
  682. AppendMenuItem(FileMenu^.SubMenu,P);
  683. end;
  684. end;
  685. procedure TIDEApp.UpdateTools;
  686. var P: PMenuItem;
  687. ID,I: word;
  688. ToolsMenu: PMenuItem;
  689. S1,S2,S3: string;
  690. W: word;
  691. begin
  692. ID:=cmToolsBase;
  693. ToolsMenu:=SearchSubMenu(MenuBar^.Menu,menuTools);
  694. repeat
  695. P:=GetMenuItemBefore(ToolsMenu^.SubMenu,nil);
  696. if (P<>nil) then
  697. begin
  698. if (cmToolsBase<P^.Command) and (P^.Command<=cmToolsBase+MaxToolCount) then
  699. begin
  700. RemoveMenuItem(ToolsMenu^.SubMenu,P);
  701. if ToolsMenu^.SubMenu^.Default=P then
  702. ToolsMenu^.SubMenu^.Default:=ToolsMenu^.SubMenu^.Items;
  703. end
  704. else
  705. P:=nil;
  706. end;
  707. until P=nil;
  708. P:=GetMenuItemBefore(ToolsMenu^.SubMenu,nil);
  709. if (P<>nil) and IsSeparator(P) then
  710. RemoveMenuItem(ToolsMenu^.SubMenu,P);
  711. if GetToolCount>0 then
  712. AppendMenuItem(ToolsMenu^.SubMenu,NewLine(nil));
  713. for I:=1 to GetToolCount do
  714. begin
  715. GetToolParams(I-1,S1,S2,S3,W);
  716. P:=NewItem(S1,KillTilde(GetHotKeyName(W)),W,cmToolsBase+I,hcToolsBase+I,nil);
  717. AppendMenuItem(ToolsMenu^.SubMenu,P);
  718. end;
  719. end;
  720. procedure TIDEApp.DosShell;
  721. begin
  722. DoExecute(GetEnv('COMSPEC'), '', '', '', exDosShell);
  723. end;
  724. {$I FPMFILE.INC}
  725. {$I FPMEDIT.INC}
  726. {$I FPMSRCH.INC}
  727. {$I FPMRUN.INC}
  728. {$I FPMCOMP.INC}
  729. {$I FPMDEBUG.INC}
  730. {$I FPMTOOLS.INC}
  731. {$I FPMOPTS.INC}
  732. {$I FPMWND.INC}
  733. {$I FPMHELP.INC}
  734. procedure TIDEApp.AddRecentFile(AFileName: string; CurX, CurY: integer);
  735. begin
  736. if SearchRecentFile(AFileName)<>-1 then Exit;
  737. if RecentFileCount>0 then
  738. Move(RecentFiles[1],RecentFiles[2],SizeOf(RecentFiles[1])*Min(RecentFileCount,High(RecentFiles)-1));
  739. if RecentFileCount<High(RecentFiles) then Inc(RecentFileCount);
  740. with RecentFiles[1] do
  741. begin
  742. FileName:=AFileName;
  743. LastPos.X:=CurX; LastPos.Y:=CurY;
  744. end;
  745. UpdateRecentFileList;
  746. end;
  747. function TIDEApp.SearchRecentFile(AFileName: string): integer;
  748. var Idx,I: integer;
  749. begin
  750. Idx:=-1;
  751. for I:=1 to RecentFileCount do
  752. if UpcaseStr(AFileName)=UpcaseStr(RecentFiles[I].FileName) then
  753. begin Idx:=I; Break; end;
  754. SearchRecentFile:=Idx;
  755. end;
  756. procedure TIDEApp.RemoveRecentFile(Index: integer);
  757. begin
  758. if Index<RecentFileCount then
  759. Move(RecentFiles[Index+1],RecentFiles[Index],SizeOf(RecentFiles[1])*(RecentFileCount-Index));
  760. Dec(RecentFileCount);
  761. end;
  762. function TIDEApp.GetPalette: PPalette;
  763. var P: string;
  764. begin
  765. P:=AppPalette;
  766. GetPalette:=@P;
  767. end;
  768. destructor TIDEApp.Done;
  769. begin
  770. inherited Done;
  771. RemoveBrowsersCollection;
  772. DoneHelpSystem;
  773. end;
  774. END.
  775. {
  776. $Log$
  777. Revision 1.37 1999-09-13 11:44:00 peter
  778. * fixes from gabor, idle event, html fix
  779. Revision 1.36 1999/09/09 14:15:27 pierre
  780. + cmCopyWin,cmPasteWin
  781. Revision 1.35 1999/08/16 18:25:19 peter
  782. * Adjusting the selection when the editor didn't contain any line.
  783. * Reserved word recognition redesigned, but this didn't affect the overall
  784. syntax highlight speed remarkably (at least not on my Amd-K6/350).
  785. The syntax scanner loop is a bit slow but the main problem is the
  786. recognition of special symbols. Switching off symbol processing boosts
  787. the performance up to ca. 200%...
  788. * The editor didn't allow copying (for ex to clipboard) of a single character
  789. * 'File|Save as' caused permanently run-time error 3. Not any more now...
  790. * Compiler Messages window (actually the whole desktop) did not act on any
  791. keypress when compilation failed and thus the window remained visible
  792. + Message windows are now closed upon pressing Esc
  793. + At 'Run' the IDE checks whether any sources are modified, and recompiles
  794. only when neccessary
  795. + BlockRead and BlockWrite (Ctrl+K+R/W) implemented in TCodeEditor
  796. + LineSelect (Ctrl+K+L) implemented
  797. * The IDE had problems closing help windows before saving the desktop
  798. Revision 1.34 1999/08/03 20:22:32 peter
  799. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  800. + Desktop saving should work now
  801. - History saved
  802. - Clipboard content saved
  803. - Desktop saved
  804. - Symbol info saved
  805. * syntax-highlight bug fixed, which compared special keywords case sensitive
  806. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  807. * with 'whole words only' set, the editor didn't found occourences of the
  808. searched text, if the text appeared previously in the same line, but didn't
  809. satisfied the 'whole-word' condition
  810. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  811. (ie. the beginning of the selection)
  812. * when started typing in a new line, but not at the start (X=0) of it,
  813. the editor inserted the text one character more to left as it should...
  814. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  815. * Shift shouldn't cause so much trouble in TCodeEditor now...
  816. * Syntax highlight had problems recognizing a special symbol if it was
  817. prefixed by another symbol character in the source text
  818. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  819. Revision 1.33 1999/07/12 13:14:18 pierre
  820. * LineEnd bug corrected, now goes end of text even if selected
  821. + Until Return for debugger
  822. + Code for Quit inside GDB Window
  823. Revision 1.32 1999/07/10 01:24:17 pierre
  824. + First implementation of watches window
  825. Revision 1.31 1999/06/29 22:50:14 peter
  826. * more fixes from gabor
  827. Revision 1.30 1999/06/28 19:32:20 peter
  828. * fixes from gabor
  829. Revision 1.29 1999/06/28 12:40:19 pierre
  830. + RemoveBrowsersCollection in TIDEApp.Done
  831. Revision 1.28 1999/06/25 00:46:33 pierre
  832. + UpdateTarget to show current target
  833. + SearchSymbol, not scope aware (this will need a PPU change !)
  834. Revision 1.27 1999/05/22 13:44:30 peter
  835. * fixed couple of bugs
  836. Revision 1.26 1999/04/07 21:55:47 peter
  837. + object support for browser
  838. * html help fixes
  839. * more desktop saving things
  840. * NODEBUG directive to exclude debugger
  841. Revision 1.25 1999/03/23 15:11:29 peter
  842. * desktop saving things
  843. * vesa mode
  844. * preferences dialog
  845. Revision 1.24 1999/03/19 16:04:29 peter
  846. * new compiler dialog
  847. Revision 1.23 1999/03/16 12:38:10 peter
  848. * tools macro fixes
  849. + tph writer
  850. + first things for resource files
  851. Revision 1.22 1999/03/12 01:13:57 peter
  852. * flag if trytoopen should look for other extensions
  853. + browser tab in the tools-compiler
  854. Revision 1.21 1999/03/02 13:48:29 peter
  855. * fixed far problem is fpdebug
  856. * tile/cascading with message window
  857. * grep fixes
  858. Revision 1.20 1999/03/01 15:41:54 peter
  859. + Added dummy entries for functions not yet implemented
  860. * MenuBar didn't update itself automatically on command-set changes
  861. * Fixed Debugging/Profiling options dialog
  862. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  863. set
  864. * efBackSpaceUnindents works correctly
  865. + 'Messages' window implemented
  866. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  867. + Added TP message-filter support (for ex. you can call GREP thru
  868. GREP2MSG and view the result in the messages window - just like in TP)
  869. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  870. so topic search didn't work...
  871. * In FPHELP.PAS there were still context-variables defined as word instead
  872. of THelpCtx
  873. * StdStatusKeys() was missing from the statusdef for help windows
  874. + Topic-title for index-table can be specified when adding a HTML-files
  875. Revision 1.19 1999/02/22 11:51:36 peter
  876. * browser updates from gabor
  877. Revision 1.18 1999/02/22 02:15:13 peter
  878. + default extension for save in the editor
  879. + Separate Text to Find for the grep dialog
  880. * fixed redir crash with tp7
  881. Revision 1.17 1999/02/20 15:18:30 peter
  882. + ctrl-c capture with confirm dialog
  883. + ascii table in the tools menu
  884. + heapviewer
  885. * empty file fixed
  886. * fixed callback routines in fpdebug to have far for tp7
  887. Revision 1.16 1999/02/18 13:44:31 peter
  888. * search fixed
  889. + backward search
  890. * help fixes
  891. * browser updates
  892. Revision 1.15 1999/02/16 10:43:55 peter
  893. * use -dGDB for the compiler
  894. * only use gdb_file when -dDEBUG is used
  895. * profiler switch is now a toggle instead of radiobutton
  896. Revision 1.14 1999/02/11 19:07:22 pierre
  897. * GDBWindow redesigned :
  898. normal editor apart from
  899. that any kbEnter will send the line (for begin to cursor)
  900. to GDB command !
  901. GDBWindow opened in Debugger Menu
  902. still buggy :
  903. -echo should not be present if at end of text
  904. -GDBWindow becomes First after each step (I don't know why !)
  905. Revision 1.13 1999/02/10 09:54:11 pierre
  906. * cmSourceWindowClosing resets Debugger LastSource field to avoid problems
  907. Revision 1.12 1999/02/08 17:43:44 pierre
  908. * RestDebugger or multiple running of debugged program now works
  909. + added DoContToCursor(F4)
  910. * Breakpoints are now inserted correctly (was mainlyy a problem
  911. of directories)
  912. Revision 1.11 1999/02/08 10:37:44 peter
  913. + html helpviewer
  914. Revision 1.7 1999/02/04 13:32:03 pierre
  915. * Several things added (I cannot commit them independently !)
  916. + added TBreakpoint and TBreakpointCollection
  917. + added cmResetDebugger,cmGrep,CmToggleBreakpoint
  918. + Breakpoint list in INIFile
  919. * Select items now also depend of SwitchMode
  920. * Reading of option '-g' was not possible !
  921. + added search for -Fu args pathes in TryToOpen
  922. + added code for automatic opening of FileDialog
  923. if source not found
  924. Revision 1.6 1999/02/02 16:41:39 peter
  925. + automatic .pas/.pp adding by opening of file
  926. * better debuggerscreen changes
  927. Revision 1.5 1999/01/22 18:13:22 pierre
  928. * DoneScreen Removed I did not find any such proc ??
  929. Revision 1.4 1999/01/22 10:24:03 peter
  930. * first debugger things
  931. Revision 1.3 1999/01/21 11:54:14 peter
  932. + tools menu
  933. + speedsearch in symbolbrowser
  934. * working run command
  935. Revision 1.2 1999/01/14 21:42:20 peter
  936. * source tracking from Gabor
  937. Revision 1.1 1999/01/12 14:29:34 peter
  938. + Implemented still missing 'switch' entries in Options menu
  939. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  940. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  941. ASCII chars and inserted directly in the text.
  942. + Added symbol browser
  943. * splitted fp.pas to fpide.pas
  944. Revision 1.4 1999/01/04 11:49:41 peter
  945. * 'Use tab characters' now works correctly
  946. + Syntax highlight now acts on File|Save As...
  947. + Added a new class to syntax highlight: 'hex numbers'.
  948. * There was something very wrong with the palette managment. Now fixed.
  949. + Added output directory (-FE<xxx>) support to 'Directories' dialog...
  950. * Fixed some possible bugs in Running/Compiling, and the compilation/run
  951. process revised
  952. Revision 1.2 1998/12/28 15:47:40 peter
  953. + Added user screen support, display & window
  954. + Implemented Editor,Mouse Options dialog
  955. + Added location of .INI and .CFG file
  956. + Option (INI) file managment implemented (see bottom of Options Menu)
  957. + Switches updated
  958. + Run program
  959. Revision 1.3 1998/12/22 10:39:38 peter
  960. + options are now written/read
  961. + find and replace routines
  962. }