Annotation of 3BSD/cmd/stty.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * set teletype modes
        !             3:  */
        !             4: 
        !             5: #include <stdio.h>
        !             6: #include <sgtty.h>
        !             7: 
        !             8: struct
        !             9: {
        !            10:        char    *string;
        !            11:        int     speed;
        !            12: } speeds[] = {
        !            13:        "0",    B0,
        !            14:        "50",   B50,
        !            15:        "75",   B75,
        !            16:        "110",  B110,
        !            17:        "134",  B134,
        !            18:        "134.5",B134,
        !            19:        "150",  B150,
        !            20:        "200",  B200,
        !            21:        "300",  B300,
        !            22:        "600",  B600,
        !            23:        "1200", B1200,
        !            24:        "1800", B1800,
        !            25:        "2400", B2400,
        !            26:        "4800", B4800,
        !            27:        "9600", B9600,
        !            28:        "exta", EXTA,
        !            29:        "extb", EXTB,
        !            30:        0,
        !            31: };
        !            32: struct
        !            33: {
        !            34:        char    *string;
        !            35:        int     set;
        !            36:        int     reset;
        !            37: } modes[] = {
        !            38:        "even",
        !            39:        EVENP, 0,
        !            40: 
        !            41:        "-even",
        !            42:        0, EVENP,
        !            43: 
        !            44:        "odd",
        !            45:        ODDP, 0,
        !            46: 
        !            47:        "-odd",
        !            48:        0, ODDP,
        !            49: 
        !            50:        "raw",
        !            51:        RAW, 0,
        !            52: 
        !            53:        "-raw",
        !            54:        0, RAW,
        !            55: 
        !            56:        "cooked",
        !            57:        0, RAW,
        !            58: 
        !            59:        "-nl",
        !            60:        CRMOD, 0,
        !            61: 
        !            62:        "nl",
        !            63:        0, CRMOD,
        !            64: 
        !            65:        "echo",
        !            66:        ECHO, 0,
        !            67: 
        !            68:        "-echo",
        !            69:        0, ECHO,
        !            70: 
        !            71:        "LCASE",
        !            72:        LCASE, 0,
        !            73: 
        !            74:        "lcase",
        !            75:        LCASE, 0,
        !            76: 
        !            77:        "-LCASE",
        !            78:        0, LCASE,
        !            79: 
        !            80:        "-lcase",
        !            81:        0, LCASE,
        !            82: 
        !            83:        "-tabs",
        !            84:        XTABS, 0,
        !            85: 
        !            86:        "tabs",
        !            87:        0, XTABS,
        !            88: 
        !            89: 
        !            90:        "cbreak",
        !            91:        CBREAK, 0,
        !            92: 
        !            93:        "-cbreak",
        !            94:        0, CBREAK,
        !            95: 
        !            96:        "cr0",
        !            97:        CR0, CR3,
        !            98: 
        !            99:        "cr1",
        !           100:        CR1, CR3,
        !           101: 
        !           102:        "cr2",
        !           103:        CR2, CR3,
        !           104: 
        !           105:        "cr3",
        !           106:        CR3, CR3,
        !           107: 
        !           108:        "tab0",
        !           109:        TAB0, XTABS,
        !           110: 
        !           111:        "tab1",
        !           112:        TAB1, XTABS,
        !           113: 
        !           114:        "tab2",
        !           115:        TAB2, XTABS,
        !           116: 
        !           117:        "nl0",
        !           118:        NL0, NL3,
        !           119: 
        !           120:        "nl1",
        !           121:        NL1, NL3,
        !           122: 
        !           123:        "nl2",
        !           124:        NL2, NL3,
        !           125: 
        !           126:        "nl3",
        !           127:        NL3, NL3,
        !           128: 
        !           129:        "ff0",
        !           130:        FF0, FF1,
        !           131: 
        !           132:        "ff1",
        !           133:        FF1, FF1,
        !           134: 
        !           135:        "bs0",
        !           136:        BS0, BS1,
        !           137: 
        !           138:        "bs1",
        !           139:        BS1, BS1,
        !           140: 
        !           141:        "33",
        !           142:        CR1, ALLDELAY,
        !           143: 
        !           144:        "tty33",
        !           145:        CR1, ALLDELAY,
        !           146: 
        !           147:        "37",
        !           148:        FF1+CR2+TAB1+NL1, ALLDELAY,
        !           149: 
        !           150:        "tty37",
        !           151:        FF1+CR2+TAB1+NL1, ALLDELAY,
        !           152: 
        !           153:        "05",
        !           154:        NL2, ALLDELAY,
        !           155: 
        !           156:        "vt05",
        !           157:        NL2, ALLDELAY,
        !           158: 
        !           159:        "tn",
        !           160:        CR1, ALLDELAY,
        !           161: 
        !           162:        "tn300",
        !           163:        CR1, ALLDELAY,
        !           164: 
        !           165:        "ti",
        !           166:        CR2, ALLDELAY,
        !           167: 
        !           168:        "ti700",
        !           169:        CR2, ALLDELAY,
        !           170: 
        !           171:        "tek",
        !           172:        FF1, ALLDELAY,
        !           173: 
        !           174:        0,
        !           175:        };
        !           176: 
        !           177: char   *arg;
        !           178: struct tchars tc;
        !           179: struct sgttyb mode;
        !           180: 
        !           181: main(argc, argv)
        !           182: char   *argv[];
        !           183: {
        !           184:        int i;
        !           185: 
        !           186:        gtty(1, &mode);
        !           187:        ioctl(1, TIOCGETC, &tc);
        !           188:        if(argc == 1) {
        !           189:                prmodes();
        !           190:                exit(0);
        !           191:        }
        !           192:        while(--argc > 0) {
        !           193: 
        !           194:                arg = *++argv;
        !           195:                if (eq("ek")){
        !           196:                        mode.sg_erase = '#';
        !           197:                        mode.sg_kill = '@';
        !           198:                }
        !           199:                if (eq("erase") && --argc) {
        !           200:                        if (**++argv == '^')
        !           201:                                mode.sg_erase = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           202:                        else
        !           203:                                mode.sg_erase = **argv;
        !           204:                }
        !           205:                if (eq("intr") && --argc) {
        !           206:                        if (**++argv == '^')
        !           207:                                tc.t_intrc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           208:                        else
        !           209:                                tc.t_intrc = **argv;
        !           210:                }
        !           211:                if (eq("quit") && --argc) {
        !           212:                        if (**++argv == '^')
        !           213:                                tc.t_quitc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           214:                        else
        !           215:                                tc.t_quitc = **argv;
        !           216:                }
        !           217:                if (eq("start") && --argc) {
        !           218:                        if (**++argv == '^')
        !           219:                                tc.t_startc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           220:                        else
        !           221:                                tc.t_startc = **argv;
        !           222:                }
        !           223:                if (eq("stop") && --argc) {
        !           224:                        if (**++argv == '^')
        !           225:                                tc.t_stopc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           226:                        else
        !           227:                                tc.t_stopc = **argv;
        !           228:                }
        !           229:                if (eq("eof") && --argc) {
        !           230:                        if (**++argv == '^')
        !           231:                                tc.t_eofc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           232:                        else
        !           233:                                tc.t_eofc = **argv;
        !           234:                }
        !           235:                if (eq("brk") && --argc) {
        !           236:                        if (**++argv == '^')
        !           237:                                tc.t_brkc = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           238:                        else
        !           239:                                tc.t_brkc = **argv;
        !           240:                }
        !           241:                if (eq("kill") && --argc) {
        !           242:                        if (**++argv == '^')
        !           243:                                mode.sg_kill = (*(argv[1]) == '?') ? 0177 : (*argv)[1] & 037;
        !           244:                        else
        !           245:                                mode.sg_kill = **argv;
        !           246:                }
        !           247:                if (eq("gspeed")) {
        !           248:                        mode.sg_ispeed = B300;
        !           249:                        mode.sg_ospeed = B9600;
        !           250:                }
        !           251:                if (eq("hup")) {
        !           252:                        ioctl(1, TIOCHPCL, NULL);
        !           253:                } else
        !           254:                for(i=0; speeds[i].string; i++)
        !           255:                        if(eq(speeds[i].string))
        !           256:                                mode.sg_ispeed = mode.sg_ospeed = speeds[i].speed;
        !           257:                for(i=0; modes[i].string; i++)
        !           258:                        if(eq(modes[i].string)) {
        !           259:                                mode.sg_flags &= ~modes[i].reset;
        !           260:                                mode.sg_flags |= modes[i].set;
        !           261:                        }
        !           262:                if(arg)
        !           263:                        fprintf(stderr,"unknown mode: %s\n", arg);
        !           264:        }
        !           265:        stty(1,&mode);
        !           266:        ioctl(1, TIOCSETC, &tc);
        !           267: }
        !           268: 
        !           269: eq(string)
        !           270: char *string;
        !           271: {
        !           272:        int i;
        !           273: 
        !           274:        if(!arg)
        !           275:                return(0);
        !           276:        i = 0;
        !           277: loop:
        !           278:        if(arg[i] != string[i])
        !           279:                return(0);
        !           280:        if(arg[i++] != '\0')
        !           281:                goto loop;
        !           282:        arg = 0;
        !           283:        return(1);
        !           284: }
        !           285: 
        !           286: prmodes()
        !           287: {
        !           288:        register m;
        !           289: 
        !           290:        if(mode.sg_ispeed != mode.sg_ospeed) {
        !           291:                prspeed("input speed  ", mode.sg_ispeed);
        !           292:                prspeed("output speed ", mode.sg_ospeed);
        !           293:        } else
        !           294:                prspeed("speed ", mode.sg_ispeed);
        !           295:        pit(mode.sg_erase, "erase", "; ");
        !           296:        pit(mode.sg_kill, "kill", "; ");
        !           297:        pit(tc.t_intrc, "intr", "; ");
        !           298:        pit(tc.t_quitc, "quit", "\n");
        !           299:        pit(tc.t_startc, "start", "; ");
        !           300:        pit(tc.t_stopc, "stop", "; ");
        !           301:        pit(tc.t_eofc, "eof", "; ");
        !           302:        pit(tc.t_brkc, "brk", "\n");
        !           303:        m = mode.sg_flags;
        !           304:        if(m & EVENP)   fprintf(stderr,"even ");
        !           305:        if(m & ODDP)    fprintf(stderr,"odd ");
        !           306:        fprintf(stderr,"-raw "+((m&RAW)!=0));
        !           307:        fprintf(stderr,"-nl "+((m&CRMOD)==0));
        !           308:        fprintf(stderr,"-echo "+((m&ECHO)!=0));
        !           309:        fprintf(stderr,"-lcase "+((m&LCASE)!=0));
        !           310:        fprintf(stderr,"-tabs "+((m&XTABS)!=XTABS));
        !           311:        fprintf(stderr,"-cbreak "+((m&CBREAK)!=0));
        !           312:        delay((m&NLDELAY)/NL1,  "nl");
        !           313:        if ((m&TBDELAY)!=XTABS)
        !           314:                delay((m&TBDELAY)/TAB1, "tab");
        !           315:        delay((m&CRDELAY)/CR1,  "cr");
        !           316:        delay((m&VTDELAY)/FF1,  "ff");
        !           317:        delay((m&BSDELAY)/BS1,  "bs");
        !           318:        fprintf(stderr,"\n");
        !           319: }
        !           320: 
        !           321: pit(what, itsname, sep)
        !           322:        unsigned char what;
        !           323:        char *itsname, *sep;
        !           324: {
        !           325: 
        !           326:        fprintf(stderr, "%s", itsname);
        !           327:        if (what == 0377) {
        !           328:                fprintf(stderr, " <undef>%s", sep);
        !           329:                return;
        !           330:        }
        !           331:        fprintf(stderr, " = ");
        !           332:        if (what & 0200) {
        !           333:                fprintf(stderr, "M-");
        !           334:                what &= ~ 0200;
        !           335:        }
        !           336:        if (what == 0177) {
        !           337:                fprintf(stderr, "^");
        !           338:                what = '?';
        !           339:        } else if (what < ' ') {
        !           340:                fprintf(stderr, "^");
        !           341:                what += '@';
        !           342:        }
        !           343:        fprintf(stderr, "%c%s", what, sep);
        !           344: }
        !           345: 
        !           346: delay(m, s)
        !           347: char *s;
        !           348: {
        !           349: 
        !           350:        if(m)
        !           351:                fprintf(stderr,"%s%d ", s, m);
        !           352: }
        !           353: 
        !           354: int    speed[] = {
        !           355:        0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,0,0
        !           356: };
        !           357: 
        !           358: prspeed(c, s)
        !           359: char *c;
        !           360: {
        !           361: 
        !           362:        fprintf(stderr,"%s%d baud\n", c, speed[s]);
        !           363: }

unix.superglobalmegacorp.com

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