1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 22 /* All Rights Reserved */ 23 24 25 /* 26 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 27 * Use is subject to license terms. 28 */ 29 30 #ifndef _SYS_TERMIOS_H 31 #define _SYS_TERMIOS_H 32 33 #pragma ident "%Z%%M% %I% %E% SMI" 34 35 #include <sys/feature_tests.h> 36 37 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 38 #include <sys/ttydev.h> 39 #include <sys/time.h> 40 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 41 42 #include <sys/types.h> 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 /* 49 * _POSIX_VDISABLE has been defined in <sys/termios.h> since the 50 * introduction of the header. The POSIX standard, IEEE Std. 51 * 1003.1-1988 also required the existence of _POSIX_VDISABLE in 52 * this header. Subsequent versions of the IEEE Standard as well 53 * as the X/Open specifications required that _POSIX_VDISABLE be 54 * defined in <unistd.h> while still allowing for it's existence 55 * here. With the introduction of XPG6, _POSIX_VDISABLE can only 56 * be defined in <unistd.h>. 57 */ 58 #if !defined(_XPG6) || defined(__EXTENSIONS__) 59 #ifndef _POSIX_VDISABLE 60 #define _POSIX_VDISABLE 0 /* Disable special character functions */ 61 #endif 62 #endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */ 63 64 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 65 #define CTRL(c) ((c)&037) 66 #define IBSHIFT 16 67 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 68 69 /* required by termio.h and VCEOF/VCEOL */ 70 #define _NCC 8 71 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 72 #define NCC _NCC 73 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 74 75 /* some defines required by POSIX */ 76 #define NCCS 19 77 78 /* 79 * types defined by POSIX. These are better off in types.h, but 80 * the standard says that they have to be in termios.h. 81 */ 82 typedef unsigned int tcflag_t; 83 typedef unsigned char cc_t; 84 typedef unsigned int speed_t; 85 86 /* 87 * Ioctl control packet 88 */ 89 struct termios { 90 tcflag_t c_iflag; /* input modes */ 91 tcflag_t c_oflag; /* output modes */ 92 tcflag_t c_cflag; /* control modes */ 93 tcflag_t c_lflag; /* line discipline modes */ 94 cc_t c_cc[NCCS]; /* control chars */ 95 }; 96 97 /* 98 * POSIX termios functions 99 * These functions get mapped into ioctls. 100 */ 101 102 #ifndef _KERNEL 103 104 #if defined(__STDC__) 105 106 extern speed_t cfgetospeed(const struct termios *); 107 extern int cfsetospeed(struct termios *, speed_t); 108 extern speed_t cfgetispeed(const struct termios *); 109 extern int cfsetispeed(struct termios *, speed_t); 110 extern int tcgetattr(int, struct termios *); 111 extern int tcsetattr(int, int, const struct termios *); 112 extern int tcsendbreak(int, int); 113 extern int tcdrain(int); 114 extern int tcflush(int, int); 115 extern int tcflow(int, int); 116 117 #else 118 119 extern speed_t cfgetospeed(); 120 extern int cfsetospeed(); 121 extern speed_t cfgetispeed(); 122 extern int cfsetispeed(); 123 extern int tcgetattr(); 124 extern int tcsetattr(); 125 extern int tcsendbreak(); 126 extern int tcdrain(); 127 extern int tcflush(); 128 extern int tcflow(); 129 130 #endif /* __STDC__ */ 131 132 #if !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) || defined(__EXTENSIONS__) 133 134 #if defined(__STDC__) 135 extern pid_t tcgetsid(int); 136 #else 137 extern pid_t tcgetsid(); 138 #endif /* __STDC__ */ 139 140 #endif /* !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) ... */ 141 142 #endif 143 144 /* control characters */ 145 #define VINTR 0 146 #define VQUIT 1 147 #define VERASE 2 148 #define VKILL 3 149 #define VEOF 4 150 #define VEOL 5 151 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 152 #define VEOL2 6 153 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 154 #define VMIN 4 155 #define VTIME 5 156 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 157 #define VSWTCH 7 158 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 159 #define VSTART 8 160 #define VSTOP 9 161 #define VSUSP 10 162 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 163 #define VDSUSP 11 164 #define VREPRINT 12 165 #define VDISCARD 13 166 #define VWERASE 14 167 #define VLNEXT 15 168 /* 16 thru 19 reserved for future use */ 169 170 /* 171 * control characters form Xenix termio.h 172 */ 173 #define VCEOF NCC /* RESERVED true EOF char (V7 compatability) */ 174 #define VCEOL (NCC + 1) /* RESERVED true EOL char */ 175 176 #define CNUL 0 177 #define CDEL 0177 178 179 /* S5 default control chars */ 180 /* CINTR, CERASE and CKILL modified to SunOS traditional values */ 181 #define CESC '\\' 182 #define CINTR CTRL('c') 183 #define CQUIT 034 /* FS, cntl | */ 184 #define CERASE 0177 /* DEL */ 185 #define CKILL CTRL('u') 186 #define CEOT 04 187 #define CEOL 0 188 #define CEOL2 0 189 #define CEOF 04 /* cntl d */ 190 #define CSTART 021 /* cntl q */ 191 #define CSTOP 023 /* cntl s */ 192 #define CSWTCH 032 /* cntl z */ 193 #define CNSWTCH 0 194 #define CSUSP CTRL('z') 195 #define CDSUSP CTRL('y') 196 #define CRPRNT CTRL('r') 197 #define CFLUSH CTRL('o') 198 #define CWERASE CTRL('w') 199 #define CLNEXT CTRL('v') 200 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 201 202 203 /* input modes */ 204 #define IGNBRK 0000001 205 #define BRKINT 0000002 206 #define IGNPAR 0000004 207 #define PARMRK 0000010 208 #define INPCK 0000020 209 #define ISTRIP 0000040 210 #define INLCR 0000100 211 #define IGNCR 0000200 212 #define ICRNL 0000400 213 #if !defined(_POSIX_C_SOURCE) || \ 214 (defined(_XOPEN_SOURCE) && !defined(_XPG6)) || \ 215 defined(__EXTENSIONS__) 216 #define IUCLC 0001000 217 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 218 #define IXON 0002000 219 #if !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 220 defined(__EXTENSIONS__) 221 #define IXANY 0004000 222 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 223 #define IXOFF 0010000 224 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 225 #define IMAXBEL 0020000 226 #define DOSMODE 0100000 /* for 386 compatibility */ 227 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 228 229 /* output modes */ 230 #define OPOST 0000001 231 #if !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 232 defined(__EXTENSIONS__) 233 #if !defined(_XPG6) || defined(__EXTENSIONS__) 234 #define OLCUC 0000002 235 #endif 236 #define ONLCR 0000004 237 #define OCRNL 0000010 238 #define ONOCR 0000020 239 #define ONLRET 0000040 240 #define OFILL 0000100 241 #define OFDEL 0000200 242 #define NLDLY 0000400 243 #define NL0 0 244 #define NL1 0000400 245 #define CRDLY 0003000 246 #define CR0 0 247 #define CR1 0001000 248 #define CR2 0002000 249 #define CR3 0003000 250 #define TABDLY 0014000 251 #define TAB0 0 252 #define TAB1 0004000 253 #define TAB2 0010000 254 #define TAB3 0014000 255 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 256 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 257 #define XTABS 0014000 258 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 259 #if !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 260 defined(__EXTENSIONS__) 261 #define BSDLY 0020000 262 #define BS0 0 263 #define BS1 0020000 264 #define VTDLY 0040000 265 #define VT0 0 266 #define VT1 0040000 267 #define FFDLY 0100000 268 #define FF0 0 269 #define FF1 0100000 270 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 271 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 272 #define PAGEOUT 0200000 273 #define WRAP 0400000 274 275 /* control modes */ 276 #define CBAUD 0000017 277 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 278 #define CSIZE 0000060 279 #define CS5 0 280 #define CS6 0000020 281 #define CS7 0000040 282 #define CS8 0000060 283 #define CSTOPB 0000100 284 #define CREAD 0000200 285 #define PARENB 0000400 286 #define PARODD 0001000 287 #define HUPCL 0002000 288 #define CLOCAL 0004000 289 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 290 #define RCV1EN 0010000 291 #define XMT1EN 0020000 292 #define LOBLK 0040000 293 #define XCLUDE 0100000 /* *V7* exclusive use coming fron XENIX */ 294 #define CRTSXOFF 010000000000 295 #define CRTSCTS 020000000000 296 #define CIBAUD 03600000 297 #define PAREXT 04000000 298 #define CBAUDEXT 010000000 299 #define CIBAUDEXT 020000000 300 301 /* 302 * 4.4BSD hardware flow control flags 303 */ 304 #define CRTS_IFLOW 010000000000 305 #define CCTS_OFLOW 020000000000 306 307 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 308 309 /* line discipline 0 modes */ 310 #define ISIG 0000001 311 #define ICANON 0000002 312 #if !defined(_POSIX_C_SOURCE) || \ 313 (defined(_XOPEN_SOURCE) && !defined(_XPG6)) || \ 314 defined(__EXTENSIONS__) 315 #define XCASE 0000004 316 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE)... */ 317 #define ECHO 0000010 318 #define ECHOE 0000020 319 #define ECHOK 0000040 320 #define ECHONL 0000100 321 #define NOFLSH 0000200 322 #define TOSTOP 0000400 323 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 324 #define ECHOCTL 0001000 325 #define ECHOPRT 0002000 326 #define ECHOKE 0004000 327 #define DEFECHO 0010000 328 #define FLUSHO 0020000 329 #define PENDIN 0040000 330 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 331 332 #define IEXTEN 0100000 /* POSIX flag - enable POSIX extensions */ 333 #define _TIOC ('T'<<8) 334 335 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 336 337 #define TIOC _TIOC 338 339 #define TCGETA (_TIOC|1) 340 #define TCSETA (_TIOC|2) 341 #define TCSETAW (_TIOC|3) 342 #define TCSETAF (_TIOC|4) 343 #define TCSBRK (_TIOC|5) 344 #define TCXONC (_TIOC|6) 345 #define TCFLSH (_TIOC|7) 346 347 /* Slots reserved for 386/XENIX compatibility - keyboard control */ 348 349 #define TIOCKBON (_TIOC|8) 350 #define TIOCKBOF (_TIOC|9) 351 #define KBENABLED (_TIOC|10) 352 353 #ifndef IOCTYPE 354 #define IOCTYPE 0xff00 355 #endif 356 357 #define TCDSET (_TIOC|32) 358 #define RTS_TOG (_TIOC|33) /* 386 - "RTS" toggle define 8A1 protocol */ 359 360 #define TIOCGWINSZ (_TIOC|104) 361 #define TIOCSWINSZ (_TIOC|103) 362 363 /* 364 * Softcarrier ioctls 365 */ 366 #define TIOCGSOFTCAR (_TIOC|105) 367 #define TIOCSSOFTCAR (_TIOC|106) 368 369 370 /* termios ioctls */ 371 372 #define TCGETS (_TIOC|13) 373 #define TCSETS (_TIOC|14) 374 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 375 #define TCSANOW (_TIOC|14) /* same as TCSETS */ 376 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 377 #define TCSETSW (_TIOC|15) 378 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 379 #define TCSADRAIN (_TIOC|15) /* same as TCSETSW */ 380 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 381 #define TCSETSF (_TIOC|16) 382 383 /* 384 * linux terminal ioctls we need to be aware of 385 */ 386 #define TIOCSETLD (_TIOC|123) /* set line discipline parms */ 387 #define TIOCGETLD (_TIOC|124) /* get line discipline parms */ 388 389 /* 390 * The VMIN and VTIME and solaris overlap with VEOF and VEOL - This is 391 * perfectly legal except, linux expects them to be separate. So we keep 392 * them separately. 393 */ 394 struct lx_cc { 395 unsigned char veof; /* veof value */ 396 unsigned char veol; /* veol value */ 397 unsigned char vmin; /* vmin value */ 398 unsigned char vtime; /* vtime value */ 399 }; 400 401 /* 402 * NTP PPS ioctls 403 */ 404 #define TIOCGPPS (_TIOC|125) 405 #define TIOCSPPS (_TIOC|126) 406 #define TIOCGPPSEV (_TIOC|127) 407 408 /* Argument filled in by TIOCGPPSEV */ 409 struct ppsclockev { 410 struct timeval tv; 411 uint_t serial; 412 }; 413 414 #if defined(_SYSCALL32) 415 struct ppsclockev32 { 416 struct timeval32 tv; 417 uint32_t serial; 418 }; 419 #endif /* _SYSCALL32 */ 420 421 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 422 423 #define TCSAFLUSH (_TIOC|16) /* same as TCSETSF */ 424 425 /* termios option flags */ 426 427 #define TCIFLUSH 0 /* flush data received but not read */ 428 #define TCOFLUSH 1 /* flush data written but not transmitted */ 429 #define TCIOFLUSH 2 /* flush both data both input and output queues */ 430 431 #define TCOOFF 0 /* suspend output */ 432 #define TCOON 1 /* restart suspended output */ 433 #define TCIOFF 2 /* suspend input */ 434 #define TCION 3 /* restart suspended input */ 435 436 /* TIOC ioctls for BSD, ptys, job control and modem control */ 437 438 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 439 #define tIOC ('t'<<8) 440 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 441 442 /* Slots for 386/XENIX compatibility */ 443 /* BSD includes these ioctls in ttold.h */ 444 445 #ifndef _SYS_TTOLD_H 446 447 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 448 #define TIOCGETD (tIOC|0) 449 #define TIOCSETD (tIOC|1) 450 #define TIOCHPCL (tIOC|2) 451 #define TIOCGETP (tIOC|8) 452 #define TIOCSETP (tIOC|9) 453 #define TIOCSETN (tIOC|10) 454 #define TIOCEXCL (tIOC|13) 455 #define TIOCNXCL (tIOC|14) 456 #define TIOCFLUSH (tIOC|16) 457 #define TIOCSETC (tIOC|17) 458 #define TIOCGETC (tIOC|18) 459 /* 460 * BSD ioctls that are not the same as XENIX are included here. 461 * There are also some relevant ioctls from SUN/BSD sys/ttycom.h 462 * BSD pty ioctls like TIOCPKT are not supported in SVR4. 463 */ 464 465 #define TIOCLBIS (tIOC|127) /* bis local mode bits */ 466 #define TIOCLBIC (tIOC|126) /* bic local mode bits */ 467 #define TIOCLSET (tIOC|125) /* set entire local mode word */ 468 #define TIOCLGET (tIOC|124) /* get local modes */ 469 #define TIOCSBRK (tIOC|123) /* set break bit */ 470 #define TIOCCBRK (tIOC|122) /* clear break bit */ 471 #define TIOCSDTR (tIOC|121) /* set data terminal ready */ 472 #define TIOCCDTR (tIOC|120) /* clear data terminal ready */ 473 #define TIOCSLTC (tIOC|117) /* set local special chars */ 474 #define TIOCGLTC (tIOC|116) /* get local special chars */ 475 #define TIOCOUTQ (tIOC|115) /* driver output queue size */ 476 #define TIOCNOTTY (tIOC|113) /* void tty association */ 477 #define TIOCSCTTY (tIOC|132) /* get a ctty */ 478 #define TIOCSTOP (tIOC|111) /* stop output, like ^S */ 479 #define TIOCSTART (tIOC|110) /* start output, like ^Q */ 480 #define TIOCSILOOP (tIOC|109) /* private to Sun; do not use */ 481 482 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 483 484 #endif /* end _SYS_TTOLD_H */ 485 486 /* POSIX job control ioctls */ 487 488 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 489 #define TIOCGPGRP (tIOC|20) /* get pgrp of tty */ 490 #define TIOCSPGRP (tIOC|21) /* set pgrp of tty */ 491 #define TIOCGSID (tIOC|22) /* get session id on ctty */ 492 493 /* Miscellaneous */ 494 #define TIOCSTI (tIOC|23) /* simulate terminal input */ 495 496 /* Modem control */ 497 #define TIOCMSET (tIOC|26) /* set all modem bits */ 498 #define TIOCMBIS (tIOC|27) /* bis modem bits */ 499 #define TIOCMBIC (tIOC|28) /* bic modem bits */ 500 #define TIOCMGET (tIOC|29) /* get all modem bits */ 501 #define TIOCM_LE 0001 /* line enable */ 502 #define TIOCM_DTR 0002 /* data terminal ready */ 503 #define TIOCM_RTS 0004 /* request to send */ 504 #define TIOCM_ST 0010 /* secondary transmit */ 505 #define TIOCM_SR 0020 /* secondary receive */ 506 #define TIOCM_CTS 0040 /* clear to send */ 507 #define TIOCM_CAR 0100 /* carrier detect */ 508 #define TIOCM_CD TIOCM_CAR 509 #define TIOCM_RNG 0200 /* ring */ 510 #define TIOCM_RI TIOCM_RNG 511 #define TIOCM_DSR 0400 /* data set ready */ 512 513 /* pseudo-tty */ 514 515 #define TIOCREMOTE (tIOC|30) /* remote input editing */ 516 #define TIOCSIGNAL (tIOC|31) /* pty: send signal to slave */ 517 518 519 /* Some more 386 xenix stuff */ 520 521 #define LDIOC ('D'<<8) 522 523 #define LDOPEN (LDIOC|0) 524 #define LDCLOSE (LDIOC|1) 525 #define LDCHG (LDIOC|2) 526 #define LDGETT (LDIOC|8) 527 #define LDSETT (LDIOC|9) 528 529 /* Slots for 386 compatibility */ 530 531 #define LDSMAP (LDIOC|110) 532 #define LDGMAP (LDIOC|111) 533 #define LDNMAP (LDIOC|112) 534 #define LDEMAP (LDIOC|113) 535 #define LDDMAP (LDIOC|114) 536 537 /* 538 * These are retained for 386/XENIX compatibility. 539 */ 540 541 #define DIOC ('d'<<8) 542 #define DIOCGETP (DIOC|8) /* V7 */ 543 #define DIOCSETP (DIOC|9) /* V7 */ 544 545 /* 546 * Returns a non-zero value if there 547 * are characters in the input queue. 548 * 549 * XXX - somebody is confused here. V7 had no such "ioctl", although XENIX may 550 * have added it; 4BSD had FIONREAD, which returned the number of characters 551 * waiting, and was supposed to work on all descriptors (i.e., every driver 552 * should make a stab at implementing it). 553 */ 554 #define FIORDCHK (('f'<<8)|3) /* V7 */ 555 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 556 557 /* 558 * Speeds 559 */ 560 #define B0 0 561 #define B50 1 562 #define B75 2 563 #define B110 3 564 #define B134 4 565 #define B150 5 566 #define B200 6 567 #define B300 7 568 #define B600 8 569 #define B1200 9 570 #define B1800 10 571 #define B2400 11 572 #define B4800 12 573 #define B9600 13 574 #define B19200 14 575 #define B38400 15 576 #define B57600 16 577 #define B76800 17 578 #define B115200 18 579 #define B153600 19 580 #define B230400 20 581 #define B307200 21 582 #define B460800 22 583 584 #ifndef _SYS_TTOLD_H 585 586 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) 587 /* Windowing structure to support JWINSIZE/TIOCSWINSZ/TIOCGWINSZ */ 588 struct winsize { 589 unsigned short ws_row; /* rows, in characters */ 590 unsigned short ws_col; /* columns, in character */ 591 unsigned short ws_xpixel; /* horizontal size, pixels */ 592 unsigned short ws_ypixel; /* vertical size, pixels */ 593 }; 594 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */ 595 596 #endif /* end _SYS_TTOLD_H */ 597 598 #ifdef __cplusplus 599 } 600 #endif 601 602 #endif /* _SYS_TERMIOS_H */ 603