DEADSOFTWARE

df now can be comiled for go32v2
[d2df-sdl.git] / src / shared / envvars.pas
1 (* Copyright (C) Doom 2D: Forever Developers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *)
16 {$INCLUDE a_modes.inc}
17 {.$MODE OBJFPC}
18 unit envvars;
20 interface
22 uses SysUtils, CTypes;
24 function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
25 function GetUserName: String;
27 implementation
29 uses
30 {$IFDEF WINDOWS}
31 Windows,
32 {$ENDIF}
33 utils;
36 {$IFDEF WINDOWS}
37 function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
38 begin
39 if (SetEnvironmentVariable(VarStr, VarVal)) then
40 Result := 0
41 else
42 Result := -1;
43 end;
44 {$ELSE}
45 {$IFDEF GO32V2}
46 function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
47 begin
48 {$WARNING setenv stub!}
49 result := 0
50 end;
51 {$ELSE}
52 {$LINKLIB c}
53 const clib = 'c';
54 function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external clib name 'setenv';
55 {$ENDIF}
56 {$ENDIF}
58 function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
59 begin
60 Result := (setenv(PChar(VarName), PChar(VarVal), 1) = 0);
61 end;
63 (* Get system username already in cp1251 *)
64 function GetUserName: AnsiString;
65 var i: Integer;
66 begin
67 {$IF DEFINED(WINDOWS)}
68 Result := utf2win(UTF8String(SysUtils.GetEnvironmentVariable(WideString('USERNAME'))));
69 {$ELSEIF DEFINED(UNIX)}
70 Result := utf2win(SysUtils.GetEnvironmentVariable('USER'));
71 {$ELSE}
72 Result := '';
73 {$ENDIF}
74 (* invalidate username with non-cp1251 symbols *)
75 i := Low(Result);
76 while i <= High(Result) do
77 begin
78 if Result[i] = '?' then
79 Result := '';
80 Inc(i)
81 end
82 end;
84 end.