]> Zhao Yanbai Git Server - minix.git/commitdiff
drop <minix/termios.h>, use clean <sys/termios.h>
authorBen Gras <ben@minix3.org>
Tue, 10 Sep 2013 21:36:48 +0000 (21:36 +0000)
committerLionel Sambuc <lionel@minix3.org>
Sun, 2 Mar 2014 11:28:20 +0000 (12:28 +0100)
. also implement some netbsd-style tty ioctls
. also implement SIGINFO
. also import netbsd stty
. rename keymap minix CMIN (for ctrl+minus on numeric keypad)
  to CNMIN; to keep unchanged control character default CMIN in
  new <sys/ttydefaults.h>
. convert CS[5678] logic in rs232 driver to explicit setting of LC
  bits

Change-Id: I9b7d2963fe9aec00fb6e7535ef565b3191fc1c1d

69 files changed:
bin/Makefile
bin/stty/Makefile [new file with mode: 0644]
bin/stty/cchar.c [new file with mode: 0644]
bin/stty/extern.h [new file with mode: 0644]
bin/stty/gfmt.c [new file with mode: 0644]
bin/stty/key.c [new file with mode: 0644]
bin/stty/modes.c [new file with mode: 0644]
bin/stty/print.c [new file with mode: 0644]
bin/stty/stty.1 [new file with mode: 0644]
bin/stty/stty.c [new file with mode: 0644]
bin/stty/stty.h [new file with mode: 0644]
commands/Makefile
commands/stty/Makefile [deleted file]
commands/stty/stty.c [deleted file]
distrib/sets/lists/minix/mi
drivers/tty/arch/earm/console.c
drivers/tty/arch/earm/keyboard.c
drivers/tty/arch/earm/rs232.c
drivers/tty/arch/i386/console.c
drivers/tty/arch/i386/keyboard.c
drivers/tty/arch/i386/rs232.c
drivers/tty/keymaps/abnt2.src
drivers/tty/keymaps/dvorak.src
drivers/tty/keymaps/french.src
drivers/tty/keymaps/german.src
drivers/tty/keymaps/italian.src
drivers/tty/keymaps/japanese.src
drivers/tty/keymaps/norwegian.src
drivers/tty/keymaps/polish.src
drivers/tty/keymaps/portuguese.src
drivers/tty/keymaps/russian-cp1251.src
drivers/tty/keymaps/russian-cp866.src
drivers/tty/keymaps/russian.src
drivers/tty/keymaps/scandinavian.src
drivers/tty/keymaps/spanish.src
drivers/tty/keymaps/uk.src
drivers/tty/keymaps/ukraine-koi8-u.src
drivers/tty/keymaps/us-std.src
drivers/tty/keymaps/us-swap.src
drivers/tty/pty.c
drivers/tty/tty.c
drivers/tty/tty.h
external/bsd/kyua-cli/dist/utils/cmdline/ui.hpp
include/minix/Makefile
include/minix/keymap.h
include/minix/termios.h [deleted file]
include/sys/Makefile
include/sys/ioc_tty.h [deleted file]
lib/libc/termios/tcflow.c
lib/libc/termios/tcflush.c
lib/libc/termios/tcsendbreak.c
lib/libc/termios/tcsetattr.c
lib/libedit/terminal.c
man/man1/Makefile
man/man1/stty.1 [deleted file]
releasetools/nbsd_ports
sbin/newfs_ext2fs/mke2fs.c
servers/pm/main.c
servers/pm/signal.c
servers/vfs/device.c
sys/sys/fcntl.h
sys/sys/ioctl.h
sys/sys/signal.h
sys/sys/termios.h
sys/sys/ttycom.h
sys/sys/ttydefaults.h
usr.bin/infocmp/infocmp.c
usr.bin/sed/process.c
usr.bin/top/top.c

index 1d2a3c8a274c8c126852e1d4117a45f32bb6dec4..94699f4562de10e89674ca42a3fd09e3577d4468 100644 (file)
@@ -2,6 +2,6 @@
 #      @(#)Makefile    8.1 (Berkeley) 5/31/93
 
 SUBDIR=        cat date df echo ed expr kill ksh ln ls \
-       mkdir pax pwd rm rmdir sync test
+       mkdir pax pwd rm rmdir sync test stty
 
 .include <bsd.subdir.mk>
