pub fn get_termattr() -> libc::termios {
let mut saved_termattr = libc::termios {
c_iflag: 0,
c_oflag: 0,
c_cflag: 0,
c_lflag: 0,
c_cc: [0u8; 32],
__c_ispeed: 0,
__c_ospeed: 0,
c_line: 0,
};
unsafe {
let saved_termattr_ptr = &mut saved_termattr;
libc::tcgetattr(0, saved_termattr_ptr);
}
let mut termattr = saved_termattr;
termattr.c_lflag = termattr.c_lflag & !(libc::ICANON | libc::ECHO);
termattr.c_cc[libc::VMIN] = 1;
termattr.c_cc[libc::VTIME] = 0;
unsafe {
libc::tcsetattr(0, libc::TCSANOW, &termattr);
}
unsafe {
libc::fcntl(0, libc::F_SETFL, libc::O_NONBLOCK);
}
saved_termattr
}