d72b858aefc97cc220dc61757799490235bffc42
[kopensolaris-gnu/glibc.git] / termios / termios.h
1 /* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB.  If
16 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17 Cambridge, MA 02139, USA.  */
18
19 /*
20  *      POSIX Standard: 7.1-2 General Terminal Interface        <termios.h>
21  */
22
23 #ifndef _TERMIOS_H
24
25 #define _TERMIOS_H      1
26 #include <features.h>
27
28 /* This is supposed to be compatible with 4.4BSD.  */
29
30 /* Type of terminal control flag masks.  */
31 typedef unsigned long int tcflag_t;
32
33 /* Type of control characters.  */
34 typedef unsigned char cc_t;
35
36 /* Type of baud rate specifiers.  */
37 typedef long int speed_t;
38
39 /* Terminal control structure.  */
40 struct termios
41   {
42     /* Input modes.  */
43     tcflag_t c_iflag;
44 #define IGNBRK  (1 << 0)        /* Ignore break condition.  */
45 #define BRKINT  (1 << 1)        /* Signal interrupt on break.  */
46 #define IGNPAR  (1 << 2)        /* Ignore characters with parity errors.  */
47 #define PARMRK  (1 << 3)        /* Mark parity and framing errors.  */
48 #define INPCK   (1 << 4)        /* Enable input parity check.  */
49 #define INLCR   (1 << 5)        /* Map NL to CR on input.  */
50 #define ISTRIP  (1 << 6)        /* Strip 8th bit off characters.  */
51 #define IGNCR   (1 << 7)        /* Ignore CR.  */
52 #define ICRNL   (1 << 8)        /* Map CR to NL on input.  */
53 #define IXON    (1 << 9)        /* Enable start/stop output control.  */
54 #define IXOFF   (1 << 10)       /* Enable start/stop input control.  */
55 #ifdef  __USE_BSD
56 #define IXANY   (1 << 11)       /* Any character will restart after stop.  */
57 #define IMAXBEL (1 << 13)       /* Ring bell when input queue is full.  */
58 #endif
59
60     /* Output modes.  */
61     tcflag_t c_oflag;
62 #define OPOST   (1 << 0)        /* Perform output processing.  */
63 #ifdef  __USE_BSD
64 #define ONLCR   (1 << 1)        /* Map NL to CR-NL on output.  */
65 #define OXTABS  (1 << 2)        /* Expand tabs to spaces.  */
66 #define ONOEOT  (1 << 8)        /* Discard EOT (^D) on output.  */
67 #endif
68
69     /* Control modes.  */
70     tcflag_t c_cflag;
71 #ifdef  __USE_BSD
72 #define CIGNORE (1 << 0)                /* Ignore these control flags.  */
73 #endif
74 #define CSIZE   (CS5|CS6|CS7|CS8)       /* Number of bits per byte (mask).  */
75 #define CS5     0                       /* 5 bits per byte.  */
76 #define CS6     (1 << 8)                /* 6 bits per byte.  */
77 #define CS7     (1 << 9)                /* 7 bits per byte.  */
78 #define CS8     (CS6|CS7)               /* 8 bits per byte.  */
79 #define CSTOPB  (1 << 10)               /* Two stop bits instead of one.  */
80 #define CREAD   (1 << 11)               /* Enable receiver.  */
81 #define PARENB  (1 << 12)               /* Parity enable.  */
82 #define PARODD  (1 << 13)               /* Odd parity instead of even.  */
83 #define HUPCL   (1 << 14)               /* Hang up on last close.  */
84 #define CLOCAL  (1 << 15)               /* Ignore modem status lines.  */
85 #ifdef  __USE_BSD
86 #define CCTS_OFLOW      (1 << 16)       /* CTS flow control of output.  */
87 #define CRTS_IFLOW      (1 << 17)       /* RTS flow control of input.  */
88 #define MDMBUF          (1 << 20)       /* Carrier flow control of output.  */
89 #endif
90
91     /* Local modes.  */
92     tcflag_t c_lflag;
93 #ifdef  __USE_BSD
94 #define ECHOKE  (1 << 0)        /* Visual erase for KILL.  */
95 #endif
96 #define _ECHOE  (1 << 1)        /* Visual erase for ERASE.  */
97 #define ECHOE   _ECHOE
98 #define _ECHOK  (1 << 2)        /* Echo NL after KILL.  */
99 #define ECHOK   _ECHOK
100 #define _ECHO   (1 << 3)        /* Enable echo.  */
101 #define ECHO    _ECHO
102 #define _ECHONL (1 << 4)        /* Echo NL even if ECHO is off.  */
103 #define ECHONL  _ECHONL
104 #ifdef  __USE_BSD
105 #define ECHOPRT (1 << 5)        /* Hardcopy visual erase.  */
106 #define ECHOCTL (1 << 6)        /* Echo control characters as ^X.  */
107 #endif
108 #define _ISIG   (1 << 7)        /* Enable signals.  */
109 #define ISIG    _ISIG
110 #define _ICANON (1 << 8)        /* Do erase and kill processing.  */
111 #define ICANON  _ICANON
112 #ifdef  __USE_BSD
113 #define ALTWERASE (1 << 9)      /* Alternate WERASE algorithm.  */
114 #endif
115 #define _IEXTEN (1 << 10)       /* Enable DISCARD and LNEXT.  */
116 #define IEXTEN  _IEXTEN
117 #define EXTPROC (1 << 11)       /* External processing.  */
118 #define _TOSTOP (1 << 22)       /* Send SIGTTOU for background output.  */
119 #define TOSTOP  _TOSTOP
120 #ifdef  __USE_BSD
121 #define FLUSHO  (1 << 23)       /* Output being flushed (state).  */
122 #define NOKERNINFO (1 << 25)    /* Disable VSTATUS.  */
123 #define PENDIN  (1 << 29)       /* Retype pending input (state).  */
124 #endif
125 #define _NOFLSH (1 << 31)       /* Disable flush after interrupt.  */
126 #define NOFLSH  _NOFLSH
127
128     /* Control characters.  */
129 #define VEOF    0       /* End-of-file character [ICANON].  */
130 #define VEOL    1       /* End-of-line character [ICANON].  */
131 #ifdef  __USE_BSD
132 #define VEOL2   2       /* Second EOL character [ICANON].  */
133 #endif
134 #define VERASE  3       /* Erase character [ICANON].  */
135 #ifdef  __USE_BSD
136 #define VWERASE 4       /* Word-erase character [ICANON].  */
137 #endif
138 #define VKILL   5       /* Kill-line character [ICANON].  */
139 #ifdef  __USE_BSD
140 #define VREPRINT 6      /* Reprint-line character [ICANON].  */
141 #endif
142 #define VINTR   8       /* Interrupt character [ISIG].  */
143 #define VQUIT   9       /* Quit character [ISIG].  */
144 #define VSUSP   10      /* Suspend character [ISIG].  */
145 #ifdef  __USE_BSD
146 #define VDSUSP  11      /* Delayed suspend character [ISIG].  */
147 #endif
148 #define VSTART  12      /* Start (X-ON) character [IXON, IXOFF].  */
149 #define VSTOP   13      /* Stop (X-OFF) character [IXON, IXOFF].  */
150 #ifdef  __USE_BSD
151 #define VLNEXT  14      /* Literal-next character [IEXTEN].  */
152 #define VDISCARD 15     /* Discard character [IEXTEN].  */
153 #endif
154 #define VMIN    16      /* Minimum number of bytes read at once [!ICANON].  */
155 #define VTIME   17      /* Time-out value (tenths of a second) [!ICANON].  */
156 #ifdef  __USE_BSD
157 #define VSTATUS 18      /* Status character [ICANON].  */
158 #endif
159 #define NCCS    20
160     cc_t c_cc[NCCS];
161
162     /* Input and output baud rates.  */
163     speed_t __ispeed, __ospeed;
164 #define B0      0       /* Hang up.  */
165 #define B50     50      /* 50 baud.  */
166 #define B75     75      /* 75 baud.  */
167 #define B110    110     /* 110 baud.  */
168 #define B134    134     /* 134.5 baud.  */
169 #define B150    150     /* 150 baud.  */
170 #define B200    200     /* 200 baud.  */
171 #define B300    300     /* 300 baud.  */
172 #define B600    600     /* 600 baud.  */
173 #define B1200   1200    /* 1200 baud.  */
174 #define B1800   1800    /* 1800 baud.  */
175 #define B2400   2400    /* 2400 baud.  */
176 #define B4800   4800    /* 4800 baud.  */
177 #define B9600   9600    /* 9600 baud.  */
178 #define B19200  19200   /* 19200 baud.  */
179 #define B38400  38400   /* 38400 baud.  */
180 #ifdef  __USE_BSD
181 #define EXTA    19200
182 #define EXTB    38400
183 #endif
184   };
185
186
187 /* Return the output baud rate stored in *TERMIOS_P.  */
188 extern speed_t EXFUN(cfgetospeed, (CONST struct termios *__termios_p));
189
190 /* Return the input baud rate stored in *TERMIOS_P.  */
191 extern speed_t EXFUN(cfgetispeed, (CONST struct termios *__termios_p));
192
193 /* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
194 extern int EXFUN(cfsetospeed, (struct termios *__termios_p, speed_t __speed));
195
196 /* Set the input baud rate stored in *TERMIOS_P to SPEED.  */
197 extern int EXFUN(cfsetispeed, (struct termios *__termios_p, speed_t __speed));
198
199 #ifdef  __OPTIMIZE__
200 #define cfgetospeed(t)          ((t)->__ospeed)
201 #define cfgetispeed(t)          ((t)->__ispeed)
202 #define cfsetospeed(t, s)       ((t)->__ospeed = (s))
203 #define cfsetispeed(t, s)       ((t)->__ispeed = (s))
204 #endif
205
206 #ifdef  __USE_BSD
207 /* Set both the input and output baud rates in *TERMIOS_OP to SPEED.  */
208 extern void EXFUN(cfsetspeed, (struct termios *__termios_p, speed_t __speed));
209 #endif
210
211
212 /* Put the state of FD into *TERMIOS_P.  */
213 extern int EXFUN(__tcgetattr, (int __fd, struct termios *__termios_p));
214 extern int EXFUN(tcgetattr, (int __fd, struct termios *__termios_p));
215
216 #ifdef  __OPTIMIZE__
217 #define tcgetattr(fd, termios_p)        __tcgetattr((fd), (termios_p))
218 #endif  /* Optimizing.  */
219
220 /* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'.  */
221 #define TCSANOW         0       /* Change immediately.  */
222 #define TCSADRAIN       1       /* Change when pending output is written.  */
223 #define TCSAFLUSH       2       /* Flush pending input before changing.  */
224 #ifdef  __USE_BSD
225 #define TCSASOFT        0x10    /* Flag: Don't alter hardware state.  */
226 #endif
227
228 /* Set the state of FD to *TERMIOS_P.  */
229 extern int EXFUN(tcsetattr, (int __fd, int __optional_actions,
230                              CONST struct termios *__termios_p));
231
232
233 #ifdef  __USE_BSD
234 /* Set *TERMIOS_P to indicate raw mode.  */
235 extern void EXFUN(cfmakeraw, (struct termios *__termios_p));
236 #endif
237
238 /* Send zero bits on FD.  */
239 extern int EXFUN(tcsendbreak, (int __fd, int __duration));
240
241 /* Wait for pending output to be written on FD.  */
242 extern int EXFUN(tcdrain, (int __fd));
243
244 /* Values for the QUEUE_SELECTOR argument to `tcflush'.  */
245 #define TCIFLUSH        1       /* Discard data received but not yet read.  */
246 #define TCOFLUSH        2       /* Discard data written but not yet sent.  */
247 #define TCIOFLUSH       3       /* Discard all pending data.  */
248
249 /* Flush pending data on FD.  */
250 extern int EXFUN(tcflush, (int __fd, int __queue_selector));
251
252 /* Values for the ACTION argument to `tcflow'.  */
253 #define TCOOFF  1       /* Suspend output.  */
254 #define TCOON   2       /* Restart suspended output.  */
255 #define TCIOFF  3       /* Send a STOP character.  */
256 #define TCION   4       /* Send a START character.  */
257
258 /* Suspend or restart transmission on FD.  */
259 extern int EXFUN(tcflow, (int __fd, int __action));
260
261
262 #endif  /* termios.h  */