summaryrefslogtreecommitdiffstats
path: root/lib/libcurses/lib_kernel.c
diff options
context:
space:
mode:
authortholo <tholo@openbsd.org>1996-06-02 06:04:50 +0000
committertholo <tholo@openbsd.org>1996-06-02 06:04:50 +0000
commitca751a4c440c24b9feedffffe0dd93cc1e00ab0c (patch)
tree3ce3bce27611f188dc5c8a99bd9a2e9f5addfcc7 /lib/libcurses/lib_kernel.c
parentAdd LIBOLDCURSES (diff)
downloadwireguard-openbsd-ca751a4c440c24b9feedffffe0dd93cc1e00ab0c.tar.xz
wireguard-openbsd-ca751a4c440c24b9feedffffe0dd93cc1e00ab0c.zip
Install ncurses as -lcurses and <curses.h>
Install BSD curses library as -locurses and <ocurses.h>
Diffstat (limited to 'lib/libcurses/lib_kernel.c')
-rw-r--r--lib/libcurses/lib_kernel.c309
1 files changed, 309 insertions, 0 deletions
diff --git a/lib/libcurses/lib_kernel.c b/lib/libcurses/lib_kernel.c
new file mode 100644
index 00000000000..622c549acea
--- /dev/null
+++ b/lib/libcurses/lib_kernel.c
@@ -0,0 +1,309 @@
+
+/***************************************************************************
+* COPYRIGHT NOTICE *
+****************************************************************************
+* ncurses is copyright (C) 1992-1995 *
+* Zeyd M. Ben-Halim *
+* zmbenhal@netcom.com *
+* Eric S. Raymond *
+* esr@snark.thyrsus.com *
+* *
+* Permission is hereby granted to reproduce and distribute ncurses *
+* by any means and for any fee, whether alone or as part of a *
+* larger distribution, in source or in binary form, PROVIDED *
+* this notice is included with any such distribution, and is not *
+* removed from any of its header files. Mention of ncurses in any *
+* applications linked with it is highly appreciated. *
+* *
+* ncurses comes AS IS with no warranty, implied or expressed. *
+* *
+***************************************************************************/
+
+
+/*
+ * lib_kernel.c
+ *
+ * Misc. low-level routines:
+ * napms()
+ * reset_prog_mode()
+ * reset_shell_mode()
+ * baudrate()
+ * delay_output()
+ * erasechar()
+ * killchar()
+ * flushinp()
+ * savetty()
+ * resetty()
+ *
+ *
+ */
+
+#include "curses.priv.h"
+#include "term.h" /* cur_term, pad_char */
+#include <errno.h>
+#if !HAVE_EXTERN_ERRNO
+extern int errno;
+#endif
+
+int napms(int ms)
+{
+ T(("napms(%d) called", ms));
+
+ usleep(1000*(unsigned)ms);
+ return OK;
+}
+
+#ifndef EXTERN_TERMINFO
+int reset_prog_mode(void)
+{
+ T(("reset_prog_mode() called"));
+
+#ifdef TERMIOS
+ tcsetattr(cur_term->Filedes, TCSANOW, &cur_term->Nttyb);
+#else
+ stty(cur_term->Filedes, &cur_term->Nttyb);
+#endif
+ if (SP && stdscr && stdscr->_use_keypad)
+ _nc_keypad(TRUE);
+
+ return OK;
+}
+
+
+int reset_shell_mode(void)
+{
+ T(("reset_shell_mode() called"));
+
+ if (SP)
+ {
+ fflush(SP->_ofp);
+ _nc_keypad(FALSE);
+ }
+
+#ifdef TERMIOS
+ tcsetattr(cur_term->Filedes, TCSANOW, &cur_term->Ottyb);
+#else
+ stty(cur_term->Filedes, &cur_term->Ottyb);
+#endif
+ return OK;
+}
+#endif /* EXTERN_TERMINFO */
+
+int delay_output(float ms)
+{
+ T(("delay_output(%f) called", ms));
+
+ if (SP == 0 || SP->_baudrate == ERR)
+ return(ERR);
+#ifdef no_pad_char
+ else if (no_pad_char)
+ _nc_timed_wait(0, (int)ms, (int *)NULL);
+#endif /* no_pad_char */
+ else {
+ register int nullcount;
+ char null = '\0';
+
+#ifdef pad_char
+ if (pad_char)
+ null = pad_char[0];
+#endif /* pad_char */
+
+ for (nullcount = ms * 1000 / SP->_baudrate; nullcount > 0; nullcount--)
+ putc(null, SP->_ofp);
+ (void) fflush(SP->_ofp);
+ }
+
+ return OK;
+}
+
+/*
+ * erasechar()
+ *
+ * Return erase character as given in cur_term->Ottyb.
+ *
+ */
+
+char
+erasechar(void)
+{
+ 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(void)
+{
+ 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(void)
+{
+ T(("flushinp() called"));
+
+#ifdef TERMIOS
+ tcflush(cur_term->Filedes, TCIFLUSH);
+#else
+ errno = 0;
+ do {
+ ioctl(cur_term->Filedes, TIOCFLUSH, 0);
+ } while
+ (errno == EINTR);
+#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 const 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},
+#else
+#ifdef EXTA
+#define MAX_BAUD EXTA
+ {EXTA, 19200},
+#endif
+#endif
+#ifdef B38400
+#undef MAX_BAUD
+#define MAX_BAUD B38400
+ {B38400, 38400},
+#else
+#ifdef EXTB
+#define MAX_BAUD EXTB
+ {EXTB, 38400},
+#endif
+#endif
+#ifdef B57600
+#undef MAX_BAUD
+#define MAX_BAUD B57600
+ {B57600, 57600},
+#endif
+#ifdef B115200
+#undef MAX_BAUD
+#define MAX_BAUD B115200
+ {B115200, 115200},
+#endif
+};
+
+int
+baudrate(void)
+{
+int i, ret;
+
+ T(("baudrate() called"));
+
+#ifdef TERMIOS
+ ret = cfgetospeed(&cur_term->Nttyb);
+#else
+ ret = cur_term->Nttyb.sg_ospeed;
+#endif
+ if(ret < 0 || ret > MAX_BAUD)
+ return ERR;
+ SP->_baudrate = ERR;
+ for (i = 0; i < (sizeof(speeds) / sizeof(struct speed)); i++)
+ if (speeds[i].s == ret)
+ {
+ SP->_baudrate = speeds[i].sp;
+ break;
+ }
+ return(SP->_baudrate);
+}
+
+
+/*
+** savetty() and resetty()
+**
+*/
+
+static TTY buf;
+
+int savetty(void)
+{
+ T(("savetty() called"));
+
+#ifdef TERMIOS
+ tcgetattr(cur_term->Filedes, &buf);
+#else
+ gtty(cur_term->Filedes, &buf);
+#endif
+ return OK;
+}
+
+int resetty(void)
+{
+ T(("resetty() called"));
+
+#ifdef TERMIOS
+ tcsetattr(cur_term->Filedes, TCSANOW, &buf);
+#else
+ stty(cur_term->Filedes, &buf);
+#endif
+ return OK;
+}
+