fp.pas 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  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. ASCIITab,
  51. {$endif FVISION}
  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. RegisterAsciiTab;
  187. {$endif FVISION}
  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 unix}
  384. Keyboard.RestoreStartMode;
  385. {$endif unix}
  386. StreamError:=nil;
  387. END.
  388. {
  389. $Log$
  390. Revision 1.8 2002-04-12 11:28:55 pierre
  391. + use fpcygwin unit for win32 debug IDE
  392. Revision 1.7 2002/04/12 09:00:01 pierre
  393. * enhance internal error handling
  394. Revision 1.6 2002/03/28 16:32:48 pierre
  395. * clearscrenn at exit for unix
  396. Revision 1.5 2002/03/20 14:56:41 pierre
  397. * correct last commit
  398. Revision 1.4 2002/03/20 14:53:37 pierre
  399. + rescue handlers in main loop
  400. Revision 1.3 2002/01/09 09:46:10 pierre
  401. * fix problems with -S option
  402. Revision 1.2 2001/08/05 12:23:00 peter
  403. * Automatically support for fvision or old fv
  404. Revision 1.1 2001/08/04 11:30:22 peter
  405. * ide works now with both compiler versions
  406. Revision 1.1.2.10 2001/03/27 12:39:27 pierre
  407. * Use RestoreStartMode function for Unix
  408. Revision 1.1.2.9 2001/03/20 00:20:41 pierre
  409. * fix some memory leaks + several small enhancements
  410. Revision 1.1.2.8 2001/03/14 17:57:07 pierre
  411. * fix invisible mouse problem for win32 on win9X
  412. Revision 1.1.2.7 2000/12/20 14:27:48 pierre
  413. * fp.ini for unix
  414. Revision 1.1.2.6 2000/12/13 16:56:41 pierre
  415. + -t option to specify tty for program run input/output for unix
  416. Revision 1.1.2.5 2000/11/29 00:54:44 pierre
  417. + preserve window number and save special windows
  418. Revision 1.1.2.4 2000/11/09 08:53:35 pierre
  419. + -F option to force use of only one graphic set
  420. Revision 1.1.2.3 2000/09/27 22:32:26 pierre
  421. * suppress lineinfo explicit in _uses
  422. Revision 1.1.2.2 2000/08/16 18:46:14 peter
  423. [*] double clicking on a droplistbox caused GPF (due to invalid recurson)
  424. [*] Make, Build now possible even in Compiler Messages Window
  425. [+] when started in a new dir the IDE now ask whether to create a local
  426. config, or to use the one located in the IDE dir
  427. Revision 1.1.2.1 2000/07/18 05:50:22 michael
  428. + Merged Gabors fixes
  429. Revision 1.1 2000/07/13 09:48:34 michael
  430. + Initial import
  431. Revision 1.47 2000/06/16 08:50:40 pierre
  432. + new bunch of Gabor's changes
  433. Revision 1.46 2000/05/29 10:44:56 pierre
  434. + New bunch of Gabor's changes: see fixes.txt
  435. Revision 1.45 2000/05/02 08:42:26 pierre
  436. * new set of Gabor changes: see fixes.txt
  437. Revision 1.44 2000/04/25 08:42:32 pierre
  438. * New Gabor changes : see fixes.txt
  439. Revision 1.43 2000/04/18 11:42:36 pierre
  440. lot of Gabor changes : see fixes.txt
  441. Revision 1.42 2000/03/21 23:34:10 pierre
  442. adapted to wcedit addition by Gabor
  443. Revision 1.41 2000/03/13 20:41:34 pierre
  444. + option -S to disable the mouse
  445. * adapted to changes in fpusrscr for DOS
  446. Revision 1.40 2000/03/07 21:58:58 pierre
  447. + uses ParseUserScreen and UpdateMode
  448. Revision 1.39 2000/02/12 23:58:26 carl
  449. + Conditional define explanaations
  450. Revision 1.38 2000/02/07 11:54:17 pierre
  451. + RegisterWUtils by Gabor
  452. Revision 1.37 2000/01/25 00:26:35 pierre
  453. + Browser info saving
  454. Revision 1.36 2000/01/10 15:53:37 pierre
  455. * WViews objects were not registered
  456. Revision 1.35 2000/01/03 11:38:33 michael
  457. Changes from Gabor
  458. Revision 1.34 1999/12/20 14:23:16 pierre
  459. * MyApp renamed IDEApp
  460. * TDebugController.ResetDebuggerRows added to
  461. get resetting of debugger rows
  462. Revision 1.33 1999/12/20 09:36:49 pierre
  463. * get the mouse visible on win32 fp
  464. Revision 1.32 1999/12/10 13:02:05 pierre
  465. + VideoMode save/restore
  466. Revision 1.31 1999/09/13 11:43:59 peter
  467. * fixes from gabor, idle event, html fix
  468. Revision 1.30 1999/08/22 22:24:15 pierre
  469. * avoid objpas paramstr functions
  470. Revision 1.29 1999/08/03 20:22:25 peter
  471. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  472. + Desktop saving should work now
  473. - History saved
  474. - Clipboard content saved
  475. - Desktop saved
  476. - Symbol info saved
  477. * syntax-highlight bug fixed, which compared special keywords case sensitive
  478. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  479. * with 'whole words only' set, the editor didn't found occourences of the
  480. searched text, if the text appeared previously in the same line, but didn't
  481. satisfied the 'whole-word' condition
  482. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  483. (ie. the beginning of the selection)
  484. * when started typing in a new line, but not at the start (X=0) of it,
  485. the editor inserted the text one character more to left as it should...
  486. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  487. * Shift shouldn't cause so much trouble in TCodeEditor now...
  488. * Syntax highlight had problems recognizing a special symbol if it was
  489. prefixed by another symbol character in the source text
  490. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  491. Revision 1.28 1999/07/10 01:24:11 pierre
  492. + First implementation of watches window
  493. Revision 1.27 1999/06/29 22:43:12 peter
  494. * try to add extensions to params
  495. Revision 1.26 1999/06/28 23:31:14 pierre
  496. * typo inside go32v2 cond error removed
  497. Revision 1.25 1999/06/28 19:25:34 peter
  498. * fixes from gabor
  499. Revision 1.24 1999/06/28 12:40:56 pierre
  500. + clear tool messages at exit
  501. Revision 1.23 1999/06/25 00:48:05 pierre
  502. + adds current target in menu at startup
  503. Revision 1.22 1999/05/22 13:44:28 peter
  504. * fixed couple of bugs
  505. Revision 1.21 1999/04/07 21:55:40 peter
  506. + object support for browser
  507. * html help fixes
  508. * more desktop saving things
  509. * NODEBUG directive to exclude debugger
  510. Revision 1.20 1999/03/23 16:16:36 peter
  511. * linux fixes
  512. Revision 1.19 1999/03/23 15:11:26 peter
  513. * desktop saving things
  514. * vesa mode
  515. * preferences dialog
  516. Revision 1.18 1999/03/21 22:51:35 florian
  517. + functional screen mode switching added
  518. Revision 1.17 1999/03/16 12:38:06 peter
  519. * tools macro fixes
  520. + tph writer
  521. + first things for resource files
  522. Revision 1.16 1999/03/12 01:13:01 peter
  523. * use TryToOpen() with parameter files to overcome double opened files
  524. at startup
  525. Revision 1.15 1999/03/08 14:58:08 peter
  526. + prompt with dialogs for tools
  527. Revision 1.14 1999/03/05 17:53:00 pierre
  528. + saving and opening of open files on exit
  529. Revision 1.13 1999/03/01 15:41:48 peter
  530. + Added dummy entries for functions not yet implemented
  531. * MenuBar didn't update itself automatically on command-set changes
  532. * Fixed Debugging/Profiling options dialog
  533. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  534. set
  535. * efBackSpaceUnindents works correctly
  536. + 'Messages' window implemented
  537. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  538. + Added TP message-filter support (for ex. you can call GREP thru
  539. GREP2MSG and view the result in the messages window - just like in TP)
  540. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  541. so topic search didn't work...
  542. * In FPHELP.PAS there were still context-variables defined as word instead
  543. of THelpCtx
  544. * StdStatusKeys() was missing from the statusdef for help windows
  545. + Topic-title for index-table can be specified when adding a HTML-files
  546. Revision 1.12 1999/02/20 15:18:25 peter
  547. + ctrl-c capture with confirm dialog
  548. + ascii table in the tools menu
  549. + heapviewer
  550. * empty file fixed
  551. * fixed callback routines in fpdebug to have far for tp7
  552. Revision 1.11 1999/02/18 13:44:30 peter
  553. * search fixed
  554. + backward search
  555. * help fixes
  556. * browser updates
  557. Revision 1.10 1999/02/15 09:07:10 pierre
  558. * HEAPTRC conditionnal renamed IDEHEAPTRC
  559. Revision 1.9 1999/02/10 09:55:43 pierre
  560. + Memory tracing if compiled with -dHEAPTRC
  561. * Many memory leaks removed
  562. Revision 1.8 1999/02/08 09:30:59 florian
  563. + some split heap stuff, in $ifdef TEMPHEAP
  564. Revision 1.7 1999/02/05 13:51:38 peter
  565. * unit name of FPSwitches -> FPSwitch which is easier to use
  566. * some fixes for tp7 compiling
  567. Revision 1.6 1999/01/21 11:54:10 peter
  568. + tools menu
  569. + speedsearch in symbolbrowser
  570. * working run command
  571. Revision 1.5 1999/01/12 14:29:31 peter
  572. + Implemented still missing 'switch' entries in Options menu
  573. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  574. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  575. ASCII chars and inserted directly in the text.
  576. + Added symbol browser
  577. * splitted fp.pas to fpide.pas
  578. }