put redundant stuff in subroutines; add WILLRELE support
[unix-history] / usr / src / sys / kern / tty_compat.c
index 0de8362..719b423 100644 (file)
@@ -1,35 +1,30 @@
-/*
- * 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.4 (Berkeley) %G%
+ * %sccs.include.redist.c%
+ *
+ *     @(#)tty_compat.c        7.14 (Berkeley) %G%
  */
 
 /* 
  * mapping routines for old line discipline (yuck)
  */
  */
 
 /* 
  * mapping routines for old line discipline (yuck)
  */
-#ifdef COMPAT_43
+#if defined(COMPAT_43) || defined(COMPAT_SUNOS)
 
 #include "param.h"
 #include "systm.h"
 
 #include "param.h"
 #include "systm.h"
-#include "user.h"
 #include "ioctl.h"
 #include "ioctl.h"
+#include "proc.h"
 #include "tty.h"
 #include "termios.h"
 #include "tty.h"
 #include "termios.h"
-#include "proc.h"
 #include "file.h"
 #include "conf.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,
@@ -57,9 +52,12 @@ static int compatspcodes[16] = {
 /*ARGSUSED*/
 ttcompat(tp, com, data, flag)
        register struct tty *tp;
 /*ARGSUSED*/
 ttcompat(tp, com, data, flag)
        register struct tty *tp;
+       int com;
        caddr_t data;
        caddr_t data;
+       int flag;
 {
 {
-       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 +94,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));
@@ -135,7 +133,7 @@ ttcompat(tp, com, data, flag)
                cc[VSUSP] = ltc->t_suspc;
                cc[VDSUSP] = ltc->t_dsuspc;
                cc[VREPRINT] = ltc->t_rprntc;
                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;
                cc[VWERASE] = ltc->t_werasc;
                cc[VLNEXT] = ltc->t_lnextc;
                break;
@@ -147,7 +145,7 @@ ttcompat(tp, com, data, flag)
                ltc->t_suspc = cc[VSUSP];
                ltc->t_dsuspc = cc[VDSUSP];
                ltc->t_rprntc = cc[VREPRINT];
                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;
                ltc->t_werasc = cc[VWERASE];
                ltc->t_lnextc = cc[VLNEXT];
                break;
@@ -184,14 +182,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;
+               return (ttioctl(tp, TIOCCONS, data, flag));
 
        default:
                return (-1);
        }
 
        default:
                return (-1);
        }
-       return(0);
+       return (0);
 }
 
 ttcompatgetflags(tp)
 }
 
 ttcompatgetflags(tp)
@@ -264,7 +266,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
@@ -291,9 +293,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;
@@ -365,4 +370,4 @@ ttcompatsetlflags(tp, t)
        t->c_lflag = lflag;
        t->c_cflag = cflag;
 }
        t->c_lflag = lflag;
        t->c_cflag = cflag;
 }
-#endif /* COMPAT_43 */
+#endif /* COMPAT_43 || COMPAT_SUNOS */