fp.pas 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682
  1. {
  2. $Id$
  3. This file is part of the Free Pascal Integrated Development Environment
  4. Copyright (c) 1998-2000 by Berczi Gabor
  5. Main program of the IDE
  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. program FP;
  13. {$I globdir.inc}
  14. (**********************************************************************)
  15. (* CONDITIONAL DEFINES *)
  16. (* - NODEBUG No Debugging support *)
  17. (* - TP Turbo Pascal mode *)
  18. (* - i386 Target is an i386 IDE *)
  19. (**********************************************************************)
  20. uses
  21. {$ifndef NODEBUG}
  22. {$ifdef win32}
  23. fpcygwin,
  24. {$endif win32}
  25. {$endif NODEBUG}
  26. {$ifdef IDEHeapTrc}
  27. HeapTrc,
  28. {$endif IDEHeapTrc}
  29. {$ifdef go32v2}
  30. dpmiexcp,
  31. {$endif go32v2}
  32. {$ifdef fpc}
  33. keyboard,video,mouse,
  34. {$endif fpc}
  35. {$ifdef HasSignal}
  36. fpcatch,
  37. {$endif HasSignal}
  38. Dos,Objects,
  39. BrowCol,
  40. {$ifdef FVISION}
  41. FVConsts,
  42. {$else}
  43. Commands,
  44. {$endif}
  45. Drivers,Views,App,Dialogs,
  46. Menus,StdDlg,Validate,
  47. {$ifdef EDITORS}Editors{$else}WEditor,WCEdit{$endif},
  48. {$ifndef FVISION}
  49. ColorSel,
  50. {$endif FVISION}
  51. ASCIITab,
  52. WUtils,WViews,WHTMLScn,WHelp,
  53. FPIDE,FPCalc,FPCompil,FPString,
  54. FPIni,FPViews,FPConst,FPVars,FPUtils,FPHelp,FPSwitch,FPUsrScr,
  55. FPTools,{$ifndef NODEBUG}FPDebug,{$endif}FPTemplt,FPRedir,FPDesk,
  56. FPCodTmp,FPCodCmp;
  57. {$ifdef fpc}
  58. Const
  59. DummyMouseDriver : TMouseDriver = (
  60. useDefaultQueue : true;
  61. InitDriver : nil;
  62. DoneDriver : nil;
  63. DetectMouse : nil;
  64. ShowMouse : nil;
  65. HideMouse : nil;
  66. GetMouseX : nil;
  67. GetMouseY : nil;
  68. GetMouseButtons : nil;
  69. SetMouseXY : nil;
  70. GetMouseEvent : nil;
  71. PollMouseEvent : nil;
  72. PutMouseEvent : nil;
  73. );
  74. {$endif fpc}
  75. procedure ProcessParams(BeforeINI: boolean);
  76. function IsSwitch(const Param: string): boolean;
  77. begin
  78. IsSwitch:=(Param<>'') and (Param[1]<>DirSep) { <- allow UNIX root-relative paths }
  79. and (Param[1] in ['-','/']); { <- but still accept dos switch char, eg. '/' }
  80. end;
  81. var I: Sw_integer;
  82. Param: string;
  83. begin
  84. for I:=1 to ParamCount do
  85. begin
  86. Param:=System.ParamStr(I);
  87. if IsSwitch(Param) then
  88. begin
  89. Param:=copy(Param,2,255);
  90. if Param<>'' then
  91. if UpcaseStr(copy(Param,1,2))='HM' then
  92. { HeapMonitor }
  93. begin
  94. if (copy(Param,3,1)='+') or (copy(Param,3,1)='') then
  95. StartupOptions:=StartupOptions or soHeapMonitor
  96. else
  97. if (copy(Param,3,1)='-') then
  98. StartupOptions:=StartupOptions and not soHeapMonitor;
  99. end else
  100. {$ifdef go32v2}
  101. if UpcaseStr(Param)='NOLFN' then
  102. begin
  103. LFNSupport:=false;
  104. end else
  105. {$endif go32v2}
  106. if UpcaseStr(Param)='README' then
  107. begin
  108. ShowReadme:=true;
  109. end else
  110. case Upcase(Param[1]) of
  111. 'C' : { custom config file (BP compatiblity) }
  112. if BeforeINI then
  113. begin
  114. if (length(Param)>=1) and (Param[1] in['=',':']) then
  115. Delete(Param,1,1); { eat separator }
  116. IniFileName:=Param;
  117. end;
  118. 'R' : { enter the directory last exited from (BP comp.) }
  119. begin
  120. Param:=copy(Param,2,255);
  121. if (Param='') or (Param='+') then
  122. StartupOptions:=StartupOptions or soReturnToLastDir
  123. else
  124. if (Param='-') then
  125. StartupOptions:=StartupOptions and (not soReturnToLastDir);
  126. end;
  127. 'S' :
  128. if Length(Param)=1 then
  129. begin
  130. UseMouse:=false;
  131. {$ifdef fpc}
  132. DoneMouse;
  133. SetMouseDriver(DummyMouseDriver);
  134. {$endif fpc}
  135. ButtonCount:=0;
  136. end;
  137. {$ifdef fpc}
  138. 'F' :
  139. if Length(Param)=1 then
  140. NoExtendedFrame:=true;
  141. {$ifdef Unix}
  142. 'T' : DebuggeeTTY:=Copy(Param,2,High(Param));
  143. {$endif Unix}
  144. { 'M' : TryToMaximizeScreen:=true;}
  145. {$endif fpc}
  146. end;
  147. end
  148. else
  149. if not BeforeINI then
  150. TryToOpenFile(nil,Param,0,0,{false}true);
  151. end;
  152. end;
  153. Procedure MyStreamError(Var S: TStream); {$ifndef FPC}far;{$endif}
  154. var ErrS: string;
  155. begin
  156. case S.Status of
  157. stGetError : ErrS:='Get of unregistered object type';
  158. stPutError : ErrS:='Put of unregistered object type';
  159. else ErrS:='';
  160. end;
  161. if ErrS<>'' then
  162. begin
  163. {$ifdef GABOR}{$ifdef TP}asm int 3;end;{$endif}{$endif}
  164. if Assigned(Application) then
  165. ErrorBox('Stream error: '+#13+ErrS,nil)
  166. else
  167. writeln('Error: ',ErrS);
  168. end;
  169. end;
  170. procedure DelTempFiles;
  171. begin
  172. DeleteFile(FPOutFileName);
  173. DeleteFile(FPErrFileName);
  174. DeleteFile(GDBOutFileName);
  175. DeleteFile(GDBOutPutFileName);
  176. DeleteFile(GREPOutName);
  177. DeleteFile(GREPErrName);
  178. end;
  179. procedure RegisterIDEObjects;
  180. begin
  181. RegisterApp;
  182. RegisterCodeComplete;
  183. RegisterCodeTemplates;
  184. {$ifndef FVISION}
  185. RegisterColorSel;
  186. {$endif FVISION}
  187. RegisterAsciiTab;
  188. RegisterDialogs;
  189. {$ifdef EDITORS}
  190. RegisterEditors;
  191. {$else}
  192. RegisterWEditor;
  193. RegisterWCEdit;
  194. {$endif}
  195. RegisterFPCalc;
  196. RegisterFPCompile;
  197. RegisterFPTools;
  198. RegisterFPViews;
  199. {$ifndef NODEBUG}
  200. RegisterFPDebugViews;
  201. {$endif}
  202. RegisterMenus;
  203. RegisterStdDlg;
  204. RegisterSymbols;
  205. RegisterObjects;
  206. RegisterValidate;
  207. RegisterViews;
  208. RegisterWHTMLScan;
  209. RegisterWUtils;
  210. RegisterWViews;
  211. end;
  212. var CanExit : boolean;
  213. SetJmpRes : longint;
  214. StoreExitProc : pointer;
  215. ErrS : String;
  216. P : record
  217. l1 : longint;
  218. s : pstring;
  219. end;
  220. {$ifdef win32}
  221. ShowMouseExe : string;
  222. {$endif win32}
  223. const
  224. ExitIntercepted : boolean = false;
  225. SeenExitCode : longint =0;
  226. SeenErrorAddr : pointer = nil;
  227. UserWantsToGoOn: boolean = false;
  228. procedure InterceptExit;
  229. begin
  230. if StopJmpValid then
  231. begin
  232. ExitIntercepted:=true;
  233. SeenExitCode:=ExitCode;
  234. SeenErrorAddr:=ErrorAddr;
  235. LongJmp(StopJmp,1);
  236. end;
  237. end;
  238. BEGIN
  239. {$ifdef DEV}HeapLimit:=4096;{$endif}
  240. writeln('þ Free Pascal IDE Version '+VersionStr);
  241. {$ifdef win32}
  242. Win32ShowMouse;
  243. {$endif win32}
  244. {$ifndef NODEBUG}
  245. {$ifdef win32}
  246. writeln('Using "',GetCygwinFullName,'" version ',GetCygwinVersionString);
  247. CheckCygwinVersion;
  248. {$endif win32}
  249. {$endif NODEBUG}
  250. ProcessParams(true);
  251. InitDirs;
  252. RegisterIDEObjects;
  253. StreamError:=@MyStreamError;
  254. ShowReadme:=ShowReadme or (LocateFile(INIFileName)='');
  255. {$ifdef VESA}
  256. InitVESAScreenModes;
  257. {$endif}
  258. InitRedir;
  259. {$ifndef NODEBUG}
  260. InitBreakpoints;
  261. InitWatches;
  262. {$endif}
  263. InitReservedWords;
  264. InitHelpFiles;
  265. InitSwitches;
  266. InitINIFile;
  267. InitUserScreen;
  268. InitTools;
  269. InitTemplates;
  270. InitCodeTemplates;
  271. InitCodeComplete;
  272. IDEApp.Init;
  273. CheckINIFile;
  274. ReadSwitches(SwitchesPath);
  275. { load all options after init because of open files }
  276. ReadINIFile;
  277. InitDesktopFile;
  278. LoadDesktop;
  279. ParseUserScreen;
  280. { why are the screen contents parsed at startup? Gabor }
  281. EnableCatchSignals;
  282. { Update IDE }
  283. IDEApp.Update;
  284. IDEApp.UpdateMode;
  285. IDEApp.UpdateTarget;
  286. ProcessParams(false);
  287. if ShowReadme then
  288. begin
  289. PutCommand(Application,evCommand,cmShowReadme,nil);
  290. ShowReadme:=false; { do not show next time }
  291. end;
  292. StoreExitProc:=ExitProc;
  293. ExitProc:=@InterceptExit;
  294. repeat
  295. SetJmpRes:=setjmp(StopJmp);
  296. StopJmpValid:=true;
  297. UserWantsToGoOn:=false;
  298. if SetJmpRes=0 then
  299. IDEApp.Run
  300. else
  301. begin
  302. if (SetJmpRes=1) and ExitIntercepted then
  303. begin
  304. { If ExitProc=@InterceptExit then
  305. ExitProc:=StoreExitProc;}
  306. Str(SeenExitCode,ErrS);
  307. if Assigned(Application) then
  308. begin
  309. P.l1:=SeenExitCode;
  310. ErrS:=hexstr(longint(SeenErrorAddr),8);
  311. P.s:=@ErrS;
  312. if OKCancelBox(error_programexitedwitherror,@P)=cmCancel then
  313. UserWantsToGoOn:=true;
  314. end
  315. else
  316. writeln('Abnormal exit error: ',ErrS);
  317. end
  318. else
  319. begin
  320. Str(SetJmpRes,ErrS);
  321. { Longjmp was called by fpcatch }
  322. if Assigned(Application) then
  323. begin
  324. P.l1:=SetJmpRes;
  325. if OKCancelBox(error_programexitedwithsignal,@P)=cmCancel then
  326. UserWantsToGoOn:=true;
  327. end
  328. else
  329. writeln('Signal error: ',ErrS);
  330. end;
  331. end;
  332. if (AutoSaveOptions and asEditorFiles)=0 then
  333. CanExit:=IDEApp.AskSaveAll
  334. else
  335. CanExit:=IDEApp.SaveAll;
  336. StopJmpValid:=false;
  337. if (SetJmpRes<>0) then
  338. begin
  339. if (not CanExit) or UserWantsToGoOn then
  340. begin
  341. if ConfirmBox(continue_despite_error,nil,false)=cmNo then
  342. CanExit:=true
  343. else
  344. CanExit:=false;
  345. end
  346. else
  347. begin
  348. ErrorBox(leaving_after_error,nil);
  349. end;
  350. end;
  351. until CanExit;
  352. If ExitProc=pointer(@InterceptExit) then
  353. ExitProc:=StoreExitProc;
  354. IDEApp.AutoSave;
  355. DoneDesktopFile;
  356. DelTempFiles;
  357. IDEApp.Done;
  358. WriteSwitches(SwitchesPath);
  359. DisableCatchSignals;
  360. DoneCodeComplete;
  361. DoneCodeTemplates;
  362. DoneTemplates;
  363. DoneTools;
  364. DoneUserScreen;
  365. DoneSwitches;
  366. DoneHelpFiles;
  367. DoneHelpFilesTypes;
  368. DoneReservedWords;
  369. DoneToolMessages;
  370. DoneBrowserCol;
  371. {$ifndef NODEBUG}
  372. DoneDebugger;
  373. DoneBreakpoints;
  374. DoneWatches;
  375. {$endif}
  376. {$ifdef fpc}
  377. {$ifdef unix}
  378. Video.ClearScreen;
  379. {$endif unix}
  380. Video.DoneVideo;
  381. Keyboard.DoneKeyboard;
  382. {$endif fpc}
  383. {$ifdef VESA}
  384. DoneVESAScreenModes;
  385. {$endif}
  386. {$ifdef unix}
  387. Keyboard.RestoreStartMode;
  388. {$endif unix}
  389. StreamError:=nil;
  390. END.
  391. {
  392. $Log$
  393. Revision 1.9 2002-05-29 22:29:42 pierre
  394. Asciitab now in fvision
  395. Revision 1.8 2002/04/12 11:28:55 pierre
  396. + use fpcygwin unit for win32 debug IDE
  397. Revision 1.7 2002/04/12 09:00:01 pierre
  398. * enhance internal error handling
  399. Revision 1.6 2002/03/28 16:32:48 pierre
  400. * clearscrenn at exit for unix
  401. Revision 1.5 2002/03/20 14:56:41 pierre
  402. * correct last commit
  403. Revision 1.4 2002/03/20 14:53:37 pierre
  404. + rescue handlers in main loop
  405. Revision 1.3 2002/01/09 09:46:10 pierre
  406. * fix problems with -S option
  407. Revision 1.2 2001/08/05 12:23:00 peter
  408. * Automatically support for fvision or old fv
  409. Revision 1.1 2001/08/04 11:30:22 peter
  410. * ide works now with both compiler versions
  411. Revision 1.1.2.10 2001/03/27 12:39:27 pierre
  412. * Use RestoreStartMode function for Unix
  413. Revision 1.1.2.9 2001/03/20 00:20:41 pierre
  414. * fix some memory leaks + several small enhancements
  415. Revision 1.1.2.8 2001/03/14 17:57:07 pierre
  416. * fix invisible mouse problem for win32 on win9X
  417. Revision 1.1.2.7 2000/12/20 14:27:48 pierre
  418. * fp.ini for unix
  419. Revision 1.1.2.6 2000/12/13 16:56:41 pierre
  420. + -t option to specify tty for program run input/output for unix
  421. Revision 1.1.2.5 2000/11/29 00:54:44 pierre
  422. + preserve window number and save special windows
  423. Revision 1.1.2.4 2000/11/09 08:53:35 pierre
  424. + -F option to force use of only one graphic set
  425. Revision 1.1.2.3 2000/09/27 22:32:26 pierre
  426. * suppress lineinfo explicit in _uses
  427. Revision 1.1.2.2 2000/08/16 18:46:14 peter
  428. [*] double clicking on a droplistbox caused GPF (due to invalid recurson)
  429. [*] Make, Build now possible even in Compiler Messages Window
  430. [+] when started in a new dir the IDE now ask whether to create a local
  431. config, or to use the one located in the IDE dir
  432. Revision 1.1.2.1 2000/07/18 05:50:22 michael
  433. + Merged Gabors fixes
  434. Revision 1.1 2000/07/13 09:48:34 michael
  435. + Initial import
  436. Revision 1.47 2000/06/16 08:50:40 pierre
  437. + new bunch of Gabor's changes
  438. Revision 1.46 2000/05/29 10:44:56 pierre
  439. + New bunch of Gabor's changes: see fixes.txt
  440. Revision 1.45 2000/05/02 08:42:26 pierre
  441. * new set of Gabor changes: see fixes.txt
  442. Revision 1.44 2000/04/25 08:42:32 pierre
  443. * New Gabor changes : see fixes.txt
  444. Revision 1.43 2000/04/18 11:42:36 pierre
  445. lot of Gabor changes : see fixes.txt
  446. Revision 1.42 2000/03/21 23:34:10 pierre
  447. adapted to wcedit addition by Gabor
  448. Revision 1.41 2000/03/13 20:41:34 pierre
  449. + option -S to disable the mouse
  450. * adapted to changes in fpusrscr for DOS
  451. Revision 1.40 2000/03/07 21:58:58 pierre
  452. + uses ParseUserScreen and UpdateMode
  453. Revision 1.39 2000/02/12 23:58:26 carl
  454. + Conditional define explanaations
  455. Revision 1.38 2000/02/07 11:54:17 pierre
  456. + RegisterWUtils by Gabor
  457. Revision 1.37 2000/01/25 00:26:35 pierre
  458. + Browser info saving
  459. Revision 1.36 2000/01/10 15:53:37 pierre
  460. * WViews objects were not registered
  461. Revision 1.35 2000/01/03 11:38:33 michael
  462. Changes from Gabor
  463. Revision 1.34 1999/12/20 14:23:16 pierre
  464. * MyApp renamed IDEApp
  465. * TDebugController.ResetDebuggerRows added to
  466. get resetting of debugger rows
  467. Revision 1.33 1999/12/20 09:36:49 pierre
  468. * get the mouse visible on win32 fp
  469. Revision 1.32 1999/12/10 13:02:05 pierre
  470. + VideoMode save/restore
  471. Revision 1.31 1999/09/13 11:43:59 peter
  472. * fixes from gabor, idle event, html fix
  473. Revision 1.30 1999/08/22 22:24:15 pierre
  474. * avoid objpas paramstr functions
  475. Revision 1.29 1999/08/03 20:22:25 peter
  476. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  477. + Desktop saving should work now
  478. - History saved
  479. - Clipboard content saved
  480. - Desktop saved
  481. - Symbol info saved
  482. * syntax-highlight bug fixed, which compared special keywords case sensitive
  483. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  484. * with 'whole words only' set, the editor didn't found occourences of the
  485. searched text, if the text appeared previously in the same line, but didn't
  486. satisfied the 'whole-word' condition
  487. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  488. (ie. the beginning of the selection)
  489. * when started typing in a new line, but not at the start (X=0) of it,
  490. the editor inserted the text one character more to left as it should...
  491. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  492. * Shift shouldn't cause so much trouble in TCodeEditor now...
  493. * Syntax highlight had problems recognizing a special symbol if it was
  494. prefixed by another symbol character in the source text
  495. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  496. Revision 1.28 1999/07/10 01:24:11 pierre
  497. + First implementation of watches window
  498. Revision 1.27 1999/06/29 22:43:12 peter
  499. * try to add extensions to params
  500. Revision 1.26 1999/06/28 23:31:14 pierre
  501. * typo inside go32v2 cond error removed
  502. Revision 1.25 1999/06/28 19:25:34 peter
  503. * fixes from gabor
  504. Revision 1.24 1999/06/28 12:40:56 pierre
  505. + clear tool messages at exit
  506. Revision 1.23 1999/06/25 00:48:05 pierre
  507. + adds current target in menu at startup
  508. Revision 1.22 1999/05/22 13:44:28 peter
  509. * fixed couple of bugs
  510. Revision 1.21 1999/04/07 21:55:40 peter
  511. + object support for browser
  512. * html help fixes
  513. * more desktop saving things
  514. * NODEBUG directive to exclude debugger
  515. Revision 1.20 1999/03/23 16:16:36 peter
  516. * linux fixes
  517. Revision 1.19 1999/03/23 15:11:26 peter
  518. * desktop saving things
  519. * vesa mode
  520. * preferences dialog
  521. Revision 1.18 1999/03/21 22:51:35 florian
  522. + functional screen mode switching added
  523. Revision 1.17 1999/03/16 12:38:06 peter
  524. * tools macro fixes
  525. + tph writer
  526. + first things for resource files
  527. Revision 1.16 1999/03/12 01:13:01 peter
  528. * use TryToOpen() with parameter files to overcome double opened files
  529. at startup
  530. Revision 1.15 1999/03/08 14:58:08 peter
  531. + prompt with dialogs for tools
  532. Revision 1.14 1999/03/05 17:53:00 pierre
  533. + saving and opening of open files on exit
  534. Revision 1.13 1999/03/01 15:41:48 peter
  535. + Added dummy entries for functions not yet implemented
  536. * MenuBar didn't update itself automatically on command-set changes
  537. * Fixed Debugging/Profiling options dialog
  538. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  539. set
  540. * efBackSpaceUnindents works correctly
  541. + 'Messages' window implemented
  542. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  543. + Added TP message-filter support (for ex. you can call GREP thru
  544. GREP2MSG and view the result in the messages window - just like in TP)
  545. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  546. so topic search didn't work...
  547. * In FPHELP.PAS there were still context-variables defined as word instead
  548. of THelpCtx
  549. * StdStatusKeys() was missing from the statusdef for help windows
  550. + Topic-title for index-table can be specified when adding a HTML-files
  551. Revision 1.12 1999/02/20 15:18:25 peter
  552. + ctrl-c capture with confirm dialog
  553. + ascii table in the tools menu
  554. + heapviewer
  555. * empty file fixed
  556. * fixed callback routines in fpdebug to have far for tp7
  557. Revision 1.11 1999/02/18 13:44:30 peter
  558. * search fixed
  559. + backward search
  560. * help fixes
  561. * browser updates
  562. Revision 1.10 1999/02/15 09:07:10 pierre
  563. * HEAPTRC conditionnal renamed IDEHEAPTRC
  564. Revision 1.9 1999/02/10 09:55:43 pierre
  565. + Memory tracing if compiled with -dHEAPTRC
  566. * Many memory leaks removed
  567. Revision 1.8 1999/02/08 09:30:59 florian
  568. + some split heap stuff, in $ifdef TEMPHEAP
  569. Revision 1.7 1999/02/05 13:51:38 peter
  570. * unit name of FPSwitches -> FPSwitch which is easier to use
  571. * some fixes for tp7 compiling
  572. Revision 1.6 1999/01/21 11:54:10 peter
  573. + tools menu
  574. + speedsearch in symbolbrowser
  575. * working run command
  576. Revision 1.5 1999/01/12 14:29:31 peter
  577. + Implemented still missing 'switch' entries in Options menu
  578. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  579. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  580. ASCII chars and inserted directly in the text.
  581. + Added symbol browser
  582. * splitted fp.pas to fpide.pas
  583. }