Home | History | Annotate | Line # | Download | only in sys
      1 /*	$NetBSD: termios.h,v 1.36 2018/12/07 19:01:11 jakllsch Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1988, 1989, 1993, 1994
      5  *	The Regents of the University of California.  All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  * 3. Neither the name of the University nor the names of its contributors
     16  *    may be used to endorse or promote products derived from this software
     17  *    without specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     29  * SUCH DAMAGE.
     30  *
     31  *	@(#)termios.h	8.3 (Berkeley) 3/28/94
     32  */
     33 
     34 #ifndef _SYS_TERMIOS_H_
     35 #define _SYS_TERMIOS_H_
     36 
     37 #include <sys/ansi.h>
     38 #include <sys/featuretest.h>
     39 
     40 /*
     41  * Special Control Characters
     42  *
     43  * Index into c_cc[] character array.
     44  *
     45  *	Name	     Subscript	Enabled by
     46  */
     47 #define	VEOF		0	/* ICANON */
     48 #define	VEOL		1	/* ICANON */
     49 #if defined(_NETBSD_SOURCE)
     50 #define	VEOL2		2	/* ICANON */
     51 #endif
     52 #define	VERASE		3	/* ICANON */
     53 #if defined(_NETBSD_SOURCE)
     54 #define VWERASE 	4	/* ICANON */
     55 #endif
     56 #define VKILL		5	/* ICANON */
     57 #if defined(_NETBSD_SOURCE)
     58 #define	VREPRINT 	6	/* ICANON */
     59 #endif
     60 /*			7	   spare 1 */
     61 #define VINTR		8	/* ISIG */
     62 #define VQUIT		9	/* ISIG */
     63 #define VSUSP		10	/* ISIG */
     64 #if defined(_NETBSD_SOURCE)
     65 #define VDSUSP		11	/* ISIG */
     66 #endif
     67 #define VSTART		12	/* IXON, IXOFF */
     68 #define VSTOP		13	/* IXON, IXOFF */
     69 #if defined(_NETBSD_SOURCE)
     70 #define	VLNEXT		14	/* IEXTEN */
     71 #define	VDISCARD	15	/* IEXTEN */
     72 #endif
     73 #define VMIN		16	/* !ICANON */
     74 #define VTIME		17	/* !ICANON */
     75 #if defined(_NETBSD_SOURCE)
     76 #define VSTATUS		18	/* ICANON */
     77 /*			19	   spare 2 */
     78 #endif
     79 #define	NCCS		20
     80 
     81 #define _POSIX_VDISABLE	__CAST(unsigned char, '\377')
     82 
     83 #if defined(_NETBSD_SOURCE)
     84 #define CCEQ(val, c)	(c == val ? val != _POSIX_VDISABLE : 0)
     85 #endif
     86 
     87 /*
     88  * Input flags - software input processing
     89  */
     90 #define	IGNBRK		0x00000001U	/* ignore BREAK condition */
     91 #define	BRKINT		0x00000002U	/* map BREAK to SIGINT */
     92 #define	IGNPAR		0x00000004U	/* ignore (discard) parity errors */
     93 #define	PARMRK		0x00000008U	/* mark parity and framing errors */
     94 #define	INPCK		0x00000010U	/* enable checking of parity errors */
     95 #define	ISTRIP		0x00000020U	/* strip 8th bit off chars */
     96 #define	INLCR		0x00000040U	/* map NL into CR */
     97 #define	IGNCR		0x00000080U	/* ignore CR */
     98 #define	ICRNL		0x00000100U	/* map CR to NL (ala CRMOD) */
     99 #define	IXON		0x00000200U	/* enable output flow control */
    100 #define	IXOFF		0x00000400U	/* enable input flow control */
    101 #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
    102 #define	IXANY		0x00000800U	/* any char will restart after stop */
    103 #endif
    104 #if defined(_NETBSD_SOURCE)
    105 #define IMAXBEL		0x00002000U	/* ring bell on input queue full */
    106 #endif
    107 
    108 /*
    109  * Output flags - software output processing
    110  */
    111 #define	OPOST		0x00000001U	/* enable following output processing */
    112 #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
    113 #define ONLCR		0x00000002U	/* map NL to CR-NL (ala CRMOD) */
    114 #endif
    115 #if defined(_NETBSD_SOURCE)
    116 #define OXTABS		0x00000004U	/* expand tabs to spaces */
    117 #define ONOEOT		0x00000008U	/* discard EOT's (^D) on output */
    118 #endif
    119 #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
    120 #define OCRNL		0x00000010U	/* map CR to NL */
    121 #define ONOCR		0x00000020U	/* discard CR's when on column 0 */
    122 #define ONLRET		0x00000040U	/* move to column 0 on CR */
    123 #endif  /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
    124 
    125 /*
    126  * Control flags - hardware control of terminal
    127  */
    128 #if defined(_NETBSD_SOURCE)
    129 #define	CIGNORE		0x00000001U	/* ignore control flags */
    130 #endif
    131 #define CSIZE		0x00000300U	/* character size mask */
    132 #define     CS5		    0x00000000U	    /* 5 bits (pseudo) */
    133 #define     CS6		    0x00000100U	    /* 6 bits */
    134 #define     CS7		    0x00000200U	    /* 7 bits */
    135 #define     CS8		    0x00000300U	    /* 8 bits */
    136 #define CSTOPB		0x00000400U	/* send 2 stop bits */
    137 #define CREAD		0x00000800U	/* enable receiver */
    138 #define PARENB		0x00001000U	/* parity enable */
    139 #define PARODD		0x00002000U	/* odd parity, else even */
    140 #define HUPCL		0x00004000U	/* hang up on last close */
    141 #define CLOCAL		0x00008000U	/* ignore modem status lines */
    142 #if defined(_NETBSD_SOURCE)
    143 #define	CRTSCTS		0x00010000U	/* RTS/CTS full-duplex flow control */
    144 #define	CRTS_IFLOW	CRTSCTS		/* XXX compat */
    145 #define	CCTS_OFLOW	CRTSCTS		/* XXX compat */
    146 #define	CDTRCTS		0x00020000U	/* DTR/CTS full-duplex flow control */
    147 #define	MDMBUF		0x00100000U	/* DTR/DCD hardware flow control */
    148 #define	CHWFLOW		(MDMBUF|CRTSCTS|CDTRCTS) /* all types of hw flow control */
    149 #endif
    150 
    151 
    152 /*
    153  * "Local" flags - dumping ground for other state
    154  *
    155  * Warning: some flags in this structure begin with
    156  * the letter "I" and look like they belong in the
    157  * input flag.
    158  */
    159 
    160 #if defined(_NETBSD_SOURCE)
    161 #define	ECHOKE		0x00000001U	/* visual erase for line kill */
    162 #endif
    163 #define	ECHOE		0x00000002U	/* visually erase chars */
    164 #define	ECHOK		0x00000004U	/* echo NL after line kill */
    165 #define ECHO		0x00000008U	/* enable echoing */
    166 #define	ECHONL		0x00000010U	/* echo NL even if ECHO is off */
    167 #if defined(_NETBSD_SOURCE)
    168 #define	ECHOPRT		0x00000020U	/* visual erase mode for hardcopy */
    169 #define ECHOCTL  	0x00000040U	/* echo control chars as ^(Char) */
    170 #endif  /* defined(_NETBSD_SOURCE) */
    171 #define	ISIG		0x00000080U	/* enable signals INT, QUIT, [D]SUSP */
    172 #define	ICANON		0x00000100U	/* canonicalize input lines */
    173 #if defined(_NETBSD_SOURCE)
    174 #define ALTWERASE	0x00000200U	/* use alternate WERASE algorithm */
    175 #endif /* defined(_NETBSD_SOURCE) */
    176 #define	IEXTEN		0x00000400U	/* enable DISCARD and LNEXT */
    177 #if defined(_NETBSD_SOURCE)
    178 #define EXTPROC         0x00000800U	/* external processing */
    179 #endif /* defined(_NETBSD_SOURCE) */
    180 #define TOSTOP		0x00400000U	/* stop background jobs on output */
    181 #if defined(_NETBSD_SOURCE)
    182 #define FLUSHO		0x00800000U	/* output being flushed (state) */
    183 #define	NOKERNINFO	0x02000000U	/* no kernel output from VSTATUS */
    184 #define PENDIN		0x20000000U	/* re-echo input buffer at next read */
    185 #endif /* defined(_NETBSD_SOURCE) */
    186 #define	NOFLSH		0x80000000U	/* don't flush output on signal */
    187 
    188 typedef unsigned int	tcflag_t;
    189 typedef unsigned char	cc_t;
    190 typedef unsigned int	speed_t;
    191 
    192 struct termios {
    193 	tcflag_t	c_iflag;	/* input flags */
    194 	tcflag_t	c_oflag;	/* output flags */
    195 	tcflag_t	c_cflag;	/* control flags */
    196 	tcflag_t	c_lflag;	/* local flags */
    197 	cc_t		c_cc[NCCS];	/* control chars */
    198 	int		c_ispeed;	/* input speed */
    199 	int		c_ospeed;	/* output speed */
    200 };
    201 
    202 /*
    203  * Commands passed to tcsetattr() for setting the termios structure.
    204  */
    205 #define	TCSANOW		0		/* make change immediate */
    206 #define	TCSADRAIN	1		/* drain output, then change */
    207 #define	TCSAFLUSH	2		/* drain output, flush input */
    208 #if defined(_NETBSD_SOURCE)
    209 #define TCSASOFT	0x10		/* flag - don't alter h.w. state */
    210 #endif
    211 
    212 /*
    213  * Standard speeds
    214  */
    215 #define B0		0U
    216 #define B50		50U
    217 #define B75		75U
    218 #define B110		110U
    219 #define B134		134U
    220 #define B150		150U
    221 #define B200		200U
    222 #define B300		300U
    223 #define B600		600U
    224 #define B1200		1200U
    225 #define B1800		1800U
    226 #define B2400		2400U
    227 #define B4800		4800U
    228 #define B9600		9600U
    229 #define B19200		19200U
    230 #define B38400		38400U
    231 #if defined(_NETBSD_SOURCE)
    232 #define B7200		7200U
    233 #define B14400		14400U
    234 #define B28800		28800U
    235 #define B57600		57600U
    236 #define B76800		76800U
    237 #define B115200 	115200U
    238 #define B230400 	230400U
    239 #define B460800 	460800U
    240 #define B500000 	500000U
    241 #define B921600 	921600U
    242 #define B1000000	1000000U
    243 #define B1500000	1500000U
    244 #define B2000000	2000000U
    245 #define B2500000	2500000U
    246 #define B3000000	3000000U
    247 #define B3500000	3500000U
    248 #define B4000000	4000000U
    249 #define EXTA		19200U
    250 #define EXTB		38400U
    251 #endif  /* defined(_NETBSD_SOURCE) */
    252 
    253 #ifndef _KERNEL
    254 
    255 #define	TCIFLUSH	1
    256 #define	TCOFLUSH	2
    257 #define TCIOFLUSH	3
    258 #define	TCOOFF		1
    259 #define	TCOON		2
    260 #define TCIOFF		3
    261 #define TCION		4
    262 
    263 #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
    264 #ifndef	pid_t
    265 typedef	__pid_t		pid_t;
    266 #define	pid_t		__pid_t
    267 #endif
    268 #endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
    269 #include <sys/cdefs.h>
    270 
    271 __BEGIN_DECLS
    272 speed_t	cfgetispeed(const struct termios *);
    273 speed_t	cfgetospeed(const struct termios *);
    274 int	cfsetispeed(struct termios *, speed_t);
    275 int	cfsetospeed(struct termios *, speed_t);
    276 int	tcgetattr(int, struct termios *);
    277 int	tcsetattr(int, int, const struct termios *);
    278 int	tcdrain(int);
    279 int	tcflow(int, int);
    280 int	tcflush(int, int);
    281 int	tcsendbreak(int, int);
    282 #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
    283 pid_t	tcgetsid(int);
    284 #endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
    285 
    286 
    287 #if defined(_NETBSD_SOURCE)
    288 void	cfmakeraw(struct termios *);
    289 int	cfsetspeed(struct termios *, speed_t);
    290 #endif /* defined(_NETBSD_SOURCE) */
    291 __END_DECLS
    292 
    293 #endif /* !_KERNEL */
    294 
    295 /*
    296  * Include tty ioctl's that aren't just for backwards compatibility
    297  * with the old tty driver.  These ioctl definitions were previously
    298  * in <sys/ioctl.h>.   Most of this appears only when _NETBSD_SOURCE
    299  * is defined, but (at least) struct winsize has been made standard,
    300  * and needs to be visible here (as well as via the old <sys/ioctl.h>.)
    301  */
    302 #include <sys/ttycom.h>
    303 
    304 int	tcgetwinsize(int, struct winsize *);
    305 int	tcsetwinsize(int, const struct winsize *);
    306 
    307 /*
    308  * END OF PROTECTED INCLUDE.
    309  */
    310 #endif /* !_SYS_TERMIOS_H_ */
    311 
    312 #if defined(_NETBSD_SOURCE)
    313 #include <sys/ttydefaults.h>
    314 #endif
    315