aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg.cpp b/toolsrc/src/vcpkg.cpp
index 9da501ec0..fc9b1a016 100644
--- a/toolsrc/src/vcpkg.cpp
+++ b/toolsrc/src/vcpkg.cpp
@@ -18,6 +18,30 @@
using namespace vcpkg;
+UINT console_cp_input;
+UINT console_cp_output;
+
+void console_cp_set()
+{
+ console_cp_input = GetConsoleCP();
+ console_cp_output = GetConsoleOutputCP();
+
+ SetConsoleCP(CP_UTF8);
+ SetConsoleOutputCP(CP_UTF8);
+}
+
+void console_cp_reset()
+{
+ SetConsoleCP(console_cp_input);
+ SetConsoleOutputCP(console_cp_output);
+}
+
+BOOL console_ctrl_handler(DWORD fdwCtrlType)
+{
+ console_cp_reset();
+ return TRUE;
+}
+
void invalid_command(const std::string& cmd)
{
System::println(System::Color::error, "invalid command: %s", cmd);
@@ -192,6 +216,10 @@ int wmain(const int argc, const wchar_t* const* const argv)
{
if (argc == 0) std::abort();
+ console_cp_set();
+ SetConsoleCtrlHandler(PHANDLER_ROUTINE(console_ctrl_handler), TRUE);
+ atexit(console_cp_reset);
+
*GlobalState::timer.lock() = ElapsedTime::create_started();
// Checks::register_console_ctrl_handler();