opts: add option --wads-dir
[d2df-editor.git] / src / editor / Editor.lpr
blob18f997c7c142c491e02c5f14ab87c1796c0abeba
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       else if p = '--game-wad' then
102       begin
103         if i + 1 <= ParamCount then
104         begin
105           Inc(i);
106           GameWad := ParamStr(i);
107         end;
108       end
109       else if p = '--editor-wad' then
110       begin
111         if i + 1 <= ParamCount then
112         begin
113           Inc(i);
114           EditorWad := ParamStr(i);
115         end;
116       end
117       else if p = '--wads-dir' then
118       begin
119         if i + 1 <= ParamCount then
120         begin
121           Inc(i);
122           WadsDir := ParamStr(i);
123         end;
124       end;
125       Inc(i);
126     end;
127     ParamFileIndex := i;
128   end;
130   procedure CheckParamFiles;
131     var i: Integer;
132   begin
133     i := ParamFileIndex;
134     if i <= ParamCount then
135       StartMap := ParamStr(i);
136   end;
138   procedure InitLogs;
139   begin
140     if LogFileName = '' then
141       LogFileName := 'Editor.log';
143     if LogFileName <> '' then
144       e_InitLog(LogFileName, WM_NEWFILE);
146     {$IF DECLARED(UseHeapTrace)}
147       (* http://wiki.freepascal.org/heaptrc *)
148       GlobalSkipIfNoLeaks := True;
149       //SetHeapTraceOutput('EditorLeaks.log');
150       //HaltOnError := False;
151     {$ENDIF}
152   end;
154 begin
155   Application.ExceptionDialog := aedOkMessageBox;
156   Application.AddOnExceptionHandler(THandlerObject.ExceptionHandler, True);
157   Application.Initialize();
159   EditorDir := ExtractFilePath(Application.ExeName);
160   CfgFileName := EditorDir + DirectorySeparator + 'Editor.cfg';
161   GameWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'game.wad';
162   EditorWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'editor.wad';
163   WadsDir := EditorDir + DirectorySeparator + 'wads';
165   CheckParamOptions;
166   InitLogs;
168   Application.CreateForm(TMainForm, MainForm);
169   Application.CreateForm(TOptionsForm, OptionsForm);
170   Application.CreateForm(TAboutForm, AboutForm);
171   Application.CreateForm(TMapOptionsForm, MapOptionsForm);
172   Application.CreateForm(TActivationTypeForm, ActivationTypeForm);
173   Application.CreateForm(TAddResourceForm, AddResourceForm);
174   Application.CreateForm(TKeysForm, KeysForm);
175   Application.CreateForm(TMapCheckForm, MapCheckForm);
176   Application.CreateForm(TMapOptimizationForm, MapOptimizationForm);
177   Application.CreateForm(TAddTextureForm, AddTextureForm);
178   Application.CreateForm(TSaveMapForm, SaveMapForm);
179   Application.CreateForm(TSelectMapForm, SelectMapForm);
180   Application.CreateForm(TAddSkyForm, AddSkyForm);
181   Application.CreateForm(TAddSoundForm, AddSoundForm);
182   Application.CreateForm(TSaveMiniMapForm, SaveMiniMapForm);
183   Application.CreateForm(TPackMapForm, PackMapForm);
184   Application.CreateForm(TMapTestForm, MapTestForm);
185   Application.CreateForm(TChooseTypeForm, ChooseTypeForm);
186   Application.CreateForm(TSelectLanguageForm, SelectLanguageForm);
188   CheckParamFiles;
190   Application.Run();
191 end.