/****************************************************************************
- * Copyright (c) 2008-2010,2011 Free Software Foundation, Inc. *
+ * Copyright (c) 2008-2011,2012 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 *
# endif
#endif
-MODULE_ID("$Id: tinfo_driver.c,v 1.17 2011/12/17 20:40:33 tom Exp $")
+MODULE_ID("$Id: tinfo_driver.c,v 1.24 2012/07/28 20:12:11 tom Exp $")
/*
* SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS,
#define TCBMAGIC NCDRV_MAGIC(NCDRV_TINFO)
#define AssertTCB() assert(TCB!=0 && TCB->magic==TCBMAGIC)
-#define SetSP() assert(TCB->csp!=0); sp = TCB->csp
+#define SetSP() assert(TCB->csp!=0); sp = TCB->csp; (void) sp
/*
* This routine needs to do all the work to make curscr look
{
SCREEN *sp;
bool useEnv = TRUE;
+ bool useTioctl = TRUE;
AssertTCB();
sp = TCB->csp; /* can be null here */
if (sp) {
useEnv = sp->_use_env;
- } else
+ useTioctl = sp->_use_tioctl;
+ } else {
useEnv = _nc_prescreen.use_env;
+ useTioctl = _nc_prescreen.use_tioctl;
+ }
/* figure out the size of the screen */
T(("screen size: terminfo lines = %d columns = %d", lines, columns));
*linep = (int) lines;
*colp = (int) columns;
- if (useEnv) {
+ if (useEnv || useTioctl) {
int value;
#ifdef __EMX__
int screendata[2];
_scrsize(screendata);
*colp = screendata[0];
- *linep = screendata[1];
+ *linep = ((sp != 0 && sp->_filtered)
+ ? 1
+ : screendata[1]);
T(("EMX screen size: environment LINES = %d COLUMNS = %d",
*linep, *colp));
}
}
#endif /* HAVE_SIZECHANGE */
- /*
- * Finally, look for environment variables.
- *
- * Solaris lets users override either dimension with an environment
- * variable.
- */
- if ((value = _nc_getenv_num("LINES")) > 0) {
- *linep = value;
- T(("screen size: environment LINES = %d", *linep));
- }
- if ((value = _nc_getenv_num("COLUMNS")) > 0) {
- *colp = value;
- T(("screen size: environment COLUMNS = %d", *colp));
+ if (useEnv) {
+ if (useTioctl) {
+ /*
+ * If environment variables are used, update them.
+ */
+ if ((sp == 0 || !sp->_filtered) && _nc_getenv_num("LINES") > 0) {
+ _nc_setenv_num("LINES", *linep);
+ }
+ if (_nc_getenv_num("COLUMNS") > 0) {
+ _nc_setenv_num("COLUMNS", *colp);
+ }
+ }
+
+ /*
+ * Finally, look for environment variables.
+ *
+ * Solaris lets users override either dimension with an environment
+ * variable.
+ */
+ if ((value = _nc_getenv_num("LINES")) > 0) {
+ *linep = value;
+ T(("screen size: environment LINES = %d", *linep));
+ }
+ if ((value = _nc_getenv_num("COLUMNS")) > 0) {
+ *colp = value;
+ T(("screen size: environment COLUMNS = %d", *colp));
+ }
}
/* if we can't get dynamic info about the size, use static */
static void
drv_init(TERMINAL_CONTROL_BLOCK * TCB)
{
- SCREEN *sp;
TERMINAL *trm;
AssertTCB();
trm = (TERMINAL *) TCB;
- sp = TCB->csp;
TCB->info.initcolor = VALID_STRING(initialize_color);
TCB->info.canchange = can_change;
if (old_pair >= 0
&& sp != 0
&& NCURSES_SP_NAME(pair_content) (NCURSES_SP_ARGx
- old_pair,
+ (short) old_pair,
&old_fg,
&old_bg) !=ERR) {
if ((isDefaultColor(fg) && !isDefaultColor(old_fg))