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