tty.h revision 8870
159243Sobrien/*- 259243Sobrien * Copyright (c) 1992, 1993 359243Sobrien * The Regents of the University of California. All rights reserved. 4231990Smp * 559243Sobrien * This code is derived from software contributed to Berkeley by 659243Sobrien * Christos Zoulas of Cornell University. 7231990Smp * 8231990Smp * Redistribution and use in source and binary forms, with or without 959243Sobrien * modification, are permitted provided that the following conditions 10316957Sdchagin * are met: 11231990Smp * 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 447typedef struct { 448 char *t_name; 449 int t_setmask; 450 int t_clrmask; 451} ttyperm_t[NN_IO][M_NN]; 452 453typedef unsigned char ttychar_t[NN_IO][C_NCC]; 454 455protected int tty_init __P((EditLine *)); 456protected void tty_end __P((EditLine *)); 457protected int tty_stty __P((EditLine *, int, char**)); 458protected int tty_rawmode __P((EditLine *)); 459protected int tty_cookedmode __P((EditLine *)); 460protected int tty_quotemode __P((EditLine *)); 461protected int tty_noquotemode __P((EditLine *)); 462protected void tty_bind_char __P((EditLine *, int)); 463 464typedef 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