fp.pas 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  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.1 2000-07-13 09:48:34 michael
  243. + Initial import
  244. Revision 1.47 2000/06/16 08:50:40 pierre
  245. + new bunch of Gabor's changes
  246. Revision 1.46 2000/05/29 10:44:56 pierre
  247. + New bunch of Gabor's changes: see fixes.txt
  248. Revision 1.45 2000/05/02 08:42:26 pierre
  249. * new set of Gabor changes: see fixes.txt
  250. Revision 1.44 2000/04/25 08:42:32 pierre
  251. * New Gabor changes : see fixes.txt
  252. Revision 1.43 2000/04/18 11:42:36 pierre
  253. lot of Gabor changes : see fixes.txt
  254. Revision 1.42 2000/03/21 23:34:10 pierre
  255. adapted to wcedit addition by Gabor
  256. Revision 1.41 2000/03/13 20:41:34 pierre
  257. + option -S to disable the mouse
  258. * adapted to changes in fpusrscr for DOS
  259. Revision 1.40 2000/03/07 21:58:58 pierre
  260. + uses ParseUserScreen and UpdateMode
  261. Revision 1.39 2000/02/12 23:58:26 carl
  262. + Conditional define explanaations
  263. Revision 1.38 2000/02/07 11:54:17 pierre
  264. + RegisterWUtils by Gabor
  265. Revision 1.37 2000/01/25 00:26:35 pierre
  266. + Browser info saving
  267. Revision 1.36 2000/01/10 15:53:37 pierre
  268. * WViews objects were not registered
  269. Revision 1.35 2000/01/03 11:38:33 michael
  270. Changes from Gabor
  271. Revision 1.34 1999/12/20 14:23:16 pierre
  272. * MyApp renamed IDEApp
  273. * TDebugController.ResetDebuggerRows added to
  274. get resetting of debugger rows
  275. Revision 1.33 1999/12/20 09:36:49 pierre
  276. * get the mouse visible on win32 fp
  277. Revision 1.32 1999/12/10 13:02:05 pierre
  278. + VideoMode save/restore
  279. Revision 1.31 1999/09/13 11:43:59 peter
  280. * fixes from gabor, idle event, html fix
  281. Revision 1.30 1999/08/22 22:24:15 pierre
  282. * avoid objpas paramstr functions
  283. Revision 1.29 1999/08/03 20:22:25 peter
  284. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  285. + Desktop saving should work now
  286. - History saved
  287. - Clipboard content saved
  288. - Desktop saved
  289. - Symbol info saved
  290. * syntax-highlight bug fixed, which compared special keywords case sensitive
  291. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  292. * with 'whole words only' set, the editor didn't found occourences of the
  293. searched text, if the text appeared previously in the same line, but didn't
  294. satisfied the 'whole-word' condition
  295. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  296. (ie. the beginning of the selection)
  297. * when started typing in a new line, but not at the start (X=0) of it,
  298. the editor inserted the text one character more to left as it should...
  299. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  300. * Shift shouldn't cause so much trouble in TCodeEditor now...
  301. * Syntax highlight had problems recognizing a special symbol if it was
  302. prefixed by another symbol character in the source text
  303. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  304. Revision 1.28 1999/07/10 01:24:11 pierre
  305. + First implementation of watches window
  306. Revision 1.27 1999/06/29 22:43:12 peter
  307. * try to add extensions to params
  308. Revision 1.26 1999/06/28 23:31:14 pierre
  309. * typo inside go32v2 cond error removed
  310. Revision 1.25 1999/06/28 19:25:34 peter
  311. * fixes from gabor
  312. Revision 1.24 1999/06/28 12:40:56 pierre
  313. + clear tool messages at exit
  314. Revision 1.23 1999/06/25 00:48:05 pierre
  315. + adds current target in menu at startup
  316. Revision 1.22 1999/05/22 13:44:28 peter
  317. * fixed couple of bugs
  318. Revision 1.21 1999/04/07 21:55:40 peter
  319. + object support for browser
  320. * html help fixes
  321. * more desktop saving things
  322. * NODEBUG directive to exclude debugger
  323. Revision 1.20 1999/03/23 16:16:36 peter
  324. * linux fixes
  325. Revision 1.19 1999/03/23 15:11:26 peter
  326. * desktop saving things
  327. * vesa mode
  328. * preferences dialog
  329. Revision 1.18 1999/03/21 22:51:35 florian
  330. + functional screen mode switching added
  331. Revision 1.17 1999/03/16 12:38:06 peter
  332. * tools macro fixes
  333. + tph writer
  334. + first things for resource files
  335. Revision 1.16 1999/03/12 01:13:01 peter
  336. * use TryToOpen() with parameter files to overcome double opened files
  337. at startup
  338. Revision 1.15 1999/03/08 14:58:08 peter
  339. + prompt with dialogs for tools
  340. Revision 1.14 1999/03/05 17:53:00 pierre
  341. + saving and opening of open files on exit
  342. Revision 1.13 1999/03/01 15:41:48 peter
  343. + Added dummy entries for functions not yet implemented
  344. * MenuBar didn't update itself automatically on command-set changes
  345. * Fixed Debugging/Profiling options dialog
  346. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  347. set
  348. * efBackSpaceUnindents works correctly
  349. + 'Messages' window implemented
  350. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  351. + Added TP message-filter support (for ex. you can call GREP thru
  352. GREP2MSG and view the result in the messages window - just like in TP)
  353. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  354. so topic search didn't work...
  355. * In FPHELP.PAS there were still context-variables defined as word instead
  356. of THelpCtx
  357. * StdStatusKeys() was missing from the statusdef for help windows
  358. + Topic-title for index-table can be specified when adding a HTML-files
  359. Revision 1.12 1999/02/20 15:18:25 peter
  360. + ctrl-c capture with confirm dialog
  361. + ascii table in the tools menu
  362. + heapviewer
  363. * empty file fixed
  364. * fixed callback routines in fpdebug to have far for tp7
  365. Revision 1.11 1999/02/18 13:44:30 peter
  366. * search fixed
  367. + backward search
  368. * help fixes
  369. * browser updates
  370. Revision 1.10 1999/02/15 09:07:10 pierre
  371. * HEAPTRC conditionnal renamed IDEHEAPTRC
  372. Revision 1.9 1999/02/10 09:55:43 pierre
  373. + Memory tracing if compiled with -dHEAPTRC
  374. * Many memory leaks removed
  375. Revision 1.8 1999/02/08 09:30:59 florian
  376. + some split heap stuff, in $ifdef TEMPHEAP
  377. Revision 1.7 1999/02/05 13:51:38 peter
  378. * unit name of FPSwitches -> FPSwitch which is easier to use
  379. * some fixes for tp7 compiling
  380. Revision 1.6 1999/01/21 11:54:10 peter
  381. + tools menu
  382. + speedsearch in symbolbrowser
  383. * working run command
  384. Revision 1.5 1999/01/12 14:29:31 peter
  385. + Implemented still missing 'switch' entries in Options menu
  386. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  387. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  388. ASCII chars and inserted directly in the text.
  389. + Added symbol browser
  390. * splitted fp.pas to fpide.pas
  391. }