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