123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- //! termios implementation, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/termios.h.html
- use header::errno;
- use platform;
- use platform::types::*;
- use platform::{Pal, Sys};
- pub type cc_t = u8;
- pub type speed_t = u32;
- pub type tcflag_t = u32;
- pub const NCCS: usize = 32;
- #[repr(C)]
- pub struct termios {
- c_iflag: tcflag_t,
- c_oflag: tcflag_t,
- c_cflag: tcflag_t,
- c_lflag: tcflag_t,
- c_line: cc_t,
- c_cc: [cc_t; NCCS],
- __c_ispeed: speed_t,
- __c_ospeed: speed_t,
- }
- #[no_mangle]
- pub extern "C" fn tcgetattr(fd: c_int, out: *mut termios) -> c_int {
- Sys::tcgetattr(fd, out)
- }
- #[no_mangle]
- pub extern "C" fn tcsetattr(fd: c_int, act: c_int, value: *mut termios) -> c_int {
- Sys::tcsetattr(fd, act, value)
- }
- #[no_mangle]
- pub unsafe extern "C" fn cfgetispeed(termios_p: *const termios) -> speed_t {
- (*termios_p).__c_ispeed
- }
- #[no_mangle]
- pub unsafe extern "C" fn cfgetospeed(termios_p: *const termios) -> speed_t {
- (*termios_p).__c_ospeed
- }
- #[no_mangle]
- pub unsafe extern "C" fn cfsetispeed(termios_p: *mut termios, speed: speed_t) -> c_int {
- match speed as usize {
- B0..=B38400 | B57600..=B4000000 => {
- (*termios_p).__c_ispeed = speed;
- 0
- }
- _ => {
- platform::errno = errno::EINVAL;
- -1
- }
- }
- }
- #[no_mangle]
- pub unsafe extern "C" fn cfsetospeed(termios_p: *mut termios, speed: speed_t) -> c_int {
- match speed as usize {
- B0..=B38400 | B57600..=B4000000 => {
- (*termios_p).__c_ospeed = speed;
- 0
- }
- _ => {
- platform::errno = errno::EINVAL;
- -1
- }
- }
- }
- pub const VINTR: usize = 0;
- pub const VQUIT: usize = 1;
- pub const VERASE: usize = 2;
- pub const VKILL: usize = 3;
- pub const VEOF: usize = 4;
- pub const VTIME: usize = 5;
- pub const VMIN: usize = 6;
- pub const VSWTC: usize = 7;
- pub const VSTART: usize = 8;
- pub const VSTOP: usize = 9;
- pub const VSUSP: usize = 10;
- pub const VEOL: usize = 11;
- pub const VREPRINT: usize = 12;
- pub const VDISCARD: usize = 13;
- pub const VWERASE: usize = 14;
- pub const VLNEXT: usize = 15;
- pub const VEOL2: usize = 16;
- pub const IGNBRK: usize = 0o000_001;
- pub const BRKINT: usize = 0o000_002;
- pub const IGNPAR: usize = 0o000_004;
- pub const PARMRK: usize = 0o000_010;
- pub const INPCK: usize = 0o000_020;
- pub const ISTRIP: usize = 0o000_040;
- pub const INLCR: usize = 0o000_100;
- pub const IGNCR: usize = 0o000_200;
- pub const ICRNL: usize = 0o000_400;
- pub const IUCLC: usize = 0o001_000;
- pub const IXON: usize = 0o002_000;
- pub const IXANY: usize = 0o004_000;
- pub const IXOFF: usize = 0o010_000;
- pub const IMAXBEL: usize = 0o020_000;
- pub const IUTF8: usize = 0o040_000;
- pub const OPOST: usize = 0o000_001;
- pub const OLCUC: usize = 0o000_002;
- pub const ONLCR: usize = 0o000_004;
- pub const OCRNL: usize = 0o000_010;
- pub const ONOCR: usize = 0o000_020;
- pub const ONLRET: usize = 0o00_0040;
- pub const OFILL: usize = 0o000_100;
- pub const OFDEL: usize = 0o000_200;
- pub const VTDLY: usize = 0o040_000;
- pub const VT0: usize = 0o000_000;
- pub const VT1: usize = 0o040_000;
- pub const B0: usize = 0o000_000;
- pub const B50: usize = 0o000_001;
- pub const B75: usize = 0o000_002;
- pub const B110: usize = 0o000_003;
- pub const B134: usize = 0o000_004;
- pub const B150: usize = 0o000_005;
- pub const B200: usize = 0o000_006;
- pub const B300: usize = 0o000_007;
- pub const B600: usize = 0o000_010;
- pub const B1200: usize = 0o000_011;
- pub const B1800: usize = 0o000_012;
- pub const B2400: usize = 0o000_013;
- pub const B4800: usize = 0o000_014;
- pub const B9600: usize = 0o000_015;
- pub const B19200: usize = 0o000_016;
- pub const B38400: usize = 0o000_017;
- pub const B57600: usize = 0o010_001;
- pub const B115200: usize = 0o010_002;
- pub const B230400: usize = 0o010_003;
- pub const B460800: usize = 0o010_004;
- pub const B500000: usize = 0o010_005;
- pub const B576000: usize = 0o010_006;
- pub const B921600: usize = 0o010_007;
- pub const B1000000: usize = 0o010_010;
- pub const B1152000: usize = 0o010_011;
- pub const B1500000: usize = 0o010_012;
- pub const B2000000: usize = 0o010_013;
- pub const B2500000: usize = 0o010_014;
- pub const B3000000: usize = 0o010_015;
- pub const B3500000: usize = 0o010_016;
- pub const B4000000: usize = 0o010_017;
- pub const CSIZE: usize = 0o000_060;
- pub const CS5: usize = 0o000_000;
- pub const CS6: usize = 0o000_020;
- pub const CS7: usize = 0o000_040;
- pub const CS8: usize = 0o000_060;
- pub const CSTOPB: usize = 0o000_100;
- pub const CREAD: usize = 0o000_200;
- pub const PARENB: usize = 0o000_400;
- pub const PARODD: usize = 0o001_000;
- pub const HUPCL: usize = 0o002_000;
- pub const CLOCAL: usize = 0o004_000;
- pub const ISIG: usize = 0o000_001;
- pub const ICANON: usize = 0o000_002;
- pub const ECHO: usize = 0o000_010;
- pub const ECHOE: usize = 0o000_020;
- pub const ECHOK: usize = 0o000_040;
- pub const ECHONL: usize = 0o000_100;
- pub const NOFLSH: usize = 0o000_200;
- pub const TOSTOP: usize = 0o000_400;
- pub const IEXTEN: usize = 0o100_000;
- pub const TCOOFF: usize = 0;
- pub const TCOON: usize = 1;
- pub const TCIOFF: usize = 2;
- pub const TCION: usize = 3;
- pub const TCIFLUSH: usize = 0;
- pub const TCOFLUSH: usize = 1;
- pub const TCIOFLUSH: usize = 2;
- pub const TCSANOW: usize = 0;
- pub const TCSADRAIN: usize = 1;
- pub const TCSAFLUSH: usize = 2;
|