BSD 4_3_Net_2 release
[unix-history] / usr / src / sys / sys / termios.h
index be69b34..649b9cd 100644 (file)
@@ -1,23 +1,43 @@
 /*
 /*
- * Copyright (c) 1982, 1986 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1988, 1989 The Regents of the University of California.
+ * All rights reserved.
  *
  *
- *     @(#)termios.h   7.2 (Berkeley) %G%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)termios.h   7.22 (Berkeley) 5/7/91
  */
 
 /*
  *  termios structure
  */
  */
 
 /*
  *  termios structure
  */
-#ifndef _TERMIOS_
-#define _TERMIOS_
-
-#ifdef KERNEL
-#include "ioctl.h"
-#else
-#include <sys/ioctl.h>
-#endif
-
+#ifndef _TERMIOS_H_
+#define _TERMIOS_H_
 
 /* 
  * Special Control Characters 
 
 /* 
  * Special Control Characters 
  */
 #define        VEOF            0       /* ICANON */
 #define        VEOL            1       /* ICANON */
  */
 #define        VEOF            0       /* ICANON */
 #define        VEOL            1       /* ICANON */
+#ifndef _POSIX_SOURCE
 #define        VEOL2           2       /* ICANON */
 #define        VEOL2           2       /* ICANON */
+#endif
 #define        VERASE          3       /* ICANON */
 #define        VERASE          3       /* ICANON */
-#define        VERASE2         18      /* ICANON */
+#ifndef _POSIX_SOURCE
 #define VWERASE        4       /* ICANON */
 #define VWERASE        4       /* ICANON */
+#endif 
 #define VKILL          5       /* ICANON */
 #define VKILL          5       /* ICANON */
+#ifndef _POSIX_SOURCE
 #define        VREPRINT        6       /* ICANON */
 #define        VREPRINT        6       /* ICANON */
-#define VQUOTE         7       /* ICANON */
+#endif
+/*                     7          spare 1 */
 #define VINTR          8       /* ISIG */
 #define VQUIT          9       /* ISIG */
 #define VSUSP          10      /* ISIG */
 #define VINTR          8       /* ISIG */
 #define VQUIT          9       /* ISIG */
 #define VSUSP          10      /* ISIG */
+#ifndef _POSIX_SOURCE
 #define VDSUSP         11      /* ISIG */
 #define VDSUSP         11      /* ISIG */
+#endif
 #define VSTART         12      /* IXON, IXOFF */
 #define VSTOP          13      /* IXON, IXOFF */
 #define VSTART         12      /* IXON, IXOFF */
 #define VSTOP          13      /* IXON, IXOFF */
+#ifndef _POSIX_SOURCE
 #define        VLNEXT          14      /* IEXTEN */
 #define        VLNEXT          14      /* IEXTEN */
-#define        VFLUSHO         15      /* IEXTEN */
-#define        VFLUSH          VFLUSHO /* for sun */
+#define        VDISCARD        15      /* IEXTEN */
+#endif
 #define VMIN           16      /* !ICANON */
 #define VTIME          17      /* !ICANON */
 #define VMIN           16      /* !ICANON */
 #define VTIME          17      /* !ICANON */
-
-#define        NCC             20      /* two spares */
+#ifndef _POSIX_SOURCE
+#define VSTATUS                18      /* ICANON */
+/*                     19         spare 2 */
+#define        NCCS            20
+#endif
 
 #define _POSIX_VDISABLE        ((unsigned char)'\377')
 
 
 #define _POSIX_VDISABLE        ((unsigned char)'\377')
 
