fp.pas 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  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. '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 win32}
  124. DosExecute(GetEnv('COMSPEC'),'/C echo Win32 mouse test');
  125. {$endif win32}
  126. {$ifdef VESA}
  127. InitVESAScreenModes;
  128. {$endif}
  129. InitRedir;
  130. {$ifndef NODEBUG}
  131. InitBreakpoints;
  132. InitWatches;
  133. {$endif}
  134. InitReservedWords;
  135. InitHelpFiles;
  136. InitSwitches;
  137. InitINIFile;
  138. InitUserScreen;
  139. InitTools;
  140. InitTemplates;
  141. InitCodeTemplates;
  142. InitCodeComplete;
  143. ReadSwitches(SwitchesPath);
  144. IDEApp.Init;
  145. { load all options after init because of open files }
  146. ReadINIFile;
  147. InitDesktopFile;
  148. LoadDesktop;
  149. { Update IDE }
  150. IDEApp.Update;
  151. IDEApp.UpdateTarget;
  152. ProcessParams(false);
  153. repeat
  154. IDEApp.Run;
  155. if (AutoSaveOptions and asEditorFiles)=0 then
  156. CanExit:=true
  157. else
  158. CanExit:=IDEApp.SaveAll;
  159. until CanExit;
  160. IDEApp.AutoSave;
  161. DoneDesktopFile;
  162. IDEApp.Done;
  163. WriteSwitches(SwitchesPath);
  164. DoneCodeComplete;
  165. DoneCodeTemplates;
  166. DoneTemplates;
  167. DoneTools;
  168. DoneUserScreen;
  169. DoneSwitches;
  170. DoneHelpFiles;
  171. DoneReservedWords;
  172. ClearToolMessages;
  173. DoneBrowserCol;
  174. {$ifndef NODEBUG}
  175. DoneDebugger;
  176. DoneBreakpoints;
  177. DoneWatches;
  178. {$endif}
  179. StreamError:=nil;
  180. END.
  181. {
  182. $Log$
  183. Revision 1.35 2000-01-03 11:38:33 michael
  184. Changes from Gabor
  185. Revision 1.34 1999/12/20 14:23:16 pierre
  186. * MyApp renamed IDEApp
  187. * TDebugController.ResetDebuggerRows added to
  188. get resetting of debugger rows
  189. Revision 1.33 1999/12/20 09:36:49 pierre
  190. * get the mouse visible on win32 fp
  191. Revision 1.32 1999/12/10 13:02:05 pierre
  192. + VideoMode save/restore
  193. Revision 1.31 1999/09/13 11:43:59 peter
  194. * fixes from gabor, idle event, html fix
  195. Revision 1.30 1999/08/22 22:24:15 pierre
  196. * avoid objpas paramstr functions
  197. Revision 1.29 1999/08/03 20:22:25 peter
  198. + TTab acts now on Ctrl+Tab and Ctrl+Shift+Tab...
  199. + Desktop saving should work now
  200. - History saved
  201. - Clipboard content saved
  202. - Desktop saved
  203. - Symbol info saved
  204. * syntax-highlight bug fixed, which compared special keywords case sensitive
  205. (for ex. 'asm' caused asm-highlighting, while 'ASM' didn't)
  206. * with 'whole words only' set, the editor didn't found occourences of the
  207. searched text, if the text appeared previously in the same line, but didn't
  208. satisfied the 'whole-word' condition
  209. * ^QB jumped to (SelStart.X,SelEnd.X) instead of (SelStart.X,SelStart.Y)
  210. (ie. the beginning of the selection)
  211. * when started typing in a new line, but not at the start (X=0) of it,
  212. the editor inserted the text one character more to left as it should...
  213. * TCodeEditor.HideSelection (Ctrl-K+H) didn't update the screen
  214. * Shift shouldn't cause so much trouble in TCodeEditor now...
  215. * Syntax highlight had problems recognizing a special symbol if it was
  216. prefixed by another symbol character in the source text
  217. * Auto-save also occours at Dos shell, Tool execution, etc. now...
  218. Revision 1.28 1999/07/10 01:24:11 pierre
  219. + First implementation of watches window
  220. Revision 1.27 1999/06/29 22:43:12 peter
  221. * try to add extensions to params
  222. Revision 1.26 1999/06/28 23:31:14 pierre
  223. * typo inside go32v2 cond error removed
  224. Revision 1.25 1999/06/28 19:25:34 peter
  225. * fixes from gabor
  226. Revision 1.24 1999/06/28 12:40:56 pierre
  227. + clear tool messages at exit
  228. Revision 1.23 1999/06/25 00:48:05 pierre
  229. + adds current target in menu at startup
  230. Revision 1.22 1999/05/22 13:44:28 peter
  231. * fixed couple of bugs
  232. Revision 1.21 1999/04/07 21:55:40 peter
  233. + object support for browser
  234. * html help fixes
  235. * more desktop saving things
  236. * NODEBUG directive to exclude debugger
  237. Revision 1.20 1999/03/23 16:16:36 peter
  238. * linux fixes
  239. Revision 1.19 1999/03/23 15:11:26 peter
  240. * desktop saving things
  241. * vesa mode
  242. * preferences dialog
  243. Revision 1.18 1999/03/21 22:51:35 florian
  244. + functional screen mode switching added
  245. Revision 1.17 1999/03/16 12:38:06 peter
  246. * tools macro fixes
  247. + tph writer
  248. + first things for resource files
  249. Revision 1.16 1999/03/12 01:13:01 peter
  250. * use TryToOpen() with parameter files to overcome double opened files
  251. at startup
  252. Revision 1.15 1999/03/08 14:58:08 peter
  253. + prompt with dialogs for tools
  254. Revision 1.14 1999/03/05 17:53:00 pierre
  255. + saving and opening of open files on exit
  256. Revision 1.13 1999/03/01 15:41:48 peter
  257. + Added dummy entries for functions not yet implemented
  258. * MenuBar didn't update itself automatically on command-set changes
  259. * Fixed Debugging/Profiling options dialog
  260. * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
  261. set
  262. * efBackSpaceUnindents works correctly
  263. + 'Messages' window implemented
  264. + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
  265. + Added TP message-filter support (for ex. you can call GREP thru
  266. GREP2MSG and view the result in the messages window - just like in TP)
  267. * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
  268. so topic search didn't work...
  269. * In FPHELP.PAS there were still context-variables defined as word instead
  270. of THelpCtx
  271. * StdStatusKeys() was missing from the statusdef for help windows
  272. + Topic-title for index-table can be specified when adding a HTML-files
  273. Revision 1.12 1999/02/20 15:18:25 peter
  274. + ctrl-c capture with confirm dialog
  275. + ascii table in the tools menu
  276. + heapviewer
  277. * empty file fixed
  278. * fixed callback routines in fpdebug to have far for tp7
  279. Revision 1.11 1999/02/18 13:44:30 peter
  280. * search fixed
  281. + backward search
  282. * help fixes
  283. * browser updates
  284. Revision 1.10 1999/02/15 09:07:10 pierre
  285. * HEAPTRC conditionnal renamed IDEHEAPTRC
  286. Revision 1.9 1999/02/10 09:55:43 pierre
  287. + Memory tracing if compiled with -dHEAPTRC
  288. * Many memory leaks removed
  289. Revision 1.8 1999/02/08 09:30:59 florian
  290. + some split heap stuff, in $ifdef TEMPHEAP
  291. Revision 1.7 1999/02/05 13:51:38 peter
  292. * unit name of FPSwitches -> FPSwitch which is easier to use
  293. * some fixes for tp7 compiling
  294. Revision 1.6 1999/01/21 11:54:10 peter
  295. + tools menu
  296. + speedsearch in symbolbrowser
  297. * working run command
  298. Revision 1.5 1999/01/12 14:29:31 peter
  299. + Implemented still missing 'switch' entries in Options menu
  300. + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
  301. ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
  302. ASCII chars and inserted directly in the text.
  303. + Added symbol browser
  304. * splitted fp.pas to fpide.pas
  305. }