DEADSOFTWARE

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