fp.pas 10 KB

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