aboutsummaryrefslogtreecommitdiff
path: root/src/term.rs
diff options
context:
space:
mode:
authorjakobst1n <jakob.stendahl@outlook.com>2024-06-08 20:15:35 +0200
committerjakobst1n <jakob.stendahl@outlook.com>2024-06-08 20:15:35 +0200
commit136502f371851efec48426d424115e136033c157 (patch)
treee4ec71f3dd3733503c5c284ce87fbb0ae0a36909 /src/term.rs
parent6e9628e2d20c09eaeb7eedfe2f7278de0b65a09f (diff)
downloadtextgraph-136502f371851efec48426d424115e136033c157.tar.gz
textgraph-136502f371851efec48426d424115e136033c157.zip
Add some basic functionality
Diffstat (limited to 'src/term.rs')
-rw-r--r--src/term.rs30
1 files changed, 30 insertions, 0 deletions
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))
+}