summaryrefslogtreecommitdiffstats
path: root/contrib/tcsh/ed.term.c
diff options
context:
space:
mode:
authormp <mp@FreeBSD.org>2009-07-10 21:00:38 +0000
committermp <mp@FreeBSD.org>2009-07-10 21:00:38 +0000
commit5c3d0e09d7926f4fe8b7ca838a2ed52b6e33e4b5 (patch)
treedae2d3ff4ed630baaed92bc0340cb55a8c9b01cd /contrib/tcsh/ed.term.c
parente863b68dceedacef4fea511d5f1e2c5666b2b2ee (diff)
downloadFreeBSD-src-5c3d0e09d7926f4fe8b7ca838a2ed52b6e33e4b5.zip
FreeBSD-src-5c3d0e09d7926f4fe8b7ca838a2ed52b6e33e4b5.tar.gz
Flatten vendor/tcsh/dist.
Diffstat (limited to 'contrib/tcsh/ed.term.c')
-rw-r--r--contrib/tcsh/ed.term.c1140
1 files changed, 0 insertions, 1140 deletions
diff --git a/contrib/tcsh/ed.term.c b/contrib/tcsh/ed.term.c
deleted file mode 100644
index a235e11..0000000
--- a/contrib/tcsh/ed.term.c
+++ /dev/null
@@ -1,1140 +0,0 @@
-/* $Header: /p/tcsh/cvsroot/tcsh/ed.term.c,v 1.36 2006/03/02 18:46:44 christos Exp $ */
-/*
- * ed.term.c: Low level terminal interface
- */
-/*-
- * Copyright (c) 1980, 1991 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 "sh.h"
-#ifndef WINNT_NATIVE
-
-RCSID("$tcsh: ed.term.c,v 1.36 2006/03/02 18:46:44 christos Exp $")
-
-#include "ed.h"
-
-int didsetty = 0;
-ttyperm_t ttylist = {
- {
-#if defined(POSIX) || defined(TERMIO)
- { "iflag:", ICRNL, (INLCR|IGNCR) },
- { "oflag:", (OPOST|ONLCR), ONLRET },
- { "cflag:", 0, 0 },
- { "lflag:", (ISIG|ICANON|ECHO|ECHOE|ECHOCTL|IEXTEN),
- (NOFLSH|ECHONL|EXTPROC|FLUSHO|IDEFAULT) },
-#else /* GSTTY */
- { "nrmal:", (ECHO|CRMOD|ANYP), (CBREAK|RAW|LCASE|VTDELAY|ALLDELAY) },
- { "local:", (LCRTBS|LCRTERA|LCRTKIL), (LPRTERA|LFLUSHO) },
-#endif /* POSIX || TERMIO */
- { "chars:", 0, 0 },
- },
- {
-#if defined(POSIX) || defined(TERMIO)
- { "iflag:", (INLCR|ICRNL), IGNCR },
- { "oflag:", (OPOST|ONLCR), ONLRET },
- { "cflag:", 0, 0 },
- { "lflag:", ISIG,
- (NOFLSH|ICANON|ECHO|ECHOK|ECHONL|EXTPROC|IEXTEN|FLUSHO|
- IDEFAULT) },
-#else /* GSTTY */
- { "nrmal:", (CBREAK|CRMOD|ANYP), (RAW|ECHO|LCASE|VTDELAY|ALLDELAY) },
- { "local:", (LCRTBS|LCRTERA|LCRTKIL), (LPRTERA|LFLUSHO) },
-#endif /* POSIX || TERMIO */
- { "chars:", (C_SH(C_MIN)|C_SH(C_TIME)|C_SH(C_SWTCH)|C_SH(C_DSWTCH)|
- C_SH(C_WERASE)|C_SH(C_REPRINT)|C_SH(C_SUSP)|C_SH(C_DSUSP)|
- C_SH(C_EOF)|C_SH(C_EOL)|C_SH(C_DISCARD)|C_SH(C_PGOFF)|
- C_SH(C_KILL2)|C_SH(C_PAGE)|C_SH(C_STATUS)|C_SH(C_LNEXT)),
- 0 }
- },
- {
-#if defined(POSIX) || defined(TERMIO)
- { "iflag:", 0, IXON | IXOFF },
- { "oflag:", 0, 0 },
- { "cflag:", 0, 0 },
- { "lflag:", 0, ISIG | IEXTEN },
-#else /* GSTTY */
- { "nrmal:", RAW, CBREAK },
- { "local:", 0, 0 },
-#endif /* POSIX || TERMIO */
- { "chars:", 0, 0 },
- }
-};
-
-static const struct tcshmodes {
- const char *m_name;
-#ifdef SOLARIS2
- unsigned long m_value;
-#else /* !SOLARIS2 */
- int m_value;
-#endif /* SOLARIS2 */
- int m_type;
-} modelist[] = {
-#if defined(POSIX) || defined(TERMIO)
-
-# ifdef IGNBRK
- { "ignbrk", IGNBRK, M_INPUT },
-# endif /* IGNBRK */
-# ifdef BRKINT
- { "brkint", BRKINT, M_INPUT },
-# endif /* BRKINT */
-# ifdef IGNPAR
- { "ignpar", IGNPAR, M_INPUT },
-# endif /* IGNPAR */
-# ifdef PARMRK
- { "parmrk", PARMRK, M_INPUT },
-# endif /* PARMRK */
-# ifdef INPCK
- { "inpck", INPCK, M_INPUT },
-# endif /* INPCK */
-# ifdef ISTRIP
- { "istrip", ISTRIP, M_INPUT },
-# endif /* ISTRIP */
-# ifdef INLCR
- { "inlcr", INLCR, M_INPUT },
-# endif /* INLCR */
-# ifdef IGNCR
- { "igncr", IGNCR, M_INPUT },
-# endif /* IGNCR */
-# ifdef ICRNL
- { "icrnl", ICRNL, M_INPUT },
-# endif /* ICRNL */
-# ifdef IUCLC
- { "iuclc", IUCLC, M_INPUT },
-# endif /* IUCLC */
-# ifdef IXON
- { "ixon", IXON, M_INPUT },
-# endif /* IXON */
-# ifdef IXANY
- { "ixany", IXANY, M_INPUT },
-# endif /* IXANY */
-# ifdef IXOFF
- { "ixoff", IXOFF, M_INPUT },
-# endif /* IXOFF */
-# ifdef IMAXBEL
- { "imaxbel",IMAXBEL,M_INPUT },
-# endif /* IMAXBEL */
-# ifdef IDELETE
- { "idelete",IDELETE,M_INPUT },
-# endif /* IDELETE */
-
-# ifdef OPOST
- { "opost", OPOST, M_OUTPUT },
-# endif /* OPOST */
-# ifdef OLCUC
- { "olcuc", OLCUC, M_OUTPUT },
-# endif /* OLCUC */
-# ifdef ONLCR
- { "onlcr", ONLCR, M_OUTPUT },
-# endif /* ONLCR */
-# ifdef OCRNL
- { "ocrnl", OCRNL, M_OUTPUT },
-# endif /* OCRNL */
-# ifdef ONOCR
- { "onocr", ONOCR, M_OUTPUT },
-# endif /* ONOCR */
-# ifdef ONOEOT
- { "onoeot", ONOEOT, M_OUTPUT },
-# endif /* ONOEOT */
-# ifdef ONLRET
- { "onlret", ONLRET, M_OUTPUT },
-# endif /* ONLRET */
-# ifdef OFILL
- { "ofill", OFILL, M_OUTPUT },
-# endif /* OFILL */
-# ifdef OFDEL
- { "ofdel", OFDEL, M_OUTPUT },
-# endif /* OFDEL */
-# ifdef NLDLY
- { "nldly", NLDLY, M_OUTPUT },
-# endif /* NLDLY */
-# ifdef CRDLY
- { "crdly", CRDLY, M_OUTPUT },
-# endif /* CRDLY */
-# ifdef TABDLY
- { "tabdly", TABDLY, M_OUTPUT },
-# endif /* TABDLY */
-# ifdef XTABS
- { "xtabs", XTABS, M_OUTPUT },
-# endif /* XTABS */
-# ifdef BSDLY
- { "bsdly", BSDLY, M_OUTPUT },
-# endif /* BSDLY */
-# ifdef VTDLY
- { "vtdly", VTDLY, M_OUTPUT },
-# endif /* VTDLY */
-# ifdef FFDLY
- { "ffdly", FFDLY, M_OUTPUT },
-# endif /* FFDLY */
-# ifdef PAGEOUT
- { "pageout",PAGEOUT,M_OUTPUT },
-# endif /* PAGEOUT */
-# ifdef WRAP
- { "wrap", WRAP, M_OUTPUT },
-# endif /* WRAP */
-
-# ifdef CIGNORE
- { "cignore",CIGNORE,M_CONTROL },
-# endif /* CBAUD */
-# ifdef CBAUD
- { "cbaud", CBAUD, M_CONTROL },
-# endif /* CBAUD */
-# ifdef CSTOPB
- { "cstopb", CSTOPB, M_CONTROL },
-# endif /* CSTOPB */
-# ifdef CREAD
- { "cread", CREAD, M_CONTROL },
-# endif /* CREAD */
-# ifdef PARENB
- { "parenb", PARENB, M_CONTROL },
-# endif /* PARENB */
-# ifdef PARODD
- { "parodd", PARODD, M_CONTROL },
-# endif /* PARODD */
-# ifdef HUPCL
- { "hupcl", HUPCL, M_CONTROL },
-# endif /* HUPCL */
-# ifdef CLOCAL
- { "clocal", CLOCAL, M_CONTROL },
-# endif /* CLOCAL */
-# ifdef LOBLK
- { "loblk", LOBLK, M_CONTROL },
-# endif /* LOBLK */
-# ifdef CIBAUD
- { "cibaud", CIBAUD, M_CONTROL },
-# endif /* CIBAUD */
-# ifdef CRTSCTS
-# ifdef CCTS_OFLOW
- { "ccts_oflow",CCTS_OFLOW,M_CONTROL },
-# else
- { "crtscts",CRTSCTS,M_CONTROL },
-# endif /* CCTS_OFLOW */
-# endif /* CRTSCTS */
-# ifdef CRTS_IFLOW
- { "crts_iflow",CRTS_IFLOW,M_CONTROL },
-# endif /* CRTS_IFLOW */
-# ifdef MDMBUF
- { "mdmbuf", MDMBUF, M_CONTROL },
-# endif /* MDMBUF */
-# ifdef RCV1EN
- { "rcv1en", RCV1EN, M_CONTROL },
-# endif /* RCV1EN */
-# ifdef XMT1EN
- { "xmt1en", XMT1EN, M_CONTROL },
-# endif /* XMT1EN */
-
-# ifdef ISIG
- { "isig", ISIG, M_LINED },
-# endif /* ISIG */
-# ifdef ICANON
- { "icanon", ICANON, M_LINED },
-# endif /* ICANON */
-# ifdef XCASE
- { "xcase", XCASE, M_LINED },
-# endif /* XCASE */
-# ifdef ECHO
- { "echo", ECHO, M_LINED },
-# endif /* ECHO */
-# ifdef ECHOE
- { "echoe", ECHOE, M_LINED },
-# endif /* ECHOE */
-# ifdef ECHOK
- { "echok", ECHOK, M_LINED },
-# endif /* ECHOK */
-# ifdef ECHONL
- { "echonl", ECHONL, M_LINED },
-# endif /* ECHONL */
-# ifdef NOFLSH
- { "noflsh", NOFLSH, M_LINED },
-# endif /* NOFLSH */
-# ifdef TOSTOP
- { "tostop", TOSTOP, M_LINED },
-# endif /* TOSTOP */
-# ifdef ECHOCTL
- { "echoctl",ECHOCTL,M_LINED },
-# endif /* ECHOCTL */
-# ifdef ECHOPRT
- { "echoprt",ECHOPRT,M_LINED },
-# endif /* ECHOPRT */
-# ifdef ECHOKE
- { "echoke", ECHOKE, M_LINED },
-# endif /* ECHOKE */
-# ifdef DEFECHO
- { "defecho",DEFECHO,M_LINED },
-# endif /* DEFECHO */
-# ifdef FLUSHO
- { "flusho", FLUSHO, M_LINED },
-# endif /* FLUSHO */
-# ifdef PENDIN
- { "pendin", PENDIN, M_LINED },
-# endif /* PENDIN */
-# ifdef IEXTEN
- { "iexten", IEXTEN, M_LINED },
-# endif /* IEXTEN */
-# ifdef NOKERNINFO
- { "nokerninfo",NOKERNINFO,M_LINED },
-# endif /* NOKERNINFO */
-# ifdef ALTWERASE
- { "altwerase",ALTWERASE,M_LINED },
-# endif /* ALTWERASE */
-# ifdef EXTPROC
- { "extproc",EXTPROC,M_LINED },
-# endif /* EXTPROC */
-# ifdef IDEFAULT
- { "idefault",IDEFAULT,M_LINED },
-# endif /* IDEFAULT */
-
-#else /* GSTTY */
-
-# ifdef TANDEM
- { "tandem", TANDEM, M_CONTROL },
-# endif /* TANDEM */
-# ifdef CBREAK
- { "cbreak", CBREAK, M_CONTROL },
-# endif /* CBREAK */
-# ifdef LCASE
- { "lcase", LCASE, M_CONTROL },
-# endif /* LCASE */
-# ifdef ECHO
- { "echo", ECHO, M_CONTROL },
-# endif /* ECHO */
-# ifdef CRMOD
- { "crmod", CRMOD, M_CONTROL },
-# endif /* CRMOD */
-# ifdef RAW
- { "raw", RAW, M_CONTROL },
-# endif /* RAW */
-# ifdef ODDP
- { "oddp", ODDP, M_CONTROL },
-# endif /* ODDP */
-# ifdef EVENP
- { "evenp", EVENP, M_CONTROL },
-# endif /* EVENP */
-# ifdef ANYP
- { "anyp", ANYP, M_CONTROL },
-# endif /* ANYP */
-# ifdef NLDELAY
- { "nldelay",NLDELAY,M_CONTROL },
-# endif /* NLDELAY */
-# ifdef TBDELAY
- { "tbdelay",TBDELAY,M_CONTROL },
-# endif /* TBDELAY */
-# ifdef XTABS
- { "xtabs", XTABS, M_CONTROL },
-# endif /* XTABS */
-# ifdef CRDELAY
- { "crdelay",CRDELAY,M_CONTROL },
-# endif /* CRDELAY */
-# ifdef VTDELAY
- { "vtdelay",VTDELAY,M_CONTROL },
-# endif /* VTDELAY */
-# ifdef BSDELAY
- { "bsdelay",BSDELAY,M_CONTROL },
-# endif /* BSDELAY */
-# ifdef CRTBS
- { "crtbs", CRTBS, M_CONTROL },
-# endif /* CRTBS */
-# ifdef PRTERA
- { "prtera", PRTERA, M_CONTROL },
-# endif /* PRTERA */
-# ifdef CRTERA
- { "crtera", CRTERA, M_CONTROL },
-# endif /* CRTERA */
-# ifdef TILDE
- { "tilde", TILDE, M_CONTROL },
-# endif /* TILDE */
-# ifdef MDMBUF
- { "mdmbuf", MDMBUF, M_CONTROL },
-# endif /* MDMBUF */
-# ifdef LITOUT
- { "litout", LITOUT, M_CONTROL },
-# endif /* LITOUT */
-# ifdef TOSTOP
- { "tostop", TOSTOP, M_CONTROL },
-# endif /* TOSTOP */
-# ifdef FLUSHO
- { "flusho", FLUSHO, M_CONTROL },
-# endif /* FLUSHO */
-# ifdef NOHANG
- { "nohang", NOHANG, M_CONTROL },
-# endif /* NOHANG */
-# ifdef L001000
- { "l001000",L001000,M_CONTROL },
-# endif /* L001000 */
-# ifdef CRTKIL
- { "crtkil", CRTKIL, M_CONTROL },
-# endif /* CRTKIL */
-# ifdef PASS8
- { "pass8", PASS8, M_CONTROL },
-# endif /* PASS8 */
-# ifdef CTLECH
- { "ctlech", CTLECH, M_CONTROL },
-# endif /* CTLECH */
-# ifdef PENDIN
- { "pendin", PENDIN, M_CONTROL },
-# endif /* PENDIN */
-# ifdef DECCTQ
- { "decctq", DECCTQ, M_CONTROL },
-# endif /* DECCTQ */
-# ifdef NOFLSH
- { "noflsh", NOFLSH, M_CONTROL },
-# endif /* NOFLSH */
-
-# ifdef LCRTBS
- { "lcrtbs", LCRTBS, M_LOCAL },
-# endif /* LCRTBS */
-# ifdef LPRTERA
- { "lprtera",LPRTERA,M_LOCAL },
-# endif /* LPRTERA */
-# ifdef LCRTERA
- { "lcrtera",LCRTERA,M_LOCAL },
-# endif /* LCRTERA */
-# ifdef LTILDE
- { "ltilde", LTILDE, M_LOCAL },
-# endif /* LTILDE */
-# ifdef LMDMBUF
- { "lmdmbuf",LMDMBUF,M_LOCAL },
-# endif /* LMDMBUF */
-# ifdef LLITOUT
- { "llitout",LLITOUT,M_LOCAL },
-# endif /* LLITOUT */
-# ifdef LTOSTOP
- { "ltostop",LTOSTOP,M_LOCAL },
-# endif /* LTOSTOP */
-# ifdef LFLUSHO
- { "lflusho",LFLUSHO,M_LOCAL },
-# endif /* LFLUSHO */
-# ifdef LNOHANG
- { "lnohang",LNOHANG,M_LOCAL },
-# endif /* LNOHANG */
-# ifdef LCRTKIL
- { "lcrtkil",LCRTKIL,M_LOCAL },
-# endif /* LCRTKIL */
-# ifdef LPASS8
- { "lpass8", LPASS8, M_LOCAL },
-# endif /* LPASS8 */
-# ifdef LCTLECH
- { "lctlech",LCTLECH,M_LOCAL },
-# endif /* LCTLECH */
-# ifdef LPENDIN
- { "lpendin",LPENDIN,M_LOCAL },
-# endif /* LPENDIN */
-# ifdef LDECCTQ
- { "ldecctq",LDECCTQ,M_LOCAL },
-# endif /* LDECCTQ */
-# ifdef LNOFLSH
- { "lnoflsh",LNOFLSH,M_LOCAL },
-# endif /* LNOFLSH */
-
-#endif /* POSIX || TERMIO */
-# if defined(VINTR) || defined(TIOCGETC)
- { "intr", C_SH(C_INTR), M_CHAR },
-# endif /* VINTR */
-# if defined(VQUIT) || defined(TIOCGETC)
- { "quit", C_SH(C_QUIT), M_CHAR },
-# endif /* VQUIT */
-# if defined(VERASE) || defined(TIOCGETP)
- { "erase", C_SH(C_ERASE), M_CHAR },
-# endif /* VERASE */
-# if defined(VKILL) || defined(TIOCGETP)
- { "kill", C_SH(C_KILL), M_CHAR },
-# endif /* VKILL */
-# if defined(VEOF) || defined(TIOCGETC)
- { "eof", C_SH(C_EOF), M_CHAR },
-# endif /* VEOF */
-# if defined(VEOL)
- { "eol", C_SH(C_EOL), M_CHAR },
-# endif /* VEOL */
-# if defined(VEOL2)
- { "eol2", C_SH(C_EOL2), M_CHAR },
-# endif /* VEOL2 */
-# if defined(VSWTCH)
- { "swtch", C_SH(C_SWTCH), M_CHAR },
-# endif /* VSWTCH */
-# if defined(VDSWTCH)
- { "dswtch", C_SH(C_DSWTCH), M_CHAR },
-# endif /* VDSWTCH */
-# if defined(VERASE2)
- { "erase2", C_SH(C_ERASE2), M_CHAR },
-# endif /* VERASE2 */
-# if defined(VSTART) || defined(TIOCGETC)
- { "start", C_SH(C_START), M_CHAR },
-# endif /* VSTART */
-# if defined(VSTOP) || defined(TIOCGETC)
- { "stop", C_SH(C_STOP), M_CHAR },
-# endif /* VSTOP */
-# if defined(VWERASE) || defined(TIOCGLTC)
- { "werase", C_SH(C_WERASE), M_CHAR },
-# endif /* VWERASE */
-# if defined(VSUSP) || defined(TIOCGLTC)
- { "susp", C_SH(C_SUSP), M_CHAR },
-# endif /* VSUSP */
-# if defined(VDSUSP) || defined(TIOCGLTC)
- { "dsusp", C_SH(C_DSUSP), M_CHAR },
-# endif /* VDSUSP */
-# if defined(VREPRINT) || defined(TIOCGLTC)
- { "reprint", C_SH(C_REPRINT),M_CHAR },
-# endif /* WREPRINT */
-# if defined(VDISCARD) || defined(TIOCGLTC)
- { "discard", C_SH(C_DISCARD),M_CHAR },
-# endif /* VDISCARD */
-# if defined(VLNEXT) || defined(TIOCGLTC)
- { "lnext", C_SH(C_LNEXT), M_CHAR },
-# endif /* VLNEXT */
-# if defined(VSTATUS) || defined(TIOCGPAGE)
- { "status", C_SH(C_STATUS), M_CHAR },
-# endif /* VSTATUS */
-# if defined(VPAGE) || defined(TIOCGPAGE)
- { "page", C_SH(C_PAGE), M_CHAR },
-# endif /* VPAGE */
-# if defined(VPGOFF) || defined(TIOCGPAGE)
- { "pgoff", C_SH(C_PGOFF), M_CHAR },
-# endif /* VPGOFF */
-# if defined(VKILL2)
- { "kill2", C_SH(C_KILL2), M_CHAR },
-# endif /* VKILL2 */
-# if defined(VBRK) || defined(TIOCGETC)
- { "brk", C_SH(C_BRK), M_CHAR },
-# endif /* VBRK */
-# if defined(VMIN)
- { "min", C_SH(C_MIN), M_CHAR },
-# endif /* VMIN */
-# if defined(VTIME)
- { "time", C_SH(C_TIME), M_CHAR },
-# endif /* VTIME */
- { NULL, 0, -1 },
-};
-
-/*
- * If EAGAIN and/or EWOULDBLOCK are defined, we can't just return -1 in all
- * situations where ioctl() does.
- *
- * On AIX 4.1.5 (and presumably some other versions and OSes), as you
- * perform the manual test suite in the README, if you 'bg' vi immediately
- * after suspending it, all is well, but if you wait a few seconds,
- * usually ioctl() will return -1, which previously caused tty_setty() to
- * return -1, causing Rawmode() to return -1, causing Inputl() to return
- * 0, causing bgetc() to return -1, causing readc() to set doneinp to 1,
- * causing process() to break out of the main loop, causing tcsh to exit
- * prematurely.
- *
- * If ioctl()'s errno is EAGAIN/EWOULDBLOCK ("Resource temporarily
- * unavailable"), apparently the tty is being messed with by the OS and we
- * need to try again. In my testing, ioctl() was never called more than
- * twice in a row.
- *
- * -- Dan Harkless <dan@wave.eng.uci.edu>
- *
- * So, I retry all ioctl's in case others happen to fail too (christos)
- */
-
-#if defined(EAGAIN) && defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN)
-# define OKERROR(e) (((e) == EAGAIN) || ((e) == EWOULDBLOCK) || ((e) == EINTR))
-#elif defined(EAGAIN)
-# define OKERROR(e) (((e) == EAGAIN) || ((e) == EINTR))
-#elif defined(EWOULDBLOCK)
-# define OKERROR(e) (((e) == EWOULDBLOCK) || ((e) == EINTR))
-#else
-# define OKERROR(e) ((e) == EINTR)
-#endif
-
-#ifdef __NetBSD__
-#define KLUDGE (errno == ENOTTY && count < 10)
-#else
-#define KLUDGE 0
-#endif
-
-/* Retry a system call */
-#define RETRY(x) \
-do { \
- int count; \
- \
- for (count = 0;; count++) \
- if ((x) == -1) { \
- if (OKERROR(errno) || KLUDGE) \
- continue; \
- else \
- return -1; \
- } \
- else \
- break; \
-} while (0)
-
-/*ARGSUSED*/
-void
-dosetty(Char **v, struct command *t)
-{
- const struct tcshmodes *m;
- char x, *d, *cmdname;
- int aflag = 0;
- Char *s;
- int z = EX_IO;
-
- USE(t);
- cmdname = strsave(short2str(*v++));
- cleanup_push(cmdname, xfree);
- setname(cmdname);
-
- while (v && *v && v[0][0] == '-' && v[0][2] == '\0')
- switch (v[0][1]) {
- case 'a':
- aflag++;
- v++;
- break;
- case 'd':
- v++;
- z = ED_IO;
- break;
- case 'x':
- v++;
- z = EX_IO;
- break;
- case 'q':
- v++;
- z = QU_IO;
- break;
- default:
- stderror(ERR_NAME | ERR_SYSTEM, short2str(v[0]),
- CGETS(8, 1, "Unknown switch"));
- break;
- }
-
- didsetty = 1;
- if (!v || !*v) {
- int i = -1;
- int len = 0, st = 0, cu;
- for (m = modelist; m->m_name; m++) {
- if (m->m_type != i) {
- xprintf("%s%s", i != -1 ? "\n" : "",
- ttylist[z][m->m_type].t_name);
- i = m->m_type;
- st = len = strlen(ttylist[z][m->m_type].t_name);
- }
-
- x = (ttylist[z][i].t_setmask & m->m_value) ? '+' : '\0';
- x = (ttylist[z][i].t_clrmask & m->m_value) ? '-' : x;
-
- if (x != '\0' || aflag) {
- cu = strlen(m->m_name) + (x != '\0') + 1;
- if (len + cu >= TermH) {
- xprintf("\n%*s", st, "");
- len = st + cu;
- }
- else
- len += cu;
- if (x != '\0')
- xprintf("%c%s ", x, m->m_name);
- else
- xprintf("%s ", m->m_name);
- }
- }
- xputchar('\n');
- cleanup_until(cmdname);
- return;
- }
- while (v && (s = *v++)) {
- switch (*s) {
- case '+':
- case '-':
- x = *s++;
- break;
- default:
- x = '\0';
- break;
- }
- d = short2str(s);
- for (m = modelist; m->m_name; m++)
- if (strcmp(m->m_name, d) == 0)
- break;
- if (!m->m_name)
- stderror(ERR_NAME | ERR_SYSTEM, d, CGETS(8, 2, "Invalid argument"));
-
- switch (x) {
- case '+':
- ttylist[z][m->m_type].t_setmask |= m->m_value;
- ttylist[z][m->m_type].t_clrmask &= ~m->m_value;
- break;
- case '-':
- ttylist[z][m->m_type].t_setmask &= ~m->m_value;
- ttylist[z][m->m_type].t_clrmask |= m->m_value;
- break;
- default:
- ttylist[z][m->m_type].t_setmask &= ~m->m_value;
- ttylist[z][m->m_type].t_clrmask &= ~m->m_value;
- break;
- }
- }
- cleanup_until(cmdname);
-} /* end dosetty */
-
-int
-tty_getty(int fd, ttydata_t *td)
-{
-#ifdef POSIX
- RETRY(tcgetattr(fd, &td->d_t));
-#else /* TERMIO || GSTTY */
-# ifdef TERMIO
- RETRY(ioctl(fd, TCGETA, (ioctl_t) &td->d_t));
-# else /* GSTTY */
-# ifdef TIOCGETP
- RETRY(ioctl(fd, TIOCGETP, (ioctl_t) &td->d_t));
-# endif /* TIOCGETP */
-# ifdef TIOCGETC
- RETRY(ioctl(fd, TIOCGETC, (ioctl_t) &td->d_tc));
-# endif /* TIOCGETC */
-# ifdef TIOCGPAGE
- RETRY(ioctl(fd, TIOCGPAGE, (ioctl_t) &td->d_pc));
-# endif /* TIOCGPAGE */
-# ifdef TIOCLGET
- RETRY(ioctl(fd, TIOCLGET, (ioctl_t) &td->d_lb));
-# endif /* TIOCLGET */
-# endif /* TERMIO */
-#endif /* POSIX */
-
-#ifdef TIOCGLTC
- RETRY(ioctl(fd, TIOCGLTC, (ioctl_t) &td->d_ltc));
-#endif /* TIOCGLTC */
-
- return 0;
-}
-
-int
-tty_setty(int fd, ttydata_t *td)
-{
-#ifdef POSIX
- RETRY(xtcsetattr(fd, TCSADRAIN, &td->d_t));
-#else
-# ifdef TERMIO
- RETRY(ioctl(fd, TCSETAW, (ioctl_t) &td->d_t));
-# else
-# ifdef TIOCSETN
- RETRY(ioctl(fd, TIOCSETN, (ioctl_t) &td->d_t));
-# endif /* TIOCSETN */
-# ifdef TIOCGETC
- RETRY(ioctl(fd, TIOCSETC, (ioctl_t) &td->d_tc));
-# endif /* TIOCGETC */
-# ifdef TIOCGPAGE
- RETRY(ioctl(fd, TIOCSPAGE, (ioctl_t) &td->d_pc));
-# endif /* TIOCGPAGE */
-# ifdef TIOCLGET
- RETRY(ioctl(fd, TIOCLSET, (ioctl_t) &td->d_lb));
-# endif /* TIOCLGET */
-# endif /* TERMIO */
-#endif /* POSIX */
-
-#ifdef TIOCGLTC
- RETRY(ioctl(fd, TIOCSLTC, (ioctl_t) &td->d_ltc));
-#endif /* TIOCGLTC */
-
- return 0;
-}
-
-void
-tty_getchar(ttydata_t *td, unsigned char *s)
-{
-#ifdef TIOCGLTC
- {
- struct ltchars *n = &td->d_ltc;
-
- s[C_SUSP] = n->t_suspc;
- s[C_DSUSP] = n->t_dsuspc;
- s[C_REPRINT] = n->t_rprntc;
- s[C_DISCARD] = n->t_flushc;
- s[C_WERASE] = n->t_werasc;
- s[C_LNEXT] = n->t_lnextc;
- }
-#endif /* TIOCGLTC */
-
-#if defined(POSIX) || defined(TERMIO)
- {
-# ifdef POSIX
- struct termios *n = &td->d_t;
-# else
- struct termio *n = &td->d_t;
-# endif /* POSIX */
-
-# ifdef VINTR
- s[C_INTR] = n->c_cc[VINTR];
-# endif /* VINTR */
-# ifdef VQUIT
- s[C_QUIT] = n->c_cc[VQUIT];
-# endif /* VQUIT */
-# ifdef VERASE
- s[C_ERASE] = n->c_cc[VERASE];
-# endif /* VERASE */
-# ifdef VKILL
- s[C_KILL] = n->c_cc[VKILL];
-# endif /* VKILL */
-# ifdef VEOF
- s[C_EOF] = n->c_cc[VEOF];
-# endif /* VEOF */
-# ifdef VEOL
- s[C_EOL] = n->c_cc[VEOL];
-# endif /* VEOL */
-# ifdef VEOL2
- s[C_EOL2] = n->c_cc[VEOL2];
-# endif /* VEOL2 */
-# ifdef VSWTCH
- s[C_SWTCH] = n->c_cc[VSWTCH];
-# endif /* VSWTCH */
-# ifdef VDSWTCH
- s[C_DSWTCH] = n->c_cc[VDSWTCH];
-# endif /* VDSWTCH */
-# ifdef VERASE2
- s[C_ERASE2] = n->c_cc[VERASE2];
-# endif /* VERASE2 */
-# ifdef VSTART
- s[C_START] = n->c_cc[VSTART];
-# endif /* VSTART */
-# ifdef VSTOP
- s[C_STOP] = n->c_cc[VSTOP];
-# endif /* VSTOP */
-# ifdef VWERASE
- s[C_WERASE] = n->c_cc[VWERASE];
-# endif /* VWERASE */
-# ifdef VSUSP
- s[C_SUSP] = n->c_cc[VSUSP];
-# endif /* VSUSP */
-# ifdef VDSUSP
- s[C_DSUSP] = n->c_cc[VDSUSP];
-# endif /* VDSUSP */
-# ifdef VREPRINT
- s[C_REPRINT] = n->c_cc[VREPRINT];
-# endif /* WREPRINT */
-# ifdef VDISCARD
- s[C_DISCARD] = n->c_cc[VDISCARD];
-# endif /* VDISCARD */
-# ifdef VLNEXT
- s[C_LNEXT] = n->c_cc[VLNEXT];
-# endif /* VLNEXT */
-# ifdef VSTATUS
- s[C_STATUS] = n->c_cc[VSTATUS];
-# endif /* VSTATUS */
-# ifdef VPAGE
- s[C_PAGE] = n->c_cc[VPAGE];
-# endif /* VPAGE */
-# ifdef VPGOFF
- s[C_PGOFF] = n->c_cc[VPGOFF];
-# endif /* VPGOFF */
-# ifdef VKILL2
- s[C_KILL2] = n->c_cc[VKILL2];
-# endif /* KILL2 */
-# ifdef VMIN
- s[C_MIN] = n->c_cc[VMIN];
-# endif /* VMIN */
-# ifdef VTIME
- s[C_TIME] = n->c_cc[VTIME];
-# endif /* VTIME */
- }
-
-#else /* SGTTY */
-
-# ifdef TIOCGPAGE
- {
- struct ttypagestat *n = &td->d_pc;
-
- s[C_STATUS] = n->tps_statc;
- s[C_PAGE] = n->tps_pagec;
- s[C_PGOFF] = n->tps_pgoffc;
- }
-# endif /* TIOCGPAGE */
-
-# ifdef TIOCGETC
- {
- struct tchars *n = &td->d_tc;
-
- s[C_INTR] = n->t_intrc;
- s[C_QUIT] = n->t_quitc;
- s[C_START] = n->t_startc;
- s[C_STOP] = n->t_stopc;
- s[C_EOF] = n->t_eofc;
- s[C_BRK] = n->t_brkc;
- }
-# endif /* TIOCGETC */
-
-# ifdef TIOCGETP
- {
- struct sgttyb *n = &td->d_t;
-
- s[C_ERASE] = n->sg_erase;
- s[C_KILL] = n->sg_kill;
- }
-# endif /* TIOCGETP */
-#endif /* !POSIX || TERMIO */
-
-} /* tty_getchar */
-
-
-void
-tty_setchar(ttydata_t *td, unsigned char *s)
-{
-#ifdef TIOCGLTC
- {
- struct ltchars *n = &td->d_ltc;
-
- n->t_suspc = s[C_SUSP];
- n->t_dsuspc = s[C_DSUSP];
- n->t_rprntc = s[C_REPRINT];
- n->t_flushc = s[C_DISCARD];
- n->t_werasc = s[C_WERASE];
- n->t_lnextc = s[C_LNEXT];
- }
-#endif /* TIOCGLTC */
-
-#if defined(POSIX) || defined(TERMIO)
- {
-# ifdef POSIX
- struct termios *n = &td->d_t;
-# else
- struct termio *n = &td->d_t;
-# endif /* POSIX */
-
-# ifdef VINTR
- n->c_cc[VINTR] = s[C_INTR];
-# endif /* VINTR */
-# ifdef VQUIT
- n->c_cc[VQUIT] = s[C_QUIT];
-# endif /* VQUIT */
-# ifdef VERASE
- n->c_cc[VERASE] = s[C_ERASE];
-# endif /* VERASE */
-# ifdef VKILL
- n->c_cc[VKILL] = s[C_KILL];
-# endif /* VKILL */
-# ifdef VEOF
- n->c_cc[VEOF] = s[C_EOF];
-# endif /* VEOF */
-# ifdef VEOL
- n->c_cc[VEOL] = s[C_EOL];
-# endif /* VEOL */
-# ifdef VEOL2
- n->c_cc[VEOL2] = s[C_EOL2];
-# endif /* VEOL2 */
-# ifdef VSWTCH
- n->c_cc[VSWTCH] = s[C_SWTCH];
-# endif /* VSWTCH */
-# ifdef VDSWTCH
- n->c_cc[VDSWTCH] = s[C_DSWTCH];
-# endif /* VDSWTCH */
-# ifdef VERASE2
- n->c_cc[VERASE2] = s[C_ERASE2];
-# endif /* VERASE2 */
-# ifdef VSTART
- n->c_cc[VSTART] = s[C_START];
-# endif /* VSTART */
-# ifdef VSTOP
- n->c_cc[VSTOP] = s[C_STOP];
-# endif /* VSTOP */
-# ifdef VWERASE
- n->c_cc[VWERASE] = s[C_WERASE];
-# endif /* VWERASE */
-# ifdef VSUSP
- n->c_cc[VSUSP] = s[C_SUSP];
-# endif /* VSUSP */
-# ifdef VDSUSP
- n->c_cc[VDSUSP] = s[C_DSUSP];
-# endif /* VDSUSP */
-# ifdef VREPRINT
- n->c_cc[VREPRINT] = s[C_REPRINT];
-# endif /* WREPRINT */
-# ifdef VDISCARD
- n->c_cc[VDISCARD] = s[C_DISCARD];
-# endif /* VDISCARD */
-# ifdef VLNEXT
- n->c_cc[VLNEXT] = s[C_LNEXT];
-# endif /* VLNEXT */
-# ifdef VSTATUS
- n->c_cc[VSTATUS] = s[C_STATUS];
-# endif /* VSTATUS */
-# ifdef VPAGE
- n->c_cc[VPAGE] = s[C_PAGE];
-# endif /* VPAGE */
-# ifdef VPGOFF
- n->c_cc[VPGOFF] = s[C_PGOFF];
-# endif /* VPGOFF */
-# ifdef VKILL2
- n->c_cc[VKILL2] = s[C_KILL2];
-# endif /* VKILL2 */
-# ifdef VMIN
- n->c_cc[VMIN] = s[C_MIN];
-# endif /* VMIN */
-# ifdef VTIME
- n->c_cc[VTIME] = s[C_TIME];
-# endif /* VTIME */
- }
-
-#else /* GSTTY */
-
-# ifdef TIOCGPAGE
- {
- struct ttypagestat *n = &td->d_pc;
-
- n->tps_length = 0;
- n->tps_lpos = 0;
- n->tps_statc = s[C_STATUS];
- n->tps_pagec = s[C_PAGE];
- n->tps_pgoffc = s[C_PGOFF];
- n->tps_flag = 0;
- }
-# endif /* TIOCGPAGE */
-
-# ifdef TIOCGETC
- {
- struct tchars *n = &td->d_tc;
- n->t_intrc = s[C_INTR];
- n->t_quitc = s[C_QUIT];
- n->t_startc = s[C_START];
- n->t_stopc = s[C_STOP];
- n->t_eofc = s[C_EOF];
- n->t_brkc = s[C_BRK];
- }
-# endif /* TIOCGETC */
-
-# ifdef TIOCGETP
- {
- struct sgttyb *n = &td->d_t;
-
- n->sg_erase = s[C_ERASE];
- n->sg_kill = s[C_KILL];
- }
-# endif /* TIOCGETP */
-#endif /* !POSIX || TERMIO */
-
-} /* tty_setchar */
-
-speed_t
-tty_getspeed(ttydata_t *td)
-{
- speed_t spd;
-
-#ifdef POSIX
- if ((spd = cfgetispeed(&td->d_t)) == 0)
- spd = cfgetospeed(&td->d_t);
-#else /* ! POSIX */
-# ifdef TERMIO
-# ifdef CBAUD
- spd = td->d_t.c_cflag & CBAUD;
-# else
- spd = 0;
-# endif
-# else /* SGTTY */
- spd = td->d_t.sg_ispeed;
-# endif /* TERMIO */
-#endif /* POSIX */
-
- return spd;
-} /* end tty_getspeed */
-
-int
-tty_gettabs(ttydata_t *td)
-{
-#if defined(POSIX) || defined(TERMIO)
- return ((td->d_t.c_oflag & TAB3) == TAB3) ? 0 : 1;
-#else /* SGTTY */
- return (td->d_t.sg_flags & XTABS) == XTABS ? 0 : 1;
-#endif /* POSIX || TERMIO */
-} /* end tty_gettabs */
-
-int
-tty_geteightbit(ttydata_t *td)
-{
-#if defined(POSIX) || defined(TERMIO)
- return (td->d_t.c_cflag & CSIZE) == CS8;
-#else /* SGTTY */
- return td->d_lb & (LPASS8 | LLITOUT);
-#endif /* POSIX || TERMIO */
-} /* end tty_geteightbit */
-
-int
-tty_cooked_mode(ttydata_t *td)
-{
-#if defined(POSIX) || defined(TERMIO)
- return (td->d_t.c_lflag & ICANON);
-#else /* SGTTY */
- return !(td->d_t.sg_flags & (RAW | CBREAK));
-#endif /* POSIX || TERMIO */
-} /* end tty_cooked_mode */
-
-#ifdef _IBMR2
-void
-tty_setdisc(int fd, int dis)
-{
- static int edit_discipline = 0;
- static union txname tx_disc;
- extern char strPOSIX[];
-
- switch (dis) {
- case EX_IO:
- if (edit_discipline) {
- if (ioctl(fd, TXSETLD, (ioctl_t) & tx_disc) == -1)
- return;
- edit_discipline = 0;
- }
- return;
-
- case ED_IO:
- tx_disc.tx_which = 0;
- if (ioctl(fd, TXGETLD, (ioctl_t) & tx_disc) == -1)
- return;
- if (strcmp(tx_disc.tx_name, strPOSIX) != 0) {
- edit_discipline = 1;
- if (ioctl(fd, TXSETLD, (ioctl_t) strPOSIX) == -1)
- return;
- }
- return;
-
- default:
- return;
- }
-} /* end tty_setdisc */
-#endif /* _IBMR2 */
-
-#ifdef DEBUG_TTY
-static void
-tty_printchar(unsigned char *s)
-{
- struct tcshmodes *m;
- int i;
-
- for (i = 0; i < C_NCC; i++) {
- for (m = modelist; m->m_name; m++)
- if (m->m_type == M_CHAR && C_SH(i) == m->m_value)
- break;
- if (m->m_name)
- xprintf("%s ^%c ", m->m_name, s[i] + 'A' - 1);
- if (i % 5 == 0)
- xputchar('\n');
- }
- xputchar('\n');
-}
-#endif /* DEBUG_TTY */
-#else /* WINNT_NATIVE */
-int
-tty_cooked_mode(void *td)
-{
- return do_nt_check_cooked_mode();
-}
-#endif /* !WINNT_NATIVE */
OpenPOWER on IntegriCloud