68 lines
2.3 KiB
Rust
68 lines
2.3 KiB
Rust
#[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);
|
|
}
|
|
}
|