X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/cfe9768e2d2057fd7a3b9c84e8b3f634ec8cfca7..af359dea2e5ab3e937b62107ecd6a51d78189ed7:/usr/src/sys/kern/tty_compat.c diff --git a/usr/src/sys/kern/tty_compat.c b/usr/src/sys/kern/tty_compat.c index 6503d8933d..9bfd6cd92f 100644 --- a/usr/src/sys/kern/tty_compat.c +++ b/usr/src/sys/kern/tty_compat.c @@ -1,9 +1,36 @@ -/* - * 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) 1982, 1986, 1991 The Regents of the University of California. + * All rights reserved. * - * @(#)tty_compat.c 1.4 (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. + * + * @(#)tty_compat.c 7.10 (Berkeley) 5/9/91 */ /* @@ -13,7 +40,6 @@ #include "param.h" #include "systm.h" -#include "user.h" #include "ioctl.h" #include "tty.h" #include "termios.h" @@ -21,15 +47,11 @@ #include "file.h" #include "conf.h" #include "dkstat.h" -#include "uio.h" #include "kernel.h" #include "syslog.h" -#include "machine/reg.h" - int ttydebug = 0; -/* XXX - fold these two tables into one */ static struct speedtab compatspeeds[] = { 38400, 15, 19200, 14, @@ -59,7 +81,8 @@ ttcompat(tp, com, data, flag) register struct tty *tp; caddr_t data; { - switch(com) { + + switch (com) { case TIOCGETP: { register struct sgttyb *sg = (struct sgttyb *)data; register u_char *cc = tp->t_cc; @@ -96,9 +119,7 @@ ttcompat(tp, com, data, flag) term.c_ospeed = compatspcodes[speed]; term.c_cc[VERASE] = sg->sg_erase; term.c_cc[VKILL] = sg->sg_kill; - if (sg->sg_erase == -1) - term.c_cc[VERASE2] = _POSIX_VDISABLE; - tp->t_flags = (tp->t_flags&0xffff0000) | sg->sg_flags; + tp->t_flags = tp->t_flags&0xffff0000 | sg->sg_flags&0xffff; ttcompatsetflags(tp, &term); return (ttioctl(tp, com == TIOCSETP ? TIOCSETAF : TIOCSETA, &term, flag)); @@ -137,7 +158,7 @@ ttcompat(tp, com, data, flag) cc[VSUSP] = ltc->t_suspc; cc[VDSUSP] = ltc->t_dsuspc; cc[VREPRINT] = ltc->t_rprntc; - cc[VFLUSHO] = ltc->t_flushc; + cc[VDISCARD] = ltc->t_flushc; cc[VWERASE] = ltc->t_werasc; cc[VLNEXT] = ltc->t_lnextc; break; @@ -149,7 +170,7 @@ ttcompat(tp, com, data, flag) ltc->t_suspc = cc[VSUSP]; ltc->t_dsuspc = cc[VDSUSP]; ltc->t_rprntc = cc[VREPRINT]; - ltc->t_flushc = cc[VFLUSHO]; + ltc->t_flushc = cc[VDISCARD]; ltc->t_werasc = cc[VWERASE]; ltc->t_lnextc = cc[VLNEXT]; break; @@ -179,21 +200,25 @@ ttcompat(tp, com, data, flag) printf("CLGET: returning %x\n", *(int *)data); break; - case TIOCGETDCOMPAT: + case OTIOCGETD: *(int *)data = tp->t_line ? tp->t_line : 2; break; - case TIOCSETDCOMPAT: { + case OTIOCSETD: { int ldisczero = 0; - return(ttioctl(tp, TIOCSETD, + return (ttioctl(tp, TIOCSETD, *(int *)data == 2 ? (caddr_t)&ldisczero : data, flag)); - } + } + + case OTIOCCONS: + *(int *)data = 1; + return (ttioctl(tp, TIOCCONS, data, flag)); default: return (-1); } - return(0); + return (0); } ttcompatgetflags(tp) @@ -262,11 +287,11 @@ ttcompatsetflags(tp, t) if (flags & RAW) { iflag &= IXOFF; oflag &= ~OPOST; - lflag &= ~(ECHOCTL|ISIG|ICANON); + lflag &= ~(ECHOCTL|ISIG|ICANON|IEXTEN); } else { - iflag |= BRKINT|IXON|IEXTEN|IMAXBEL; + iflag |= BRKINT|IXON|IMAXBEL; oflag |= OPOST; - lflag |= ISIG; + lflag |= ISIG|IEXTEN|ECHOCTL; /* XXX was echoctl on ? */ if (flags & XTABS) oflag |= OXTABS; else @@ -293,9 +318,12 @@ ttcompatsetflags(tp, t) cflag |= CS8; if ((flags&(RAW|PASS8)) == 0) iflag |= ISTRIP; + else + iflag &= ~ISTRIP; } else { cflag &= ~CSIZE; cflag |= CS7|PARENB; + iflag |= ISTRIP; } if ((flags&(EVENP|ODDP)) == EVENP) { iflag |= INPCK;