/****************************************************************************
- * 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 *
#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.106 2008/05/17 21:35:36 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 *)
+_nc_ptr_Lines(void)
+{
+ return ptrLines();
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(LINES) (void)
{
- return SP ? SP->_LINES : 0;
+ return *_nc_ptr_Lines();
+}
+NCURSES_EXPORT(int *)
+_nc_ptr_Cols(void)
+{
+ return ptrCols();
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(COLS) (void)
{
- return SP ? SP->_COLS : 0;
+ return *_nc_ptr_Cols();
}
NCURSES_EXPORT(int)
NCURSES_PUBLIC_VAR(TABSIZE) (void)
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(SCREEN *sp)
{
- 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;
+ if (_nc_globals.have_sigwinch) {
+ _nc_globals.have_sigwinch = 0;
+
+ for (each_screen(scan)) {
+ scan->_sig_winch = TRUE;
}
}
- result = can_resizeall + 1; /* reenable (unless disables are nested) */
- can_resizeall = result;
- return result;
+ return (sp ? sp->_sig_winch : 0);
}
#endif
use_env(bool f)
{
T((T_CALLED("use_env()")));
- _use_env = f;
+ _nc_prescreen.use_env = f;
returnVoid;
}
-void
-_nc_get_screensize(int *linep, int *colp)
+NCURSES_EXPORT(void)
+_nc_get_screensize(SCREEN *sp, int *linep, int *colp)
/* Obtain lines/columns values from the environment and/or terminfo entry */
{
int my_tabsize;
/* 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 */
* environment variable.
*/
if (*linep <= 0)
- *linep = (SP != 0 && SP->_filtered) ? 1 : WINSIZE_ROWS(size);
+ *linep = (sp != 0 && sp->_filtered) ? 1 : WINSIZE_ROWS(size);
if (*colp <= 0)
*colp = WINSIZE_COLS(size);
}
lines = (short) (*linep);
columns = (short) (*colp);
}
- _nc_handle_sigwinch(1);
T(("screen size is %dx%d", *linep, *colp));
my_tabsize = 8;
#if USE_REENTRANT
- if (SP != 0)
- SP->_TABSIZE = my_tabsize;
+ if (sp != 0)
+ sp->_TABSIZE = my_tabsize;
#else
TABSIZE = my_tabsize;
#endif
#if USE_SIZECHANGE
NCURSES_EXPORT(void)
-_nc_update_screensize(void)
+_nc_update_screensize(SCREEN *sp)
{
int old_lines = lines;
int new_lines;
int old_cols = columns;
int new_cols;
- _nc_get_screensize(&new_lines, &new_cols);
+ _nc_get_screensize(sp, &new_lines, &new_cols);
/*
* See is_term_resized() and resizeterm().
* We're doing it this way because those functions belong to the upper
* ncurses library, while this resides in the lower terminfo library.
*/
- if (SP != 0
- && SP->_resize != 0) {
+ if (sp != 0
+ && sp->_resize != 0) {
if ((new_lines != old_lines) || (new_cols != old_cols))
- SP->_resize(new_lines, new_cols);
- SP->_sig_winch = FALSE;
+ sp->_resize(new_lines, new_cols);
+ sp->_sig_winch = FALSE;
}
}
#endif
}
}
+ /*
+ * We should always check the screensize, just in case.
+ */
+ _nc_get_screensize(SP, ptrLines(), ptrCols());
+
if (errret)
*errret = TGETENT_YES;