* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)cchar.c 8.3 (Berkeley) %G%";
* Special control characters.
* Cchars1 are the standard names, cchars2 are the old aliases.
* The first are displayed, but both are recognized on the
struct cchar cchars1
[] = {
{ "discard", VDISCARD
, CDISCARD
},
{ "dsusp", VDSUSP
, CDSUSP
},
{ "erase", VERASE
, CERASE
},
{ "intr", VINTR
, CINTR
},
{ "kill", VKILL
, CKILL
},
{ "lnext", VLNEXT
, CLNEXT
},
{ "quit", VQUIT
, CQUIT
},
{ "reprint", VREPRINT
, CREPRINT
},
{ "start", VSTART
, CSTART
},
{ "status", VSTATUS
, CSTATUS
},
{ "stop", VSTOP
, CSTOP
},
{ "susp", VSUSP
, CSUSP
},
{ "time", VTIME
, CTIME
},
{ "werase", VWERASE
, CWERASE
},
struct cchar cchars2
[] = {
{ "flush", VDISCARD
, CDISCARD
},
{ "rprnt", VREPRINT
, CREPRINT
},
register struct cchar
*cp
;
static int c_cchar
__P((const void *, const void *));
if (!(cp
= (struct cchar
*)bsearch(&tmp
, cchars1
,
sizeof(cchars1
)/sizeof(struct cchar
) - 1, sizeof(struct cchar
),
c_cchar
)) && !(cp
= (struct cchar
*)bsearch(&tmp
, cchars1
,
sizeof(cchars1
)/sizeof(struct cchar
) - 1, sizeof(struct cchar
),
warnx("option requires an argument -- %s", name
);
#define CHK(s) (*arg == s[0] && !strcmp(arg, s))
if (CHK("undef") || CHK("<undef>"))
ip
->t
.c_cc
[cp
->sub
] = _POSIX_VDISABLE
;
else if (cp
->sub
== VMIN
|| cp
->sub
== VTIME
) {
val
= strtol(arg
, &ep
, 10);
if (val
== _POSIX_VDISABLE
) {
warnx("value of %ld would disable the option -- %s",
warnx("maximum option value is %d -- %s",
warnx("option requires a numeric argument -- %s", name
);
ip
->t
.c_cc
[cp
->sub
] = val
;
} else if (arg
[0] == '^')
ip
->t
.c_cc
[cp
->sub
] = (arg
[1] == '?') ? 0177 :
(arg
[1] == '-') ? _POSIX_VDISABLE
: arg
[1] & 037;
ip
->t
.c_cc
[cp
->sub
] = arg
[0];
return (strcmp(((struct cchar
*)a
)->name
, ((struct cchar
*)b
)->name
));