+#ifndef _POSIX_SOURCE
+#define CCEQ(val, c)   (c == val ? val != _POSIX_VDISABLE : 0)
+#endif
+
 /*
  * Input flags - software input processing
  */
 /*
  * Input flags - software input processing
  */
 #define        BRKINT          0x00000002      /* map BREAK to SIGINTR */
 #define        IGNPAR          0x00000004      /* ignore (discard) parity errors */
 #define        PARMRK          0x00000008      /* mark parity and framing errors */
 #define        BRKINT          0x00000002      /* map BREAK to SIGINTR */
 #define        IGNPAR          0x00000004      /* ignore (discard) parity errors */
 #define        PARMRK          0x00000008      /* mark parity and framing errors */
-#define        INPCK           0x00000010      /* disable checking of parity errors */
+#define        INPCK           0x00000010      /* enable checking of parity errors */
 #define        ISTRIP          0x00000020      /* strip 8th bit off chars */
 #define        INLCR           0x00000040      /* map NL into CR */
 #define        IGNCR           0x00000080      /* ignore CR */
 #define        ICRNL           0x00000100      /* map CR to NL (ala CRMOD) */
 #define        IXON            0x00000200      /* enable output flow control */
 #define        ISTRIP          0x00000020      /* strip 8th bit off chars */
 #define        INLCR           0x00000040      /* map NL into CR */
 #define        IGNCR           0x00000080      /* ignore CR */
 #define        ICRNL           0x00000100      /* map CR to NL (ala CRMOD) */
 #define        IXON            0x00000200      /* enable output flow control */
-#define        IFLOW           IXON            /* "" */
 #define        IXOFF           0x00000400      /* enable input flow control */
 #define        IXOFF           0x00000400      /* enable input flow control */
-#define        ITANDEM         IXOFF           /* "" */
+#ifndef _POSIX_SOURCE
 #define        IXANY           0x00000800      /* any char will restart after stop */
 #define        IXANY           0x00000800      /* any char will restart after stop */
-#define        IEXTEN          0x00001000      /* enable FLUSHO and LNEXT */
 #define IMAXBEL                0x00002000      /* ring bell on input queue full */
 #define IMAXBEL                0x00002000      /* ring bell on input queue full */
+#endif  /*_POSIX_SOURCE */
 
 /*
  * Output flags - software output processing
  */
 #define        OPOST           0x00000001      /* enable following output processing */
 
 /*
  * Output flags - software output processing
  */
 #define        OPOST           0x00000001      /* enable following output processing */
+#ifndef _POSIX_SOURCE
 #define ONLCR          0x00000002      /* map NL to CR-NL (ala CRMOD) */
 #define ONLCR          0x00000002      /* map NL to CR-NL (ala CRMOD) */
-#define ONLCRNL                ONLCR
 #define OXTABS         0x00000004      /* expand tabs to spaces */
 #define ONOEOT         0x00000008      /* discard EOT's (^D) on output) */
 #define OXTABS         0x00000004      /* expand tabs to spaces */
 #define ONOEOT         0x00000008      /* discard EOT's (^D) on output) */
+#endif  /*_POSIX_SOURCE */
 
 /*
  * Control flags - hardware control of terminal
  */
 
 /*
  * Control flags - hardware control of terminal
  */
+#ifndef _POSIX_SOURCE
+#define        CIGNORE         0x00000001      /* ignore control flags */
+#endif
 #define CSIZE          0x00000300      /* character size mask */
 #define CSIZE          0x00000300      /* character size mask */
-#define     CS5                    0x00000000      /* 5 bits - pseudo */
+#define     CS5                    0x00000000      /* 5 bits (pseudo) */
 #define     CS6                    0x00000100      /* 6 bits */
 #define     CS7                    0x00000200      /* 7 bits */
 #define     CS8                    0x00000300      /* 8 bits */
 #define     CS6                    0x00000100      /* 6 bits */
 #define     CS7                    0x00000200      /* 7 bits */
 #define     CS8                    0x00000300      /* 8 bits */
 #define PARODD         0x00002000      /* odd parity, else even */
 #define HUPCL          0x00004000      /* hang up on last close */
 #define CLOCAL         0x00008000      /* ignore modem status lines */
 #define PARODD         0x00002000      /* odd parity, else even */
 #define HUPCL          0x00004000      /* hang up on last close */
 #define CLOCAL         0x00008000      /* ignore modem status lines */
