]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/lib_newterm.c
ncurses 5.0
[ncurses.git] / ncurses / base / lib_newterm.c
similarity index 87%
rename from ncurses/lib_newterm.c
rename to ncurses/base/lib_newterm.c
index ea5333d898ea6dfecbd0d8d7377d96b0b56917a0..9a4919bf5292480e2c61f87df1d2d19d78062036 100644 (file)
@@ -48,7 +48,7 @@
 
 #include <term.h>      /* clear_screen, cup & friends, cur_term */
 
-MODULE_ID("$Id: lib_newterm.c,v 1.33 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_newterm.c,v 1.41 1999/07/24 20:07:48 tom Exp $")
 
 #ifndef ONLCR          /* Allows compilation under the QNX 4.2 OS */
 #define ONLCR 0
@@ -75,7 +75,7 @@ static inline int _nc_initscr(void)
 #else
        cur_term->Nttyb.sg_flags &= ~(ECHO|CRMOD);
 #endif
-       return _nc_set_curterm(&cur_term->Nttyb);
+       return _nc_set_tty_mode(&cur_term->Nttyb);
 }
 
 /*
@@ -91,53 +91,35 @@ void filter(void)
     filter_mode = TRUE;
 }
 
-SCREEN * newterm(const char *term, FILE *ofp, FILE *ifp)
+SCREEN * newterm(NCURSES_CONST char *name, FILE *ofp, FILE *ifp)
 {
 int    errret;
+int     slk_format = _nc_slk_format;
 SCREEN* current;
 #ifdef TRACE
-char *t = getenv("NCURSES_TRACE");
+int t = _nc_getenv_num("NCURSES_TRACE");
 
-       if (t)
-               trace((unsigned) strtol(t, 0, 0));
+       if (t >= 0)
+               trace(t);
 #endif
 
-       T((T_CALLED("newterm(\"%s\",%p,%p)"), term, ofp, ifp));
+       T((T_CALLED("newterm(\"%s\",%p,%p)"), name, ofp, ifp));
 
        /* this loads the capability entry, then sets LINES and COLS */
-       if (setupterm(term, fileno(ofp), &errret) == ERR)
+       if (setupterm(name, fileno(ofp), &errret) == ERR)
                return 0;
 
-       /*
-        * Check for mismatched graphic-rendition capabilities.  Most SVr4
-        * terminfo trees contain entries that have rmul or rmso equated to
-        * sgr0 (Solaris curses copes with those entries).  We do this only for
-        * curses, since many termcap applications assume that smso/rmso and
-        * smul/rmul are paired, and will not function properly if we remove
-        * rmso or rmul.  Curses applications shouldn't be looking at this
-        * detail.
-        */
-       if (exit_attribute_mode) {
-#define SGR0_FIX(mode) if (mode != 0 && !strcmp(mode, exit_attribute_mode)) \
-                       mode = 0
-               SGR0_FIX(exit_underline_mode);
-               SGR0_FIX(exit_standout_mode);
-       }
-
        /* implement filter mode */
        if (filter_mode) {
                LINES = 1;
 
-#ifdef init_tabs
                if (init_tabs != -1)
                        TABSIZE = init_tabs;
                else
-#endif /* init_tabs */
                        TABSIZE = 8;
 
                T(("TABSIZE = %d", TABSIZE));
 
-#ifdef clear_screen
                clear_screen = 0;
                cursor_down = parm_down_cursor = 0;
                cursor_address = 0;
@@ -145,19 +127,17 @@ char *t = getenv("NCURSES_TRACE");
                row_address = 0;
 
                cursor_home = carriage_return;
-#endif /* clear_screen */
        }
 
        /* If we must simulate soft labels, grab off the line to be used.
           We assume that we must simulate, if it is none of the standard
           formats (4-4  or 3-2-3) for which there may be some hardware
           support. */
-#ifdef num_labels
-       if (num_labels <= 0 || !SLK_STDFMT)
-#endif /* num_labels */
-           if (_nc_slk_format)
+       if (num_labels <= 0 || !SLK_STDFMT(slk_format))
+           if (slk_format)
              {
-               if (ERR==_nc_ripoffline(-SLK_LINES, _nc_slk_initialize))
+               if (ERR==_nc_ripoffline(-SLK_LINES(slk_format),
+                                       _nc_slk_initialize))
                  return 0;
              }
        /* this actually allocates the screen structure, and saves the
@@ -170,11 +150,9 @@ char *t = getenv("NCURSES_TRACE");
                return 0;
        }
 
-#ifdef num_labels
        /* if the terminal type has real soft labels, set those up */
-       if (_nc_slk_format && num_labels > 0 && SLK_STDFMT)
+       if (slk_format && num_labels > 0 && SLK_STDFMT(slk_format))
            _nc_slk_initialize(stdscr, COLS);
-#endif /* num_labels */
 
        SP->_ifd        = fileno(ifp);
        SP->_checkfd    = fileno(ifp);
@@ -199,17 +177,30 @@ char *t = getenv("NCURSES_TRACE");
 
        SP->_keytry = 0;
 
+       /*
+        * Check for mismatched graphic-rendition capabilities.  Most SVr4
+        * terminfo trees contain entries that have rmul or rmso equated to
+        * sgr0 (Solaris curses copes with those entries).  We do this only for
+        * curses, since many termcap applications assume that smso/rmso and
+        * smul/rmul are paired, and will not function properly if we remove
+        * rmso or rmul.  Curses applications shouldn't be looking at this
+        * detail.
+        */
+#define SGR0_TEST(mode) (mode != 0) && (exit_attribute_mode == 0 || strcmp(mode, exit_attribute_mode))
+       SP->_use_rmso = SGR0_TEST(exit_standout_mode);
+       SP->_use_rmul = SGR0_TEST(exit_underline_mode);
+
        /* compute movement costs so we can do better move optimization */
        _nc_mvcur_init();
 
-       _nc_signal_handler(TRUE);
-
        /* initialize terminal to a sane state */
        _nc_screen_init();
 
        /* Initialize the terminal line settings. */
        _nc_initscr();
 
+       _nc_signal_handler(TRUE);
+
        T((T_RETURN("%p"), SP));
        return(SP);
 }