windows: Unicode input in REPL

pull/2052/head
vitalyster 2019-09-20 17:03:13 +03:00 committed by Alexander Medvednikov
parent f042dfb861
commit f1bb25bfaf
5 changed files with 21 additions and 11 deletions

View File

@ -355,6 +355,10 @@ fn (v mut V) generate_main() {
// vlib can't have `init_consts()` // vlib can't have `init_consts()`
cgen.genln('void init_consts() { cgen.genln('void init_consts() {
#ifdef _WIN32 #ifdef _WIN32
DWORD consoleMode;
BOOL isConsole = GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &consoleMode);
int mode = isConsole ? _O_U16TEXT : _O_U8TEXT;
_setmode(_fileno(stdin), mode);
_setmode(_fileno(stdout), _O_U8TEXT); _setmode(_fileno(stdout), _O_U8TEXT);
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_PROCESSED_OUTPUT | 0x0004); SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_PROCESSED_OUTPUT | 0x0004);
// ENABLE_VIRTUAL_TERMINAL_PROCESSING // ENABLE_VIRTUAL_TERMINAL_PROCESSING

View File

@ -292,8 +292,7 @@ pub fn (v mut V) cc_msvc() {
'oleaut32.lib', 'oleaut32.lib',
'uuid.lib', 'uuid.lib',
'odbc32.lib', 'odbc32.lib',
'odbccp32.lib', 'odbccp32.lib'
'vcruntime.lib',
] ]
mut inc_paths := []string{} mut inc_paths := []string{}

View File

@ -1,3 +1,7 @@
println('hello world') println('Hello, world!')
println('Привет, мир!')
println('你好世界')
===output=== ===output===
hello world Hello, world!
Привет, мир!
你好世界

View File

@ -34,8 +34,9 @@ if %ERRORLEVEL% NEQ 0 (
exit /b 1 exit /b 1
) )
echo Building v.v... echo rebuild from source (twice, in case of C definitions changes)
v2.exe -o v.exe compiler v2.exe -o v3.exe compiler
v3.exe -o v.exe -prod compiler
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (
echo v.exe failed to compile itself - Create an issue at 'https://github.com/vlang' echo v.exe failed to compile itself - Create an issue at 'https://github.com/vlang'
exit /b 1 exit /b 1
@ -66,14 +67,16 @@ if %ERRORLEVEL% NEQ 0 (
goto :compileerror goto :compileerror
) )
echo rebuild from source echo rebuild from source (twice, in case of C definitions changes)
v2.exe -os msvc -o v.exe compiler v2.exe -os msvc -o v3.exe compiler
v3.exe -os msvc -o v.exe -prod compiler
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (
echo V failed to build itself echo V failed to build itself
goto :compileerror goto :compileerror
) )
del v2.exe del v2.exe
del v3.exe
rd /s /q vc rd /s /q vc
goto :success goto :success

View File

@ -469,10 +469,10 @@ pub fn get_line() string {
pub fn get_raw_line() string { pub fn get_raw_line() string {
$if windows { $if windows {
maxlinechars := 256 maxlinechars := 256
buf := &u16(malloc(maxlinechars*2)) buf := &byte(malloc(maxlinechars*2))
res := int( C.fgetws(buf, maxlinechars, C.stdin ) ) res := int( C.fgetws(buf, maxlinechars, C.stdin ) )
len := int( C.wcslen(buf) ) len := int( C.wcslen(&u16(buf)) )
if 0 != res { return string_from_wide2( buf, len ) } if 0 != res { return string_from_wide2( &u16(buf), len ) }
return '' return ''
} }
$else { $else {