From ded89321df07e3f5832331127637375840c25e6f Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Mon, 22 Oct 2018 23:04:46 +0300 Subject: [PATCH] Supported non ascii system user names --- src/game/g_options.pas | 11 +++++++++-- src/shared/envvars.pas | 26 +++++++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/game/g_options.pas b/src/game/g_options.pas index 506fc18..cc9a714 100644 --- a/src/game/g_options.pas +++ b/src/game/g_options.pas @@ -148,8 +148,12 @@ uses begin ASSERT(n >= 1); Result := GetUserName; - if Result = '' then Result := 'Player' + IntToStr(machine MOD 10000); - if n > 1 then Result := Copy(Result, 1, 10) + (' ' + IntToStr(n)) + if Result = '' then + Result := 'Player' + IntToStr(machine MOD 10000); + if n = 1 then + Result := Copy(Result, 1, 12) + ' ' + else + Result := Copy(Result, 1, 10) + ' ' + IntToStr(n) end; procedure g_Options_SetDefaultVideo; @@ -966,6 +970,9 @@ begin config.WriteBool('Video', 'Fullscreen', gFullscreen); config.WriteBool('Video', 'Maximized', gWinMaximized); + config.WriteStr('Player1', 'Name', gPlayer1Settings.Name); + config.WriteStr('Player2', 'Name', gPlayer2Settings.Name); + config.SaveFile(FileName); config.Free(); end; diff --git a/src/shared/envvars.pas b/src/shared/envvars.pas index 3774eab..5c60fd0 100644 --- a/src/shared/envvars.pas +++ b/src/shared/envvars.pas @@ -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 @@ -47,15 +53,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. -- 2.29.2