1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
use std::{io, mem}; use super::{cvt, Termios}; use super::libc::c_int; pub fn get_terminal_attr() -> io::Result<Termios> { extern "C" { pub fn tcgetattr(fd: c_int, termptr: *mut Termios) -> c_int; } unsafe { let mut termios = mem::zeroed(); cvt(tcgetattr(1, &mut termios))?; Ok(termios) } } pub fn set_terminal_attr(termios: &Termios) -> io::Result<()> { extern "C" { pub fn tcsetattr(fd: c_int, opt: c_int, termptr: *const Termios) -> c_int; } cvt(unsafe { tcsetattr(1, 0, termios) }).and(Ok(())) } pub fn raw_terminal_attr(termios: &mut Termios) { extern "C" { pub fn cfmakeraw(termptr: *mut Termios); } unsafe { cfmakeraw(termios) } }