1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
{
/***************************************************************************
Lazarus.pp
-------------------
This is the lazarus editor program.
Initial Revision : Sun Mar 28 23:15:32 CST 1999
***************************************************************************/
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
* *
***************************************************************************
}
program Lazarus;
{$mode objfpc}{$H+}
{$I ide.inc}
{off $DEFINE IDE_MEM_CHECK}
uses
{$IFDEF EnableRedirectStdErr}
redirect_stderr,
{$ENDIF}
{$IF defined(HASAMIGA) and not defined(DisableMultiThreading)}
athreads,
{$ENDIF}
{$IF defined(UNIX) and not defined(DisableMultiThreading)}
cthreads,
{$ENDIF}
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
{$IF defined(Unix)}
clocale,
{$IFEND}
SysUtils,
Interfaces,
IDEInstances,//keep IDEInstances up so that it will be initialized soon
Forms, LCLProc,
IDEOptionsIntf,
LazConf, IDEGuiCmdLine,
Splash,
Main,
AboutFrm,
// use the custom IDE static packages AFTER 'main'
{$IFDEF AddStaticPkgs}
{$I staticpackages.inc}
{$ENDIF}
{$IFDEF BigIDE}
AllSynEditDsgn, LazControlDsgn, DateTimeCtrlsDsgn,
RunTimeTypeInfoControls, Printer4Lazarus, Printers4LazIDE,
LeakView, MemDSLaz, SDFLaz, InstantFPCLaz, ExternHelp,
TurboPowerIPro, TurboPowerIProDsgn,
jcfidelazarus, chmhelppkg,
FPCUnitTestRunner, FPCUnitIDE, ProjTemplates, TAChartLazarusPkg,
TodoListLaz, DateTimeCtrls, SQLDBLaz, DBFLaz, pascalscript,
EditorMacroScript, RegisterVirtualTreeView, OnlinePackageManager,
LazDebuggerFpLldb,
{$ENDIF}
MainBase;
{$I revision.inc}
{$R lazarus.res}
{$R ../images/laz_images.res}
begin
Max_Frame_Dump:=32; // the default 8 is not enough
HasGUI:=true;
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('lazarus.pp: begin');{$ENDIF}
RequireDerivedFormResource := True;
// When quick rebuilding the IDE (e.g. when the set of install packages have
// changed), only the unit paths have changed and so FPC rebuilds only the
// lazarus.pp.
// Any flag that should work with quick build must be set here.
KeepInstalledPackages:={$IF defined(BigIDE) or defined(KeepInstalledPackages)}True{$ELSE}False{$ENDIF};
// end of build flags
LazarusRevisionStr:=RevisionStr;
{$IFDEF EnableWriteLazRev}
writeln('[20180608074905] lazarus.pp ide/revision.inc: ',LazarusRevisionStr);
{$ENDIF}
Application.Scaled := True;
OnGetApplicationName:=@GetLazarusApplicationName;
{$IFDEF Windows}
// on windows when MainFormOnTaskBar = True the main form becomes
// the parent of all other forms and therefore it always shows under
// other forms. For Lazarus the main form is the component palette form
// and it is not a desired behavior to see it always under other windows.
// So until we have a good docking solution let's have a dummy taskbar windows on windows.
Application.{%H-}MainFormOnTaskBar := False;
{$ENDIF}
{$IF DEFINED(MSWINDOWS) AND DECLARED(GlobalSkipIfNoLeaks)}
// don't show empty heaptrc output dialog on windows
GlobalSkipIfNoLeaks := True;
{$ENDIF}
Application.Initialize;
LazIDEInstances.PerformCheck;
if not LazIDEInstances.StartIDE then
Exit;
LazIDEInstances.StartServer;
TMainIDE.ParseCmdLineOptions;
if not SetupMainIDEInstance then exit;
if Application.Terminated then exit;
// Show splashform
if ShowSplashScreen then begin
SplashForm := TSplashForm.Create(nil);
SplashForm.Show;
Application.ProcessMessages; // process splash paint message
end;
TMainIDE.Create(Application);
if not Application.Terminated then
begin
MainIDE.CreateOftenUsedForms;
try
MainIDE.StartIDE;
except
Application.HandleException(MainIDE);
end;
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('lazarus.pp: TMainIDE created');{$ENDIF}
try
Application.Run;
except
debugln('lazarus.pp - unhandled exception');
CleanUpPIDFile;
Halt;
end;
end;
CleanUpPIDFile;
FreeThenNil(SplashForm);
debugln('LAZARUS END - cleaning up ...');
// free the IDE, so everything is freed before the finalization sections
MainIDE.Free;
end.
|