|
|
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.