DEADSOFTWARE

32d3273c3714dc7c7d0b2d9c52c4726e03f8d3e8
[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 {$IF DEFINED(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 {$ELSEIF DEFINED(GO32V2)}
45 {$LINKLIB c}
46 function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external;
47 {$ELSE}
48 {$LINKLIB c}
49 function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external 'c' name 'setenv';
50 {$ENDIF}
52 function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
53 begin
54 Result := (setenv(PChar(VarName), PChar(VarVal), 1) = 0);
55 end;
57 (* Get system username already in cp1251 *)
58 function GetUserName: AnsiString;
59 var i: Integer;
60 begin
61 {$IF DEFINED(WINDOWS)}
62 Result := utf2win(UTF8String(SysUtils.GetEnvironmentVariable(WideString('USERNAME'))));
63 {$ELSEIF DEFINED(UNIX)}
64 Result := utf2win(SysUtils.GetEnvironmentVariable('USER'));
65 {$ELSE}
66 Result := '';
67 {$ENDIF}
68 (* invalidate username with non-cp1251 symbols *)
69 i := Low(Result);
70 while i <= High(Result) do
71 begin
72 if Result[i] = '?' then
73 Result := '';
74 Inc(i)
75 end
76 end;
78 end.