diff --git a/bin/stty/Makefile b/bin/stty/Makefile
new file mode 100644 (file)
index 0000000..546ee3f
--- /dev/null
@@ -0,0 +1,9 @@
+#      $NetBSD: Makefile,v 1.11 2012/04/04 10:59:44 joerg Exp $
+#      @(#)Makefile    8.1 (Berkeley) 5/31/93
+
+PROG=  stty
+SRCS=  cchar.c gfmt.c key.c modes.c print.c stty.c
+
+CWARNFLAGS.clang+=     -Wno-string-plus-int
+
+.include <bsd.prog.mk>
diff --git a/bin/stty/cchar.c b/bin/stty/cchar.c
new file mode 100644 (file)
index 0000000..ad88c76
--- /dev/null
@@ -0,0 +1,148 @@
+/* $NetBSD: cchar.c,v 1.16 2006/10/16 00:37:55 christos Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)cchar.c    8.5 (Berkeley) 4/2/94";
+#else
+__RCSID("$NetBSD: cchar.c,v 1.16 2006/10/16 00:37:55 christos Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/types.h>
+
+#include <err.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "stty.h"
+#include "extern.h"
+
+/*
+ * Special control characters.
+ *
+ * Cchars1 are the standard names, cchars2 are the old aliases.
+ * The first are displayed, but both are recognized on the
+ * command line.
+ */
+const struct cchar cchars1[] = {
+       { "discard",    VDISCARD,       CDISCARD },
+       { "dsusp",      VDSUSP,         CDSUSP },
+       { "eof",        VEOF,           CEOF },
+       { "eol",        VEOL,           CEOL },
+       { "eol2",       VEOL2,          CEOL },
+       { "erase",      VERASE,         CERASE },
+       { "intr",       VINTR,          CINTR },
+       { "kill",       VKILL,          CKILL },
+       { "lnext",      VLNEXT,         CLNEXT },
+       { "min",        VMIN,           CMIN },
+       { "quit",       VQUIT,          CQUIT },
+       { "reprint",    VREPRINT,       CREPRINT },
+       { "start",      VSTART,         CSTART },
+       { "status",     VSTATUS,        CSTATUS },
+       { "stop",       VSTOP,          CSTOP },
+       { "susp",       VSUSP,          CSUSP },
+       { "time",       VTIME,          CTIME },
+       { "werase",     VWERASE,        CWERASE },
+       { .name = NULL },
+};
+
+const struct cchar cchars2[] = {
+       { "brk",        VEOL,           CEOL },
+       { "flush",      VDISCARD,       CDISCARD },
+       { "rprnt",      VREPRINT,       CREPRINT },
+       { .name = NULL },
+};
+
+static int c_cchar(const void *, const void *);
+
+static int
+c_cchar(const void *a, const void *b)
+{
+        return (strcmp(((const struct cchar *)a)->name,
+           ((const struct cchar *)b)->name));
+}
+
+int
+csearch(char ***argvp, struct info *ip)
+{
+       struct cchar *cp, tmp;
+       long val;
+       char *arg, *ep, *name;
+               
+       name = **argvp;
+
+       tmp.name = name;
+       if (!(cp = (struct cchar *)bsearch(&tmp, cchars1,
+           sizeof(cchars1)/sizeof(cchars1[0]) - 1, sizeof(cchars1[0]),
+           c_cchar)) &&
+           !(cp = (struct cchar *)bsearch(&tmp, cchars2,
+           sizeof(cchars2)/sizeof(cchars2[0]) - 1, sizeof(cchars2[0]),
+           c_cchar)))
+               return (0);
+
+       arg = *++*argvp;
+       if (!arg) {
+               warnx("option requires an argument -- %s", name);
+               usage();
+       }
+
+#define CHK(s)  (*arg == s[0] && !strcmp(arg, s))
+       if (CHK("undef") || CHK("<undef>"))
+               ip->t.c_cc[cp->sub] = _POSIX_VDISABLE;
+       else if (cp->sub == VMIN || cp->sub == VTIME) {
+               val = strtol(arg, &ep, 10);
+               if (val == _POSIX_VDISABLE) {
+                       warnx("value of %ld would disable the option -- %s",
+                           val, name);
+                       usage();
+               }
+               if (val > UCHAR_MAX) {
+                       warnx("maximum option value is %d -- %s",
+                           UCHAR_MAX, name);
+                       usage();
+               }
+               if (*ep != '\0') {
+                       warnx("option requires a numeric argument -- %s", name);
+                       usage();
+               }
+               ip->t.c_cc[cp->sub] = (cc_t)val;
+       } else if (arg[0] == '^')
+               ip->t.c_cc[cp->sub] = (arg[1] == '?') ? 0177 :
+                   (arg[1] == '-') ? _POSIX_VDISABLE : arg[1] & 037;
+       else
+               ip->t.c_cc[cp->sub] = arg[0];
+       ip->set = 1;
+       return (1);
+}
diff --git a/bin/stty/extern.h b/bin/stty/extern.h
new file mode 100644 (file)
index 0000000..c26916c
--- /dev/null
@@ -0,0 +1,51 @@
+/* $NetBSD: extern.h,v 1.12 2011/08/29 14:51:19 joerg Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ *
+ *     @(#)extern.h    8.1 (Berkeley) 5/31/93
+ */
+
+#ifndef _EXTERN_H_
+#define _EXTERN_H_
+
+int    c_cchars(const void *, const void *);
+int    c_modes(const void *, const void *);
+int    csearch(char ***, struct info *);
+void   checkredirect(void);
+void   gprint(struct termios *);
+void   gread(struct termios *, char *);
+int    ksearch(char ***, struct info *);
+int    msearch(char ***, struct info *);
+void   optlist(void);
+void   print(struct termios *, struct winsize *, int, enum FMT);
+__dead void    usage(void);
+
+extern const struct cchar cchars1[], cchars2[];
+
+#endif /* !_EXTERN_H_ */
diff --git a/bin/stty/gfmt.c b/bin/stty/gfmt.c
new file mode 100644 (file)
index 0000000..55ec0c2
--- /dev/null
@@ -0,0 +1,132 @@
+/* $NetBSD: gfmt.c,v 1.17 2011/08/29 14:51:19 joerg Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)gfmt.c     8.6 (Berkeley) 4/2/94";
+#else
+__RCSID("$NetBSD: gfmt.c,v 1.17 2011/08/29 14:51:19 joerg Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/param.h>
+
+#include <err.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "stty.h"
+#include "extern.h"
+
+__dead static void gerr(char *);
+
+static void
+gerr(char *s)
+{
+       if (s)
+               errx(1, "illegal gfmt1 option -- %s", s);
+       else
+               errx(1, "illegal gfmt1 option");
+}
+
+void
+gprint(struct termios *tp)
+{
+       const struct cchar *cp;
+
+       (void)printf("gfmt1:cflag=%x:iflag=%x:lflag=%x:oflag=%x:",
+           tp->c_cflag, tp->c_iflag, tp->c_lflag, tp->c_oflag);
+       for (cp = cchars1; cp->name; ++cp)
+               (void)printf("%s=%x:", cp->name, tp->c_cc[cp->sub]);
+       (void)printf("ispeed=%d:ospeed=%d\n", cfgetispeed(tp), cfgetospeed(tp));
+}
+
+void
+gread(struct termios *tp, char *s) 
+{
+       const struct cchar *cp;
+       char *ep, *p;
+       long tmp;
+
+       if ((s = strchr(s, ':')) == NULL)
+               gerr(NULL);
+       for (++s; s != NULL;) {
+               p = strsep(&s, ":\0");
+               if (!p || !*p)
+                       break;
+               if (!(ep = strchr(p, '=')))
+                       gerr(p);
+               *ep++ = '\0';
+               (void)sscanf(ep, "%lx", &tmp);
+
+#define        CHK(s)  (*p == s[0] && !strcmp(p, s))
+               if (CHK("cflag")) {
+                       tp->c_cflag = tmp;
+                       continue;
+               }
+               if (CHK("iflag")) {
+                       tp->c_iflag = tmp;
+                       continue;
+               }
+#ifdef BSD4_4
+               if (CHK("ispeed")) {
+                       (void)sscanf(ep, "%ld", &tmp);
+                       tp->c_ispeed = tmp;
+                       continue;
+               }
+#endif
+               if (CHK("lflag")) {
+                       tp->c_lflag = tmp;
+                       continue;
+               }
+               if (CHK("oflag")) {
+                       tp->c_oflag = tmp;
+                       continue;
+               }
+#ifdef BSD4_4
+               if (CHK("ospeed")) {
+                       (void)sscanf(ep, "%ld", &tmp);
+                       tp->c_ospeed = tmp;
+                       continue;
+               }
+#endif
+               for (cp = cchars1; cp->name != NULL; ++cp)
+                       if (CHK(cp->name)) {
+                               if (cp->sub == VMIN || cp->sub == VTIME)
+                                       (void)sscanf(ep, "%ld", &tmp);
+                               tp->c_cc[cp->sub] = tmp;
+                               break;
+                       }
+               if (cp->name == NULL)
+                       gerr(p);
+       }
+}
diff --git a/bin/stty/key.c b/bin/stty/key.c
new file mode 100644 (file)
index 0000000..bf24c21
--- /dev/null
@@ -0,0 +1,339 @@
+/* $NetBSD: key.c,v 1.20 2004/04/01 16:10:03 tsarna Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)key.c      8.4 (Berkeley) 2/20/95";
+#else
+__RCSID("$NetBSD: key.c,v 1.20 2004/04/01 16:10:03 tsarna Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/types.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <paths.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "stty.h"
+#include "extern.h"
+
+__BEGIN_DECLS
+void   f_all(struct info *);
+void   f_cbreak(struct info *);
+void   f_columns(struct info *);
+void   f_dec(struct info *);
+void   f_everything(struct info *);
+void   f_extproc(struct info *);
+void   f_insane(struct info *);
+void   f_ispeed(struct info *);
+void   f_nl(struct info *);
+void   f_ospeed(struct info *);
+void   f_raw(struct info *);
+void   f_rows(struct info *);
+void   f_sane(struct info *);
+void   f_size(struct info *);
+void   f_speed(struct info *);
+void   f_ostart(struct info *);
+void   f_ostop(struct info *);
+void   f_tty(struct info *);
+__END_DECLS
+
+static const struct key {
+       const char *name;                       /* name */
+       void (*f)(struct info *);               /* function */
+#define        F_NEEDARG       0x01                    /* needs an argument */
+#define        F_OFFOK         0x02                    /* can turn off */
+       int flags;
+} keys[] = {
+       { "all",        f_all,          0 },
+       { "cbreak",     f_cbreak,       F_OFFOK },
+       { "cols",       f_columns,      F_NEEDARG },
+       { "columns",    f_columns,      F_NEEDARG },
+       { "cooked",     f_sane,         0 },
+       { "dec",        f_dec,          0 },
+       { "everything", f_everything,   0 },
+       { "extproc",    f_extproc,      F_OFFOK },
+       { "insane",     f_insane,       0 },
+       { "ispeed",     f_ispeed,       F_NEEDARG },
+       { "new",        f_tty,          0 },
+       { "nl",         f_nl,           F_OFFOK },
+       { "old",        f_tty,          0 },
+       { "ospeed",     f_ospeed,       F_NEEDARG },
+       { "ostart",     f_ostart,       0 },
+       { "ostop",      f_ostop,        0 },
+       { "raw",        f_raw,          F_OFFOK },
+       { "rows",       f_rows,         F_NEEDARG },
+       { "sane",       f_sane,         0 },
+       { "size",       f_size,         0 },
+       { "speed",      f_speed,        0 },
+       { "tty",        f_tty,          0 },
+};
+
+static int c_key(const void *, const void *);
+
+static int
+c_key(const void *a, const void *b)
+{
+
+        return (strcmp(((const struct key *)a)->name,
+           ((const struct key *)b)->name));
+}
+
+int
+ksearch(char ***argvp, struct info *ip)
+{
+       char *name;
+       struct key *kp, tmp;
+
+       name = **argvp;
+       if (*name == '-') {
+               ip->off = 1;
+               ++name;
+       } else
+               ip->off = 0;
+
+       tmp.name = name;
+       if (!(kp = (struct key *)bsearch(&tmp, keys,
+           sizeof(keys)/sizeof(struct key), sizeof(struct key), c_key)))
+               return (0);
+       if (!(kp->flags & F_OFFOK) && ip->off) {
+               warnx("illegal option -- %s", name);
+               usage();
+       }
+       if (kp->flags & F_NEEDARG && !(ip->arg = *++*argvp)) {
+               warnx("option requires an argument -- %s", name);
+               usage();
+       }
+       kp->f(ip);
+       return (1);
+}
+
+void
+f_all(struct info *ip)
+{
+       print(&ip->t, &ip->win, ip->ldisc, STTY_BSD);
+}
+
+void
+f_cbreak(struct info *ip)
+{
+       if (ip->off)
+               f_sane(ip);
+       else {
+               ip->t.c_iflag |= BRKINT|IXON|IMAXBEL;
+               ip->t.c_oflag |= OPOST;
+               ip->t.c_lflag |= ISIG|IEXTEN;
+               ip->t.c_lflag &= ~ICANON;
+               ip->set = 1;
+       }
+}
+
+void
+f_columns(struct info *ip)
+{
+       ip->win.ws_col = atoi(ip->arg);
+       ip->wset = 1;
+}
+
+void
+f_dec(struct info *ip)
+{
+       ip->t.c_cc[VERASE] = (u_char)0177;
+       ip->t.c_cc[VKILL] = CTRL('u');
+       ip->t.c_cc[VINTR] = CTRL('c');
+       ip->t.c_lflag &= ~ECHOPRT;
+       ip->t.c_lflag |= ECHOE|ECHOKE|ECHOCTL;
+       ip->t.c_iflag &= ~IXANY;
+       ip->set = 1;
+}
+
+void
+f_everything(struct info *ip)
+{
+       print(&ip->t, &ip->win, ip->ldisc, STTY_BSD);
+}
+
+void
+f_extproc(struct info *ip)
+{
+#ifdef TIOCEXT
+       if (ip->off) {
+               int tmp = 0;
+               (void)ioctl(ip->fd, TIOCEXT, &tmp);
+       } else {
+               int tmp = 1;
+               (void)ioctl(ip->fd, TIOCEXT, &tmp);
+       }
+       ip->set = 1;
+#endif
+}
+
+void
+f_insane(struct info *ip)
+{
+       int f, r;
+       
+       r = f = open(_PATH_URANDOM, O_RDONLY, 0);
+       if (f >= 0) {
+               r = read(f, &(ip->t), sizeof(struct termios));
+               close(f);
+       }
+       if (r < 0) {
+               /* XXX not cryptographically secure! */
+           
+               srandom(time(NULL));
+               ip->t.c_iflag = random();
+               ip->t.c_oflag = random();
+               ip->t.c_cflag = random();
+               ip->t.c_lflag = random();
+               for (f = 0; f < NCCS; f++) {
+                       ip->t.c_cc[f] = random() & 0xFF;
+               }
+               ip->t.c_ispeed = random();
+               ip->t.c_ospeed = random();
+       }
+    
+       ip->set = 1;
+}
+
+void
+f_ispeed(struct info *ip)
+{
+       cfsetispeed(&ip->t, atoi(ip->arg));
+       ip->set = 1;
+}
+
+void
+f_nl(struct info *ip)
+{
+       if (ip->off) {
+               ip->t.c_iflag |= ICRNL;
+               ip->t.c_oflag |= ONLCR;
+       } else {
+               ip->t.c_iflag &= ~ICRNL;
+               ip->t.c_oflag &= ~ONLCR;
+       }
+       ip->set = 1;
+}
+
+void
+f_ospeed(struct info *ip)
+{
+       cfsetospeed(&ip->t, atoi(ip->arg));
+       ip->set = 1;
+}
+
+void
+f_raw(struct info *ip)
+{
+       if (ip->off)
+               f_sane(ip);
+       else {
+               cfmakeraw(&ip->t);
+               ip->t.c_cflag &= ~(CSIZE|PARENB);
+               ip->t.c_cflag |= CS8;
+               ip->set = 1;
+       }
+}
+
+void
+f_rows(struct info *ip)
+{
+       ip->win.ws_row = atoi(ip->arg);
+       ip->wset = 1;
+}
+
+void
+f_sane(struct info *ip)
+{
+       ip->t.c_cflag = TTYDEF_CFLAG | (ip->t.c_cflag & (CLOCAL|CRTSCTS|CDTRCTS));
+       ip->t.c_iflag = TTYDEF_IFLAG;
+       ip->t.c_iflag |= ICRNL;
+       /* preserve user-preference flags in lflag */
+#define        LKEEP   (ECHOKE|ECHOE|ECHOK|ECHOPRT|ECHOCTL|ALTWERASE|TOSTOP|NOFLSH)
+       ip->t.c_lflag = TTYDEF_LFLAG | (ip->t.c_lflag & LKEEP);
+       ip->t.c_oflag = TTYDEF_OFLAG;
+       ip->set = 1;
+}
+
+void
+f_size(struct info *ip)
+{
+       (void)printf("%d %d\n", ip->win.ws_row, ip->win.ws_col);
+}
+
+void
+f_speed(struct info *ip)
+{
+       (void)printf("%d\n", cfgetospeed(&ip->t));
+}
+
+/* ARGSUSED */
+void
+f_tty(struct info *ip)
+{
+#ifdef TTYDISC
+       int tmp;
+
+       tmp = TTYDISC;
+       if (ioctl(0, TIOCSETD, &tmp) < 0)
+               err(1, "TIOCSETD");
+#endif
+}
+
+void
+f_ostart(struct info *ip)
+{
+#ifndef __minix
+       if (ioctl (0, TIOCSTART) < 0)
+#else
+       if (ioctl (0, TIOCSTART, NULL) < 0)
+#endif
+               err(1, "TIOCSTART");
+}
+
+void
+f_ostop(struct info *ip)
+{
+#ifndef __minix
+       if (ioctl (0, TIOCSTOP) < 0)
+#else
+       if (ioctl (0, TIOCSTOP, NULL) < 0)
+#endif
+               err(1, "TIOCSTOP");
+}
diff --git a/bin/stty/modes.c b/bin/stty/modes.c
new file mode 100644 (file)
index 0000000..8ffffbf
--- /dev/null
@@ -0,0 +1,242 @@
+/* $NetBSD: modes.c,v 1.17 2006/10/16 00:37:55 christos Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)modes.c    8.3 (Berkeley) 4/2/94";
+#else
+__RCSID("$NetBSD: modes.c,v 1.17 2006/10/16 00:37:55 christos Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/types.h>
+
+#include <stddef.h>
+#include <string.h>
+
+#include "stty.h"
+#include "extern.h"
+
+struct modes {
+       const char *name;
+       tcflag_t set;
+       tcflag_t unset;
+};
+
+/*
+ * The code in optlist() depends on minus options following regular
+ * options, i.e. "foo" must immediately precede "-foo".
+ */
+const struct modes cmodes[] = {
+       { "cs5",        CS5, CSIZE },
+       { "cs6",        CS6, CSIZE },
+       { "cs7",        CS7, CSIZE },
+       { "cs8",        CS8, CSIZE },
+       { "cstopb",     CSTOPB, 0 },
+       { "-cstopb",    0, CSTOPB },
+       { "cread",      CREAD, 0 },
+       { "-cread",     0, CREAD },
+       { "parenb",     PARENB, 0 },
+       { "-parenb",    0, PARENB },
+       { "parodd",     PARODD, 0 },
+       { "-parodd",    0, PARODD },
+       { "parity",     PARENB | CS7, PARODD | CSIZE },
+       { "-parity",    CS8, PARODD | PARENB | CSIZE },
+       { "evenp",      PARENB | CS7, PARODD | CSIZE },
+       { "-evenp",     CS8, PARODD | PARENB | CSIZE },
+       { "oddp",       PARENB | CS7 | PARODD, CSIZE },
+       { "-oddp",      CS8, PARODD | PARENB | CSIZE },
+       { "pass8",      CS8, PARODD | PARENB | CSIZE },
+       { "-pass8",     PARENB | CS7, PARODD | CSIZE },
+       { "hupcl",      HUPCL, 0 },
+       { "-hupcl",     0, HUPCL },
+       { "hup",        HUPCL, 0 },
+       { "-hup",       0, HUPCL },
+       { "clocal",     CLOCAL, 0 },
+       { "-clocal",    0, CLOCAL },
+       { "crtscts",    CRTSCTS, 0 },
+       { "-crtscts",   0, CRTSCTS },
+       { "mdmbuf",     MDMBUF, 0 },
+       { "-mdmbuf",    0, MDMBUF },
+       { "cdtrcts",    CDTRCTS, 0 },
+       { "-cdtrcts",   0, CDTRCTS },
+       { .name = NULL },
+};
+
+const struct modes imodes[] = {
+       { "ignbrk",     IGNBRK, 0 },
+       { "-ignbrk",    0, IGNBRK },
+       { "brkint",     BRKINT, 0 },
+       { "-brkint",    0, BRKINT },
+       { "ignpar",     IGNPAR, 0 },
+       { "-ignpar",    0, IGNPAR },
+       { "parmrk",     PARMRK, 0 },
+       { "-parmrk",    0, PARMRK },
+       { "inpck",      INPCK, 0 },
+       { "-inpck",     0, INPCK },
+       { "istrip",     ISTRIP, 0 },
+       { "-istrip",    0, ISTRIP },
+       { "inlcr",      INLCR, 0 },
+       { "-inlcr",     0, INLCR },
+       { "igncr",      IGNCR, 0 },
+       { "-igncr",     0, IGNCR },
+       { "icrnl",      ICRNL, 0 },
+       { "-icrnl",     0, ICRNL },
+       { "ixon",       IXON, 0 },
+       { "-ixon",      0, IXON },
+       { "flow",       IXON, 0 },
+       { "-flow",      0, IXON },
+       { "ixoff",      IXOFF, 0 },
+       { "-ixoff",     0, IXOFF },
+       { "tandem",     IXOFF, 0 },
+       { "-tandem",    0, IXOFF },
+       { "ixany",      IXANY, 0 },
+       { "-ixany",     0, IXANY },
+       { "decctlq",    0, IXANY },
+       { "-decctlq",   IXANY, 0 },
+       { "imaxbel",    IMAXBEL, 0 },
+       { "-imaxbel",   0, IMAXBEL },
+       { .name = NULL },
+};
+
+const struct modes lmodes[] = {
+       { "echo",       ECHO, 0 },
+       { "-echo",      0, ECHO },
+       { "echoe",      ECHOE, 0 },
+       { "-echoe",     0, ECHOE },
+       { "crterase",   ECHOE, 0 },
+       { "-crterase",  0, ECHOE },
+       { "crtbs",      ECHOE, 0 },     /* crtbs not supported, close enough */
+       { "-crtbs",     0, ECHOE },
+       { "echok",      ECHOK, 0 },
+       { "-echok",     0, ECHOK },
+       { "echoke",     ECHOKE, 0 },
+       { "-echoke",    0, ECHOKE },
+       { "crtkill",    ECHOKE, 0 },
+       { "-crtkill",   0, ECHOKE },
+       { "altwerase",  ALTWERASE, 0 },
+       { "-altwerase", 0, ALTWERASE },
+       { "iexten",     IEXTEN, 0 },
+       { "-iexten",    0, IEXTEN },
+       { "echonl",     ECHONL, 0 },
+       { "-echonl",    0, ECHONL },
+       { "echoctl",    ECHOCTL, 0 },
+       { "-echoctl",   0, ECHOCTL },
+       { "ctlecho",    ECHOCTL, 0 },
+       { "-ctlecho",   0, ECHOCTL },
+       { "echoprt",    ECHOPRT, 0 },
+       { "-echoprt",   0, ECHOPRT },
+       { "prterase",   ECHOPRT, 0 },
+       { "-prterase",  0, ECHOPRT },
+       { "isig",       ISIG, 0 },
+       { "-isig",      0, ISIG },
+       { "icanon",     ICANON, 0 },
+       { "-icanon",    0, ICANON },
+       { "noflsh",     NOFLSH, 0 },
+       { "-noflsh",    0, NOFLSH },
+       { "tostop",     TOSTOP, 0 },
+       { "-tostop",    0, TOSTOP },
+       { "flusho",     FLUSHO, 0 },
+       { "-flusho",    0, FLUSHO },
+       { "pendin",     PENDIN, 0 },
+       { "-pendin",    0, PENDIN },
+       { "crt",        ECHOE|ECHOKE|ECHOCTL, ECHOK|ECHOPRT },
+       { "-crt",       ECHOK, ECHOE|ECHOKE|ECHOCTL },
+       { "newcrt",     ECHOE|ECHOKE|ECHOCTL, ECHOK|ECHOPRT },
+       { "-newcrt",    ECHOK, ECHOE|ECHOKE|ECHOCTL },
+       { "nokerninfo", NOKERNINFO, 0 },
+       { "-nokerninfo",0, NOKERNINFO },
+       { "kerninfo",   0, NOKERNINFO },
+       { "-kerninfo",  NOKERNINFO, 0 },
+       { .name = NULL },
+};
+
+const struct modes omodes[] = {
+       { "opost",      OPOST, 0 },
+       { "-opost",     0, OPOST },
+       { "litout",     0, OPOST },
+       { "-litout",    OPOST, 0 },
+       { "onlcr",      ONLCR, 0 },
+       { "-onlcr",     0, ONLCR },
+       { "ocrnl",      OCRNL, 0 },
+       { "-ocrnl",     0, OCRNL },
+       { "tabs",       0, OXTABS },            /* "preserve" tabs */
+       { "-tabs",      OXTABS, 0 },
+       { "oxtabs",     OXTABS, 0 },
+       { "-oxtabs",    0, OXTABS },
+       { "onocr",      ONOCR, 0 },
+       { "-onocr",     0, ONOCR },
+       { "onlret",     ONLRET, 0 },
+       { "-onlret",    0, ONLRET },
+       { .name = NULL },
+};
+
+#define        CHK(s)  (!strcmp(name, s))
+
+int
+msearch(char ***argvp, struct info *ip)
+{
+       const struct modes *mp;
+       char *name;
+
+       name = **argvp;
+
+       for (mp = cmodes; mp->name; ++mp)
+               if (CHK(mp->name)) {
+                       ip->t.c_cflag &= ~mp->unset;
+                       ip->t.c_cflag |= mp->set;
+                       ip->set = 1;
+                       return (1);
+               }
+       for (mp = imodes; mp->name; ++mp)
+               if (CHK(mp->name)) {
+                       ip->t.c_iflag &= ~mp->unset;
+                       ip->t.c_iflag |= mp->set;
+                       ip->set = 1;
+                       return (1);
+               }
+       for (mp = lmodes; mp->name; ++mp)
+               if (CHK(mp->name)) {
+                       ip->t.c_lflag &= ~mp->unset;
+                       ip->t.c_lflag |= mp->set;
+                       ip->set = 1;
+                       return (1);
+               }
+       for (mp = omodes; mp->name; ++mp)
+               if (CHK(mp->name)) {
+                       ip->t.c_oflag &= ~mp->unset;
+                       ip->t.c_oflag |= mp->set;
+                       ip->set = 1;
+                       return (1);
+               }
+       return (0);
+}
diff --git a/bin/stty/print.c b/bin/stty/print.c
new file mode 100644 (file)
index 0000000..135df9a
--- /dev/null
@@ -0,0 +1,273 @@
+/* $NetBSD: print.c,v 1.22 2005/06/26 19:10:49 christos Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)print.c    8.6 (Berkeley) 4/16/94";
+#else
+__RCSID("$NetBSD: print.c,v 1.22 2005/06/26 19:10:49 christos Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/types.h>
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "stty.h"
+#include "extern.h"
+
+static void binit(const char *);
+static void bput(const char *);
+static const char *ccval(const struct cchar *, int);
+
+void
+print(struct termios *tp, struct winsize *wp, int ldisc, enum FMT fmt)
+{
+       const struct cchar *p;
+       long tmp;
+       u_char *cc;
+       int cnt, ispeed, ospeed;
+       char buf1[100], buf2[100];
+
+       cnt = 0;
+
+       /* Line discipline. */
+#ifdef TTYDISC
+       if (ldisc != TTYDISC) {
+               switch(ldisc) {
+               case TABLDISC:  
+                       cnt += printf("tablet disc; ");
+                       break;
+               case SLIPDISC:  
+                       cnt += printf("slip disc; ");
+                       break;
+               case PPPDISC:   
+                       cnt += printf("ppp disc; ");
+                       break;
+               case STRIPDISC: 
+                       cnt += printf("strip disc; ");
+                       break;
+               default:        
+                       cnt += printf("#%d disc; ", ldisc);
+                       break;
+               }
+       }
+#endif
+
+       /* Line speed. */
+       ispeed = cfgetispeed(tp);
+       ospeed = cfgetospeed(tp);
+       if (ispeed != ospeed)
+               cnt +=
+                   printf("ispeed %d baud; ospeed %d baud;", ispeed, ospeed);
+       else
+               cnt += printf("speed %d baud;", ispeed);
+       if (fmt >= STTY_BSD)
+               cnt += printf(" %d rows; %d columns;", wp->ws_row, wp->ws_col);
+       if (cnt)
+               (void)printf("\n");
+
+#define        on(f)   ((tmp&f) != 0)
+#define put(n, f, d) \
+       if (fmt >= STTY_BSD || on(f) != d) \
+               bput(n + on(f));
+
+       /* "local" flags */
+       tmp = tp->c_lflag;
+       binit("lflags");
+       put("-icanon", ICANON, 1);
+       put("-isig", ISIG, 1);
+       put("-iexten", IEXTEN, 1);
+       put("-echo", ECHO, 1);
+       put("-echoe", ECHOE, 0);
+       put("-echok", ECHOK, 0);
+       put("-echoke", ECHOKE, 0);
+       put("-echonl", ECHONL, 0);
+       put("-echoctl", ECHOCTL, 0);
+       put("-echoprt", ECHOPRT, 0);
+       put("-altwerase", ALTWERASE, 0);
+       put("-noflsh", NOFLSH, 0);
+       put("-tostop", TOSTOP, 0);
+       put("-flusho", FLUSHO, 0);
+       put("-pendin", PENDIN, 0);
+       put("-nokerninfo", NOKERNINFO, 0);
+       put("-extproc", EXTPROC, 0);
+
+       /* input flags */
+       tmp = tp->c_iflag;
+       binit("iflags");
+       put("-istrip", ISTRIP, 0);
+       put("-icrnl", ICRNL, 1);
+       put("-inlcr", INLCR, 0);
+       put("-igncr", IGNCR, 0);
+       put("-ixon", IXON, 1);
+       put("-ixoff", IXOFF, 0);
+       put("-ixany", IXANY, 1);
+       put("-imaxbel", IMAXBEL, 1);
+       put("-ignbrk", IGNBRK, 0);
+       put("-brkint", BRKINT, 1);
+       put("-inpck", INPCK, 0);
+       put("-ignpar", IGNPAR, 0);
+       put("-parmrk", PARMRK, 0);
+
+       /* output flags */
+       tmp = tp->c_oflag;
+       binit("oflags");
+       put("-opost", OPOST, 1);
+       put("-onlcr", ONLCR, 1);
+       put("-ocrnl", OCRNL, 0);
+       put("-oxtabs", OXTABS, 1);
+       put("-onocr", OXTABS, 0);
+       put("-onlret", OXTABS, 0);
+
+       /* control flags (hardware state) */
+       tmp = tp->c_cflag;
+       binit("cflags");
+       put("-cread", CREAD, 1);
+       switch(tmp&CSIZE) {
+       case CS5:
+               bput("cs5");
+               break;
+       case CS6:
+               bput("cs6");
+               break;
+       case CS7:
+               bput("cs7");
+               break;
+       case CS8:
+               bput("cs8");
+               break;
+       }
+       bput("-parenb" + on(PARENB));
+       put("-parodd", PARODD, 0);
+       put("-hupcl", HUPCL, 1);
+       put("-clocal", CLOCAL, 0);
+       put("-cstopb", CSTOPB, 0);
+       put("-crtscts", CRTSCTS, 0);
+       put("-mdmbuf", MDMBUF, 0);
+       put("-cdtrcts", CDTRCTS, 0);
+
+       /* special control characters */
+       cc = tp->c_cc;
+       if (fmt == STTY_POSIX) {
+               binit("cchars");
+               for (p = cchars1; p->name; ++p) {
+                       (void)snprintf(buf1, sizeof(buf1), "%s = %s;",
+                           p->name, ccval(p, cc[p->sub]));
+                       bput(buf1);
+               }
+               binit(NULL);
+       } else {
+               binit(NULL);
+               for (p = cchars1, cnt = 0; p->name; ++p) {
+                       if (fmt != STTY_BSD && cc[p->sub] == p->def)
+                               continue;
+#define        WD      "%-8s"
+                       (void)snprintf(buf1 + cnt * 8, 9, WD, p->name);
+                       (void)snprintf(buf2 + cnt * 8, 9, WD, ccval(p, cc[p->sub]));
+                       if (++cnt == LINELENGTH / 8) {
+                               cnt = 0;
+                               (void)printf("%s\n", buf1);
+                               (void)printf("%s\n", buf2);
+                       }
+               }
+               if (cnt) {
+                       (void)printf("%s\n", buf1);
+                       (void)printf("%s\n", buf2);
+               }
+       }
+}
+
+static int col;
+static const char *label;
+
+static void
+binit(const char *lb)
+{
+
+       if (col) {
+               (void)printf("\n");
+               col = 0;
+       }
+       label = lb;
+}
+
+static void
+bput(const char *s)
+{
+
+       if (col == 0) {
+               col = printf("%s: %s", label, s);
+               return;
+       }
+       if ((col + strlen(s)) > LINELENGTH) {
+               (void)printf("\n\t");
+               col = printf("%s", s) + 8;
+               return;
+       }
+       col += printf(" %s", s);
+}
+
+static const char *
+ccval(const struct cchar *p, int c)
+{
+       static char buf[5];
+       char *bp;
+
+       if (c == _POSIX_VDISABLE)
+               return ("<undef>");
+
+       if (p->sub == VMIN || p->sub == VTIME) {
+               (void)snprintf(buf, sizeof(buf), "%d", c);
+               return (buf);
+       }
+       bp = buf;
+       if (c & 0200) {
+               *bp++ = 'M';
+               *bp++ = '-';
+               c &= 0177;
+       }
+       if (c == 0177) {
+               *bp++ = '^';
+               *bp++ = '?';
+       }
+       else if (c < 040) {
+               *bp++ = '^';
+               *bp++ = c + '@';
+       }
+       else
+               *bp++ = c;
+       *bp = '\0';
+       return (buf);
+}
diff --git a/bin/stty/stty.1 b/bin/stty/stty.1
new file mode 100644 (file)
index 0000000..433e788
--- /dev/null
@@ -0,0 +1,635 @@
+.\"    $NetBSD: stty.1,v 1.41 2012/06/20 14:19:39 wiz Exp $
+.\"
+.\" Copyright (c) 1990, 1993, 1994
+.\"    The Regents of the University of California.  All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\"
+.\" 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. 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.
+.\"
+.\"     @(#)stty.1     8.5 (Berkeley) 6/1/94
+.\"
+.Dd June 16, 2012
+.Dt STTY 1
+.Os
+.Sh NAME
+.Nm stty
+.Nd set options for a terminal device interface
+.Sh SYNOPSIS
+.Nm
+.Op Fl a | Fl e | Fl g
+.Op Fl f Ar file
+.Op operand ...
+.Sh DESCRIPTION
+The
+.Nm
+utility sets or reports on terminal
+characteristics for the device that is its standard input.
+If no options or operands are specified, it reports the settings of a subset
+of characteristics as well as additional ones if they differ from their
+default values.
+Otherwise it modifies
+the terminal state according to the specified arguments.
+Some combinations of arguments are mutually
+exclusive on some terminal types.
+.Pp
+The following options are available:
+.Bl -tag -width XfXfileXX
+.It Fl a
+Display all the current settings for the terminal to standard output
+as per
+.St -p1003.2 .
+.It Fl e
+Display all the current settings for the terminal to standard output
+in the traditional
+.Bx
+.Dq all
+and
+.Dq everything
+formats.
+.It Fl f Ar file
+Open and use the terminal named by
+.Ar file
+rather than using standard input.
+The file is opened using the
+.Dv O_NONBLOCK
+flag of
+.Fn open ,
+making it possible to
+set or display settings on a terminal that might otherwise
+block on the open.
+.It Fl g
+Display all the current settings for the terminal to standard output
+in a form that may be used as an argument to a subsequent invocation of
+.Nm
+to restore the current terminal state as per
+.St -p1003.2 .
+.El
+.Pp
+The following arguments are available to set the terminal
+characteristics:
+.Ss Control Modes
+Control mode flags affect hardware characteristics associated with the
+terminal.
+This corresponds to the
+.Fa c_cflag
+of the
+.Xr termios 4
+structure.
+.Bl -tag -width Fl
+.It Cm parenb Pq Fl parenb
+Enable (disable) parity generation
+and detection.
+.It Cm parodd Pq Fl parodd
+Select odd (even) parity.
+.It Cm cs5 cs6 cs7 cs8
+Select character size, if possible.
+.It Ar number
+Set terminal baud rate to
+.Ar number ,
+if possible.
+If the
+baud rate is set to zero, modem
+control is no longer
+asserted.
+.It Cm ispeed Ar number
+Set terminal input baud rate to
+.Ar number ,
+if possible.
+If the
+input baud rate is set to zero, the
+input baud rate is set to the
+value of the output baud
+rate.
+.It Cm ospeed Ar number
+Set terminal output baud rate to
+.Ar number ,
+if possible.
+If
+the output baud rate is set to
+zero, modem control is
+no longer asserted.
+.It Cm speed Ar number
+This sets both
+.Cm ispeed
+and
+.Cm ospeed
+to
+.Ar number .
+.It Cm hupcl Pq Fl hupcl
+Stop asserting modem control
+(do not stop asserting modem control) on last close.
+.It Cm hup Pq Fl hup
+Same as hupcl
+.Pq Fl hupcl .
+.It Cm cstopb Pq Fl cstopb
+Use two (one) stop bits per character.
+.It Cm cread Pq Fl cread
+Enable (disable) the receiver.
+.It Cm clocal Pq Fl clocal
+Assume a line without (with) modem
+control.
+.It Cm crtscts Pq Fl crtscts
+Enable RTS/CTS flow control.
+.It Cm cdtrcts Pq Fl cdtrcts
+Enable DTR/CTS flow control (if supported).
+.El
+.Ss Input Modes
+This corresponds to the
+.Fa c_iflag
+of the
+.Xr termios 4
+structure.
+.Bl -tag -width Fl
+.It Cm ignbrk Pq Fl ignbrk
+Ignore (do not ignore) break on
+input.
+.It Cm brkint Pq Fl brkint
+Signal (do not signal)
+.Dv INTR
+on
+break.
+.It Cm ignpar Pq Fl ignpar
+Ignore (do not ignore) parity
+errors.
+.It Cm parmrk Pq Fl parmrk
+Mark (do not mark) parity errors.
+.It Cm inpck Pq Fl inpck
+Enable (disable) input parity
+checking.
+.It Cm istrip Pq Fl istrip
+Strip (do not strip) input characters
+to seven bits.
+.It Cm inlcr Pq Fl inlcr
+Map (do not map)
+.Dv NL
+to
+.Dv CR
+on input.
+.It Cm igncr Pq Fl igncr
+Ignore (do not ignore)
+.Dv CR
+on input.
+.It Cm icrnl Pq Fl icrnl
+Map (do not map)
+.Dv CR
+to
+.Dv NL
+on input.
+.It Cm ixon Pq Fl ixon
+Enable (disable)
+.Dv START/STOP
+output
+control.
+Output from the system is
+stopped when the system receives
+.Dv STOP
+and started when the system
+receives
+.Dv START ,
+or if
+.Cm ixany
+is set, any character restarts output.
+.It Cm ixoff Pq Fl ixoff
+Request that the system send (not
+send)
+.Dv START/STOP
+characters when
+the input queue is nearly
+empty/full.
+.It Cm ixany Pq Fl ixany
+Allow any character (allow only
+.Dv START )
+to restart output.
+.It Cm imaxbel Pq Fl imaxbel
+The system imposes a limit of
+.Dv MAX_INPUT
+(currently 255) characters in the input queue.
+If
+.Cm imaxbel
+is set and the input queue limit has been reached,
+subsequent input causes the system to send an ASCII BEL
+character to the output queue (the terminal beeps at you).
+Otherwise,
+if
+.Cm imaxbel
+is unset and the input queue is full, the next input character causes
+the entire input and output queues to be discarded.
+.El
+.Ss Output Modes
+This corresponds to the
+.Fa c_oflag
+of the
+.Xr termios 4
+structure.
+.Bl -tag -width Fl
+.It Cm opost Pq Fl opost
+Post-process output (do not
+post-process output; ignore all other
+output modes).
+.It Cm onlcr Pq Fl onlcr
+Map (do not map)
+.Dv NL
+to
+.Dv CR-NL
+on output.
+.It Cm ocrnl Pq Fl ocrnl
+Map (do not map)
+.Dv CR
+to
+.Dv NL
+on output.
+.It Cm oxtabs Pq Fl oxtabs
+Expand (do not expand) tabs to spaces on output.
+.It Cm onocr Pq Fl onocr
+Do not (do) output CRs at column zero.
+.It Cm onlret Pq Fl onlret
+On the terminal NL performs (does not perform) the CR function.
+.El
+.Ss Local Modes
+Local mode flags (lflags) affect various and sundry characteristics of terminal
+processing.
+Historically the term "local" pertained to new job control features
+implemented by Jim Kulp on a
+.Tn PDP Ns -11/70
+at
+.Tn IIASA .
+Later the driver ran on the first
+.Tn VAX
+at Evans Hall, UC Berkeley, where the job control details
+were greatly modified but the structure definitions and names
+remained essentially unchanged.
+The second interpretation of the
+.Sq l
+in lflag
+is
+.Dq line discipline flag ,
+which corresponds to the
+.Fa c_lflag
+of the
+.Xr termios 4
+structure.
+.Bl -tag -width Fl
+.It Cm isig Pq Fl isig
+Enable (disable) the checking of
+characters against the special control
+characters
+.Dv INTR , QUIT ,
+and
+.Dv SUSP .
+.It Cm icanon Pq Fl icanon
+Enable (disable) canonical input
+.Dv ( ERASE
+and
+.Dv KILL
+processing).
+.It Cm iexten Pq Fl iexten
+Enable (disable) any implementation
+defined special control characters
+not currently controlled by icanon,
+isig, or ixon.
+.It Cm echo Pq Fl echo
+Echo back (do not echo back) every
+character typed.
+.It Cm echoe Pq Fl echoe
+The
+.Dv ERASE
+character shall (shall
+not) visually erase the last character
+in the current line from the
+display, if possible.
+.It Cm echok Pq Fl echok
+Echo (do not echo)
+.Dv NL
+after
+.Dv KILL
+character.
+.It Cm echoke Pq Fl echoke
+The
+.Dv KILL
+character shall (shall
+not) visually erase
+the current line from the
+display, if possible.
+.It Cm echonl Pq Fl echonl
+Echo (do not echo)
+.Dv NL ,
+even if echo
+is disabled.
+.It Cm echoctl Pq Fl echoctl
+If
+.Cm echoctl
+is set, echo control characters as ^X.
+Otherwise control characters echo as themselves.
+.It Cm echoprt Pq Fl echoprt
+For printing terminals.
+If set, echo erased characters backwards within
+.Dq \e
+and
+.Dq / .
+Otherwise, disable this feature.
+.It Cm noflsh Pq Fl noflsh
+Disable (enable) flush after
+.Dv INTR , QUIT , SUSP .
+.It Cm tostop Pq Fl tostop
+Send (do not send)
+.Dv SIGTTOU
+for background output.
+This causes background jobs to stop if they attempt terminal output.
+.It Cm altwerase Pq Fl altwerase
+Use (do not use) an alternative word erase algorithm when processing
+.Dv WERASE
+characters.
+This alternative algorithm considers sequences of
+alphanumeric/underscores as words.
+It also skips the first preceding character in its classification
+(as a convenience since the one preceding character could have been
+erased with simply an
+.Dv ERASE
+character).
+.It Cm mdmbuf Pq Fl mdmbuf
+If set, flow control output based on condition of Carrier Detect.
+Otherwise writes return an error if Carrier Detect is low (and Carrier
+is not being ignored with the
+.Dv CLOCAL
+flag).
+.It Cm flusho Pq Fl flusho
+Indicates output is (is not) being discarded.
+.It Cm pendin Pq Fl pendin
+Indicates input is (is not) pending after a switch from non-canonical
+to canonical mode and will be re-input when a read becomes pending
+or more input arrives.
+.El
+.Ss Control Characters
+.Bl -tag -width Fl
+.It Ar control-character Ar string
+Set
+.Ar control-character
+to string
+.Ar string .
+If the string is a single character,
+then the control character is set to
+that character.
+If the string is the
+two character sequence "^-" or the
+string "undef", then the control character
+is disabled (i.e., set to
+.Bro Dv _POSIX_VDISABLE Brc ) .
+.Pp
+Recognized control characters:
+.Bd -ragged -offset indent
+.Bl -column character Subscript Description
+.It control- Ta "" Ta ""
+.It character  Subscript       Description
+.It _________  _________       _______________
+.It eof Ta Tn VEOF Ta EOF No character
+.It eol Ta Tn VEOL Ta EOL No character
+.It eol2 Ta Tn VEOL2 Ta EOL2 No character
+.It erase Ta Tn VERASE Ta ERASE No character
+.It werase Ta Tn VWERASE Ta WERASE No character
+.It kill Ta Tn VKILL Ta KILL No character
+.It reprint Ta Tn VREPRINT Ta REPRINT No character
+.It intr Ta Tn VINTR Ta INTR No character
+.It quit Ta Tn VQUIT Ta QUIT No character
+.It susp Ta Tn VSUSP Ta SUSP No character
+.It dsusp Ta Tn VDSUSP Ta DSUSP No character
+.It start Ta Tn VSTART Ta START No character
+.It stop Ta Tn VSTOP Ta STOP No character
+.It lnext Ta Tn VLNEXT Ta LNEXT No character
+.It status Ta Tn VSTATUS Ta STATUS No character
+.It discard Ta Tn VDISCARD Ta DISCARD No character
+.El
+.Ed
+.It Cm min Ar number
+.It Cm time Ar number
+Set the value of min or time to
+.Ar number .
+.Dv MIN
+and
+.Dv TIME
+are used in
+Non-Canonical mode input processing
+(-icanon).
+.El
+.Ss Combination Modes
+.Bl -tag -width Fl
+.It Ar saved settings
+Set the current terminal characteristics to the saved settings
+produced by the
+.Fl g
+option.
+.It Cm evenp No or Cm parity
+Enable parenb and cs7; disable parodd.
+.It Cm oddp
+Enable parenb, cs7, and parodd.
+.It Fl parity , evenp ,  oddp
+Disable parenb, and set cs8.
+.It Cm \&nl Pq Fl \&nl
+Enable (disable) icrnl.
+In addition
+-nl unsets inlcr and igncr.
+.It Cm ek
+Reset
+.Dv ERASE
+and
+.Dv KILL
+characters back to system defaults.
+.It Cm sane
+Resets all modes to reasonable values for interactive terminal use.
+.It Cm insane
+Sets all modes to random values, which are very likely
+.Pq but not guaranteed
+to be unreasonable for interactive terminal use.
+.It Cm tty
+Set the line discipline to the standard terminal line discipline
+.Dv TTYDISC .
+.It Cm crt Pq Fl crt
+Set (disable) all modes suitable for a CRT display device.
+.It Cm kerninfo Pq Fl kerninfo
+Enable (disable) the system generated status line associated with
+processing a
+.Dv STATUS
+character (usually set to ^T).
+The status line consists of the
+system load average, the current command name, its process ID, the
+event the process is waiting on (or the status of the process), the user
+and system times, percent CPU, and current memory usage.
+.It Cm columns Ar number
+The terminal size is recorded as having
+.Ar number
+columns.
+.It Cm cols Ar number
+An alias for
+.Cm columns .
+.It Cm rows Ar number
+The terminal size is recorded as having
+.Ar number
+rows.
+.It Cm dec
+Set modes suitable for users of Digital Equipment Corporation systems
+.Dv ( ERASE ,
+.Dv KILL ,
+and
+.Dv INTR
+characters are set to ^?, ^U, and ^C;
+.Dv ixany
+is disabled, and
+.Dv crt
+is enabled).
+.It Cm extproc Pq Fl extproc
+If set, this flag indicates that some amount of terminal processing is being
+performed by either the terminal hardware or by the remote side connected
+to a pty.
+.It Cm raw Pq Fl raw
+If set, change the modes of the terminal so that no input or output processing
+is performed.
+If unset, change the modes of the terminal to some reasonable
+state that performs input and output processing.
+Note that since the terminal driver no longer has a single
+.Dv RAW
+bit, it is not possible to intuit what flags were set prior to setting
+.Cm raw .
+This means that unsetting
+.Cm raw
+may not put back all the setting that were previously in effect.
+To set the terminal into a raw state and then accurately restore it, the following
+shell code is recommended:
+.Bd -literal -offset indent
+save_state=$(stty -g)
+stty raw
+\&...
+stty "$save_state"
+.Ed
+.It Cm size
+The size of the terminal is printed as two numbers on a single line,
+first rows, then columns.
+.El
+.Ss Compatibility Modes
+These modes remain for compatibility with the previous version of
+the
+.Nm
+utility.
+.Bl -tag -width Fl
+.It Cm all
+Reports all the terminal modes as with
+.Cm stty Fl a
+except that the control characters are printed in a columnar format.
+.It Cm everything
+Same as
+.Cm all .
+.It Cm cooked
+Same as
+.Cm sane .
+.It Cm cbreak
+If set, enables
+.Cm brkint , ixon , imaxbel , opost ,
+.Cm isig , iexten ,
+and
+.Fl icanon .
+If unset, same as
+.Cm sane .
+.It Cm new
+Same as
+.Cm tty .
+.It Cm old
+Same as
+.Cm tty .
+.It Cm newcrt Pq Fl newcrt
+Same as
+.Cm crt .
+.It Cm pass8
+The converse of
+.Cm parity .
+.It Cm tandem Pq Fl tandem
+Same as
+.Cm ixoff .
+.It Cm decctlq Pq Fl decctlq
+The converse of
+.Cm ixany .
+.It Cm crterase Pq Fl crterase
+Same as
+.Cm echoe .
+.It Cm crtbs Pq Fl crtbs
+Same as
+.Cm echoe .
+.It Cm crtkill Pq Fl crtkill
+Same as
+.Cm echoke .
+.It Cm ctlecho Pq Fl ctlecho
+Same as
+.Cm echoctl .
+.It Cm prterase Pq Fl prterase
+Same as
+.Cm echoprt .
+.It Cm litout Pq Fl litout
+The converse of
+.Cm opost .
+.It Cm tabs Pq Fl tabs
+The converse of
+.Cm oxtabs .
+.It Cm brk Ar value
+Same as the control character
+.Cm eol .
+.It Cm flush Ar value
+Same as the control character
+.Cm discard .
+.It Cm rprnt Ar value
+Same as the control character
+.Cm reprint .
+.El
+.Ss Control operations
+These operations are not modes, but rather commands to be performed by
+the tty layer.
+.Bl -tag -width Fl
+.It Cm ostart
+Performs a "start output" operation, as normally done by an
+incoming START character when
+.Cm ixon
+is set.
+.It Cm ostop
+Performs a "stop output" operation, as normally done by an
+incoming STOP character when
+.Cm ixon
+is set.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr termios 4 ,
+.Xr tty 4
+.Sh STANDARDS
+The
+.Nm
+utility is expected to be
+.St -p1003.2
+compatible.
+The
+.Fl e
+and
+.Fl f
+flags are
+extensions to the standard, as are the operands mentioned in the control
+operations section.
diff --git a/bin/stty/stty.c b/bin/stty/stty.c
new file mode 100644 (file)
index 0000000..e4a5952
--- /dev/null
@@ -0,0 +1,168 @@
+/* $NetBSD: stty.c,v 1.22 2012/06/20 10:09:43 wiz Exp $ */
+
+/*-
+ * Copyright (c) 1989, 1991, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1989, 1991, 1993, 1994\
+ The Regents of the University of California.  All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)stty.c     8.3 (Berkeley) 4/2/94";
+#else
+__RCSID("$NetBSD: stty.c,v 1.22 2012/06/20 10:09:43 wiz Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "stty.h"
+#include "extern.h"
+
+int main(int, char *[]);
+
+int
+main(int argc, char *argv[])
+{
+       struct info i;
+       enum FMT fmt;
+       int ch;
+
+       setprogname(argv[0]);
+       (void)setlocale(LC_ALL, "");
+
+       fmt = STTY_NOTSET;
+       i.fd = STDIN_FILENO;
+
+       opterr = 0;
+       while (optind < argc &&
+           strspn(argv[optind], "-aefg") == strlen(argv[optind]) &&
+           (ch = getopt(argc, argv, "aef:g")) != -1)
+               switch(ch) {
+               case 'a':               /* undocumented: POSIX compatibility */
+                       fmt = STTY_POSIX;
+                       break;
+               case 'e':
+                       fmt = STTY_BSD;
+                       break;
+               case 'f':
+                       if ((i.fd = open(optarg, O_RDONLY | O_NONBLOCK)) < 0)
+                               err(1, "%s", optarg);
+                       break;
+               case 'g':
+                       fmt = STTY_GFLAG;
+                       break;
+               case '?':
+               default:
+                       goto args;
+               }
+
+args:  argc -= optind;
+       argv += optind;
+
+       if (ioctl(i.fd, TIOCGETD, &i.ldisc) < 0)
+               err(1, "TIOCGETD");
+       if (tcgetattr(i.fd, &i.t) < 0)
+               err(1, "tcgetattr");
+       if (ioctl(i.fd, TIOCGWINSZ, &i.win) < 0)
+               warn("TIOCGWINSZ");
+
+       switch(fmt) {
+       case STTY_NOTSET:
+               if (*argv)
+                       break;
+               /* FALLTHROUGH */
+       case STTY_BSD:
+       case STTY_POSIX:
+               print(&i.t, &i.win, i.ldisc, fmt);
+               break;
+       case STTY_GFLAG:
+               gprint(&i.t);
+               break;
+       }
+
+       for (i.set = i.wset = 0; *argv; ++argv) {
+               if (ksearch(&argv, &i))
+                       continue;
+
+               if (csearch(&argv, &i))
+                       continue;
+
+               if (msearch(&argv, &i))
+                       continue;
+
+               if (isdigit((unsigned char)**argv)) {
+                       int speed;
+
+                       speed = atoi(*argv);
+                       cfsetospeed(&i.t, speed);
+                       cfsetispeed(&i.t, speed);
+                       i.set = 1;
+                       continue;
+               }
+
+               if (!strncmp(*argv, "gfmt1", sizeof("gfmt1") - 1)) {
+                       gread(&i.t, *argv + sizeof("gfmt1") - 1);
+                       i.set = 1;
+                       continue;
+               }
+
+               warnx("illegal option -- %s", *argv);
+               usage();
+       }
+
+       if (i.set && tcsetattr(i.fd, 0, &i.t) < 0)
+               err(1, "tcsetattr");
+       if (i.wset && ioctl(i.fd, TIOCSWINSZ, &i.win) < 0)
+               warn("TIOCSWINSZ");
+       exit(0);
+       /* NOTREACHED */
+}
+
+void
+usage(void)
+{
+
+       (void)fprintf(stderr, "usage: %s [-a|-e|-g] [-f file] [operand ...]\n", getprogname());
+       exit(1);
+       /* NOTREACHED */
+}
diff --git a/bin/stty/stty.h b/bin/stty/stty.h
new file mode 100644 (file)
index 0000000..4f0c59e
--- /dev/null
@@ -0,0 +1,61 @@
+/* $NetBSD: stty.h,v 1.10 2003/08/07 09:05:42 agc Exp $ */
+
+/*-
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * 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. 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.
+ *
+ *     @(#)stty.h      8.1 (Berkeley) 5/31/93
+ */
+
+#ifndef _STTY_H_
+#define _STTY_H_
+
+#include <sys/ioctl.h>
+#include <termios.h>
+
+struct info {
+       int fd;                                 /* file descriptor */
+       int ldisc;                              /* line discipline */
+       int off;                                /* turn off */
+       int set;                                /* need set */
+       int wset;                               /* need window set */
+       char *arg;                              /* argument */
+       struct termios t;                       /* terminal info */
+       struct winsize win;                     /* window info */
+};
+
+struct cchar {
+       const char *name;
+       int sub;
+       u_char def;
+};
+
+enum FMT { STTY_NOTSET, STTY_GFLAG, STTY_BSD, STTY_POSIX };
+
+#define        LINELENGTH      72
+
+#endif /* !_STTY_H_ */
index 58a17cc563cde0ee1e928e2df9c9603cdb56f938..71ecfceaf0541c33819914739c4311f4d6bdb149 100644 (file)
@@ -24,7 +24,7 @@ SUBDIR=       add_route arp ash at backup btrace \
        remsync rget rlogin \
        rotate rsh rshd service setup shar \
        sleep slip spell sprofalyze sprofdiff srccrc \
