diff options
author | ache <ache@FreeBSD.org> | 1994-10-07 08:58:58 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1994-10-07 08:58:58 +0000 |
commit | a80c0624fbd8bd1c784b0b5b7a0fd20b09d317b9 (patch) | |
tree | 4a94ca97fb2fc2fdc1fcdd522a66e39c6e763138 /lib/libncurses/lib_kernel.c | |
download | FreeBSD-src-a80c0624fbd8bd1c784b0b5b7a0fd20b09d317b9.zip FreeBSD-src-a80c0624fbd8bd1c784b0b5b7a0fd20b09d317b9.tar.gz |
Moved from ports with several enhancements
Diffstat (limited to 'lib/libncurses/lib_kernel.c')
-rw-r--r-- | lib/libncurses/lib_kernel.c | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/lib/libncurses/lib_kernel.c b/lib/libncurses/lib_kernel.c new file mode 100644 index 0000000..66659c7 --- /dev/null +++ b/lib/libncurses/lib_kernel.c @@ -0,0 +1,249 @@ + +/* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for * +* details. If they are missing then this copy is in violation of * +* the copyright conditions. */ + +/* + * lib_kernel.c + * + * Misc. low-level routines: + * wattron() + * reset_prog_mode() + * reset_shell_mode() + * baudrate() + * erasechar() + * killchar() + * flushinp() + * savetty() + * resetty() + * + * + */ + +#include "curses.priv.h" +#include <nterm.h> + +int wattron(WINDOW *win, chtype at) +{ + win->_attrs &= (unsigned long)0xffff00ff; + win->_attrs |= at; + return OK; +} + +#ifndef MYTINFO +int reset_prog_mode() +{ + T(("reset_prog_mode() called")); + +#ifdef TERMIOS + tcsetattr(cur_term->Filedes, TCSANOW, &cur_term->Nttyb); +#else + stty(cur_term->Filedes, &cur_term->Nttyb); +#endif + + return OK; +} + + +int reset_shell_mode() +{ + T(("reset_shell_mode() called")); + +#ifdef TERMIOS + tcsetattr(cur_term->Filedes, TCSANOW, &cur_term->Ottyb); +#else + stty(cur_term->Filedes, &cur_term->Ottyb); +#endif + + return OK; +} +#endif + +int curs_set(int vis) +{ + T(("curs_set(%d)", vis)); + + if (vis < 0 || vis > 2) + return ERR; + + switch(vis) { + case 2: + if (cursor_visible) + tputs(cursor_visible, 1, _outc); + break; + case 1: + if (cursor_normal) + tputs(cursor_normal, 1, _outc); + break; + case 0: + if (cursor_invisible) + tputs(cursor_invisible, 1, _outc); + break; + } + return OK; +} + +/* + * erasechar() + * + * Return erase character as given in cur_term->Ottyb. + * + */ + +char +erasechar() +{ + T(("erasechar() called")); + +#ifdef TERMIOS + return(cur_term->Ottyb.c_cc[VERASE]); +#else + return(cur_term->Ottyb.sg_erase); +#endif + +} + + + +/* + * killchar() + * + * Return kill character as given in cur_term->Ottyb. + * + */ + +char +killchar() +{ + T(("killchar() called")); + +#ifdef TERMIOS + return(cur_term->Ottyb.c_cc[VKILL]); +#else + return(cur_term->Ottyb.sg_kill); +#endif +} + + + +/* + * flushinp() + * + * Flush any input on cur_term->Filedes + * + */ + +int flushinp() +{ + T(("flushinp() called")); + +#ifdef TERMIOS + tcflush(cur_term->Filedes, TCIFLUSH); +#else + ioctl(cur_term->Filedes, TIOCFLUSH, 0); +#endif + if (SP) { + SP->_fifohead = -1; + SP->_fifotail = 0; + SP->_fifopeek = 0; + } + return OK; + +} + + + +/* + * int + * baudrate() + * + * Returns the current terminal's baud rate. + * + */ + +struct speed { + speed_t s; + int sp; +}; + +static struct speed speeds[] = { + {B0, 0,}, + {B50, 50,}, + {B75, 75,}, + {B110, 110,}, + {B134, 134,}, + {B150, 150,}, + {B200, 200,}, + {B300, 300,}, + {B600, 600,}, + {B1200, 1200,}, + {B1800, 1800,}, + {B2400, 2400,}, + {B4800, 4800,}, + {B9600, 9600,}, +#define MAX_BAUD B9600 +#ifdef B19200 +#undef MAX_BAUD +#define MAX_BAUD B19200 + {B19200, 19200,}, +#endif +#ifdef B38400 +#undef MAX_BAUD +#define MAX_BAUD B38400 + {B38400, 38000,} +#endif +}; + +int +baudrate() +{ +int i, ret; +#ifdef UNTRACE + if (_tracing) + _tracef("baudrate() called"); +#endif +#ifdef TERMIOS + ret = cfgetospeed(&cur_term->Nttyb); +#else + ret = cur_term->Nttyb.sg_ospeed; +#endif + if(ret < 0 || ret > MAX_BAUD) + return ERR; + for (i = 0; i < (sizeof(speeds) / sizeof(struct speed)); i++) + if (speeds[i].s == ret) + return speeds[i].sp; + return ERR; +} + + +/* +** savetty() and resetty() +** +*/ + +static TTY buf; + +int savetty() +{ + T(("savetty() called")); + +#ifdef TERMIOS + tcgetattr(cur_term->Filedes, &buf); +#else + gtty(cur_term->Filedes, &buf); +#endif + return OK; +} + +int resetty() +{ + T(("resetty() called")); + +#ifdef TERMIOS + tcsetattr(cur_term->Filedes, TCSANOW, &buf); +#else + stty(cur_term->Filedes, &buf); +#endif + return OK; +} + |