-#define CRTSCTS                0x00010000      /* RTS/CTS flow control */
+#ifndef _POSIX_SOURCE
+#define CCTS_OFLOW     0x00010000      /* CTS flow control of output */
+#define CRTSCTS                CCTS_OFLOW      /* ??? */
+#define CRTS_IFLOW     0x00020000      /* RTS flow control of input */
+#define        MDMBUF          0x00100000      /* flow control output via Carrier */
+#endif
 
 
 /* 
 
 
 /* 
  *
  * Warning: some flags in this structure begin with
  * the letter "I" and look like they belong in the
  *
  * Warning: some flags in this structure begin with
  * the letter "I" and look like they belong in the
- * input flag.  Isn't history fun.
+ * input flag.
  */
 
  */
 
+#ifndef _POSIX_SOURCE
 #define        ECHOKE          0x00000001      /* visual erase for line kill */
 #define        ECHOKE          0x00000001      /* visual erase for line kill */
+#endif  /*_POSIX_SOURCE */
 #define        ECHOE           0x00000002      /* visually erase chars */
 #define        ECHOK           0x00000004      /* echo NL after line kill */
 #define        ECHOE           0x00000002      /* visually erase chars */
 #define        ECHOK           0x00000004      /* echo NL after line kill */
+#define ECHO           0x00000008      /* enable echoing */
 #define        ECHONL          0x00000010      /* echo NL even if ECHO is off */
 #define        ECHONL          0x00000010      /* echo NL even if ECHO is off */
+#ifndef _POSIX_SOURCE
 #define        ECHOPRT         0x00000020      /* visual erase mode for hardcopy */
 #define ECHOCTL        0x00000040      /* echo control chars as ^(Char) */
 #define        ECHOPRT         0x00000020      /* visual erase mode for hardcopy */
 #define ECHOCTL        0x00000040      /* echo control chars as ^(Char) */
+#endif  /*_POSIX_SOURCE */
 #define        ISIG            0x00000080      /* enable signals INTR, QUIT, [D]SUSP */
 #define        ICANON          0x00000100      /* canonicalize input lines */
 #define        ISIG            0x00000080      /* enable signals INTR, QUIT, [D]SUSP */
 #define        ICANON          0x00000100      /* canonicalize input lines */
+#ifndef _POSIX_SOURCE
 #define ALTWERASE      0x00000200      /* use alternate WERASE algorithm */
 #define ALTWERASE      0x00000200      /* use alternate WERASE algorithm */
-#ifdef notdef  /* XXX already defined in ioctl.h */
-#define ECHO           0x00000008      /* enable echoing */
-#define        MDMBUF          0x00100000      /* flow control output via Carrier */
+#endif  /*_POSIX_SOURCE */
+#define        IEXTEN          0x00000400      /* enable DISCARD and LNEXT */
+#define EXTPROC         0x00000800      /* external processing */
 #define TOSTOP         0x00400000      /* stop background jobs from output */
 #define TOSTOP         0x00400000      /* stop background jobs from output */
+#ifndef _POSIX_SOURCE
 #define FLUSHO         0x00800000      /* output being flushed (state) */
 #define FLUSHO         0x00800000      /* output being flushed (state) */
-#define        NOHANG          0x01000000      /* XXX this should go away */
-#define PENDIN         0x20000000      /* retype pending input (state) */
+#define        NOKERNINFO      0x02000000      /* no kernel output from VSTATUS */
+#define PENDIN         0x20000000      /* XXX retype pending input (state) */
+#endif  /*_POSIX_SOURCE */
 #define        NOFLSH          0x80000000      /* don't flush after interrupt */
 #define        NOFLSH          0x80000000      /* don't flush after interrupt */
