xref: /csrg-svn/bin/stty/stty.c (revision 1179)
1*1179Sbill static char *sccsid ="@(#)stty.c	4.1 (Berkeley) 10/01/80";
2*1179Sbill /*
3*1179Sbill  * set teletype modes
4*1179Sbill  */
5*1179Sbill 
6*1179Sbill #include <stdio.h>
7*1179Sbill #include <sgtty.h>
8*1179Sbill 
9*1179Sbill struct
10*1179Sbill {
11*1179Sbill 	char	*string;
12*1179Sbill 	int	speed;
13*1179Sbill } speeds[] = {
14*1179Sbill 	"0",	B0,
15*1179Sbill 	"50",	B50,
16*1179Sbill 	"75",	B75,
17*1179Sbill 	"110",	B110,
18*1179Sbill 	"134",	B134,
19*1179Sbill 	"134.5",B134,
20*1179Sbill 	"150",	B150,
21*1179Sbill 	"200",	B200,
22*1179Sbill 	"300",	B300,
23*1179Sbill 	"600",	B600,
24*1179Sbill 	"1200",	B1200,
25*1179Sbill 	"1800",	B1800,
26*1179Sbill 	"2400",	B2400,
27*1179Sbill 	"4800",	B4800,
28*1179Sbill 	"9600",	B9600,
29*1179Sbill 	"exta",	EXTA,
30*1179Sbill 	"extb",	EXTB,
31*1179Sbill 	0,
32*1179Sbill };
33*1179Sbill struct
34*1179Sbill {
35*1179Sbill 	char	*string;
36*1179Sbill 	int	set;
37*1179Sbill 	int	reset;
38*1179Sbill 	int	lset;
39*1179Sbill 	int	lreset;
40*1179Sbill } modes[] = {
41*1179Sbill 	"even",		EVENP, 0, 0, 0,
42*1179Sbill 	"-even",	0, EVENP, 0, 0,
43*1179Sbill 	"odd",		ODDP, 0, 0, 0,
44*1179Sbill 	"-odd",		0, ODDP, 0, 0,
45*1179Sbill 	"raw",		RAW, 0, 0, 0,
46*1179Sbill 	"-raw",		0, RAW, 0, 0,
47*1179Sbill 	"cooked",	0, RAW, 0, 0,
48*1179Sbill 	"-nl",		CRMOD, 0, 0, 0,
49*1179Sbill 	"nl",		0, CRMOD, 0, 0,
50*1179Sbill 	"echo",		ECHO, 0, 0, 0,
51*1179Sbill 	"-echo",	0, ECHO, 0, 0,
52*1179Sbill 	"LCASE",	LCASE, 0, 0, 0,
53*1179Sbill 	"lcase",	LCASE, 0, 0, 0,
54*1179Sbill 	"-LCASE",	0, LCASE, 0, 0,
55*1179Sbill 	"-lcase",	0, LCASE, 0, 0,
56*1179Sbill 	"-tabs",	XTABS, 0, 0, 0,
57*1179Sbill 	"tabs",		0, XTABS, 0, 0,
58*1179Sbill 	"tandem",	TANDEM, 0, 0, 0,
59*1179Sbill 	"-tandem",	0, TANDEM, 0, 0,
60*1179Sbill 	"cbreak",	CBREAK, 0, 0, 0,
61*1179Sbill 	"-cbreak",	0, CBREAK, 0, 0,
62*1179Sbill 	"cr0",		CR0, CR3, 0, 0,
63*1179Sbill 	"cr1",		CR1, CR3, 0, 0,
64*1179Sbill 	"cr2",		CR2, CR3, 0, 0,
65*1179Sbill 	"cr3",		CR3, CR3, 0, 0,
66*1179Sbill 	"tab0",		TAB0, XTABS, 0, 0,
67*1179Sbill 	"tab1",		TAB1, XTABS, 0, 0,
68*1179Sbill 	"tab2",		TAB2, XTABS, 0, 0,
69*1179Sbill 	"nl0",		NL0, NL3, 0, 0,
70*1179Sbill 	"nl1",		NL1, NL3, 0, 0,
71*1179Sbill 	"nl2",		NL2, NL3, 0, 0,
72*1179Sbill 	"nl3",		NL3, NL3, 0, 0,
73*1179Sbill 	"ff0",		FF0, FF1, 0, 0,
74*1179Sbill 	"ff1",		FF1, FF1, 0, 0,
75*1179Sbill 	"bs0",		BS0, BS1, 0, 0,
76*1179Sbill 	"bs1",		BS1, BS1, 0, 0,
77*1179Sbill 	"33",		CR1, ALLDELAY, 0, 0,
78*1179Sbill 	"tty33",	CR1, ALLDELAY, 0, 0,
79*1179Sbill 	"37",		FF1+CR2+TAB1+NL1, ALLDELAY, 0, 0,
80*1179Sbill 	"tty37",	FF1+CR2+TAB1+NL1, ALLDELAY, 0, 0,
81*1179Sbill 	"05",		NL2, ALLDELAY, 0, 0,
82*1179Sbill 	"vt05",		NL2, ALLDELAY, 0, 0,
83*1179Sbill 	"tn",		CR1, ALLDELAY, 0, 0,
84*1179Sbill 	"tn300",	CR1, ALLDELAY, 0, 0,
85*1179Sbill 	"ti",		CR2, ALLDELAY, 0, 0,
86*1179Sbill 	"ti700",	CR2, ALLDELAY, 0, 0,
87*1179Sbill 	"tek",		FF1, ALLDELAY, 0, 0,
88*1179Sbill 	"crtbs",	0, 0, LCRTBS, LPRTERA,
89*1179Sbill 	"-crtbs",	0, 0, 0, LCRTBS,
90*1179Sbill 	"prterase",	0, 0, LPRTERA, LCRTBS+LCRTKIL+LCRTERA,
91*1179Sbill 	"-prterase",	0, 0, 0, LPRTERA,
92*1179Sbill 	"crterase",	0, 0, LCRTERA, LPRTERA,
93*1179Sbill 	"-crterase",	0, 0, 0, LCRTERA,
94*1179Sbill 	"crtkill",	0, 0, LCRTKIL, LPRTERA,
95*1179Sbill 	"-crtkill",	0, 0, 0, LCRTKIL,
96*1179Sbill 	"tilde",	0, 0, LTILDE, 0,
97*1179Sbill 	"-tilde",	0, 0, 0, LTILDE,
98*1179Sbill 	"mdmbuf",	0, 0, LMDMBUF, 0,
99*1179Sbill 	"-mdmbuf",	0, 0, 0, LMDMBUF,
100*1179Sbill 	"litout",	0, 0, LLITOUT, 0,
101*1179Sbill 	"-litout",	0, 0, 0, LLITOUT,
102*1179Sbill 	"tostop",	0, 0, LTOSTOP, 0,
103*1179Sbill 	"-tostop",	0, 0, 0, LTOSTOP,
104*1179Sbill 	"flusho",	0, 0, LFLUSHO, 0,
105*1179Sbill 	"-flusho",	0, 0, 0, LFLUSHO,
106*1179Sbill 	"nohang",	0, 0, LNOHANG, 0,
107*1179Sbill 	"-nohang",	0, 0, 0, LNOHANG,
108*1179Sbill 	"etxack",	0, 0, LETXACK, 0,
109*1179Sbill 	"-etxack",	0, 0, 0, LETXACK,
110*1179Sbill 	"intrup",	0, 0, LINTRUP, 0,
111*1179Sbill 	"-intrup",	0, 0, 0, LINTRUP,
112*1179Sbill 	"ctlecho",	0, 0, LCTLECH, 0,
113*1179Sbill 	"-ctlecho",	0, 0, 0, LCTLECH,
114*1179Sbill 	"pendin",	0, 0, LPENDIN, 0,
115*1179Sbill 	"-pendin",	0, 0, 0, LPENDIN,
116*1179Sbill 	0,
117*1179Sbill };
118*1179Sbill 
119*1179Sbill struct tchars tc;
120*1179Sbill struct ltchars ltc;
121*1179Sbill struct sgttyb mode;
122*1179Sbill int	lmode;
123*1179Sbill int	oldisc, ldisc;
124*1179Sbill 
125*1179Sbill #define	CTRL(x)		('x'&037)
126*1179Sbill 
127*1179Sbill struct	special {
128*1179Sbill 	char	*name;
129*1179Sbill 	char	*cp;
130*1179Sbill 	char	def;
131*1179Sbill } special[] = {
132*1179Sbill 	"erase",	&mode.sg_erase,		CTRL(h),
133*1179Sbill 	"kill",		&mode.sg_kill,		'@',
134*1179Sbill 	"intr",		&tc.t_intrc,		0177,
135*1179Sbill 	"quit",		&tc.t_quitc,		CTRL(\\\\),
136*1179Sbill 	"start",	&tc.t_startc,		CTRL(q),
137*1179Sbill 	"stop",		&tc.t_stopc,		CTRL(s),
138*1179Sbill 	"eof",		&tc.t_eofc,		CTRL(d),
139*1179Sbill 	"brk",		&tc.t_brkc,		0377,
140*1179Sbill 	"susp",		&ltc.t_suspc,		CTRL(z),
141*1179Sbill 	"dsusp",	&ltc.t_dsuspc,		CTRL(y),
142*1179Sbill 	"rprnt",	&ltc.t_rprntc,		CTRL(r),
143*1179Sbill 	"flush",	&ltc.t_flushc,		CTRL(o),
144*1179Sbill 	"werase",	&ltc.t_werasc,		CTRL(w),
145*1179Sbill 	"lnext",	&ltc.t_lnextc,		CTRL(v),
146*1179Sbill 	0
147*1179Sbill };
148*1179Sbill char	*arg;
149*1179Sbill 
150*1179Sbill int	argc;
151*1179Sbill char	**argv;
152*1179Sbill main(iargc, iargv)
153*1179Sbill char	**iargv;
154*1179Sbill {
155*1179Sbill 	int i;
156*1179Sbill 	register struct special *sp;
157*1179Sbill 	char obuf[BUFSIZ];
158*1179Sbill 
159*1179Sbill 	setbuf(stderr, obuf);
160*1179Sbill 	argc = iargc;
161*1179Sbill 	argv = iargv;
162*1179Sbill 	gtty(1, &mode);
163*1179Sbill 	ioctl(1, TIOCGETD, &ldisc);
164*1179Sbill 	oldisc = ldisc;
165*1179Sbill 	ioctl(1, TIOCGETC, &tc);
166*1179Sbill 	ioctl(1, TIOCLGET, &lmode);
167*1179Sbill 	ioctl(1, TIOCGLTC, &ltc);
168*1179Sbill 	if(argc == 1) {
169*1179Sbill 		prmodes(0);
170*1179Sbill 		exit(0);
171*1179Sbill 	}
172*1179Sbill 	if (argc == 2 && !strcmp(argv[1], "all")) {
173*1179Sbill 		prmodes(1);
174*1179Sbill 		exit(0);
175*1179Sbill 	}
176*1179Sbill 	if (argc == 2 && !strcmp(argv[1], "everything")) {
177*1179Sbill 		prmodes(2);
178*1179Sbill 		exit(0);
179*1179Sbill 	}
180*1179Sbill /*
181*1179Sbill 	if (argc == 2 && !strcmp(argv[1], "all")) {
182*1179Sbill 		prmodes(2);
183*1179Sbill 		exit(0);
184*1179Sbill 	}
185*1179Sbill */
186*1179Sbill 	while(--argc > 0) {
187*1179Sbill 		arg = *++argv;
188*1179Sbill 		if (eq("ek")){
189*1179Sbill 			mode.sg_erase = '#';
190*1179Sbill 			mode.sg_kill = '@';
191*1179Sbill 			continue;
192*1179Sbill 		}
193*1179Sbill 		if (eq("new")){
194*1179Sbill 			ldisc = NTTYDISC;
195*1179Sbill 			if (ioctl(1, TIOCSETD, &ldisc)<0)
196*1179Sbill 				perror("ioctl");
197*1179Sbill 			continue;
198*1179Sbill 		}
199*1179Sbill 		if (eq("newcrt")){
200*1179Sbill 			ldisc = NTTYDISC;
201*1179Sbill 			lmode &= ~LPRTERA;
202*1179Sbill 			lmode |= LCRTBS|LCTLECH;
203*1179Sbill 			if (mode.sg_ospeed >= B1200)
204*1179Sbill 				lmode |= LCRTERA|LCRTKIL;
205*1179Sbill 			if (ioctl(1, TIOCSETD, &ldisc)<0)
206*1179Sbill 				perror("ioctl");
207*1179Sbill 			continue;
208*1179Sbill 		}
209*1179Sbill 		if (eq("crt")){
210*1179Sbill 			lmode &= ~LPRTERA;
211*1179Sbill 			lmode |= LCRTBS|LCTLECH;
212*1179Sbill 			if (mode.sg_ospeed >= B1200)
213*1179Sbill 				lmode |= LCRTERA|LCRTKIL;
214*1179Sbill 			continue;
215*1179Sbill 		}
216*1179Sbill 		if (eq("old")){
217*1179Sbill 			ldisc = 0;
218*1179Sbill 			if (ioctl(1, TIOCSETD, &ldisc)<0)
219*1179Sbill 				perror("ioctl");
220*1179Sbill 			continue;
221*1179Sbill 		}
222*1179Sbill 		for (sp = special; sp->name; sp++)
223*1179Sbill 			if (eq(sp->name)) {
224*1179Sbill 				if (--argc == 0)
225*1179Sbill 					goto done;
226*1179Sbill 				if (**++argv == 'u')
227*1179Sbill 					*sp->cp = 0377;
228*1179Sbill 				else if (**argv == '^')
229*1179Sbill 					*sp->cp = (*(argv[1]) == '?') ?
230*1179Sbill 					    0177 : (*argv)[1] & 037;
231*1179Sbill 				else
232*1179Sbill 					*sp->cp = **argv;
233*1179Sbill 				goto cont;
234*1179Sbill 			}
235*1179Sbill 		if (eq("gspeed")) {
236*1179Sbill 			mode.sg_ispeed = B300;
237*1179Sbill 			mode.sg_ospeed = B9600;
238*1179Sbill 			continue;
239*1179Sbill 		}
240*1179Sbill 		if (eq("hup")) {
241*1179Sbill 			ioctl(1, TIOCHPCL, NULL);
242*1179Sbill 			continue;
243*1179Sbill 		}
244*1179Sbill 		for(i=0; speeds[i].string; i++)
245*1179Sbill 			if(eq(speeds[i].string)) {
246*1179Sbill 				mode.sg_ispeed = mode.sg_ospeed = speeds[i].speed;
247*1179Sbill 				goto cont;
248*1179Sbill 			}
249*1179Sbill 		if (eq("speed")) {
250*1179Sbill 			gtty(open("/dev/tty", 0), &mode);
251*1179Sbill 			for(i=0; speeds[i].string; i++)
252*1179Sbill 				if (mode.sg_ospeed == speeds[i].speed) {
253*1179Sbill 					printf("%s\n", speeds[i].string);
254*1179Sbill 					exit(0);
255*1179Sbill 				}
256*1179Sbill 			printf("unknown\n");
257*1179Sbill 			exit(1);
258*1179Sbill 		}
259*1179Sbill 		for(i=0; modes[i].string; i++)
260*1179Sbill 			if(eq(modes[i].string)) {
261*1179Sbill 				mode.sg_flags &= ~modes[i].reset;
262*1179Sbill 				mode.sg_flags |= modes[i].set;
263*1179Sbill 				lmode &= ~modes[i].lreset;
264*1179Sbill 				lmode |= modes[i].lset;
265*1179Sbill 			}
266*1179Sbill 		if(arg)
267*1179Sbill 			fprintf(stderr,"unknown mode: %s\n", arg);
268*1179Sbill cont:
269*1179Sbill 		;
270*1179Sbill 	}
271*1179Sbill done:
272*1179Sbill 	ioctl(1, TIOCSETN, &mode);
273*1179Sbill 	ioctl(1, TIOCSETC, &tc);
274*1179Sbill 	ioctl(1, TIOCSLTC, &ltc);
275*1179Sbill 	ioctl(1, TIOCLSET, &lmode);
276*1179Sbill }
277*1179Sbill 
278*1179Sbill eq(string)
279*1179Sbill char *string;
280*1179Sbill {
281*1179Sbill 	int i;
282*1179Sbill 
283*1179Sbill 	if(!arg)
284*1179Sbill 		return(0);
285*1179Sbill 	i = 0;
286*1179Sbill loop:
287*1179Sbill 	if(arg[i] != string[i])
288*1179Sbill 		return(0);
289*1179Sbill 	if(arg[i++] != '\0')
290*1179Sbill 		goto loop;
291*1179Sbill 	arg = 0;
292*1179Sbill 	return(1);
293*1179Sbill }
294*1179Sbill 
295*1179Sbill prmodes(all)
296*1179Sbill {
297*1179Sbill 	register m;
298*1179Sbill 	int any;
299*1179Sbill 
300*1179Sbill 	if(ldisc==NETLDISC)
301*1179Sbill 		fprintf(stderr, "net discipline, ");
302*1179Sbill 	else if(ldisc==NTTYDISC)
303*1179Sbill 		fprintf(stderr, "new tty, ");
304*1179Sbill 	else if(all==2)
305*1179Sbill 		fprintf(stderr, "old tty, ");
306*1179Sbill 	if(mode.sg_ispeed != mode.sg_ospeed) {
307*1179Sbill 		prspeed("input speed ", mode.sg_ispeed);
308*1179Sbill 		prspeed("output speed ", mode.sg_ospeed);
309*1179Sbill 	} else
310*1179Sbill 		prspeed("speed ", mode.sg_ispeed);
311*1179Sbill 	fprintf(stderr, all==2 ? "\n" : "; ");
312*1179Sbill 	m = mode.sg_flags;
313*1179Sbill 	if(all==2 || (m&(EVENP|ODDP))!=(EVENP|ODDP)) {
314*1179Sbill 		if(m & EVENP)	fprintf(stderr,"even ");
315*1179Sbill 		if(m & ODDP)	fprintf(stderr,"odd ");
316*1179Sbill 	}
317*1179Sbill 	if(all==2 || m&RAW)
318*1179Sbill 		fprintf(stderr,"-raw "+((m&RAW)!=0));
319*1179Sbill 	if(all==2 || (m&CRMOD)==0)
320*1179Sbill 		fprintf(stderr,"-nl "+((m&CRMOD)==0));
321*1179Sbill 	if(all==2 || (m&ECHO)==0)
322*1179Sbill 		fprintf(stderr,"-echo "+((m&ECHO)!=0));
323*1179Sbill 	if(all==2 || (m&LCASE))
324*1179Sbill 		fprintf(stderr,"-lcase "+((m&LCASE)!=0));
325*1179Sbill 	if(all==2 || (m&TANDEM))
326*1179Sbill 		fprintf(stderr,"-tandem "+((m&TANDEM)!=0));
327*1179Sbill 	fprintf(stderr,"-tabs "+((m&XTABS)!=XTABS));
328*1179Sbill 	if(all==2 || (m&CBREAK))
329*1179Sbill 		fprintf(stderr,"-cbreak "+((m&CBREAK)!=0));
330*1179Sbill 	if(all==2 || (m&NLDELAY))
331*1179Sbill 		delay((m&NLDELAY)/NL1,	"nl");
332*1179Sbill 	if ((m&TBDELAY)!=XTABS)
333*1179Sbill 		delay((m&TBDELAY)/TAB1,	"tab");
334*1179Sbill 	if(all==2 || (m&CRDELAY))
335*1179Sbill 		delay((m&CRDELAY)/CR1,	"cr");
336*1179Sbill 	if(all==2 || (m&VTDELAY))
337*1179Sbill 		delay((m&VTDELAY)/FF1,	"ff");
338*1179Sbill 	if(all==2 || (m&BSDELAY))
339*1179Sbill 		delay((m&BSDELAY)/BS1,	"bs");
340*1179Sbill 	if (all)
341*1179Sbill 		fprintf(stderr,"\n");
342*1179Sbill #define	lpit(what,str) \
343*1179Sbill 	if (all==2||(lmode&what)) { \
344*1179Sbill 		fprintf(stderr,str+((lmode&what)!=0)); any++; \
345*1179Sbill 	}
346*1179Sbill 	if (ldisc == NTTYDISC) {
347*1179Sbill 		int newcrt = (lmode&(LCTLECH|LCRTBS)) == (LCTLECH|LCRTBS) &&
348*1179Sbill 		    (lmode&(LCRTERA|LCRTKIL)) ==
349*1179Sbill 		      ((mode.sg_ospeed > B300) ? LCRTERA|LCRTKIL : 0);
350*1179Sbill 		if (newcrt) {
351*1179Sbill 			if (all==2)
352*1179Sbill 				fprintf(stderr, "newcrt: (crtbs crterase crtkill ctlecho) ");
353*1179Sbill 			else
354*1179Sbill 				fprintf(stderr, "newcrt ");
355*1179Sbill 			any++;
356*1179Sbill 		} else {
357*1179Sbill 			lpit(LCRTBS, "-crtbs ");
358*1179Sbill 			lpit(LCRTERA, "-crterase ");
359*1179Sbill 			lpit(LCRTKIL, "-crtkill ");
360*1179Sbill 			lpit(LCTLECH, "-ctlecho ");
361*1179Sbill 			lpit(LPRTERA, "-prterase ");
362*1179Sbill 		}
363*1179Sbill 		lpit(LTOSTOP, "-tostop ");
364*1179Sbill 		lpit(LINTRUP, "-intrup ");
365*1179Sbill 		if (all==2) {
366*1179Sbill 			fprintf(stderr, "\n");
367*1179Sbill 			any = 0;
368*1179Sbill 		}
369*1179Sbill 		lpit(LTILDE, "-tilde ");
370*1179Sbill 		lpit(LFLUSHO, "-flusho ");
371*1179Sbill 		lpit(LMDMBUF, "-mdmbuf ");
372*1179Sbill 		lpit(LLITOUT, "-litout ");
373*1179Sbill 		lpit(LNOHANG, "-nohang ");
374*1179Sbill 		lpit(LETXACK, "-etxack ");
375*1179Sbill 		lpit(LPENDIN, "-pendin ");
376*1179Sbill 		if (any)
377*1179Sbill 			fprintf(stderr,"\n");
378*1179Sbill 	} else if (!all)
379*1179Sbill 		fprintf(stderr,"\n");
380*1179Sbill 	if (all) {
381*1179Sbill 		switch (ldisc) {
382*1179Sbill 
383*1179Sbill 		case 0:
384*1179Sbill 			fprintf(stderr,"\
385*1179Sbill erase  kill   intr   quit   stop   eof\
386*1179Sbill \n");
387*1179Sbill 			pcol(mode.sg_erase, -1);
388*1179Sbill 			pcol(mode.sg_kill, -1);
389*1179Sbill 			pcol(tc.t_intrc, -1);
390*1179Sbill 			pcol(tc.t_quitc, -1);
391*1179Sbill 			pcol(tc.t_stopc, tc.t_startc);
392*1179Sbill 			pcol(tc.t_eofc, tc.t_brkc);
393*1179Sbill 			fprintf(stderr,"\n");
394*1179Sbill 			break;
395*1179Sbill 
396*1179Sbill 		case NTTYDISC:
397*1179Sbill 			fprintf(stderr,"\
398*1179Sbill erase  kill   werase rprnt  flush  lnext  susp   intr   quit   stop   eof\
399*1179Sbill \n");
400*1179Sbill 			pcol(mode.sg_erase, -1);
401*1179Sbill 			pcol(mode.sg_kill, -1);
402*1179Sbill 			pcol(ltc.t_werasc, -1);
403*1179Sbill 			pcol(ltc.t_rprntc, -1);
404*1179Sbill 			pcol(ltc.t_flushc, -1);
405*1179Sbill 			pcol(ltc.t_lnextc, -1);
406*1179Sbill 			pcol(ltc.t_suspc, ltc.t_dsuspc);
407*1179Sbill 			pcol(tc.t_intrc, -1);
408*1179Sbill 			pcol(tc.t_quitc, -1);
409*1179Sbill 			pcol(tc.t_stopc, tc.t_startc);
410*1179Sbill 			pcol(tc.t_eofc, tc.t_brkc);
411*1179Sbill 			fprintf(stderr,"\n");
412*1179Sbill 			break;
413*1179Sbill 		}
414*1179Sbill 	} else if (ldisc != NETLDISC) {
415*1179Sbill 		register struct special *sp;
416*1179Sbill 		int first = 1;
417*1179Sbill 		for (sp = special; sp->name; sp++) {
418*1179Sbill 			if ((*sp->cp&0377) != (sp->def&0377)) {
419*1179Sbill 				pit(*sp->cp, sp->name, first ? "" : ", ");
420*1179Sbill 				first = 0;
421*1179Sbill 			};
422*1179Sbill 			if (sp->cp == &tc.t_brkc && ldisc == 0)
423*1179Sbill 				break;
424*1179Sbill 		}
425*1179Sbill 		if (first == 0)
426*1179Sbill 			fprintf(stderr, "\n");
427*1179Sbill 	}
428*1179Sbill }
429*1179Sbill 
430*1179Sbill pcol(ch1, ch2)
431*1179Sbill 	int ch1, ch2;
432*1179Sbill {
433*1179Sbill 	int nout = 0;
434*1179Sbill 
435*1179Sbill 	ch1 &= 0377;
436*1179Sbill 	ch2 &= 0377;
437*1179Sbill 	if (ch1 == ch2)
438*1179Sbill 		ch2 = 0377;
439*1179Sbill 	for (; ch1 != 0377 || ch2 != 0377; ch1 = ch2, ch2 = 0377) {
440*1179Sbill 		if (ch1 == 0377)
441*1179Sbill 			continue;
442*1179Sbill 		if (ch1 & 0200) {
443*1179Sbill 			fprintf(stderr, "M-");
444*1179Sbill 			nout += 2;
445*1179Sbill 			ch1 &= ~ 0200;
446*1179Sbill 		}
447*1179Sbill 		if (ch1 == 0177) {
448*1179Sbill 			fprintf(stderr, "^");
449*1179Sbill 			nout++;
450*1179Sbill 			ch1 = '?';
451*1179Sbill 		} else if (ch1 < ' ') {
452*1179Sbill 			fprintf(stderr, "^");
453*1179Sbill 			nout++;
454*1179Sbill 			ch1 += '@';
455*1179Sbill 		}
456*1179Sbill 		fprintf(stderr, "%c", ch1);
457*1179Sbill 		nout++;
458*1179Sbill 		if (ch2 != 0377) {
459*1179Sbill 			fprintf(stderr, "/");
460*1179Sbill 			nout++;
461*1179Sbill 		}
462*1179Sbill 	}
463*1179Sbill 	while (nout < 7) {
464*1179Sbill 		fprintf(stderr, " ");
465*1179Sbill 		nout++;
466*1179Sbill 	}
467*1179Sbill }
468*1179Sbill 
469*1179Sbill pit(what, itsname, sep)
470*1179Sbill 	unsigned what;
471*1179Sbill 	char *itsname, *sep;
472*1179Sbill {
473*1179Sbill 
474*1179Sbill 	what &= 0377;
475*1179Sbill 	fprintf(stderr, "%s%s", sep, itsname);
476*1179Sbill 	if (what == 0377) {
477*1179Sbill 		fprintf(stderr, " <undef>");
478*1179Sbill 		return;
479*1179Sbill 	}
480*1179Sbill 	fprintf(stderr, " = ");
481*1179Sbill 	if (what & 0200) {
482*1179Sbill 		fprintf(stderr, "M-");
483*1179Sbill 		what &= ~ 0200;
484*1179Sbill 	}
485*1179Sbill 	if (what == 0177) {
486*1179Sbill 		fprintf(stderr, "^");
487*1179Sbill 		what = '?';
488*1179Sbill 	} else if (what < ' ') {
489*1179Sbill 		fprintf(stderr, "^");
490*1179Sbill 		what += '@';
491*1179Sbill 	}
492*1179Sbill 	fprintf(stderr, "%c", what);
493*1179Sbill }
494*1179Sbill 
495*1179Sbill delay(m, s)
496*1179Sbill char *s;
497*1179Sbill {
498*1179Sbill 
499*1179Sbill 	if(m)
500*1179Sbill 		fprintf(stderr,"%s%d ", s, m);
501*1179Sbill }
502*1179Sbill 
503*1179Sbill int	speed[] = {
504*1179Sbill 	0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,0,0
505*1179Sbill };
506*1179Sbill 
507*1179Sbill prspeed(c, s)
508*1179Sbill char *c;
509*1179Sbill {
510*1179Sbill 
511*1179Sbill 	fprintf(stderr,"%s%d baud",  c, speed[s]);
512*1179Sbill }
513