/****************************************************************************
- * 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.15 2011/08/13 16:11:15 tom Exp $")
+MODULE_ID("$Id: tinfo_driver.c,v 1.21 2012/07/15 00:20:43 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
}
result = TRUE;
#if !USE_REENTRANT
- strncpy(ttytype, termp->type.term_names, NAMESIZE - 1);
+ strncpy(ttytype, termp->type.term_names, (size_t) NAMESIZE - 1);
ttytype[NAMESIZE - 1] = '\0';
#endif
}
static int
-drv_dobeepflash(TERMINAL_CONTROL_BLOCK * TCB, bool beepFlag)
+drv_dobeepflash(TERMINAL_CONTROL_BLOCK * TCB, int beepFlag)
{
SCREEN *sp;
int res = ERR;
static void
drv_setcolor(TERMINAL_CONTROL_BLOCK * TCB,
- bool fore,
+ int fore,
int color,
NCURSES_SP_OUTC outc)
{
{
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));
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 */
+ if (useTioctl) {
+ char buf[128];
+
+ /*
+ * 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.
*
}
static int
-drv_sgmode(TERMINAL_CONTROL_BLOCK * TCB, bool setFlag, TTY * buf)
+drv_sgmode(TERMINAL_CONTROL_BLOCK * TCB, int setFlag, TTY * buf)
{
SCREEN *sp = TCB->csp;
TERMINAL *_term = (TERMINAL *) TCB;
}
static int
-drv_mode(TERMINAL_CONTROL_BLOCK * TCB, bool progFlag, bool defFlag)
+drv_mode(TERMINAL_CONTROL_BLOCK * TCB, int progFlag, int defFlag)
{
SCREEN *sp;
TERMINAL *_term = (TERMINAL *) TCB;
trm = (TERMINAL *) TCB;
sp = TCB->csp;
- TCB->info.initcolor = initialize_color;
+ TCB->info.initcolor = VALID_STRING(initialize_color);
TCB->info.canchange = can_change;
TCB->info.hascolor = ((VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs)
&& (((set_foreground != NULL)
#define InPalette(n) ((n) >= 0 && (n) < MAX_PALETTE)
static void
-drv_initpair(TERMINAL_CONTROL_BLOCK * TCB, short pair, short f, short b)
+drv_initpair(TERMINAL_CONTROL_BLOCK * TCB, int pair, int f, int b)
{
SCREEN *sp;
static void
drv_initcolor(TERMINAL_CONTROL_BLOCK * TCB,
- short color, short r, short g, short b)
+ int color, int r, int g, int b)
{
SCREEN *sp = TCB->csp;
static void
drv_do_color(TERMINAL_CONTROL_BLOCK * TCB,
- short old_pair,
- short pair,
- bool reverse,
+ int old_pair,
+ int pair,
+ int reverse,
NCURSES_SP_OUTC outc)
{
SCREEN *sp = TCB->csp;
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))
}
static int
-drv_testmouse(TERMINAL_CONTROL_BLOCK * TCB, int delay)
+drv_testmouse(TERMINAL_CONTROL_BLOCK * TCB,
+ int delay
+ EVENTLIST_2nd(_nc_eventlist * evl))
{
int rc = 0;
SCREEN *sp;
}
static void
-drv_hwlabelOnOff(TERMINAL_CONTROL_BLOCK * TCB, bool OnFlag)
+drv_hwlabelOnOff(TERMINAL_CONTROL_BLOCK * TCB, int OnFlag)
{
SCREEN *sp = TCB->csp;
if ((pthread_self) && (pthread_kill) && (pthread_equal))
_nc_globals.read_thread = pthread_self();
# endif
- n = read(sp->_ifd, &c2, 1);
+ n = read(sp->_ifd, &c2, (size_t) 1);
#if USE_PTHREADS_EINTR
_nc_globals.read_thread = 0;
#endif
}
static int
-drv_kpad(TERMINAL_CONTROL_BLOCK * TCB, bool flag)
+drv_kpad(TERMINAL_CONTROL_BLOCK * TCB, int flag)
{
int ret = ERR;
SCREEN *sp;
}
static int
-drv_keyok(TERMINAL_CONTROL_BLOCK * TCB, int c, bool flag)
+drv_keyok(TERMINAL_CONTROL_BLOCK * TCB, int c, int flag)
{
SCREEN *sp;
int code = ERR;
if (c >= 0) {
unsigned ch = (unsigned) c;
if (flag) {
- while ((s = _nc_expand_try(sp->_key_ok, ch, &count, 0)) != 0
+ while ((s = _nc_expand_try(sp->_key_ok,
+ ch, &count, (size_t) 0)) != 0
&& _nc_remove_key(&(sp->_key_ok), ch)) {
code = _nc_add_to_try(&(sp->_keytry), s, ch);
free(s);
break;
}
} else {
- while ((s = _nc_expand_try(sp->_keytry, ch, &count, 0)) != 0
+ while ((s = _nc_expand_try(sp->_keytry,
+ ch, &count, (size_t) 0)) != 0
&& _nc_remove_key(&(sp->_keytry), ch)) {
code = _nc_add_to_try(&(sp->_key_ok), s, ch);
free(s);