Titan Core Initial Contribution
[deliverable/titan.core.git] / mctr2 / editline / libedit / src / tty.h
CommitLineData
970ed795
EL
1/* $NetBSD: tty.h,v 1.12 2009/12/30 22:37:40 christos Exp $ */
2
3/*-
4 * Copyright (c) 1992, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software contributed to Berkeley by
8 * Christos Zoulas of Cornell University.
9 *
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.
21 *
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.
33 *
34 * @(#)tty.h 8.1 (Berkeley) 6/4/93
35 */
36
37/*
38 * el.tty.h: Local terminal header
39 */
40#ifndef _h_el_tty
41#define _h_el_tty
42
43#include "sys.h"
44#include "histedit.h"
45#include <termios.h>
46#include <unistd.h>
47
48/* Define our own since everyone gets it wrong! */
49#define CONTROL(A) ((A) & 037)
50
51/*
52 * Aix compatible names
53 */
54# if defined(VWERSE) && !defined(VWERASE)
55# define VWERASE VWERSE
56# endif /* VWERSE && !VWERASE */
57
58# if defined(VDISCRD) && !defined(VDISCARD)
59# define VDISCARD VDISCRD
60# endif /* VDISCRD && !VDISCARD */
61
62# if defined(VFLUSHO) && !defined(VDISCARD)
63# define VDISCARD VFLUSHO
64# endif /* VFLUSHO && VDISCARD */
65
66# if defined(VSTRT) && !defined(VSTART)
67# define VSTART VSTRT
68# endif /* VSTRT && ! VSTART */
69
70# if defined(VSTAT) && !defined(VSTATUS)
71# define VSTATUS VSTAT
72# endif /* VSTAT && ! VSTATUS */
73
74# ifndef ONLRET
75# define ONLRET 0
76# endif /* ONLRET */
77
78# ifndef TAB3
79# ifdef OXTABS
80# define TAB3 OXTABS
81# else
82# define TAB3 0
83# endif /* OXTABS */
84# endif /* !TAB3 */
85
86# if defined(OXTABS) && !defined(XTABS)
87# define XTABS OXTABS
88# endif /* OXTABS && !XTABS */
89
90# ifndef ONLCR
91# define ONLCR 0
92# endif /* ONLCR */
93
94# ifndef IEXTEN
95# define IEXTEN 0
96# endif /* IEXTEN */
97
98# ifndef ECHOCTL
99# define ECHOCTL 0
100# endif /* ECHOCTL */
101
102# ifndef PARENB
103# define PARENB 0
104# endif /* PARENB */
105
106# ifndef EXTPROC
107# define EXTPROC 0
108# endif /* EXTPROC */
109
110# ifndef FLUSHO
111# define FLUSHO 0
112# endif /* FLUSHO */
113
114
115# if defined(VDISABLE) && !defined(_POSIX_VDISABLE)
116# define _POSIX_VDISABLE VDISABLE
117# endif /* VDISABLE && ! _POSIX_VDISABLE */
118
119/*
120 * Work around ISC's definition of IEXTEN which is
121 * XCASE!
122 */
123# ifdef ISC
124# if defined(IEXTEN) && defined(XCASE)
125# if IEXTEN == XCASE
126# undef IEXTEN
127# define IEXTEN 0
128# endif /* IEXTEN == XCASE */
129# endif /* IEXTEN && XCASE */
130# if defined(IEXTEN) && !defined(XCASE)
131# define XCASE IEXTEN
132# undef IEXTEN
133# define IEXTEN 0
134# endif /* IEXTEN && !XCASE */
135# endif /* ISC */
136
137/*
138 * Work around convex weirdness where turning off IEXTEN makes us
139 * lose all postprocessing!
140 */
141#if defined(convex) || defined(__convex__)
142# if defined(IEXTEN) && IEXTEN != 0
143# undef IEXTEN
144# define IEXTEN 0
145# endif /* IEXTEN != 0 */
146#endif /* convex || __convex__ */
147
148/*
149 * So that we don't lose job control.
150 */
151#ifdef __SVR4
152# undef CSWTCH
153#endif
154
155#ifndef _POSIX_VDISABLE
156# define _POSIX_VDISABLE ((unsigned char) -1)
157#endif /* _POSIX_VDISABLE */
158
159#if !defined(CREPRINT) && defined(CRPRNT)
160# define CREPRINT CRPRNT
161#endif /* !CREPRINT && CRPRNT */
162#if !defined(CDISCARD) && defined(CFLUSH)
163# define CDISCARD CFLUSH
164#endif /* !CDISCARD && CFLUSH */
165
166#ifndef CINTR
167# define CINTR CONTROL('c')
168#endif /* CINTR */
169#ifndef CQUIT
170# define CQUIT 034 /* ^\ */
171#endif /* CQUIT */
172#ifndef CERASE
173# define CERASE 0177 /* ^? */
174#endif /* CERASE */
175#ifndef CKILL
176# define CKILL CONTROL('u')
177#endif /* CKILL */
178#ifndef CEOF
179# define CEOF CONTROL('d')
180#endif /* CEOF */
181#ifndef CEOL
182# define CEOL _POSIX_VDISABLE
183#endif /* CEOL */
184#ifndef CEOL2
185# define CEOL2 _POSIX_VDISABLE
186#endif /* CEOL2 */
187#ifndef CSWTCH
188# define CSWTCH _POSIX_VDISABLE
189#endif /* CSWTCH */
190#ifndef CDSWTCH
191# define CDSWTCH _POSIX_VDISABLE
192#endif /* CDSWTCH */
193#ifndef CERASE2
194# define CERASE2 _POSIX_VDISABLE
195#endif /* CERASE2 */
196#ifndef CSTART
197# define CSTART CONTROL('q')
198#endif /* CSTART */
199#ifndef CSTOP
200# define CSTOP CONTROL('s')
201#endif /* CSTOP */
202#ifndef CSUSP
203# define CSUSP CONTROL('z')
204#endif /* CSUSP */
205#ifndef CDSUSP
206# define CDSUSP CONTROL('y')
207#endif /* CDSUSP */
208
209#ifdef hpux
210
211# ifndef CREPRINT
212# define CREPRINT _POSIX_VDISABLE
213# endif /* CREPRINT */
214# ifndef CDISCARD
215# define CDISCARD _POSIX_VDISABLE
216# endif /* CDISCARD */
217# ifndef CLNEXT
218# define CLNEXT _POSIX_VDISABLE
219# endif /* CLNEXT */
220# ifndef CWERASE
221# define CWERASE _POSIX_VDISABLE
222# endif /* CWERASE */
223
224#else /* !hpux */
225
226# ifndef CREPRINT
227# define CREPRINT CONTROL('r')
228# endif /* CREPRINT */
229# ifndef CDISCARD
230# define CDISCARD CONTROL('o')
231# endif /* CDISCARD */
232# ifndef CLNEXT
233# define CLNEXT CONTROL('v')
234# endif /* CLNEXT */
235# ifndef CWERASE
236# define CWERASE CONTROL('w')
237# endif /* CWERASE */
238
239#endif /* hpux */
240
241#ifndef CSTATUS
242# define CSTATUS CONTROL('t')
243#endif /* CSTATUS */
244#ifndef CPAGE
245# define CPAGE ' '
246#endif /* CPAGE */
247#ifndef CPGOFF
248# define CPGOFF CONTROL('m')
249#endif /* CPGOFF */
250#ifndef CKILL2
251# define CKILL2 _POSIX_VDISABLE
252#endif /* CKILL2 */
253#ifndef CBRK
254# ifndef masscomp
255# define CBRK 0377
256# else
257# define CBRK '\0'
258# endif /* masscomp */
259#endif /* CBRK */
260#ifndef CMIN
261# define CMIN CEOF
262#endif /* CMIN */
263#ifndef CTIME
264# define CTIME CEOL
265#endif /* CTIME */
266
267/*
268 * Fix for sun inconsistency. On termio VSUSP and the rest of the
269 * ttychars > NCC are defined. So we undefine them.
270 */
271#if defined(TERMIO) || defined(POSIX)
272# if defined(POSIX) && defined(NCCS)
273# define NUMCC NCCS
274# else
275# ifdef NCC
276# define NUMCC NCC
277# endif /* NCC */
278# endif /* POSIX && NCCS */
279# ifdef NUMCC
280# ifdef VINTR
281# if NUMCC <= VINTR
282# undef VINTR
283# endif /* NUMCC <= VINTR */
284# endif /* VINTR */
285# ifdef VQUIT
286# if NUMCC <= VQUIT
287# undef VQUIT
288# endif /* NUMCC <= VQUIT */
289# endif /* VQUIT */
290# ifdef VERASE
291# if NUMCC <= VERASE
292# undef VERASE
293# endif /* NUMCC <= VERASE */
294# endif /* VERASE */
295# ifdef VKILL
296# if NUMCC <= VKILL
297# undef VKILL
298# endif /* NUMCC <= VKILL */
299# endif /* VKILL */
300# ifdef VEOF
301# if NUMCC <= VEOF
302# undef VEOF
303# endif /* NUMCC <= VEOF */
304# endif /* VEOF */
305# ifdef VEOL
306# if NUMCC <= VEOL
307# undef VEOL
308# endif /* NUMCC <= VEOL */
309# endif /* VEOL */
310# ifdef VEOL2
311# if NUMCC <= VEOL2
312# undef VEOL2
313# endif /* NUMCC <= VEOL2 */
314# endif /* VEOL2 */
315# ifdef VSWTCH
316# if NUMCC <= VSWTCH
317# undef VSWTCH
318# endif /* NUMCC <= VSWTCH */
319# endif /* VSWTCH */
320# ifdef VDSWTCH
321# if NUMCC <= VDSWTCH
322# undef VDSWTCH
323# endif /* NUMCC <= VDSWTCH */
324# endif /* VDSWTCH */
325# ifdef VERASE2
326# if NUMCC <= VERASE2
327# undef VERASE2
328# endif /* NUMCC <= VERASE2 */
329# endif /* VERASE2 */
330# ifdef VSTART
331# if NUMCC <= VSTART
332# undef VSTART
333# endif /* NUMCC <= VSTART */
334# endif /* VSTART */
335# ifdef VSTOP
336# if NUMCC <= VSTOP
337# undef VSTOP
338# endif /* NUMCC <= VSTOP */
339# endif /* VSTOP */
340# ifdef VWERASE
341# if NUMCC <= VWERASE
342# undef VWERASE
343# endif /* NUMCC <= VWERASE */
344# endif /* VWERASE */
345# ifdef VSUSP
346# if NUMCC <= VSUSP
347# undef VSUSP
348# endif /* NUMCC <= VSUSP */
349# endif /* VSUSP */
350# ifdef VDSUSP
351# if NUMCC <= VDSUSP
352# undef VDSUSP
353# endif /* NUMCC <= VDSUSP */
354# endif /* VDSUSP */
355# ifdef VREPRINT
356# if NUMCC <= VREPRINT
357# undef VREPRINT
358# endif /* NUMCC <= VREPRINT */
359# endif /* VREPRINT */
360# ifdef VDISCARD
361# if NUMCC <= VDISCARD
362# undef VDISCARD
363# endif /* NUMCC <= VDISCARD */
364# endif /* VDISCARD */
365# ifdef VLNEXT
366# if NUMCC <= VLNEXT
367# undef VLNEXT
368# endif /* NUMCC <= VLNEXT */
369# endif /* VLNEXT */
370# ifdef VSTATUS
371# if NUMCC <= VSTATUS
372# undef VSTATUS
373# endif /* NUMCC <= VSTATUS */
374# endif /* VSTATUS */
375# ifdef VPAGE
376# if NUMCC <= VPAGE
377# undef VPAGE
378# endif /* NUMCC <= VPAGE */
379# endif /* VPAGE */
380# ifdef VPGOFF
381# if NUMCC <= VPGOFF
382# undef VPGOFF
383# endif /* NUMCC <= VPGOFF */
384# endif /* VPGOFF */
385# ifdef VKILL2
386# if NUMCC <= VKILL2
387# undef VKILL2
388# endif /* NUMCC <= VKILL2 */
389# endif /* VKILL2 */
390# ifdef VBRK
391# if NUMCC <= VBRK
392# undef VBRK
393# endif /* NUMCC <= VBRK */
394# endif /* VBRK */
395# ifdef VMIN
396# if NUMCC <= VMIN
397# undef VMIN
398# endif /* NUMCC <= VMIN */
399# endif /* VMIN */
400# ifdef VTIME
401# if NUMCC <= VTIME
402# undef VTIME
403# endif /* NUMCC <= VTIME */
404# endif /* VTIME */
405# endif /* NUMCC */
406#endif /* !POSIX */
407
408#define C_INTR 0
409#define C_QUIT 1
410#define C_ERASE 2
411#define C_KILL 3
412#define C_EOF 4
413#define C_EOL 5
414#define C_EOL2 6
415#define C_SWTCH 7
416#define C_DSWTCH 8
417#define C_ERASE2 9
418#define C_START 10
419#define C_STOP 11
420#define C_WERASE 12
421#define C_SUSP 13
422#define C_DSUSP 14
423#define C_REPRINT 15
424#define C_DISCARD 16
425#define C_LNEXT 17
426#define C_STATUS 18
427#define C_PAGE 19
428#define C_PGOFF 20
429#define C_KILL2 21
430#define C_BRK 22
431#define C_MIN 23
432#define C_TIME 24
433#define C_NCC 25
434#define C_SH(A) (1 << (A))
435
436/*
437 * Terminal dependend data structures
438 */
439#define EX_IO 0 /* while we are executing */
440#define ED_IO 1 /* while we are editing */
441#define TS_IO 2 /* new mode from terminal */
442#define QU_IO 2 /* used only for quoted chars */
443#define NN_IO 3 /* The number of entries */
444
445#define MD_INP 0
446#define MD_OUT 1
447#define MD_CTL 2
448#define MD_LIN 3
449#define MD_CHAR 4
450#define MD_NN 5
451
452typedef struct {
453 const char *t_name;
454 unsigned int t_setmask;
455 unsigned int t_clrmask;
456} ttyperm_t[NN_IO][MD_NN];
457
458typedef unsigned char ttychar_t[NN_IO][C_NCC];
459
460protected int tty_init(EditLine *);
461protected void tty_end(EditLine *);
462protected int tty_stty(EditLine *, int, const Char **);
463protected int tty_rawmode(EditLine *);
464protected int tty_cookedmode(EditLine *);
465protected int tty_quotemode(EditLine *);
466protected int tty_noquotemode(EditLine *);
467protected void tty_bind_char(EditLine *, int);
468
469typedef struct {
470 ttyperm_t t_t;
471 ttychar_t t_c;
472 struct termios t_ex, t_ed, t_ts;
473 int t_tabs;
474 int t_eight;
475 speed_t t_speed;
476 int t_mode;
477 unsigned char t_vdisable;
478} el_tty_t;
479
480
481#endif /* _h_el_tty */
This page took 0.042957 seconds and 5 git commands to generate.