diff options
Diffstat (limited to 'lib/libmytinfo/tty.c')
-rw-r--r-- | lib/libmytinfo/tty.c | 457 |
1 files changed, 0 insertions, 457 deletions
diff --git a/lib/libmytinfo/tty.c b/lib/libmytinfo/tty.c deleted file mode 100644 index 9c22eb1..0000000 --- a/lib/libmytinfo/tty.c +++ /dev/null @@ -1,457 +0,0 @@ -/* - * tty.c - * - * By Ross Ridge - * Public Domain - * 92/02/01 07:30:49 - * - * Do some tty related things - * - */ - -#include "defs.h" -#include <term.h> - -#ifdef USE_SCCS_IDS -static const char SCCSid[] = "@(#) mytinfo tty.c 3.2 92/02/01 public domain, By Ross Ridge"; -#endif -#ifndef EXTA_IS -#define EXTA_IS 19200 -#endif - -#ifndef EXTB_IS -#define EXTB_IS 38400 -#endif - -#ifdef lint -#define ioctl _ioctl -/* shutup lint */ -/* ARGSUSED */ -/* VARARGS1 */ -static int ioctl(a, b, p) int a; long b; anyptr *p; { return 0; } -#endif - -#if defined(USE_TERMIO) || defined(USE_TERMIOS) - -#ifdef USE_TERMIOS -speed_t _baud_tbl[] = {0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, - 2400, 4800, 9600, EXTA_IS, EXTB_IS -#ifdef B57600 - ,57600 -#endif -#ifdef B115200 - ,115200 -#endif - }; -#else -#ifdef USE_SMALLMEM -unsigned short _baud_tbl[] = {0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, - 1800, 2400, 4800, 9600, EXTA_IS, EXTB_IS}; -#else -long _baud_tbl[] = {0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, - 2400, 4800, 9600, EXTA_IS, EXTB_IS}; -#endif -#endif - -#ifdef USE_TERMIO -static struct termio old; -#else -static struct termios old; -#endif - -int -_lit_output() { -#ifdef USE_TERMIO - struct termio tmp; - if (ioctl(cur_term->fd, TCGETA, &old) == -1) - return 0; -#else - struct termios tmp; - if (tcgetattr(cur_term->fd, &old) == -1) - return 0; -#endif - if (!(old.c_oflag & OPOST) || !(old.c_oflag & ONLCR)) - return 0; - memcpy((anyptr)&tmp, (anyptr)&old, sizeof(old)); - tmp.c_oflag &= ~OPOST; -#ifdef USE_TERMIO - ioctl(cur_term->fd, TCSETA, &tmp); -#else - tcsetattr(cur_term->fd, TCSADRAIN, &tmp); -#endif - return 1; -} - -void -_norm_output() { -#ifdef USE_TERMIO - ioctl(cur_term->fd, TCSETA, &old); -#else - tcsetattr(cur_term->fd, TCSADRAIN, &old); -#endif -} - -int -_check_tty() { - if ((cur_term->prog_mode.c_iflag & IXON) && cur_term->xon) - cur_term->pad = 0; - else - cur_term->pad = 1; -#ifdef USE_TERMIO - cur_term->baudrate = _baud_tbl[cur_term->prog_mode.c_cflag & CBAUD]; -#else - cur_term->baudrate = cfgetospeed(&cur_term->prog_mode); -#endif - return OK; -} - -int -def_prog_mode() { - if (cur_term == NULL) - return ERR; -#ifdef USE_WINSZ -#ifdef TIOCGWINSZ - if (ioctl(cur_term->fd, TIOCGWINSZ, &cur_term->prog_winsz) < 0) - return ERR; -#endif -#endif -#ifdef USE_TERMIO - if (ioctl(cur_term->fd, TCGETA, &cur_term->prog_mode) == 0 -#else - if (tcgetattr(cur_term->fd, &cur_term->prog_mode) == 0 -#endif - && _check_tty() == OK) - return OK; - return ERR; -} - -int -def_shell_mode() { - if (cur_term == NULL) - return ERR; - cur_term->termcap = 0; -#ifdef USE_WINSZ -#ifdef TIOCGWINSZ - if (ioctl(cur_term->fd, TIOCGWINSZ, &cur_term->shell_winsz) < 0) - return ERR; -#endif -#endif -#ifdef USE_TERMIO - return ioctl(cur_term->fd, TCGETA, &cur_term->shell_mode)==0 ? OK : ERR; -#else - return tcgetattr(cur_term->fd, &cur_term->shell_mode)==0 ? OK : ERR; -#endif -} - - -#pragma weak reset_prog_mode -int -reset_prog_mode() { - if (cur_term == NULL) - return ERR; -#ifdef USE_TERMIO - return ioctl(cur_term->fd, TCSETA, &cur_term->prog_mode)==0 ? OK : ERR; -#else - return tcsetattr(cur_term->fd, TCSADRAIN, &cur_term->prog_mode)==0 ? OK : ERR; -#endif -} - -#pragma weak reset_shell_mode -int -reset_shell_mode() { - if (cur_term == NULL) - return ERR; -#ifdef USE_TERMIO - return ioctl(cur_term->fd, TCSETA, &cur_term->shell_mode)==0 ? OK : ERR; -#else - return tcsetattr(cur_term->fd, TCSADRAIN, &cur_term->shell_mode)==0 ? OK : ERR; -#endif -} - -int -_init_tty() { - cur_term->true_lines = lines; - cur_term->true_columns = columns; - if (pad_char == NULL) - cur_term->padch = '\000'; - else - cur_term->padch = pad_char[0]; - if (def_shell_mode() == ERR || def_prog_mode() == ERR) { - cur_term->pad = 0; - cur_term->baudrate = 1; - cur_term->xon = 0; - return OK; - } - cur_term->xon = (xoff_character == NULL || xoff_character[0] == '\021') - && (xon_character == NULL || xon_character[0] == '\023') - && xon_xoff; -#ifdef USE_WINSZ -#ifdef TIOCGWINSZ - if (cur_term->prog_winsz.ws_row != 0 - && cur_term->prog_winsz.ws_col != 0) { - lines = cur_term->prog_winsz.ws_row; - columns = cur_term->prog_winsz.ws_col; - } -#endif -#endif - return OK; -} - -#else - -#ifdef USE_SGTTY - -#ifdef USE_SMALLMEM -unsigned short _baud_tbl[] = {0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, - 1800, 2400, 4800, 9600, EXTA_IS, EXTB_IS}; -#else -long _baud_tbl[] = {0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, - 1800, 2400, 4800, 9600, EXTA_IS, EXTB_IS}; -#endif - - -#ifdef TIOCLGET - -static int old; - -int -_lit_output() { - struct sgttyb buf; - int tmp; - - ioctl(cur_term->fd, TIOCGETP, &buf); - if (buf.sg_flags & RAW) - return 0; - ioctl(cur_term->fd, TIOCLGET, &old); - if (old & LLITOUT) - return 0; - tmp = old | LLITOUT; - ioctl(cur_term->fd, TIOCLSET, &tmp); - return 1; -} - -void -_norm_output() { - ioctl(cur_term->fd, TIOCLSET, &old); -} - -#else - -static struct sgttyb old; - -int -_lit_output() { - struct sgttyb tmp; - ioctl(cur_term->fd, TIOCGETP, &old); - if (old.sg_flags & RAW) - return 0; - memcpy((anyptr)&tmp, (anyptr)&old, sizeof(old)); - tmp.sg_flags |= RAW; - ioctl(cur_term->fd, TIOCSETP, &tmp); - return 1; -} - -void -_norm_output() { - ioctl(cur_term->fd, TIOCSETP, &old); -} - -#endif - -int -_check_tty() { - if (!(cur_term->prog_mode.v6.sg_flags & RAW) && cur_term->xon) - cur_term->pad = 0; - else - cur_term->pad = 1; - cur_term->baudrate = _baud_tbl[cur_term->prog_mode.v6.sg_ospeed & 0xf]; - return OK; -} - -int -def_shell_mode() { - if (ioctl(cur_term->fd, TIOCGETP, &cur_term->shell_mode.v6) < 0) - return ERR; -#ifdef TIOCGETC - if (ioctl(cur_term->fd, TIOCGETC, &cur_term->shell_mode.v7) < 0) - return ERR; -#endif -#ifdef TIOCLGET - if (ioctl(cur_term->fd, TIOCLGET, &cur_term->shell_mode.bsd) < 0) - return ERR; -#endif -#ifdef TIOCGLTC - if (ioctl(cur_term->fd, TIOCGLTC, &cur_term->shell_mode.bsd_new) < 0) - return ERR; -#endif -#ifdef USE_WINSZ -#ifdef TIOCGWINSZ - if (ioctl(cur_term->fd, TIOCGWINSZ, &cur_term->shell_winsz)<0) - return ERR; -#endif -#endif - cur_term->termcap = 0; - return OK; -} - -int -def_prog_mode() { - if (ioctl(cur_term->fd, TIOCGETP, &cur_term->prog_mode.v6) < 0) - return ERR; -#ifdef TIOCGETC - if (ioctl(cur_term->fd, TIOCGETC, &cur_term->prog_mode.v7) < 0) - return ERR; -#endif -#ifdef TIOCLGET - if (ioctl(cur_term->fd, TIOCLGET, &cur_term->prog_mode.bsd) < 0) - return ERR; -#endif -#ifdef TIOCGLTC - if (ioctl(cur_term->fd, TIOCGLTC, &cur_term->prog_mode.bsd_new) < 0) - return ERR; -#endif -#ifdef USE_WINSZ -#ifdef TIOCGWINSZ - if (ioctl(cur_term->fd, TIOCGWINSZ, &cur_term->prog_winsz)<0) - return ERR; -#endif -#endif - return _check_tty(); -} - -int -reset_shell_mode() { - if (ioctl(cur_term->fd, TIOCSETP, &cur_term->shell_mode.v6) < 0) - return ERR; -#ifdef TIOCGETC - if (ioctl(cur_term->fd, TIOCSETC, &cur_term->shell_mode.v7) < 0) - return ERR; -#endif -#ifdef TIOCLGET - if (ioctl(cur_term->fd, TIOCLSET, &cur_term->shell_mode.bsd) < 0) - return ERR; -#endif -#ifdef TIOCGLTC - if (ioctl(cur_term->fd, TIOCSLTC, &cur_term->shell_mode.bsd_new) < 0) - return ERR; -#endif - return OK; -} - -int -reset_prog_mode() { - if (ioctl(cur_term->fd, TIOCSETP, &cur_term->prog_mode.v6) < 0) - return ERR; -#ifdef TIOCGETC - if (ioctl(cur_term->fd, TIOCSETC, &cur_term->prog_mode.v7) < 0) - return ERR; -#endif -#ifdef TIOCLGET - if (ioctl(cur_term->fd, TIOCLSET, &cur_term->prog_mode.bsd) < 0) - return ERR; -#endif -#ifdef TIOCGLTC - if (ioctl(cur_term->fd, TIOCSLTC, &cur_term->prog_mode.bsd_new) < 0) - return ERR; -#endif - return OK; -} - -int -_init_tty() { - cur_term->true_lines = lines; - cur_term->true_columns = columns; - if (pad_char == NULL) - cur_term->padch = '\000'; - else - cur_term->padch = pad_char[0]; - if (def_shell_mode() == ERR || def_prog_mode() == ERR) { - cur_term->pad = 0; - cur_term->baudrate = 1; - cur_term->xon = 0; - return OK; - } -#ifndef TIOCGETC - cur_term->xon = (xoff_character == NULL || xoff_character[0] == '\021') - && (xon_character == NULL || xon_character[0] == '\023') - && xon_xoff; -#else - if (xon_xoff) { - if (xon_character != NULL) { - cur_term->prog_mode.v7.t_startc = xon_character[0]; - if (ioctl(cur_term->fd, TIOCSETC, - &cur_term->prog_mode.v7) < 0) - return ERR; - } - if (xoff_character != NULL) { - cur_term->prog_mode.v7.t_stopc = xoff_character[0]; - if (ioctl(cur_term->fd, TIOCSETC, - &cur_term->prog_mode.v7) < 0) - return ERR; - } - } - cur_term->xon = xon_xoff; -#endif -#ifdef USE_WINSZ -#ifdef TIOCGWINSZ - if (cur_term->prog_winsz.ws_row != 0 - && cur_term->prog_winsz.ws_col != 0) { - lines = cur_term->prog_winsz.ws_row; - columns = cur_term->prog_winsz.ws_col; - } -#endif -#endif - return OK; -} - -#else - -int -_lit_output() { - return 0; -} - -void -_norm_output() { - return; -} - -int -_check_tty() { - return OK; -} - -int -def_prog_mode() { - return OK; -} - -int -reset_prog_mode() { - return OK; -} - -int -def_shell_mode() { - return OK; -} - -int -reset_shell_mode() { - return OK; -} - -int -_init_tty() { - cur_term->pad = 1; - cur_term->padch = 0; - cur_term->baudrate = 1200; - cur_term->xon = 0; - cur_term->termcap = 0; - cur_term->true_lines = lines; - cur_term->true_columns = columns; -} - -#endif - -#endif |