1 /* $Header: /p/tcsh/cvsroot/tcsh/ed.term.h,v 1.17 2004/12/25 21:15:06 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 # define CMIN CEOF 304 #endif /* CMIN */ 305 #ifndef CTIME 306 # define CTIME CEOL 307 #endif /* CTIME */ 308 309 /* 310 * Fix for sun inconsistency. On termio VSUSP and the rest of the 311 * ttychars > NCC are defined. So we undefine them. 312 */ 313 #if defined(TERMIO) || defined(POSIX) 314 # if defined(POSIX) && defined(NCCS) 315 # define NUMCC NCCS 316 # else 317 # ifdef NCC 318 # define NUMCC NCC 319 # endif /* NCC */ 320 # endif /* POSIX && NCCS */ 321 # ifdef NUMCC 322 # ifdef VINTR 323 # if NUMCC <= VINTR 324 # undef VINTR 325 # endif /* NUMCC <= VINTR */ 326 # endif /* VINTR */ 327 # ifdef VQUIT 328 # if NUMCC <= VQUIT 329 # undef VQUIT 330 # endif /* NUMCC <= VQUIT */ 331 # endif /* VQUIT */ 332 # ifdef VERASE 333 # if NUMCC <= VERASE 334 # undef VERASE 335 # endif /* NUMCC <= VERASE */ 336 # endif /* VERASE */ 337 # ifdef VKILL 338 # if NUMCC <= VKILL 339 # undef VKILL 340 # endif /* NUMCC <= VKILL */ 341 # endif /* VKILL */ 342 # ifdef VEOF 343 # if NUMCC <= VEOF 344 # undef VEOF 345 # endif /* NUMCC <= VEOF */ 346 # endif /* VEOF */ 347 # ifdef VEOL 348 # if NUMCC <= VEOL 349 # undef VEOL 350 # endif /* NUMCC <= VEOL */ 351 # endif /* VEOL */ 352 # ifdef VEOL2 353 # if NUMCC <= VEOL2 354 # undef VEOL2 355 # endif /* NUMCC <= VEOL2 */ 356 # endif /* VEOL2 */ 357 # ifdef VSWTCH 358 # if NUMCC <= VSWTCH 359 # undef VSWTCH 360 # endif /* NUMCC <= VSWTCH */ 361 # endif /* VSWTCH */ 362 # ifdef VDSWTCH 363 # if NUMCC <= VDSWTCH 364 # undef VDSWTCH 365 # endif /* NUMCC <= VDSWTCH */ 366 # endif /* VDSWTCH */ 367 # ifdef VERASE2 368 # if NUMCC <= VERASE2 369 # undef VERASE2 370 # endif /* NUMCC <= VERASE2 */ 371 # endif /* VERASE2 */ 372 # ifdef VSTART 373 # if NUMCC <= VSTART 374 # undef VSTART 375 # endif /* NUMCC <= VSTART */ 376 # endif /* VSTART */ 377 # ifdef VSTOP 378 # if NUMCC <= VSTOP 379 # undef VSTOP 380 # endif /* NUMCC <= VSTOP */ 381 # endif /* VSTOP */ 382 # ifdef VWERASE 383 # if NUMCC <= VWERASE 384 # undef VWERASE 385 # endif /* NUMCC <= VWERASE */ 386 # endif /* VWERASE */ 387 # ifdef VSUSP 388 # if NUMCC <= VSUSP 389 # undef VSUSP 390 # endif /* NUMCC <= VSUSP */ 391 # endif /* VSUSP */ 392 # ifdef VDSUSP 393 # if NUMCC <= VDSUSP 394 # undef VDSUSP 395 # endif /* NUMCC <= VDSUSP */ 396 # endif /* VDSUSP */ 397 # ifdef VREPRINT 398 # if NUMCC <= VREPRINT 399 # undef VREPRINT 400 # endif /* NUMCC <= VREPRINT */ 401 # endif /* VREPRINT */ 402 # ifdef VDISCARD 403 # if NUMCC <= VDISCARD 404 # undef VDISCARD 405 # endif /* NUMCC <= VDISCARD */ 406 # endif /* VDISCARD */ 407 # ifdef VLNEXT 408 # if NUMCC <= VLNEXT 409 # undef VLNEXT 410 # endif /* NUMCC <= VLNEXT */ 411 # endif /* VLNEXT */ 412 # ifdef VSTATUS 413 # if NUMCC <= VSTATUS 414 # undef VSTATUS 415 # endif /* NUMCC <= VSTATUS */ 416 # endif /* VSTATUS */ 417 # ifdef VPAGE 418 # if NUMCC <= VPAGE 419 # undef VPAGE 420 # endif /* NUMCC <= VPAGE */ 421 # endif /* VPAGE */ 422 # ifdef VPGOFF 423 # if NUMCC <= VPGOFF 424 # undef VPGOFF 425 # endif /* NUMCC <= VPGOFF */ 426 # endif /* VPGOFF */ 427 # ifdef VKILL2 428 # if NUMCC <= VKILL2 429 # undef VKILL2 430 # endif /* NUMCC <= VKILL2 */ 431 # endif /* VKILL2 */ 432 # ifdef VBRK 433 # if NUMCC <= VBRK 434 # undef VBRK 435 # endif /* NUMCC <= VBRK */ 436 # endif /* VBRK */ 437 # ifdef VMIN 438 # if NUMCC <= VMIN 439 # undef VMIN 440 # endif /* NUMCC <= VMIN */ 441 # endif /* VMIN */ 442 # ifdef VTIME 443 # if NUMCC <= VTIME 444 # undef VTIME 445 # endif /* NUMCC <= VTIME */ 446 # endif /* VTIME */ 447 # endif /* NUMCC */ 448 #endif /* !POSIX */ 449 450 /* 451 * fix for hpux10 inconsistency: it has VWERASE, but TIOCSLTC returns 452 * EINVAL if one tries to change it 453 * Also for RH6.2 on the alpha, defined TIOCGLTC, but does not have 454 * struct ltchars 455 */ 456 #if (defined(hpux) && defined(VSUSP) && defined(VDSUSP) && defined(VWERASE) && defined(VLNEXT)) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) 457 # undef TIOCGLTC /* not really needed */ 458 # undef TIOCSLTC 459 #endif 460 461 #define C_INTR 0 462 #define C_QUIT 1 463 #define C_ERASE 2 464 #define C_KILL 3 465 #define C_EOF 4 466 #define C_EOL 5 467 #define C_EOL2 6 468 #define C_SWTCH 7 469 #define C_DSWTCH 8 470 #define C_ERASE2 9 471 #define C_START 10 472 #define C_STOP 11 473 #define C_WERASE 12 474 #define C_SUSP 13 475 #define C_DSUSP 14 476 #define C_REPRINT 15 477 #define C_DISCARD 16 478 #define C_LNEXT 17 479 #define C_STATUS 18 480 #define C_PAGE 19 481 #define C_PGOFF 20 482 #define C_KILL2 21 483 #define C_BRK 22 484 #define C_MIN 23 485 #define C_TIME 24 486 #define C_NCC 25 487 #define C_SH(A) (1 << (A)) 488 489 /* 490 * Terminal dependend data structures 491 */ 492 typedef struct { 493 #ifdef WINNT_NATIVE 494 int dummy; 495 #else /* !WINNT_NATIVE */ 496 # if defined(POSIX) || defined(TERMIO) 497 # ifdef POSIX 498 struct termios d_t; 499 # else 500 struct termio d_t; 501 # endif /* POSIX */ 502 # else /* SGTTY */ 503 # ifdef TIOCGETP 504 struct sgttyb d_t; 505 # endif /* TIOCGETP */ 506 # ifdef TIOCGETC 507 struct tchars d_tc; 508 # endif /* TIOCGETC */ 509 # ifdef TIOCGPAGE 510 struct ttypagestat d_pc; 511 # endif /* TIOCGPAGE */ 512 # ifdef TIOCLGET 513 int d_lb; 514 # endif /* TIOCLGET */ 515 # endif /* POSIX || TERMIO */ 516 # ifdef TIOCGLTC 517 struct ltchars d_ltc; 518 # endif /* TIOCGLTC */ 519 #endif /* WINNT_NATIVE */ 520 } ttydata_t; 521 522 #endif /* _h_ed_term */ 523