From aea1142ad7d91e2eb40737bc33776f28386a4218 Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Tue, 23 May 2023 18:54:07 +0300 Subject: [PATCH] osx: use osx specific pathes by default --- src/editor/Editor.lpr | 90 +++++++++++++++++++++++++++++++++++----- src/editor/f_main.pas | 5 +-- src/editor/f_maptest.pas | 2 +- src/editor/f_packmap.pas | 2 +- src/shared/a_modes.inc | 3 ++ 5 files changed, 86 insertions(+), 16 deletions(-) diff --git a/src/editor/Editor.lpr b/src/editor/Editor.lpr index 18f997c..2e55853 100644 --- a/src/editor/Editor.lpr +++ b/src/editor/Editor.lpr @@ -3,6 +3,9 @@ program Editor; {$INCLUDE ../shared/a_modes.inc} uses + {$IFDEF DARWIN} + MacOSAll, CocoaAll, + {$ENDIF} Forms, Interfaces, Dialogs, GL, GLExt, SysUtils, e_graphics in '../engine/e_graphics.pas', @@ -69,6 +72,27 @@ uses 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); @@ -135,13 +159,53 @@ uses 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 *) @@ -149,6 +213,15 @@ uses //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 @@ -156,12 +229,7 @@ begin 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'; - WadsDir := EditorDir + DirectorySeparator + 'wads'; - + InitPathes; CheckParamOptions; InitLogs; diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas index e3c6288..8fd661a 100644 --- a/src/editor/f_main.pas +++ b/src/editor/f_main.pas @@ -1934,7 +1934,6 @@ begin if aWAD = _lc[I_WAD_SPECIAL_MAP] then begin // Файл карты g_ProcessResourceStr(OpenedMap, @fn, nil, nil); - //FileName := EditorDir+'maps\'+ExtractFileName(fn); FileName := fn; ResourceName := ':'+SectionName+'\'+aTex; end @@ -2730,8 +2729,8 @@ begin DotSize := 2 else DotSize := 1; - OpenDialog.InitialDir := config.ReadStr('Editor', 'LastOpenDir', EditorDir); - SaveDialog.InitialDir := config.ReadStr('Editor', 'LastSaveDir', EditorDir); + OpenDialog.InitialDir := config.ReadStr('Editor', 'LastOpenDir', MapsDir); + SaveDialog.InitialDir := config.ReadStr('Editor', 'LastSaveDir', MapsDir); s := config.ReadStr('Editor', 'Language', ''); gLanguage := s; diff --git a/src/editor/f_maptest.pas b/src/editor/f_maptest.pas index f22f5fd..de82a63 100644 --- a/src/editor/f_maptest.pas +++ b/src/editor/f_maptest.pas @@ -172,7 +172,7 @@ begin TestOptionsWeaponStay := config.ReadBool('TestRun', 'WeaponStay', False); TestOptionsMonstersDM := config.ReadBool('TestRun', 'MonstersDM', False); TestMapOnce := config.ReadBool('TestRun', 'MapOnce', False); - TestD2dExe := config.ReadStr('TestRun', 'Exe', EditorDir+'Doom2DF.exe'); + TestD2dExe := config.ReadStr('TestRun', 'Exe', GameExeFile); TestD2DArgs := config.ReadStr('TestRun', 'Args', ''); config.Free(); diff --git a/src/editor/f_packmap.pas b/src/editor/f_packmap.pas index 1fce2c2..1259898 100644 --- a/src/editor/f_packmap.pas +++ b/src/editor/f_packmap.pas @@ -314,7 +314,7 @@ end; procedure TPackMapForm.FormCreate(Sender: TObject); begin - SaveDialog.InitialDir := EditorDir; + SaveDialog.InitialDir := MapsDir; end; end. diff --git a/src/shared/a_modes.inc b/src/shared/a_modes.inc index 9e52997..05afc88 100644 --- a/src/shared/a_modes.inc +++ b/src/shared/a_modes.inc @@ -19,3 +19,6 @@ {$DEFINE NOSOUND} {$ENDIF} +{$IFDEF DARWIN} + {$MODESWITCH OBJECTIVEC1} +{$ENDIF} -- 2.29.2