|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.