1ddad6800SSascha Wildner /* 2ddad6800SSascha Wildner * Copyright (c) 2016 The DragonFly Project. All rights reserved. 3ddad6800SSascha Wildner * 4ddad6800SSascha Wildner * Redistribution and use in source and binary forms, with or without 5ddad6800SSascha Wildner * modification, are permitted provided that the following conditions 6ddad6800SSascha Wildner * are met: 7ddad6800SSascha Wildner * 8ddad6800SSascha Wildner * 1. Redistributions of source code must retain the above copyright 9ddad6800SSascha Wildner * notice, this list of conditions and the following disclaimer. 10ddad6800SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 11ddad6800SSascha Wildner * notice, this list of conditions and the following disclaimer in 12ddad6800SSascha Wildner * the documentation and/or other materials provided with the 13ddad6800SSascha Wildner * distribution. 14ddad6800SSascha Wildner * 3. Neither the name of The DragonFly Project nor the names of its 15ddad6800SSascha Wildner * contributors may be used to endorse or promote products derived 16ddad6800SSascha Wildner * from this software without specific, prior written permission. 17ddad6800SSascha Wildner * 18ddad6800SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19ddad6800SSascha Wildner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20ddad6800SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21ddad6800SSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22ddad6800SSascha Wildner * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23ddad6800SSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 24ddad6800SSascha Wildner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25ddad6800SSascha Wildner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26ddad6800SSascha Wildner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27ddad6800SSascha Wildner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 28ddad6800SSascha Wildner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29ddad6800SSascha Wildner * SUCH DAMAGE. 30ddad6800SSascha Wildner */ 31ddad6800SSascha Wildner 32ddad6800SSascha Wildner #ifndef _SYS__TERMIOS_H_ 33ddad6800SSascha Wildner #define _SYS__TERMIOS_H_ 34ddad6800SSascha Wildner 35*b2e7ce7dSSascha Wildner #include <sys/cdefs.h> 36*b2e7ce7dSSascha Wildner 37ddad6800SSascha Wildner /* 38ddad6800SSascha Wildner * Special Control Characters 39ddad6800SSascha Wildner * 40ddad6800SSascha Wildner * Index into c_cc[] character array. 41ddad6800SSascha Wildner * 42ddad6800SSascha Wildner * Name Subscript Enabled by 43ddad6800SSascha Wildner */ 44ddad6800SSascha Wildner #define VEOF 0 /* ICANON */ 45ddad6800SSascha Wildner #define VEOL 1 /* ICANON */ 46ddad6800SSascha Wildner #if __BSD_VISIBLE 47ddad6800SSascha Wildner #define VEOL2 2 /* ICANON together with IEXTEN */ 48ddad6800SSascha Wildner #endif 49ddad6800SSascha Wildner #define VERASE 3 /* ICANON */ 50ddad6800SSascha Wildner #if __BSD_VISIBLE 51ddad6800SSascha Wildner #define VWERASE 4 /* ICANON together with IEXTEN */ 52ddad6800SSascha Wildner #endif 53ddad6800SSascha Wildner #define VKILL 5 /* ICANON */ 54ddad6800SSascha Wildner #if __BSD_VISIBLE 55ddad6800SSascha Wildner #define VREPRINT 6 /* ICANON together with IEXTEN */ 56ddad6800SSascha Wildner #define VERASE2 7 /* ICANON */ 57ddad6800SSascha Wildner #endif 58ddad6800SSascha Wildner #define VINTR 8 /* ISIG */ 59ddad6800SSascha Wildner #define VQUIT 9 /* ISIG */ 60ddad6800SSascha Wildner #define VSUSP 10 /* ISIG */ 61ddad6800SSascha Wildner #if __BSD_VISIBLE 62ddad6800SSascha Wildner #define VDSUSP 11 /* ISIG together with IEXTEN */ 63ddad6800SSascha Wildner #endif 64ddad6800SSascha Wildner #define VSTART 12 /* IXON, IXOFF */ 65ddad6800SSascha Wildner #define VSTOP 13 /* IXON, IXOFF */ 66ddad6800SSascha Wildner #if __BSD_VISIBLE 67ddad6800SSascha Wildner #define VLNEXT 14 /* IEXTEN */ 68ddad6800SSascha Wildner #define VDISCARD 15 /* IEXTEN */ 69ddad6800SSascha Wildner #endif 70ddad6800SSascha Wildner #define VMIN 16 /* !ICANON */ 71ddad6800SSascha Wildner #define VTIME 17 /* !ICANON */ 72ddad6800SSascha Wildner #if __BSD_VISIBLE 73ddad6800SSascha Wildner #define VSTATUS 18 /* ICANON together with IEXTEN */ 74ddad6800SSascha Wildner #define VCHECKPT 19 /* ICANON together with IEXTEN */ 75ddad6800SSascha Wildner #endif 76ddad6800SSascha Wildner #define NCCS 20 77ddad6800SSascha Wildner 78ddad6800SSascha Wildner #define _POSIX_VDISABLE 0xff 79ddad6800SSascha Wildner 80ddad6800SSascha Wildner /* 81ddad6800SSascha Wildner * Input flags - software input processing 82ddad6800SSascha Wildner */ 83ddad6800SSascha Wildner #define IGNBRK 0x00000001 /* ignore BREAK condition */ 84ddad6800SSascha Wildner #define BRKINT 0x00000002 /* map BREAK to SIGINTR */ 85ddad6800SSascha Wildner #define IGNPAR 0x00000004 /* ignore (discard) parity errors */ 86ddad6800SSascha Wildner #define PARMRK 0x00000008 /* mark parity and framing errors */ 87ddad6800SSascha Wildner #define INPCK 0x00000010 /* enable checking of parity errors */ 88ddad6800SSascha Wildner #define ISTRIP 0x00000020 /* strip 8th bit off chars */ 89ddad6800SSascha Wildner #define INLCR 0x00000040 /* map NL into CR */ 90ddad6800SSascha Wildner #define IGNCR 0x00000080 /* ignore CR */ 91ddad6800SSascha Wildner #define ICRNL 0x00000100 /* map CR to NL (ala CRMOD) */ 92ddad6800SSascha Wildner #define IXON 0x00000200 /* enable output flow control */ 93ddad6800SSascha Wildner #define IXOFF 0x00000400 /* enable input flow control */ 94ddad6800SSascha Wildner #if __XSI_VISIBLE || __POSIX_VISIBLE >= 200809 95ddad6800SSascha Wildner #define IXANY 0x00000800 /* any char will restart after stop */ 96ddad6800SSascha Wildner #endif 97ddad6800SSascha Wildner #if __BSD_VISIBLE 98ddad6800SSascha Wildner #define IMAXBEL 0x00002000 /* ring bell on input queue full */ 99ddad6800SSascha Wildner #endif /*__BSD_VISIBLE */ 100ddad6800SSascha Wildner 101ddad6800SSascha Wildner /* 102ddad6800SSascha Wildner * Output flags - software output processing 103ddad6800SSascha Wildner */ 104ddad6800SSascha Wildner #define OPOST 0x00000001 /* enable following output processing */ 105ddad6800SSascha Wildner #if __XSI_VISIBLE 106ddad6800SSascha Wildner #define ONLCR 0x00000002 /* map NL to CR-NL (ala CRMOD) */ 1078edc0affSSascha Wildner #define TABDLY 0x00000004 /* tab delay mask */ 1088edc0affSSascha Wildner #define TAB0 0x00000000 /* no tab delay and expansion */ 1098edc0affSSascha Wildner #define TAB3 0x00000004 /* expand tabs to spaces */ 110ddad6800SSascha Wildner #endif 111ddad6800SSascha Wildner #if __BSD_VISIBLE 1128edc0affSSascha Wildner #define OXTABS TAB3 113ddad6800SSascha Wildner #define ONOEOT 0x00000008 /* discard EOT's (^D) on output) */ 114ddad6800SSascha Wildner #endif /*__BSD_VISIBLE */ 115ddad6800SSascha Wildner #if __XSI_VISIBLE 116ddad6800SSascha Wildner #define OCRNL 0x00000010 /* map CR to NL on output */ 117ddad6800SSascha Wildner #define ONOCR 0x00000020 /* no CR output at column 0 */ 118ddad6800SSascha Wildner #define ONLRET 0x00000040 /* NL performs CR function */ 119ddad6800SSascha Wildner #endif 120ddad6800SSascha Wildner 121ddad6800SSascha Wildner /* 122ddad6800SSascha Wildner * Control flags - hardware control of terminal 123ddad6800SSascha Wildner */ 124ddad6800SSascha Wildner #if __BSD_VISIBLE 125ddad6800SSascha Wildner #define CIGNORE 0x00000001 /* ignore control flags */ 126ddad6800SSascha Wildner #endif 127ddad6800SSascha Wildner #define CSIZE 0x00000300 /* character size mask */ 128ddad6800SSascha Wildner #define CS5 0x00000000 /* 5 bits (pseudo) */ 129ddad6800SSascha Wildner #define CS6 0x00000100 /* 6 bits */ 130ddad6800SSascha Wildner #define CS7 0x00000200 /* 7 bits */ 131ddad6800SSascha Wildner #define CS8 0x00000300 /* 8 bits */ 132ddad6800SSascha Wildner #define CSTOPB 0x00000400 /* send 2 stop bits */ 133ddad6800SSascha Wildner #define CREAD 0x00000800 /* enable receiver */ 134ddad6800SSascha Wildner #define PARENB 0x00001000 /* parity enable */ 135ddad6800SSascha Wildner #define PARODD 0x00002000 /* odd parity, else even */ 136ddad6800SSascha Wildner #define HUPCL 0x00004000 /* hang up on last close */ 137ddad6800SSascha Wildner #define CLOCAL 0x00008000 /* ignore modem status lines */ 138ddad6800SSascha Wildner #if __BSD_VISIBLE 139ddad6800SSascha Wildner #define CCTS_OFLOW 0x00010000 /* CTS flow control of output */ 140ddad6800SSascha Wildner #define CRTSCTS (CCTS_OFLOW | CRTS_IFLOW) 141ddad6800SSascha Wildner #define CRTS_IFLOW 0x00020000 /* RTS flow control of input */ 142ddad6800SSascha Wildner #define CDTR_IFLOW 0x00040000 /* DTR flow control of input */ 143ddad6800SSascha Wildner #define CDSR_OFLOW 0x00080000 /* DSR flow control of output */ 144ddad6800SSascha Wildner #define CCAR_OFLOW 0x00100000 /* DCD flow control of output */ 145951ab329SSascha Wildner #define MDMBUF CCAR_OFLOW /* old name for CCAR_OFLOW */ 146ddad6800SSascha Wildner #endif 147ddad6800SSascha Wildner 148ddad6800SSascha Wildner 149ddad6800SSascha Wildner /* 150ddad6800SSascha Wildner * "Local" flags - dumping ground for other state 151ddad6800SSascha Wildner * 152ddad6800SSascha Wildner * Warning: some flags in this structure begin with 153ddad6800SSascha Wildner * the letter "I" and look like they belong in the 154ddad6800SSascha Wildner * input flag. 155ddad6800SSascha Wildner */ 156ddad6800SSascha Wildner 157ddad6800SSascha Wildner #if __BSD_VISIBLE 158ddad6800SSascha Wildner #define ECHOKE 0x00000001 /* visual erase for line kill */ 159ddad6800SSascha Wildner #endif /*__BSD_VISIBLE */ 160ddad6800SSascha Wildner #define ECHOE 0x00000002 /* visually erase chars */ 161ddad6800SSascha Wildner #define ECHOK 0x00000004 /* echo NL after line kill */ 162ddad6800SSascha Wildner #define ECHO 0x00000008 /* enable echoing */ 163ddad6800SSascha Wildner #define ECHONL 0x00000010 /* echo NL even if ECHO is off */ 164ddad6800SSascha Wildner #if __BSD_VISIBLE 165ddad6800SSascha Wildner #define ECHOPRT 0x00000020 /* visual erase mode for hardcopy */ 166ddad6800SSascha Wildner #define ECHOCTL 0x00000040 /* echo control chars as ^(Char) */ 167ddad6800SSascha Wildner #endif /*__BSD_VISIBLE */ 168ddad6800SSascha Wildner #define ISIG 0x00000080 /* enable signals INTR, QUIT, [D]SUSP */ 169ddad6800SSascha Wildner #define ICANON 0x00000100 /* canonicalize input lines */ 170ddad6800SSascha Wildner #if __BSD_VISIBLE 171ddad6800SSascha Wildner #define ALTWERASE 0x00000200 /* use alternate WERASE algorithm */ 172ddad6800SSascha Wildner #endif /*__BSD_VISIBLE */ 173ddad6800SSascha Wildner #define IEXTEN 0x00000400 /* enable DISCARD and LNEXT */ 174ddad6800SSascha Wildner #if __BSD_VISIBLE 175ddad6800SSascha Wildner #define EXTPROC 0x00000800 /* external processing */ 176ddad6800SSascha Wildner #endif /* __BSD_VISIBLE */ 177ddad6800SSascha Wildner #define TOSTOP 0x00400000 /* stop background jobs from output */ 178ddad6800SSascha Wildner #if __BSD_VISIBLE 179ddad6800SSascha Wildner #define FLUSHO 0x00800000 /* output being flushed (state) */ 180ddad6800SSascha Wildner #define NOKERNINFO 0x02000000 /* no kernel output from VSTATUS */ 181ddad6800SSascha Wildner #define PENDIN 0x20000000 /* XXX retype pending input (state) */ 182ddad6800SSascha Wildner #endif /*__BSD_VISIBLE */ 183ddad6800SSascha Wildner #define NOFLSH 0x80000000 /* don't flush after interrupt */ 184ddad6800SSascha Wildner 185ddad6800SSascha Wildner /* 186ddad6800SSascha Wildner * Standard speeds 187ddad6800SSascha Wildner */ 188ddad6800SSascha Wildner #define B0 0 189ddad6800SSascha Wildner #define B50 50 190ddad6800SSascha Wildner #define B75 75 191ddad6800SSascha Wildner #define B110 110 192ddad6800SSascha Wildner #define B134 134 193ddad6800SSascha Wildner #define B150 150 194ddad6800SSascha Wildner #define B200 200 195ddad6800SSascha Wildner #define B300 300 196ddad6800SSascha Wildner #define B600 600 197ddad6800SSascha Wildner #define B1200 1200 198ddad6800SSascha Wildner #define B1800 1800 199ddad6800SSascha Wildner #define B2400 2400 200ddad6800SSascha Wildner #define B4800 4800 201ddad6800SSascha Wildner #define B9600 9600 202ddad6800SSascha Wildner #define B19200 19200 203ddad6800SSascha Wildner #define B38400 38400 204ddad6800SSascha Wildner #if __BSD_VISIBLE 205ddad6800SSascha Wildner #define B7200 7200 206ddad6800SSascha Wildner #define B14400 14400 207ddad6800SSascha Wildner #define B28800 28800 208ddad6800SSascha Wildner #define B57600 57600 209ddad6800SSascha Wildner #define B76800 76800 210ddad6800SSascha Wildner #define B115200 115200 211ddad6800SSascha Wildner #define B230400 230400 21251a4cfa2SSascha Wildner #define B460800 460800 21351a4cfa2SSascha Wildner #define B921600 921600 214ddad6800SSascha Wildner #define EXTA 19200 215ddad6800SSascha Wildner #define EXTB 38400 216ddad6800SSascha Wildner #endif /* __BSD_VISIBLE */ 217ddad6800SSascha Wildner 218ddad6800SSascha Wildner typedef unsigned int tcflag_t; 219ddad6800SSascha Wildner typedef unsigned char cc_t; 220ddad6800SSascha Wildner typedef unsigned int speed_t; 221ddad6800SSascha Wildner 222ddad6800SSascha Wildner struct termios { 223ddad6800SSascha Wildner tcflag_t c_iflag; /* input flags */ 224ddad6800SSascha Wildner tcflag_t c_oflag; /* output flags */ 225ddad6800SSascha Wildner tcflag_t c_cflag; /* control flags */ 226ddad6800SSascha Wildner tcflag_t c_lflag; /* local flags */ 227ddad6800SSascha Wildner cc_t c_cc[NCCS]; /* control chars */ 228ddad6800SSascha Wildner speed_t c_ispeed; /* input speed */ 229ddad6800SSascha Wildner speed_t c_ospeed; /* output speed */ 230ddad6800SSascha Wildner }; 231ddad6800SSascha Wildner 2325c08cc45SSascha Wildner #if __BSD_VISIBLE 2335c08cc45SSascha Wildner #define CCEQ(val, c) ((c) == (val) ? (val) != _POSIX_VDISABLE : 0) 2345c08cc45SSascha Wildner #endif 2355c08cc45SSascha Wildner 236ddad6800SSascha Wildner #endif /* !_SYS__TERMIOS_H_ */ 237