BSD 4_3_Net_2 release
[unix-history] / usr / src / sys / kern / tty_compat.c
index 8eeb327..9bfd6cd 100644 (file)
@@ -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 "param.h"
 #include "systm.h"
-#include "user.h"
 #include "ioctl.h"
 #include "tty.h"
 #include "termios.h"
 #include "ioctl.h"
 #include "tty.h"
 #include "termios.h"
 #include "file.h"
 #include "conf.h"
 #include "dkstat.h"
 #include "file.h"
 #include "conf.h"
 #include "dkstat.h"
-#include "uio.h"
 #include "kernel.h"
 #include "syslog.h"
 
 #include "kernel.h"
 #include "syslog.h"
 
-#include "machine/reg.h"
-
 int ttydebug = 0;
 
 int ttydebug = 0;
 
-/* XXX - fold these two tables into one */
 static struct speedtab compatspeeds[] = {
        38400,  15,
        19200,  14,
 static struct speedtab compatspeeds[] = {
        38400,  15,
        19200,  14,
@@ -59,7 +81,8 @@ ttcompat(tp, com, data, flag)
        register struct tty *tp;
        caddr_t data;
 {
        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;
        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;
                        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));
                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;
 
        case OTIOCSETD: {
                int ldisczero = 0;
 
-               return(ttioctl(tp, TIOCSETD, 
+               return (ttioctl(tp, TIOCSETD, 
                        *(int *)data == 2 ? (caddr_t)&ldisczero : data, flag));
                        *(int *)data == 2 ? (caddr_t)&ldisczero : data, flag));
+           }
 
        case OTIOCCONS:
                *(int *)data = 1;
 
        case OTIOCCONS:
                *(int *)data = 1;
-               return(ttioctl(tp, TIOCCONS, data, flag));
-       }
+               return (ttioctl(tp, TIOCCONS, data, flag));
 
        default:
                return (-1);
        }
 
        default:
                return (-1);
        }
-       return(0);
+       return (0);
 }
 
 ttcompatgetflags(tp)
 }
 
 ttcompatgetflags(tp)
@@ -268,7 +291,7 @@ ttcompatsetflags(tp, t)
        } else {
                iflag |= BRKINT|IXON|IMAXBEL;
                oflag |= OPOST;
        } else {
                iflag |= BRKINT|IXON|IMAXBEL;
                oflag |= OPOST;
-               lflag |= ISIG|IEXTEN;
+               lflag |= ISIG|IEXTEN|ECHOCTL;   /* XXX was echoctl on ? */
                if (flags & XTABS)
                        oflag |= OXTABS;
                else
                if (flags & XTABS)
                        oflag |= OXTABS;
                else
@@ -295,9 +318,12 @@ ttcompatsetflags(tp, t)
                cflag |= CS8;
                if ((flags&(RAW|PASS8)) == 0)
                        iflag |= ISTRIP;
                cflag |= CS8;
                if ((flags&(RAW|PASS8)) == 0)
                        iflag |= ISTRIP;
+               else
+                       iflag &= ~ISTRIP;
        } else {
                cflag &= ~CSIZE;
                cflag |= CS7|PARENB;
        } else {
                cflag &= ~CSIZE;
                cflag |= CS7|PARENB;
+               iflag |= ISTRIP;
        }
        if ((flags&(EVENP|ODDP)) == EVENP) {
                iflag |= INPCK;
        }
        if ((flags&(EVENP|ODDP)) == EVENP) {
                iflag |= INPCK;