use super::to_io_result;
use libc::{tcflag_t, termios};
use std::os::fd::{AsRawFd, BorrowedFd};
use std::{io, mem};
pub(super) fn get_terminal_attr(fd: BorrowedFd) -> io::Result<termios> {
unsafe {
let mut termios = mem::zeroed();
to_io_result(libc::tcgetattr(fd.as_raw_fd(), &mut termios))?;
Ok(termios)
}
}
pub(super) fn set_terminal_attr(fd: BorrowedFd, termios: &termios) -> io::Result<()> {
to_io_result(unsafe { libc::tcsetattr(fd.as_raw_fd(), libc::TCSADRAIN, termios) }).and(Ok(()))
}
const FLAGS_DISABLED_IN_RAW_MODE: tcflag_t = libc::ICANON | libc::ECHO;
pub(super) fn enable_raw_mode(termios: &mut termios) {
termios.c_lflag &= !FLAGS_DISABLED_IN_RAW_MODE;
}
pub(super) fn is_raw_mode_enabled(termios: &termios) -> bool {
termios.c_lflag & FLAGS_DISABLED_IN_RAW_MODE == 0
}