summaryrefslogtreecommitdiffstats
path: root/src/bin/client/platform.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/bin/client/platform.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/bin/client/platform.rs b/src/bin/client/platform.rs
new file mode 100644
index 0000000..1a6d71b
--- /dev/null
+++ b/src/bin/client/platform.rs
@@ -0,0 +1,28 @@
1#[cfg(windows)]
2pub mod win {
3 use std::io;
4 use std::os::windows::io::AsRawHandle;
5 use winapi::um::consoleapi::GetConsoleMode;
6 use winapi::um::consoleapi::SetConsoleMode;
7 use winapi::um::wincon::ENABLE_VIRTUAL_TERMINAL_PROCESSING;
8 use winapi::um::winbase::STD_OUTPUT_HANDLE;
9 use winapi::um::processenv::GetStdHandle;
10 use winapi::shared::minwindef::DWORD;
11
12 pub fn enable_vt() -> io::Result<()> {
13 unsafe {
14 let h = GetStdHandle(STD_OUTPUT_HANDLE);
15 if h.is_null() { return Err(io::Error::last_os_error()); }
16
17 let mut mode: DWORD = 0;
18 if GetConsoleMode(h, &mut mode) == 0 {
19 return Err(io::Error::last_os_error());
20 }
21 let new = mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
22 if SetConsoleMode(h, new) == 0 {
23 return Err(io::Error::last_os_error());
24 }
25 Ok(())
26 }
27 }
28}