fp.pas 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  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. {$ifdef IDEHeapTrc}
  22. HeapTrc,
  23. {$endif IDEHeapTrc}
  24. {$ifdef go32v2}
  25. dpmiexcp,
  26. {$endif go32v2}
  27. {$ifdef exedebug}
  28. lineinfo,
  29. {$endif exedebug}
  30. Dos,Objects,
  31. BrowCol,
  32. Drivers,Views,App,Dialogs,ColorSel,Menus,StdDlg,Validate,
  33. {$ifdef EDITORS}Editors{$else}WEditor,WCEdit{$endif},
  34. ASCIITab,Calc,
  35. WUtils,WViews,WHTMLScn,
  36. FPIDE,FPCalc,FPCompile,
  37. FPIni,FPViews,FPConst,FPVars,FPUtils,FPHelp,FPSwitch,FPUsrScr,
  38. FPTools,{$ifndef NODEBUG}FPDebug,{$endif}FPTemplt,FPCatch,FPRedir,FPDesk,
  39. FPCodTmp,FPCodCmp;
  40. procedure ProcessParams(BeforeINI: boolean);
  41. function IsSwitch(const Param: string): boolean;
  42. begin
  43. IsSwitch:=(Param<>'') and (Param[1]<>DirSep) { <- allow UNIX root-relative paths }
  44. and (Param[1] in ['-','/']); { <- but still accept dos switch char, eg. '/' }
  45. end;
  46. var I: Sw_integer;
  47. Param: string;
  48. begin
  49. for I:=1 to ParamCount do
  50. begin
  51. Param:=System.ParamStr(I);
  52. if IsSwitch(Param) then
  53. begin
  54. Param:=copy(Param,2,255);
  55. if Param<>'' then
  56. if UpcaseStr(copy(Param,1,2))='HM' then
  57. { HeapMonitor }
  58. begin
  59. if (copy(Param,3,1)='+') or (copy(Param,3,1)='') then
  60. StartupOptions:=StartupOptions or soHeapMonitor
  61. else
  62. if (copy(Param,3,1)='-') then
  63. StartupOptions:=StartupOptions and not soHeapMonitor;
  64. end else
  65. {$ifdef go32v2}
  66. if UpcaseStr(Param)='NOLFN' then
  67. begin
  68. LFNSupport:=false;
  69. end else
  70. {$endif go32v2}
  71. if UpcaseStr(Param)='README' then
  72. begin
  73. ShowReadme:=true;
  74. end else
  75. case Upcase(Param[1]) of
  76. 'C' : { custom config file (BP compatiblity) }
  77. if BeforeINI then
  78. begin
  79. if (length(Param)>=1) and (Param[1] in['=',':']) then
  80. Delete(Param,1,1); { eat separator }
  81. IniFileName:=Param;
  82. end;
  83. 'R' : { enter the directory last exited from (BP comp.) }
  84. begin
  85. Param:=copy(Param,2,255);
  86. if (Param='') or (Param='+') then
  87. StartupOptions:=StartupOptions or soReturnToLastDir
  88. else
  89. if (Param='-') then
  90. StartupOptions:=StartupOptions and (not soReturnToLastDir);
  91. end;
  92. 'S' :
  93. if Length(Param)=1 then
  94. begin
  95. UseMouse:=false;
  96. ButtonCount:=0;
  97. end;
  98. end;
  99. end
  100. else
  101. if not BeforeINI then
  102. TryToOpenFile(nil,Param,0,0,{false}true);
  103. end;
  104. end;
  105. Procedure MyStreamError(Var S: TStream); {$ifndef FPC}far;{$endif}
  106. var ErrS: string;
  107. begin
  108. case S.Status of
  109. stGetError : ErrS:='Get of unregistered object type';
  110. stPutError : ErrS:='Put of unregistered object type';
  111. else ErrS:='';
  112. end;
  113. if ErrS<>'' then
  114. begin
  115. {$ifdef GABOR}{$ifdef TP}asm int 3;end;{$endif}{$endif}
  116. if Assigned(Application) then
  117. ErrorBox('Stream error: '+#13+ErrS,nil)
  118. else
  119. writeln('Error: ',ErrS);
  120. end;
  121. end;
  122. procedure DelTempFiles;
  123. begin
  124. DeleteFile(FPOutFileName);
  125. DeleteFile(FPErrFileName);
  126. DeleteFile(GDBOutFileName);
  127. DeleteFile(GDBOutPutFileName);
  128. DeleteFile(GREPOutName);
  129. DeleteFile(GREPErrName);
  130. end;
  131. procedure RegisterIDEObjects;
  132. begin
  133. RegisterApp;
  134. RegisterAsciiTab;
  135. RegisterCalc;
  136. RegisterCodeComplete;
  137. RegisterCodeTemplates;
  138. RegisterColorSel;
  139. RegisterDialogs;
  140. {$ifdef EDITORS}
  141. RegisterEditors;
  142. {$else}
  143. RegisterWEditor;
  144. RegisterWCEdit;
  145. {$endif}
  146. RegisterFPCalc;
  147. RegisterFPCompile;
  148. RegisterFPTools;
  149. RegisterFPViews;
  150. {$ifndef NODEBUG}
  151. RegisterFPDebugViews;
  152. {$endif}
  153. RegisterMenus;
  154. RegisterStdDlg;
  155. RegisterSymbols;
  156. RegisterObjects;
  157. RegisterValidate;
  158. RegisterViews;
  159. RegisterWHTMLScan;
  160. RegisterWUtils;
  161. RegisterWViews;
  162. end;
  163. var CanExit : boolean;
  164. BEGIN
  165. {$ifdef DEV}HeapLimit:=4096;{$endif}
  166. writeln('þ Free Pascal IDE Version '+VersionStr);
  167. ProcessParams(true);
  168. StartupDir:=CompleteDir(FExpand('.'));
  169. IDEDir:=CompleteDir(DirOf(system.Paramstr(0)));
  170. RegisterIDEObjects;
  171. StreamError:=@MyStreamError;
  172. ShowReadme:=ShowReadme or (LocateFile(INIFileName)='');
  173. {$ifdef win32}
  174. DosExecute(GetEnv('COMSPEC'),'/C echo This dummy call gets the mouse to become visible');
  175. {$endif win32}
  176. {$ifdef VESA}
  177. InitVESAScreenModes;
  178. {$endif}
  179. InitRedir;
  180. {$ifndef NODEBUG}
  181. InitBreakpoints;
  182. InitWatches;
  183. {$endif}
  184. InitReservedWords;
  185. InitHelpFiles;
  186. InitSwitches;
  187. InitINIFile;
  188. InitUserScreen;
  189. InitTools;
  190. InitTemplates;
  191. InitCodeTemplates;
  192. InitCodeComplete;
  193. ReadSwitches(SwitchesPath);
  194. IDEApp.Init;
  195. { load all options after init because of open files }
  196. ReadINIFile;
  197. InitDesktopFile;
  198. LoadDesktop;
  199. ParseUserScreen;
  200. { why are the screen contents parsed at startup? Gabor }
  201. { Update IDE }
  202. IDEApp.Update;
  203. IDEApp.UpdateMode;
  204. IDEApp.UpdateTarget;
  205. ProcessParams(false);
  206. if ShowReadme then
  207. begin
  208. PutCommand(Application,evCommand,cmShowReadme,nil);
  209. ShowReadme:=false; { do not show next time }
  210. end;
  211. repeat
  212. IDEApp.Run;
  213. if (AutoSaveOptions and asEditorFiles)=0 then
  214. CanExit:=IDEApp.AskSaveAll
  215. else
  216. CanExit:=IDEApp.SaveAll;
  217. until CanExit;
  218. IDEApp.AutoSave;
  219. DoneDesktopFile;
  220. DelTempFiles;
  221. IDEApp.Done;
  222. WriteSwitches(SwitchesPath);
  223. DoneCodeComplete;
  224. DoneCodeTemplates;
  225. DoneTemplates;
  226. DoneTools;
  227. DoneUserScreen;
  228. DoneSwitches;
  229. DoneHelpFiles;
  230. DoneReservedWords;
  231. ClearToolMessages;
  232. DoneBrowserCol;
  233. {$ifndef NODEBUG}
  234. DoneDebugger;
  235. DoneBreakpoints;
  236. DoneWatches;
  237. {$endif}
  238. StreamError:=nil;
  239. END.
  240. {
  241. $Log$
  242. Revision 1.47 2000-06-16 08:50:40 pierre
  243. + new bunch of Gabor's changes
  244. Revision 1.46 2000/05/29 10:44:56 pierre
  245. + New bunch of Gabor's changes: see fixes.txt
  246. Revision 1.45 2000/05/02 08:42:26 pierre
  247. * new set of Gabor changes: see fixes.txt
  248. Revision 1.44 2000/04/25 08:42:32 pierre
  249. * New Gabor changes : see fixes.txt
  250. Revision 1.43 2000/04/18 11:42:36 pierre
  251. lot of Gabor changes : see fixes.txt
  252. Revision 1.42 2000/03/21 23:34:10 pierre
  253. adapted to wcedit addition by Gabor
  254. Revision 1.41 2000/03/13 20:41:34 pierre
  255. + option -S to disable the mouse
  256. * adapted to changes in fpusrscr for DOS
  257. Revision 1.40 2000/03/07 21:58:58 pierre
  258. + uses ParseUserScreen and UpdateMode
  259. Revision 1.39 2000/02/12 23:58:26 carl
  260. + Conditional define explanaations
  261. Revision 1.38 2000/02/07 11:54:17 pierre
  262. + RegisterWUtils by Gabor
  263. Revision 1.37 2000/01/25 00:26:35 pierre
  264. + Browser info saving
  265. Revision 1.36 2000/01/10 15:53:37 pierre
  266. * WViews objects were not registered
  267. Revision 1.35 2000/01/03 11:38:33 michael
  268. Changes from Gabor
  269. Revision 1.34 1999/12/20 14:23:16 pierre
  270. * MyApp renamed IDEApp
  271. * TDebugController.ResetDebuggerRows added to
  272. get resetting of debugger rows
  273. Revision 1.33 1999/12/20 09:36:49 pierre
  274. * get the mouse visible on win32 fp
  275. Revision 1.32 1999/12/10 13:02:05 pierre
  276. + VideoMode save/restore
  277. Revision 1.31 1999/09/13 11:43:59 peter
  278. * fixes from gabor, idle event, html fix
  279. Revision 1.30 1999/08/22 22:24:15 pierre
  280. * avoid objpas paramstr functions
  281. Revision 1.29 1999/08/03 20:22:25 peter
  282. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  283. + Desktop saving should work now
  284. - History saved
  285. - Clipboard content saved
  286. - Desktop saved
  287. - Symbol info saved
  288. * syntax-highlight bug fixed, which compared special keywords case sensitive
  289. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  290. * with 'whole words only' set, the editor didn't found occourences of the
  291. searched text, if the text appeared previously in the same line, but didn't
  292. satisfied the 'whole-word' condition
  293. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  294. (ie. the beginning of the selection)
  295. * when started typing in a new line, but not at the start (X=0) of it,
  296. the editor inserted the text one character more to left as it should...
  297. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  298. * Shift shouldn't cause so much trouble in TCodeEditor now...
  299. * Syntax highlight had problems recognizing a special symbol if it was
  300. prefixed by another symbol character in the source text
  301. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  302. Revision 1.28 1999/07/10 01:24:11 pierre
  303. + First implementation of watches window
  304. Revision 1.27 1999/06/29 22:43:12 peter
  305. * try to add extensions to params
  306. Revision 1.26 1999/06/28 23:31:14 pierre
  307. * typo inside go32v2 cond error removed
  308. Revision 1.25 1999/06/28 19:25:34 peter
  309. * fixes from gabor
  310. Revision 1.24 1999/06/28 12:40:56 pierre
  311. + clear tool messages at exit
  312. Revision 1.23 1999/06/25 00:48:05 pierre
  313. + adds current target in menu at startup
  314. Revision 1.22 1999/05/22 13:44:28 peter
  315. * fixed couple of bugs
  316. Revision 1.21 1999/04/07 21:55:40 peter
  317. + object support for browser
  318. * html help fixes
  319. * more desktop saving things
  320. * NODEBUG directive to exclude debugger
  321. Revision 1.20 1999/03/23 16:16:36 peter
  322. * linux fixes
  323. Revision 1.19 1999/03/23 15:11:26 peter
  324. * desktop saving things
  325. * vesa mode
  326. * preferences dialog
  327. Revision 1.18 1999/03/21 22:51:35 florian
  328. + functional screen mode switching added
  329. Revision 1.17 1999/03/16 12:38:06 peter
  330. * tools macro fixes
  331. + tph writer
  332. + first things for resource files
  333. Revision 1.16 1999/03/12 01:13:01 peter
  334. * use TryToOpen() with parameter files to overcome double opened files
  335. at startup
  336. Revision 1.15 1999/03/08 14:58:08 peter
  337. + prompt with dialogs for tools
  338. Revision 1.14 1999/03/05 17:53:00 pierre
  339. + saving and opening of open files on exit
  340. Revision 1.13 1999/03/01 15:41:48 peter
  341. + Added dummy entries for functions not yet implemented
  342. * MenuBar didn't update itself automatically on command-set changes
  343. * Fixed Debugging/Profiling options dialog
  344. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  345. set
  346. * efBackSpaceUnindents works correctly
  347. + 'Messages' window implemented
  348. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  349. + Added TP message-filter support (for ex. you can call GREP thru
  350. GREP2MSG and view the result in the messages window - just like in TP)
  351. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  352. so topic search didn't work...
  353. * In FPHELP.PAS there were still context-variables defined as word instead
  354. of THelpCtx
  355. * StdStatusKeys() was missing from the statusdef for help windows
  356. + Topic-title for index-table can be specified when adding a HTML-files
  357. Revision 1.12 1999/02/20 15:18:25 peter
  358. + ctrl-c capture with confirm dialog
  359. + ascii table in the tools menu
  360. + heapviewer
  361. * empty file fixed
  362. * fixed callback routines in fpdebug to have far for tp7
  363. Revision 1.11 1999/02/18 13:44:30 peter
  364. * search fixed
  365. + backward search
  366. * help fixes
  367. * browser updates
  368. Revision 1.10 1999/02/15 09:07:10 pierre
  369. * HEAPTRC conditionnal renamed IDEHEAPTRC
  370. Revision 1.9 1999/02/10 09:55:43 pierre
  371. + Memory tracing if compiled with -dHEAPTRC
  372. * Many memory leaks removed
  373. Revision 1.8 1999/02/08 09:30:59 florian
  374. + some split heap stuff, in $ifdef TEMPHEAP
  375. Revision 1.7 1999/02/05 13:51:38 peter
  376. * unit name of FPSwitches -> FPSwitch which is easier to use
  377. * some fixes for tp7 compiling
  378. Revision 1.6 1999/01/21 11:54:10 peter
  379. + tools menu
  380. + speedsearch in symbolbrowser
  381. * working run command
  382. Revision 1.5 1999/01/12 14:29:31 peter
  383. + Implemented still missing 'switch' entries in Options menu
  384. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  385. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  386. ASCII chars and inserted directly in the text.
  387. + Added symbol browser
  388. * splitted fp.pas to fpide.pas
  389. }