From 136502f371851efec48426d424115e136033c157 Mon Sep 17 00:00:00 2001 From: jakobst1n Date: Sat, 8 Jun 2024 20:15:35 +0200 Subject: Add some basic functionality --- src/term.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/term.rs (limited to 'src/term.rs') diff --git a/src/term.rs b/src/term.rs new file mode 100644 index 0000000..275ab60 --- /dev/null +++ b/src/term.rs @@ -0,0 +1,30 @@ +use std::fs::File; +use std::io::Error; +use std::mem; +use std::os::raw::{c_int, c_ushort}; +use std::os::unix::io::AsRawFd; + +#[repr(C)] +struct Winsize { + ws_row: c_ushort, + ws_col: c_ushort, + ws_xpixel: c_ushort, + ws_ypixel: c_ushort, +} + +const TIOCGWINSZ: c_int = 0x5413; + +extern "C" { + fn ioctl(fd: c_int, request: c_int, ...) -> c_int; +} + +pub fn get_terminal_size() -> Result<(u16, u16), Error> { + let stdout = File::open("/dev/tty")?; + let fd = stdout.as_raw_fd(); + let mut ws: Winsize = unsafe { mem::zeroed() }; + let result = unsafe { ioctl(fd, TIOCGWINSZ, &mut ws) }; + if result == -1 { + return Err(Error::last_os_error()); + } + Ok((ws.ws_col, ws.ws_row)) +} -- cgit v1.2.3