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", <c.t_suspc, CTRL(z), 141*1179Sbill "dsusp", <c.t_dsuspc, CTRL(y), 142*1179Sbill "rprnt", <c.t_rprntc, CTRL(r), 143*1179Sbill "flush", <c.t_flushc, CTRL(o), 144*1179Sbill "werase", <c.t_werasc, CTRL(w), 145*1179Sbill "lnext", <c.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, <c); 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, <c); 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