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 sgttyb mode;
 179: 
 180: main(argc, argv)
 181: char    *argv[];
 182: {
 183:     int i;
 184: 
 185:     gtty(1, &mode);
 186:     if(argc == 1) {
 187:         prmodes();
 188:         exit(0);
 189:     }
 190:     while(--argc > 0) {
 191: 
 192:         arg = *++argv;
 193:         if (eq("ek")){
 194:             mode.sg_erase = '#';
 195:             mode.sg_kill = '@';
 196:         }
 197:         if (eq("erase")) {
 198:             if (**++argv == '^')
 199:                 mode.sg_erase = (*argv)[1] & 037;
 200:             else
 201:                 mode.sg_erase = **argv;
 202:             argc--;
 203:         }
 204:         if (eq("kill")) {
 205:             if (**++argv == '^')
 206:                 mode.sg_kill = (*argv)[1] & 037;
 207:             else
 208:                 mode.sg_kill = **argv;
 209:             argc--;
 210:         }
 211:         if (eq("gspeed")) {
 212:             mode.sg_ispeed = B300;
 213:             mode.sg_ospeed = B9600;
 214:         }
 215:         if (eq("hup")) {
 216:             ioctl(1, TIOCHPCL, NULL);
 217:         } else
 218:         for(i=0; speeds[i].string; i++)
 219:             if(eq(speeds[i].string))
 220:                 mode.sg_ispeed = mode.sg_ospeed = speeds[i].speed;
 221:         for(i=0; modes[i].string; i++)
 222:             if(eq(modes[i].string)) {
 223:                 mode.sg_flags &= ~modes[i].reset;
 224:                 mode.sg_flags |= modes[i].set;
 225:             }
 226:         if(arg)
 227:             fprintf(stderr,"unknown mode: %s\n", arg);
 228:     }
 229:     stty(1,&mode);
 230: }
 231: 
 232: eq(string)
 233: char *string;
 234: {
 235:     int i;
 236: 
 237:     if(!arg)
 238:         return(0);
 239:     i = 0;
 240: loop:
 241:     if(arg[i] != string[i])
 242:         return(0);
 243:     if(arg[i++] != '\0')
 244:         goto loop;
 245:     arg = 0;
 246:     return(1);
 247: }
 248: 
 249: prmodes()
 250: {
 251:     register m;
 252: 
 253:     if(mode.sg_ispeed != mode.sg_ospeed) {
 254:         prspeed("input speed  ", mode.sg_ispeed);
 255:         prspeed("output speed ", mode.sg_ospeed);
 256:     } else
 257:         prspeed("speed ", mode.sg_ispeed);
 258:     if (mode.sg_erase < ' ')
 259:         fprintf(stderr, "erase = '^%c'; ", '@' + mode.sg_erase);
 260:     else
 261:         fprintf(stderr, "erase = '%c'; ", mode.sg_erase);
 262:     if (mode.sg_kill < ' ')
 263:         fprintf(stderr, "kill = '^%c'\n", '@' + mode.sg_kill);
 264:     else
 265:         fprintf(stderr, "kill = '%c'\n", mode.sg_kill);
 266:     m = mode.sg_flags;
 267:     if(m & EVENP)   fprintf(stderr,"even ");
 268:     if(m & ODDP)    fprintf(stderr,"odd ");
 269:     if(m & RAW) fprintf(stderr,"raw ");
 270:     if(m & CRMOD)   fprintf(stderr,"-nl ");
 271:     if(m & ECHO)    fprintf(stderr,"echo ");
 272:     if(m & LCASE)   fprintf(stderr,"lcase ");
 273:     if((m & XTABS)==XTABS)  fprintf(stderr,"-tabs ");
 274:     if (m & CBREAK) fprintf(stderr,"cbreak ");
 275:     delay((m&NLDELAY)/NL1,  "nl");
 276:     if ((m&TBDELAY)!=XTABS)
 277:         delay((m&TBDELAY)/TAB1, "tab");
 278:     delay((m&CRDELAY)/CR1,  "cr");
 279:     delay((m&VTDELAY)/FF1,  "ff");
 280:     delay((m&BSDELAY)/BS1,  "bs");
 281:     fprintf(stderr,"\n");
 282: }
 283: 
 284: delay(m, s)
 285: char *s;
 286: {
 287: 
 288:     if(m)
 289:         fprintf(stderr,"%s%d ", s, m);
 290: }
 291: 
 292: int speed[] = {
 293:     0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,0,0
 294: };
 295: 
 296: prspeed(c, s)
 297: char *c;
 298: {
 299: 
 300:     fprintf(stderr,"%s%d baud\n", c, speed[s]);
 301: }

Defined functions

delay defined in line 284; used 5 times
eq defined in line 232; used 7 times
main defined in line 180; never used
prmodes defined in line 249; used 1 times
prspeed defined in line 296; used 3 times

Defined variables

arg defined in line 177; used 7 times
mode defined in line 178; used 26 times
speed defined in line 292; used 3 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 976
Valid CSS Valid XHTML 1.0 Strict