#[cfg(target_os = "windows")] pub fn move_cursor(x: u16, y: u16) { { use std::io::{self, Write}; use std::os::windows::io::AsRawHandle; use winapi::um::wincon::{SetConsoleCursorPosition, COORD}; let stdout = io::stdout(); let handle = stdout.as_raw_handle(); let coord = COORD { X: x as i16, Y: y as i16 }; unsafe { SetConsoleCursorPosition(handle, coord); } } } #[cfg(target_os = "windows")] pub fn clear_console() { { use std::io::{self, Write}; use winapi::um::wincon::{GetConsoleScreenBufferInfo, COORD, CONSOLE_SCREEN_BUFFER_INFO, FillConsoleOutputCharacterA, FillConsoleOutputAttribute}; use winapi::um::winbase::GetStdHandle; use winapi::um::winnt::STD_OUTPUT_HANDLE; let stdout = io::stdout(); let handle = unsafe { GetStdHandle(STD_OUTPUT_HANDLE) }; let mut csbi: CONSOLE_SCREEN_BUFFER_INFO = unsafe { std::mem::zeroed() }; unsafe { GetConsoleScreenBufferInfo(handle, &mut csbi); let size = csbi.dwSize; let coord = COORD { X: 0, Y: 0 }; FillConsoleOutputCharacterA(handle, b' ' as u8, (size.X * size.Y) as u32, coord, std::ptr::null_mut()); FillConsoleOutputAttribute(handle, csbi.wAttributes, (size.X * size.Y) as u32, coord, std::ptr::null_mut()); SetConsoleCursorPosition(handle, coord); } } } #[cfg(target_os = "windows")] pub fn set_terminal_title(title: &str) { use std::io::{self, Write}; use winapi::um::wincon::SetConsoleTitleA; let title_bytes = title.as_bytes(); let c_title = std::ffi::CString::new(title_bytes).unwrap(); unsafe { SetConsoleTitleA(c_title.as_ptr()); } } #[cfg(target_os = "windows")] pub fn set_cursor_visibility(enable: bool) { use std::io::{self, Write}; use winapi::um::wincon::{SetConsoleCursorInfo, CONSOLE_CURSOR_INFO}; let stdout = io::stdout(); let handle = stdout.as_raw_handle(); let mut cursor_info: CONSOLE_CURSOR_INFO = unsafe { std::mem::zeroed() }; unsafe { SetConsoleCursorInfo(handle, &mut cursor_info); cursor_info.bVisible = if enable { 1 } else { 0 }; SetConsoleCursorInfo(handle, &cursor_info); } }