]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/lib_setup.c
ncurses 5.6 - patch 20080329
[ncurses.git] / ncurses / tinfo / lib_setup.c
index 1e380d157476639a1affad9e4f051ffa5aac0519..a376fc60275b8627fd97c7f94e6c7fe47dc0adde 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -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.102 2008/01/19 21:07:45 tom Exp $")
 
 /****************************************************************************
  *
@@ -99,21 +99,25 @@ MODULE_ID("$Id: lib_setup.c,v 1.96 2007/03/10 23:36:05 tom Exp $")
 # endif
 #endif
 
+/*
+ * Wrap global variables in this module.
+ */
 #if USE_REENTRANT
 NCURSES_EXPORT(char *)
 NCURSES_PUBLIC_VAR(ttytype) (void)
 {
-    return cur_term ? cur_term->type.term_names : "";
+    static char empty[] = "";
+    return cur_term ? cur_term->type.term_names : empty;
 }
 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 +131,46 @@ NCURSES_EXPORT_VAR(int) COLS = 0;
 NCURSES_EXPORT_VAR(int) TABSIZE = 0;
 #endif
 
-static int _use_env = TRUE;
+#if NCURSES_EXT_FUNCS
+NCURSES_EXPORT(int)
+set_tabsize(int value)
+{
+    int code = OK;
+#if USE_REENTRANT
+    if (SP) {
+       SP->_TABSIZE = value;
+    } else {
+       code = ERR;
+    }
+#else
+    TABSIZE = value;
+#endif
+    return code;
+}
+#endif
 
 #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 +179,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 +192,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 +270,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 +586,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;