summaryrefslogtreecommitdiffstats
path: root/lib/libcurses/lib_set_term.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libcurses/lib_set_term.c')
-rw-r--r--lib/libcurses/lib_set_term.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/lib/libcurses/lib_set_term.c b/lib/libcurses/lib_set_term.c
new file mode 100644
index 00000000000..6df38903072
--- /dev/null
+++ b/lib/libcurses/lib_set_term.c
@@ -0,0 +1,141 @@
+
+/***************************************************************************
+* 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_set_term.c
+**
+** The routine set_term().
+**
+*/
+
+#include "curses.priv.h"
+#include <stdlib.h>
+#include "term.h" /* cur_term */
+
+struct screen * set_term(struct screen *screen)
+{
+struct screen *oldSP;
+
+ T(("set_term(%p) called", screen));
+
+ oldSP = SP;
+ _nc_set_screen(screen);
+
+ cur_term = SP->_term;
+ curscr = SP->_curscr;
+ newscr = SP->_newscr;
+ stdscr = SP->_stdscr;
+
+ return(oldSP);
+}
+
+void delscreen(SCREEN *sp)
+{
+ free(sp);
+}
+
+struct ripoff_t
+{
+ int line;
+ int (*hook)(WINDOW *, int);
+}
+rippedoff[5], *rsp = rippedoff;
+
+int _nc_setupscreen(short slines, short const scolumns)
+/* OS-independent screen initializations */
+{
+int stolen, topstolen;
+
+ if (!_nc_alloc_screen())
+ return ERR;
+
+ SP->_term = cur_term;
+ SP->_lines = slines;
+ SP->_columns = scolumns;
+ SP->_cursrow = -1;
+ SP->_curscol = -1;
+ SP->_keytry = UNINITIALISED;
+ SP->_nl = TRUE;
+ SP->_raw = FALSE;
+ SP->_cbreak = FALSE;
+ SP->_echo = TRUE;
+ SP->_fifohead = -1;
+ SP->_fifotail = 0;
+ SP->_fifopeek = 0;
+ SP->_endwin = TRUE;
+ SP->_ofp = stdout; /* (may be overridden later) */
+ SP->_coloron = 0;
+
+ init_acs();
+
+ T(("creating newscr"));
+ if ((newscr = newwin(slines, scolumns, 0, 0)) == (WINDOW *)NULL)
+ return ERR;
+
+ T(("creating curscr"));
+ if ((curscr = newwin(slines, scolumns, 0, 0)) == (WINDOW *)NULL)
+ return ERR;
+
+ SP->_newscr = newscr;
+ SP->_curscr = curscr;
+
+ newscr->_clear = TRUE;
+ curscr->_clear = FALSE;
+
+ stolen = topstolen = 0;
+ for (rsp = rippedoff; rsp->line; rsp++) {
+ if (rsp->hook)
+ if (rsp->line < 0)
+ rsp->hook(newwin(1,scolumns, slines-1,0), scolumns);
+ else
+ rsp->hook(newwin(1,scolumns, topstolen++,0), scolumns);
+ --slines;
+ stolen++;
+ }
+
+ T(("creating stdscr"));
+ if ((stdscr = newwin(LINES = slines, scolumns, topstolen, 0)) == NULL)
+ return ERR;
+ SP->_stdscr = stdscr;
+
+ def_shell_mode();
+ def_prog_mode();
+
+ return OK;
+}
+
+int
+ripoffline(int line, int (*init)(WINDOW *, int))
+{
+ if (line == 0)
+ return(OK);
+
+ if (rsp >= rippedoff + sizeof(rippedoff)/sizeof(rippedoff[0]))
+ return(ERR);
+
+ rsp->line = line;
+ rsp->hook = init;
+ rsp++;
+
+ return(OK);
+}