X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2FEditor.lpr;h=171c8564c25c7313e70c80e65dc5cd8d0ee7aa10;hb=c8c226903e99aea13032c2a321809dd360dddac1;hp=a0da9cee345627e9a57ab9fcbcab4aab587b794d;hpb=b72e164f0fb64e3301ae8ca217449daf6a9d301d;p=d2df-editor.git diff --git a/src/editor/Editor.lpr b/src/editor/Editor.lpr index a0da9ce..171c856 100644 --- a/src/editor/Editor.lpr +++ b/src/editor/Editor.lpr @@ -1,10 +1,10 @@ program Editor; -{$MODE Delphi} +{$INCLUDE ../shared/a_modes.inc} uses - Forms, Interfaces, - dglOpenGL in '../lib/dgl/dglOpenGL.pas', + Forms, Interfaces, Dialogs, + GL, GLExt, SysUtils, e_graphics in '../engine/e_graphics.pas', e_log in '../engine/e_log.pas', e_textures in '../engine/e_textures.pas', @@ -15,6 +15,12 @@ uses WADEDITOR in '../shared/WADEDITOR.pas', WADSTRUCT in '../shared/WADSTRUCT.pas', CONFIG in '../shared/CONFIG.pas', + xstreams in '../shared/xstreams.pas', + dfzip in '../shared/dfzip.pas', + sfs in '../sfs/sfs.pas', + sfsPlainFS in '../sfs/sfsPlainFS.pas', + sfsZipFS in '../sfs/sfsZipFS.pas', + f_about in 'f_about.pas' {AboutForm}, f_options in 'f_options.pas' {OptionsForm}, f_main in 'f_main.pas' {MainForm}, @@ -37,17 +43,119 @@ uses f_packmap in 'f_packmap.pas' {PackMapForm}, f_maptest in 'f_maptest.pas' {MapTestForm}, f_choosetype in 'f_choosetype.pas' {ChooseTypeForm}, - fmod in '../lib/fmod/fmod.pas', - fmoderrors in '../lib/fmod/fmoderrors.pas', - fmodpresets in '../lib/fmod/fmodpresets.pas', - fmodtypes in '../lib/fmod/fmodtypes.pas', +{$IFNDEF NOSOUND} + fmod, + fmoderrors, + fmodpresets, + fmodtypes, +{$ENDIF} + ImagingTypes, + Imaging, + ImagingUtility, + g_options in 'g_options.pas', g_language in 'g_language.pas', f_selectlang in 'f_selectlang.pas' {SelectLanguageForm}; -{$R *.res} +{$IFDEF WINDOWS} + {$R *.res} +{$ENDIF} + + type + THandlerObject = class (TObject) + procedure ExceptionHandler (Sender: TObject; e: Exception); + end; + + var + LogFileName: AnsiString = ''; + ParamFileIndex: Integer = 1; + + procedure THandlerObject.ExceptionHandler (Sender: TObject; e: Exception); + begin + e_WriteStackTrace(e.message); + MessageDlg('Unhandled exception: ' + e.message + ' (see Editor.log for more information)', mtError, [mbOK], 0); + end; + + procedure CheckParamOptions; + var i: Integer; p: AnsiString; + begin + i := 1; + while (i <= ParamCount) and (Length(ParamStr(i)) > 0) and (ParamStr(i)[1] = '-') do + begin + p := ParamStr(i); + if p = '--log-file' then + begin + if i + 1 <= ParamCount then + begin + Inc(i); + LogFileName := ParamStr(i); + end; + end + else if p = '--config' then + begin + if i + 1 <= ParamCount then + begin + Inc(i); + CfgFileName := ParamStr(i); + end; + end + else if p = '--game-wad' then + begin + if i + 1 <= ParamCount then + begin + Inc(i); + GameWad := ParamStr(i); + end; + end + else if p = '--editor-wad' then + begin + if i + 1 <= ParamCount then + begin + Inc(i); + EditorWad := ParamStr(i); + end; + end; + Inc(i); + end; + ParamFileIndex := i; + end; + + procedure CheckParamFiles; + var i: Integer; + begin + i := ParamFileIndex; + if i <= ParamCount then + StartMap := ParamStr(i); + end; + + procedure InitLogs; + begin + if LogFileName = '' then + LogFileName := 'Editor.log'; + + if LogFileName <> '' then + e_InitLog(LogFileName, WM_NEWFILE); + + {$IF DECLARED(UseHeapTrace)} + (* http://wiki.freepascal.org/heaptrc *) + GlobalSkipIfNoLeaks := True; + //SetHeapTraceOutput('EditorLeaks.log'); + //HaltOnError := False; + {$ENDIF} + end; begin - Application.Initialize; + Application.ExceptionDialog := aedOkMessageBox; + Application.AddOnExceptionHandler(THandlerObject.ExceptionHandler, True); + Application.Initialize(); + + EditorDir := ExtractFilePath(Application.ExeName); + CfgFileName := EditorDir + DirectorySeparator + 'Editor.cfg'; + GameWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'game.wad'; + EditorWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'editor.wad'; + + CheckParamOptions; + InitLogs; + Application.CreateForm(TMainForm, MainForm); Application.CreateForm(TOptionsForm, OptionsForm); Application.CreateForm(TAboutForm, AboutForm); @@ -67,7 +175,8 @@ begin Application.CreateForm(TMapTestForm, MapTestForm); Application.CreateForm(TChooseTypeForm, ChooseTypeForm); Application.CreateForm(TSelectLanguageForm, SelectLanguageForm); - if ParamStr(1) <> '' then OpenMap(ParamStr(1), ''); - Application.Run; + CheckParamFiles; + + Application.Run(); end.