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 */ 499 typedef 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