-       stty svclog svrctl swifi synctree sysenv \
+       svclog svrctl swifi synctree sysenv \
        syslogd tail tcpd tcpdp tcpstat telnet \
        telnetd term termcap tget time touch \
        truncate udpstat umount \
diff --git a/commands/stty/Makefile b/commands/stty/Makefile
deleted file mode 100644 (file)
index 2867023..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PROG=  stty
-MAN=
-
-.include <bsd.prog.mk>
diff --git a/commands/stty/stty.c b/commands/stty/stty.c
deleted file mode 100644 (file)
index 8e8f6c6..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
-/* stty - set terminal mode            Author: Andy Tanenbaum */
-
-/*
-       Adapted to POSIX 1003.2 by Philip Homburg.
- */
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <termios.h>
-#ifdef __minix
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#endif
-#include <unistd.h>
-
-/* Default settings, the Minix ones are defined in <termios.h> */
-
-#ifndef TCTRL_DEF
-#define TCTRL_DEF      (PARENB | CREAD | CS7)
-#endif
-
-#ifndef TSPEED_DEF
-#define TSPEED_DEF     B1200
-#endif
-
-#ifndef TINPUT_DEF
-#define TINPUT_DEF     (BRKINT | IGNPAR | ISTRIP | ICRNL)
-#endif
-
-#ifndef TOUTPUT_DEF
-#define TOUTPUT_DEF    OPOST
-#endif
-
-#ifndef TLOCAL_DEF
-#define TLOCAL_DEF     (ISIG | IEXTEN | ICANON | ECHO | ECHOE)
-#endif
-
-#ifndef TEOF_DEF
-#define TEOF_DEF       '\4'    /* ^D */
-#endif
-#ifndef TEOL_DEF
-#ifdef _POSIX_VDISABLE
-#define TEOL_DEF       _POSIX_VDISABLE
-#else
-#define TEOL_DEF       '\n'
-#endif
-#endif
-#ifndef TERASE_DEF
-#define TERASE_DEF     '\10'   /* ^H */
-#endif
-#ifndef TINTR_DEF
-#define TINTR_DEF      '\177'  /* ^? */
-#endif
-#ifndef TKILL_DEF
-#define TKILL_DEF      '\25'   /* ^U */
-#endif
-#ifndef TQUIT_DEF
-#define TQUIT_DEF      '\34'   /* ^\ */
-#endif
-#ifndef TSUSP_DEF
-#define TSUSP_DEF      '\32'   /* ^Z */
-#endif
-#ifndef TSTART_DEF
-#define TSTART_DEF     '\21'   /* ^Q */
-#endif
-#ifndef TSTOP_DEF
-#define TSTOP_DEF      '\23'   /* ^S */
-#endif
-#ifndef TMIN_DEF
-#define TMIN_DEF       1
-#endif
-#ifndef TTIME_DEF
-#define TTIME_DEF      0
-#endif
-
-
-
-char *prog_name;
-struct termios termios;
-int column= 0, max_column=80;          /* Assume 80 character terminals. */
-#ifdef __minix
-struct winsize winsize;
-#endif
-
-#define PROTO(a) a
-
-int main PROTO(( int argc, char **argv ));
-void report PROTO(( int flags ));
-int option PROTO(( char *opt, char *next ));
-int match PROTO(( char *s1, char *s2 ));
-void prctl PROTO(( int c ));
-speed_t long2speed PROTO(( long num ));
-long speed2long PROTO(( unsigned long speed ));
-void print_flags PROTO(( unsigned long flags, unsigned long flag,
-                               unsigned long def, char *string, int all ));
-void output PROTO(( char *s ));
-void do_print_char PROTO(( unsigned chr, unsigned def, char *name, int all ));
-void do_print_num PROTO(( unsigned num, unsigned def, char *name, int all ));
-void set_saved_settings PROTO(( char *opt ));
-void set_control PROTO(( int option, char *value ));
-void set_min_tim PROTO(( int option, char *value ));
-
-#define print_char(c,d,n,a) (do_print_char((unsigned)(c),(unsigned)(d),(n),(a)))
-#define print_num(m,d,n,a) (do_print_num((unsigned)(m),(unsigned)(d),(n),(a)))
-
-int main(argc, argv)
-int argc;
-char *argv[];
-{
-  int flags, k;
-
-  prog_name= argv[0];
-  flags= 0;
-
-  /* Stty with no arguments just reports on current status. */
-  if (tcgetattr(0, &termios) == -1)
-  {
-       fprintf(stderr, "%s: can't read ioctl parameters from stdin: %s\n",
-               prog_name, strerror(errno));
-       exit(1);
-  }
-#ifdef __minix
-  if (ioctl(0, TIOCGWINSZ, &winsize) == -1)
-  {
-       fprintf(stderr, "%s: can't get screen size from stdin: %s\n",
-               prog_name, strerror(errno));
-       exit(1);
-  }
-  if (winsize.ws_col != 0)
-       max_column= winsize.ws_col;
-#endif
-
-  if (argc == 2)
-  {
-       if (!strcmp(argv[1], "-a"))
-               flags |= 1;
-       else if (!strcmp(argv[1], "-g"))
-               flags |= 2;
-  }
-  if (argc == 1 || flags) {
-       report(flags);
-       exit(0);
-  }
-
-  /* Process the options specified. */
-  for (k= 1; k < argc; k++)
-       k += option(argv[k], k+1 < argc ? argv[k+1] : "");
-
-#ifdef __minix
-  if (ioctl(0, TIOCSWINSZ, &winsize) == -1)
-  {
-       fprintf(stderr, "%s: can't set screen size to stdin: %s\n",
-               prog_name, strerror(errno));
-       exit(1);
-  }
-#endif
-  if (tcsetattr(0, TCSANOW, &termios) == -1)
-  {
-       fprintf(stderr, "%s: can't set terminal parameters to stdin: %s\n",
-               prog_name, strerror(errno));
-       exit(1);
-  }
-  exit(0);
-}
-
-
-
-void report(flags)
-int flags;
-{
-       int i, all;
-       tcflag_t c_cflag, c_iflag, c_oflag, c_lflag;
-       char line[80];
-       speed_t ispeed, ospeed;
-
-       if (flags & 2)
-       {       /* We have to write the termios structure in a encoded form
-                * to stdout.
-                */
-               printf(":%x:%x:%x:%x:%x:%x", termios.c_iflag, termios.c_oflag,
-                       termios.c_cflag, termios.c_lflag, cfgetispeed(&termios),
-                       cfgetospeed(&termios));
-               for (i= 0; i<NCCS; i++)
-                       printf(":%x", termios.c_cc[i]);
-               printf(":\n");
-               return;
-       }
-
-       all= !!flags;
-
-       /* Start with the baud rate. */
-       ispeed= cfgetispeed(&termios);
-       ospeed= cfgetospeed(&termios);
-       if (ispeed != ospeed)
-       {
-               sprintf(line, "ispeed %lu baud; ospeed %lu baud;", 
-                       speed2long(ispeed), speed2long(ospeed));
-               output(line);
-       }
-       else if (all || ospeed != TSPEED_DEF)
-       {
-               sprintf(line, "speed %lu baud;", speed2long(ospeed));
-               output(line);
-       }
-
-       /* The control modes. */
-
-       c_cflag= termios.c_cflag;
-       if (all || (c_cflag & CSIZE) != (TCTRL_DEF & CSIZE))
-       {
-               switch (c_cflag & CSIZE)
-               {
-               case CS5: output("cs5"); break;
-               case CS6: output("cs6"); break;
-               case CS7: output("cs7"); break;
-               case CS8: output("cs8"); break;
-               default: output("cs??"); break;
-               }
-       }
-       print_flags(c_cflag, PARENB, TCTRL_DEF, "-parenb", all);
-       print_flags(c_cflag, PARODD, TCTRL_DEF, "-parodd", all);
-       print_flags(c_cflag, HUPCL, TCTRL_DEF, "-hupcl", all);
-       print_flags(c_cflag, CSTOPB, TCTRL_DEF, "-cstopb", all);
-       print_flags(c_cflag, CREAD, TCTRL_DEF, "-cread", all);
-       print_flags(c_cflag, CLOCAL, TCTRL_DEF, "-clocal", all);
-               
-       if (all)
-       {
-               printf("\n");
-               column= 0;
-       }
-
-       /* The input flags. */
-
-       c_iflag= termios.c_iflag;
-
-       print_flags(c_iflag, IGNBRK, TINPUT_DEF, "-ignbrk", all);
-       print_flags(c_iflag, BRKINT, TINPUT_DEF, "-brkint", all);
-       print_flags(c_iflag, IGNPAR, TINPUT_DEF, "-ignpar", all);
-       print_flags(c_iflag, PARMRK, TINPUT_DEF, "-parmrk", all);
-       print_flags(c_iflag, INPCK, TINPUT_DEF, "-inpck", all);
-       print_flags(c_iflag, ISTRIP, TINPUT_DEF, "-istrip", all);
-       print_flags(c_iflag, INLCR, TINPUT_DEF, "-inlcr", all);
-       print_flags(c_iflag, IGNCR, TINPUT_DEF, "-igncr", all);
-       print_flags(c_iflag, ICRNL, TINPUT_DEF, "-icrnl", all);
-       print_flags(c_iflag, IXON, TINPUT_DEF, "-ixon", all);
-       print_flags(c_iflag, IXOFF, TINPUT_DEF, "-ixoff", all);
-       print_flags(c_iflag, IXANY, TINPUT_DEF, "-ixany", all);
-       
-       if (all)
-       {
-               printf("\n");
-               column= 0;
-       }
-
-       /* The output flags. */
-
-       c_oflag= termios.c_oflag;
-
-       print_flags(c_oflag, OPOST, TOUTPUT_DEF, "-opost", all);
-#ifdef __minix
-       print_flags(c_oflag, ONLCR, TOUTPUT_DEF, "-onlcr", all);
-       print_flags(c_oflag, XTABS, TOUTPUT_DEF, "-xtabs", all);
-       print_flags(c_oflag, ONOEOT, TOUTPUT_DEF, "-onoeot", all);
-#endif
-       if (all)
-       {
-               printf("\n");
-               column= 0;
-       }
-
-       /* The local flags. */
-
-       c_lflag= termios.c_lflag;
-
-       print_flags(c_lflag, ISIG, TLOCAL_DEF, "-isig", all);
-       print_flags(c_lflag, ICANON, TLOCAL_DEF, "-icanon", all);
-       print_flags(c_lflag, IEXTEN, TLOCAL_DEF, "-iexten", all);
-       print_flags(c_lflag, ECHO, TLOCAL_DEF, "-echo", all);
-       print_flags(c_lflag, ECHOE, TLOCAL_DEF, "-echoe", all);
-       print_flags(c_lflag, ECHOK, TLOCAL_DEF, "-echok", all);
-       print_flags(c_lflag, ECHONL, TLOCAL_DEF, "-echonl", all);
-       print_flags(c_lflag, NOFLSH, TLOCAL_DEF, "-noflsh", all);
-#ifdef TOSTOP
-       print_flags(c_lflag, TOSTOP, TLOCAL_DEF, "-tostop", all);
-#endif
-#ifdef __minix
-       print_flags(c_lflag, LFLUSHO, TLOCAL_DEF, "-lflusho", all);
-#endif
-
-       if (all)
-       {
-               printf("\n");
-               column= 0;
-       }
-
-       /* The special control characters. */
-
-       print_char(termios.c_cc[VEOF], TEOF_DEF, "eof", all);
-       print_char(termios.c_cc[VEOL], TEOL_DEF, "eol", all);
-       print_char(termios.c_cc[VERASE], TERASE_DEF, "erase", all);
-       print_char(termios.c_cc[VINTR], TINTR_DEF, "intr", all);
-       print_char(termios.c_cc[VKILL], TKILL_DEF, "kill", all);
-       print_char(termios.c_cc[VQUIT], TQUIT_DEF, "quit", all);
-       print_char(termios.c_cc[VSUSP], TSUSP_DEF, "susp", all);
-       print_char(termios.c_cc[VSTART], TSTART_DEF, "start", all);
-       print_char(termios.c_cc[VSTOP], TSTOP_DEF, "stop", all);
-#ifdef __minix
-       print_char(termios.c_cc[VREPRINT], TREPRINT_DEF, "rprnt", all);
-       print_char(termios.c_cc[VLNEXT], TLNEXT_DEF, "lnext", all);
-       print_char(termios.c_cc[VDISCARD], TDISCARD_DEF, "flush", all);
-#endif
-       print_num(termios.c_cc[VMIN], TMIN_DEF, "min", all);
-       print_num(termios.c_cc[VTIME], TTIME_DEF, "time", all);
-       if (all)
-       {
-               printf("\n");
-               column= 0;
-       }
-
-#ifdef __minix
-       /* Screen size */
-       if (all || winsize.ws_row != 0 || winsize.ws_col != 0)
-       {
-               sprintf(line, "%d rows %d columns", winsize.ws_row, 
-                       winsize.ws_col);
-               output(line);
-       }
-
-       if (all || winsize.ws_ypixel != 0 || winsize.ws_xpixel != 0)
-       {
-               sprintf(line, "%d ypixels %d xpixels", winsize.ws_ypixel, 
-                       winsize.ws_xpixel);
-               output(line);
-       }
-
-       if (all)
-       {
-               printf("\n");
-               column= 0;
-       }
-#endif
-
-       if (column != 0)
-       {
-               printf("\n");
-               column= 0;
-       }
-}
-
-int option(opt, next)
-char *opt, *next;
-{
-  char *check;
-  speed_t speed;
-  long num;
-
-  /* The control options. */
-
-  if (match(opt, "clocal")) {
-       termios.c_cflag |= CLOCAL;
-       return 0;
-  }
-  if (match(opt, "-clocal")) {
-       termios.c_cflag &= ~CLOCAL;
-       return 0;
-  }
-
-  if (match(opt, "cread")) {
-       termios.c_cflag |= CREAD;
-       return 0;
-  }
-  if (match(opt, "-cread")) {
-       termios.c_cflag &= ~CREAD;
-       return 0;
-  }
-
-  if (match(opt, "cs5")) {
-       termios.c_cflag &= ~CSIZE;
-       termios.c_cflag |= CS5;
-       return 0;
-  }
-  if (match(opt, "cs6")) {
-       termios.c_cflag &= ~CSIZE;
-       termios.c_cflag |= CS6;
-       return 0;
-  }
-  if (match(opt, "cs7")) {
-       termios.c_cflag &= ~CSIZE;
-       termios.c_cflag |= CS7;
-       return 0;
-  }
-  if (match(opt, "cs8")) {
-       termios.c_cflag &= ~CSIZE;
-       termios.c_cflag |= CS8;
-       return 0;
-  }
-
-  if (match(opt, "cstopb")) {
-       termios.c_cflag |= CSTOPB;
-       return 0;
-  }
-  if (match(opt, "-cstopb")) {
-       termios.c_cflag &= ~CSTOPB;
-       return 0;
-  }
-
-  if (match(opt, "hupcl") || match(opt, "hup")) {
-       termios.c_cflag |= HUPCL;
-       return 0;
-  }
-  if (match(opt, "-hupcl") || match(opt, "-hup")) {
-       termios.c_cflag &= ~HUPCL;
-       return 0;
-  }
-
-  if (match(opt, "parenb")) {
-       termios.c_cflag |= PARENB;
-       return 0;
-  }
-  if (match(opt, "-parenb")) {
-       termios.c_cflag &= ~PARENB;
-       return 0;
-  }
-
-  if (match(opt, "parodd")) {
-       termios.c_cflag |= PARODD;
-       return 0;
-  }
-  if (match(opt, "-parodd")) {
-       termios.c_cflag &= ~PARODD;
-       return 0;
-  }
-
-  num= strtol(opt, &check, 10);
-  if (check[0] == '\0')
-  {
-       speed= long2speed(num);
-       if (speed == (speed_t)-1)
-       {
-               fprintf(stderr, "%s: illegal speed: '%s'\n", prog_name, opt);
-               return 0;
-       }
-       /* Speed OK */
-       cfsetispeed(&termios, speed);
-       cfsetospeed(&termios, speed);
-       return 0;
-  }
-
-  if (match(opt, "ispeed")) {
-       num= strtol(next, &check, 10);
-       if (check != '\0')
-       {
-               speed= long2speed(num);
-               if (speed == (speed_t)-1)
-               {
-                       fprintf(stderr, "%s: illegal speed: '%s'\n", prog_name, 
-                                                                       opt);
-                       return 1;
-               }
-               cfsetispeed(&termios, speed);
-               return 1;
-       }
-       else
-       {
-               fprintf(stderr, "%s: invalid argument to ispeed: '%s'\n", 
-                       prog_name, next);
-               return 1;
-       }
-  }
-
-  if (match(opt, "ospeed")) {
-       num= strtol(next, &check, 10);
-       if (check != '\0')
-       {
-               speed= long2speed(num);
-               if (speed == (speed_t)-1)
-               {
-                       fprintf(stderr, "%s: illegal speed: '%s'\n", prog_name, 
-                                                                       opt);
-                       return 1;
-               }
-               cfsetospeed(&termios, speed);
-               return 1;
-       }
-       else
-       {
-               fprintf(stderr, "%s: invalid argument to ospeed: %s\n", 
-                       prog_name, next);
-               return 1;
-       }
-  }
-
-  /* Input modes. */
-
-  if (match(opt, "brkint")) {
-       termios.c_iflag |= BRKINT;
-       return 0;
-  }
-  if (match(opt, "-brkint")) {
-       termios.c_iflag &= ~BRKINT;
-       return 0;
-  }
-
-  if (match(opt, "icrnl")) {
-       termios.c_iflag |= ICRNL;
-       return 0;
-  }
-  if (match(opt, "-icrnl")) {
-       termios.c_iflag &= ~ICRNL;
-       return 0;
-  }
-
-  if (match(opt, "ignbrk")) {
-       termios.c_iflag |= IGNBRK;
-       return 0;
-  }
-  if (match(opt, "-ignbrk")) {
-       termios.c_iflag &= ~IGNBRK;
-       return 0;
-  }
-
-  if (match(opt, "igncr")) {
-       termios.c_iflag |= IGNCR;
-       return 0;
-  }
-  if (match(opt, "-igncr")) {
-       termios.c_iflag &= ~IGNCR;
-       return 0;
-  }
-
-  if (match(opt, "ignpar")) {
-       termios.c_iflag |= IGNPAR;
-       return 0;
-  }
-  if (match(opt, "-ignpar")) {
-       termios.c_iflag &= ~IGNPAR;
-       return 0;
-  }
-
-  if (match(opt, "inlcr")) {
-       termios.c_iflag |= INLCR;
-       return 0;
-  }
-  if (match(opt, "-inlcr")) {
-       termios.c_iflag &= ~INLCR;
-       return 0;
-  }
-
-  if (match(opt, "inpck")) {
-       termios.c_iflag |= INPCK;
-       return 0;
-  }
-  if (match(opt, "-inpck")) {
-       termios.c_iflag &= ~INPCK;
-       return 0;
-  }
-
-  if (match(opt, "istrip")) {
-       termios.c_iflag |= ISTRIP;
-       return 0;
-  }
-  if (match(opt, "-istrip")) {
-       termios.c_iflag &= ~ISTRIP;
-       return 0;
-  }
-
-  if (match(opt, "ixoff")) {
-       termios.c_iflag |= IXOFF;
-       return 0;
-  }
-  if (match(opt, "-ixoff")) {
-       termios.c_iflag &= ~IXOFF;
-       return 0;
-  }
-
-  if (match(opt, "ixon")) {
-       termios.c_iflag |= IXON;
-       return 0;
-  }
-  if (match(opt, "-ixon")) {
-       termios.c_iflag &= ~IXON;
-       return 0;
-  }
-
-  if (match(opt, "parmrk")) {
-       termios.c_iflag |= PARMRK;
-       return 0;
-  }
-  if (match(opt, "-parmrk")) {
-       termios.c_iflag &= ~PARMRK;
-       return 0;
-  }
-
-  if (match(opt, "ixany")) {
-       termios.c_iflag |= IXANY;
-       return 0;
-  }
-  if (match(opt, "-ixany")) {
-       termios.c_iflag &= ~IXANY;
-       return 0;
-  }
-
-  /* Output modes. */
-
-  if (match(opt, "opost")) {
-       termios.c_oflag |= OPOST;
-       return 0;
-  }
-  if (match(opt, "-opost")) {
-       termios.c_oflag &= ~OPOST;
-       return 0;
-  }
-#ifdef __minix
-  if (match(opt, "onlcr")) {
-       termios.c_oflag |= ONLCR;
-       return 0;
-  }
-  if (match(opt, "-onlcr")) {
-       termios.c_oflag &= ~ONLCR;
-       return 0;
-  }
-
-  if (match(opt, "xtabs")) {
-       termios.c_oflag |= XTABS;
-       return 0;
-  }
-  if (match(opt, "-xtabs")) {
-       termios.c_oflag &= ~XTABS;
-       return 0;
-  }
-
-  if (match(opt, "onoeot")) {
-       termios.c_oflag |= ONOEOT;
-       return 0;
-  }
-  if (match(opt, "-onoeot")) {
-       termios.c_oflag &= ~ONOEOT;
-       return 0;
-  }
-#endif
-
-  /* Local modes. */
-
-  if (match(opt, "echo")) {
-       termios.c_lflag |= ECHO;
-       return 0;
-  }
-  if (match(opt, "-echo")) {
-       termios.c_lflag &= ~ECHO;
-       return 0;
-  }
-
-  if (match(opt, "echoe")) {
-       termios.c_lflag |= ECHOE;
-       return 0;
-  }
-  if (match(opt, "-echoe")) {
-       termios.c_lflag &= ~ECHOE;
-       return 0;
-  }
-
-  if (match(opt, "echok")) {
-       termios.c_lflag |= ECHOK;
-       return 0;
-  }
-  if (match(opt, "-echok")) {
-       termios.c_lflag &= ~ECHOK;
-       return 0;
-  }
-
-  if (match(opt, "echonl")) {
-       termios.c_lflag |= ECHONL;
-       return 0;
-  }
-  if (match(opt, "-echonl")) {
-       termios.c_lflag &= ~ECHONL;
-       return 0;
-  }
-
-  if (match(opt, "icanon")) {
-       termios.c_lflag |= ICANON;
-       return 0;
-  }
-  if (match(opt, "-icanon")) {
-       termios.c_lflag &= ~ICANON;
-       return 0;
-  }
-
-  if (match(opt, "iexten")) {
-       termios.c_lflag |= IEXTEN;
-       return 0;
-  }
-  if (match(opt, "-iexten")) {
-       termios.c_lflag &= ~IEXTEN;
-       return 0;
-  }
-
-  if (match(opt, "isig")) {
-       termios.c_lflag |= ISIG;
-       return 0;
-  }
-  if (match(opt, "-isig")) {
-       termios.c_lflag &= ~ISIG;
-       return 0;
-  }
-
-  if (match(opt, "noflsh")) {
-       termios.c_lflag |= NOFLSH;
-       return 0;
-  }
-  if (match(opt, "-noflsh")) {
-       termios.c_lflag &= ~NOFLSH;
-       return 0;
-  }
-
-  if (match(opt, "tostop")) {
-       termios.c_lflag |= TOSTOP;
-       return 0;
-  }
-  if (match(opt, "-tostop")) {
-       termios.c_lflag &= ~TOSTOP;
-       return 0;
-  }
-
-#ifdef __minix
-  if (match(opt, "lflusho")) {
-       termios.c_lflag |= LFLUSHO;
-       return 0;
-  }
-  if (match(opt, "-lflusho")) {
-       termios.c_lflag &= ~LFLUSHO;
-       return 0;
-  }
-#endif
-
-  /* The special control characters. */
-  if (match(opt, "eof")) {
-       set_control(VEOF, next);
-       return 1;
-  }
-
-  if (match(opt, "eol")) {
-       set_control(VEOL, next);
-       return 1;
-  }
-
-  if (match(opt, "erase")) {
-       set_control(VERASE, next);
-       return 1;
-  }
-
-  if (match(opt, "intr")) {
-       set_control(VINTR, next);
-       return 1;
-  }
-
-  if (match(opt, "kill")) {
-       set_control(VKILL, next);
-       return 1;
-  }
-
-  if (match(opt, "quit")) {
-       set_control(VQUIT, next);
-       return 1;
-  }
-
-  if (match(opt, "susp")) {
-       set_control(VSUSP, next);
-       return 1;
-  }
-
-  if (match(opt, "start")) {
-       set_control(VSTART, next);
-       return 1;
-  }
-
-  if (match(opt, "stop")) {
-       set_control(VSTOP, next);
-       return 1;
-  }
-#ifdef __minix
-  if (match(opt, "rprnt")) {
-       set_control(VREPRINT, next);
-       return 1;
-  }
-
-  if (match(opt, "lnext")) {
-       set_control(VLNEXT, next);
-       return 1;
-  }
-
-  if (match(opt, "flush")) {
-       set_control(VDISCARD, next);
-       return 1;
-  }
-#endif
-  if (match(opt, "min")) {
-       set_min_tim(VMIN, next);
-       return 1;
-  }
-
-  if (match(opt, "time")) {
-       set_min_tim(VTIME, next);
-       return 1;
-  }
-
-  /* Special modes. */
-  if (opt[0] == ':')
-  {
-       set_saved_settings(opt);
-       return 0;
-  }
-
-  if (match(opt, "cooked") || match(opt, "raw")) {
-       int x = opt[0] == 'c' ? 1 : 0;
-
-       option(x + "-icrnl", "");       /* off in raw mode, on in cooked mode */
-       option(x + "-ixon", "");
-       option(x + "-opost", "");
-       option(x + "-onlcr", "");
-       option(x + "-isig", "");
-       option(x + "-icanon", "");
-       option(x + "-iexten", "");
-       option(x + "-echo", "");
-       return 0;
-  }
-
-  if (match(opt, "evenp") || match(opt, "parity")) {
-       option("parenb", "");
-       option("cs7", "");
-       option("-parodd", "");
-       return 0;
-  }
-
-  if (match(opt, "oddp")) {
-       option("parenb", "");
-       option("cs7", "");
-       option("parodd", "");
-       return 0;
-  }
-
-  if (match(opt, "-parity") || match(opt, "-evenp") || match(opt, "-oddp")) {
-       option("-parenb", "");
-       option("cs8", "");
-       return 0;
-  }
-
-  if (match(opt, "nl")) {
-       option("icrnl", "");
-       return 0;
-  }
-
-  if (match(opt, "-nl")) {
-       option("-icrnl", "");
-       option("-inlcr", "");
-       option("-igncr", "");
-       return 0;
-  }
-
-  if (match(opt, "ek")) {
-       termios.c_cc[VERASE]= TERASE_DEF;;
-       termios.c_cc[VKILL]= TKILL_DEF;;
-       return 0;
-  }
-
-  if (match(opt, "sane"))
-  {
-       /* Reset all terminal attributes to a sane state, except things like
-        * line speed and parity, because it can't be known what their sane
-        * values are.
-        */
-       termios.c_iflag= (TINPUT_DEF & ~(IGNPAR|ISTRIP|INPCK))
-               | (termios.c_iflag & (IGNPAR|ISTRIP|INPCK));
-       termios.c_oflag= (TOUTPUT_DEF & ~(XTABS))
-               | (termios.c_oflag & (XTABS));
-       termios.c_cflag= (TCTRL_DEF & ~(CLOCAL|CSIZE|CSTOPB|PARENB|PARODD))
-               | (termios.c_cflag & (CLOCAL|CSIZE|CSTOPB|PARENB|PARODD));
-       termios.c_lflag= (TLOCAL_DEF & ~(ECHOE|ECHOK))
-               | (termios.c_lflag & (ECHOE|ECHOK));
-       if (termios.c_lflag & ICANON) {
-               termios.c_cc[VMIN]= TMIN_DEF;
-               termios.c_cc[VTIME]= TTIME_DEF;
-       }
-       termios.c_cc[VEOF]= TEOF_DEF;
-       termios.c_cc[VEOL]= TEOL_DEF;
-       termios.c_cc[VERASE]= TERASE_DEF;
-       termios.c_cc[VINTR]= TINTR_DEF;
-       termios.c_cc[VKILL]= TKILL_DEF;
-       termios.c_cc[VQUIT]= TQUIT_DEF;
-       termios.c_cc[VSUSP]= TSUSP_DEF;
-#ifdef __minix
-       termios.c_cc[VREPRINT]= TREPRINT_DEF;
-       termios.c_cc[VLNEXT]= TLNEXT_DEF;
-       termios.c_cc[VDISCARD]= TDISCARD_DEF;
-#endif
-       termios.c_cc[VSTART]= TSTART_DEF;
-       termios.c_cc[VSTOP]= TSTOP_DEF;
-       if (!(termios.c_lflag & ICANON)) {
-               termios.c_cc[VMIN]= TMIN_DEF;
-               termios.c_cc[VTIME]= TTIME_DEF;
-       }
-       return 0;
-  }
-
-#ifdef __minix
-  if (match(opt, "cols"))
-  {
-       num= strtol(next, &check, 0);
-       if (check[0] != '\0')
-       {
-               fprintf(stderr, "%s: illegal parameter to cols: '%s'\n", 
-                                                       prog_name, next);
-               return 1;
-       }
-       winsize.ws_col= num;
-       return 1;
-  }
-
-  if (match(opt, "rows"))
-  {
-       num= strtol(next, &check, 0);
-       if (check[0] != '\0')
-       {
-               fprintf(stderr, "%s: illegal parameter to rows: '%s'\n", 
-                                                       prog_name, next);
-               return 1;
-       }
-       winsize.ws_row= num;
-       return 1;
-  }
-
-  if (match(opt, "xpixels"))
-  {
-       num= strtol(next, &check, 0);
-       if (check[0] != '\0')
-       {
-               fprintf(stderr, "%s: illegal parameter to xpixels: '%s'\n", 
-                                                       prog_name, next);
-               return 1;
-       }
-       winsize.ws_xpixel= num;
-       return 1;
-  }
-
-  if (match(opt, "ypixels"))
-  {
-       num= strtol(next, &check, 0);
-       if (check[0] != '\0')
-       {
-               fprintf(stderr, "%s: illegal parameter to ypixels: '%s'\n", 
-                                                       prog_name, next);
-               return 1;
-       }
-       winsize.ws_ypixel= num;
-       return 1;
-  }
-#endif /* __minix */
-
-  fprintf(stderr, "%s: unknown mode: %s\n", prog_name, opt);
-  return 0;
-}
-
-int match(s1, s2)
-char *s1, *s2;
-{
-
-  while (1) {
-       if (*s1 == 0 && *s2 == 0) return(1);
-       if (*s1 == 0 || *s2 == 0) return (0);
-       if (*s1 != *s2) return (0);
-       s1++;
-       s2++;
-  }
-}
-
-void prctl(c)
-char c;
-{
-  if (c < ' ')
-       printf("^%c", 'A' + c - 1);
-  else if (c == 0177)
-       printf("^?");
-  else
-       printf("%c", c);
-}
-
-struct s2s {
-       speed_t ts;
-       long ns;
-} s2s[] = {
-       { B0,                0 },
-       { B50,              50 },
-       { B75,              75 },
-       { B110,            110 },
-       { B134,            134 },
-       { B150,            150 },
-       { B200,            200 },
-       { B300,            300 },
-       { B600,            600 },
-       { B1200,          1200 },
-       { B1800,          1800 },
-       { B2400,          2400 },
-       { B4800,          4800 },
-       { B9600,          9600 },
-       { B19200,        19200 },
-       { B38400,        38400 },
-#ifdef __minix
-       { B57600,        57600 },
-       { B115200,      115200 },
-#ifdef B230400
-       { B230400,      230400 },
-#endif
-#ifdef B460800
-       { B460800,      460800 },
-#endif
-#ifdef B921600
-       { B921600,      921600 },
-#endif
-#endif
-};
-
-speed_t long2speed(num)
-long num;
-{
-       struct s2s *sp;
-
-       for (sp = s2s; sp < s2s + (sizeof(s2s) / sizeof(s2s[0])); sp++) {
-               if (sp->ns == num) return sp->ts;
-       }
-       return -1;
-}
-
-long speed2long(speed)
-unsigned long speed;
-{
-       struct s2s *sp;
-
-       for (sp = s2s; sp < s2s + (sizeof(s2s) / sizeof(s2s[0])); sp++) {
-               if (sp->ts == speed) return sp->ns;
-       }
-       return -1;
-}
-               
-void print_flags(flags, flag, def, string, all)
-unsigned long flags;
-unsigned long flag;
-unsigned long def;
-char *string;
-int all;
-{
-       if (!(flags & flag))
-       {
-               if (all || (def & flag))
-                       output(string);
-               return;
-       }
-       string++;
-       if (all || !(def & flag))
-               output(string);
-}
-
-void output(s)
-char *s;
-{
-       int len;
-
-       len= strlen(s);
-       if (column + len + 3 >= max_column)
-       {
-               printf("\n");
-               column= 0;
-       }
-       if (column)
-       {
-               putchar(' ');
-               column++;
-       }
-       fputs(s, stdout);
-       column += len;
-}
-
-void do_print_char(chr, def, name, all)
-unsigned chr;
-unsigned def;
-char *name;
-int all;
-{
-       char line[20];
-
-       if (!all && chr == def)
-               return;
-       
-#ifdef _POSIX_VDISABLE
-       if (chr == _POSIX_VDISABLE)
-               sprintf(line, "%s = <undef>", name);
-       else
-#endif
-       if (chr < ' ')
-               sprintf(line, "%s = ^%c", name, chr + '@');
-       else if (chr == 127)
-               sprintf(line, "%s = ^?", name);
-       else
-               sprintf(line, "%s = %c", name, chr);
-       output(line);
-}
-
-void do_print_num(num, def, name, all)
-unsigned num;
-unsigned def;
-char *name;
-int all;
-{
-       char line[20];
-               
-       if (!all && num == def)
-               return;
-       sprintf(line, "%s = %u", name, num);
-       output(line);
-}
-
-void set_saved_settings(opt)
-char *opt;
-{
-       long num;
-       char *check;
-       tcflag_t c_oflag, c_cflag, c_lflag, c_iflag;
-       cc_t c_cc[NCCS];
-       speed_t ispeed, ospeed;
-       int i;
-
-       check= opt;
-       num= strtol(check+1, &check, 16);
-       if (check[0] != ':')
-       {
-               fprintf(stderr, "error in saved settings '%s'\n", opt);
-               return;
-       }
-       c_iflag= num;
-
-       num= strtol(check+1, &check, 16);
-       if (check[0] != ':')
-       {
-               fprintf(stderr, "error in saved settings '%s'\n", opt);
-               return;
-       }
-       c_oflag= num;
-
-       num= strtol(check+1, &check, 16);
-       if (check[0] != ':')
-       {
-               fprintf(stderr, "error in saved settings '%s'\n", opt);
-               return;
-       }
-       c_cflag= num;
-
-       num= strtol(check+1, &check, 16);
-       if (check[0] != ':')
-       {
-               fprintf(stderr, "error in saved settings '%s'\n", opt);
-               return;
-       }
-       c_lflag= num;
-
-       num= strtol(check+1, &check, 16);
-       if (check[0] != ':')
-       {
-               fprintf(stderr, "error in saved settings '%s'\n", opt);
-               return;
-       }
-       ispeed= num;
-
-       num= strtol(check+1, &check, 16);
-       if (check[0] != ':')
-       {
-               fprintf(stderr, "error in saved settings '%s'\n", opt);
-               return;
-       }
-       ospeed= num;
-
-       for(i=0; i<NCCS; i++)
-       {
-               num= strtol(check+1, &check, 16);
-               if (check[0] != ':')
-               {
-                       fprintf(stderr, "error in saved settings '%s'\n", opt);
-                       return;
-               }
-               c_cc[i]= num;
-       }
-       if (check[1] != '\0')
-       {
-               fprintf(stderr, "error in saved settings '%s'\n", opt);
-               return;
-       }
-       termios.c_iflag= c_iflag;
-       termios.c_oflag= c_oflag;
-       termios.c_cflag= c_cflag;
-       termios.c_lflag= c_lflag;
-
-       cfsetispeed(&termios, ispeed);
-       cfsetospeed(&termios, ospeed);
-
-       for(i=0; i<NCCS; i++)
-               termios.c_cc[i]= c_cc[i];
-}
-
-void set_control(option, value)
-int option;
-char *value;
-{
-       int chr;
-
-       if (match(value, "undef") || match(value, "^-")) {
-#ifdef _POSIX_VDISABLE
-               chr= _POSIX_VDISABLE;
-#else
-               fprintf(stderr, 
-                       "stty: unable to set option to _POSIX_VDISABLE\n");
-               return;
-#endif
-       } else if (match(value, "^?"))
-               chr= '\177';
-       else if (strlen(value) == 2 && value[0] == '^') {
-               chr= toupper(value[1]) - '@';
-               if (chr < 0 || chr >= 32) {
-                       fprintf(stderr, "stty: illegal option value: '%s'\n",
-                               value);
-                       return;
-               }
-       } else if (strlen(value) == 1)
-               chr= value[0];
-       else {
-               fprintf(stderr, "stty: illegal option value: '%s'\n", value);
-               return;
-       }
-
-       assert(option >= 0 && option < NCCS);
-       termios.c_cc[option]= chr;
-}
-               
-void set_min_tim(option, value)
-int option;
-char *value;
-{
-       long num;
-       char *check;
-
-       num= strtol(value, &check, 0);
-       if (check[0] != '\0') {
-               fprintf(stderr, "stty: illegal option value: '%s'\n", value);
-               return;
-       }
-
-       if ((cc_t)num != num) {
-               fprintf(stderr, "stty: illegal option value: '%s'\n", value);
-               return;
-       }
-       assert(option >= 0 && option < NCCS);
-       termios.c_cc[option]= num;
-}
-
-/*
- * $PchId: stty.c,v 1.7 2001/05/02 15:04:42 philip Exp $
- */
index f6b1ed75dd49403a0ff2fcd2966a791e6e4a3692..d924283b088fad207e5d8b962d10124007e89c1e 100644 (file)
@@ -50,6 +50,7 @@
 ./bin/setup                            minix-sys
 ./bin/sh                               minix-sys
 ./bin/shutdown                         minix-sys       obsolete
