- long i = tp->c_iflag,
- o = tp->c_oflag,
- c = tp->c_cflag,
- l = tp->c_lflag;
- u_char *cc = tp->c_cc;
- int ispeed = cfgetispeed(tp),
- ospeed = cfgetospeed(tp);
- char unknown[32],
- *ld;
- char *ccval();
-
- if (fmt == GFMT) {
- int cnt;
- char sep;
-
- printf("-gfmt:iflag=%x:oflag=%x:cflag=%x:lflag=%x:cc",
- i, o, c, l);
- for (cnt = 0, sep = '='; cnt < NCCS; cnt++, sep = ',')
- printf("%c%o", sep, cc[cnt]);
- printf(":ispeed=%d:ospeed=%d:\n", ispeed, ospeed);
- return;
- }
-
- /*
- * line discipline
- */
- if (ldisc != TTYDISC) {
- switch(ldisc) {
- case TABLDISC:
- ld = "tablet";
- break;
- case SLIPDISC:
- ld = "slip";
- break;
- default:
- sprintf(unknown, "#%d", ldisc);
- ld = unknown;
- break;
- }
- put("%s disc; ", ld);
- }
- /*
- * line speed
- */
- if (ispeed != ospeed)
- put("ispeed %d baud; ospeed %d baud;",
- ispeed, ospeed);
- else
- put("speed %d baud;", ispeed);
- if (fmt)
- put(" %d rows; %d columns;", win.ws_row, win.ws_col);
- put("\n");
-
-#define lput(n, f, d) if (fmt || on(f) != d) mdput(n+on(f))
- /*
- * "local" flags
- */
-#define on(f) ((l&f) != 0)
- if (debug) mdput("LFLAG: ");
- lput("-icanon ",ICANON, 1);
- lput("-isig ", ISIG, 1);
- lput("-iexten ", IEXTEN, 1);
- lput("-echo ",ECHO, 1);
- lput("-echoe ",ECHOE, 0);
- lput("-echok ",ECHOK, 0);
- lput("-echoke ",ECHOKE, 0);
- lput("-echonl ",ECHONL, 0);
- lput("-echoctl ",ECHOCTL, 0);
- lput("-echoprt ",ECHOPRT, 0);
- lput("-altwerase ",ALTWERASE, 0);
- lput("-noflsh ",NOFLSH, 0);
- lput("-tostop ",TOSTOP, 0);
- lput("-mdmbuf ",MDMBUF, 0);
- lput("-flusho ",FLUSHO, 0);
- lput("-pendin ",PENDIN, 0);
- lput("-nokerninfo ",NOKERNINFO, 0);
- lput("-extproc ",EXTPROC, 0);
- /*
- * input flags
- */
-#undef on
-#define on(f) ((i&f) != 0)
- mdput(0);
- if (debug) mdput("IFLAG: ");
- lput("-istrip ", ISTRIP, 0);
- lput("-icrnl ", ICRNL, 1);
- lput("-inlcr ", INLCR, 0);
- lput("-igncr ", IGNCR, 0);
- lput("-ixon ", IXON, 1);
- lput("-ixoff ", IXOFF, 0);
- lput("-ixany ", IXANY, 1);
- lput("-imaxbel ", IMAXBEL, 1);
- lput("-ignbrk ", IGNBRK, 0);
- lput("-brkint ", BRKINT, 1);
- lput("-inpck ", INPCK, 0);
- lput("-ignpar ", IGNPAR, 0);
- lput("-parmrk ", PARMRK, 0);
-#undef on
- /*
- * output flags
- */
-#define on(f) ((o&f) != 0)
- mdput(0);
- if (debug) mdput("OFLAG: ");
- lput("-opost ", OPOST, 1);
- lput("-onlcr ", ONLCR, 1);
- lput("-oxtabs ", OXTABS, 1);
-#undef on
- /*
- * control flags (hardware state)
- */
-#define on(f) ((c&f) != 0)
- mdput(0);
- if (debug) mdput("CFLAG: ");
- lput("-cread ", CREAD, 1);
- switch(c&CSIZE) {
- case CS5: mdput("cs5 "); break;
- case CS6: mdput("cs6 "); break;
- case CS7: mdput("cs7 "); break;
- case CS8: mdput("cs8 "); break;
- }
- mdput("-parenb "+on(PARENB));
- lput("-parodd ", PARODD, 0);
- lput("-hupcl ", HUPCL, 1);
- lput("-clocal ", CLOCAL, 0);
- lput("-cstopb ", CSTOPB, 0);
- lput("-crtscts ", CRTSCTS, 0);
- mdput(0);
-#undef on
- /*
- * special control characters
- */
- if (debug) mdput("CCHARS: ");
- if (fmt != 2) {
- for (i=0; *cchars[i].names; i++) {
- char temp[64];
-
- if (fmt || cc[cchars[i].sub] != cchars[i].def) {
- sprintf(temp, "%s = %s; ", *cchars[i].names,
- ccval(cc[cchars[i].sub]), fmt);
- mdput(temp);
- }
- }
- mdput(0);
- } else {
- for (i=0; *cchars[i].names; i++)
- put("%*s", strlen(*(cchars[i].names+1)) + (i>0?1:0),
- *(cchars[i].names+1));
- printf("\n");
- for (i=0; *cchars[i].names; i++)
- put("%*s", strlen(*(cchars[i].names+1)) + (i>0?1:0),
- ccval(cc[cchars[i].sub], fmt));
- printf("\n");
- }
-}
-
-/*
- * gross, but since we're changing the control descriptor
- * from 1 to 0, most users will be probably be doing
- * "stty > /dev/sometty" by accident. If 1 and 2 are both ttys,
- * but not the same, assume that 1 was incorrectly redirected.
- */
-checkredirect() {
- struct stat st1, st2;
-
- if (isatty(1) && isatty(2) && fstat(1, &st1) != -1 &&
- fstat(2, &st2) != -1 && (st1.st_rdev != st2.st_rdev))
-warning("stdout appears redirected, but stdin is the control descriptor");
-}
-
-char *
-ccval(c, fmt)
- unsigned char c;
-{
- static char buf[128];
- char *bp;
-
- *buf = 0, bp = buf;
- if (c == _POSIX_VDISABLE)
- if (fmt == 2)
- return("<u>");
- else
- return("<undef>");
- if (c & 0200) {
- strcat(buf, "M-");
- *bp++ = 'M';
- *bp++ = '-';
- c &= 0177;
- }
- if (c == 0177) {
- *bp++ = '^';
- *bp++ = '?';
- }
- else if (c < 040) {
- *bp++ = '^';
- *bp++ = c + '@';
- }
- else
- *bp++ = c;
- *bp = 0;
- return(buf);
-}
-
-
-mdput(s)
- char *s;
-{
- static int col = 0;
-
- if (s == (char *)0) {
- if (col) {
- put("\n");
- col = 0;
- }
- return;
- }
- if ((col += strlen(s)) > WRAPCOL) {
- put("\n");
- col = strlen(s);
- }
- put(s);
-}
-
-#include <varargs.h>
-
-put(va_alist)
- va_dcl
-{
- char *fmt;
- va_list ap;
-
- va_start(ap);
- fmt = va_arg(ap, char *);
- (void) vfprintf(OUT, fmt, ap);
- va_end(ap);
-}
-
-
-warning(va_alist)
- va_dcl
-{
- char *fmt;
- va_list ap;
-
- fprintf(ERR, "stty: warning: ");
- va_start(ap);
- fmt = va_arg(ap, char *);
- (void) vfprintf(ERR, fmt, ap);
- va_end(ap);
- fprintf(ERR, "\n");
-}
-
-
-errexit(va_alist)
- va_dcl
-{
- char *fmt;
- va_list ap;
-
- fprintf(ERR, "stty: ");
- va_start(ap);
- fmt = va_arg(ap, char *);
- (void) vfprintf(ERR, fmt, ap);
- va_end(ap);
- fprintf(ERR, "\n");
- exit(1);
-}
-
-
-syserrexit(va_alist)
- va_dcl
-{
- char *fmt;
- va_list ap;
-
- fprintf(ERR, "stty: ");
- va_start(ap);
- fmt = va_arg(ap, char *);
- (void) vfprintf(ERR, fmt, ap);
- va_end(ap);
- fprintf(ERR, ": %s\n", strerror(errno));