1/* 2 * ed.term.h: Local terminal header 3 */ 4/*- 5 * Copyright (c) 1980, 1991 The Regents of the University of California. 6 * All rights reserved. 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. Neither the name of the University nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 */ 32#ifndef _h_ed_term 33#define _h_ed_term 34 35#define TO_CONTROL(A) ((A) & 037) 36 37#if defined(TERMIO) || defined(POSIX) 38/* 39 * Aix compatible names 40 */ 41# if defined(VWERSE) && !defined(VWERASE) 42# define VWERASE VWERSE 43# endif /* VWERSE && !VWERASE */ 44 45# if defined(VDISCRD) && !defined(VDISCARD) 46# define VDISCARD VDISCRD 47# endif /* VDISCRD && !VDISCARD */ 48 49# if defined(VFLUSHO) && !defined(VDISCARD) 50# define VDISCARD VFLUSHO 51# endif /* VFLUSHO && VDISCARD */ 52 53# if defined(VSTRT) && !defined(VSTART) 54# define VSTART VSTRT 55# endif /* VSTRT && ! VSTART */ 56 57# if defined(VSTAT) && !defined(VSTATUS) 58# define VSTATUS VSTAT 59# endif /* VSTAT && ! VSTATUS */ 60 61# ifndef ONLRET 62# define ONLRET 0 63# endif /* ONLRET */ 64 65# ifndef TAB3 66# ifdef OXTABS 67# define TAB3 OXTABS 68# else 69# define TAB3 0 70# endif /* OXTABS */ 71# endif /* !TAB3 */ 72 73# if defined(OXTABS) && !defined(XTABS) 74# define XTABS OXTABS 75# endif /* OXTABS && !XTABS */ 76 77# ifndef ONLCR 78# define ONLCR 0 79# endif /* ONLCR */ 80 81# ifndef IEXTEN 82# define IEXTEN 0 83# endif /* IEXTEN */ 84 85/* 86 * emx garbage 87 */ 88# ifndef IDEFAULT 89# define IDEFAULT 0 90# endif /* IDEFAULT */ 91 92# ifndef IDELETE 93# define IDELETE 0 94# endif /* IDELETE */ 95 96# ifndef ECHOCTL 97# define ECHOCTL 0 98# endif /* ECHOCTL */ 99 100# ifndef PARENB 101# define PARENB 0 102# endif /* PARENB */ 103 104# ifndef EXTPROC 105# define EXTPROC 0 106# endif /* EXTPROC */ 107 108# ifndef FLUSHO 109# define FLUSHO 0 110# endif /* FLUSHO */ 111 112 113# if defined(VDISABLE) && !defined(_POSIX_VDISABLE) 114# define _POSIX_VDISABLE VDISABLE 115# endif /* VDISABLE && ! _POSIX_VDISABLE */ 116 117/* 118 * Work around ISC's definition of IEXTEN which is 119 * XCASE! 120 */ 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 */ 134 135/* 136 * Work around convex weirdness where turning off IEXTEN makes us 137 * lose all postprocessing! 138 */ 139#ifdef convex 140# if defined(IEXTEN) && IEXTEN != 0 141# undef IEXTEN 142# define IEXTEN 0 143# endif /* IEXTEN != 0 */ 144#endif /* convex */ 145 146 147# else /* SGTTY */ 148 149# ifndef LPASS8 150# define LPASS8 0 151# endif /* LPASS8 */ 152 153#endif /* TERMIO || POSIX */ 154 155#ifndef _POSIX_VDISABLE 156# define _POSIX_VDISABLE ((unsigned char) -1) 157#endif /* _POSIX_VDISABLE */ 158 159 160#if !defined(CREPRINT) && defined(CRPRNT) 161# define CREPRINT CRPRNT 162#endif /* !CREPRINT && CRPRNT */ 163#if !defined(CDISCARD) && defined(CFLUSH) 164# define CDISCARD CFLUSH 165#endif /* !CDISCARD && CFLUSH */ 166#if !defined(CDISCARD) && defined(CFLUSHO) 167# define CDISCARD CFLUSHO 168#endif /* !CDISCARD && CFLUSHO */ 169 170/* 171 * IRIX4.0 control macro is broken! 172 * Ignore and undef all default tty chars defined and redefine only 173 * the ones that are different in the IRIX file. 174 */ 175#if __STDC__ && defined(IRIS4D) 176# undef CINTR 177# define CINTR 0177 /* ^? */ 178# undef CQUIT 179# undef CERASE 180# define CERASE TO_CONTROL('h') 181# undef CKILL 182# undef CEOF 183# undef CEOL 184# undef CEOL2 185# undef CSWTCH 186# define CSWTCH TO_CONTROL('z') 187# undef CDSWTCH 188# undef CERASE2 189# undef CSTART 190# undef CSTOP 191# undef CWERASE 192# undef CSUSP 193# undef CDSUSP 194# undef CREPRINT 195# undef CDISCARD 196# undef CLNEXT 197# undef CSTATUS 198# undef CPAGE 199# undef CPGOFF 200# undef CKILL2 201# undef CBRK 202# undef CMIN 203# undef CTIME 204#endif /* __STDC__ && IRIS4D */ 205 206 207#ifndef CINTR 208# define CINTR TO_CONTROL('c') 209#endif /* CINTR */ 210#ifndef CQUIT 211# define CQUIT 034 /* ^\ */ 212#endif /* CQUIT */ 213#ifndef CERASE 214# define CERASE 0177 /* ^? */ 215#endif /* CERASE */ 216#ifndef CKILL 217# define CKILL TO_CONTROL('u') 218#endif /* CKILL */ 219#ifndef CEOF 220# define CEOF TO_CONTROL('d') 221#endif /* CEOF */ 222#ifndef CEOL 223# define CEOL _POSIX_VDISABLE 224#endif /* CEOL */ 225#ifndef CEOL2 226# define CEOL2 _POSIX_VDISABLE 227#endif /* CEOL2 */ 228#ifndef CSWTCH 229# define CSWTCH _POSIX_VDISABLE 230#endif /* CSWTCH */ 231#ifndef CDSWTCH 232# define CDSWTCH _POSIX_VDISABLE 233#endif /* CDSWTCH */ 234#ifndef CERASE2 235# define CERASE2 _POSIX_VDISABLE 236#endif /* CERASE2 */ 237#ifndef CSTART 238# define CSTART TO_CONTROL('q') 239#endif /* CSTART */ 240#ifndef CSTOP 241# define CSTOP TO_CONTROL('s') 242#endif /* CSTOP */ 243#ifndef CSUSP 244# define CSUSP TO_CONTROL('z') 245#endif /* CSUSP */ 246#ifndef CDSUSP 247# define CDSUSP TO_CONTROL('y') 248#endif /* CDSUSP */ 249 250#ifdef hpux 251 252# ifndef CREPRINT 253# define CREPRINT _POSIX_VDISABLE 254# endif /* CREPRINT */ 255# ifndef CDISCARD 256# define CDISCARD _POSIX_VDISABLE 257# endif /* CDISCARD */ 258# ifndef CLNEXT 259# define CLNEXT _POSIX_VDISABLE 260# endif /* CLNEXT */ 261# ifndef CWERASE 262# define CWERASE _POSIX_VDISABLE 263# endif /* CWERASE */ 264 265#else /* !hpux */ 266 267# ifndef CREPRINT 268# define CREPRINT TO_CONTROL('r') 269# endif /* CREPRINT */ 270# ifndef CDISCARD 271# define CDISCARD TO_CONTROL('o') 272# endif /* CDISCARD */ 273# ifndef CLNEXT 274# define CLNEXT TO_CONTROL('v') 275# endif /* CLNEXT */ 276# ifndef CWERASE 277# define CWERASE TO_CONTROL('w') 278# endif /* CWERASE */ 279 280#endif /* hpux */ 281 282#ifndef CSTATUS 283# define CSTATUS TO_CONTROL('t') 284#endif /* CSTATUS */ 285#ifndef CPAGE 286# define CPAGE ' ' 287#endif /* CPAGE */ 288#ifndef CPGOFF 289# define CPGOFF TO_CONTROL('m') 290#endif /* CPGOFF */ 291#ifndef CKILL2 292# define CKILL2 _POSIX_VDISABLE 293#endif /* CKILL2 */ 294#ifndef CBRK 295# ifndef masscomp 296# define CBRK 0377 297# else 298# define CBRK '\0' 299# endif /* masscomp */ 300#endif /* CBRK */ 301#ifndef CMIN 302# if VMIN == VEOF 303# define CMIN CEOF 304# else 305# define CMIN 1 306# endif 307#endif /* CMIN */ 308#ifndef CTIME 309# if VTIME == VEOL 310# define CTIME CEOL 311# else 312# define CTIME 0 313# endif 314#endif /* CTIME */ 315 316/* 317 * Fix for sun inconsistency. On termio VSUSP and the rest of the 318 * ttychars > NCC are defined. So we undefine them. 319 */ 320#if defined(TERMIO) || defined(POSIX) 321# if defined(POSIX) && defined(NCCS) 322# define NUMCC NCCS 323# else 324# ifdef NCC 325# define NUMCC NCC 326# endif /* NCC */ 327# endif /* POSIX && NCCS */ 328# ifdef NUMCC 329# ifdef VINTR 330# if NUMCC <= VINTR 331# undef VINTR 332# endif /* NUMCC <= VINTR */ 333# endif /* VINTR */ 334# ifdef VQUIT 335# if NUMCC <= VQUIT 336# undef VQUIT 337# endif /* NUMCC <= VQUIT */ 338# endif /* VQUIT */ 339# ifdef VERASE 340# if NUMCC <= VERASE 341# undef VERASE 342# endif /* NUMCC <= VERASE */ 343# endif /* VERASE */ 344# ifdef VKILL 345# if NUMCC <= VKILL 346# undef VKILL 347# endif /* NUMCC <= VKILL */ 348# endif /* VKILL */ 349# ifdef VEOF 350# if NUMCC <= VEOF 351# undef VEOF 352# endif /* NUMCC <= VEOF */ 353# endif /* VEOF */ 354# ifdef VEOL 355# if NUMCC <= VEOL 356# undef VEOL 357# endif /* NUMCC <= VEOL */ 358# endif /* VEOL */ 359# ifdef VEOL2 360# if NUMCC <= VEOL2 361# undef VEOL2 362# endif /* NUMCC <= VEOL2 */ 363# endif /* VEOL2 */ 364# ifdef VSWTCH 365# if NUMCC <= VSWTCH 366# undef VSWTCH 367# endif /* NUMCC <= VSWTCH */ 368# endif /* VSWTCH */ 369# ifdef VDSWTCH 370# if NUMCC <= VDSWTCH 371# undef VDSWTCH 372# endif /* NUMCC <= VDSWTCH */ 373# endif /* VDSWTCH */ 374# ifdef VERASE2 375# if NUMCC <= VERASE2 376# undef VERASE2 377# endif /* NUMCC <= VERASE2 */ 378# endif /* VERASE2 */ 379# ifdef VSTART 380# if NUMCC <= VSTART 381# undef VSTART 382# endif /* NUMCC <= VSTART */ 383# endif /* VSTART */ 384# ifdef VSTOP 385# if NUMCC <= VSTOP 386# undef VSTOP 387# endif /* NUMCC <= VSTOP */ 388# endif /* VSTOP */ 389# ifdef VWERASE 390# if NUMCC <= VWERASE 391# undef VWERASE 392# endif /* NUMCC <= VWERASE */ 393# endif /* VWERASE */ 394# ifdef VSUSP 395# if NUMCC <= VSUSP 396# undef VSUSP 397# endif /* NUMCC <= VSUSP */ 398# endif /* VSUSP */ 399# ifdef VDSUSP 400# if NUMCC <= VDSUSP 401# undef VDSUSP 402# endif /* NUMCC <= VDSUSP */ 403# endif /* VDSUSP */ 404# ifdef VREPRINT 405# if NUMCC <= VREPRINT 406# undef VREPRINT 407# endif /* NUMCC <= VREPRINT */ 408# endif /* VREPRINT */ 409# ifdef VDISCARD 410# if NUMCC <= VDISCARD 411# undef VDISCARD 412# endif /* NUMCC <= VDISCARD */ 413# endif /* VDISCARD */ 414# ifdef VLNEXT 415# if NUMCC <= VLNEXT 416# undef VLNEXT 417# endif /* NUMCC <= VLNEXT */ 418# endif /* VLNEXT */ 419# ifdef VSTATUS 420# if NUMCC <= VSTATUS 421# undef VSTATUS 422# endif /* NUMCC <= VSTATUS */ 423# endif /* VSTATUS */ 424# ifdef VPAGE 425# if NUMCC <= VPAGE 426# undef VPAGE 427# endif /* NUMCC <= VPAGE */ 428# endif /* VPAGE */ 429# ifdef VPGOFF 430# if NUMCC <= VPGOFF 431# undef VPGOFF 432# endif /* NUMCC <= VPGOFF */ 433# endif /* VPGOFF */ 434# ifdef VKILL2 435# if NUMCC <= VKILL2 436# undef VKILL2 437# endif /* NUMCC <= VKILL2 */ 438# endif /* VKILL2 */ 439# ifdef VBRK 440# if NUMCC <= VBRK 441# undef VBRK 442# endif /* NUMCC <= VBRK */ 443# endif /* VBRK */ 444# ifdef VMIN 445# if NUMCC <= VMIN 446# undef VMIN 447# endif /* NUMCC <= VMIN */ 448# endif /* VMIN */ 449# ifdef VTIME 450# if NUMCC <= VTIME 451# undef VTIME 452# endif /* NUMCC <= VTIME */ 453# endif /* VTIME */ 454# endif /* NUMCC */ 455#endif /* !POSIX */ 456 457/* 458 * fix for hpux10 inconsistency: it has VWERASE, but TIOCSLTC returns 459 * EINVAL if one tries to change it 460 * Also for RH6.2 on the alpha, defined TIOCGLTC, but does not have 461 * struct ltchars 462 */ 463#if (defined(hpux) && defined(VSUSP) && defined(VDSUSP) && defined(VWERASE) && defined(VLNEXT)) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) || defined(__QNXNTO__) 464# undef TIOCGLTC /* not really needed */ 465# undef TIOCSLTC 466#endif 467 468#define C_INTR 0 469#define C_QUIT 1 470#define C_ERASE 2 471#define C_KILL 3 472#define C_EOF 4 473#define C_EOL 5 474#define C_EOL2 6 475#define C_SWTCH 7 476#define C_DSWTCH 8 477#define C_ERASE2 9 478#define C_START 10 479#define C_STOP 11 480#define C_WERASE 12 481#define C_SUSP 13 482#define C_DSUSP 14 483#define C_REPRINT 15 484#define C_DISCARD 16 485#define C_LNEXT 17 486#define C_STATUS 18 487#define C_PAGE 19 488#define C_PGOFF 20 489#define C_KILL2 21 490#define C_BRK 22 491#define C_MIN 23 492#define C_TIME 24 493#define C_NCC 25 494#define C_SH(A) (1 << (A)) 495 496/* 497 * Terminal dependend data structures 498 */ 499typedef struct { 500#ifdef WINNT_NATIVE 501 int dummy; 502#else /* !WINNT_NATIVE */ 503# if defined(POSIX) || defined(TERMIO) 504# ifdef POSIX 505 struct termios d_t; 506# else 507 struct termio d_t; 508# endif /* POSIX */ 509# else /* SGTTY */ 510# ifdef TIOCGETP 511 struct sgttyb d_t; 512# endif /* TIOCGETP */ 513# ifdef TIOCGETC 514 struct tchars d_tc; 515# endif /* TIOCGETC */ 516# ifdef TIOCGPAGE 517 struct ttypagestat d_pc; 518# endif /* TIOCGPAGE */ 519# ifdef TIOCLGET 520 int d_lb; 521# endif /* TIOCLGET */ 522# endif /* POSIX || TERMIO */ 523# ifdef TIOCGLTC 524 struct ltchars d_ltc; 525# endif /* TIOCGLTC */ 526#endif /* WINNT_NATIVE */ 527} ttydata_t; 528 529#endif /* _h_ed_term */ 530