+./bin/stty                             minix-sys
 ./bin/sync                             minix-sys
 ./bin/sysenv                           minix-sys
 ./bin/tar                              minix-sys
 ./usr/bin/stat                         minix-sys
 ./usr/bin/strings                      minix-sys       binutils
 ./usr/bin/strip                                minix-sys       binutils
-./usr/bin/stty                         minix-sys
+./usr/bin/stty                         minix-sys       obsolete
 ./usr/bin/su                           minix-sys
 ./usr/bin/sum                          minix-sys
 ./usr/bin/svclog                       minix-sys
 ./usr/include/sys/ioc_tape.h           minix-sys
 ./usr/include/sys/ioctl_compat.h               minix-sys
 ./usr/include/sys/ioctl.h              minix-sys
-./usr/include/sys/ioc_tty.h            minix-sys
+./usr/include/sys/ioc_tty.h            minix-sys       obsolete
 ./usr/include/sys/iostat.h             minix-sys
 ./usr/include/sys/ipc.h                        minix-sys
 ./usr/include/sys/jmp_buf.h            minix-sys
index d2360b2aaf58a29b1b32f9bb643cd3d911b32628..8eb588316d1e1824f361cd93a532de46443ca300 100644 (file)
@@ -1,6 +1,6 @@
 /* Console unsupport for ARM. Just stubs. */
 #include <minix/ipc.h>