-#endif /*notdef*/
+
+typedef unsigned long  tcflag_t;
+typedef unsigned char  cc_t;
+typedef long           speed_t;
 
 struct termios {
 
 struct termios {
-       unsigned long   c_iflag;        /* input flags */
-       unsigned long   c_oflag;        /* output flags */
-       unsigned long   c_cflag;        /* control flags */
-       unsigned long   c_lflag;        /* local flags */
-       unsigned char   c_cc[NCC];      /* control chars */
+       tcflag_t        c_iflag;        /* input flags */
+       tcflag_t        c_oflag;        /* output flags */
+       tcflag_t        c_cflag;        /* control flags */
+       tcflag_t        c_lflag;        /* local flags */
+       cc_t            c_cc[NCCS];     /* control chars */
        long            c_ispeed;       /* input speed */
        long            c_ospeed;       /* output speed */
 };
        long            c_ispeed;       /* input speed */
        long            c_ospeed;       /* output speed */
 };
@@ -139,18 +193,76 @@ struct termios {
  */
 #define        TCSANOW         0               /* make change immediate */
 #define        TCSADRAIN       1               /* drain output, then change */
  */
 #define        TCSANOW         0               /* make change immediate */
 #define        TCSADRAIN       1               /* drain output, then change */
-#define        TCSADFLUSH      2               /* drain output, flush input */
+#define        TCSAFLUSH       2               /* drain output, flush input */
+#ifndef _POSIX_SOURCE
+#define TCSASOFT       0x10            /* flag - don't alter h.w. state */
+#endif
+
 /*
 /*
- * TCSASOFT is a flag which can be or'ed in with a command.
- * If set, only the software processing flags in the termios 
- * structure are altered.  That is, the settings of the cflag and 
- * speeds are ignored.
+ * Standard speeds
  */
  */
-#define TCSASOFT       0x80000000      /* but ignore hardware settings */
+#define B0     0
+#define B50    50
+#define B75    75
+#define B110   110
+#define B134   134
+#define B150   150
+#define B200   200
+#define B300   300
+#define B600   600
+#define B1200  1200
+#define        B1800   1800
+#define B2400  2400
+#define B4800  4800
+#define B9600  9600
+#define B19200 19200
+#define B38400 38400
+#ifndef _POSIX_SOURCE
+#define EXTA   19200
+#define EXTB   38400
+#endif  /*_POSIX_SOURCE */
+
+#ifndef KERNEL
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+speed_t        cfgetispeed __P((const struct termios *));
+speed_t        cfgetospeed __P((const struct termios *));
+int    cfsetispeed __P((struct termios *, speed_t));
+int    cfsetospeed __P((struct termios *, speed_t));
+int    tcdrain __P((int));
+int    tcflow __P((int, int));
+int    tcflush __P((int, int));
+int    tcgetattr __P((int, struct termios *));
+int    tcsendbreak __P((int, int));
+int    tcsetattr __P((int, int, const struct termios *));
+
+#define        TCIFLUSH        1
+#define        TCOFLUSH        2
+#define TCIOFLUSH      3
+#define        TCOOFF          1
+#define        TCOON           2
+#define TCIOFF         3
+#define TCION          4
+
+#ifndef _POSIX_SOURCE
+void   cfmakeraw __P((struct termios *));
+void   cfsetspeed __P((struct termios *, speed_t));
+#endif /* !POSIX */
+__END_DECLS
+
+#endif /* !KERNEL */
 
 /*
 
 /*
- * Is c equal to control character val?
+ * END OF PROTECTED INCLUDE.
  */
  */
-#define CCEQ(val, c)   (c == val ? val != _POSIX_VDISABLE : 0)
+#endif /* !_TERMIOS_H_ */
 
 
-#endif _TERMIOS_
+#ifndef _POSIX_SOURCE
+#ifdef KERNEL
+#include "ttydefaults.h"
+#else
+#include <sys/ttydefaults.h>
+#endif
+#endif  /*_POSIX_SOURCE */