distribute the rest of the main loop into the modes and cchars modules
[unix-history] / usr / src / bin / stty / modes.c
CommitLineData
a204b597
KB
1/*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8#ifndef lint
14cc5c1c 9static char sccsid[] = "@(#)modes.c 5.3 (Berkeley) %G%";
a204b597
KB
10#endif /* not lint */
11
12#include <sys/types.h>
a204b597 13#include <stddef.h>
14cc5c1c 14#include <string.h>
a204b597
KB
15#include "stty.h"
16
17/*
18 * The code in optlist() depends on minus options following regular
19 * options, i.e. "foo" must immediately precede "-foo".
20 */
21struct modes cmodes[] = {
22 "cs5", CS5, CSIZE,
23 "cs6", CS6, CSIZE,
24 "cs7", CS7, CSIZE,
25 "cs8", CS8, CSIZE,
26 "cstopb", CSTOPB, 0,
27 "-cstopb", 0, CSTOPB,
28 "cread", CREAD, 0,
29 "-cread", 0, CREAD,
30 "parenb", PARENB, 0,
31 "-parenb", 0, PARENB,
32 "parodd", PARODD, 0,
33 "-parodd", 0, PARODD,
34 "parity", PARENB | CS7, PARODD | CSIZE,
35 "-parity", CS8, PARODD | PARENB | CSIZE,
36 "evenp", PARENB | CS7, PARODD | CSIZE,
37 "-evenp", CS8, PARODD | PARENB | CSIZE,
38 "oddp", PARENB | CS7 | PARODD, CSIZE,
39 "-oddp", CS8, PARODD | PARENB | CSIZE,
40 "pass8", CS8, PARODD | PARENB | CSIZE,
41 "hupcl", HUPCL, 0,
42 "-hupcl", 0, HUPCL,
43 "hup", HUPCL, 0,
44 "-hup", 0, HUPCL,
45 "clocal", CLOCAL, 0,
46 "-clocal", 0, CLOCAL,
47 "crtscts", CRTSCTS, 0,
48 "-crtscts", 0, CRTSCTS,
49 NULL
50};
51
52struct modes imodes[] = {
53 "ignbrk", IGNBRK, 0,
54 "-ignbrk", 0, IGNBRK,
55 "brkint", BRKINT, 0,
56 "-brkint", 0, BRKINT,
57 "ignpar", IGNPAR, 0,
58 "-ignpar", 0, IGNPAR,
59 "parmrk", PARMRK, 0,
60 "-parmrk", 0, PARMRK,
61 "inpck", INPCK, 0,
62 "-inpck", 0, INPCK,
63 "istrip", ISTRIP, 0,
64 "-istrip", 0, ISTRIP,
65 "inlcr", INLCR, 0,
66 "-inlcr", 0, INLCR,
67 "igncr", IGNCR, 0,
68 "-igncr", 0, IGNCR,
69 "icrnl", ICRNL, 0,
70 "-icrnl", 0, ICRNL,
71 "ixon", IXON, 0,
72 "-ixon", 0, IXON,
73 "flow", IXON, 0,
74 "-flow", 0, IXON,
75 "ixoff", IXOFF, 0,
76 "-ixoff", 0, IXOFF,
77 "tandem", IXOFF, 0,
78 "-tandem", 0, IXOFF,
79 "ixany", IXANY, 0,
80 "-ixany", 0, IXANY,
81 "decctlq", 0, IXANY,
82 "-decctlq", IXANY, 0,
83 "imaxbel", IMAXBEL, 0,
84 "-imaxbel", 0, IMAXBEL,
85 NULL
86};
87
88struct modes lmodes[] = {
89 "echo", ECHO, 0,
90 "-echo", 0, ECHO,
91 "echoe", ECHOE, 0,
92 "-echoe", 0, ECHOE,
93 "crterase", ECHOE, 0,
94 "-crterase", 0, ECHOE,
95 "crtbs", ECHOE, 0, /* crtbs not supported, close enough */
96 "-crtbs", 0, ECHOE,
97 "echok", ECHOK, 0,
98 "-echok", 0, ECHOK,
99 "echoke", ECHOKE, 0,
100 "-echoke", 0, ECHOKE,
101 "crtkill", ECHOKE, 0,
102 "-crtkill", 0, ECHOKE,
103 "altwerase", ALTWERASE, 0,
104 "-altwerase", 0, ALTWERASE,
105 "iexten", IEXTEN, 0,
106 "-iexten", 0, IEXTEN,
107 "echonl", ECHONL, 0,
108 "-echonl", 0, ECHONL,
109 "echoctl", ECHOCTL, 0,
110 "-echoctl", 0, ECHOCTL,
111 "ctlecho", ECHOCTL, 0,
112 "-ctlecho", 0, ECHOCTL,
113 "echoprt", ECHOPRT, 0,
114 "-echoprt", 0, ECHOPRT,
115 "prterase", ECHOPRT, 0,
116 "-prterase", 0, ECHOPRT,
117 "isig", ISIG, 0,
118 "-isig", 0, ISIG,
119 "icanon", ICANON, 0,
120 "-icanon", 0, ICANON,
121 "noflsh", NOFLSH, 0,
122 "-noflsh", 0, NOFLSH,
123 "tostop", TOSTOP, 0,
124 "-tostop", 0, TOSTOP,
125 "mdmbuf", MDMBUF, 0,
126 "-mdmbuf", 0, MDMBUF,
127 "flusho", FLUSHO, 0,
128 "-flusho", 0, FLUSHO,
129 "pendin", PENDIN, 0,
130 "-pendin", 0, PENDIN,
131 "crt", ECHOE|ECHOKE|ECHOCTL, ECHOK|ECHOPRT,
132 "-crt", ECHOK, ECHOE|ECHOKE|ECHOCTL,
133 "newcrt", ECHOE|ECHOKE|ECHOCTL, ECHOK|ECHOPRT,
134 "-newcrt", ECHOK, ECHOE|ECHOKE|ECHOCTL,
135 "nokerninfo", NOKERNINFO, 0,
136 "-nokerninfo", 0, NOKERNINFO,
137 "kerninfo", 0, NOKERNINFO,
138 "-kerninfo", NOKERNINFO, 0,
139 NULL
140};
141
142struct modes omodes[] = {
143 "opost", OPOST, 0,
144 "-opost", 0, OPOST,
145 "litout", 0, OPOST,
146 "-litout", OPOST, 0,
147 "onlcr", ONLCR, 0,
148 "-onlcr", 0, ONLCR,
149 "tabs", 0, OXTABS, /* "preserve" tabs */
150 "-tabs", OXTABS, 0,
151 "xtabs", OXTABS, 0,
152 "-xtabs", 0, OXTABS,
153 "oxtabs", OXTABS, 0,
154 "-oxtabs", 0, OXTABS,
155 NULL
156};
14cc5c1c
KB
157
158#define CHK(s) (*name == s[0] && !strcmp(name, s))
159
160msearch(argvp, ip)
161 char ***argvp;
162 struct info *ip;
163{
164 register struct modes *mp;
165 register char *name;
166
167 name = **argvp;
168
169 for (mp = cmodes; mp->name; ++mp)
170 if (CHK(mp->name)) {
171 ip->t.c_cflag &= ~mp->unset;
172 ip->t.c_cflag |= mp->set;
173 ip->set = 1;
174 return(1);
175 }
176 for (mp = imodes; mp->name; ++mp)
177 if (CHK(mp->name)) {
178 ip->t.c_iflag &= ~mp->unset;
179 ip->t.c_iflag |= mp->set;
180 ip->set = 1;
181 return(1);
182 }
183 for (mp = lmodes; mp->name; ++mp)
184 if (CHK(mp->name)) {
185 ip->t.c_lflag &= ~mp->unset;
186 ip->t.c_lflag |= mp->set;
187 ip->set = 1;
188 return(1);
189 }
190 for (mp = omodes; mp->name; ++mp)
191 if (CHK(mp->name)) {
192 ip->t.c_oflag &= ~mp->unset;
193 ip->t.c_oflag |= mp->set;
194 ip->set = 1;
195 return(1);
196 }
197 return(0);
198}