-#include <termios.h>
+#include <sys/termios.h>
 #include "tty.h"
 
 void
index 474df386f33b06c837da9fe97e4cddb4469e4f19..fd11bde516f2157f2606ee264a5f196943b7f9b5 100644 (file)
@@ -1,6 +1,6 @@
 /* Keyboard unsupport for ARM. Just stubs. */
 #include <minix/ipc.h>
-#include <termios.h>
+#include <sys/termios.h>
 #include "tty.h"
 
 void
index d8bde82f32f1681e50df3f8bcbb44cf9143e629f..23a2e7fec3b62b43ac41a57a7ebd704951b9e567 100644 (file)
@@ -144,7 +144,8 @@ static int rs_read(tty_t *tp, int try);
 static int rs_icancel(tty_t *tp, int try);
 static int rs_ocancel(tty_t *tp, int try);
 static void rs_ostart(rs232_t *rs);
-static int rs_break(tty_t *tp, int try);
+static int rs_break_on(tty_t *tp, int try);
+static int rs_break_off(tty_t *tp, int try);
 static int rs_close(tty_t *tp, int try);
 static int rs_open(tty_t *tp, int try);
 static void rs232_handler(rs232_t *rs);
@@ -330,8 +331,11 @@ omap_get_divisor(rs232_t *rs, unsigned int baud)
        switch(baud) {
        case B460800:   /* Fall through */
        case B921600:   /* Fall through */
+#if 0
        case B1843200:  /* Fall through */
-       case B3686400:  oversampling = 13; break;
+       case B3686400:  
+#endif
+               oversampling = 13; break;
        default:        oversampling = 16;
        }
 
@@ -569,7 +573,8 @@ rs_init(tty_t *tp)
        tp->tty_icancel = rs_icancel;
        tp->tty_ocancel = rs_ocancel;
        tp->tty_ioctl = rs_ioctl;
-       tp->tty_break = rs_break;
+       tp->tty_break_on = rs_break_on;
+       tp->tty_break_off = rs_break_off;
        tp->tty_open = rs_open;
        tp->tty_close = rs_close;
 
@@ -669,17 +674,26 @@ rs_ostart(rs232_t *rs)
 }
 
 static int
-rs_break(tty_t *tp, int UNUSED(dummy))
+rs_break_on(tty_t *tp, int UNUSED(dummy))
 {
-/* Generate a break condition by setting the BREAK bit for 0.4 sec. */
+/* Raise break condition */
        rs232_t *rs = tp->tty_priv;
        unsigned int lsr;
 
        lsr = serial_in(rs, OMAP3_LSR);
        serial_out(rs, OMAP3_LSR, lsr | UART_LSR_BI);
-       /* XXX */
-       /* milli_delay(400); */                         /* ouch */
-       serial_out(rs, OMAP3_LSR, lsr);
+       return 0;       /* dummy */
+}
+
+static int
+rs_break_off(tty_t *tp, int UNUSED(dummy))
+{
+/* Clear break condition */
+       rs232_t *rs = tp->tty_priv;
+       unsigned int lsr;
+
+       lsr = serial_in(rs, OMAP3_LSR);
+       serial_out(rs, OMAP3_LSR, lsr & ~UART_LSR_BI);
        return 0;       /* dummy */
 }
 
index ab880b7fd3235d82f0be5e7f1a9e70f63d692162..efb49e852c36e6b3ccff311ebf1a33b24f305448 100644 (file)
 
 #include <minix/drivers.h>
 #include <termios.h>
+#include <assert.h>
 #include <sys/ioctl.h>
 #include <sys/vm.h>
 #include <sys/video.h>
 #include <sys/mman.h>
+#include <sys/termios.h>
+#include <minix/callnr.h>
+#include <minix/com.h>
+#include <minix/sys_config.h>
+#include <minix/vm.h>
 #include "tty.h"
 
 /* Set this to 1 if you want console output duplicated on the first
index 30985ddc21b231833795a829ecb6af117f2cadfc..26f5d4baac2b50ecbf0ebf33287579ab8a6ffb6b 100644 (file)
@@ -12,7 +12,7 @@
 #include <sys/time.h>
 #include <sys/reboot.h>
 #include <sys/select.h>
-#include <termios.h>
+#include <sys/termios.h>
 #include <signal.h>
 #include <machine/archtypes.h>
 #include <minix/callnr.h>
index 7f73d9b1ab118397d7462462367fcb02340b8b7b..7b339e72d75c2560e878f500c69464d49ddad99f 100644 (file)
@@ -5,7 +5,7 @@
  *---------------------------------------------------------------------------*/
 
 #include <minix/drivers.h>
-#include <termios.h>
+#include <sys/termios.h>
 #include <signal.h>
 #include "tty.h"
 
 #define IS_IDBITS              6
 
 /* Line control bits. */
+#define LC_CS5               0x00      /* LSB0 and LSB1 encoding for CS5 */
+#define LC_CS6               0x01      /* LSB0 and LSB1 encoding for CS6 */
+#define LC_CS7               0x02      /* LSB0 and LSB1 encoding for CS7 */
+#define LC_CS8               0x03      /* LSB0 and LSB1 encoding for CS8 */
 #define LC_2STOP_BITS        0x04
 #define LC_PARITY            0x08
 #define LC_PAREVEN           0x10
@@ -191,7 +195,8 @@ static int rs_read(tty_t *tp, int try);
 static int rs_icancel(tty_t *tp, int try);
 static int rs_ocancel(tty_t *tp, int try);
 static void rs_ostart(rs232_t *rs);
-static int rs_break(tty_t *tp, int try);
+static int rs_break_on(tty_t *tp, int try);
+static int rs_break_off(tty_t *tp, int try);
 static int rs_close(tty_t *tp, int try);
 static void out_int(rs232_t *rs);
 static void rs232_handler(rs232_t *rs);
@@ -384,8 +389,19 @@ static void rs_config(rs232_t *rs)
        line_controls |= LC_PARITY;
        if (!(tp->tty_termios.c_cflag & PARODD)) line_controls |= LC_PAREVEN;
   }
+
   if (divisor >= (UART_FREQ / 110)) line_controls |= LC_2STOP_BITS;
-  line_controls |= (tp->tty_termios.c_cflag & CSIZE) >> 2;
+
+  /* which word size is configured? set the bits explicitly. */
+  if((tp->tty_termios.c_cflag & CSIZE) == CS5)
+       line_controls |= LC_CS5;
+  else if((tp->tty_termios.c_cflag & CSIZE) == CS6)
+       line_controls |= LC_CS6;
+  else if((tp->tty_termios.c_cflag & CSIZE) == CS7)
+       line_controls |= LC_CS7;
+  else if((tp->tty_termios.c_cflag & CSIZE) == CS8)
+       line_controls |= LC_CS8;
+  else printf("rs232: warning: no known word size set\n");
 
   /* Select the baud rate divisor registers and change the rate. */
   sys_outb(rs->line_ctl_port, LC_ADDRESS_DIVISOR);
@@ -500,7 +516,8 @@ void rs_init(tty_t *tp)
   tp->tty_icancel = rs_icancel;
   tp->tty_ocancel = rs_ocancel;
   tp->tty_ioctl = rs_ioctl;
-  tp->tty_break = rs_break;
+  tp->tty_break_on = rs_break_on;
+  tp->tty_break_off = rs_break_off;
   tp->tty_close = rs_close;
 
   /* Tell external device we are ready. */
@@ -610,11 +627,11 @@ static void rs_ostart(rs232_t *rs)
 }
 
 /*===========================================================================*
- *                             rs_break                                     *
+ *                             rs_break_on                                  *
  *===========================================================================*/
-static int rs_break(tty_t *tp, int UNUSED(dummy))
+static int rs_break_on(tty_t *tp, int UNUSED(dummy))
 {
-/* Generate a break condition by setting the BREAK bit for 0.4 sec. */
+/* Raise break condition. */
   rs232_t *rs = tp->tty_priv;
   u32_t line_controls;
   int s;
@@ -622,10 +639,22 @@ static int rs_break(tty_t *tp, int UNUSED(dummy))
   if ((s = sys_inb(rs->line_ctl_port, &line_controls)) != OK)
        printf("TTY: sys_inb() failed: %d", s);
   sys_outb(rs->line_ctl_port, line_controls | LC_BREAK);
-  /* XXX */
-  /* milli_delay(400); */                              /* ouch */
-  printf("RS232 break\n");
-  sys_outb(rs->line_ctl_port, line_controls);
+  return 0;    /* dummy */
+}
+
+/*===========================================================================*
+ *                             rs_break_off                                 *
+ *===========================================================================*/
+static int rs_break_off(tty_t *tp, int UNUSED(dummy))
+{
+/* Clear break condition. */
+  rs232_t *rs = tp->tty_priv;
+  u32_t line_controls;
+  int s;
+
+  if ((s = sys_inb(rs->line_ctl_port, &line_controls)) != OK)
+       printf("TTY: sys_inb() failed: %d", s);
+  sys_outb(rs->line_ctl_port, line_controls & ~LC_BREAK);
   return 0;    /* dummy */
 }
 
index f5c7e792d2c0bf7f67e52a12b0e513f5839f6f24..391b29a0956a824bac3f5a6fb06cb75e1ca0e4ef 100644 (file)
@@ -81,7 +81,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index 659d5942ae0a4f8daeb837b0381e68e73645024e..c5e8c5b89990ee0d72273b651484074f2723a0a8 100644 (file)
@@ -84,7 +84,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index 2cc6c776de80e48e82da7a95ab1f4ead9b5cf0e3..921b8d63979c296d0ee84c7acfca0a704b186773 100644 (file)
@@ -81,7 +81,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), '*',    '*',    C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),C('M'), CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   '1',    CEND    },
index 93ddbf6bd2c5baf14e038cea95a573a62e471b10..50a83cada7e600dfc3ed430dc91404b6f7286a62 100644 (file)
@@ -81,7 +81,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), '*',    '*',    C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),C('M'), CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   '1',    CEND    },
index 5d4d550e86b65530f1e30da8d793ac675dcbaaa5..13f9b2cbf05b1abaa59ec9997b26550a32ff4c49 100644 (file)
@@ -83,7 +83,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), '*',    '*',    C('M')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),C('M'), CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   '1',    CEND    },
index 9a5c5482cf9a07530da9415636a9f0b6e41a005c..a21571b5d4c823e11adc5aaeb42b83ade8969af8 100644 (file)
@@ -98,7 +98,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index f81b09472135da78c5d794addee94639424245a8..20abae0d2c1af992a9ca2f9cb4e7eb599775b3dc 100644 (file)
@@ -84,7 +84,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('/')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), '*',    '*',    C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),C('M'), CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   '1',    CEND    },
index 5a84ff4be9b8c6682435a4726fdf7201c88f58a0..215ba4f6afe2884310b752980d1ef2962bd2a884 100644 (file)
@@ -85,7 +85,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index c45bfc2618236e4c81add74ca4d8c162be0a029c..57865b3f46c14dcf1d6a9de567a8be33e5c0c9b7 100644 (file)
@@ -81,7 +81,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), '*',    '*',    C('M')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),C('M'), CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   '1',    CEND    },
index 146557195e942bc8cce3a883358fbe33aead2b2f..7645bfea28831460ba1f90d0a6132a712da124fb 100755 (executable)
@@ -86,7 +86,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index fd5120c1ea720befa4e4f96fa018cafe3eee2804..ea0804690d8cbec275c77a9a7ea81be1e714de17 100644 (file)
@@ -85,7 +85,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    '*',    A('*'), '*',    C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    '-',    AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    '-',    AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    '+',    APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), C('M'), CA('M'),C('M'), C('J')  },
    K(KP_1)          = {        NEND,   '1',    END,    AEND,   '1',    CEND    },
index ed6922e6efcd070aadee0866618636489363bf19..1a511fdb001f985a324753143ede25c067455266 100644 (file)
@@ -85,7 +85,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    '/',    A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    '*',    A('*'), '*',    C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    '-',    AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    '-',    AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    '+',    APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), C('M'), CA('M'),C('M'), C('J')  },
    K(KP_1)          = {        NEND,   '1',    END,    AEND,   '1',    CEND    },
index 868038245ea8d5fe2ff9f65804a3b082699ace26..b409e9b58be38ec869eeb21022676d9742664d82 100644 (file)
@@ -84,7 +84,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), '*',    '*',    C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),C('M'), CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   '1',    CEND    },
index 2ccacadebe521b7efd93ec0724e1033773279cee..48a53a3e5f69224a64c7ac3a3422aa338ae6866a 100644 (file)
@@ -82,7 +82,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  C('S')  },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), '*',    '*',    C('M')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),C('M'), CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   '1',    CEND    },
index 037dae4db51815425e40f0d33e5e9e30c8075508..869fcc8a72aa08e4d2f5c6e2278c8d42302437c4 100644 (file)
@@ -81,7 +81,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index 9f03266dd4209e84548a74306577c41666ddbd24..e1f057bc66d9577dede0797dc0a4481993be02b2 100755 (executable)
@@ -85,7 +85,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    '/',    A('/'), '/',    C('@')  },
    K(KP_STAR)       = {        '*',    '*',    '*',    A('*'), '*',    C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    '-',    AMIN,   '-',    CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    '-',    AMIN,   '-',    CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    '+',    APLUS,  '+',    CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), C('M'), CA('M'),C('M'), C('J')  },
    K(KP_1)          = {        NEND,   '1',    END,    AEND,   '1',    CEND    },
index f4f4a7abd6cd3d6fefcddb9175b65d0d2adb49ae..9f2ae876e387c35ff0294c5257d6912a3870da8f 100644 (file)
@@ -81,7 +81,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index f42ab3f5d029ce5bc4162f2d38ffc8b61e43e03f..062c5ccbf8516452952f4e4961b0421ddce216ff 100644 (file)
@@ -81,7 +81,7 @@
    K(NUM_LOCK)      = {        NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK,  NLOCK   },
    K(KP_SLASH)      = {        '/',    '/',    A('/'), A('/'), A('/'), C('@')  },
    K(KP_STAR)       = {        '*',    '*',    A('*'), A('*'), A('*'), C('@')  },
-   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CMIN    },
+   K(KP_DASH)       = {        '-',    '-',    AMIN,   AMIN,   A('-'), CNMIN   },
    K(KP_PLUS)       = {        '+',    '+',    APLUS,  APLUS,  A('+'), CPLUS   },
    K(KP_ENTER)      = {        C('M'), C('M'), CA('M'),CA('M'),CA('M'),C('J')  },
    K(KP_1)          = {        NEND,   '1',    AEND,   AEND,   A('1'), CEND    },
index 22b108f420e8f02ecf46d5ee51535f54b33d50d0..3e46d754848b7b87fb54fb5ae29fe749f982ee57 100644 (file)
@@ -18,6 +18,8 @@
 
 #include <minix/drivers.h>
 #include <termios.h>
+#include <assert.h>
+#include <sys/termios.h>
 #include <signal.h>
 #include "tty.h"
 
index 793e61a2e1694e4a0f7f3b765796d111fa4cb664..f73becfc55bf94c3039a3b037fd6fbdcfba2a681 100644 (file)
 #include <minix/drivers.h>
 #include <minix/driver.h>
 #include <termios.h>
-#include <sys/ioc_tty.h>
 #include <sys/kbdio.h>
+#include <sys/ttycom.h>
+#include <sys/ttydefaults.h>
+#include <sys/fcntl.h>
 #include <signal.h>
 #include <minix/keymap.h>
 #include "tty.h"
