]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/lib_setup.c
ncurses 5.6 - patch 20070716
[ncurses.git] / ncurses / tinfo / lib_setup.c
index 1e380d157476639a1affad9e4f051ffa5aac0519..90ffda762f5bbc9db8f89a85649a30a63212c032 100644 (file)
@@ -53,7 +53,7 @@
 
 #include <term.h>              /* lines, columns, cur_term */
 
-MODULE_ID("$Id: lib_setup.c,v 1.96 2007/03/10 23:36:05 tom Exp $")
+MODULE_ID("$Id: lib_setup.c,v 1.99 2007/07/16 20:32:27 tom Exp $")
 
 /****************************************************************************
  *
@@ -108,12 +108,12 @@ NCURSES_PUBLIC_VAR(ttytype) (void)
 NCURSES_EXPORT(int)
 NCURSES_PUBLIC_VAR(LINES) (void)
 {
-    return SP ? SP->_LINES : 0;
+    return (SP ? SP->_LINES : _nc_prescreen._LINES);
 }
 NCURSES_EXPORT(int)
 NCURSES_PUBLIC_VAR(COLS) (void)
 {
-    return SP ? SP->_COLS : 0;
+    return SP ? SP->_COLS : _nc_prescreen._COLS;
 }
 NCURSES_EXPORT(int)
 NCURSES_PUBLIC_VAR(TABSIZE) (void)
@@ -127,50 +127,28 @@ NCURSES_EXPORT_VAR(int) COLS = 0;
 NCURSES_EXPORT_VAR(int) TABSIZE = 0;
 #endif
 
-static int _use_env = TRUE;
-
 #if USE_SIGWINCH
-int
-_nc_handle_sigwinch(int enable)
+/*
+ * If we have a pending SIGWINCH, set the flag in each screen.
+ */
+NCURSES_EXPORT(int)
+_nc_handle_sigwinch(int update)
 {
-    static int have_sigwinch = 0;      /* initially no SIGWINCH's */
-    static int can_resizeall = 1;      /* initially enabled */
     SCREEN *scan;
-    int result;
-
-    switch (enable) {
-    default:
-       /* record a SIGWINCH */
-       have_sigwinch = 1;
-       break;
-    case 0:
-       /* temporarily disable the next block */
-       --can_resizeall;
-       break;
-    case 1:
-       /* temporarily enable the next block */
-       ++can_resizeall;
-       break;
-    }
 
-    /*
-     * If we have a pending SIGWINCH, set the flag in each screen.
-     * But do this only if the block is enabled.
-     */
-    if (can_resizeall-- >= 0) {        /* test and disable */
-       if (have_sigwinch) {
-           scan = _nc_screen_chain;
-           while (scan) {
-               scan->_sig_winch = TRUE;
-               scan = scan->_next_screen;
-           }
-           have_sigwinch = 0;
+    (void) update;             /* no longer used */
+
+    if (_nc_globals.have_sigwinch) {
+       _nc_globals.have_sigwinch = 0;
+
+       scan = _nc_screen_chain;
+       while (scan) {
+           scan->_sig_winch = TRUE;
+           scan = scan->_next_screen;
        }
     }
-    result = can_resizeall + 1;        /* reenable (unless disables are nested) */
-    can_resizeall = result;
 
-    return result;
+    return (SP ? SP->_sig_winch : 0);
 }
 
 #endif
@@ -179,11 +157,11 @@ NCURSES_EXPORT(void)
 use_env(bool f)
 {
     T((T_CALLED("use_env()")));
-    _use_env = f;
+    _nc_prescreen.use_env = f;
     returnVoid;
 }
 
-void
+NCURSES_EXPORT(void)
 _nc_get_screensize(int *linep, int *colp)
 /* Obtain lines/columns values from the environment and/or terminfo entry */
 {
@@ -192,8 +170,7 @@ _nc_get_screensize(int *linep, int *colp)
     /* figure out the size of the screen */
     T(("screen size: terminfo lines = %d columns = %d", lines, columns));
 
-    _nc_handle_sigwinch(0);
-    if (!_use_env) {
+    if (!_nc_prescreen.use_env) {
        *linep = (int) lines;
        *colp = (int) columns;
     } else {                   /* usually want to query LINES and COLUMNS from environment */
@@ -271,7 +248,6 @@ _nc_get_screensize(int *linep, int *colp)
        lines = (short) (*linep);
        columns = (short) (*colp);
     }
-    _nc_handle_sigwinch(1);
 
     T(("screen size is %dx%d", *linep, *colp));
 
@@ -588,6 +564,16 @@ _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse)
        }
     }
 
+    /*
+     * We should always check the screensize, just in case.
+     */
+#if USE_REENTRANT
+    _nc_get_screensize(SP ? &(SP->_LINES) : &(_nc_prescreen._LINES),
+                      SP ? &(SP->_COLS) : &(_nc_prescreen._COLS));
+#else
+    _nc_get_screensize(&LINES, &COLS);
+#endif
+
     if (errret)
        *errret = TGETENT_YES;