X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2FEditor.lpr;h=421a095601225ce80cbc610fc7e1f90fd9b0f996;hb=7bc9ae2fc0204a6412aa1cb5f05f0ffa8d1870ac;hp=ccbcb60f5a95cd469fd060445b2d7c62a2f202f0;hpb=c31a0cde6506576625aab584c2c45aac9168f2dd;p=d2df-editor.git diff --git a/src/editor/Editor.lpr b/src/editor/Editor.lpr index ccbcb60..421a095 100644 --- a/src/editor/Editor.lpr +++ b/src/editor/Editor.lpr @@ -3,8 +3,8 @@ program Editor; {$INCLUDE ../shared/a_modes.inc} uses - Forms, Interfaces, - GL, GLExt, + 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', @@ -59,10 +59,77 @@ uses {$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; + Inc(i); + end; + ParamFileIndex := i; + end; + + procedure CheckParamFiles; + var i: Integer; path: AnsiString; + begin + i := ParamFileIndex; + if i <= ParamCount then + begin + path := ParamStr(i); + if path <> '' then + OpenMap(path, ''); + end; + 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.ExceptionDialog := aedOkMessageBox; + Application.AddOnExceptionHandler(THandlerObject.ExceptionHandler, True); Application.Initialize(); + CheckParamOptions; + InitLogs; + Application.CreateForm(TMainForm, MainForm); Application.CreateForm(TOptionsForm, OptionsForm); Application.CreateForm(TAboutForm, AboutForm); @@ -83,6 +150,7 @@ begin Application.CreateForm(TChooseTypeForm, ChooseTypeForm); Application.CreateForm(TSelectLanguageForm, SelectLanguageForm); - if ParamStr(1) <> '' then OpenMap(ParamStr(1), ''); + CheckParamFiles; + Application.Run(); end.