aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code
diff options
context:
space:
mode:
authortobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2008-06-09 10:22:14 +0000
committertobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2008-06-09 10:22:14 +0000
commit3158ee2b850ce0311d8cb8f03cbe6b1681a1f48f (patch)
tree2ad9f8a8ed8b7ac82525f94af6db09b1d3e35032 /Game/Code
parent46bb010ca7c5eb04551c030105f9999ca80e472f (diff)
downloadusdx-3158ee2b850ce0311d8cb8f03cbe6b1681a1f48f.tar.gz
usdx-3158ee2b850ce0311d8cb8f03cbe6b1681a1f48f.tar.xz
usdx-3158ee2b850ce0311d8cb8f03cbe6b1681a1f48f.zip
- all references to the libc unit removed. The Libc unit (not the library) was for kylix compatibility and should not be used anymore. In addition it seems the libc unit is not available on 64bit systems.
- added some functions that will be introduced with FPC 2.2.2 git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@1145 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'Game/Code')
-rw-r--r--Game/Code/Classes/UCommon.pas24
-rw-r--r--Game/Code/Classes/ULight.pas29
-rw-r--r--Game/Code/Classes/UPlatformLinux.pas101
-rw-r--r--Game/Code/lib/JEDI-SDL/OpenGL-Set8087CW.patch54
-rw-r--r--Game/Code/lib/JEDI-SDL/SDL/Pas/moduleloader.pas9
-rw-r--r--Game/Code/lib/JEDI-SDL/moduleloader-libc.patch25
-rw-r--r--Game/Code/switches.inc6
7 files changed, 119 insertions, 129 deletions
diff --git a/Game/Code/Classes/UCommon.pas b/Game/Code/Classes/UCommon.pas
index 418c0c1a..768abe89 100644
--- a/Game/Code/Classes/UCommon.pas
+++ b/Game/Code/Classes/UCommon.pas
@@ -88,15 +88,26 @@ uses
{$IFDEF Delphi}
Dialogs,
{$ENDIF}
- {$IFDEF LINUX}
- libc,
+ {$IFDEF FPC_VERSION_2_2_2_PLUS}
+ clocale,
{$ENDIF}
UMain,
UConfig;
+
+// data used by the ...Locale() functions
+{$IFDEF LINUX}
var
PrevNumLocale: string;
+{$IFNDEF FPC_VERSION_2_2_2_PLUS}
+const
+ __LC_NUMERIC = 1;
+
+function setlocale(category: integer; locale: pchar): pchar; cdecl; external 'c' name 'setlocale';
+{$ENDIF}
+{$ENDIF}
+
// In Linux and maybe MacOSX some units (like cwstring) call setlocale(LC_ALL, '')
// to set the language/country specific locale (e.g. charset) for this application.
// Unfortunately, LC_NUMERIC is set by this call too.
@@ -116,15 +127,15 @@ var
procedure SetDefaultNumericLocale();
begin
{$ifdef LINUX}
- PrevNumLocale := setlocale(LC_NUMERIC, nil);
- setlocale(LC_NUMERIC, 'C');
+ PrevNumLocale := setlocale(__LC_NUMERIC, nil);
+ setlocale(__LC_NUMERIC, 'C');
{$endif}
end;
procedure RestoreNumericLocale();
begin
{$ifdef LINUX}
- setlocale(LC_NUMERIC, PChar(PrevNumLocale));
+ setlocale(__LC_NUMERIC, PChar(PrevNumLocale));
{$endif}
end;
@@ -258,13 +269,14 @@ function QueryPerformanceCounter(lpPerformanceCount:TLARGEINTEGER):Bool;
end;
begin
- // Use clock_gettime here maybe ... from libc
+ // Use clock_gettime(CLOCK_REALTIME, ...) here (but not from the libc unit)
lpPerformanceCount := RDTSC();
result := true;
end;
function QueryPerformanceFrequency(lpFrequency:TLARGEINTEGER):Bool;
begin
+ // clock_getres(CLOCK_REALTIME, ...)
lpFrequency := 0;
result := true;
end;
diff --git a/Game/Code/Classes/ULight.pas b/Game/Code/Classes/ULight.pas
index f91d614c..a4bebfd2 100644
--- a/Game/Code/Classes/ULight.pas
+++ b/Game/Code/Classes/ULight.pas
@@ -41,42 +41,25 @@ uses
{$IFDEF UseSerialPort}
zlportio,
{$ENDIF}
- {$IFNDEF win32}
- libc,
- {$ENDIF}
UTime;
{$IFDEF FPC}
function GetTime: TDateTime;
- {$IFDEF win32}
var
SystemTime: TSystemTime;
begin
GetLocalTime(SystemTime);
with SystemTime do
-{$IFDEF DARWIN}
+ begin
+ {$IFDEF UNIX}
Result := EncodeTime(Hour, Minute, Second, MilliSecond);
-{$ELSE}
+ {$ELSE}
Result := EncodeTime(wHour, wMinute, wSecond, wMilliSeconds);
-{$ENDIF}
- end;
- {$ELSE}
- Type
- Time_t = longint;
- TTime_T = Time_t;
- var
- T : TTime_T;
- TV: TTimeVal;
- UT: TUnixTime;
- begin
- gettimeofday(TV, nil);
- T := TV.tv_sec;
- localtime_r(@T, @UT);
- Result := EncodeTime(UT.tm_hour, UT.tm_min, UT.tm_sec, TV.tv_usec div 1000);
+ {$ENDIF}
+ end;
end;
- {$ENDIF}
-
+
{$ENDIF}
diff --git a/Game/Code/Classes/UPlatformLinux.pas b/Game/Code/Classes/UPlatformLinux.pas
index 985f9db1..fabca659 100644
--- a/Game/Code/Classes/UPlatformLinux.pas
+++ b/Game/Code/Classes/UPlatformLinux.pas
@@ -8,13 +8,15 @@ interface
{$I switches.inc}
-uses Classes, UPlatform;
+uses
+ Classes,
+ UPlatform;
type
TPlatformLinux = class(TInterfacedObject, IPlatform)
private
- function GetHomedir(): string;
+ function GetHomeDir(): string;
public
function DirectoryFindFiles(Dir, Filter : WideString; ReturnAllSubDirs : Boolean) : TDirectoryEntryArray;
function TerminateIfAlreadyRunning(var WndTitle : String) : Boolean;
@@ -29,28 +31,23 @@ type
implementation
-// check for version of FPC >= 2.2.0
-{$IFDEF FPC}
- {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 2))}
- {$DEFINE FPC_VERSION_2_2_0_PLUS}
- {$IFEND}
-{$ENDIF}
-
-uses
- libc,
+uses
UCommandLine,
BaseUnix,
+ {$IFDEF FPC_VERSION_2_2_2_PLUS}
+ pwd,
+ {$ENDIF}
SysUtils,
ULog,
UConfig;
function TPlatformLinux.DirectoryFindFiles(Dir, Filter : WideString; ReturnAllSubDirs : Boolean) : TDirectoryEntryArray;
var
- i : Integer;
- TheDir : pDir;
- ADirent : pDirent;
- Entry : Longint;
- lAttrib : integer;
+ i : Integer;
+ TheDir : pDir;
+ ADirent : pDirent;
+ Entry : Longint;
+ lAttrib : integer;
begin
i := 0;
Filter := LowerCase(Filter);
@@ -61,7 +58,7 @@ begin
repeat
ADirent := FpReadDir(TheDir^);
- If Assigned(ADirent) and (ADirent^.d_name <> '.') and (ADirent^.d_name <> '..') then
+ 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
@@ -91,14 +88,14 @@ function TPlatformLinux.GetLogPath : WideString;
begin
if FindCmdLineSwitch( cUseLocalPaths ) then
begin
- result := ExtractFilePath(ParamStr(0));
+ Result := ExtractFilePath(ParamStr(0));
end
else
begin
{$IFDEF UseLocalDirs}
- result := ExtractFilePath(ParamStr(0));
+ Result := ExtractFilePath(ParamStr(0));
{$ELSE}
- result := LogPath+'/';
+ Result := LogPath + PathDelim;
{$ENDIF}
end;
@@ -108,43 +105,63 @@ end;
function TPlatformLinux.GetGameSharedPath : WideString;
begin
if FindCmdLineSwitch( cUseLocalPaths ) then
- result := ExtractFilePath(ParamStr(0))
+ Result := ExtractFilePath(ParamStr(0))
else
begin
-{$IFDEF UseLocalDirs}
- result := ExtractFilePath(ParamStr(0));
-{$ELSE}
- result := SharedPath+'/';
-{$ENDIF}
+ {$IFDEF UseLocalDirs}
+ Result := ExtractFilePath(ParamStr(0));
+ {$ELSE}
+ Result := SharedPath + PathDelim;
+ {$ENDIF}
end;
end;
-function TPlatformLinux.GetGameUserPath : WideString;
+function TPlatformLinux.GetGameUserPath: WideString;
begin
if FindCmdLineSwitch( cUseLocalPaths ) then
- result := ExtractFilePath(ParamStr(0))
+ Result := ExtractFilePath(ParamStr(0))
else
begin
-{$IFDEF UseLocalDirs}
- result := ExtractFilePath(ParamStr(0));
-{$ELSE}
- result := get_homedir()+'/.'+PathSuffix+'/';
-{$ENDIF}
+ {$IFDEF UseLocalDirs}
+ Result := ExtractFilePath(ParamStr(0));
+ {$ELSE}
+ Result := GetHomeDir() + '.'+PathSuffix + PathDelim;
+ {$ENDIF}
end;
end;
-function TPlatformLinux.GetHomedir(): string;
+(**
+ * Returns the user's home directory terminated by a path delimiter
+ *)
+function TPlatformLinux.GetHomeDir(): string;
+{$IFDEF FPC_VERSION_2_2_2_PLUS}
var
- pPasswdEntry : Ppasswd;
- lUserName : String;
+ PasswdEntry: PPasswd;
+{$ENDIF}
begin
- pPasswdEntry := getpwuid( getuid() );
- result := pPasswdEntry^.pw_dir;
+ Result := '';
+
+ {$IFDEF FPC_VERSION_2_2_2_PLUS}
+ // try to retrieve the info from passwd
+ PasswdEntry := FpGetpwuid(FpGetuid());
+ if (PasswdEntry <> nil) then
+ Result := PasswdEntry.pw_dir;
+ {$ENDIF}
+ // fallback if passwd does not contain the path
+ if (Result = '') then
+ Result := GetEnvironmentVariable('HOME');
+ // add trailing path delimiter (normally '/')
+ if (Result <> '') then
+ Result := IncludeTrailingPathDelimiter(Result);
+
+ {$IFDEF FPC_VERSION_2_2_2_PLUS}
+ // GetUserDir() is another function that returns a user path.
+ // It uses env-var HOME or a fallback to a temp-dir.
+ //Result := GetUserDir();
+ {$ENDIF}
end;
-// FIXME: just a dirty-fix to make the linux build work again.
-// This i the same as the corresponding function for MacOSX.
-// Maybe this should be TPlatformBase.Halt()
+// FIXME: Maybe this should be TPlatformBase.Halt() for all platforms
procedure TPlatformLinux.Halt;
begin
System.Halt;
@@ -152,7 +169,7 @@ end;
function TPlatformLinux.TerminateIfAlreadyRunning(var WndTitle : String) : Boolean;
begin
- // Linux and Mac don't check for running apps at the moment
+ // Linux does not check for running apps at the moment
Result := false;
end;
diff --git a/Game/Code/lib/JEDI-SDL/OpenGL-Set8087CW.patch b/Game/Code/lib/JEDI-SDL/OpenGL-Set8087CW.patch
index aeebeee5..e08ca63e 100644
--- a/Game/Code/lib/JEDI-SDL/OpenGL-Set8087CW.patch
+++ b/Game/Code/lib/JEDI-SDL/OpenGL-Set8087CW.patch
@@ -14,57 +14,3 @@ Index: OpenGL/Pas/gl.pas
LoadOpenGL( GLLibName );
-Index: OpenGL/Pas/opengl12.pas
-===================================================================
---- OpenGL/Pas/opengl12.pas (revision 961)
-+++ OpenGL/Pas/opengl12.pas (working copy)
-@@ -7125,16 +7125,15 @@
-
- //----------------------------------------------------------------------------------------------------------------------
-
--{$ifndef VER140}
-+// RaiseLastOSError did not exist in Delphi 5
-+{$ifdef VER130}
-
- procedure RaiseLastOSError;
- begin
-- {$ifndef FPC}
- RaiseLastWin32Error;
-- {$endif}
- end;
-
--{$endif VER140}
-+{$endif}
-
- //----------------------------------------------------------------------------------------------------------------------
-
-@@ -9948,21 +9947,16 @@
- end;
-
- //----------------------------------------------------------------------------------------------------------------------
--{$ifdef FPC}
--const Default8087CW: Word = $1332;
-
--{$ASMMODE INTEL}
--procedure Set8087CW(NewCW: Word); Assembler;
--asm
-- MOV Default8087CW, AX
--end;
--{$endif}
--
--//----------------------------------------------------------------------------------------------------------------------
--
- initialization
-- ContextList := TThreadList.Create;
-- Set8087CW($133F);
-+ ContextList := TThreadList.Create;
-+ {$IF Defined(CPU386) or Defined(CPUI386) or Defined(CPUX86_64)}
-+ // FPC has its own implementation of Set8087CW now. The wrongly
-+ // coded (the important asm-directives were missing so it was not of any use!!!)
-+ // implementation was removed from this unit so it does not hide the correct FPC version anymore.
-+ // This should fix some EDivByZero exceptions in floating-point expressions.
-+ Set8087CW($133F);
-+ {$IFEND}
- finalization
- CloseOpenGL;
- ContextList.Free;
diff --git a/Game/Code/lib/JEDI-SDL/SDL/Pas/moduleloader.pas b/Game/Code/lib/JEDI-SDL/SDL/Pas/moduleloader.pas
index 56863ea5..ea4f220c 100644
--- a/Game/Code/lib/JEDI-SDL/SDL/Pas/moduleloader.pas
+++ b/Game/Code/lib/JEDI-SDL/SDL/Pas/moduleloader.pas
@@ -185,15 +185,16 @@ end;
{$IFDEF Unix}
uses
-{$ifdef Linux}
- Types,
- Libc;
-{$else}
+{$ifdef FPC}
dl,
Types,
Baseunix,
Unix;
+{$else}
+ Types,
+ Libc;
{$endif}
+
type
// Handle to a loaded .so
TModuleHandle = Pointer;
diff --git a/Game/Code/lib/JEDI-SDL/moduleloader-libc.patch b/Game/Code/lib/JEDI-SDL/moduleloader-libc.patch
new file mode 100644
index 00000000..02255db0
--- /dev/null
+++ b/Game/Code/lib/JEDI-SDL/moduleloader-libc.patch
@@ -0,0 +1,25 @@
+Index: SDL/Pas/moduleloader.pas
+===================================================================
+--- SDL/Pas/moduleloader.pas (revision 1144)
++++ SDL/Pas/moduleloader.pas (working copy)
+@@ -185,15 +185,16 @@
+
+ {$IFDEF Unix}
+ uses
+-{$ifdef Linux}
+- Types,
+- Libc;
+-{$else}
++{$ifdef FPC}
+ dl,
+ Types,
+ Baseunix,
+ Unix;
++{$else}
++ Types,
++ Libc;
+ {$endif}
++
+ type
+ // Handle to a loaded .so
+ TModuleHandle = Pointer;
diff --git a/Game/Code/switches.inc b/Game/Code/switches.inc
index 52df7e7d..20956492 100644
--- a/Game/Code/switches.inc
+++ b/Game/Code/switches.inc
@@ -20,6 +20,12 @@
{$DEFINE DEBUG}
{$ENDIF}
+ // for transition from 2.2.0 to 2.2.2
+ // remove 2.2.0 support as soon as packages for all distributions are available
+ {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and ((FPC_RELEASE > 2) or ((FPC_RELEASE = 2) and (FPC_PATCH >= 2))))}
+ {$DEFINE FPC_VERSION_2_2_2_PLUS}
+ {$IFEND}
+
{$DEFINE HasInline}
{$ELSE}
{$DEFINE Delphi}