1#![feature(libc)]
2
3extern crate libc;
4use self::libc::{c_int, c_uint, c_uchar};
5
6
7#[allow(non_camel_case_types)]
8pub type cc_t = c_uchar;
9
10#[allow(non_camel_case_types)]
11pub type speed_t = c_uint;
12
13#[allow(non_camel_case_types)]
14pub type tcflag_t = c_uint;
15
16
17#[cfg(target_os = "linux")]
18pub const NCCS: usize = 32; #[cfg(target_os = "linux")]
22#[repr(C)]
23#[derive(Clone, PartialEq, Eq)]
24pub struct termios {
25 pub c_iflag: tcflag_t, pub c_oflag: tcflag_t, pub c_cflag: tcflag_t, pub c_lflag: tcflag_t, pub c_line: cc_t, pub c_cc: [cc_t; NCCS], pub c_ispeed: speed_t, pub c_ospeed: speed_t, }
36
37impl termios {
38 pub fn new() -> termios {
39 use std::mem;
40 unsafe { mem::zeroed() }
41 }
42}
43
44
45pub const VINTR: usize = 0;
47pub const VQUIT: usize = 1;
48pub const VERASE: usize = 2;
49pub const VKILL: usize = 3;
50pub const VEOF: usize = 4;
51pub const VTIME: usize = 5;
52pub const VMIN: usize = 6;
53pub const VSWTC: usize = 7;
54pub const VSTART: usize = 8;
55pub const VSTOP: usize = 9;
56pub const VSUSP: usize = 10;
57pub const VEOL: usize = 11;
58pub const VREPRINT: usize = 12;
59pub const VDISCARD: usize = 13;
60pub const VWERASE: usize = 14;
61pub const VLNEXT: usize = 15;
62pub const VEOL2: usize = 16;
63
64
65pub const IGNBRK: tcflag_t = 0000001;
67pub const BRKINT: tcflag_t = 0000002;
68pub const IGNPAR: tcflag_t = 0000004;
69pub const PARMRK: tcflag_t = 0000010;
70pub const INPCK: tcflag_t = 0000020;
71pub const ISTRIP: tcflag_t = 0000040;
72pub const INLCR: tcflag_t = 0000100;
73pub const IGNCR: tcflag_t = 0000200;
74pub const ICRNL: tcflag_t = 0000400;
75pub const IUCLC: tcflag_t = 0001000;
76pub const IXON: tcflag_t = 0002000;
77pub const IXANY: tcflag_t = 0004000;
78pub const IXOFF: tcflag_t = 0010000;
79pub const IMAXBEL: tcflag_t = 0020000;
80pub const IUTF8: tcflag_t = 0040000;
81
82
83pub const OPOST: tcflag_t = 0000001;
85pub const OLCUC: tcflag_t = 0000002;
86pub const ONLCR: tcflag_t = 0000004;
87pub const OCRNL: tcflag_t = 0000010;
88pub const ONOCR: tcflag_t = 0000020;
89pub const ONLRET: tcflag_t = 0000040;
90pub const OFILL: tcflag_t = 0000100;
91pub const OFDEL: tcflag_t = 0000200;
92pub const NLDLY: tcflag_t = 0000400;
93pub const NL0: tcflag_t = 0000000;
94pub const NL1: tcflag_t = 0000400;
95pub const CRDLY: tcflag_t = 0003000;
96pub const CR0: tcflag_t = 0000000;
97pub const CR1: tcflag_t = 0001000;
98pub const CR2: tcflag_t = 0002000;
99pub const CR3: tcflag_t = 0003000;
100pub const TABDLY: tcflag_t = 0014000;
101pub const TAB0: tcflag_t = 0000000;
102pub const TAB1: tcflag_t = 0004000;
103pub const TAB2: tcflag_t = 0010000;
104pub const TAB3: tcflag_t = 0014000;
105pub const BSDLY: tcflag_t = 0020000;
106pub const BS0: tcflag_t = 0000000;
107pub const BS1: tcflag_t = 0020000;
108pub const FFDLY: tcflag_t = 0100000;
109pub const FF0: tcflag_t = 0000000;
110pub const FF1: tcflag_t = 0100000;
111pub const VTDLY: tcflag_t = 0040000;
112pub const VT0: tcflag_t = 0000000;
113pub const VT1: tcflag_t = 0040000;
114pub const XTABS: tcflag_t = 0014000;
115
116
117pub const CBAUD: tcflag_t = 0010017;
119pub const B0: tcflag_t = 0000000; pub const B50: tcflag_t = 0000001;
121pub const B75: tcflag_t = 0000002;
122pub const B110: tcflag_t = 0000003;
123pub const B134: tcflag_t = 0000004;
124pub const B150: tcflag_t = 0000005;
125pub const B200: tcflag_t = 0000006;
126pub const B300: tcflag_t = 0000007;
127pub const B600: tcflag_t = 0000010;
128pub const B1200: tcflag_t = 0000011;
129pub const B1800: tcflag_t = 0000012;
130pub const B2400: tcflag_t = 0000013;
131pub const B4800: tcflag_t = 0000014;
132pub const B9600: tcflag_t = 0000015;
133pub const B19200: tcflag_t = 0000016;
134pub const B38400: tcflag_t = 0000017;
135pub const EXTA: tcflag_t = B19200;
136pub const EXTB: tcflag_t = B38400;
137pub const CSIZE: tcflag_t = 0000060;
138pub const CS5: tcflag_t = 0000000;
139pub const CS6: tcflag_t = 0000020;
140pub const CS7: tcflag_t = 0000040;
141pub const CS8: tcflag_t = 0000060;
142pub const CSTOPB: tcflag_t = 0000100;
143pub const CREAD: tcflag_t = 0000200;
144pub const PARENB: tcflag_t = 0000400;
145pub const PARODD: tcflag_t = 0001000;
146pub const HUPCL: tcflag_t = 0002000;
147pub const CLOCAL: tcflag_t = 0004000;
148pub const CBAUDEX: tcflag_t = 0010000;
149pub const B57600: tcflag_t = 0010001;
150pub const B115200: tcflag_t = 0010002;
151pub const B230400: tcflag_t = 0010003;
152pub const B460800: tcflag_t = 0010004;
153pub const B500000: tcflag_t = 0010005;
154pub const B576000: tcflag_t = 0010006;
155pub const B921600: tcflag_t = 0010007;
156pub const B1000000: tcflag_t = 0010010;
157pub const B1152000: tcflag_t = 0010011;
158pub const B1500000: tcflag_t = 0010012;
159pub const B2000000: tcflag_t = 0010013;
160pub const B2500000: tcflag_t = 0010014;
161pub const B3000000: tcflag_t = 0010015;
162pub const B3500000: tcflag_t = 0010016;
163pub const B4000000: tcflag_t = 0010017;
164pub const __MAX_BAUD: tcflag_t = B4000000;
165
166#[allow(overflowing_literals)]
170pub const CIBAUD: tcflag_t = 002003600000; #[allow(overflowing_literals)]
172pub const CMSPAR: tcflag_t = 010000000000; #[allow(overflowing_literals)]
174pub const CRTSCTS: tcflag_t = 020000000000; pub const ISIG: tcflag_t = 0000001;
179pub const ICANON: tcflag_t = 0000002;
180pub const XCASE: tcflag_t = 0000004;
181pub const ECHO: tcflag_t = 0000010;
182pub const ECHOE: tcflag_t = 0000020;
183pub const ECHOK: tcflag_t = 0000040;
184pub const ECHONL: tcflag_t = 0000100;
185pub const NOFLSH: tcflag_t = 0000200;
186pub const TOSTOP: tcflag_t = 0000400;
187pub const ECHOCTL: tcflag_t = 0001000;
188pub const ECHOPRT: tcflag_t = 0002000;
189pub const ECHOKE: tcflag_t = 0004000;
190pub const FLUSHO: tcflag_t = 0010000;
191pub const PENDIN: tcflag_t = 0040000;
192pub const IEXTEN: tcflag_t = 0100000;
193pub const EXTPROC: tcflag_t = 0200000;
194
195
196pub const TCOOFF: c_int = 0;
198pub const TCOON: c_int = 1;
199pub const TCIOFF: c_int = 2;
200pub const TCION: c_int = 3;
201
202
203pub const TCIFLUSH: c_int = 0;
205pub const TCOFLUSH: c_int = 1;
206pub const TCIOFLUSH: c_int = 2;
207
208
209pub const TCSANOW: c_int = 0;
211pub const TCSADRAIN: c_int = 1;
212pub const TCSAFLUSH: c_int = 2;
213
214
215extern "C" {
216 pub fn tcgetattr(fd: c_int, tio: *mut termios) -> c_int;
217 pub fn tcsetattr(fd: c_int, optional_actions: c_int,
218 tio: *const termios) -> c_int;
219
220 pub fn tcsendbreak(fd: c_int, duration: c_int) -> c_int;
221 pub fn tcdrain(fd: c_int) -> c_int;
222 pub fn tcflush(fd: c_int, queue_selector: c_int) -> c_int;
223 pub fn tcflow(fd: c_int, action: c_int) -> c_int;
224
225 pub fn cfmakeraw(tio: *mut termios);
226
227 pub fn cfgetispeed(tio: *const termios) -> speed_t;
228 pub fn cfgetospeed(tio: *const termios) -> speed_t;
229 pub fn cfsetispeed(tio: *mut termios, speed: speed_t) -> c_int;
230 pub fn cfsetospeed(tio: *mut termios, speed: speed_t) -> c_int;
231 pub fn cfsetspeed(tio: *mut termios, speed: speed_t) -> c_int;
232}