* Copyright (c) 1991 The Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
static char sccsid
[] = "@(#)key.c 5.3 (Berkeley) 6/10/91";
void f_all
__P((struct info
*));
void f_cbreak
__P((struct info
*));
void f_columns
__P((struct info
*));
void f_dec
__P((struct info
*));
void f_everything
__P((struct info
*));
void f_extproc
__P((struct info
*));
void f_ispeed
__P((struct info
*));
void f_nl
__P((struct info
*));
void f_ospeed
__P((struct info
*));
void f_raw
__P((struct info
*));
void f_rows
__P((struct info
*));
void f_sane
__P((struct info
*));
void f_size
__P((struct info
*));
void f_speed
__P((struct info
*));
void f_tty
__P((struct info
*));
void (*f
) __P((struct info
*)); /* function */
#define F_NEEDARG 0x01 /* needs an argument */
#define F_OFFOK 0x02 /* can turn off */
"cbreak", f_cbreak
, F_OFFOK
,
"cols", f_columns
, F_NEEDARG
,
"columns", f_columns
, F_NEEDARG
,
"everything", f_everything
, 0,
"extproc", f_extproc
, F_OFFOK
,
"ospeed", f_ospeed
, F_NEEDARG
,
"rows", f_rows
, F_NEEDARG
,
static int c_key
__P((const void *, const void *));
if (!(kp
= (struct key
*)bsearch(&tmp
, keys
,
sizeof(keys
)/sizeof(struct key
), sizeof(struct key
), c_key
)))
if (!(kp
->flags
& F_OFFOK
) && ip
->off
)
err("illegal option -- %s\n%s", name
, usage
);
if (kp
->flags
& F_NEEDARG
&& !(ip
->arg
= *++*argvp
))
err("option requires an argument -- %s\n%s", name
, usage
);
return(strcmp(((struct key
*)a
)->name
, ((struct key
*)b
)->name
));
print(&ip
->t
, &ip
->win
, ip
->ldisc
, BSD
);
ip
->t
.c_iflag
|= BRKINT
|IXON
|IMAXBEL
;
ip
->t
.c_lflag
|= ISIG
|IEXTEN
;
ip
->t
.c_lflag
&= ~ICANON
;
ip
->win
.ws_col
= atoi(ip
->arg
);
ip
->t
.c_cc
[VERASE
] = (u_char
)0177;
ip
->t
.c_cc
[VKILL
] = CTRL('u');
ip
->t
.c_cc
[VINTR
] = CTRL('c');
ip
->t
.c_lflag
&= ~ECHOPRT
;
ip
->t
.c_lflag
|= ECHOE
|ECHOKE
|ECHOCTL
;
print(&ip
->t
, &ip
->win
, ip
->ldisc
, BSD
);
(void)ioctl(ip
->fd
, TIOCEXT
, &tmp
);
(void)ioctl(ip
->fd
, TIOCEXT
, &tmp
);
cfsetispeed(&ip
->t
, atoi(ip
->arg
));
cfsetospeed(&ip
->t
, atoi(ip
->arg
));
ip
->t
.c_cflag
&= ~(CSIZE
|PARENB
);
ip
->win
.ws_row
= atoi(ip
->arg
);
ip
->t
.c_cflag
= TTYDEF_CFLAG
| (ip
->t
.c_cflag
& CLOCAL
);
ip
->t
.c_iflag
= TTYDEF_IFLAG
;
/* preserve user-preference flags in lflag */
#define LKEEP (ECHOKE|ECHOE|ECHOK|ECHOPRT|ECHOCTL|ALTWERASE|TOSTOP|NOFLSH)
ip
->t
.c_lflag
= TTYDEF_LFLAG
| (ip
->t
.c_lflag
& LKEEP
);
ip
->t
.c_oflag
= TTYDEF_OFLAG
;
(void)printf("%d %d\n", ip
->win
.ws_row
, ip
->win
.ws_col
);
(void)printf("%d\n", cfgetospeed(&ip
->t
));
if (ioctl(0, TIOCSETD
, &tmp
) < 0)
err("TIOCSETD: %s", strerror(errno
));