@@ -103,12 +105,29 @@ static struct chardriver tty_tab = {
 
 /* Default attributes. */
 static struct termios termios_defaults = {
-  TINPUT_DEF, TOUTPUT_DEF, TCTRL_DEF, TLOCAL_DEF,
-  {
-       TEOF_DEF, TEOL_DEF, TERASE_DEF, TINTR_DEF, TKILL_DEF, TMIN_DEF,
-       TQUIT_DEF, TTIME_DEF, TSUSP_DEF, TSTART_DEF, TSTOP_DEF,
-       TREPRINT_DEF, TLNEXT_DEF, TDISCARD_DEF,
-  }, TSPEED_DEF, TSPEED_DEF,
+  .c_iflag = TTYDEF_IFLAG,
+  .c_oflag = TTYDEF_OFLAG,
+  .c_cflag = TTYDEF_CFLAG,
+  .c_lflag = TTYDEF_LFLAG,
+  .c_ispeed = TTYDEF_SPEED,
+  .c_ospeed = TTYDEF_SPEED,
+  .c_cc = {
+       [VEOF] = CEOF,
+       [VEOL] = CEOL,
+       [VERASE] = CERASE,
+       [VINTR] = CINTR,
+       [VKILL] = CKILL,
+       [VMIN] = CMIN,
+       [VQUIT] = CQUIT,
+       [VTIME] = CTIME,
+       [VSUSP] = CSUSP,
+       [VSTART] = CSTART,
+       [VSTOP] = CSTOP,
+       [VREPRINT] = CREPRINT,
+       [VLNEXT] = CLNEXT,
+       [VDISCARD] = CDISCARD,
+       [VSTATUS] = CSTATUS
+  }
 };
 static struct winsize winsize_defaults;        /* = all zeroes */
 
@@ -600,15 +619,15 @@ static int do_ioctl(devminor_t minor, unsigned long request, endpoint_t endpt,
 
   r = OK;
   switch (request) {
-    case TCGETS:
+    case TIOCGETA:
        /* Get the termios attributes. */
        r = sys_safecopyto(endpt, grant, 0, (vir_bytes) &tp->tty_termios,
                sizeof(struct termios));
        break;
 
-    case TCSETSW:
-    case TCSETSF:
-    case TCDRAIN:
+    case TIOCSETAW:
+    case TIOCSETAF:
+    case TIOCDRAIN:
        if (tp->tty_outleft > 0) {
                if (flags & CDEV_NONBLOCK)
                        return EAGAIN;
@@ -619,10 +638,10 @@ static int do_ioctl(devminor_t minor, unsigned long request, endpoint_t endpt,
                tp->tty_iogrant = grant;
                return EDONTREPLY;      /* suspend the caller */
        }
-       if (request == TCDRAIN) break;
-       if (request == TCSETSF) tty_icancel(tp);
+       if (request == TIOCDRAIN) break;
+       if (request == TIOCSETAF) tty_icancel(tp);
        /*FALL THROUGH*/
-    case TCSETS:
+    case TIOCSETA:
        /* Set the termios attributes. */
        r = sys_safecopyfrom(endpt, grant, 0, (vir_bytes) &tp->tty_termios,
                sizeof(struct termios));
@@ -630,39 +649,25 @@ static int do_ioctl(devminor_t minor, unsigned long request, endpoint_t endpt,
        setattr(tp);
        break;
 
-    case TCFLSH:
+    case TIOCFLUSH:
        r = sys_safecopyfrom(endpt, grant, 0, (vir_bytes) &i, sizeof(i));
        if (r != OK) break;
-       switch (i) {
-       case TCIFLUSH:  tty_icancel(tp);                            break;
-       case TCOFLUSH:  (*tp->tty_ocancel)(tp, 0);                  break;
-       case TCIOFLUSH: tty_icancel(tp); (*tp->tty_ocancel)(tp, 0); break;
-       default:        r = EINVAL;
-       }
+       if(i & FREAD) { tty_icancel(tp); }
+       if(i & FWRITE) { (*tp->tty_ocancel)(tp, 0); }
        break;
-
-    case TCFLOW:
-       r = sys_safecopyfrom(endpt, grant, 0, (vir_bytes) &i, sizeof(i));
-       if (r != OK) break;
-       switch (i) {
-           case TCOOFF:
-           case TCOON:
-               tp->tty_inhibited = (i == TCOOFF);
-               tp->tty_events = 1;
-               break;
-           case TCIOFF:
-               (*tp->tty_echo)(tp, tp->tty_termios.c_cc[VSTOP]);
-               break;
-           case TCION:
-               (*tp->tty_echo)(tp, tp->tty_termios.c_cc[VSTART]);
-               break;
-           default:
-               r = EINVAL;
-       }
+    case TIOCSTART:
+       tp->tty_inhibited = 0;
+       tp->tty_events = 1;
        break;
-
-    case TCSBRK:
-       if (tp->tty_break != NULL) (*tp->tty_break)(tp,0);
+    case TIOCSTOP:
+       tp->tty_inhibited = 1;
+       tp->tty_events = 1;
+       break;
+    case TIOCSBRK:     /* tcsendbreak - turn break on */
+       if (tp->tty_break_on != NULL) (*tp->tty_break_on)(tp,0);
+       break;
+    case TIOCCBRK:     /* tcsendbreak - turn break off */
+       if (tp->tty_break_off != NULL) (*tp->tty_break_off)(tp,0);
        break;
 
     case TIOCGWINSZ:
@@ -675,7 +680,6 @@ static int do_ioctl(devminor_t minor, unsigned long request, endpoint_t endpt,
                sizeof(struct winsize));
        sigchar(tp, SIGWINCH, 0);
        break;
-
     case KIOCBELL:
        /* Sound bell (only /dev/console). */
        if (!isconsole(tp))
@@ -689,7 +693,17 @@ static int do_ioctl(devminor_t minor, unsigned long request, endpoint_t endpt,
                ticks++;
        beep_x(bell.kb_pitch, ticks);
        break;
-
+    case TIOCGETD:     /* get line discipline */
+    {
+       int disc = TTYDISC;
+       r = sys_safecopyto(endpt, grant, 0,
+               (vir_bytes) &disc, (vir_bytes) sizeof(disc));
+       break;
+    }
+    case TIOCSETD:     /* set line discipline */
+       printf("TTY: TIOCSETD: can't set any other line discipline.\n");
+       r = ENOTTY;
+       break;
     case KIOCSMAP:
        /* Load a new keymap (only /dev/console). */
        if (isconsole(tp)) r = kbd_loadmap(endpt, grant);
@@ -1125,11 +1139,16 @@ int count;                      /* number of input characters */
        }
 
        if (tp->tty_termios.c_lflag & ISIG) {
-               /* Check for INTR (^?) and QUIT (^\) characters. */
-               if (ch == tp->tty_termios.c_cc[VINTR]
-                                       || ch == tp->tty_termios.c_cc[VQUIT]) {
+               /* Check for INTR, QUIT and STATUS characters. */
+               int sig = -1;
+               if (ch == tp->tty_termios.c_cc[VINTR])
                        sig = SIGINT;
-                       if (ch == tp->tty_termios.c_cc[VQUIT]) sig = SIGQUIT;
+               else if(ch == tp->tty_termios.c_cc[VQUIT])
+                       sig = SIGQUIT;
+               else if(ch == tp->tty_termios.c_cc[VSTATUS])
+                       sig = SIGINFO;
+
+               if(sig >= 0) {
                        sigchar(tp, sig, 1);
                        (void) tty_echo(tp, ch);
                        continue;
@@ -1366,8 +1385,8 @@ int *ocount;                      /* max output chars / output chars used */
                /* Best guess for the tab length. */
                tablen = TAB_SIZE - (pos & TAB_MASK);
 
-               if ((tp->tty_termios.c_oflag & (OPOST|XTABS))
-                                                       == (OPOST|XTABS)) {
+               if ((tp->tty_termios.c_oflag & (OPOST|OXTABS))
+                                                       == (OPOST|OXTABS)) {
                        /* Tabs must be expanded. */
                        if (oct >= tablen) {
                                pos += tablen;
@@ -1404,7 +1423,7 @@ out_done:
 static void dev_ioctl(tp)
 tty_t *tp;
 {
-/* The ioctl's TCSETSW, TCSETSF and TCDRAIN wait for output to finish to make
+/* The ioctl's TCSETSW, TCSETSF and TIOCDRAIN wait for output to finish to make
  * sure that an attribute change doesn't affect the processing of current
  * output.  Once output finishes the ioctl is executed as in do_ioctl().
  */
@@ -1412,8 +1431,8 @@ tty_t *tp;
 
   if (tp->tty_outleft > 0) return;             /* output not finished */
 
-  if (tp->tty_ioreq != TCDRAIN) {
-       if (tp->tty_ioreq == TCSETSF) tty_icancel(tp);
+  if (tp->tty_ioreq != TIOCDRAIN) {
+       if (tp->tty_ioreq == TIOCSETAF) tty_icancel(tp);
        result = sys_safecopyfrom(tp->tty_iocaller, tp->tty_iogrant, 0,
                (vir_bytes) &tp->tty_termios,
                (vir_bytes) sizeof(tp->tty_termios));
index cd39700ea3174dec6f0a6d6e55e188b12c49a560..ffde3006c735ccf236f6f5a7f45d08fed464fff1 100644 (file)
@@ -43,7 +43,8 @@ typedef struct tty {
   devfun_t tty_devwrite;       /* routine to start actual device output */
   devfunarg_t tty_echo;                /* routine to echo characters input */
   devfun_t tty_ocancel;                /* cancel any ongoing device output */
-  devfun_t tty_break;          /* let the device send a break */
+  devfun_t tty_break_on;       /* let the device assert a break */
+  devfun_t tty_break_off;      /* let the device de-assert a break */
 
   /* Terminal parameters and status. */
   int tty_position;            /* current position on the screen for echoing */
index 6849dfcb7d3b8e3c5b3943e95ac13595007cf41f..9a552cc2e8f8c226a466d953d65bad88cf88e438 100644 (file)
@@ -36,7 +36,7 @@
 #include <string>
 
 #if defined(__minix)
-#include <minix/termios.h>
+#include <sys/termios.h>
 #endif /* defined(__minix) */
 
 #include "utils/optional.hpp"
index f0c8f3f2ff0f13e6d06e7214d8a0ff8bb387462f..d4c119944f82d5012a3c520f3c9fed62f1592181 100644 (file)
@@ -18,7 +18,7 @@ INCS+=        acpi.h audio_fw.h bitmap.h \
        priv.h procfs.h profile.h queryparam.h \
        rs.h safecopies.h sched.h sef.h sffs.h \
        sound.h spin.h sys_config.h sysinfo.h \
-       syslib.h sysutil.h termios.h timers.h type.h \
+       syslib.h sysutil.h timers.h type.h \
        u64.h usb.h usb_ch9.h vbox.h \
        vboxfs.h vboxif.h vboxtype.h vm.h \
        vfsif.h vtreefs.h libminixfs.h netsock.h \
index 78802ffdf7c794fcd1955d9a59e84d8e0415ca6e..a6a2d746a707fec505954018d5b00312b8da6fc6 100644 (file)
 #define        L(c)    ((c) | HASCAPS) /* Add "Caps Lock has effect" attribute */
 
 #define EXT    0x0100          /* Normal function keys         */
-#define CTRL   0x0200          /* Control key                  */
+#define CTRLKEY        0x0200          /* Control key                  */
 #define SHIFT  0x0400          /* Shift key                    */
 #define ALT    0x0800          /* Alternate key                */
 #define HASNUM 0x4000          /* Num Lock has effect          */
 #define HASCAPS        0x8000          /* Caps Lock has effect         */
 
 /* The left and right versions for the actual keys in the keymap. */
-#define LCTRL  CTRL
-#define RCTRL  (CTRL | EXT)
+#define LCTRL  CTRLKEY
+#define RCTRL  (CTRLKEY | EXT)
 #define LSHIFT SHIFT
 #define RSHIFT (SHIFT | EXT)
 #define LALT   ALT
 #define AINSRT (0x0C + ALT)
 
 /* Ctrl + Numeric keypad */
-#define CHOME  (0x01 + CTRL)
-#define CEND   (0x02 + CTRL)
-#define CUP    (0x03 + CTRL)
-#define CDOWN  (0x04 + CTRL)
-#define CLEFT  (0x05 + CTRL)
-#define CRIGHT (0x06 + CTRL)
-#define CPGUP  (0x07 + CTRL)
-#define CPGDN  (0x08 + CTRL)
-#define CMID   (0x09 + CTRL)
-#define CMIN   (0x0A + CTRL)
-#define CPLUS  (0x0B + CTRL)
-#define CINSRT (0x0C + CTRL)
+#define CHOME  (0x01 + CTRLKEY)
+#define CEND   (0x02 + CTRLKEY)
+#define CUP    (0x03 + CTRLKEY)
+#define CDOWN  (0x04 + CTRLKEY)
+#define CLEFT  (0x05 + CTRLKEY)
+#define CRIGHT (0x06 + CTRLKEY)
+#define CPGUP  (0x07 + CTRLKEY)
+#define CPGDN  (0x08 + CTRLKEY)
+#define CMID   (0x09 + CTRLKEY)
+#define CNMIN  (0x0A + CTRLKEY)
+#define CPLUS  (0x0B + CTRLKEY)
+#define CINSRT (0x0C + CTRLKEY)
 
 /* Lock keys */
 #define CALOCK (0x0D + EXT)    /* caps lock    */
 #define AF12   (0x1B + ALT)
 
 /* Ctrl+Fn */
-#define CF1    (0x10 + CTRL)
-#define CF2    (0x11 + CTRL)
-#define CF3    (0x12 + CTRL)
-#define CF4    (0x13 + CTRL)
-#define CF5    (0x14 + CTRL)
-#define CF6    (0x15 + CTRL)
-#define CF7    (0x16 + CTRL)
-#define CF8    (0x17 + CTRL)
-#define CF9    (0x18 + CTRL)
-#define CF10   (0x19 + CTRL)
-#define CF11   (0x1A + CTRL)
-#define CF12   (0x1B + CTRL)
+#define CF1    (0x10 + CTRLKEY)
+#define CF2    (0x11 + CTRLKEY)
+#define CF3    (0x12 + CTRLKEY)
+#define CF4    (0x13 + CTRLKEY)
+#define CF5    (0x14 + CTRLKEY)
+#define CF6    (0x15 + CTRLKEY)
+#define CF7    (0x16 + CTRLKEY)
+#define CF8    (0x17 + CTRLKEY)
+#define CF9    (0x18 + CTRLKEY)
+#define CF10   (0x19 + CTRLKEY)
+#define CF11   (0x1A + CTRLKEY)
+#define CF12   (0x1B + CTRLKEY)
 
 /* Shift+Fn */
 #define SF1    (0x10 + SHIFT)
diff --git a/include/minix/termios.h b/include/minix/termios.h
deleted file mode 100644 (file)
index e41ef24..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/* The <termios.h> header is used for controlling tty modes. */
-
-#ifndef _TERMIOS_H
-#define _TERMIOS_H
-
-typedef unsigned int tcflag_t;
-typedef unsigned char cc_t;
-typedef unsigned int speed_t;
-
-#define NCCS              20   /* size of cc_c array, some extra space
-                                * for extensions. */
-
-/* Primary terminal control structure. POSIX Table 7-1. */
-struct termios {
-  tcflag_t c_iflag;            /* input modes */
-  tcflag_t c_oflag;            /* output modes */
-  tcflag_t c_cflag;            /* control modes */
-  tcflag_t c_lflag;            /* local modes */
-  cc_t c_cc[NCCS];             /* control characters */
-  speed_t  c_ispeed;           /* input speed */
-  speed_t  c_ospeed;           /* output speed */
-};
-
-/* Values for termios c_iflag bit map.  POSIX Table 7-2. */
-#define BRKINT         0x0001  /* signal interrupt on break */
-#define ICRNL          0x0002  /* map CR to NL on input */
-#define IGNBRK         0x0004  /* ignore break */
-#define IGNCR          0x0008  /* ignore CR */
-#define IGNPAR         0x0010  /* ignore characters with parity errors */
-#define INLCR          0x0020  /* map NL to CR on input */
-#define INPCK          0x0040  /* enable input parity check */
-#define ISTRIP         0x0080  /* mask off 8th bit */
-#define IXOFF          0x0100  /* enable start/stop input control */
-#define IXON           0x0200  /* enable start/stop output control */
-#define PARMRK         0x0400  /* mark parity errors in the input queue */
-
-/* Values for termios c_oflag bit map.  POSIX Sec. 7.1.2.3. */
-#define OPOST          0x0001  /* perform output processing */
-
-/* Values for termios c_cflag bit map.  POSIX Table 7-3. */
-#define CLOCAL         0x0001  /* ignore modem status lines */
-#define CREAD          0x0002  /* enable receiver */
-#define CSIZE          0x000C  /* number of bits per character */
-#define                CS5     0x0000  /* if CSIZE is CS5, characters are 5 bits */
-#define                CS6     0x0004  /* if CSIZE is CS6, characters are 6 bits */
-#define                CS7     0x0008  /* if CSIZE is CS7, characters are 7 bits */
-#define                CS8     0x000C  /* if CSIZE is CS8, characters are 8 bits */
-#define CSTOPB         0x0010  /* send 2 stop bits if set, else 1 */
-#define HUPCL          0x0020  /* hang up on last close */
-#define PARENB         0x0040  /* enable parity on output */
-#define PARODD         0x0080  /* use odd parity if set, else even */
-
-/* Values for termios c_lflag bit map.  POSIX Table 7-4. */
-#define ECHO           0x0001  /* enable echoing of input characters */
-#define ECHOE          0x0002  /* echo ERASE as backspace */
-#define ECHOK          0x0004  /* echo KILL */
-#define ECHONL         0x0008  /* echo NL */
-#define ICANON         0x0010  /* canonical input (erase and kill enabled) */
-#define IEXTEN         0x0020  /* enable extended functions */
-#define ISIG           0x0040  /* enable signals */
-#define NOFLSH         0x0080  /* disable flush after interrupt or quit */
-#define TOSTOP         0x0100  /* send SIGTTOU (job control, not implemented*/
-
-/* Indices into c_cc array.  Default values in parentheses. POSIX Table 7-5. */
-#define VEOF                 0 /* cc_c[VEOF] = EOF char (^D) */
-#define VEOL                 1 /* cc_c[VEOL] = EOL char (undef) */
-#define VERASE               2 /* cc_c[VERASE] = ERASE char (^H) */
-#define VINTR                3 /* cc_c[VINTR] = INTR char (DEL) */
-#define VKILL                4 /* cc_c[VKILL] = KILL char (^U) */
-#define VMIN                 5 /* cc_c[VMIN] = MIN value for timer */
-#define VQUIT                6 /* cc_c[VQUIT] = QUIT char (^\) */
-#define VTIME                7 /* cc_c[VTIME] = TIME value for timer */
-#define VSUSP                8 /* cc_c[VSUSP] = SUSP (^Z, ignored) */
-#define VSTART               9 /* cc_c[VSTART] = START char (^S) */
-#define VSTOP               10 /* cc_c[VSTOP] = STOP char (^Q) */
-
-/* Values for the baud rate settings.  POSIX Table 7-6. */
-#define B0             0x0000  /* hang up the line */
-#define B50            0x1000  /* 50 baud */
-#define B75            0x2000  /* 75 baud */
-#define B110           0x3000  /* 110 baud */
-#define B134           0x4000  /* 134.5 baud */
-#define B150           0x5000  /* 150 baud */
-#define B200           0x6000  /* 200 baud */
-#define B300           0x7000  /* 300 baud */
-#define B600           0x8000  /* 600 baud */
-#define B1200          0x9000  /* 1200 baud */
-#define B1800          0xA000  /* 1800 baud */
-#define B2400          0xB000  /* 2400 baud */
-#define B4800          0xC000  /* 4800 baud */
-#define B9600          0xD000  /* 9600 baud */
-#define B19200         0xE000  /* 19200 baud */
-#define B38400         0xF000  /* 38400 baud */
-
-/* Optional actions for tcsetattr().  POSIX Sec. 7.2.1.2. */
-#define TCSANOW            1   /* changes take effect immediately */
-#define TCSADRAIN          2   /* changes take effect after output is done */
-#define TCSAFLUSH          3   /* wait for output to finish and flush input */
-
-/* Queue_selector values for tcflush().  POSIX Sec. 7.2.2.2. */
-#define TCIFLUSH           1   /* flush accumulated input data */
-#define TCOFLUSH           2   /* flush accumulated output data */
-#define TCIOFLUSH          3   /* flush accumulated input and output data */
-
-/* Action values for tcflow().  POSIX Sec. 7.2.2.2. */
-#define TCOOFF             1   /* suspend output */
-#define TCOON              2   /* restart suspended output */
-#define TCIOFF             3   /* transmit a STOP character on the line */
-#define TCION              4   /* transmit a START character on the line */
-
-int tcsendbreak(int _fildes, int _duration);
-int tcdrain(int _filedes);
-int tcflush(int _filedes, int _queue_selector);
-int tcflow(int _filedes, int _action);
-speed_t cfgetispeed(const struct termios *_termios_p);
-speed_t cfgetospeed(const struct termios *_termios_p);
-int cfsetispeed(struct termios *_termios_p, speed_t _speed);
-int cfsetospeed(struct termios *_termios_p, speed_t _speed);
-int tcgetattr(int _filedes, struct termios *_termios_p);
-int tcsetattr(int _filedes, int _opt_actions, const struct termios
-       *_termios_p);
-
-#ifndef cfgetispeed
-#define cfgetispeed(termios_p)         ((termios_p)->c_ispeed)
-#endif
-#ifndef cfgetospeed
-#define cfgetospeed(termios_p)         ((termios_p)->c_ospeed)
-#endif
-#ifndef cfsetispeed
-#define cfsetispeed(termios_p, speed)  ((termios_p)->c_ispeed = (speed), 0)
-#endif
-#ifndef cfsetospeed
-#define cfsetospeed(termios_p, speed)  ((termios_p)->c_ospeed = (speed), 0)
-#endif
-
-/* Here are the local extensions to the POSIX standard for Minix. */
-
-/* Extensions to the termios c_iflag bit map.  */
-#define IXANY          0x0800  /* allow any key to continue ouptut */
-
-/* Extensions to the termios c_oflag bit map. They are only active iff
- * OPOST is enabled. */
-#define ONLCR          0x0002  /* Map NL to CR-NL on output */
-#define XTABS          0x0004  /* Expand tabs to spaces */
-#define ONOEOT         0x0008  /* discard EOT's (^D) on output) */
-
-/* Extensions to the termios c_lflag bit map.  */
-#define LFLUSHO                0x0200  /* Flush output. */
-
-/* Extensions to the c_cc array. */
-#define VREPRINT         11    /* cc_c[VREPRINT] (^R) */
-#define VLNEXT            12    /* cc_c[VLNEXT] (^V) */
-#define VDISCARD          13    /* cc_c[VDISCARD] (^O) */
-
-/* Non-functional additions */
-#define VDSUSP         14
-#define VWERASE                15
-#define VSTATUS                16
-#define VEOL2          17
-
-/* Extensions to baud rate settings. */
-#if defined(__minix) && defined(_NETBSD_SOURCE)
-#define B57600         0x0100  /* 57600 baud */
-#define B115200                0x0200  /* 115200 baud */
-#define B230400                0x0400  /* 230400 baud */
-#define B460800                0x0800  /* 460800 baud */
-#define B921600                0x1000  /* 921600 baud */
-#define B1843200       0x2000  /* 1843200 baud */
-#define B3000000       0x4000  /* 3000000 baud */
-#define B3686400       0x8000  /* 3686400 baud */
-#endif /* defined(__minix) && defined(_NETBSD_SOURCE) */
-
-/* These are the default settings used by the kernel and by 'stty sane' */
-
-#define TCTRL_DEF      (CREAD | CS8 | HUPCL)
-#define TINPUT_DEF     (BRKINT | ICRNL | IXON | IXANY)
-#define TOUTPUT_DEF    (OPOST | ONLCR)
-#define TLOCAL_DEF     (ISIG | IEXTEN | ICANON | ECHO | ECHOE)
-#define TSPEED_DEF     B9600
-
-#define TEOF_DEF       '\4'    /* ^D */
-#define TEOL_DEF       _POSIX_VDISABLE
-#define TERASE_DEF     '\10'   /* ^H */
-#define TINTR_DEF      '\3'    /* ^C */
-#define TKILL_DEF      '\25'   /* ^U */
-#define TMIN_DEF       1
-#define TQUIT_DEF      '\34'   /* ^\ */
-#define TSTART_DEF     '\21'   /* ^Q */
-#define TSTOP_DEF      '\23'   /* ^S */
-#define TSUSP_DEF      '\32'   /* ^Z */
-#define TTIME_DEF      0
-#define        TREPRINT_DEF    '\22'   /* ^R */
-#define        TLNEXT_DEF      '\26'   /* ^V */
-#define        TDISCARD_DEF    '\17'   /* ^O */
-
-/* Window size. This information is stored in the TTY driver but not used.
- * This can be used for screen based applications in a window environment. 
- * The ioctls TIOCGWINSZ and TIOCSWINSZ can be used to get and set this 
- * information.
- */
-
-struct winsize
-{
-       unsigned short  ws_row;         /* rows, in characters */
-       unsigned short  ws_col;         /* columns, in characters */
-       unsigned short  ws_xpixel;      /* horizontal size, pixels */
-       unsigned short  ws_ypixel;      /* vertical size, pixels */
-};
-
-#endif /* _TERMIOS_H */
index e6084b23fee279e0750aa68b8ddc4d838cd5eb99..e7ad3ae2b7cf723971a8bc0a9842da0f385caad7 100644 (file)
@@ -4,7 +4,7 @@ INCSDIR= /usr/include/sys
 # Minix specific system headers
 INCS=  elf64.h elf_common.h elf_core.h elf_generic.h \
        ioc_block.h ioc_disk.h ioc_fb.h ioc_fbd.h ioc_file.h ioc_memory.h \
-       ioc_net.h ioc_sound.h ioc_tape.h ioc_tty.h \
+       ioc_net.h ioc_sound.h ioc_tape.h \
        kbdio.h \
        procfs.h statfs.h svrctl.h video.h vm.h 
 
diff --git a/include/sys/ioc_tty.h b/include/sys/ioc_tty.h
deleted file mode 100644 (file)
index 3eace95..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*     sys/ioc_tty.h - Terminal ioctl() command codes.
- *                                                     Author: Kees J. Bot
- *                                                             23 Nov 2002
- *
- */
-
-#ifndef _S_I_TTY_H
-#define _S_I_TTY_H
-
-#include <minix/ioctl.h>
-
-/* Terminal ioctls. */
-#define TCGETS         _IOR('T',  8, struct termios) /* tcgetattr */
-#define TCSETS         _IOW('T',  9, struct termios) /* tcsetattr, TCSANOW */
-#define TCSETSW                _IOW('T', 10, struct termios) /* tcsetattr, TCSADRAIN */
-#define TCSETSF                _IOW('T', 11, struct termios) /* tcsetattr, TCSAFLUSH */
-#define TCSBRK         _IOW('T', 12, int)            /* tcsendbreak */
-#define TCDRAIN                _IO ('T', 13)                 /* tcdrain */
-#define TCFLOW         _IOW('T', 14, int)            /* tcflow */
-#define TCFLSH         _IOW('T', 15, int)            /* tcflush */
-#define        TIOCGWINSZ      _IOR('T', 16, struct winsize)
-#define        TIOCSWINSZ      _IOW('T', 17, struct winsize)
-#define        TIOCGPGRP       _IOW('T', 18, int)
-#define        TIOCSPGRP       _IOW('T', 19, int)
-#define TIOCSCTTY      _IO ('T', 20)                 /* controlling tty */
-#define TIOCSFON       _IOW_BIG(1, u8_t [8192])
-
-/* Keyboard ioctls. */
-#define KIOCBELL        _IOW('k', 1, struct kio_bell)
-#define KIOCSLEDS       _IOW('k', 2, struct kio_leds)
-#define KIOCSMAP       _IOW('k', 3, keymap_t)
-
-/* /dev/video ioctls. */
-#define TIOCMAPMEM     _IORW('v', 1, struct mapreqvm)
-#define TIOCUNMAPMEM   _IORW('v', 2, struct mapreqvm)
-
-#endif /* _S_I_TTY_H */
index 9ddb8eb2b765d15e4d7ab5104f158645a73ca8f8..5ca0ef39e0e2d7c68ad82a818851821c41302a81 100644 (file)
@@ -53,10 +53,6 @@ __weak_alias(tcflow,_tcflow)
 int
 tcflow(int fd, int action)
 {
-#ifdef __minix
-       _DIAGASSERT(fd != -1);
-       return ioctl(fd, TCFLOW, &action);
-#else /* !__minix */
        struct termios term;
        u_char c;
 
@@ -80,5 +76,4 @@ tcflow(int fd, int action)
                return (-1);
        }
        /* NOTREACHED */
-#endif /* !__minix */
 }
index 1a75bcbd00e64de2b57cb49d9dc98ceb409ae5b2..fd1384014da515be4ec8dc842c25a4a6edd5a881 100644 (file)
@@ -53,10 +53,6 @@ __weak_alias(tcflush,_tcflush)
 int
 tcflush(int fd, int which)
 {
-#ifdef __minix
-       _DIAGASSERT(fd != -1);
-       return ioctl(fd, TCFLSH, &which);
-#else /* !__minix */
        int com;
 
        _DIAGASSERT(fd != -1);
@@ -76,5 +72,4 @@ tcflush(int fd, int which)
                return (-1);
        }
        return (ioctl(fd, TIOCFLUSH, &com));
-#endif /* !__minix */
 }
index dfb6e9c56fca2e496a20b36e4760e6dac0ededb6..3a03f90958add31ea0318b8fc8cd36fe697a2222 100644 (file)
@@ -40,10 +40,11 @@ __RCSID("$NetBSD: tcsendbreak.c,v 1.10 2012/06/25 22:32:46 abs Exp $");
 
 #include "namespace.h"
 #include <sys/types.h>
-#include <sys/ioctl.h>
-#ifndef __minix
+#ifdef __minix
 #include <sys/time.h>
-#endif /* !__minix */
+#endif
+#include <sys/types.h>
+#include <sys/ioctl.h>
 
 #include <assert.h>
 #include <errno.h>
@@ -58,10 +59,6 @@ __weak_alias(tcsendbreak,_tcsendbreak)
 int
 tcsendbreak(int fd, int len)
 {
-#ifdef __minix
-       _DIAGASSERT(fd != -1);
-       return ioctl(fd, TCSBRK, &len);
-#else /* !__minix */
        static const struct timespec sleepytime = { 0, 400000000 };
 
        _DIAGASSERT(fd != -1);
@@ -72,5 +69,4 @@ tcsendbreak(int fd, int len)
        if (ioctl(fd, TIOCCBRK, 0) == -1)
                return (-1);
        return (0);
-#endif /* !__minix */
 }
index 1079da1605d6d5d26bd1c76f356090a5afb1c7a9..dd7983da5e490faff7a94f26c0d58cafdadb6401 100644 (file)
@@ -53,22 +53,16 @@ __weak_alias(tcsetattr,_tcsetattr)
 int
 tcsetattr(int fd, int opt, const struct termios *t)
 {
-#ifndef __minix
        struct termios localterm;
-#endif
 
        _DIAGASSERT(fd != -1);
        _DIAGASSERT(t != NULL);
 
-#ifndef __minix
        if (opt & TCSASOFT) {
                localterm = *t;
                localterm.c_cflag |= CIGNORE;
                t = &localterm;
        }
-#else /* __minix */
-#define        TCSASOFT        0 
-#endif /* __minix */
        switch (opt & ~TCSASOFT) {
        case TCSANOW:
                return (ioctl(fd, TIOCSETA, __UNCONST(t)));
index c4a2543e4963d43f9aaef949df0ff5e4b8f90b8a..47681f4c1effc5a0ed7613a37f29257eccf5b228 100644 (file)
@@ -961,6 +961,7 @@ terminal_get_size(EditLine *el, int *lins, int *cols)
                }
        }
 #endif
+#ifndef __minix
 #ifdef TIOCGSIZE
        {
                struct ttysize ts;
@@ -971,6 +972,7 @@ terminal_get_size(EditLine *el, int *lins, int *cols)
                                *lins = ts.ts_lines;
                }
        }
+#endif
 #endif
        return Val(T_co) != *cols || Val(T_li) != *lins;
 }
index f56314449bb7903552e4cee67423de1ba5075d51..4a7bdeaabeba654b996163474318acb7eec14842 100644 (file)
@@ -16,7 +16,7 @@ MAN=  ash.1 at.1 \
        profile.1 ps.1 rcp.1 recwave.1 \
        remsync.1 rget.1 rlogin.1 rsh.1 rz.1 \
        shar.1 sleep.1 spell.1 \
-       stty.1 svc.1 svrctl.1 \
+       svc.1 svrctl.1 \
        synctree.1 sysenv.1 sz.1 tail.1 telnet.1 template.1 \
        term.1 termcap.1 tget.1 time.1 true.1 \
        truncate.1 umount.1 \
diff --git a/man/man1/stty.1 b/man/man1/stty.1
deleted file mode 100644 (file)
index a09b4cc..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-.TH STTY 1
-.SH NAME
-stty \- set terminal parameters
-.SH SYNOPSIS
-.de SP
-.if t .sp 0.4
-.if n .sp
-..
-.in +4n
-.ti -4n
-.B stty
-.RB [ \-ag]
-.SP
-.ti -4n
-.B stty
-.I encoded-form
-.SP
-.ti -4n
-.B stty
-.I speed
-.B ispeed
-.I speed
-.B ospeed
-.I speed
-.B "cs5 cs6 cs7 cs8"
-.RB [ \- ] parenb
-.RB [ \- ] parodd
-.RB [ \- ] hupcl
-.RB [ \- ] cstopb
-.RB [ \- ] cread
-.RB [ \- ] clocal
-.RB [ \- ] ignbrk
-.RB [ \- ] brkint
-.RB [ \- ] ignpar
-.RB [ \- ] parmrk
-.RB [ \- ] inpck
-.RB [ \- ] istrip
-.RB [ \- ] inlcr
-.RB [ \- ] igncr
-.RB [ \- ] icrnl
-.RB [ \- ] ixon
-.RB [ \- ] ixoff
-.RB [ \- ] ixany
-.RB [ \- ] opost
-.RB [ \- ] onlcr
-.RB [ \- ] xtabs
-.RB [ \- ] onoeot
-.RB [ \- ] isig
-.RB [ \- ] icanon
-.RB [ \- ] iexten
-.RB [ \- ] echo
-.RB [ \- ] echoe
-.RB [ \- ] echok
-.RB [ \- ] echonl
-.RB [ \- ] noflsh
-.RB [ \- ] tostop
-.RB [ \- ] lflusho
-.BR eof =\fIc
-.BR eol =\fIc
-.BR erase =\fIc
-.BR erase =\fIc
-.BR intr =\fIc
-.BR kill =\fIc
-.BR quit =\fIc
-.BR susp =\fIc
-.BR start =\fIc
-.BR stop =\fIc
-.BR rprnt =\fIc
-.BR lnext =\fIc
-.BR flush =\fIc
-.BR min =\fIn
-.BR time =\fIn
-.B rows
-.I n
-.B cols
-.I n
-.B xpixels
-.I n
-.B ypixels
-.I n
-.B cooked
-.B raw
-.RB [ \- ] evenp
-.RB [ \- ] parity
-.RB [ \- ] oddp
-.RB [ \- ] nl
-.B ek
-.B sane
-.in -4n
-.SH DESCRIPTION
-.B Stty
-shows or changes the parameters of the terminal connected to standard input.
-.B Stty
-takes a myriad of arguments most of which are mapped directly to
-the flags and special characters described in
-.BR tty (4),
-so we won't describe them here.
-.PP
-.B Stty
-has three forms of operation.  First, without any arguments
-.B stty
-shows all terminal attributes that are different from the default state.
-Option
-.B \-a
-makes
-.B stty
-print all terminal attributes, and
-.B \-g
-lets
-.B stty
-print the attributes in a special encoded form, a simple row of colon separated
-hexadecimal numbers.
-.PP
-In the second form of operation
-.B stty
-takes an encoded form as produced by the
-.B \-g
-option and sets the terminals attributes to its decoded value.
-.PP
-In the third form
-.B stty
-interprets a series of flags and parameters settings and modifies the
-terminal attributes accordingly.  Flags can be given as
-.B icanon
-or
-.B \-icanon
-for instance, either setting or clearing the
-.B ICANON
-flag.
-Special character values can by set like
-.B "intr=^C"
-for example, which sets the interrupt character to CTRL-C.  You can either
-use a real CTRL-C, or the two characters `^' and `C'.  In any case
-it is probably necessary to use quotes to guard it from the shell:
-.BR "intr='^C'" .
-.PP
-A number alone is interpreted as a baud rate setting for both the input and
-output rate.  The input or the output rate can be set separately with use
-of the
-.B ispeed
-and
-.B ospeed
-prefixes to the number.  The character size can be set with
-.BR cs5 ,
-.BR cs6 ,
-.BR cs7
-or
-.BR cs8 .
-.PP
-The
-.B MIN
-and
-.B TIME
-value, the number of rows and columns, and the xpixels and ypixels of the
-window can also be set using one of the keywords
-.BR min ,
-.BR time ,
-.BR rows ,
-.BR cols ,
-.BR xpixels
-or
-.BR ypixels ,
-followed by a decimal number that is the value of the setting.
-.PP
-.B Stty
-accepts several keywords that are not named by corresponding flags or
-parameters in
-.BR tty (4).
-They set several attributes at once:
-.TP
-.B cooked
-Same as
-.BR "icrnl ixon opost onlcr isig icanon iexten echo" ,
-setting all the attributes that are needed for line oriented mode.
-.TP
-.B raw
-Same as
-.BR "\-icrnl \-ixon \-opost \-onlcr \-isig \-icanon \-iexten \-echo" ,
-setting all the attributes for a raw data channel.
-.TP
-.B evenp parity
-These synonyms are equal to
-.BR "cs7 parenb \-parodd" ,
-setting the line to 7 bits even parity.
-.TP
-.B oddp
-Same as
-.BR "cs7 parenb parodd" ,
-setting the line to 7 bits odd parity.
-.TP
-.B "\-parity \-evenp \-oddp"
-All synonyms for
-.BR "cs8 \-parenb" ,
-setting the line to 8 bits, no parity.
-.TP
-.B nl
-Same as
-.BR icrnl ,
-setting carriage return to line feed input translation.
-.TP
-.B \-nl
-Same as
-.BR "\-icrnl \-inlcr \-igncr" ,
-disabling any carriage return or line feed handling.
-.TP
-.B ek
-Set the
-.B ERASE
-and
-.B KILL
-special characters back to the default.
-.TP
-.B sane
-Set all attributes to the default except things like the line speed and
-parity, because their "sane" value is probably what it is right now.
-The default values are compiled into
-.B stty
-from the <termios.h> include file.  Use
-.B "stty sane; stty -a"
-to know what they are.
-.SH FILES
-.TP 15n
-.B /etc/ttytab
-The
-.B init
-field of this file may contain an
-.B stty
-command to set the attributes to match an attached RS232 terminal or modem.
-.SH "SEE ALSO"
-.BR tty (4),
-.BR ttytab (5).
-.SH NOTES
-The
-.BR cooked ,
-.BR raw ,
-.BR rows ,
-.BR cols ,
-.BR xpixels
-and
-.BR ypixels
-keywords are MINIX 3 additions beyond the keywords defined by POSIX.
-.B Rows
-and
-.B cols
-are common UNIX extensions, however.
-There are more MINIX 3 specific flags that match the MINIX 3 specific attributes
-described in
-.BR tty (4).
-.SH AUTHOR
-Kees J. Bot <kjb@cs.vu.nl>
index da1fd1e328ff2dda81272bd67e64cb8dc50b461d..6d9388c77c45202d2fbc2b8013fb9ca40842b149 100644 (file)
@@ -23,6 +23,7 @@
 2012/10/17 12:00:00,bin/pwd
 2011/08/29 14:48:46,bin/rm
 2011/08/29 14:49:38,bin/rmdir
+2012/10/17 12:00:00,bin/stty
 2012/10/17 12:00:00,bin/sync
 2012/10/17 12:00:00,bin/test
 2012/10/17 12:00:00,build.sh
index 53c9cfa9bc727fe68e53ad8433ff8e78ae700680..71ae78671bd40d70885ff2f63538d398c16506a1 100644 (file)
@@ -128,7 +128,7 @@ __RCSID("$NetBSD: mke2fs.c,v 1.14 2010/09/10 15:51:20 tsutsui Exp $");
 #include <stdio.h>
 #include <uuid.h>
 #include <assert.h>
-#include <minix/termios.h>
+#include <sys/termios.h>
 
 #include "extern.h"
 
index 4176557c28d7a690f791ae6a2cc30f9a43846959..fa62b80fe277389812d95af5ee33df98d3705bf8 100644 (file)
@@ -135,7 +135,7 @@ static int sef_cb_init_fresh(int UNUSED(type), sef_init_info_t *UNUSED(info))
   register struct boot_image *ip;
   static char core_sigs[] = { SIGQUIT, SIGILL, SIGTRAP, SIGABRT,
                                SIGEMT, SIGFPE, SIGBUS, SIGSEGV };
-  static char ign_sigs[] = { SIGCHLD, SIGWINCH, SIGCONT };
+  static char ign_sigs[] = { SIGCHLD, SIGWINCH, SIGCONT, SIGINFO };
   static char noign_sigs[] = { SIGILL, SIGTRAP, SIGEMT, SIGFPE, 
                                SIGBUS, SIGSEGV };
   register struct mproc *rmp;
index 8d2720a9a08935724949999b3b44e79524667861..c498018edebe79ab4a1daa8a1d5f02f4dd5e2204 100644 (file)
@@ -310,7 +310,7 @@ int process_ksig(endpoint_t proc_nr_e, int signo)
   mp->mp_procgrp = rmp->mp_procgrp;    /* get process group right */
 
   /* For SIGVTALRM and SIGPROF, see if we need to restart a
-   * virtual timer. For SIGINT, SIGWINCH and SIGQUIT, use proc_id 0
+   * virtual timer. For SIGINT, SIGINFO, SIGWINCH and SIGQUIT, use proc_id 0
    * to indicate a broadcast to the recipient's process group.  For
    * SIGKILL, use proc_id -1 to indicate a systemwide broadcast.
    */
@@ -318,6 +318,7 @@ int process_ksig(endpoint_t proc_nr_e, int signo)
       case SIGINT:
       case SIGQUIT:
       case SIGWINCH:
+      case SIGINFO:
        id = 0; break;  /* broadcast to process group */
       case SIGVTALRM:
       case SIGPROF:
index 9e45d425c4fc368a13695e5cbd7784fe84255f49..13d9435a3139a5def882fffc31d17f34128156ce 100644 (file)
@@ -20,7 +20,7 @@
 #include <fcntl.h>
 #include <assert.h>
 #include <sys/stat.h>
-#include <sys/ioc_tty.h>
+#include <sys/ttycom.h>
 #include <minix/callnr.h>
 #include <minix/com.h>
 #include <minix/endpoint.h>
index 0fab6a5bce572cc2bd6f0522b281995e50be1796..b8cce9577cd645b2e7ffd2cbe5727d95ae92d3c7 100644 (file)
 #define        O_RDWR          0x00000002      /* open for reading and writing */
 #define        O_ACCMODE       0x00000003      /* mask for above modes */
 
-/* File status flags for open() and fcntl().  POSIX Table 6-5. */
-#define O_APPEND       02000   /* set append mode */
-#define O_NONBLOCK     04000   /* no delay */
-#define O_REOPEN      010000   /* automatically re-open device after driver
-                                * restart
-                                */
-#define O_CLOEXEC     020000   /* close on exec */
+/*
+ * Kernel encoding of open mode; separate read and write bits that are
+ * independently testable: 1 greater than the above.
+ *
+ * XXX
+ * FREAD and FWRITE are excluded from the #ifdef _KERNEL so that TIOCFLUSH,
+ * which was documented to use FREAD/FWRITE, continues to work.
+ */
 #if defined(_NETBSD_SOURCE)
-#define O_NOSIGPIPE   040000   /* don't deliver sigpipe */
+#define        FREAD           0x00000001
+#define        FWRITE          0x00000002
 #endif
-
-#ifndef __minix  /* NOT SUPPORTED! */
+#define        O_NONBLOCK      0x00000004      /* no delay */
+#define        O_APPEND        0x00000008      /* set append mode */
 #if defined(_NETBSD_SOURCE)
 #define        O_SHLOCK        0x00000010      /* open with shared file lock */
 #define        O_EXLOCK        0x00000020      /* open with exclusive file lock */
 #define        O_NOFOLLOW      0x00000100      /* don't follow symlinks on the last */
                                        /* path component */
 #endif
-#endif /* !__minix */
+#define        O_CREAT         0x00000200      /* create if nonexistent */
+#define        O_TRUNC         0x00000400      /* truncate to zero length */
+#define        O_EXCL          0x00000800      /* error if already exists */
 
-/* Oflag values for open().  POSIX Table 6-4. */
-#define O_CREAT        00100   /* creat file if it doesn't exist */
-#define O_EXCL         00200   /* exclusive use flag */
-#define O_NOCTTY       00400   /* do not assign a controlling terminal */
-#define O_TRUNC        01000   /* truncate flag */
+/* defined by POSIX 1003.1; BSD default, but required to be bitwise distinct */
+#define        O_NOCTTY        0x00008000      /* don't assign controlling terminal */
 
-#ifndef __minix /* NOT SUPPORTED! */
 #if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
     defined(_NETBSD_SOURCE)
 #define        O_DSYNC         0x00010000      /* write: I/O data completion */
 #define        O_ALT_IO        0x00040000      /* use alternate i/o semantics */
 #define        O_DIRECT        0x00080000      /* direct I/O hint */
 #endif
-#endif /* !__minix */
+
+#define        O_DIRECTORY     0x00200000      /* fail if not a directory */
+#define        O_CLOEXEC       0x00400000      /* set close on exec */
+#if defined(_INCOMPLETE_XOPEN_C063) || defined(_KERNEL)
+#define        O_SEARCH        0x00800000      /* skip search permission checks */
+#endif
+#if defined(_NETBSD_SOURCE)
+#define        O_NOSIGPIPE     0x01000000      /* don't deliver sigpipe */
+#endif
+
+#ifdef __minix
+#define O_REOPEN      0x10000000 /* automatically re-open after driver crash */
+#endif
+
+#ifdef _KERNEL
+/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
+#define        FFLAGS(oflags)  ((oflags) + 1)
+#define        OFLAGS(fflags)  ((fflags) - 1)
+
+/* all bits settable during open(2) */
+#define        O_MASK          (O_ACCMODE|O_NONBLOCK|O_APPEND|O_SHLOCK|O_EXLOCK|\
+                        O_ASYNC|O_SYNC|O_CREAT|O_TRUNC|O_EXCL|O_DSYNC|\
+                        O_RSYNC|O_NOCTTY|O_ALT_IO|O_NOFOLLOW|O_DIRECT|\
+                        O_DIRECTORY|O_CLOEXEC|O_NOSIGPIPE)
+
+#define        FMARK           0x00001000      /* mark during gc() */
+#define        FDEFER          0x00002000      /* defer for next gc pass */
+#define        FHASLOCK        0x00004000      /* descriptor holds advisory lock */
+#define        FSCAN           0x00100000      /* scan during gc passes */
+#define        FSILENT         0x40000000      /* suppress kernel error messages */
+#define        FKIOCTL         0x80000000      /* kernel originated ioctl */
+/* bits settable by fcntl(F_SETFL, ...) */
+#define        FCNTLFLAGS      (FAPPEND|FASYNC|FFSYNC|FNONBLOCK|FDSYNC|FRSYNC|FALTIO|\
+                        FDIRECT|FNOSIGPIPE)
+/* bits to save after open(2) */
+#define        FMASK           (FREAD|FWRITE|FCNTLFLAGS)
+#endif /* _KERNEL */
+
+/*
+ * The O_* flags used to have only F* names, which were used in the kernel
+ * and by fcntl.  We retain the F* names for the kernel f_flags field
+ * and for backward compatibility for fcntl.
+ */
+#if defined(_NETBSD_SOURCE)
+#define        FAPPEND         O_APPEND        /* kernel/compat */
+#define        FASYNC          O_ASYNC         /* kernel/compat */
+#define        O_FSYNC         O_SYNC          /* compat */
+#define        FNDELAY         O_NONBLOCK      /* compat */
+#define        O_NDELAY        O_NONBLOCK      /* compat */
+#endif
+#if defined(_KERNEL)
+#define        FNOSIGPIPE      O_NOSIGPIPE     /* kernel */
+#define        FNONBLOCK       O_NONBLOCK      /* kernel */
+#define        FFSYNC          O_SYNC          /* kernel */
+#define        FDSYNC          O_DSYNC         /* kernel */
+#define        FRSYNC          O_RSYNC         /* kernel */
+#define        FALTIO          O_ALT_IO        /* kernel */
+#define        FDIRECT         O_DIRECT        /* kernel */
+#endif
 
 /*
  * Constants used for fcntl(2)
  */
 
 /* command values */
-/* These values are used for cmd in fcntl().  POSIX Table 6-1.  */
-#define F_DUPFD            0   /* duplicate file descriptor */
-#define F_GETFD                   1    /* get file descriptor flags */
-#define F_SETFD            2   /* set file descriptor flags */
-#define F_GETFL            3   /* get file status flags */
-#define F_SETFL            4   /* set file status flags */
-#define F_GETLK            5   /* get record locking information */
-#define F_SETLK            6   /* set record locking information */
-#define F_SETLKW           7   /* set record locking info; wait if blocked */
-#define F_FREESP           8   /* free a section of a regular file */
+#define        F_DUPFD         0               /* duplicate file descriptor */
+#define        F_GETFD         1               /* get file descriptor flags */
+#define        F_SETFD         2               /* set file descriptor flags */
+#define        F_GETFL         3               /* get file status flags */
+#define        F_SETFL         4               /* set file status flags */
+#if (_POSIX_C_SOURCE - 0) >= 200112L || (_XOPEN_SOURCE - 0) >= 500 || \
+    defined(_NETBSD_SOURCE)
+#define        F_GETOWN        5               /* get SIGIO/SIGURG proc/pgrp */
+#define        F_SETOWN        6               /* set SIGIO/SIGURG proc/pgrp */
+#endif
+#define        F_GETLK         7               /* get record locking information */
+#define        F_SETLK         8               /* set record locking information */
+#define        F_SETLKW        9               /* F_SETLK; wait if blocked */
 #if defined(_NETBSD_SOURCE)
-#define F_GETNOSIGPIPE     9
-#define F_SETNOSIGPIPE    10
+#define        F_CLOSEM        10              /* close all fds >= to the one given */
+#define        F_MAXFD         11              /* return the max open fd */
+#define        F_DUPFD_CLOEXEC 12              /* close on exec duplicated fd */
+#define        F_GETNOSIGPIPE  13              /* get SIGPIPE disposition */
+#define        F_SETNOSIGPIPE  14              /* set SIGPIPE disposition */
 #endif
 
-/* File descriptor flags used for fcntl().  POSIX Table 6-2. */
-#define FD_CLOEXEC         1   /* close on exec flag for third arg of fcntl */
+#ifdef __minix
+#define F_FREESP       100
+#endif
+
+/* file descriptor flags (F_GETFD, F_SETFD) */
+#define        FD_CLOEXEC      1               /* close-on-exec flag */
 
 /* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
-#define F_RDLCK            1   /* shared or read lock */
-#define F_WRLCK            2   /* exclusive or write lock */
-#define F_UNLCK            3   /* unlock */
+#define        F_RDLCK         1               /* shared or read lock */
+#define        F_UNLCK         2               /* unlock */
+#define        F_WRLCK         3               /* exclusive or write lock */
+#ifdef _KERNEL
+#define        F_WAIT          0x010           /* Wait until lock is granted */
+#define        F_FLOCK         0x020           /* Use flock(2) semantics for lock */
+#define        F_POSIX         0x040           /* Use POSIX semantics for lock */
+#endif
+
+/* Constants for fcntl's passed to the underlying fs - like ioctl's. */
+#if defined(_NETBSD_SOURCE)
+#define        F_PARAM_MASK    0xfff
+#define        F_PARAM_LEN(x)  (((x) >> 16) & F_PARAM_MASK)
+#define        F_PARAM_MAX     4095
+#define        F_FSCTL         (int)0x80000000 /* This fcntl goes to the fs */
+#define        F_FSVOID        (int)0x40000000 /* no parameters */
+#define        F_FSOUT         (int)0x20000000 /* copy out parameter */
+#define        F_FSIN          (int)0x10000000 /* copy in parameter */
+#define        F_FSINOUT       (F_FSIN | F_FSOUT)
+#define        F_FSDIRMASK     (int)0x70000000 /* mask for IN/OUT/VOID */
+#define        F_FSPRIV        (int)0x00008000 /* command is fs-specific */
+
+/*
+ * Define command macros for operations which, if implemented, must be
+ * the same for all fs's.
+ */
+#define        _FCN(inout, num, len) \
+               (F_FSCTL | inout | ((len & F_PARAM_MASK) << 16) | (num))
+#define        _FCNO(c)        _FCN(F_FSVOID,  (c), 0)
+#define        _FCNR(c, t)     _FCN(F_FSIN,    (c), (int)sizeof(t))
+#define        _FCNW(c, t)     _FCN(F_FSOUT,   (c), (int)sizeof(t))
+#define        _FCNRW(c, t)    _FCN(F_FSINOUT, (c), (int)sizeof(t))
+
+/*
+ * Define command macros for fs-specific commands.
+ */
+#define        _FCN_FSPRIV(inout, fs, num, len) \
+       (F_FSCTL | F_FSPRIV | inout | ((len & F_PARAM_MASK) << 16) |    \
+        (fs) << 8 | (num))
+#define        _FCNO_FSPRIV(f, c)      _FCN_FSPRIV(F_FSVOID,  (f), (c), 0)
+#define        _FCNR_FSPRIV(f, c, t)   _FCN_FSPRIV(F_FSIN,    (f), (c), (int)sizeof(t))
+#define        _FCNW_FSPRIV(f, c, t)   _FCN_FSPRIV(F_FSOUT,   (f), (c), (int)sizeof(t))
+#define        _FCNRW_FSPRIV(f, c, t)  _FCN_FSPRIV(F_FSINOUT, (f), (c), (int)sizeof(t))
+
+#endif /* _NETBSD_SOURCE */
 
 /*
  * Advisory file segment locking data type -
  * information passed to system by user
  */
 struct flock {
-  short l_type;                        /* type: F_RDLCK, F_WRLCK, or F_UNLCK */
-  short l_whence;              /* flag for starting offset */
-  off_t l_start;               /* relative offset in bytes */
-  off_t l_len;                 /* size; if 0, then until EOF */
-  pid_t l_pid;                 /* process id of the locks' owner */
+       off_t   l_start;        /* starting offset */
+       off_t   l_len;          /* len = 0 means until end of file */
+       pid_t   l_pid;          /* lock owner */
+       short   l_type;         /* lock type: read/write, etc. */
+       short   l_whence;       /* type of l_start */
 };
 
+
 #if defined(_NETBSD_SOURCE)
 /* lock operations for flock(2) */
-#define LOCK_SH                F_RDLCK         /* Shared lock */
-#define LOCK_EX                F_WRLCK         /* Exclusive lock */
-#define LOCK_NB                0x0080          /* Do not block when locking */
-#define LOCK_UN                F_UNLCK         /* Unlock */
+#define        LOCK_SH         0x01            /* shared file lock */
+#define        LOCK_EX         0x02            /* exclusive file lock */
+#define        LOCK_NB         0x04            /* don't block when locking */
+#define        LOCK_UN         0x08            /* unlock file */
 #endif
 
 /* Always ensure that these are consistent with <stdio.h> and <unistd.h>! */
@@ -185,18 +296,14 @@ struct flock {
 
 /*
  * Constants for X/Open Extended API set 2 (a.k.a. C063)
- * linkat(2) - also part of Posix-2008/XPG7
  */
-#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \
-    defined(_NETBSD_SOURCE)
 #if defined(_INCOMPLETE_XOPEN_C063) || defined(_KERNEL) || defined(__minix)
 #define        AT_FDCWD                -100    /* Use cwd for relative link target */
-#define        AT_EACCESS              0x100   /* Use euid/egid for access checks */
+#define        AT_EACCESS              0x100   /* Use euig/egid for access checks */
 #define        AT_SYMLINK_NOFOLLOW     0x200   /* Do not follow symlinks */
 #define        AT_SYMLINK_FOLLOW       0x400   /* Follow symlinks */
 #define        AT_REMOVEDIR            0x800   /* Remove directory only */
 #endif
-#endif
 
 
 #ifndef _KERNEL
@@ -209,7 +316,15 @@ int        fcntl(int, int, ...);
 #if defined(_NETBSD_SOURCE)
 int    flock(int, int);
 #endif /* _NETBSD_SOURCE */
+int    posix_fadvise(int, off_t, off_t, int);
+
+/*
+ * X/Open Extended API set 2 (a.k.a. C063)
+ */
+#if defined(_INCOMPLETE_XOPEN_C063)
+int    openat(int, const char *, int oflags, ...);
+#endif
 __END_DECLS
-#endif /* _KERNEL */
+#endif /* !_KERNEL */
 
 #endif /* !_SYS_FCNTL_H_ */
index b85abb839b2ef0b93b29c6a547f11be46e2d0508..9aa867f8efc5c857bfa3bcda8ed63b7f044346bc 100644 (file)
@@ -13,7 +13,7 @@
  * used in each header file are shown in the comment following.
  */
 
-#include <sys/ioc_tty.h>       /* 'T' 't' 'k'          */
+#include <sys/ttycom.h>                /* 't'                  */
 #include <sys/ioc_net.h>       /* 'n'                  */
 #include <sys/ioc_disk.h>      /* 'd'                  */
 #include <sys/ioc_file.h>      /* 'f'                  */
 #include <sys/ioc_fb.h>                /* 'V'                  */
 #include <dev/vndvar.h>                /* 'F'                  */
 
-#if defined(_NETBSD_SOURCE)
-#define                TIOCDRAIN       TCDRAIN
-#define                TIOCGETA        TCGETS
-#define                TIOCSETA        TCSETS
-#define                TIOCSETAW       TCSETSW
-#define                TIOCSETAF       TCSETSF
-#endif
+#define TIOCGSIZE       TIOCGWINSZ
+#define TIOCSSIZE       TIOCSWINSZ
 
 #endif /* _S_IOCTL_H */
index 4542caccdda0621525cf29adc6071aa76c6ab8ee..913bf9c823c7a9e5fb7909d109a478f8e8cceb64 100644 (file)
@@ -42,7 +42,7 @@
 #include <sys/featuretest.h>
 #include <sys/sigtypes.h>
 
-#define _NSIG          26
+#define _NSIG          27
 #define NSIG _NSIG
 
 
@@ -67,6 +67,7 @@
 #define SIGWINCH         21    /* window size has changed */
 #define SIGVTALRM         24   /* virtual alarm */
 #define SIGPROF           25   /* profiler alarm */
+#define SIGINFO           26    /* information request */
 
 /* POSIX requires the following signals to be defined, even if they are
  * not supported.  Here are the definitions, but they are not supported.
  * processes in user-space. Higher-priority signals should be first.
  */
 /* Signals delivered by a signal manager. */
-#define SIGSNDELAY       26    /* end of delay for signal delivery */
+#define SIGSNDELAY       27    /* end of delay for signal delivery */
 
 #define SIGS_FIRST       SIGHUP      /* first system signal */
 #define SIGS_LAST        SIGSNDELAY   /* last system signal */
 #define IS_SIGS(signo)    (signo>=SIGS_FIRST && signo<=SIGS_LAST)
 
 /* Signals delivered by the kernel. */
-#define SIGKMEM                  27    /* kernel memory request pending */
-#define SIGKMESS         28    /* new kernel message */
-#define SIGKSIGSM        29    /* kernel signal pending for signal manager */
-#define SIGKSIG          30    /* kernel signal pending */
+#define SIGKMEM                  28    /* kernel memory request pending */
+#define SIGKMESS         29    /* new kernel message */
+#define SIGKSIGSM        30    /* kernel signal pending for signal manager */
+#define SIGKSIG          31    /* kernel signal pending */
 
 #define SIGK_FIRST       SIGKMEM      /* first kernel signal */
 #define SIGK_LAST        SIGKSIG     /* last kernel signal */
index 3afac268f36ad0f94c6e41c20ae77a274c851f3e..6f85f957102b59e14edd4f6aa79bdb12be1581c0 100644 (file)
 #ifndef _SYS_TERMIOS_H_
 #define _SYS_TERMIOS_H_
 
-#include <sys/cdefs.h>
+#include <sys/ansi.h>
+#include <sys/featuretest.h>
+
+/*
+ * Special Control Characters
+ *
+ * Index into c_cc[] character array.
+ *
+ *     Name         Subscript  Enabled by
+ */
+#define        VEOF            0       /* ICANON */
+#define        VEOL            1       /* ICANON */
+#if defined(_NETBSD_SOURCE)
+#define        VEOL2           2       /* ICANON */
+#endif
+#define        VERASE          3       /* ICANON */
+#if defined(_NETBSD_SOURCE)
+#define VWERASE        4       /* ICANON */
+#endif
+#define VKILL          5       /* ICANON */
+#if defined(_NETBSD_SOURCE)
+#define        VREPRINT        6       /* ICANON */
+#endif
+/*                     7          spare 1 */
+#define VINTR          8       /* ISIG */
+#define VQUIT          9       /* ISIG */
+#define VSUSP          10      /* ISIG */
+#if defined(_NETBSD_SOURCE)
+#define VDSUSP         11      /* ISIG */
+#endif
+#define VSTART         12      /* IXON, IXOFF */
+#define VSTOP          13      /* IXON, IXOFF */
+#if defined(_NETBSD_SOURCE)
+#define        VLNEXT          14      /* IEXTEN */
+#define        VDISCARD        15      /* IEXTEN */
+#endif
+#define VMIN           16      /* !ICANON */
+#define VTIME          17      /* !ICANON */
+#if defined(_NETBSD_SOURCE)
+#define VSTATUS                18      /* ICANON */
+/*                     19         spare 2 */
+#endif
+#define        NCCS            20
+
+#define _POSIX_VDISABLE        __CAST(unsigned char, '\377')
+
+#if defined(_NETBSD_SOURCE)
+#define CCEQ(val, c)   (c == val ? val != _POSIX_VDISABLE : 0)
+#endif
 
-#include <minix/termios.h>
+/*
+ * Input flags - software input processing
+ */
+#define        IGNBRK          0x00000001      /* ignore BREAK condition */
+#define        BRKINT          0x00000002      /* map BREAK to SIGINT */
+#define        IGNPAR          0x00000004      /* ignore (discard) parity errors */
+#define        PARMRK          0x00000008      /* mark parity and framing 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        IXOFF           0x00000400      /* enable input flow control */
+#if defined(_NETBSD_SOURCE)
+#define        IXANY           0x00000800      /* any char will restart after stop */
+#endif
+#if defined(_NETBSD_SOURCE)
+#define IMAXBEL                0x00002000      /* ring bell on input queue full */
+#endif
+
+#ifdef __minix
+#define SCANCODES       0x00001000  /* send scancodes */
+#endif
+
+/*
+ * Output flags - software output processing
+ */
+#define        OPOST           0x00000001      /* enable following output processing */
+#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
+#define ONLCR          0x00000002      /* map NL to CR-NL (ala CRMOD) */
+#endif
+#if defined(_NETBSD_SOURCE)
+#define OXTABS         0x00000004      /* expand tabs to spaces */
+#define ONOEOT         0x00000008      /* discard EOT's (^D) on output */
+#endif
+#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
+#define OCRNL          0x00000010      /* map CR to NL */
+#define ONOCR          0x00000020      /* discard CR's when on column 0 */
+#define ONLRET         0x00000040      /* move to column 0 on CR */
+#endif  /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
+
+/*
+ * Control flags - hardware control of terminal
+ */
+#if defined(_NETBSD_SOURCE)
+#define        CIGNORE         0x00000001      /* ignore control flags */
+#endif
+#define CSIZE          0x00000300      /* character size mask */
+#define     CS5                    0x00000000      /* 5 bits (pseudo) */
+#define     CS6                    0x00000100      /* 6 bits */
+#define     CS7                    0x00000200      /* 7 bits */
+#define     CS8                    0x00000300      /* 8 bits */
+#define CSTOPB         0x00000400      /* send 2 stop bits */
+#define CREAD          0x00000800      /* enable receiver */
+#define PARENB         0x00001000      /* parity enable */
+#define PARODD         0x00002000      /* odd parity, else even */
+#define HUPCL          0x00004000      /* hang up on last close */
+#define CLOCAL         0x00008000      /* ignore modem status lines */
+#if defined(_NETBSD_SOURCE)
+#define        CRTSCTS         0x00010000      /* RTS/CTS full-duplex flow control */
+#define        CRTS_IFLOW      CRTSCTS         /* XXX compat */
+#define        CCTS_OFLOW      CRTSCTS         /* XXX compat */
+#define        CDTRCTS         0x00020000      /* DTR/CTS full-duplex flow control */
+#define        MDMBUF          0x00100000      /* DTR/DCD hardware flow control */
+#define        CHWFLOW         (MDMBUF|CRTSCTS|CDTRCTS) /* all types of hw flow control */
+#endif
+
+
+/*
+ * "Local" flags - dumping ground for other state
+ *
+ * Warning: some flags in this structure begin with
+ * the letter "I" and look like they belong in the
+ * input flag.
+ */
+
+#if defined(_NETBSD_SOURCE)
+#define        ECHOKE          0x00000001      /* visual erase for line kill */
+#endif
+#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 */
+#if defined(_NETBSD_SOURCE)
+#define        ECHOPRT         0x00000020      /* visual erase mode for hardcopy */
+#define ECHOCTL        0x00000040      /* echo control chars as ^(Char) */
+#endif  /* defined(_NETBSD_SOURCE) */
+#define        ISIG            0x00000080      /* enable signals INT, QUIT, [D]SUSP */
+#define        ICANON          0x00000100      /* canonicalize input lines */
+#if defined(_NETBSD_SOURCE)
+#define ALTWERASE      0x00000200      /* use alternate WERASE algorithm */
+#endif /* defined(_NETBSD_SOURCE) */
+#define        IEXTEN          0x00000400      /* enable DISCARD and LNEXT */
+#if defined(_NETBSD_SOURCE)
+#define EXTPROC         0x00000800      /* external processing */
+#endif /* defined(_NETBSD_SOURCE) */
+#define TOSTOP         0x00400000      /* stop background jobs on output */
+#if defined(_NETBSD_SOURCE)
+#define FLUSHO         0x00800000      /* output being flushed (state) */
+#define        NOKERNINFO      0x02000000      /* no kernel output from VSTATUS */
+#define PENDIN         0x20000000      /* re-echo input buffer at next read */
+#endif /* defined(_NETBSD_SOURCE) */
+#define        NOFLSH          0x80000000      /* don't flush output on signal */
+
+typedef unsigned int   tcflag_t;
+typedef unsigned char  cc_t;
+typedef unsigned int   speed_t;
+
+struct termios {
+       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 */
+       int             c_ispeed;       /* input speed */
+       int             c_ospeed;       /* output speed */
+};
+
+/*
+ * Commands passed to tcsetattr() for setting the termios structure.
+ */
+#define        TCSANOW         0               /* make change immediate */
+#define        TCSADRAIN       1               /* drain output, then change */
+#define        TCSAFLUSH       2               /* drain output, flush input */
+#if defined(_NETBSD_SOURCE)
+#define TCSASOFT       0x10            /* flag - don't alter h.w. state */
+#endif
+
+/*
+ * Standard speeds
+ */
+#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
+#if defined(_NETBSD_SOURCE)
+#define B7200  7200
+#define B14400 14400
+#define B28800 28800
+#define B57600 57600
+#define B76800 76800
+#define B115200        115200
+#define B230400        230400
+#define B460800        460800
+#define B921600        921600
+#define EXTA   19200
+#define EXTB   38400
+#endif  /* defined(_NETBSD_SOURCE) */
+
+#ifndef _KERNEL
+
+#define        TCIFLUSH        1
+#define        TCOFLUSH        2
+#define TCIOFLUSH      3
+#define        TCOOFF          1
+#define        TCOON           2
+#define TCIOFF         3
+#define TCION          4
+
+#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
+#ifndef        pid_t
+typedef        __pid_t         pid_t;
+#define        pid_t           __pid_t
+#endif
+#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
+#include <sys/cdefs.h>
 
 __BEGIN_DECLS
+speed_t        cfgetispeed(const struct termios *);
+speed_t        cfgetospeed(const struct termios *);
+int    cfsetispeed(struct termios *, speed_t);
+int    cfsetospeed(struct termios *, speed_t);
+int    tcgetattr(int, struct termios *);
+int    tcsetattr(int, int, const struct termios *);
+int    tcdrain(int);
+int    tcflow(int, int);
+int    tcflush(int, int);
+int    tcsendbreak(int, int);
+#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
+pid_t  tcgetsid(int);
+#endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
+
+
 #if defined(_NETBSD_SOURCE)
 void   cfmakeraw(struct termios *);
 int    cfsetspeed(struct termios *, speed_t);
 #endif /* defined(_NETBSD_SOURCE) */
 __END_DECLS
 
+#endif /* !_KERNEL */
+
+#if defined(_NETBSD_SOURCE)
+
+/*
+ * Include tty ioctl's that aren't just for backwards compatibility
+ * with the old tty driver.  These ioctl definitions were previously
+ * in <sys/ioctl.h>.
+ */
+#include <sys/ttycom.h>
+#endif
+
+/*
+ * END OF PROTECTED INCLUDE.
+ */
 #endif /* !_SYS_TERMIOS_H_ */
 
 #if defined(_NETBSD_SOURCE)
index 2a1b643b03c390298430db327f89f7065037b245..efffe8ffee7e96e8131e2b9e544b3b3895f2ad12 100644 (file)
  *
  *     @(#)ttycom.h    8.1 (Berkeley) 3/28/94
  */
-#include <minix/termios.h>
-
-/* LSC FIXME: Wouldn't it be simpler to use that instead of including here 
-   termios? for now disabled, pending investigation. */
-#define _SYS_TTYCOM_H_
 
 #ifndef        _SYS_TTYCOM_H_
 #define        _SYS_TTYCOM_H_
@@ -168,4 +163,21 @@ typedef char linedn_t[TTLINEDNAMELEN];
 #define        STRIPDISC       6               /* metricom wireless IP discipline */
 #define        HDLCDISC        9               /* HDLC discipline */
 
+#ifdef __minix
+
+#include <minix/ioctl.h>
+
+/* Terminal ioctls. Use big T. */
+#define TIOCSFON        _IOW_BIG(1, u8_t [8192])       /* new font */
+
+/* Keyboard ioctls. */
+#define KIOCBELL        _IOW('k', 1, struct kio_bell)
+#define KIOCSLEDS       _IOW('k', 2, struct kio_leds)
+#define KIOCSMAP        _IOW('k', 3, keymap_t)
+
+/* /dev/video ioctls. */
+#define TIOCMAPMEM      _IORW('v', 1, struct mapreqvm)
+#define TIOCUNMAPMEM    _IORW('v', 2, struct mapreqvm)
+#endif
+
 #endif /* !_SYS_TTYCOM_H_ */
index a4e2e1af5f11b813df399f8126c6bc4f573f47dc..627da0712de347af8b280a34349c0190498220cb 100644 (file)
 #define TTYDEF_OFLAG   (OPOST | ONLCR )
 #define TTYDEF_LFLAG   (ECHO | ICANON | ISIG | IEXTEN | ECHOE)
 #define TTYDEF_CFLAG   (CREAD | CS8 | HUPCL)
+#ifdef __minix
+#define TTYDEF_SPEED   (B115200)
+#else
 #define TTYDEF_SPEED   (B9600)
+#endif
 
 /*
  * Control Character Defaults
index 581708e04f68ca9379baf84151b396ef7dbd58f2..62633ba1fd23eef3040d15dd59b4fe2ed1bef605 100644 (file)
@@ -41,8 +41,9 @@ __RCSID("$NetBSD: infocmp.c,v 1.7 2010/02/22 23:05:39 roy Exp $");
 #include <term.h>
 #include <unistd.h>
 
-/* Specifically needed on MINIX, as struct winsize in not defined elsewhere */
-#include <minix/termios.h>
+#ifdef __minix
+#include <sys/ttycom.h>
+#endif
 
 #define SW 8
 
index 0c66128dcd328a056c91c7f22b8dbc8f1cbb23b3..04c7d7c84b0a6f33d5562d887c52a78df36496c8 100644 (file)
@@ -84,9 +84,6 @@ __RCSID("$NetBSD: process.c,v 1.38 2009/04/13 07:29:55 lukem Exp $");
 #include <sys/stat.h>
 #include <sys/ioctl.h>
 #include <sys/uio.h>
-#ifdef __minix
-#include <minix/termios.h>
-#endif
 #include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -97,6 +94,10 @@ __RCSID("$NetBSD: process.c,v 1.38 2009/04/13 07:29:55 lukem Exp $");
 #include <string.h>
 #include <unistd.h>
 
+#ifdef __minix
+#include <sys/ttycom.h>
+#endif
+
 #include "defs.h"
 #include "extern.h"
 
index a6e5654e532906b3cce0a7026beac6d9f8e19ab1..49f604f1e163ea60e368d7ded6657af5adc7a629 100644 (file)
@@ -19,7 +19,7 @@
 #include <dirent.h>
 #include <assert.h>
 
-#include <sys/ioc_tty.h>
+#include <sys/ttycom.h>
 #include <sys/times.h>
 #include <sys/types.h>
 #include <sys/time.h>