blob: 30a2ab47ce74aa89e24096d8f7c1f885c0838d9f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
unit UPlatformMacOSX;
interface
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
{$I switches.inc}
uses Classes, UPlatform;
type
TPlatformMacOSX = class( TInterfacedObject, IPlatform)
private
public
Function DirectoryFindFiles(Dir, Filter : WideString; ReturnAllSubDirs : Boolean) : TDirectoryEntryArray; override;
function GetGamePath: WideString; override;
function TerminateIfAlreadyRunning(var WndTitle : String) : Boolean;
procedure halt();
function GetLogPath : WideString; override;
function GetGameSharedPath : WideString; override;
function GetGameUserPath : WideString; override;
end;
implementation
uses SysUtils, baseunix;
// Mac applications are packaged in directories.
// We have to cut the last two directories
// to get the application directory.
Function GetBundlePath : WideString;
var
x,
i : integer;
begin
Result := ExtractFilePath(ParamStr(0));
for x := 0 to 2 do begin
i := Length(Result);
repeat
Delete( Result, i, 1);
i := Length(Result);
until (i = 0) or (Result[i] = '/');
end;
end;
function TPlatformMacOSX.GetLogPath : WideString;
begin
// surly logs go in /var/log/ ???
Result := GetBundlePath;
end;
function TPlatformMacOSX.GetGameSharedPath : WideString;
begin
Result := GetBundlePath;
end;
function TPlatformMacOSX.GetGameUserPath : WideString;
begin
// is there no user profile ???
// like ... /home/user/ that could be used for song locations etc ??
Result := GetBundlePath;
end;
Function TPlatformMacOSX.DirectoryFindFiles(Dir, Filter : WideString; ReturnAllSubDirs : Boolean) : TDirectoryEntryArray;
var
i : Integer;
TheDir : pdir;
ADirent : pDirent;
Entry : Longint;
info : stat;
lAttrib : integer;
begin
i := 0;
Filter := LowerCase(Filter);
TheDir := FPOpenDir(Dir);
if Assigned(TheDir) then
repeat
ADirent := FPReadDir(TheDir);
If Assigned(ADirent) and (ADirent^.d_name <> '.') and (ADirent^.d_name <> '..') then
begin
lAttrib := FileGetAttr(Dir + ADirent^.d_name);
if ReturnAllSubDirs and ((lAttrib and faDirectory) <> 0) then
begin
SetLength( Result, i + 1);
Result[i].Name := ADirent^.d_name;
Result[i].IsDirectory := true;
Result[i].IsFile := false;
i := i + 1;
end
else if (Length(Filter) = 0) or (Pos( Filter, LowerCase(ADirent^.d_name)) > 0) then
begin
SetLength( Result, i + 1);
Result[i].Name := ADirent^.d_name;
Result[i].IsDirectory := false;
Result[i].IsFile := true;
i := i + 1;
end;
end;
Until ADirent = nil;
FPCloseDir(TheDir);
end;
function TPlatformMacOSX.TerminateIfAlreadyRunning(var WndTitle : String) : Boolean;
begin
result := false;
end;
procedure TPlatformMacOSX.halt;
begin
halt;
end;
end.
|