* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)modes.c 8.2 (Berkeley) %G%";
* The code in optlist() depends on minus options following regular
* options, i.e. "foo" must immediately precede "-foo".
struct modes cmodes
[] = {
{ "-cstopb", 0, CSTOPB
},
{ "-parenb", 0, PARENB
},
{ "-parodd", 0, PARODD
},
{ "parity", PARENB
| CS7
, PARODD
| CSIZE
},
{ "-parity", CS8
, PARODD
| PARENB
| CSIZE
},
{ "evenp", PARENB
| CS7
, PARODD
| CSIZE
},
{ "-evenp", CS8
, PARODD
| PARENB
| CSIZE
},
{ "oddp", PARENB
| CS7
| PARODD
, CSIZE
},
{ "-oddp", CS8
, PARODD
| PARENB
| CSIZE
},
{ "pass8", CS8
, PARODD
| PARENB
| CSIZE
},
{ "-pass8", PARENB
| CS7
, PARODD
| CSIZE
},
{ "-clocal", 0, CLOCAL
},
{ "crtscts", CRTSCTS
, 0 },
{ "-crtscts", 0, CRTSCTS
},
{ "-mdmbuf", 0, MDMBUF
},
struct modes imodes
[] = {
{ "-ignbrk", 0, IGNBRK
},
{ "-brkint", 0, BRKINT
},
{ "-ignpar", 0, IGNPAR
},
{ "-parmrk", 0, PARMRK
},
{ "-istrip", 0, ISTRIP
},
{ "-decctlq", IXANY
, 0 },
{ "imaxbel", IMAXBEL
, 0 },
{ "-imaxbel", 0, IMAXBEL
},
struct modes lmodes
[] = {
{ "crterase", ECHOE
, 0 },
{ "-crterase", 0, ECHOE
},
{ "crtbs", ECHOE
, 0 }, /* crtbs not supported, close enough */
{ "-echoke", 0, ECHOKE
},
{ "crtkill", ECHOKE
, 0 },
{ "-crtkill", 0, ECHOKE
},
{ "altwerase", ALTWERASE
, 0 },
{ "-altwerase", 0, ALTWERASE
},
{ "-iexten", 0, IEXTEN
},
{ "-echonl", 0, ECHONL
},
{ "echoctl", ECHOCTL
, 0 },
{ "-echoctl", 0, ECHOCTL
},
{ "ctlecho", ECHOCTL
, 0 },
{ "-ctlecho", 0, ECHOCTL
},
{ "echoprt", ECHOPRT
, 0 },
{ "-echoprt", 0, ECHOPRT
},
{ "prterase", ECHOPRT
, 0 },
{ "-prterase", 0, ECHOPRT
},
{ "-icanon", 0, ICANON
},
{ "-noflsh", 0, NOFLSH
},
{ "-tostop", 0, TOSTOP
},
{ "-flusho", 0, FLUSHO
},
{ "-pendin", 0, PENDIN
},
{ "crt", ECHOE
|ECHOKE
|ECHOCTL
, ECHOK
|ECHOPRT
},
{ "-crt", ECHOK
, ECHOE
|ECHOKE
|ECHOCTL
},
{ "newcrt", ECHOE
|ECHOKE
|ECHOCTL
, ECHOK
|ECHOPRT
},
{ "-newcrt", ECHOK
, ECHOE
|ECHOKE
|ECHOCTL
},
{ "nokerninfo", NOKERNINFO
, 0 },
{ "-nokerninfo",0, NOKERNINFO
},
{ "kerninfo", 0, NOKERNINFO
},
{ "-kerninfo", NOKERNINFO
, 0 },
struct modes omodes
[] = {
{ "tabs", 0, OXTABS
}, /* "preserve" tabs */
{ "-oxtabs", 0, OXTABS
},
#define CHK(s) (*name == s[0] && !strcmp(name, s))
for (mp
= cmodes
; mp
->name
; ++mp
)
ip
->t
.c_cflag
&= ~mp
->unset
;
ip
->t
.c_cflag
|= mp
->set
;
for (mp
= imodes
; mp
->name
; ++mp
)
ip
->t
.c_iflag
&= ~mp
->unset
;
ip
->t
.c_iflag
|= mp
->set
;
for (mp
= lmodes
; mp
->name
; ++mp
)
ip
->t
.c_lflag
&= ~mp
->unset
;
ip
->t
.c_lflag
|= mp
->set
;
for (mp
= omodes
; mp
->name
; ++mp
)
ip
->t
.c_oflag
&= ~mp
->unset
;
ip
->t
.c_oflag
|= mp
->set
;