Research V7 development
[unix-history] / usr / src / cmd / stty.c
CommitLineData
2747e989
KT
1/*
2 * set teletype modes
3 */
4
5#include <stdio.h>
6#include <sgtty.h>
7
8struct
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};
32struct
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
177char *arg;
178struct sgttyb mode;
179
180main(argc, argv)
181char *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
232eq(string)
233char *string;
234{
235 int i;
236
237 if(!arg)
238 return(0);
239 i = 0;
240loop:
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
249prmodes()
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
284delay(m, s)
285char *s;
286{
287
288 if(m)
289 fprintf(stderr,"%s%d ", s, m);
290}
291
292int speed[] = {
293 0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,0,0
294};
295
296prspeed(c, s)
297char *c;
298{
299
300 fprintf(stderr,"%s%d baud\n", c, speed[s]);
301}