xref: /csrg-svn/bin/stty/stty.c (revision 1402)
1*1402Sbill static char *sccsid ="@(#)stty.c	4.2 (Berkeley) 10/11/80";
21179Sbill /*
31179Sbill  * set teletype modes
41179Sbill  */
51179Sbill 
61179Sbill #include <stdio.h>
71179Sbill #include <sgtty.h>
81179Sbill 
91179Sbill struct
101179Sbill {
111179Sbill 	char	*string;
121179Sbill 	int	speed;
131179Sbill } speeds[] = {
141179Sbill 	"0",	B0,
151179Sbill 	"50",	B50,
161179Sbill 	"75",	B75,
171179Sbill 	"110",	B110,
181179Sbill 	"134",	B134,
191179Sbill 	"134.5",B134,
201179Sbill 	"150",	B150,
211179Sbill 	"200",	B200,
221179Sbill 	"300",	B300,
231179Sbill 	"600",	B600,
241179Sbill 	"1200",	B1200,
251179Sbill 	"1800",	B1800,
261179Sbill 	"2400",	B2400,
271179Sbill 	"4800",	B4800,
281179Sbill 	"9600",	B9600,
291179Sbill 	"exta",	EXTA,
301179Sbill 	"extb",	EXTB,
311179Sbill 	0,
321179Sbill };
331179Sbill struct
341179Sbill {
351179Sbill 	char	*string;
361179Sbill 	int	set;
371179Sbill 	int	reset;
381179Sbill 	int	lset;
391179Sbill 	int	lreset;
401179Sbill } modes[] = {
411179Sbill 	"even",		EVENP, 0, 0, 0,
421179Sbill 	"-even",	0, EVENP, 0, 0,
431179Sbill 	"odd",		ODDP, 0, 0, 0,
441179Sbill 	"-odd",		0, ODDP, 0, 0,
451179Sbill 	"raw",		RAW, 0, 0, 0,
461179Sbill 	"-raw",		0, RAW, 0, 0,
471179Sbill 	"cooked",	0, RAW, 0, 0,
481179Sbill 	"-nl",		CRMOD, 0, 0, 0,
491179Sbill 	"nl",		0, CRMOD, 0, 0,
501179Sbill 	"echo",		ECHO, 0, 0, 0,
511179Sbill 	"-echo",	0, ECHO, 0, 0,
521179Sbill 	"LCASE",	LCASE, 0, 0, 0,
531179Sbill 	"lcase",	LCASE, 0, 0, 0,
541179Sbill 	"-LCASE",	0, LCASE, 0, 0,
551179Sbill 	"-lcase",	0, LCASE, 0, 0,
561179Sbill 	"-tabs",	XTABS, 0, 0, 0,
571179Sbill 	"tabs",		0, XTABS, 0, 0,
581179Sbill 	"tandem",	TANDEM, 0, 0, 0,
591179Sbill 	"-tandem",	0, TANDEM, 0, 0,
601179Sbill 	"cbreak",	CBREAK, 0, 0, 0,
611179Sbill 	"-cbreak",	0, CBREAK, 0, 0,
621179Sbill 	"cr0",		CR0, CR3, 0, 0,
631179Sbill 	"cr1",		CR1, CR3, 0, 0,
641179Sbill 	"cr2",		CR2, CR3, 0, 0,
651179Sbill 	"cr3",		CR3, CR3, 0, 0,
661179Sbill 	"tab0",		TAB0, XTABS, 0, 0,
671179Sbill 	"tab1",		TAB1, XTABS, 0, 0,
681179Sbill 	"tab2",		TAB2, XTABS, 0, 0,
691179Sbill 	"nl0",		NL0, NL3, 0, 0,
701179Sbill 	"nl1",		NL1, NL3, 0, 0,
711179Sbill 	"nl2",		NL2, NL3, 0, 0,
721179Sbill 	"nl3",		NL3, NL3, 0, 0,
731179Sbill 	"ff0",		FF0, FF1, 0, 0,
741179Sbill 	"ff1",		FF1, FF1, 0, 0,
751179Sbill 	"bs0",		BS0, BS1, 0, 0,
761179Sbill 	"bs1",		BS1, BS1, 0, 0,
771179Sbill 	"33",		CR1, ALLDELAY, 0, 0,
781179Sbill 	"tty33",	CR1, ALLDELAY, 0, 0,
791179Sbill 	"37",		FF1+CR2+TAB1+NL1, ALLDELAY, 0, 0,
801179Sbill 	"tty37",	FF1+CR2+TAB1+NL1, ALLDELAY, 0, 0,
811179Sbill 	"05",		NL2, ALLDELAY, 0, 0,
821179Sbill 	"vt05",		NL2, ALLDELAY, 0, 0,
831179Sbill 	"tn",		CR1, ALLDELAY, 0, 0,
841179Sbill 	"tn300",	CR1, ALLDELAY, 0, 0,
851179Sbill 	"ti",		CR2, ALLDELAY, 0, 0,
861179Sbill 	"ti700",	CR2, ALLDELAY, 0, 0,
871179Sbill 	"tek",		FF1, ALLDELAY, 0, 0,
881179Sbill 	"crtbs",	0, 0, LCRTBS, LPRTERA,
891179Sbill 	"-crtbs",	0, 0, 0, LCRTBS,
901179Sbill 	"prterase",	0, 0, LPRTERA, LCRTBS+LCRTKIL+LCRTERA,
911179Sbill 	"-prterase",	0, 0, 0, LPRTERA,
921179Sbill 	"crterase",	0, 0, LCRTERA, LPRTERA,
931179Sbill 	"-crterase",	0, 0, 0, LCRTERA,
941179Sbill 	"crtkill",	0, 0, LCRTKIL, LPRTERA,
951179Sbill 	"-crtkill",	0, 0, 0, LCRTKIL,
961179Sbill 	"tilde",	0, 0, LTILDE, 0,
971179Sbill 	"-tilde",	0, 0, 0, LTILDE,
981179Sbill 	"mdmbuf",	0, 0, LMDMBUF, 0,
991179Sbill 	"-mdmbuf",	0, 0, 0, LMDMBUF,
1001179Sbill 	"litout",	0, 0, LLITOUT, 0,
1011179Sbill 	"-litout",	0, 0, 0, LLITOUT,
1021179Sbill 	"tostop",	0, 0, LTOSTOP, 0,
1031179Sbill 	"-tostop",	0, 0, 0, LTOSTOP,
1041179Sbill 	"flusho",	0, 0, LFLUSHO, 0,
1051179Sbill 	"-flusho",	0, 0, 0, LFLUSHO,
1061179Sbill 	"nohang",	0, 0, LNOHANG, 0,
1071179Sbill 	"-nohang",	0, 0, 0, LNOHANG,
1081179Sbill 	"etxack",	0, 0, LETXACK, 0,
1091179Sbill 	"-etxack",	0, 0, 0, LETXACK,
1101179Sbill 	"intrup",	0, 0, LINTRUP, 0,
1111179Sbill 	"-intrup",	0, 0, 0, LINTRUP,
1121179Sbill 	"ctlecho",	0, 0, LCTLECH, 0,
1131179Sbill 	"-ctlecho",	0, 0, 0, LCTLECH,
1141179Sbill 	"pendin",	0, 0, LPENDIN, 0,
1151179Sbill 	"-pendin",	0, 0, 0, LPENDIN,
1161179Sbill 	0,
1171179Sbill };
1181179Sbill 
1191179Sbill struct tchars tc;
1201179Sbill struct ltchars ltc;
1211179Sbill struct sgttyb mode;
1221179Sbill int	lmode;
1231179Sbill int	oldisc, ldisc;
1241179Sbill 
1251179Sbill #define	CTRL(x)		('x'&037)
1261179Sbill 
1271179Sbill struct	special {
1281179Sbill 	char	*name;
1291179Sbill 	char	*cp;
1301179Sbill 	char	def;
1311179Sbill } special[] = {
1321179Sbill 	"erase",	&mode.sg_erase,		CTRL(h),
1331179Sbill 	"kill",		&mode.sg_kill,		'@',
1341179Sbill 	"intr",		&tc.t_intrc,		0177,
1351179Sbill 	"quit",		&tc.t_quitc,		CTRL(\\\\),
1361179Sbill 	"start",	&tc.t_startc,		CTRL(q),
1371179Sbill 	"stop",		&tc.t_stopc,		CTRL(s),
1381179Sbill 	"eof",		&tc.t_eofc,		CTRL(d),
1391179Sbill 	"brk",		&tc.t_brkc,		0377,
1401179Sbill 	"susp",		&ltc.t_suspc,		CTRL(z),
1411179Sbill 	"dsusp",	&ltc.t_dsuspc,		CTRL(y),
1421179Sbill 	"rprnt",	&ltc.t_rprntc,		CTRL(r),
1431179Sbill 	"flush",	&ltc.t_flushc,		CTRL(o),
1441179Sbill 	"werase",	&ltc.t_werasc,		CTRL(w),
1451179Sbill 	"lnext",	&ltc.t_lnextc,		CTRL(v),
1461179Sbill 	0
1471179Sbill };
1481179Sbill char	*arg;
1491179Sbill 
1501179Sbill int	argc;
1511179Sbill char	**argv;
1521179Sbill main(iargc, iargv)
1531179Sbill char	**iargv;
1541179Sbill {
1551179Sbill 	int i;
1561179Sbill 	register struct special *sp;
1571179Sbill 	char obuf[BUFSIZ];
1581179Sbill 
1591179Sbill 	setbuf(stderr, obuf);
1601179Sbill 	argc = iargc;
1611179Sbill 	argv = iargv;
1621179Sbill 	gtty(1, &mode);
1631179Sbill 	ioctl(1, TIOCGETD, &ldisc);
1641179Sbill 	oldisc = ldisc;
1651179Sbill 	ioctl(1, TIOCGETC, &tc);
1661179Sbill 	ioctl(1, TIOCLGET, &lmode);
1671179Sbill 	ioctl(1, TIOCGLTC, &ltc);
1681179Sbill 	if(argc == 1) {
1691179Sbill 		prmodes(0);
1701179Sbill 		exit(0);
1711179Sbill 	}
1721179Sbill 	if (argc == 2 && !strcmp(argv[1], "all")) {
1731179Sbill 		prmodes(1);
1741179Sbill 		exit(0);
1751179Sbill 	}
1761179Sbill 	if (argc == 2 && !strcmp(argv[1], "everything")) {
1771179Sbill 		prmodes(2);
1781179Sbill 		exit(0);
1791179Sbill 	}
1801179Sbill /*
1811179Sbill 	if (argc == 2 && !strcmp(argv[1], "all")) {
1821179Sbill 		prmodes(2);
1831179Sbill 		exit(0);
1841179Sbill 	}
1851179Sbill */
1861179Sbill 	while(--argc > 0) {
1871179Sbill 		arg = *++argv;
1881179Sbill 		if (eq("ek")){
1891179Sbill 			mode.sg_erase = '#';
1901179Sbill 			mode.sg_kill = '@';
1911179Sbill 			continue;
1921179Sbill 		}
1931179Sbill 		if (eq("new")){
1941179Sbill 			ldisc = NTTYDISC;
1951179Sbill 			if (ioctl(1, TIOCSETD, &ldisc)<0)
1961179Sbill 				perror("ioctl");
1971179Sbill 			continue;
1981179Sbill 		}
1991179Sbill 		if (eq("newcrt")){
2001179Sbill 			ldisc = NTTYDISC;
2011179Sbill 			lmode &= ~LPRTERA;
2021179Sbill 			lmode |= LCRTBS|LCTLECH;
2031179Sbill 			if (mode.sg_ospeed >= B1200)
2041179Sbill 				lmode |= LCRTERA|LCRTKIL;
2051179Sbill 			if (ioctl(1, TIOCSETD, &ldisc)<0)
2061179Sbill 				perror("ioctl");
2071179Sbill 			continue;
2081179Sbill 		}
2091179Sbill 		if (eq("crt")){
2101179Sbill 			lmode &= ~LPRTERA;
2111179Sbill 			lmode |= LCRTBS|LCTLECH;
2121179Sbill 			if (mode.sg_ospeed >= B1200)
2131179Sbill 				lmode |= LCRTERA|LCRTKIL;
2141179Sbill 			continue;
2151179Sbill 		}
2161179Sbill 		if (eq("old")){
2171179Sbill 			ldisc = 0;
2181179Sbill 			if (ioctl(1, TIOCSETD, &ldisc)<0)
2191179Sbill 				perror("ioctl");
2201179Sbill 			continue;
2211179Sbill 		}
2221179Sbill 		for (sp = special; sp->name; sp++)
2231179Sbill 			if (eq(sp->name)) {
2241179Sbill 				if (--argc == 0)
2251179Sbill 					goto done;
2261179Sbill 				if (**++argv == 'u')
2271179Sbill 					*sp->cp = 0377;
2281179Sbill 				else if (**argv == '^')
2291179Sbill 					*sp->cp = (*(argv[1]) == '?') ?
2301179Sbill 					    0177 : (*argv)[1] & 037;
2311179Sbill 				else
2321179Sbill 					*sp->cp = **argv;
2331179Sbill 				goto cont;
2341179Sbill 			}
2351179Sbill 		if (eq("gspeed")) {
2361179Sbill 			mode.sg_ispeed = B300;
2371179Sbill 			mode.sg_ospeed = B9600;
2381179Sbill 			continue;
2391179Sbill 		}
2401179Sbill 		if (eq("hup")) {
2411179Sbill 			ioctl(1, TIOCHPCL, NULL);
2421179Sbill 			continue;
2431179Sbill 		}
2441179Sbill 		for(i=0; speeds[i].string; i++)
2451179Sbill 			if(eq(speeds[i].string)) {
2461179Sbill 				mode.sg_ispeed = mode.sg_ospeed = speeds[i].speed;
2471179Sbill 				goto cont;
2481179Sbill 			}
2491179Sbill 		if (eq("speed")) {
2501179Sbill 			gtty(open("/dev/tty", 0), &mode);
2511179Sbill 			for(i=0; speeds[i].string; i++)
2521179Sbill 				if (mode.sg_ospeed == speeds[i].speed) {
2531179Sbill 					printf("%s\n", speeds[i].string);
2541179Sbill 					exit(0);
2551179Sbill 				}
2561179Sbill 			printf("unknown\n");
2571179Sbill 			exit(1);
2581179Sbill 		}
2591179Sbill 		for(i=0; modes[i].string; i++)
2601179Sbill 			if(eq(modes[i].string)) {
2611179Sbill 				mode.sg_flags &= ~modes[i].reset;
2621179Sbill 				mode.sg_flags |= modes[i].set;
2631179Sbill 				lmode &= ~modes[i].lreset;
2641179Sbill 				lmode |= modes[i].lset;
2651179Sbill 			}
2661179Sbill 		if(arg)
2671179Sbill 			fprintf(stderr,"unknown mode: %s\n", arg);
2681179Sbill cont:
2691179Sbill 		;
2701179Sbill 	}
2711179Sbill done:
2721179Sbill 	ioctl(1, TIOCSETN, &mode);
2731179Sbill 	ioctl(1, TIOCSETC, &tc);
2741179Sbill 	ioctl(1, TIOCSLTC, &ltc);
2751179Sbill 	ioctl(1, TIOCLSET, &lmode);
2761179Sbill }
2771179Sbill 
2781179Sbill eq(string)
2791179Sbill char *string;
2801179Sbill {
2811179Sbill 	int i;
2821179Sbill 
2831179Sbill 	if(!arg)
2841179Sbill 		return(0);
2851179Sbill 	i = 0;
2861179Sbill loop:
2871179Sbill 	if(arg[i] != string[i])
2881179Sbill 		return(0);
2891179Sbill 	if(arg[i++] != '\0')
2901179Sbill 		goto loop;
2911179Sbill 	arg = 0;
2921179Sbill 	return(1);
2931179Sbill }
2941179Sbill 
2951179Sbill prmodes(all)
2961179Sbill {
2971179Sbill 	register m;
2981179Sbill 	int any;
2991179Sbill 
3001179Sbill 	if(ldisc==NETLDISC)
3011179Sbill 		fprintf(stderr, "net discipline, ");
3021179Sbill 	else if(ldisc==NTTYDISC)
3031179Sbill 		fprintf(stderr, "new tty, ");
3041179Sbill 	else if(all==2)
3051179Sbill 		fprintf(stderr, "old tty, ");
3061179Sbill 	if(mode.sg_ispeed != mode.sg_ospeed) {
3071179Sbill 		prspeed("input speed ", mode.sg_ispeed);
3081179Sbill 		prspeed("output speed ", mode.sg_ospeed);
3091179Sbill 	} else
3101179Sbill 		prspeed("speed ", mode.sg_ispeed);
3111179Sbill 	fprintf(stderr, all==2 ? "\n" : "; ");
3121179Sbill 	m = mode.sg_flags;
3131179Sbill 	if(all==2 || (m&(EVENP|ODDP))!=(EVENP|ODDP)) {
3141179Sbill 		if(m & EVENP)	fprintf(stderr,"even ");
3151179Sbill 		if(m & ODDP)	fprintf(stderr,"odd ");
3161179Sbill 	}
3171179Sbill 	if(all==2 || m&RAW)
3181179Sbill 		fprintf(stderr,"-raw "+((m&RAW)!=0));
3191179Sbill 	if(all==2 || (m&CRMOD)==0)
3201179Sbill 		fprintf(stderr,"-nl "+((m&CRMOD)==0));
3211179Sbill 	if(all==2 || (m&ECHO)==0)
3221179Sbill 		fprintf(stderr,"-echo "+((m&ECHO)!=0));
3231179Sbill 	if(all==2 || (m&LCASE))
3241179Sbill 		fprintf(stderr,"-lcase "+((m&LCASE)!=0));
3251179Sbill 	if(all==2 || (m&TANDEM))
3261179Sbill 		fprintf(stderr,"-tandem "+((m&TANDEM)!=0));
3271179Sbill 	fprintf(stderr,"-tabs "+((m&XTABS)!=XTABS));
3281179Sbill 	if(all==2 || (m&CBREAK))
3291179Sbill 		fprintf(stderr,"-cbreak "+((m&CBREAK)!=0));
3301179Sbill 	if(all==2 || (m&NLDELAY))
3311179Sbill 		delay((m&NLDELAY)/NL1,	"nl");
3321179Sbill 	if ((m&TBDELAY)!=XTABS)
3331179Sbill 		delay((m&TBDELAY)/TAB1,	"tab");
3341179Sbill 	if(all==2 || (m&CRDELAY))
3351179Sbill 		delay((m&CRDELAY)/CR1,	"cr");
3361179Sbill 	if(all==2 || (m&VTDELAY))
3371179Sbill 		delay((m&VTDELAY)/FF1,	"ff");
3381179Sbill 	if(all==2 || (m&BSDELAY))
3391179Sbill 		delay((m&BSDELAY)/BS1,	"bs");
3401179Sbill 	if (all)
3411179Sbill 		fprintf(stderr,"\n");
3421179Sbill #define	lpit(what,str) \
3431179Sbill 	if (all==2||(lmode&what)) { \
3441179Sbill 		fprintf(stderr,str+((lmode&what)!=0)); any++; \
3451179Sbill 	}
3461179Sbill 	if (ldisc == NTTYDISC) {
3471179Sbill 		int newcrt = (lmode&(LCTLECH|LCRTBS)) == (LCTLECH|LCRTBS) &&
3481179Sbill 		    (lmode&(LCRTERA|LCRTKIL)) ==
3491179Sbill 		      ((mode.sg_ospeed > B300) ? LCRTERA|LCRTKIL : 0);
3501179Sbill 		if (newcrt) {
3511179Sbill 			if (all==2)
352*1402Sbill 				fprintf(stderr, "crt: (crtbs crterase crtkill ctlecho) ");
3531179Sbill 			else
354*1402Sbill 				fprintf(stderr, "crt ");
3551179Sbill 			any++;
3561179Sbill 		} else {
3571179Sbill 			lpit(LCRTBS, "-crtbs ");
3581179Sbill 			lpit(LCRTERA, "-crterase ");
3591179Sbill 			lpit(LCRTKIL, "-crtkill ");
3601179Sbill 			lpit(LCTLECH, "-ctlecho ");
3611179Sbill 			lpit(LPRTERA, "-prterase ");
3621179Sbill 		}
3631179Sbill 		lpit(LTOSTOP, "-tostop ");
3641179Sbill 		lpit(LINTRUP, "-intrup ");
3651179Sbill 		if (all==2) {
3661179Sbill 			fprintf(stderr, "\n");
3671179Sbill 			any = 0;
3681179Sbill 		}
3691179Sbill 		lpit(LTILDE, "-tilde ");
3701179Sbill 		lpit(LFLUSHO, "-flusho ");
3711179Sbill 		lpit(LMDMBUF, "-mdmbuf ");
3721179Sbill 		lpit(LLITOUT, "-litout ");
3731179Sbill 		lpit(LNOHANG, "-nohang ");
3741179Sbill 		lpit(LETXACK, "-etxack ");
3751179Sbill 		lpit(LPENDIN, "-pendin ");
3761179Sbill 		if (any)
3771179Sbill 			fprintf(stderr,"\n");
3781179Sbill 	} else if (!all)
3791179Sbill 		fprintf(stderr,"\n");
3801179Sbill 	if (all) {
3811179Sbill 		switch (ldisc) {
3821179Sbill 
3831179Sbill 		case 0:
3841179Sbill 			fprintf(stderr,"\
3851179Sbill erase  kill   intr   quit   stop   eof\
3861179Sbill \n");
3871179Sbill 			pcol(mode.sg_erase, -1);
3881179Sbill 			pcol(mode.sg_kill, -1);
3891179Sbill 			pcol(tc.t_intrc, -1);
3901179Sbill 			pcol(tc.t_quitc, -1);
3911179Sbill 			pcol(tc.t_stopc, tc.t_startc);
3921179Sbill 			pcol(tc.t_eofc, tc.t_brkc);
3931179Sbill 			fprintf(stderr,"\n");
3941179Sbill 			break;
3951179Sbill 
3961179Sbill 		case NTTYDISC:
3971179Sbill 			fprintf(stderr,"\
3981179Sbill erase  kill   werase rprnt  flush  lnext  susp   intr   quit   stop   eof\
3991179Sbill \n");
4001179Sbill 			pcol(mode.sg_erase, -1);
4011179Sbill 			pcol(mode.sg_kill, -1);
4021179Sbill 			pcol(ltc.t_werasc, -1);
4031179Sbill 			pcol(ltc.t_rprntc, -1);
4041179Sbill 			pcol(ltc.t_flushc, -1);
4051179Sbill 			pcol(ltc.t_lnextc, -1);
4061179Sbill 			pcol(ltc.t_suspc, ltc.t_dsuspc);
4071179Sbill 			pcol(tc.t_intrc, -1);
4081179Sbill 			pcol(tc.t_quitc, -1);
4091179Sbill 			pcol(tc.t_stopc, tc.t_startc);
4101179Sbill 			pcol(tc.t_eofc, tc.t_brkc);
4111179Sbill 			fprintf(stderr,"\n");
4121179Sbill 			break;
4131179Sbill 		}
4141179Sbill 	} else if (ldisc != NETLDISC) {
4151179Sbill 		register struct special *sp;
4161179Sbill 		int first = 1;
4171179Sbill 		for (sp = special; sp->name; sp++) {
4181179Sbill 			if ((*sp->cp&0377) != (sp->def&0377)) {
4191179Sbill 				pit(*sp->cp, sp->name, first ? "" : ", ");
4201179Sbill 				first = 0;
4211179Sbill 			};
4221179Sbill 			if (sp->cp == &tc.t_brkc && ldisc == 0)
4231179Sbill 				break;
4241179Sbill 		}
4251179Sbill 		if (first == 0)
4261179Sbill 			fprintf(stderr, "\n");
4271179Sbill 	}
4281179Sbill }
4291179Sbill 
4301179Sbill pcol(ch1, ch2)
4311179Sbill 	int ch1, ch2;
4321179Sbill {
4331179Sbill 	int nout = 0;
4341179Sbill 
4351179Sbill 	ch1 &= 0377;
4361179Sbill 	ch2 &= 0377;
4371179Sbill 	if (ch1 == ch2)
4381179Sbill 		ch2 = 0377;
4391179Sbill 	for (; ch1 != 0377 || ch2 != 0377; ch1 = ch2, ch2 = 0377) {
4401179Sbill 		if (ch1 == 0377)
4411179Sbill 			continue;
4421179Sbill 		if (ch1 & 0200) {
4431179Sbill 			fprintf(stderr, "M-");
4441179Sbill 			nout += 2;
4451179Sbill 			ch1 &= ~ 0200;
4461179Sbill 		}
4471179Sbill 		if (ch1 == 0177) {
4481179Sbill 			fprintf(stderr, "^");
4491179Sbill 			nout++;
4501179Sbill 			ch1 = '?';
4511179Sbill 		} else if (ch1 < ' ') {
4521179Sbill 			fprintf(stderr, "^");
4531179Sbill 			nout++;
4541179Sbill 			ch1 += '@';
4551179Sbill 		}
4561179Sbill 		fprintf(stderr, "%c", ch1);
4571179Sbill 		nout++;
4581179Sbill 		if (ch2 != 0377) {
4591179Sbill 			fprintf(stderr, "/");
4601179Sbill 			nout++;
4611179Sbill 		}
4621179Sbill 	}
4631179Sbill 	while (nout < 7) {
4641179Sbill 		fprintf(stderr, " ");
4651179Sbill 		nout++;
4661179Sbill 	}
4671179Sbill }
4681179Sbill 
4691179Sbill pit(what, itsname, sep)
4701179Sbill 	unsigned what;
4711179Sbill 	char *itsname, *sep;
4721179Sbill {
4731179Sbill 
4741179Sbill 	what &= 0377;
4751179Sbill 	fprintf(stderr, "%s%s", sep, itsname);
4761179Sbill 	if (what == 0377) {
4771179Sbill 		fprintf(stderr, " <undef>");
4781179Sbill 		return;
4791179Sbill 	}
4801179Sbill 	fprintf(stderr, " = ");
4811179Sbill 	if (what & 0200) {
4821179Sbill 		fprintf(stderr, "M-");
4831179Sbill 		what &= ~ 0200;
4841179Sbill 	}
4851179Sbill 	if (what == 0177) {
4861179Sbill 		fprintf(stderr, "^");
4871179Sbill 		what = '?';
4881179Sbill 	} else if (what < ' ') {
4891179Sbill 		fprintf(stderr, "^");
4901179Sbill 		what += '@';
4911179Sbill 	}
4921179Sbill 	fprintf(stderr, "%c", what);
4931179Sbill }
4941179Sbill 
4951179Sbill delay(m, s)
4961179Sbill char *s;
4971179Sbill {
4981179Sbill 
4991179Sbill 	if(m)
5001179Sbill 		fprintf(stderr,"%s%d ", s, m);
5011179Sbill }
5021179Sbill 
5031179Sbill int	speed[] = {
5041179Sbill 	0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,0,0
5051179Sbill };
5061179Sbill 
5071179Sbill prspeed(c, s)
5081179Sbill char *c;
5091179Sbill {
5101179Sbill 
5111179Sbill 	fprintf(stderr,"%s%d baud",  c, speed[s]);
5121179Sbill }
513