DEADSOFTWARE

df now can be comiled for go32v2
[d2df-sdl.git] / src / shared / envvars.pas
index 3774eab2fe277edbd168c160de436c954d3c5007..55d58702b4487b0cf2d85de10921d0b42b877dab 100644 (file)
@@ -26,8 +26,14 @@ interface
 
 implementation
 
+  uses
+{$IFDEF WINDOWS}
+    Windows,
+{$ENDIF}
+    utils;
+
+
 {$IFDEF WINDOWS}
-uses Windows;
 function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
 begin
   if (SetEnvironmentVariable(VarStr, VarVal)) then
@@ -36,10 +42,17 @@ begin
     Result := -1;
 end;
 {$ELSE}
-{$LINKLIB c}
-const clib = 'c';
-function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
-cdecl; external clib name 'setenv';
+  {$IFDEF GO32V2}
+    function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
+    begin
+      {$WARNING setenv stub!}
+      result := 0
+    end;
+  {$ELSE}
+    {$LINKLIB c}
+    const clib = 'c';
+    function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external clib name 'setenv';
+  {$ENDIF}
 {$ENDIF}
 
 function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
@@ -47,15 +60,25 @@ begin
   Result := (setenv(PChar(VarName), PChar(VarVal), 1) = 0);
 end;
 
-  function GetUserName: String;
+  (* Get system username already in cp1251 *)
+  function GetUserName: AnsiString;
+    var i: Integer;
   begin
     {$IF DEFINED(WINDOWS)}
-      Result := SysUtils.GetEnvironmentVariable('USERNAME')
+      Result := utf2win(UTF8String(SysUtils.GetEnvironmentVariable(WideString('USERNAME'))));
     {$ELSEIF DEFINED(UNIX)}
-      Result := SysUtils.GetEnvironmentVariable('USER')
+      Result := utf2win(SysUtils.GetEnvironmentVariable('USER'));
     {$ELSE}
-      Result := ''
+      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.