1 /* termios type and macro definitions.  4.4 BSD/generic GNU version.
2    Copyright (C) 1993-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _TERMIOS_H
20 # error "Never include <bits/termios.h> directly; use <termios.h> instead."
21 #endif
22 
23 /* These macros are also defined in some <bits/ioctls.h> files (with
24    numerically identical values), but this serves to shut up cpp's
25    complaining. */
26 #if defined __USE_MISC || defined __USE_XOPEN
27 
28 # ifdef NL0
29 #  undef NL0
30 # endif
31 # ifdef NL1
32 #  undef NL1
33 # endif
34 # ifdef TAB0
35 #  undef TAB0
36 # endif
37 # ifdef TAB1
38 #  undef TAB1
39 # endif
40 # ifdef TAB2
41 #  undef TAB2
42 # endif
43 # ifdef CR0
44 #  undef CR0
45 # endif
46 # ifdef CR1
47 #  undef CR1
48 # endif
49 # ifdef CR2
50 #  undef CR2
51 # endif
52 # ifdef CR3
53 #  undef CR3
54 # endif
55 # ifdef FF0
56 #  undef FF0
57 # endif
58 # ifdef FF1
59 #  undef FF1
60 # endif
61 # ifdef BS0
62 #  undef BS0
63 # endif
64 # ifdef BS1
65 #  undef BS1
66 # endif
67 
68 #endif /* __USE_MISC || __USE_XOPEN */
69 
70 #ifdef __USE_MISC
71 
72 # ifdef MDMBUF
73 #  undef MDMBUF
74 # endif
75 # ifdef FLUSHO
76 #  undef FLUSHO
77 # endif
78 # ifdef PENDIN
79 #  undef PENDIN
80 # endif
81 
82 #endif /* __USE_MISC */
83 
84 #ifdef ECHO
85 # undef ECHO
86 #endif
87 #ifdef TOSTOP
88 # undef TOSTOP
89 #endif
90 #ifdef NOFLSH
91 # undef NOFLSH
92 #endif
93 
94 
95 /* These definitions match those used by the 4.4 BSD kernel.
96    If the operating system has termios system calls or ioctls that
97    correctly implement the POSIX.1 behavior, there should be a
98    system-dependent version of this file that defines `struct termios',
99    `tcflag_t', `cc_t', `speed_t' and the `TC*' constants appropriately.  */
100 
101 /* Type of terminal control flag masks.  */
102 typedef unsigned long int tcflag_t;
103 
104 /* Type of control characters.  */
105 typedef unsigned char cc_t;
106 
107 /* Type of baud rate specifiers.  */
108 typedef long int speed_t;
109 
110 /* Terminal control structure.  */
111 struct termios
112 {
113   /* Input modes.  */
114   tcflag_t c_iflag;
115 #define	IGNBRK	(1 << 0)	/* Ignore break condition.  */
116 #define	BRKINT	(1 << 1)	/* Signal interrupt on break.  */
117 #define	IGNPAR	(1 << 2)	/* Ignore characters with parity errors.  */
118 #define	PARMRK	(1 << 3)	/* Mark parity and framing errors.  */
119 #define	INPCK	(1 << 4)	/* Enable input parity check.  */
120 #define	ISTRIP	(1 << 5)	/* Strip 8th bit off characters.  */
121 #define	INLCR	(1 << 6)	/* Map NL to CR on input.  */
122 #define	IGNCR	(1 << 7)	/* Ignore CR.  */
123 #define	ICRNL	(1 << 8)	/* Map CR to NL on input.  */
124 #define	IXON	(1 << 9)	/* Enable start/stop output control.  */
125 #define	IXOFF	(1 << 10)	/* Enable start/stop input control.  */
126 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_XOPEN2K8
127 # define IXANY	(1 << 11)	/* Any character will restart after stop.  */
128 #endif
129 #ifdef	__USE_MISC
130 # define IMAXBEL (1 << 13)	/* Ring bell when input queue is full.  */
131 #endif
132 #if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
133 # define IUCLC	(1 << 14)	/* Translate upper case input to lower case. */
134 #endif
135 
136   /* Output modes.  */
137   tcflag_t c_oflag;
138 #define	OPOST	(1 << 0)	/* Perform output processing.  */
139 #if defined __USE_MISC || defined __USE_XOPEN
140 # define ONLCR	(1 << 1)	/* Map NL to CR-NL on output.  */
141 #endif
142 #ifdef	__USE_MISC
143 # define OXTABS	TAB3		/* Expand tabs to spaces.  */
144 # define ONOEOT	(1 << 3)	/* Discard EOT (^D) on output.  */
145 #endif
146 #if defined __USE_MISC || defined __USE_XOPEN
147 # define OCRNL	(1 << 4)	/* Map CR to NL.  */
148 # define ONOCR	(1 << 5)	/* Discard CR's when on column 0.  */
149 # define ONLRET	(1 << 6)	/* Move to column 0 on NL.  */
150 #endif
151 #if defined __USE_MISC || defined __USE_XOPEN
152 # define NLDLY	(3 << 8)	/* NL delay.  */
153 # define NL0	(0 << 8)	/* NL type 0.  */
154 # define NL1	(1 << 8)	/* NL type 1.  */
155 # define TABDLY	(3 << 10 | 1 << 2)	/* TAB delay.  */
156 # define TAB0	(0 << 10)	/* TAB delay type 0.  */
157 # define TAB1	(1 << 10)	/* TAB delay type 1.  */
158 # define TAB2	(2 << 10)	/* TAB delay type 2.  */
159 # define TAB3	(1 << 2)	/* Expand tabs to spaces.  */
160 # define CRDLY	(3 << 12)	/* CR delay.  */
161 # define CR0	(0 << 12)	/* CR delay type 0.  */
162 # define CR1	(1 << 12)	/* CR delay type 1.  */
163 # define CR2	(2 << 12)	/* CR delay type 2.  */
164 # define CR3	(3 << 12)	/* CR delay type 3.  */
165 # define FFDLY	(1 << 14)	/* FF delay.  */
166 # define FF0	(0 << 14)	/* FF delay type 0.  */
167 # define FF1	(1 << 14)	/* FF delay type 1.  */
168 # define BSDLY	(1 << 15)	/* BS delay.  */
169 # define BS0	(0 << 15)	/* BS delay type 0.  */
170 # define BS1	(1 << 15)	/* BS delay type 1.  */
171 # define VTDLY	(1 << 16)	/* VT delay.  */
172 # define VT0	(0 << 16)	/* VT delay type 0.  */
173 # define VT1	(1 << 16)	/* VT delay type 1.  */
174 #endif /* __USE_MISC || __USE_XOPEN */
175 #if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
176 # define OLCUC	(1 << 17)	/* Translate lower case output to upper case */
177 #endif
178 #ifdef __USE_XOPEN
179 # define OFILL	(1 << 18)	/* Send fill characters for delays.  */
180 # define OFDEL	(1 << 19)	/* Fill is DEL.  */
181 #endif
182 
183   /* Control modes.  */
184   tcflag_t c_cflag;
185 #ifdef	__USE_MISC
186 # define CIGNORE	(1 << 0)	/* Ignore these control flags.  */
187 #endif
188 #define	CSIZE	(CS5|CS6|CS7|CS8)	/* Number of bits per byte (mask).  */
189 #define	CS5	0		/* 5 bits per byte.  */
190 #define	CS6	(1 << 8)	/* 6 bits per byte.  */
191 #define	CS7	(1 << 9)	/* 7 bits per byte.  */
192 #define	CS8	(CS6|CS7)	/* 8 bits per byte.  */
193 #define	CSTOPB	(1 << 10)	/* Two stop bits instead of one.  */
194 #define	CREAD	(1 << 11)	/* Enable receiver.  */
195 #define	PARENB	(1 << 12)	/* Parity enable.  */
196 #define	PARODD	(1 << 13)	/* Odd parity instead of even.  */
197 #define	HUPCL	(1 << 14)	/* Hang up on last close.  */
198 #define	CLOCAL	(1 << 15)	/* Ignore modem status lines.  */
199 #ifdef	__USE_MISC
200 # define CRTSCTS	(1 << 16)	/* RTS/CTS flow control.  */
201 # define CRTS_IFLOW	CRTSCTS		/* Compatibility.  */
202 # define CCTS_OFLOW	CRTSCTS		/* Compatibility.  */
203 # define CDTRCTS	(1 << 17)	/* DTR/CTS flow control.  */
204 # define MDMBUF		(1 << 20)	/* DTR/DCD flow control.  */
205 # define CHWFLOW	(MDMBUF|CRTSCTS|CDTRCTS) /* All types of flow control.  */
206 #endif
207 
208   /* Local modes.  */
209   tcflag_t c_lflag;
210 #ifdef	__USE_MISC
211 # define ECHOKE	(1 << 0)	/* Visual erase for KILL.  */
212 #endif
213 #define	_ECHOE	(1 << 1)	/* Visual erase for ERASE.  */
214 #define	ECHOE	_ECHOE
215 #define	_ECHOK	(1 << 2)	/* Echo NL after KILL.  */
216 #define	ECHOK	_ECHOK
217 #define	_ECHO	(1 << 3)	/* Enable echo.  */
218 #define	ECHO	_ECHO
219 #define	_ECHONL	(1 << 4)	/* Echo NL even if ECHO is off.  */
220 #define	ECHONL	_ECHONL
221 #ifdef	__USE_MISC
222 # define ECHOPRT	(1 << 5)	/* Hardcopy visual erase.  */
223 # define ECHOCTL	(1 << 6)	/* Echo control characters as ^X.  */
224 #endif
225 #define	_ISIG	(1 << 7)	/* Enable signals.  */
226 #define	ISIG	_ISIG
227 #define	_ICANON	(1 << 8)	/* Do erase and kill processing.  */
228 #define	ICANON	_ICANON
229 #ifdef	__USE_MISC
230 # define ALTWERASE (1 << 9)	/* Alternate WERASE algorithm.  */
231 #endif
232 #define	_IEXTEN	(1 << 10)	/* Enable DISCARD and LNEXT.  */
233 #define	IEXTEN	_IEXTEN
234 #ifdef	__USE_MISC
235 # define EXTPROC	(1 << 11)	/* External processing.  */
236 #endif
237 #define	_TOSTOP	(1 << 22)	/* Send SIGTTOU for background output.  */
238 #define	TOSTOP	_TOSTOP
239 #ifdef	__USE_MISC
240 # define FLUSHO	(1 << 23)	/* Output being flushed (state).  */
241 #endif
242 #if defined __USE_XOPEN && !defined __USE_XOPEN2K
243 # define XCASE	(1 << 24)	/* Canonical upper/lower case.  */
244 #endif
245 #ifdef __USE_MISC
246 # define NOKERNINFO (1 << 25)	/* Disable VSTATUS.  */
247 # define PENDIN	(1 << 29)	/* Retype pending input (state).  */
248 #endif
249 #define	_NOFLSH	(1 << 31)	/* Disable flush after interrupt.  */
250 #define	NOFLSH	_NOFLSH
251 
252   /* Control characters.  */
253 #define	VEOF	0		/* End-of-file character [ICANON].  */
254 #define	VEOL	1		/* End-of-line character [ICANON].  */
255 #ifdef	__USE_MISC
256 # define VEOL2	2		/* Second EOL character [ICANON].  */
257 #endif
258 #define	VERASE	3		/* Erase character [ICANON].  */
259 #ifdef	__USE_MISC
260 # define VWERASE	4		/* Word-erase character [ICANON].  */
261 #endif
262 #define	VKILL	5		/* Kill-line character [ICANON].  */
263 #ifdef	__USE_MISC
264 # define VREPRINT 6		/* Reprint-line character [ICANON].  */
265 #endif
266 #define	VINTR	8		/* Interrupt character [ISIG].  */
267 #define	VQUIT	9		/* Quit character [ISIG].  */
268 #define	VSUSP	10		/* Suspend character [ISIG].  */
269 #ifdef	__USE_MISC
270 # define VDSUSP	11		/* Delayed suspend character [ISIG].  */
271 #endif
272 #define	VSTART	12		/* Start (X-ON) character [IXON, IXOFF].  */
273 #define	VSTOP	13		/* Stop (X-OFF) character [IXON, IXOFF].  */
274 #ifdef	__USE_MISC
275 # define VLNEXT	14		/* Literal-next character [IEXTEN].  */
276 # define VDISCARD 15		/* Discard character [IEXTEN].  */
277 #endif
278 #define	VMIN	16		/* Minimum number of bytes read at once [!ICANON].  */
279 #define	VTIME	17		/* Time-out value (tenths of a second) [!ICANON].  */
280 #ifdef	__USE_MISC
281 # define VSTATUS	18		/* Status character [ICANON].  */
282 #endif
283 #define	NCCS	20		/* Value duplicated in <hurd/tioctl.defs>.  */
284   cc_t c_cc[NCCS];
285 
286   /* Input and output baud rates.  */
287   speed_t __ispeed, __ospeed;
288 #define	B0	0		/* Hang up.  */
289 #define	B50	50		/* 50 baud.  */
290 #define	B75	75		/* 75 baud.  */
291 #define	B110	110		/* 110 baud.  */
292 #define	B134	134		/* 134.5 baud.  */
293 #define	B150	150		/* 150 baud.  */
294 #define	B200	200		/* 200 baud.  */
295 #define	B300	300		/* 300 baud.  */
296 #define	B600	600		/* 600 baud.  */
297 #define	B1200	1200		/* 1200 baud.  */
298 #define	B1800	1800		/* 1800 baud.  */
299 #define	B2400	2400		/* 2400 baud.  */
300 #define	B4800	4800		/* 4800 baud.  */
301 #define	B9600	9600		/* 9600 baud.  */
302 #define	B7200	7200		/* 7200 baud.  */
303 #define	B14400	14400		/* 14400 baud.  */
304 #define	B19200	19200		/* 19200 baud.  */
305 #define	B28800	28800		/* 28800 baud.  */
306 #define	B38400	38400		/* 38400 baud.  */
307 #ifdef	__USE_MISC
308 # define EXTA	19200
309 # define EXTB	38400
310 #endif
311 #define	B57600	57600
312 #define	B76800	76800
313 #define	B115200	115200
314 #define	B230400	230400
315 #define	B460800	460800
316 #define	B500000	500000
317 #define	B576000	576000
318 #define	B921600	921600
319 #define	B1000000 1000000
320 #define	B1152000 1152000
321 #define	B1500000 1500000
322 #define	B2000000 2000000
323 #define	B2500000 2500000
324 #define	B3000000 3000000
325 #define	B3500000 3500000
326 #define	B4000000 4000000
327 };
328 
329 #define _IOT_termios /* Hurd ioctl type field.  */ \
330   _IOT (_IOTS (tcflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2)
331 
332 /* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'.  */
333 #define	TCSANOW		0	/* Change immediately.  */
334 #define	TCSADRAIN	1	/* Change when pending output is written.  */
335 #define	TCSAFLUSH	2	/* Flush pending input before changing.  */
336 #ifdef	__USE_MISC
337 # define TCSASOFT	0x10	/* Flag: Don't alter hardware state.  */
338 #endif
339 
340 /* Values for the QUEUE_SELECTOR argument to `tcflush'.  */
341 #define	TCIFLUSH	1	/* Discard data received but not yet read.  */
342 #define	TCOFLUSH	2	/* Discard data written but not yet sent.  */
343 #define	TCIOFLUSH	3	/* Discard all pending data.  */
344 
345 /* Values for the ACTION argument to `tcflow'.  */
346 #define	TCOOFF	1		/* Suspend output.  */
347 #define	TCOON	2		/* Restart suspended output.  */
348 #define	TCIOFF	3		/* Send a STOP character.  */
349 #define	TCION	4		/* Send a START character.  */
350