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 CCHECKPT 200 # undef CPAGE 201 # undef CPGOFF 202 # undef CKILL2 203 # undef CBRK 204 # undef CMIN 205 # undef CTIME 206 #endif /* __STDC__ && IRIS4D */ 207 208 209 #ifndef CINTR 210 # define CINTR TO_CONTROL('c') 211 #endif /* CINTR */ 212 #ifndef CQUIT 213 # define CQUIT 034 /* ^\ */ 214 #endif /* CQUIT */ 215 #ifndef CERASE 216 # define CERASE 0177 /* ^? */ 217 #endif /* CERASE */ 218 #ifndef CKILL 219 # define CKILL TO_CONTROL('u') 220 #endif /* CKILL */ 221 #ifndef CEOF 222 # define CEOF TO_CONTROL('d') 223 #endif /* CEOF */ 224 #ifndef CEOL 225 # define CEOL _POSIX_VDISABLE 226 #endif /* CEOL */ 227 #ifndef CEOL2 228 # define CEOL2 _POSIX_VDISABLE 229 #endif /* CEOL2 */ 230 #ifndef CSWTCH 231 # define CSWTCH _POSIX_VDISABLE 232 #endif /* CSWTCH */ 233 #ifndef CDSWTCH 234 # define CDSWTCH _POSIX_VDISABLE 235 #endif /* CDSWTCH */ 236 #ifndef CERASE2 237 # define CERASE2 _POSIX_VDISABLE 238 #endif /* CERASE2 */ 239 #ifndef CSTART 240 # define CSTART TO_CONTROL('q') 241 #endif /* CSTART */ 242 #ifndef CSTOP 243 # define CSTOP TO_CONTROL('s') 244 #endif /* CSTOP */ 245 #ifndef CSUSP 246 # define CSUSP TO_CONTROL('z') 247 #endif /* CSUSP */ 248 #ifndef CDSUSP 249 # define CDSUSP TO_CONTROL('y') 250 #endif /* CDSUSP */ 251 252 #ifdef hpux 253 254 # ifndef CREPRINT 255 # define CREPRINT _POSIX_VDISABLE 256 # endif /* CREPRINT */ 257 # ifndef CDISCARD 258 # define CDISCARD _POSIX_VDISABLE 259 # endif /* CDISCARD */ 260 # ifndef CLNEXT 261 # define CLNEXT _POSIX_VDISABLE 262 # endif /* CLNEXT */ 263 # ifndef CWERASE 264 # define CWERASE _POSIX_VDISABLE 265 # endif /* CWERASE */ 266 267 #else /* !hpux */ 268 269 # ifndef CREPRINT 270 # define CREPRINT TO_CONTROL('r') 271 # endif /* CREPRINT */ 272 # ifndef CDISCARD 273 # define CDISCARD TO_CONTROL('o') 274 # endif /* CDISCARD */ 275 # ifndef CLNEXT 276 # define CLNEXT TO_CONTROL('v') 277 # endif /* CLNEXT */ 278 # ifndef CWERASE 279 # define CWERASE TO_CONTROL('w') 280 # endif /* CWERASE */ 281 282 #endif /* hpux */ 283 284 #ifndef CSTATUS 285 # define CSTATUS TO_CONTROL('t') 286 #endif /* CSTATUS */ 287 #ifndef CCHECKPT 288 # define CCHECKPT TO_CONTROL('e') 289 #endif /* CCHECKPT */ 290 #ifndef CPAGE 291 # define CPAGE ' ' 292 #endif /* CPAGE */ 293 #ifndef CPGOFF 294 # define CPGOFF TO_CONTROL('m') 295 #endif /* CPGOFF */ 296 #ifndef CKILL2 297 # define CKILL2 _POSIX_VDISABLE 298 #endif /* CKILL2 */ 299 #ifndef CBRK 300 # ifndef masscomp 301 # define CBRK 0377 302 # else 303 # define CBRK '\0' 304 # endif /* masscomp */ 305 #endif /* CBRK */ 306 #ifndef CMIN 307 # if VMIN == VEOF 308 # define CMIN CEOF 309 # else 310 # define CMIN 1 311 # endif 312 #endif /* CMIN */ 313 #ifndef CTIME 314 # if VTIME == VEOL 315 # define CTIME CEOL 316 # else 317 # define CTIME 0 318 # endif 319 #endif /* CTIME */ 320 321 /* 322 * Fix for sun inconsistency. On termio VSUSP and the rest of the 323 * ttychars > NCC are defined. So we undefine them. 324 */ 325 #if defined(TERMIO) || defined(POSIX) 326 # if defined(POSIX) && defined(NCCS) 327 # define NUMCC NCCS 328 # else 329 # ifdef NCC 330 # define NUMCC NCC 331 # endif /* NCC */ 332 # endif /* POSIX && NCCS */ 333 # ifdef NUMCC 334 # ifdef VINTR 335 # if NUMCC <= VINTR 336 # undef VINTR 337 # endif /* NUMCC <= VINTR */ 338 # endif /* VINTR */ 339 # ifdef VQUIT 340 # if NUMCC <= VQUIT 341 # undef VQUIT 342 # endif /* NUMCC <= VQUIT */ 343 # endif /* VQUIT */ 344 # ifdef VERASE 345 # if NUMCC <= VERASE 346 # undef VERASE 347 # endif /* NUMCC <= VERASE */ 348 # endif /* VERASE */ 349 # ifdef VKILL 350 # if NUMCC <= VKILL 351 # undef VKILL 352 # endif /* NUMCC <= VKILL */ 353 # endif /* VKILL */ 354 # ifdef VEOF 355 # if NUMCC <= VEOF 356 # undef VEOF 357 # endif /* NUMCC <= VEOF */ 358 # endif /* VEOF */ 359 # ifdef VEOL 360 # if NUMCC <= VEOL 361 # undef VEOL 362 # endif /* NUMCC <= VEOL */ 363 # endif /* VEOL */ 364 # ifdef VEOL2 365 # if NUMCC <= VEOL2 366 # undef VEOL2 367 # endif /* NUMCC <= VEOL2 */ 368 # endif /* VEOL2 */ 369 # ifdef VSWTCH 370 # if NUMCC <= VSWTCH 371 # undef VSWTCH 372 # endif /* NUMCC <= VSWTCH */ 373 # endif /* VSWTCH */ 374 # ifdef VDSWTCH 375 # if NUMCC <= VDSWTCH 376 # undef VDSWTCH 377 # endif /* NUMCC <= VDSWTCH */ 378 # endif /* VDSWTCH */ 379 # ifdef VERASE2 380 # if NUMCC <= VERASE2 381 # undef VERASE2 382 # endif /* NUMCC <= VERASE2 */ 383 # endif /* VERASE2 */ 384 # ifdef VSTART 385 # if NUMCC <= VSTART 386 # undef VSTART 387 # endif /* NUMCC <= VSTART */ 388 # endif /* VSTART */ 389 # ifdef VSTOP 390 # if NUMCC <= VSTOP 391 # undef VSTOP 392 # endif /* NUMCC <= VSTOP */ 393 # endif /* VSTOP */ 394 # ifdef VWERASE 395 # if NUMCC <= VWERASE 396 # undef VWERASE 397 # endif /* NUMCC <= VWERASE */ 398 # endif /* VWERASE */ 399 # ifdef VSUSP 400 # if NUMCC <= VSUSP 401 # undef VSUSP 402 # endif /* NUMCC <= VSUSP */ 403 # endif /* VSUSP */ 404 # ifdef VDSUSP 405 # if NUMCC <= VDSUSP 406 # undef VDSUSP 407 # endif /* NUMCC <= VDSUSP */ 408 # endif /* VDSUSP */ 409 # ifdef VREPRINT 410 # if NUMCC <= VREPRINT 411 # undef VREPRINT 412 # endif /* NUMCC <= VREPRINT */ 413 # endif /* VREPRINT */ 414 # ifdef VDISCARD 415 # if NUMCC <= VDISCARD 416 # undef VDISCARD 417 # endif /* NUMCC <= VDISCARD */ 418 # endif /* VDISCARD */ 419 # ifdef VLNEXT 420 # if NUMCC <= VLNEXT 421 # undef VLNEXT 422 # endif /* NUMCC <= VLNEXT */ 423 # endif /* VLNEXT */ 424 # ifdef VSTATUS 425 # if NUMCC <= VSTATUS 426 # undef VSTATUS 427 # endif /* NUMCC <= VSTATUS */ 428 # endif /* VSTATUS */ 429 # ifdef VCHECKPT 430 # if NUMCC <= VCHECKPT 431 # undef VCHECKPT 432 # endif /* NUMCC <= VCHECKPT */ 433 # endif /* VCHECKPT */ 434 # ifdef VPAGE 435 # if NUMCC <= VPAGE 436 # undef VPAGE 437 # endif /* NUMCC <= VPAGE */ 438 # endif /* VPAGE */ 439 # ifdef VPGOFF 440 # if NUMCC <= VPGOFF 441 # undef VPGOFF 442 # endif /* NUMCC <= VPGOFF */ 443 # endif /* VPGOFF */ 444 # ifdef VKILL2 445 # if NUMCC <= VKILL2 446 # undef VKILL2 447 # endif /* NUMCC <= VKILL2 */ 448 # endif /* VKILL2 */ 449 # ifdef VBRK 450 # if NUMCC <= VBRK 451 # undef VBRK 452 # endif /* NUMCC <= VBRK */ 453 # endif /* VBRK */ 454 # ifdef VMIN 455 # if NUMCC <= VMIN 456 # undef VMIN 457 # endif /* NUMCC <= VMIN */ 458 # endif /* VMIN */ 459 # ifdef VTIME 460 # if NUMCC <= VTIME 461 # undef VTIME 462 # endif /* NUMCC <= VTIME */ 463 # endif /* VTIME */ 464 # endif /* NUMCC */ 465 #endif /* !POSIX */ 466 467 /* 468 * fix for hpux10 inconsistency: it has VWERASE, but TIOCSLTC returns 469 * EINVAL if one tries to change it 470 * Also for RH6.2 on the alpha, defined TIOCGLTC, but does not have 471 * struct ltchars 472 */ 473 #if (defined(hpux) && defined(VSUSP) && defined(VDSUSP) && defined(VWERASE) && defined(VLNEXT)) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) || defined(__QNXNTO__) 474 # undef TIOCGLTC /* not really needed */ 475 # undef TIOCSLTC 476 #endif 477 478 #define C_INTR 0 479 #define C_QUIT 1 480 #define C_ERASE 2 481 #define C_KILL 3 482 #define C_EOF 4 483 #define C_EOL 5 484 #define C_EOL2 6 485 #define C_SWTCH 7 486 #define C_DSWTCH 8 487 #define C_ERASE2 9 488 #define C_START 10 489 #define C_STOP 11 490 #define C_WERASE 12 491 #define C_SUSP 13 492 #define C_DSUSP 14 493 #define C_REPRINT 15 494 #define C_DISCARD 16 495 #define C_LNEXT 17 496 #define C_STATUS 18 497 #define C_PAGE 19 498 #define C_PGOFF 20 499 #define C_KILL2 21 500 #define C_BRK 22 501 #define C_MIN 23 502 #define C_TIME 24 503 #define C_CHECKPT 25 504 #define C_NCC 26 505 #define C_SH(A) (1 << (A)) 506 507 /* 508 * Terminal dependend data structures 509 */ 510 typedef struct { 511 #ifdef WINNT_NATIVE 512 int dummy; 513 #else /* !WINNT_NATIVE */ 514 # if defined(POSIX) || defined(TERMIO) 515 # ifdef POSIX 516 struct termios d_t; 517 # else 518 struct termio d_t; 519 # endif /* POSIX */ 520 # else /* SGTTY */ 521 # ifdef TIOCGETP 522 struct sgttyb d_t; 523 # endif /* TIOCGETP */ 524 # ifdef TIOCGETC 525 struct tchars d_tc; 526 # endif /* TIOCGETC */ 527 # ifdef TIOCGPAGE 528 struct ttypagestat d_pc; 529 # endif /* TIOCGPAGE */ 530 # ifdef TIOCLGET 531 int d_lb; 532 # endif /* TIOCLGET */ 533 # endif /* POSIX || TERMIO */ 534 # ifdef TIOCGLTC 535 struct ltchars d_ltc; 536 # endif /* TIOCGLTC */ 537 #endif /* WINNT_NATIVE */ 538 } ttydata_t; 539 540 #endif /* _h_ed_term */ 541