Fixes https://github.com/heimdal/heimdal/issues/294
[heimdal.git] / lib / libedit / src / tty.h
blob2603e1ad2d6daa7d9e3ba600c1d4fb103f2c6ff8
1 /* $NetBSD: tty.h,v 1.21 2016/05/09 21:46:56 christos Exp $ */
3 /*-
4 * Copyright (c) 1992, 1993
5 * The Regents of the University of California. All rights reserved.
7 * This code is derived from software contributed to Berkeley by
8 * Christos Zoulas of Cornell University.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. Neither the name of the University nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 * SUCH DAMAGE.
34 * @(#)tty.h 8.1 (Berkeley) 6/4/93
38 * el.tty.h: Local terminal header
40 #ifndef _h_el_tty
41 #define _h_el_tty
43 #include <termios.h>
44 #include <unistd.h>
46 /* Define our own since everyone gets it wrong! */
47 #define CONTROL(A) ((A) & 037)
50 * Aix compatible names
52 # if defined(VWERSE) && !defined(VWERASE)
53 # define VWERASE VWERSE
54 # endif /* VWERSE && !VWERASE */
56 # if defined(VDISCRD) && !defined(VDISCARD)
57 # define VDISCARD VDISCRD
58 # endif /* VDISCRD && !VDISCARD */
60 # if defined(VFLUSHO) && !defined(VDISCARD)
61 # define VDISCARD VFLUSHO
62 # endif /* VFLUSHO && VDISCARD */
64 # if defined(VSTRT) && !defined(VSTART)
65 # define VSTART VSTRT
66 # endif /* VSTRT && ! VSTART */
68 # if defined(VSTAT) && !defined(VSTATUS)
69 # define VSTATUS VSTAT
70 # endif /* VSTAT && ! VSTATUS */
72 # ifndef ONLRET
73 # define ONLRET 0
74 # endif /* ONLRET */
76 # ifndef TAB3
77 # ifdef OXTABS
78 # define TAB3 OXTABS
79 # else
80 # define TAB3 0
81 # endif /* OXTABS */
82 # endif /* !TAB3 */
84 # if defined(OXTABS) && !defined(XTABS)
85 # define XTABS OXTABS
86 # endif /* OXTABS && !XTABS */
88 # ifndef ONLCR
89 # define ONLCR 0
90 # endif /* ONLCR */
92 # ifndef IEXTEN
93 # define IEXTEN 0
94 # endif /* IEXTEN */
96 # ifndef ECHOCTL
97 # define ECHOCTL 0
98 # endif /* ECHOCTL */
100 # ifndef PARENB
101 # define PARENB 0
102 # endif /* PARENB */
104 # ifndef EXTPROC
105 # define EXTPROC 0
106 # endif /* EXTPROC */
108 # ifndef FLUSHO
109 # define FLUSHO 0
110 # endif /* FLUSHO */
113 # if defined(VDISABLE) && !defined(_POSIX_VDISABLE)
114 # define _POSIX_VDISABLE VDISABLE
115 # endif /* VDISABLE && ! _POSIX_VDISABLE */
118 * Work around ISC's definition of IEXTEN which is
119 * XCASE!
121 # ifdef ISC
122 # if defined(IEXTEN) && defined(XCASE)
123 # if IEXTEN == XCASE
124 # undef IEXTEN
125 # define IEXTEN 0
126 # endif /* IEXTEN == XCASE */
127 # endif /* IEXTEN && XCASE */
128 # if defined(IEXTEN) && !defined(XCASE)
129 # define XCASE IEXTEN
130 # undef IEXTEN
131 # define IEXTEN 0
132 # endif /* IEXTEN && !XCASE */
133 # endif /* ISC */
136 * Work around convex weirdness where turning off IEXTEN makes us
137 * lose all postprocessing!
139 #if defined(convex) || defined(__convex__)
140 # if defined(IEXTEN) && IEXTEN != 0
141 # undef IEXTEN
142 # define IEXTEN 0
143 # endif /* IEXTEN != 0 */
144 #endif /* convex || __convex__ */
147 * So that we don't lose job control.
149 #ifdef __SVR4
150 # undef CSWTCH
151 #endif
153 #ifndef _POSIX_VDISABLE
154 # define _POSIX_VDISABLE ((unsigned char) -1)
155 #endif /* _POSIX_VDISABLE */
157 #if !defined(CREPRINT) && defined(CRPRNT)
158 # define CREPRINT CRPRNT
159 #endif /* !CREPRINT && CRPRNT */
160 #if !defined(CDISCARD) && defined(CFLUSH)
161 # define CDISCARD CFLUSH
162 #endif /* !CDISCARD && CFLUSH */
164 #ifndef CINTR
165 # define CINTR CONTROL('c')
166 #endif /* CINTR */
167 #ifndef CQUIT
168 # define CQUIT 034 /* ^\ */
169 #endif /* CQUIT */
170 #ifndef CERASE
171 # define CERASE 0177 /* ^? */
172 #endif /* CERASE */
173 #ifndef CKILL
174 # define CKILL CONTROL('u')
175 #endif /* CKILL */
176 #ifndef CEOF
177 # define CEOF CONTROL('d')
178 #endif /* CEOF */
179 #ifndef CEOL
180 # define CEOL _POSIX_VDISABLE
181 #endif /* CEOL */
182 #ifndef CEOL2
183 # define CEOL2 _POSIX_VDISABLE
184 #endif /* CEOL2 */
185 #ifndef CSWTCH
186 # define CSWTCH _POSIX_VDISABLE
187 #endif /* CSWTCH */
188 #ifndef CDSWTCH
189 # define CDSWTCH _POSIX_VDISABLE
190 #endif /* CDSWTCH */
191 #ifndef CERASE2
192 # define CERASE2 _POSIX_VDISABLE
193 #endif /* CERASE2 */
194 #ifndef CSTART
195 # define CSTART CONTROL('q')
196 #endif /* CSTART */
197 #ifndef CSTOP
198 # define CSTOP CONTROL('s')
199 #endif /* CSTOP */
200 #ifndef CSUSP
201 # define CSUSP CONTROL('z')
202 #endif /* CSUSP */
203 #ifndef CDSUSP
204 # define CDSUSP CONTROL('y')
205 #endif /* CDSUSP */
207 #ifdef hpux
209 # ifndef CREPRINT
210 # define CREPRINT _POSIX_VDISABLE
211 # endif /* CREPRINT */
212 # ifndef CDISCARD
213 # define CDISCARD _POSIX_VDISABLE
214 # endif /* CDISCARD */
215 # ifndef CLNEXT
216 # define CLNEXT _POSIX_VDISABLE
217 # endif /* CLNEXT */
218 # ifndef CWERASE
219 # define CWERASE _POSIX_VDISABLE
220 # endif /* CWERASE */
222 #else /* !hpux */
224 # ifndef CREPRINT
225 # define CREPRINT CONTROL('r')
226 # endif /* CREPRINT */
227 # ifndef CDISCARD
228 # define CDISCARD CONTROL('o')
229 # endif /* CDISCARD */
230 # ifndef CLNEXT
231 # define CLNEXT CONTROL('v')
232 # endif /* CLNEXT */
233 # ifndef CWERASE
234 # define CWERASE CONTROL('w')
235 # endif /* CWERASE */
237 #endif /* hpux */
239 #ifndef CSTATUS
240 # define CSTATUS CONTROL('t')
241 #endif /* CSTATUS */
242 #ifndef CPAGE
243 # define CPAGE ' '
244 #endif /* CPAGE */
245 #ifndef CPGOFF
246 # define CPGOFF CONTROL('m')
247 #endif /* CPGOFF */
248 #ifndef CKILL2
249 # define CKILL2 _POSIX_VDISABLE
250 #endif /* CKILL2 */
251 #ifndef CBRK
252 # ifndef masscomp
253 # define CBRK 0377
254 # else
255 # define CBRK '\0'
256 # endif /* masscomp */
257 #endif /* CBRK */
258 #ifndef CMIN
259 # define CMIN CEOF
260 #endif /* CMIN */
261 #ifndef CTIME
262 # define CTIME CEOL
263 #endif /* CTIME */
266 * Fix for sun inconsistency. On termio VSUSP and the rest of the
267 * ttychars > NCC are defined. So we undefine them.
269 #if defined(TERMIO) || defined(POSIX)
270 # if defined(POSIX) && defined(NCCS)
271 # define NUMCC NCCS
272 # else
273 # ifdef NCC
274 # define NUMCC NCC
275 # endif /* NCC */
276 # endif /* POSIX && NCCS */
277 # ifdef NUMCC
278 # ifdef VINTR
279 # if NUMCC <= VINTR
280 # undef VINTR
281 # endif /* NUMCC <= VINTR */
282 # endif /* VINTR */
283 # ifdef VQUIT
284 # if NUMCC <= VQUIT
285 # undef VQUIT
286 # endif /* NUMCC <= VQUIT */
287 # endif /* VQUIT */
288 # ifdef VERASE
289 # if NUMCC <= VERASE
290 # undef VERASE
291 # endif /* NUMCC <= VERASE */
292 # endif /* VERASE */
293 # ifdef VKILL
294 # if NUMCC <= VKILL
295 # undef VKILL
296 # endif /* NUMCC <= VKILL */
297 # endif /* VKILL */
298 # ifdef VEOF
299 # if NUMCC <= VEOF
300 # undef VEOF
301 # endif /* NUMCC <= VEOF */
302 # endif /* VEOF */
303 # ifdef VEOL
304 # if NUMCC <= VEOL
305 # undef VEOL
306 # endif /* NUMCC <= VEOL */
307 # endif /* VEOL */
308 # ifdef VEOL2
309 # if NUMCC <= VEOL2
310 # undef VEOL2
311 # endif /* NUMCC <= VEOL2 */
312 # endif /* VEOL2 */
313 # ifdef VSWTCH
314 # if NUMCC <= VSWTCH
315 # undef VSWTCH
316 # endif /* NUMCC <= VSWTCH */
317 # endif /* VSWTCH */
318 # ifdef VDSWTCH
319 # if NUMCC <= VDSWTCH
320 # undef VDSWTCH
321 # endif /* NUMCC <= VDSWTCH */
322 # endif /* VDSWTCH */
323 # ifdef VERASE2
324 # if NUMCC <= VERASE2
325 # undef VERASE2
326 # endif /* NUMCC <= VERASE2 */
327 # endif /* VERASE2 */
328 # ifdef VSTART
329 # if NUMCC <= VSTART
330 # undef VSTART
331 # endif /* NUMCC <= VSTART */
332 # endif /* VSTART */
333 # ifdef VSTOP
334 # if NUMCC <= VSTOP
335 # undef VSTOP
336 # endif /* NUMCC <= VSTOP */
337 # endif /* VSTOP */
338 # ifdef VWERASE
339 # if NUMCC <= VWERASE
340 # undef VWERASE
341 # endif /* NUMCC <= VWERASE */
342 # endif /* VWERASE */
343 # ifdef VSUSP
344 # if NUMCC <= VSUSP
345 # undef VSUSP
346 # endif /* NUMCC <= VSUSP */
347 # endif /* VSUSP */
348 # ifdef VDSUSP
349 # if NUMCC <= VDSUSP
350 # undef VDSUSP
351 # endif /* NUMCC <= VDSUSP */
352 # endif /* VDSUSP */
353 # ifdef VREPRINT
354 # if NUMCC <= VREPRINT
355 # undef VREPRINT
356 # endif /* NUMCC <= VREPRINT */
357 # endif /* VREPRINT */
358 # ifdef VDISCARD
359 # if NUMCC <= VDISCARD
360 # undef VDISCARD
361 # endif /* NUMCC <= VDISCARD */
362 # endif /* VDISCARD */
363 # ifdef VLNEXT
364 # if NUMCC <= VLNEXT
365 # undef VLNEXT
366 # endif /* NUMCC <= VLNEXT */
367 # endif /* VLNEXT */
368 # ifdef VSTATUS
369 # if NUMCC <= VSTATUS
370 # undef VSTATUS
371 # endif /* NUMCC <= VSTATUS */
372 # endif /* VSTATUS */
373 # ifdef VPAGE
374 # if NUMCC <= VPAGE
375 # undef VPAGE
376 # endif /* NUMCC <= VPAGE */
377 # endif /* VPAGE */
378 # ifdef VPGOFF
379 # if NUMCC <= VPGOFF
380 # undef VPGOFF
381 # endif /* NUMCC <= VPGOFF */
382 # endif /* VPGOFF */
383 # ifdef VKILL2
384 # if NUMCC <= VKILL2
385 # undef VKILL2
386 # endif /* NUMCC <= VKILL2 */
387 # endif /* VKILL2 */
388 # ifdef VBRK
389 # if NUMCC <= VBRK
390 # undef VBRK
391 # endif /* NUMCC <= VBRK */
392 # endif /* VBRK */
393 # ifdef VMIN
394 # if NUMCC <= VMIN
395 # undef VMIN
396 # endif /* NUMCC <= VMIN */
397 # endif /* VMIN */
398 # ifdef VTIME
399 # if NUMCC <= VTIME
400 # undef VTIME
401 # endif /* NUMCC <= VTIME */
402 # endif /* VTIME */
403 # endif /* NUMCC */
404 #endif /* !POSIX */
406 #define C_INTR 0
407 #define C_QUIT 1
408 #define C_ERASE 2
409 #define C_KILL 3
410 #define C_EOF 4
411 #define C_EOL 5
412 #define C_EOL2 6
413 #define C_SWTCH 7
414 #define C_DSWTCH 8
415 #define C_ERASE2 9
416 #define C_START 10
417 #define C_STOP 11
418 #define C_WERASE 12
419 #define C_SUSP 13
420 #define C_DSUSP 14
421 #define C_REPRINT 15
422 #define C_DISCARD 16
423 #define C_LNEXT 17
424 #define C_STATUS 18
425 #define C_PAGE 19
426 #define C_PGOFF 20
427 #define C_KILL2 21
428 #define C_BRK 22
429 #define C_MIN 23
430 #define C_TIME 24
431 #define C_NCC 25
432 #define C_SH(A) ((unsigned int)(1 << (A)))
435 * Terminal dependend data structures
437 #define EX_IO 0 /* while we are executing */
438 #define ED_IO 1 /* while we are editing */
439 #define TS_IO 2 /* new mode from terminal */
440 #define QU_IO 2 /* used only for quoted chars */
441 #define NN_IO 3 /* The number of entries */
443 /* Don't re-order */
444 #define MD_INP 0
445 #define MD_OUT 1
446 #define MD_CTL 2
447 #define MD_LIN 3
448 #define MD_CHAR 4
449 #define MD_NN 5
451 typedef struct {
452 const char *t_name;
453 unsigned int t_setmask;
454 unsigned int t_clrmask;
455 } ttyperm_t[NN_IO][MD_NN];
457 typedef unsigned char ttychar_t[NN_IO][C_NCC];
459 libedit_private int tty_init(EditLine *);
460 libedit_private void tty_end(EditLine *);
461 libedit_private int tty_stty(EditLine *, int, const wchar_t **);
462 libedit_private int tty_rawmode(EditLine *);
463 libedit_private int tty_cookedmode(EditLine *);
464 libedit_private int tty_quotemode(EditLine *);
465 libedit_private int tty_noquotemode(EditLine *);
466 libedit_private void tty_bind_char(EditLine *, int);
468 typedef struct {
469 ttyperm_t t_t;
470 ttychar_t t_c;
471 struct termios t_or, t_ex, t_ed, t_ts;
472 int t_tabs;
473 int t_eight;
474 speed_t t_speed;
475 unsigned char t_mode;
476 unsigned char t_vdisable;
477 unsigned char t_initialized;
478 } el_tty_t;
481 #endif /* _h_el_tty */