diff --git a/src/editor/Editor.lpr b/src/editor/Editor.lpr
index 421a095601225ce80cbc610fc7e1f90fd9b0f996..95692d90bcb0c49d5f78d449012caca91cb929c3 100644 (file)
--- a/src/editor/Editor.lpr
+++ b/src/editor/Editor.lpr
{$INCLUDE ../shared/a_modes.inc}
uses
+ {$IFDEF DARWIN}
+ MacOSAll, CocoaAll,
+ {$ENDIF}
Forms, Interfaces, Dialogs,
GL, GLExt, SysUtils,
e_graphics in '../engine/e_graphics.pas',
ImagingTypes,
Imaging,
ImagingUtility,
+ g_options in 'g_options.pas',
g_language in 'g_language.pas',
f_selectlang in 'f_selectlang.pas' {SelectLanguageForm};
LogFileName: AnsiString = '';
ParamFileIndex: Integer = 1;
+{$IFDEF DARWIN}
+ function NSStringToAnsiString (s: NSString): AnsiString;
+ var i: Integer;
+ begin
+ result := '';
+ for i := 0 to s.length - 1 do
+ result := result + AnsiChar(s.characterAtIndex(i));
+ end;
+
+ function GetBundlePath (): AnsiString;
+ var pathRef: CFURLRef; pathCFStr: CFStringRef; pathStr: ShortString;
+ begin
+ pathRef := CFBundleCopyBundleURL(CFBundleGetMainBundle());
+ pathCFStr := CFURLCopyFileSystemPath(pathRef, kCFURLPOSIXPathStyle);
+ CFStringGetPascalString(pathCFStr, @pathStr, 255, CFStringGetSystemEncoding());
+ CFRelease(pathRef);
+ CFRelease(pathCFStr);
+ Result := pathStr;
+ end;
+{$ENDIF}
+
procedure THandlerObject.ExceptionHandler (Sender: TObject; e: Exception);
begin
e_WriteStackTrace(e.message);
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
+ else if p = '--wads-dir' then
+ begin
+ if i + 1 <= ParamCount then
+ begin
+ Inc(i);
+ WadsDir := ParamStr(i);
+ end;
end;
Inc(i);
end;
end;
procedure CheckParamFiles;
- var i: Integer; path: AnsiString;
+ var i: Integer;
begin
i := ParamFileIndex;
if i <= ParamCount then
- begin
- path := ParamStr(i);
- if path <> '' then
- OpenMap(path, '');
- end;
+ StartMap := ParamStr(i);
end;
- procedure InitLogs;
+ procedure InitPathes;
+ {$IFDEF DARWIN}
+ var BundlePath, DFPath, DocPath: AnsiString; ns: NSString;
+ var ApplicationSupportDirs, DocumentDirs: NSArray;
+ var count: Integer;
+ {$ELSE}
+ var EditorDir: AnsiString;
+ {$ENDIF}
begin
- if LogFileName = '' then
- LogFileName := 'Editor.log';
+ {$IFDEF DARWIN}
+ BundlePath := GetBundlePath();
+ ApplicationSupportDirs := NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, true);
+ count := ApplicationSupportDirs.count;
+ ns := ApplicationSupportDirs.objectAtIndex(count - 1);
+ DFPath := NSStringToAnsiString(ns) + DirectorySeparator + 'Doom 2D Forever';
+ DocumentDirs := NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true);
+ count := DocumentDirs.count;
+ ns := DocumentDirs.objectAtIndex(count - 1);
+ DocPath := NSStringToAnsiString(ns) + DirectorySeparator + 'Doom 2D Forever';
+ GameExeFile := 'Doom 2D Forever.app';
+ CfgFileName := DFPath + DirectorySeparator + 'Editor.cfg';
+ LogFileName := DFPath + DirectorySeparator + 'Editor.log';
+ MapsDir := DocPath + DirectorySeparator + 'Maps';
+ WadsDir := BundlePath + DirectorySeparator + 'Contents' + DirectorySeparator + 'Resources' + DirectorySeparator + 'wads';
+ GameWad := BundlePath + DirectorySeparator + 'Contents' + DirectorySeparator + 'Resources' + DirectorySeparator + 'data' + DirectorySeparator + 'game.wad';
+ EditorWad := BundlePath + DirectorySeparator + 'Contents' + DirectorySeparator + 'Resources' + DirectorySeparator + 'data' + DirectorySeparator + 'editor.wad';
+ {$ELSE}
+ EditorDir := ExtractFilePath(Application.ExeName);
+ {$IFDEF WINDOWS}
+ GameExeFile := 'Doom2DF.exe';
+ {$ELSE}
+ GameExeFile := 'Doom2DF';
+ {$ENDIF}
+ CfgFileName := EditorDir + DirectorySeparator + 'Editor.cfg';
+ LogFileName := EditorDir + DirectorySeparator + 'Editor.log';
+ MapsDir := EditorDir + DirectorySeparator + 'maps';
+ WadsDir := EditorDir + DirectorySeparator + 'wads';
+ GameWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'game.wad';
+ EditorWad := EditorDir + DirectorySeparator + 'data' + DirectorySeparator + 'editor.wad';
+ {$ENDIF}
+ ForceDirectories(MapsDir);
+ ForceDirectories(WadsDir);
+ end;
- if LogFileName <> '' then
- e_InitLog(LogFileName, WM_NEWFILE);
+ procedure InitLogs;
+ begin
+ e_InitLog(LogFileName, WM_NEWFILE);
{$IF DECLARED(UseHeapTrace)}
(* http://wiki.freepascal.org/heaptrc *)
//SetHeapTraceOutput('EditorLeaks.log');
//HaltOnError := False;
{$ENDIF}
+
+ e_WriteLog('Used file pathes:', MSG_NOTIFY);
+ e_WriteLog(' GameExeFile = ' + GameExeFile, MSG_NOTIFY);
+ e_WriteLog(' CfgFileName = ' + CfgFileName, MSG_NOTIFY);
+ e_WriteLog(' LogFileName = ' + LogFileName, MSG_NOTIFY);
+ e_WriteLog(' MapsDir = ' + MapsDir, MSG_NOTIFY);
+ e_WriteLog(' WadsDir = ' + WadsDir, MSG_NOTIFY);
+ e_WriteLog(' GameWad = ' + GameWad, MSG_NOTIFY);
+ e_WriteLog(' EditorWad = ' + EditorWad, MSG_NOTIFY);
end;
begin
Application.ExceptionDialog := aedOkMessageBox;
Application.AddOnExceptionHandler(THandlerObject.ExceptionHandler, True);
Application.Initialize();
+ {$IFDEF DARWIN}
+ // Disable icons in menu on OSX by default
+ Application.ShowMenuGlyphs := sbgNever;
+ {$ENDIF}
+ InitPathes;
CheckParamOptions;
InitLogs;