X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/1c15e88899094343f75aeba04122cd96a96b428e..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 8eeb327b3b..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 7.6 (Berkeley) 6/14/90 + * 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,7 +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; - 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)); @@ -184,18 +207,18 @@ ttcompat(tp, com, data, flag) 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)); - } + return (ttioctl(tp, TIOCCONS, data, flag)); default: return (-1); } - return(0); + return (0); } ttcompatgetflags(tp) @@ -268,7 +291,7 @@ ttcompatsetflags(tp, t) } else { iflag |= BRKINT|IXON|IMAXBEL; oflag |= OPOST; - lflag |= ISIG|IEXTEN; + lflag |= ISIG|IEXTEN|ECHOCTL; /* XXX was echoctl on ? */ if (flags & XTABS) oflag |= OXTABS; else @@ -295,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;