From 8412c6f03ff3c9cf0bca882c2342a9a60612e373 Mon Sep 17 00:00:00 2001 From: vitalyster Date: Fri, 10 Jan 2020 00:47:13 +0300 Subject: [PATCH] windows: println using WriteFile/WriteConsole --- vlib/builtin/builtin.v | 10 +++++++++- vlib/builtin/builtin_windows.v | 2 +- vlib/builtin/cfns.v | 8 +++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/vlib/builtin/builtin.v b/vlib/builtin/builtin.v index 718858d553..9eeeaa6df8 100644 --- a/vlib/builtin/builtin.v +++ b/vlib/builtin/builtin.v @@ -112,7 +112,15 @@ pub fn eprint(s string) { pub fn print(s string) { $if windows { - C.wprintf(s.to_wide()) + output_handle := C.GetStdHandle(C.STD_OUTPUT_HANDLE) + mut bytes_written := 0 + if is_atty(1) > 0 { + wide_str := s.to_wide() + wide_len := C.wcslen(wide_str) + C.WriteConsole(output_handle, wide_str, wide_len, &bytes_written, 0) + } else { + C.WriteFile(output_handle, s.str, s.len, &bytes_written, 0) + } } $else { C.printf('%.*s', s.len, s.str) } diff --git a/vlib/builtin/builtin_windows.v b/vlib/builtin/builtin_windows.v index 8d3cea3266..fba80c011c 100644 --- a/vlib/builtin/builtin_windows.v +++ b/vlib/builtin/builtin_windows.v @@ -135,6 +135,6 @@ fn print_backtrace_skipping_top_frames_nix(skipframes int) bool { } pub fn println(s string) { - C._putws(s.to_wide()) + print('$s\n') } diff --git a/vlib/builtin/cfns.v b/vlib/builtin/cfns.v index 50b81dffc8..f48abf8773 100644 --- a/vlib/builtin/cfns.v +++ b/vlib/builtin/cfns.v @@ -303,7 +303,13 @@ fn C._waccess() int fn C._wremove() -fn C.ReadConsole() +fn C.ReadConsole() voidptr + + +fn C.WriteConsole() voidptr + + +fn C.WriteFile() voidptr fn C.fgetws() voidptr