Annotation of 43BSD/bin/stty.c, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.