system: add option --config
[d2df-editor.git] / src / editor / Editor.lpr
blob052fbb8208ff350fd50036d09ce796b92bd4459e
1 program Editor;
3 {$INCLUDE ../shared/a_modes.inc}
5 uses
6   Forms, Interfaces, Dialogs,
7   GL, GLExt, SysUtils,
8   e_graphics in '../engine/e_graphics.pas',
9   e_log in '../engine/e_log.pas',
10   e_textures in '../engine/e_textures.pas',
11   MAPSTRUCT in '../shared/MAPSTRUCT.pas',
12   MAPREADER in '../shared/MAPREADER.pas',
13   MAPWRITER in '../shared/MAPWRITER.pas',
14   MAPDEF in '../shared/MAPDEF.pas',
15   WADEDITOR in '../shared/WADEDITOR.pas',
16   WADSTRUCT in '../shared/WADSTRUCT.pas',
17   CONFIG in '../shared/CONFIG.pas',
18   xstreams in '../shared/xstreams.pas',
19   dfzip in '../shared/dfzip.pas',
20   sfs in '../sfs/sfs.pas',
21   sfsPlainFS in '../sfs/sfsPlainFS.pas',
22   sfsZipFS in '../sfs/sfsZipFS.pas',
24   f_about in 'f_about.pas' {AboutForm},
25   f_options in 'f_options.pas' {OptionsForm},
26   f_main in 'f_main.pas' {MainForm},
27   g_map in 'g_map.pas',
28   f_mapoptions in 'f_mapoptions.pas' {MapOptionsForm},
29   f_activationtype in 'f_activationtype.pas' {ActivationTypeForm},
30   f_addresource in 'f_addresource.pas' {AddResourceForm},
31   f_keys in 'f_keys.pas' {KeysForm},
32   f_mapcheck in 'f_mapcheck.pas' {MapCheckForm},
33   f_mapoptimization in 'f_mapoptimization.pas' {MapOptimizationForm},
34   g_basic in 'g_basic.pas',
35   g_textures in 'g_textures.pas',
36   f_addresource_texture in 'f_addresource_texture.pas' {AddTextureForm},
37   f_savemap in 'f_savemap.pas' {SaveMapForm},
38   f_selectmap in 'f_selectmap.pas' {SelectMapForm},
39   f_addresource_sky in 'f_addresource_sky.pas' {AddSkyForm},
40   f_addresource_sound in 'f_addresource_sound.pas' {AddSoundForm},
41   spectrum in 'spectrum.pas',
42   f_saveminimap in 'f_saveminimap.pas' {SaveMiniMapForm},
43   f_packmap in 'f_packmap.pas' {PackMapForm},
44   f_maptest in 'f_maptest.pas' {MapTestForm},
45   f_choosetype in 'f_choosetype.pas' {ChooseTypeForm},
46 {$IFNDEF NOSOUND}
47   fmod,
48   fmoderrors,
49   fmodpresets,
50   fmodtypes,
51 {$ENDIF}
52   ImagingTypes,
53   Imaging,
54   ImagingUtility,
55   g_options in 'g_options.pas',
56   g_language in 'g_language.pas',
57   f_selectlang in 'f_selectlang.pas' {SelectLanguageForm};
59 {$IFDEF WINDOWS}
60   {$R *.res}
61 {$ENDIF}
63   type
64     THandlerObject = class (TObject)
65       procedure ExceptionHandler (Sender: TObject; e: Exception);
66     end;
68   var
69     LogFileName: AnsiString = '';
70     ParamFileIndex: Integer = 1;
72   procedure THandlerObject.ExceptionHandler (Sender: TObject; e: Exception);
73   begin
74     e_WriteStackTrace(e.message);
75     MessageDlg('Unhandled exception: ' + e.message + ' (see Editor.log for more information)', mtError, [mbOK], 0);
76   end;
78   procedure CheckParamOptions;
79     var i: Integer; p: AnsiString;
80   begin
81     i := 1;
82     while (i <= ParamCount) and (Length(ParamStr(i)) > 0) and (ParamStr(i)[1] = '-') do
83     begin
84       p := ParamStr(i);
85       if p = '--log-file' then
86       begin
87         if i + 1 <= ParamCount then
88         begin
89           Inc(i);
90           LogFileName := ParamStr(i);
91         end;
92       end
93       else if p = '--config' then
94       begin
95         if i + 1 <= ParamCount then
96         begin
97           Inc(i);
98           CfgFileName := ParamStr(i);
99         end;
100       end;
101       Inc(i);
102     end;
103     ParamFileIndex := i;
104   end;
106   procedure CheckParamFiles;
107     var i: Integer; path: AnsiString;
108   begin
109     i := ParamFileIndex;
110     if i <= ParamCount then
111     begin
112       path := ParamStr(i);
113       if path <> '' then
114         OpenMap(path, '');
115     end;
116   end;
118   procedure InitLogs;
119   begin
120     if LogFileName = '' then
121       LogFileName := 'Editor.log';
123     if LogFileName <> '' then
124       e_InitLog(LogFileName, WM_NEWFILE);
126     {$IF DECLARED(UseHeapTrace)}
127       (* http://wiki.freepascal.org/heaptrc *)
128       GlobalSkipIfNoLeaks := True;
129       //SetHeapTraceOutput('EditorLeaks.log');
130       //HaltOnError := False;
131     {$ENDIF}
132   end;
134 begin
135   Application.ExceptionDialog := aedOkMessageBox;
136   Application.AddOnExceptionHandler(THandlerObject.ExceptionHandler, True);
137   Application.Initialize();
139   EditorDir := ExtractFilePath(Application.ExeName);
140   CfgFileName := EditorDir + DirectorySeparator + 'Editor.cfg';
142   CheckParamOptions;
143   InitLogs;
145   Application.CreateForm(TMainForm, MainForm);
146   Application.CreateForm(TOptionsForm, OptionsForm);
147   Application.CreateForm(TAboutForm, AboutForm);
148   Application.CreateForm(TMapOptionsForm, MapOptionsForm);
149   Application.CreateForm(TActivationTypeForm, ActivationTypeForm);
150   Application.CreateForm(TAddResourceForm, AddResourceForm);
151   Application.CreateForm(TKeysForm, KeysForm);
152   Application.CreateForm(TMapCheckForm, MapCheckForm);
153   Application.CreateForm(TMapOptimizationForm, MapOptimizationForm);
154   Application.CreateForm(TAddTextureForm, AddTextureForm);
155   Application.CreateForm(TSaveMapForm, SaveMapForm);
156   Application.CreateForm(TSelectMapForm, SelectMapForm);
157   Application.CreateForm(TAddSkyForm, AddSkyForm);
158   Application.CreateForm(TAddSoundForm, AddSoundForm);
159   Application.CreateForm(TSaveMiniMapForm, SaveMiniMapForm);
160   Application.CreateForm(TPackMapForm, PackMapForm);
161   Application.CreateForm(TMapTestForm, MapTestForm);
162   Application.CreateForm(TChooseTypeForm, ChooseTypeForm);
163   Application.CreateForm(TSelectLanguageForm, SelectLanguageForm);
165   CheckParamFiles;
167   Application.Run();
168 end.