fp.pas 9.4 KB

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