Home | History | Annotate | Line # | Download | only in libedit
tty.h revision 1.1
      1 /*-
      2  * Copyright (c) 1992, 1993
      3  *	The Regents of the University of California.  All rights reserved.
      4  *
      5  * This code is derived from software contributed to Berkeley by
      6  * Christos Zoulas of Cornell University.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  * 1. Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  * 3. All advertising materials mentioning features or use of this software
     17  *    must display the following acknowledgement:
     18  *	This product includes software developed by the University of
     19  *	California, Berkeley and its contributors.
     20  * 4. Neither the name of the University nor the names of its contributors
     21  *    may be used to endorse or promote products derived from this software
     22  *    without specific prior written permission.
     23  *
     24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     34  * SUCH DAMAGE.
     35  *
     36  *	@(#)tty.h	8.1 (Berkeley) 6/4/93
     37  */
     38 
     39 /*
     40  * el.tty.h: Local terminal header
     41  */
     42 #ifndef _h_el_tty
     43 #define _h_el_tty
     44 
     45 #include "histedit.h"
     46 #include <termios.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 
    150 #ifndef _POSIX_VDISABLE
    151 # define _POSIX_VDISABLE ((unsigned char) -1)
    152 #endif /* _POSIX_VDISABLE */
    153 
    154 #if !defined(CREPRINT) && defined(CRPRNT)
    155 # define CREPRINT CRPRNT
    156 #endif /* !CREPRINT && CRPRNT */
    157 #if !defined(CDISCARD) && defined(CFLUSH)
    158 # define CDISCARD CFLUSH
    159 #endif /* !CDISCARD && CFLUSH */
    160 
    161 #ifndef CINTR
    162 # define CINTR		CONTROL('c')
    163 #endif /* CINTR */
    164 #ifndef CQUIT
    165 # define CQUIT		034	/* ^\ */
    166 #endif /* CQUIT */
    167 #ifndef CERASE
    168 # define CERASE		0177	/* ^? */
    169 #endif /* CERASE */
    170 #ifndef CKILL
    171 # define CKILL		CONTROL('u')
    172 #endif /* CKILL */
    173 #ifndef CEOF
    174 # define CEOF		CONTROL('d')
    175 #endif /* CEOF */
    176 #ifndef CEOL
    177 # define CEOL		_POSIX_VDISABLE
    178 #endif /* CEOL */
    179 #ifndef CEOL2
    180 # define CEOL2		_POSIX_VDISABLE
    181 #endif /* CEOL2 */
    182 #ifndef CSWTCH
    183 # define CSWTCH		_POSIX_VDISABLE
    184 #endif /* CSWTCH */
    185 #ifndef CDSWTCH
    186 # define CDSWTCH	_POSIX_VDISABLE
    187 #endif /* CDSWTCH */
    188 #ifndef CERASE2
    189 # define CERASE2	_POSIX_VDISABLE
    190 #endif /* CERASE2 */
    191 #ifndef CSTART
    192 # define CSTART		CONTROL('q')
    193 #endif /* CSTART */
    194 #ifndef CSTOP
    195 # define CSTOP		CONTROL('s')
    196 #endif /* CSTOP */
    197 #ifndef CSUSP
    198 # define CSUSP		CONTROL('z')
    199 #endif /* CSUSP */
    200 #ifndef CDSUSP
    201 # define CDSUSP		CONTROL('y')
    202 #endif /* CDSUSP */
    203 
    204 #ifdef hpux
    205 
    206 # ifndef CREPRINT
    207 #  define CREPRINT	_POSIX_VDISABLE
    208 # endif /* CREPRINT */
    209 # ifndef CDISCARD
    210 #  define CDISCARD	_POSIX_VDISABLE
    211 # endif /* CDISCARD */
    212 # ifndef CLNEXT
    213 #  define CLNEXT	_POSIX_VDISABLE
    214 # endif /* CLNEXT */
    215 # ifndef CWERASE
    216 #  define CWERASE	_POSIX_VDISABLE
    217 # endif /* CWERASE */
    218 
    219 #else /* !hpux */
    220 
    221 # ifndef CREPRINT
    222 #  define CREPRINT	CONTROL('r')
    223 # endif /* CREPRINT */
    224 # ifndef CDISCARD
    225 #  define CDISCARD	CONTROL('o')
    226 # endif /* CDISCARD */
    227 # ifndef CLNEXT
    228 #  define CLNEXT	CONTROL('v')
    229 # endif /* CLNEXT */
    230 # ifndef CWERASE
    231 #  define CWERASE	CONTROL('w')
    232 # endif /* CWERASE */
    233 
    234 #endif /* hpux */
    235 
    236 #ifndef CSTATUS
    237 # define CSTATUS	CONTROL('t')
    238 #endif /* CSTATUS */
    239 #ifndef CPAGE
    240 # define CPAGE		' '
    241 #endif /* CPAGE */
    242 #ifndef CPGOFF
    243 # define CPGOFF		CONTROL('m')
    244 #endif /* CPGOFF */
    245 #ifndef CKILL2
    246 # define CKILL2		_POSIX_VDISABLE
    247 #endif /* CKILL2 */
    248 #ifndef CBRK
    249 # ifndef masscomp
    250 #  define CBRK		0377
    251 # else
    252 #  define CBRK		'\0'
    253 # endif /* masscomp */
    254 #endif /* CBRK */
    255 #ifndef CMIN
    256 # define CMIN		CEOF
    257 #endif /* CMIN */
    258 #ifndef CTIME
    259 # define CTIME		CEOL
    260 #endif /* CTIME */
    261 
    262 /*
    263  * Fix for sun inconsistency. On termio VSUSP and the rest of the
    264  * ttychars > NCC are defined. So we undefine them.
    265  */
    266 #if defined(TERMIO) || defined(POSIX)
    267 # if defined(POSIX) && defined(NCCS)
    268 #  define NUMCC		NCCS
    269 # else
    270 #  ifdef NCC
    271 #   define NUMCC	NCC
    272 #  endif /* NCC */
    273 # endif /* POSIX && NCCS */
    274 # ifdef NUMCC
    275 #  ifdef VINTR
    276 #   if NUMCC <= VINTR
    277 #    undef VINTR
    278 #   endif /* NUMCC <= VINTR */
    279 #  endif /* VINTR */
    280 #  ifdef VQUIT
    281 #   if NUMCC <= VQUIT
    282 #    undef VQUIT
    283 #   endif /* NUMCC <= VQUIT */
    284 #  endif /* VQUIT */
    285 #  ifdef VERASE
    286 #   if NUMCC <= VERASE
    287 #    undef VERASE
    288 #   endif /* NUMCC <= VERASE */
    289 #  endif /* VERASE */
    290 #  ifdef VKILL
    291 #   if NUMCC <= VKILL
    292 #    undef VKILL
    293 #   endif /* NUMCC <= VKILL */
    294 #  endif /* VKILL */
    295 #  ifdef VEOF
    296 #   if NUMCC <= VEOF
    297 #    undef VEOF
    298 #   endif /* NUMCC <= VEOF */
    299 #  endif /* VEOF */
    300 #  ifdef VEOL
    301 #   if NUMCC <= VEOL
    302 #    undef VEOL
    303 #   endif /* NUMCC <= VEOL */
    304 #  endif /* VEOL */
    305 #  ifdef VEOL2
    306 #   if NUMCC <= VEOL2
    307 #    undef VEOL2
    308 #   endif /* NUMCC <= VEOL2 */
    309 #  endif /* VEOL2 */
    310 #  ifdef VSWTCH
    311 #   if NUMCC <= VSWTCH
    312 #    undef VSWTCH
    313 #   endif /* NUMCC <= VSWTCH */
    314 #  endif /* VSWTCH */
    315 #  ifdef VDSWTCH
    316 #   if NUMCC <= VDSWTCH
    317 #    undef VDSWTCH
    318 #   endif /* NUMCC <= VDSWTCH */
    319 #  endif /* VDSWTCH */
    320 #  ifdef VERASE2
    321 #   if NUMCC <= VERASE2
    322 #    undef VERASE2
    323 #   endif /* NUMCC <= VERASE2 */
    324 #  endif /* VERASE2 */
    325 #  ifdef VSTART
    326 #   if NUMCC <= VSTART
    327 #    undef VSTART
    328 #   endif /* NUMCC <= VSTART */
    329 #  endif /* VSTART */
    330 #  ifdef VSTOP
    331 #   if NUMCC <= VSTOP
    332 #    undef VSTOP
    333 #   endif /* NUMCC <= VSTOP */
    334 #  endif /* VSTOP */
    335 #  ifdef VWERASE
    336 #   if NUMCC <= VWERASE
    337 #    undef VWERASE
    338 #   endif /* NUMCC <= VWERASE */
    339 #  endif /* VWERASE */
    340 #  ifdef VSUSP
    341 #   if NUMCC <= VSUSP
    342 #    undef VSUSP
    343 #   endif /* NUMCC <= VSUSP */
    344 #  endif /* VSUSP */
    345 #  ifdef VDSUSP
    346 #   if NUMCC <= VDSUSP
    347 #    undef VDSUSP
    348 #   endif /* NUMCC <= VDSUSP */
    349 #  endif /* VDSUSP */
    350 #  ifdef VREPRINT
    351 #   if NUMCC <= VREPRINT
    352 #    undef VREPRINT
    353 #   endif /* NUMCC <= VREPRINT */
    354 #  endif /* VREPRINT */
    355 #  ifdef VDISCARD
    356 #   if NUMCC <= VDISCARD
    357 #    undef VDISCARD
    358 #   endif /* NUMCC <= VDISCARD */
    359 #  endif /* VDISCARD */
    360 #  ifdef VLNEXT
    361 #   if NUMCC <= VLNEXT
    362 #    undef VLNEXT
    363 #   endif /* NUMCC <= VLNEXT */
    364 #  endif /* VLNEXT */
    365 #  ifdef VSTATUS
    366 #   if NUMCC <= VSTATUS
    367 #    undef VSTATUS
    368 #   endif /* NUMCC <= VSTATUS */
    369 #  endif /* VSTATUS */
    370 #  ifdef VPAGE
    371 #   if NUMCC <= VPAGE
    372 #    undef VPAGE
    373 #   endif /* NUMCC <= VPAGE */
    374 #  endif /* VPAGE */
    375 #  ifdef VPGOFF
    376 #   if NUMCC <= VPGOFF
    377 #    undef VPGOFF
    378 #   endif /* NUMCC <= VPGOFF */
    379 #  endif /* VPGOFF */
    380 #  ifdef VKILL2
    381 #   if NUMCC <= VKILL2
    382 #    undef VKILL2
    383 #   endif /* NUMCC <= VKILL2 */
    384 #  endif /* VKILL2 */
    385 #  ifdef VBRK
    386 #   if NUMCC <= VBRK
    387 #    undef VBRK
    388 #   endif /* NUMCC <= VBRK */
    389 #  endif /* VBRK */
    390 #  ifdef VMIN
    391 #   if NUMCC <= VMIN
    392 #    undef VMIN
    393 #   endif /* NUMCC <= VMIN */
    394 #  endif /* VMIN */
    395 #  ifdef VTIME
    396 #   if NUMCC <= VTIME
    397 #    undef VTIME
    398 #   endif /* NUMCC <= VTIME */
    399 #  endif /* VTIME */
    400 # endif /* NUMCC */
    401 #endif /* !POSIX */
    402 
    403 #define C_INTR		 0
    404 #define C_QUIT		 1
    405 #define C_ERASE		 2
    406 #define C_KILL		 3
    407 #define C_EOF		 4
    408 #define C_EOL		 5
    409 #define C_EOL2		 6
    410 #define C_SWTCH		 7
    411 #define C_DSWTCH	 8
    412 #define C_ERASE2	 9
    413 #define C_START		10
    414 #define C_STOP		11
    415 #define C_WERASE	12
    416 #define C_SUSP		13
    417 #define C_DSUSP		14
    418 #define C_REPRINT	15
    419 #define C_DISCARD	16
    420 #define C_LNEXT		17
    421 #define C_STATUS	18
    422 #define C_PAGE		19
    423 #define C_PGOFF		20
    424 #define C_KILL2		21
    425 #define C_BRK		22
    426 #define C_MIN		23
    427 #define C_TIME		24
    428 #define C_NCC		25
    429 #define C_SH(A)		(1 << (A))
    430 
    431 /*
    432  * Terminal dependend data structures
    433  */
    434 #define EX_IO	0	/* while we are executing	*/
    435 #define ED_IO	1	/* while we are editing		*/
    436 #define TS_IO	2	/* new mode from terminal	*/
    437 #define QU_IO	2	/* used only for quoted chars	*/
    438 #define NN_IO	3	/* The number of entries	*/
    439 
    440 #define M_INP	0
    441 #define M_OUT	1
    442 #define M_CTL	2
    443 #define M_LIN	3
    444 #define M_CHAR	4
    445 #define M_NN	5
    446 
    447 typedef struct {
    448     char *t_name;
    449     int  t_setmask;
    450     int  t_clrmask;
    451 } ttyperm_t[NN_IO][M_NN];
    452 
    453 typedef unsigned char ttychar_t[NN_IO][C_NCC];
    454 
    455 protected int	tty_init	__P((EditLine *));
    456 protected void	tty_end		__P((EditLine *));
    457 protected int	tty_stty	__P((EditLine *, int, char**));
    458 protected int	tty_rawmode	__P((EditLine *));
    459 protected int	tty_cookedmode	__P((EditLine *));
    460 protected int	tty_quotemode	__P((EditLine *));
    461 protected int	tty_noquotemode	__P((EditLine *));
    462 protected void	tty_bind_char	__P((EditLine *, int));
    463 
    464 typedef struct {
    465     ttyperm_t t_t;
    466     ttychar_t t_c;
    467     struct termios t_ex, t_ed, t_ts;
    468     int t_tabs;
    469     int t_eight;
    470     speed_t t_speed;
    471     int t_mode;
    472     unsigned char t_vdisable;
    473 } el_tty_t;
    474 
    475 
    476 #endif /* _h_el_tty */
    477