File: /usr/include/sys/termios.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: /*
       2:  * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.
       3:  *
       4:  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
       5:  * 
       6:  * This file contains Original Code and/or Modifications of Original Code
       7:  * as defined in and that are subject to the Apple Public Source License
       8:  * Version 2.0 (the 'License'). You may not use this file except in
       9:  * compliance with the License. The rights granted to you under the License
      10:  * may not be used to create, or enable the creation or redistribution of,
      11:  * unlawful or unlicensed copies of an Apple operating system, or to
      12:  * circumvent, violate, or enable the circumvention or violation of, any
      13:  * terms of an Apple operating system software license agreement.
      14:  * 
      15:  * Please obtain a copy of the License at
      16:  * http://www.opensource.apple.com/apsl/ and read it before using this file.
      17:  * 
      18:  * The Original Code and all software distributed under the License are
      19:  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
      20:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
      21:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
      22:  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
      23:  * Please see the License for the specific language governing rights and
      24:  * limitations under the License.
      25:  * 
      26:  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
      27:  */
      28: /* Copyright (c) 1997 Apple Computer, Inc. All Rights Reserved */
      29: /*
      30:  * Copyright (c) 1988, 1989, 1993, 1994
      31:  *    The Regents of the University of California.  All rights reserved.
      32:  *
      33:  * Redistribution and use in source and binary forms, with or without
      34:  * modification, are permitted provided that the following conditions
      35:  * are met:
      36:  * 1. Redistributions of source code must retain the above copyright
      37:  *    notice, this list of conditions and the following disclaimer.
      38:  * 2. Redistributions in binary form must reproduce the above copyright
      39:  *    notice, this list of conditions and the following disclaimer in the
      40:  *    documentation and/or other materials provided with the distribution.
      41:  * 3. All advertising materials mentioning features or use of this software
      42:  *    must display the following acknowledgement:
      43:  *      This product includes software developed by the University of
      44:  *      California, Berkeley and its contributors.
      45:  * 4. Neither the name of the University nor the names of its contributors
      46:  *    may be used to endorse or promote products derived from this software
      47:  *    without specific prior written permission.
      48:  *
      49:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      50:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      51:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      52:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      53:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      54:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      55:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      56:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      57:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      58:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      59:  * SUCH DAMAGE.
      60:  *
      61:  *    @(#)termios.h    8.3 (Berkeley) 3/28/94
      62:  */
      63: 
      64: #ifndef _SYS_TERMIOS_H_
      65: #define _SYS_TERMIOS_H_
      66: 
      67: #include <sys/cdefs.h>
      68: 
      69: /*
      70:  * Special Control Characters
      71:  *
      72:  * Index into c_cc[] character array.
      73:  *
      74:  *    Name         Subscript    Enabled by
      75:  */
      76: #define    VEOF        0    /* ICANON */
      77: #define    VEOL        1    /* ICANON */
      78: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
      79: #define    VEOL2        2    /* ICANON together with IEXTEN */
      80: #endif
      81: #define    VERASE        3    /* ICANON */
      82: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
      83: #define VWERASE     4    /* ICANON together with IEXTEN */
      84: #endif
      85: #define VKILL        5    /* ICANON */
      86: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
      87: #define    VREPRINT     6    /* ICANON together with IEXTEN */
      88: #endif
      89: /*            7       spare 1 */
      90: #define VINTR        8    /* ISIG */
      91: #define VQUIT        9    /* ISIG */
      92: #define VSUSP        10    /* ISIG */
      93: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
      94: #define VDSUSP        11    /* ISIG together with IEXTEN */
      95: #endif
      96: #define VSTART        12    /* IXON, IXOFF */
      97: #define VSTOP        13    /* IXON, IXOFF */
      98: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
      99: #define    VLNEXT        14    /* IEXTEN */
     100: #define    VDISCARD    15    /* IEXTEN */
     101: #endif
     102: #define VMIN        16    /* !ICANON */
     103: #define VTIME        17    /* !ICANON */
     104: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     105: #define VSTATUS        18    /* ICANON together with IEXTEN */
     106: /*            19       spare 2 */
     107: #endif
     108: #define    NCCS        20
     109: 
     110: #include <sys/_types/_posix_vdisable.h>
     111: 
     112: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     113: #define    CCEQ(val, c)    ((c) == (val) ? (val) != _POSIX_VDISABLE : 0)
     114: #endif
     115: 
     116: /*
     117:  * Input flags - software input processing
     118:  */
     119: #define    IGNBRK        0x00000001    /* ignore BREAK condition */
     120: #define    BRKINT        0x00000002    /* map BREAK to SIGINTR */
     121: #define    IGNPAR        0x00000004    /* ignore (discard) parity errors */
     122: #define    PARMRK        0x00000008    /* mark parity and framing errors */
     123: #define    INPCK        0x00000010    /* enable checking of parity errors */
     124: #define    ISTRIP        0x00000020    /* strip 8th bit off chars */
     125: #define    INLCR        0x00000040    /* map NL into CR */
     126: #define    IGNCR        0x00000080    /* ignore CR */
     127: #define    ICRNL        0x00000100    /* map CR to NL (ala CRMOD) */
     128: #define    IXON        0x00000200    /* enable output flow control */
     129: #define    IXOFF        0x00000400    /* enable input flow control */
     130: #define    IXANY        0x00000800    /* any char will restart after stop */
     131: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     132: #define IMAXBEL        0x00002000    /* ring bell on input queue full */
     133: #define    IUTF8        0x00004000    /* maintain state for UTF-8 VERASE */
     134: #endif  /*(_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     135: 
     136: /*
     137:  * Output flags - software output processing
     138:  */
     139: #define    OPOST        0x00000001    /* enable following output processing */
     140: #define ONLCR        0x00000002    /* map NL to CR-NL (ala CRMOD) */
     141: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     142: #define OXTABS        0x00000004    /* expand tabs to spaces */
     143: #define ONOEOT        0x00000008    /* discard EOT's (^D) on output) */
     144: #endif  /*(_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     145: /*
     146:  * The following block of features is unimplemented.  Use of these flags in
     147:  * programs will currently result in unexpected behaviour.
     148:  *
     149:  * - Begin unimplemented features
     150:  */
     151: #define    OCRNL        0x00000010    /* map CR to NL on output */
     152: #define    ONOCR        0x00000020    /* no CR output at column 0 */
     153: #define    ONLRET        0x00000040    /* NL performs CR function */
     154: #define    OFILL        0x00000080    /* use fill characters for delay */
     155: #define    NLDLY        0x00000300    /* \n delay */
     156: #define    TABDLY        0x00000c04    /* horizontal tab delay */
     157: #define    CRDLY        0x00003000    /* \r delay */
     158: #define    FFDLY        0x00004000    /* form feed delay */
     159: #define    BSDLY        0x00008000    /* \b delay */
     160: #define    VTDLY        0x00010000    /* vertical tab delay */
     161: #define    OFDEL        0x00020000    /* fill is DEL, else NUL */
     162: #if !defined(_SYS_IOCTL_COMPAT_H_) || __DARWIN_UNIX03
     163: /*
     164:  * These manifest constants have the same names as those in the header
     165:  * <sys/ioctl_compat.h>, so you are not permitted to have both definitions
     166:  * in scope simultaneously in the same compilation unit.  Nevertheless,
     167:  * they are required to be in scope when _POSIX_C_SOURCE is requested;
     168:  * this means that including the <sys/ioctl_compat.h> header before this
     169:  * one when _POSIX_C_SOURCE is in scope will result in redefintions.  We
     170:  * attempt to maintain these as the same values so as to avoid this being
     171:  * an outright error in most compilers.
     172:  */
     173: #define        NL0    0x00000000
     174: #define        NL1    0x00000100
     175: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     176: #define        NL2    0x00000200
     177: #define        NL3    0x00000300
     178: #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     179: #define        TAB0    0x00000000
     180: #define        TAB1    0x00000400
     181: #define        TAB2    0x00000800
     182: /* not in sys/ioctl_compat.h, use OXTABS value */
     183: #define        TAB3    0x00000004
     184: #define        CR0    0x00000000
     185: #define        CR1    0x00001000
     186: #define        CR2    0x00002000
     187: #define        CR3    0x00003000
     188: #define        FF0    0x00000000
     189: #define        FF1    0x00004000
     190: #define        BS0    0x00000000
     191: #define        BS1    0x00008000
     192: #define        VT0    0x00000000
     193: #define        VT1    0x00010000
     194: #endif    /* !_SYS_IOCTL_COMPAT_H_ */
     195: /*
     196:  * + End unimplemented features
     197:  */
     198: 
     199: /*
     200:  * Control flags - hardware control of terminal
     201:  */
     202: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     203: #define    CIGNORE        0x00000001    /* ignore control flags */
     204: #endif
     205: #define CSIZE        0x00000300    /* character size mask */
     206: #define     CS5            0x00000000        /* 5 bits (pseudo) */
     207: #define     CS6            0x00000100        /* 6 bits */
     208: #define     CS7            0x00000200        /* 7 bits */
     209: #define     CS8            0x00000300        /* 8 bits */
     210: #define CSTOPB        0x00000400    /* send 2 stop bits */
     211: #define CREAD        0x00000800    /* enable receiver */
     212: #define PARENB        0x00001000    /* parity enable */
     213: #define PARODD        0x00002000    /* odd parity, else even */
     214: #define HUPCL        0x00004000    /* hang up on last close */
     215: #define CLOCAL        0x00008000    /* ignore modem status lines */
     216: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     217: #define CCTS_OFLOW    0x00010000    /* CTS flow control of output */
     218: #define CRTSCTS        (CCTS_OFLOW | CRTS_IFLOW)
     219: #define CRTS_IFLOW    0x00020000    /* RTS flow control of input */
     220: #define    CDTR_IFLOW    0x00040000    /* DTR flow control of input */
     221: #define CDSR_OFLOW    0x00080000    /* DSR flow control of output */
     222: #define    CCAR_OFLOW    0x00100000    /* DCD flow control of output */
     223: #define    MDMBUF        0x00100000    /* old name for CCAR_OFLOW */
     224: #endif
     225: 
     226: 
     227: /*
     228:  * "Local" flags - dumping ground for other state
     229:  *
     230:  * Warning: some flags in this structure begin with
     231:  * the letter "I" and look like they belong in the
     232:  * input flag.
     233:  */
     234: 
     235: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     236: #define    ECHOKE        0x00000001    /* visual erase for line kill */
     237: #endif  /*(_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     238: #define    ECHOE        0x00000002    /* visually erase chars */
     239: #define    ECHOK        0x00000004    /* echo NL after line kill */
     240: #define ECHO        0x00000008    /* enable echoing */
     241: #define    ECHONL        0x00000010    /* echo NL even if ECHO is off */
     242: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     243: #define    ECHOPRT        0x00000020    /* visual erase mode for hardcopy */
     244: #define ECHOCTL      0x00000040    /* echo control chars as ^(Char) */
     245: #endif  /*(_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     246: #define    ISIG        0x00000080    /* enable signals INTR, QUIT, [D]SUSP */
     247: #define    ICANON        0x00000100    /* canonicalize input lines */
     248: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     249: #define ALTWERASE    0x00000200    /* use alternate WERASE algorithm */
     250: #endif  /*(_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     251: #define    IEXTEN        0x00000400    /* enable DISCARD and LNEXT */
     252: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     253: #define EXTPROC         0x00000800      /* external processing */
     254: #endif  /*(_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     255: #define TOSTOP        0x00400000    /* stop background jobs from output */
     256: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     257: #define FLUSHO        0x00800000    /* output being flushed (state) */
     258: #define    NOKERNINFO    0x02000000    /* no kernel output from VSTATUS */
     259: #define PENDIN        0x20000000    /* XXX retype pending input (state) */
     260: #endif  /*(_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
     261: #define    NOFLSH        0x80000000    /* don't flush after interrupt */
     262: 
     263: typedef unsigned long    tcflag_t;
     264: typedef unsigned char    cc_t;
     265: typedef unsigned long    speed_t;
     266: 
     267: struct termios {
     268:     tcflag_t    c_iflag;    /* input flags */
     269:     tcflag_t    c_oflag;    /* output flags */
     270:     tcflag_t    c_cflag;    /* control flags */
     271:     tcflag_t    c_lflag;    /* local flags */
     272:     cc_t        c_cc[NCCS];    /* control chars */
     273:     speed_t        c_ispeed;    /* input speed */
     274:     speed_t        c_ospeed;    /* output speed */
     275: };
     276: 
     277: 
     278: /*
     279:  * Commands passed to tcsetattr() for setting the termios structure.
     280:  */
     281: #define    TCSANOW        0        /* make change immediate */
     282: #define    TCSADRAIN    1        /* drain output, then change */
     283: #define    TCSAFLUSH    2        /* drain output, flush input */
     284: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     285: #define TCSASOFT    0x10        /* flag - don't alter h.w. state */
     286: #endif
     287: 
     288: /*
     289:  * Standard speeds
     290:  */
     291: #define B0    0
     292: #define B50    50
     293: #define B75    75
     294: #define B110    110
     295: #define B134    134
     296: #define B150    150
     297: #define B200    200
     298: #define B300    300
     299: #define B600    600
     300: #define B1200    1200
     301: #define    B1800    1800
     302: #define B2400    2400
     303: #define B4800    4800
     304: #define B9600    9600
     305: #define B19200    19200
     306: #define B38400    38400
     307: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     308: #define B7200    7200
     309: #define B14400    14400
     310: #define B28800    28800
     311: #define B57600    57600
     312: #define B76800    76800
     313: #define B115200    115200
     314: #define B230400    230400
     315: #define EXTA    19200
     316: #define EXTB    38400
     317: #endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
     318: 
     319: 
     320: #define    TCIFLUSH    1
     321: #define    TCOFLUSH    2
     322: #define TCIOFLUSH    3
     323: #define    TCOOFF        1
     324: #define    TCOON        2
     325: #define TCIOFF        3
     326: #define TCION        4
     327: 
     328: #include <sys/cdefs.h>
     329: 
     330: __BEGIN_DECLS
     331: speed_t    cfgetispeed(const struct termios *);
     332: speed_t    cfgetospeed(const struct termios *);
     333: int    cfsetispeed(struct termios *, speed_t);
     334: int    cfsetospeed(struct termios *, speed_t);
     335: int    tcgetattr(int, struct termios *);
     336: int    tcsetattr(int, int, const struct termios *);
     337: int    tcdrain(int) __DARWIN_ALIAS_C(tcdrain);
     338: int    tcflow(int, int);
     339: int    tcflush(int, int);
     340: int    tcsendbreak(int, int);
     341: 
     342: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     343: void    cfmakeraw(struct termios *);
     344: int    cfsetspeed(struct termios *, speed_t);
     345: #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
     346: __END_DECLS
     347: 
     348: 
     349: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     350: 
     351: /*
     352:  * Include tty ioctl's that aren't just for backwards compatibility
     353:  * with the old tty driver.  These ioctl definitions were previously
     354:  * in <sys/ioctl.h>.
     355:  */
     356: #include <sys/ttycom.h>
     357: #endif
     358: 
     359: /*
     360:  * END OF PROTECTED INCLUDE.
     361:  */
     362: #endif /* !_SYS_TERMIOS_H_ */
     363: 
     364: #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
     365: #include <sys/ttydefaults.h>
     366: #endif
     367: