X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2Fenvvars.pas;h=32d3273c3714dc7c7d0b2d9c52c4726e03f8d3e8;hb=be2f0e35ae7b7688559621e4b8cb2d9a75a43d23;hp=6f92b40786a857eea425680bfbc4068ffa4e145b;hpb=681c1fa10d6cc9999d4cd0a284723fa0a8f4dec6;p=d2df-sdl.git diff --git a/src/shared/envvars.pas b/src/shared/envvars.pas index 6f92b40..32d3273 100644 --- a/src/shared/envvars.pas +++ b/src/shared/envvars.pas @@ -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 @@ -13,19 +13,27 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . *) -{$MODE OBJFPC} +{$INCLUDE a_modes.inc} +{.$MODE OBJFPC} 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 @@ -33,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; @@ -45,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.