DEADSOFTWARE

Added support for win9x using allegro
[d2df-sdl.git] / src / shared / envvars.pas
index a7d3293c7accd40a2bd71ea2999f356a46d331b5..32d3273c3714dc7c7d0b2d9c52c4726e03f8d3e8 100644 (file)
@@ -1,4 +1,4 @@
-(* Copyright (C)  DooM 2D:Forever Developers
+(* Copyright (C)  Doom 2D: Forever Developers
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -19,14 +19,21 @@ unit envvars;
 
 interface
 
-uses SysUtils, CTypes;
+  uses SysUtils, CTypes;
 
-function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
+  function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
+  function GetUserName: String;
 
 implementation
 
+  uses
 {$IFDEF WINDOWS}
-uses Windows;
+    Windows,
+{$ENDIF}
+    utils;
+
+
+{$IF DEFINED(WINDOWS)}
 function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
 begin
   if (SetEnvironmentVariable(VarStr, VarVal)) then
@@ -34,11 +41,12 @@ begin
   else
     Result := -1;
 end;
+{$ELSEIF DEFINED(GO32V2)}
+  {$LINKLIB c}
+  function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external;
 {$ELSE}
-{$LINKLIB c}
-const clib = 'c';
-function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
-cdecl; external clib name 'setenv';
+  {$LINKLIB c}
+  function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external 'c' name 'setenv';
 {$ENDIF}
 
 function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
@@ -46,4 +54,25 @@ begin
   Result := (setenv(PChar(VarName), PChar(VarVal), 1) = 0);
 end;
 
+  (* Get system username already in cp1251 *)
+  function GetUserName: AnsiString;
+    var i: Integer;
+  begin
+    {$IF DEFINED(WINDOWS)}
+      Result := utf2win(UTF8String(SysUtils.GetEnvironmentVariable(WideString('USERNAME'))));
+    {$ELSEIF DEFINED(UNIX)}
+      Result := utf2win(SysUtils.GetEnvironmentVariable('USER'));
+    {$ELSE}
+      Result := '';
+    {$ENDIF}
+    (* invalidate username with non-cp1251 symbols *)
+    i := Low(Result);
+    while i <= High(Result) do
+    begin
+      if Result[i] = '?' then
+        Result := '';
+      Inc(i)
+    end
+  end;
+
 end.