diff --git a/bin/Makefile b/bin/Makefile index 1d2a3c8a2..94699f456 100644 --- a/bin/Makefile +++ b/bin/Makefile @@ -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 diff --git a/bin/stty/Makefile b/bin/stty/Makefile new file mode 100644 index 000000000..546ee3f26 --- /dev/null +++ b/bin/stty/Makefile @@ -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 diff --git a/bin/stty/cchar.c b/bin/stty/cchar.c new file mode 100644 index 000000000..ad88c760d --- /dev/null +++ b/bin/stty/cchar.c @@ -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 +#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 + +#include +#include +#include +#include +#include + +#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("")) + 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 index 000000000..c26916cd7 --- /dev/null +++ b/bin/stty/extern.h @@ -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 index 000000000..55ec0c285 --- /dev/null +++ b/bin/stty/gfmt.c @@ -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 +#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 + +#include +#include +#include + +#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 index 000000000..bf24c21b9 --- /dev/null +++ b/bin/stty/key.c @@ -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 +#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 + +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 000000000..8ffffbf2e --- /dev/null +++ b/bin/stty/modes.c @@ -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 +#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 + +#include +#include + +#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 index 000000000..135df9afc --- /dev/null +++ b/bin/stty/print.c @@ -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 +#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 + +#include +#include +#include + +#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 (""); + + 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 index 000000000..433e78875 --- /dev/null +++ b/bin/stty/stty.1 @@ -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 index 000000000..e4a59521c --- /dev/null +++ b/bin/stty/stty.c @@ -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 +#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 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 index 000000000..4f0c59e39 --- /dev/null +++ b/bin/stty/stty.h @@ -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 +#include + +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_ */ diff --git a/commands/Makefile b/commands/Makefile index 58a17cc56..71ecfceaf 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -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 index 28670239b..000000000 --- a/commands/stty/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROG= stty -MAN= - -.include diff --git a/commands/stty/stty.c b/commands/stty/stty.c deleted file mode 100644 index 8e8f6c65e..000000000 --- a/commands/stty/stty.c +++ /dev/null @@ -1,1270 +0,0 @@ -/* stty - set terminal mode Author: Andy Tanenbaum */ - -/* - Adapted to POSIX 1003.2 by Philip Homburg. - */ - -#include -#include -#include -#include -#include -#include -#include -#ifdef __minix -#include -#include -#endif -#include - -/* Default settings, the Minix ones are defined in */ - -#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; ins == 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 = ", 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= 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 $ - */ diff --git a/distrib/sets/lists/minix/mi b/distrib/sets/lists/minix/mi index f6b1ed75d..d924283b0 100644 --- a/distrib/sets/lists/minix/mi +++ b/distrib/sets/lists/minix/mi @@ -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 @@ -501,7 +502,7 @@ ./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 @@ -1455,7 +1456,7 @@ ./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 diff --git a/drivers/tty/arch/earm/console.c b/drivers/tty/arch/earm/console.c index d2360b2aa..8eb588316 100644 --- a/drivers/tty/arch/earm/console.c +++ b/drivers/tty/arch/earm/console.c @@ -1,6 +1,6 @@ /* Console unsupport for ARM. Just stubs. */ #include -#include +#include #include "tty.h" void diff --git a/drivers/tty/arch/earm/keyboard.c b/drivers/tty/arch/earm/keyboard.c index 474df386f..fd11bde51 100644 --- a/drivers/tty/arch/earm/keyboard.c +++ b/drivers/tty/arch/earm/keyboard.c @@ -1,6 +1,6 @@ /* Keyboard unsupport for ARM. Just stubs. */ #include -#include +#include #include "tty.h" void diff --git a/drivers/tty/arch/earm/rs232.c b/drivers/tty/arch/earm/rs232.c index d8bde82f3..23a2e7fec 100644 --- a/drivers/tty/arch/earm/rs232.c +++ b/drivers/tty/arch/earm/rs232.c @@ -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 */ } diff --git a/drivers/tty/arch/i386/console.c b/drivers/tty/arch/i386/console.c index ab880b7fd..efb49e852 100644 --- a/drivers/tty/arch/i386/console.c +++ b/drivers/tty/arch/i386/console.c @@ -18,10 +18,16 @@ #include #include +#include #include #include #include #include +#include +#include +#include +#include +#include #include "tty.h" /* Set this to 1 if you want console output duplicated on the first diff --git a/drivers/tty/arch/i386/keyboard.c b/drivers/tty/arch/i386/keyboard.c index 30985ddc2..26f5d4baa 100644 --- a/drivers/tty/arch/i386/keyboard.c +++ b/drivers/tty/arch/i386/keyboard.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/drivers/tty/arch/i386/rs232.c b/drivers/tty/arch/i386/rs232.c index 7f73d9b1a..7b339e72d 100644 --- a/drivers/tty/arch/i386/rs232.c +++ b/drivers/tty/arch/i386/rs232.c @@ -5,7 +5,7 @@ *---------------------------------------------------------------------------*/ #include -#include +#include #include #include "tty.h" @@ -29,6 +29,10 @@ #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 */ } diff --git a/drivers/tty/keymaps/abnt2.src b/drivers/tty/keymaps/abnt2.src index f5c7e792d..391b29a09 100644 --- a/drivers/tty/keymaps/abnt2.src +++ b/drivers/tty/keymaps/abnt2.src @@ -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 }, diff --git a/drivers/tty/keymaps/dvorak.src b/drivers/tty/keymaps/dvorak.src index 659d5942a..c5e8c5b89 100644 --- a/drivers/tty/keymaps/dvorak.src +++ b/drivers/tty/keymaps/dvorak.src @@ -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 }, diff --git a/drivers/tty/keymaps/french.src b/drivers/tty/keymaps/french.src index 2cc6c776d..921b8d639 100644 --- a/drivers/tty/keymaps/french.src +++ b/drivers/tty/keymaps/french.src @@ -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 }, diff --git a/drivers/tty/keymaps/german.src b/drivers/tty/keymaps/german.src index 93ddbf6bd..50a83cada 100644 --- a/drivers/tty/keymaps/german.src +++ b/drivers/tty/keymaps/german.src @@ -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 }, diff --git a/drivers/tty/keymaps/italian.src b/drivers/tty/keymaps/italian.src index 5d4d550e8..13f9b2cbf 100644 --- a/drivers/tty/keymaps/italian.src +++ b/drivers/tty/keymaps/italian.src @@ -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 }, diff --git a/drivers/tty/keymaps/japanese.src b/drivers/tty/keymaps/japanese.src index 9a5c5482c..a21571b5d 100644 --- a/drivers/tty/keymaps/japanese.src +++ b/drivers/tty/keymaps/japanese.src @@ -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 }, diff --git a/drivers/tty/keymaps/norwegian.src b/drivers/tty/keymaps/norwegian.src index f81b09472..20abae0d2 100644 --- a/drivers/tty/keymaps/norwegian.src +++ b/drivers/tty/keymaps/norwegian.src @@ -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 }, diff --git a/drivers/tty/keymaps/polish.src b/drivers/tty/keymaps/polish.src index 5a84ff4be..215ba4f6a 100644 --- a/drivers/tty/keymaps/polish.src +++ b/drivers/tty/keymaps/polish.src @@ -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 }, diff --git a/drivers/tty/keymaps/portuguese.src b/drivers/tty/keymaps/portuguese.src index c45bfc261..57865b3f4 100644 --- a/drivers/tty/keymaps/portuguese.src +++ b/drivers/tty/keymaps/portuguese.src @@ -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 }, diff --git a/drivers/tty/keymaps/russian-cp1251.src b/drivers/tty/keymaps/russian-cp1251.src index 146557195..7645bfea2 100755 --- a/drivers/tty/keymaps/russian-cp1251.src +++ b/drivers/tty/keymaps/russian-cp1251.src @@ -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 }, diff --git a/drivers/tty/keymaps/russian-cp866.src b/drivers/tty/keymaps/russian-cp866.src index fd5120c1e..ea0804690 100644 --- a/drivers/tty/keymaps/russian-cp866.src +++ b/drivers/tty/keymaps/russian-cp866.src @@ -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 }, diff --git a/drivers/tty/keymaps/russian.src b/drivers/tty/keymaps/russian.src index ed6922e6e..1a511fdb0 100644 --- a/drivers/tty/keymaps/russian.src +++ b/drivers/tty/keymaps/russian.src @@ -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 }, diff --git a/drivers/tty/keymaps/scandinavian.src b/drivers/tty/keymaps/scandinavian.src index 868038245..b409e9b58 100644 --- a/drivers/tty/keymaps/scandinavian.src +++ b/drivers/tty/keymaps/scandinavian.src @@ -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 }, diff --git a/drivers/tty/keymaps/spanish.src b/drivers/tty/keymaps/spanish.src index 2ccacadeb..48a53a3e5 100644 --- a/drivers/tty/keymaps/spanish.src +++ b/drivers/tty/keymaps/spanish.src @@ -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 }, diff --git a/drivers/tty/keymaps/uk.src b/drivers/tty/keymaps/uk.src index 037dae4db..869fcc8a7 100644 --- a/drivers/tty/keymaps/uk.src +++ b/drivers/tty/keymaps/uk.src @@ -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 }, diff --git a/drivers/tty/keymaps/ukraine-koi8-u.src b/drivers/tty/keymaps/ukraine-koi8-u.src index 9f03266dd..e1f057bc6 100755 --- a/drivers/tty/keymaps/ukraine-koi8-u.src +++ b/drivers/tty/keymaps/ukraine-koi8-u.src @@ -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 }, diff --git a/drivers/tty/keymaps/us-std.src b/drivers/tty/keymaps/us-std.src index f4f4a7abd..9f2ae876e 100644 --- a/drivers/tty/keymaps/us-std.src +++ b/drivers/tty/keymaps/us-std.src @@ -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 }, diff --git a/drivers/tty/keymaps/us-swap.src b/drivers/tty/keymaps/us-swap.src index f42ab3f5d..062c5ccbf 100644 --- a/drivers/tty/keymaps/us-swap.src +++ b/drivers/tty/keymaps/us-swap.src @@ -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 }, diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c index 22b108f42..3e46d7548 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c @@ -18,6 +18,8 @@ #include #include +#include +#include #include #include "tty.h" diff --git a/drivers/tty/tty.c b/drivers/tty/tty.c index 793e61a2e..f73becfc5 100644 --- a/drivers/tty/tty.c +++ b/drivers/tty/tty.c @@ -26,8 +26,10 @@ #include #include #include -#include #include +#include +#include +#include #include #include #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)); diff --git a/drivers/tty/tty.h b/drivers/tty/tty.h index cd39700ea..ffde3006c 100644 --- a/drivers/tty/tty.h +++ b/drivers/tty/tty.h @@ -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 */ diff --git a/external/bsd/kyua-cli/dist/utils/cmdline/ui.hpp b/external/bsd/kyua-cli/dist/utils/cmdline/ui.hpp index 6849dfcb7..9a552cc2e 100644 --- a/external/bsd/kyua-cli/dist/utils/cmdline/ui.hpp +++ b/external/bsd/kyua-cli/dist/utils/cmdline/ui.hpp @@ -36,7 +36,7 @@ #include #if defined(__minix) -#include +#include #endif /* defined(__minix) */ #include "utils/optional.hpp" diff --git a/include/minix/Makefile b/include/minix/Makefile index f0c8f3f2f..d4c119944 100644 --- a/include/minix/Makefile +++ b/include/minix/Makefile @@ -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 \ diff --git a/include/minix/keymap.h b/include/minix/keymap.h index 78802ffdf..a6a2d746a 100644 --- a/include/minix/keymap.h +++ b/include/minix/keymap.h @@ -12,15 +12,15 @@ #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 @@ -71,18 +71,18 @@ #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 */ @@ -118,18 +118,18 @@ #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 index e41ef24ff..000000000 --- a/include/minix/termios.h +++ /dev/null @@ -1,210 +0,0 @@ -/* The 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 */ diff --git a/include/sys/Makefile b/include/sys/Makefile index e6084b23f..e7ad3ae2b 100644 --- a/include/sys/Makefile +++ b/include/sys/Makefile @@ -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 index 3eace9572..000000000 --- a/include/sys/ioc_tty.h +++ /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 - -/* 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 */ diff --git a/lib/libc/termios/tcflow.c b/lib/libc/termios/tcflow.c index 9ddb8eb2b..5ca0ef39e 100644 --- a/lib/libc/termios/tcflow.c +++ b/lib/libc/termios/tcflow.c @@ -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 */ } diff --git a/lib/libc/termios/tcflush.c b/lib/libc/termios/tcflush.c index 1a75bcbd0..fd1384014 100644 --- a/lib/libc/termios/tcflush.c +++ b/lib/libc/termios/tcflush.c @@ -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 */ } diff --git a/lib/libc/termios/tcsendbreak.c b/lib/libc/termios/tcsendbreak.c index dfb6e9c56..3a03f9095 100644 --- a/lib/libc/termios/tcsendbreak.c +++ b/lib/libc/termios/tcsendbreak.c @@ -40,10 +40,11 @@ __RCSID("$NetBSD: tcsendbreak.c,v 1.10 2012/06/25 22:32:46 abs Exp $"); #include "namespace.h" #include -#include -#ifndef __minix +#ifdef __minix #include -#endif /* !__minix */ +#endif +#include +#include #include #include @@ -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 */ } diff --git a/lib/libc/termios/tcsetattr.c b/lib/libc/termios/tcsetattr.c index 1079da160..dd7983da5 100644 --- a/lib/libc/termios/tcsetattr.c +++ b/lib/libc/termios/tcsetattr.c @@ -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))); diff --git a/lib/libedit/terminal.c b/lib/libedit/terminal.c index c4a2543e4..47681f4c1 100644 --- a/lib/libedit/terminal.c +++ b/lib/libedit/terminal.c @@ -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; } diff --git a/man/man1/Makefile b/man/man1/Makefile index f56314449..4a7bdeaab 100644 --- a/man/man1/Makefile +++ b/man/man1/Makefile @@ -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 index a09b4cc86..000000000 --- a/man/man1/stty.1 +++ /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 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 diff --git a/releasetools/nbsd_ports b/releasetools/nbsd_ports index da1fd1e32..6d9388c77 100644 --- a/releasetools/nbsd_ports +++ b/releasetools/nbsd_ports @@ -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 diff --git a/sbin/newfs_ext2fs/mke2fs.c b/sbin/newfs_ext2fs/mke2fs.c index 53c9cfa9b..71ae78671 100644 --- a/sbin/newfs_ext2fs/mke2fs.c +++ b/sbin/newfs_ext2fs/mke2fs.c @@ -128,7 +128,7 @@ __RCSID("$NetBSD: mke2fs.c,v 1.14 2010/09/10 15:51:20 tsutsui Exp $"); #include #include #include -#include +#include #include "extern.h" diff --git a/servers/pm/main.c b/servers/pm/main.c index 4176557c2..fa62b80fe 100644 --- a/servers/pm/main.c +++ b/servers/pm/main.c @@ -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; diff --git a/servers/pm/signal.c b/servers/pm/signal.c index 8d2720a9a..c498018ed 100644 --- a/servers/pm/signal.c +++ b/servers/pm/signal.c @@ -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: diff --git a/servers/vfs/device.c b/servers/vfs/device.c index 9e45d425c..13d9435a3 100644 --- a/servers/vfs/device.c +++ b/servers/vfs/device.c @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/sys/sys/fcntl.h b/sys/sys/fcntl.h index 0fab6a5bc..b8cce9577 100644 --- a/sys/sys/fcntl.h +++ b/sys/sys/fcntl.h @@ -66,18 +66,20 @@ #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 */ @@ -92,15 +94,13 @@ #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 */ @@ -111,54 +111,165 @@ #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 and ! */ @@ -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_ */ diff --git a/sys/sys/ioctl.h b/sys/sys/ioctl.h index b85abb839..9aa867f8e 100644 --- a/sys/sys/ioctl.h +++ b/sys/sys/ioctl.h @@ -13,7 +13,7 @@ * used in each header file are shown in the comment following. */ -#include /* 'T' 't' 'k' */ +#include /* 't' */ #include /* 'n' */ #include /* 'd' */ #include /* 'f' */ @@ -25,12 +25,7 @@ #include /* 'V' */ #include /* '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 */ diff --git a/sys/sys/signal.h b/sys/sys/signal.h index 4542caccd..913bf9c82 100644 --- a/sys/sys/signal.h +++ b/sys/sys/signal.h @@ -42,7 +42,7 @@ #include #include -#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. @@ -86,17 +87,17 @@ * 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 */ diff --git a/sys/sys/termios.h b/sys/sys/termios.h index 3afac268f..6f85f9571 100644 --- a/sys/sys/termios.h +++ b/sys/sys/termios.h @@ -34,17 +34,273 @@ #ifndef _SYS_TERMIOS_H_ #define _SYS_TERMIOS_H_ +#include +#include + +/* + * 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 + +/* + * 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 -#include - __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 . + */ +#include +#endif + +/* + * END OF PROTECTED INCLUDE. + */ #endif /* !_SYS_TERMIOS_H_ */ #if defined(_NETBSD_SOURCE) diff --git a/sys/sys/ttycom.h b/sys/sys/ttycom.h index 2a1b643b0..efffe8ffe 100644 --- a/sys/sys/ttycom.h +++ b/sys/sys/ttycom.h @@ -35,11 +35,6 @@ * * @(#)ttycom.h 8.1 (Berkeley) 3/28/94 */ -#include - -/* 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 + +/* 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_ */ diff --git a/sys/sys/ttydefaults.h b/sys/sys/ttydefaults.h index a4e2e1af5..627da0712 100644 --- a/sys/sys/ttydefaults.h +++ b/sys/sys/ttydefaults.h @@ -49,7 +49,11 @@ #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 diff --git a/usr.bin/infocmp/infocmp.c b/usr.bin/infocmp/infocmp.c index 581708e04..62633ba1f 100644 --- a/usr.bin/infocmp/infocmp.c +++ b/usr.bin/infocmp/infocmp.c @@ -41,8 +41,9 @@ __RCSID("$NetBSD: infocmp.c,v 1.7 2010/02/22 23:05:39 roy Exp $"); #include #include -/* Specifically needed on MINIX, as struct winsize in not defined elsewhere */ -#include +#ifdef __minix +#include +#endif #define SW 8 diff --git a/usr.bin/sed/process.c b/usr.bin/sed/process.c index 0c66128dc..04c7d7c84 100644 --- a/usr.bin/sed/process.c +++ b/usr.bin/sed/process.c @@ -84,9 +84,6 @@ __RCSID("$NetBSD: process.c,v 1.38 2009/04/13 07:29:55 lukem Exp $"); #include #include #include -#ifdef __minix -#include -#endif #include #include #include @@ -97,6 +94,10 @@ __RCSID("$NetBSD: process.c,v 1.38 2009/04/13 07:29:55 lukem Exp $"); #include #include +#ifdef __minix +#include +#endif + #include "defs.h" #include "extern.h" diff --git a/usr.bin/top/top.c b/usr.bin/top/top.c index a6e5654e5..49f604f1e 100644 --- a/usr.bin/top/top.c +++ b/usr.bin/top/top.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include