=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tip/Attic/tip.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- src/usr.bin/tip/Attic/tip.c 1995/10/18 08:46:17 1.1 +++ src/usr.bin/tip/Attic/tip.c 1995/12/14 03:12:15 1.2 @@ -1,4 +1,4 @@ -/* $NetBSD: tip.c,v 1.7 1995/08/11 00:10:40 jtc Exp $ */ +/* $NetBSD: tip.c,v 1.8 1995/10/29 00:49:42 pk Exp $ */ /* * Copyright (c) 1983, 1993 @@ -43,7 +43,7 @@ #if 0 static char sccsid[] = "@(#)tip.c 8.1 (Berkeley) 6/6/93"; #endif -static char rcsid[] = "$NetBSD: tip.c,v 1.7 1995/08/11 00:10:40 jtc Exp $"; +static char rcsid[] = "$NetBSD: tip.c,v 1.8 1995/10/29 00:49:42 pk Exp $"; #endif /* not lint */ /* @@ -58,12 +58,12 @@ /* * Baud rate mapping table */ -int bauds[] = { +int rates[] = { 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200, -1 }; -int disc = OTTYDISC; /* tip normally runs this way */ +int disc = TTYDISC; /* tip normally runs this way */ void intprompt(); void timeout(); void cleanup(); @@ -173,7 +173,7 @@ PH = _PATH_PHONES; vinit(); /* init variables */ setparity("even"); /* set the parity table */ - if ((i = speed(number(value(BAUDRATE)))) == NULL) { + if ((i = speed(number(value(BAUDRATE)))) == 0) { printf("tip: bad baud rate %d\n", number(value(BAUDRATE))); daemon_uid(); (void)uu_unlock(uucplock); @@ -201,17 +201,17 @@ * the "cu" version of tip. */ - ioctl(0, TIOCGETP, (char *)&defarg); - ioctl(0, TIOCGETC, (char *)&defchars); - ioctl(0, TIOCGLTC, (char *)&deflchars); - ioctl(0, TIOCGETD, (char *)&odisc); - arg = defarg; - arg.sg_flags = ANYP | CBREAK; - tchars = defchars; - tchars.t_intrc = tchars.t_quitc = -1; - ltchars = deflchars; - ltchars.t_suspc = ltchars.t_dsuspc = ltchars.t_flushc - = ltchars.t_lnextc = -1; + tcgetattr(0, &defterm); + term = defterm; + term.c_lflag &= ~(ICANON|IEXTEN|ECHO); + term.c_iflag &= ~(INPCK|ICRNL); + term.c_oflag &= ~OPOST; + term.c_cc[VMIN] = 1; + term.c_cc[VTIME] = 0; + defchars = term; + term.c_cc[VINTR] = term.c_cc[VQUIT] = term.c_cc[VSUSP] = + term.c_cc[VDSUSP] = term.c_cc[VDISCARD] = + term.c_cc[VLNEXT] = _POSIX_VDISABLE; raw(); pipe(fildes); pipe(repdes); @@ -280,11 +280,7 @@ */ raw() { - - ioctl(0, TIOCSETP, &arg); - ioctl(0, TIOCSETC, &tchars); - ioctl(0, TIOCSLTC, <chars); - ioctl(0, TIOCSETD, (char *)&disc); + tcsetattr(0, TCSADRAIN, &term); } @@ -293,11 +289,7 @@ */ unraw() { - - ioctl(0, TIOCSETD, (char *)&odisc); - ioctl(0, TIOCSETP, (char *)&defarg); - ioctl(0, TIOCSETC, (char *)&defchars); - ioctl(0, TIOCSLTC, (char *)&deflchars); + tcsetattr(0, TCSADRAIN, &defterm); } static jmp_buf promptbuf; @@ -363,7 +355,7 @@ } while (1) { - gch = getchar()&0177; + gch = getchar()&STRIP_PAR; if ((gch == character(value(ESCAPE))) && bol) { if (!(gch = escape())) continue; @@ -377,7 +369,7 @@ printf("\r\n"); continue; } else if (!cumode && gch == character(value(FORCE))) - gch = getchar()&0177; + gch = getchar()&STRIP_PAR; bol = any(gch, value(EOL)); if (boolean(value(RAISE)) && islower(gch)) gch = toupper(gch); @@ -399,7 +391,7 @@ register esctable_t *p; char c = character(value(ESCAPE)); - gch = (getchar()&0177); + gch = (getchar()&STRIP_PAR); for (p = etable; p->e_char; p++) if (p->e_char == gch) { if ((p->e_flags&PRIV) && uid) @@ -419,10 +411,10 @@ { register int *p; - for (p = bauds; *p != -1; p++) + for (p = rates; *p != -1; p++) if (*p == n) - return (p - bauds); - return (NULL); + return n; + return 0; } any(c, p) @@ -511,14 +503,21 @@ ttysetup(speed) int speed; { - unsigned bits = LDECCTQ; + struct termios cntrl; - arg.sg_ispeed = arg.sg_ospeed = speed; - arg.sg_flags = RAW; + tcgetattr(FD, &cntrl); + cfsetospeed(&cntrl, speed); + cfsetispeed(&cntrl, speed); + cntrl.c_cflag &= ~(CSIZE|PARENB); + cntrl.c_cflag |= CS8; + cntrl.c_iflag &= ~(ISTRIP|ICRNL); + cntrl.c_oflag &= ~OPOST; + cntrl.c_lflag &= ~(ICANON|ISIG|IEXTEN|ECHO); + cntrl.c_cc[VMIN] = 1; + cntrl.c_cc[VTIME] = 0; if (boolean(value(TAND))) - arg.sg_flags |= TANDEM; - ioctl(FD, TIOCSETP, (char *)&arg); - ioctl(FD, TIOCLBIS, (char *)&bits); + cntrl.c_iflag |= IXOFF; + tcsetattr(FD, TCSAFLUSH, &cntrl); } /* @@ -538,7 +537,6 @@ } static char partab[0200]; -static int bits8; /* * Do a write to the remote machine with the correct parity.