/****************************************************************************
- * Copyright (c) 2008-2009,2010 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.12 2010/07/31 22:16:38 tom Exp $")
+MODULE_ID("$Id: tinfo_driver.c,v 1.18 2012/02/18 20:34:55 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
return TINFO_DOUPDATE(TCB->csp);
}
-#define ret_error(code, fmt, arg) if (errret) {\
- *errret = code;\
- return(FALSE); \
- } else {\
- fprintf(stderr, fmt, arg);\
- exit(EXIT_FAILURE);\
- }
-
-#define ret_error0(code, msg) if (errret) {\
- *errret = code;\
- return(FALSE);\
- } else {\
- fprintf(stderr, msg);\
- exit(EXIT_FAILURE);\
- }
-
static bool
drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret)
{
if (status == TGETENT_ERR) {
ret_error0(status, "terminals database is inaccessible\n");
} else if (status == TGETENT_NO) {
- ret_error(status, "'%s': unknown terminal type.\n", tname);
+ ret_error1(status, "unknown terminal type.\n", tname);
}
}
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
_nc_tinfo_cmdch(termp, *command_character);
if (generic_type) {
- ret_error(TGETENT_NO, "'%s': I need something more specific.\n", tname);
+ /*
+ * BSD 4.3's termcap contains mis-typed "gn" for wy99. Do a sanity
+ * check before giving up.
+ */
+ if ((VALID_STRING(cursor_address)
+ || (VALID_STRING(cursor_down) && VALID_STRING(cursor_home)))
+ && VALID_STRING(clear_screen)) {
+ ret_error1(TGETENT_YES, "terminal is not really generic.\n", tname);
+ } else {
+ ret_error1(TGETENT_NO, "I need something more specific.\n", tname);
+ }
}
if (hard_copy) {
- ret_error(TGETENT_YES, "'%s': I can't handle hardcopy terminals.\n", tname);
+ ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n", tname);
}
return result;
}
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)
{
}
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;
*/
if ((drv_sgmode(TCB, FALSE, &(_term->Nttyb)) == OK)) {
#ifdef TERMIOS
- _term->Nttyb.c_oflag &= ~OFLAGS_TABS;
+ _term->Nttyb.c_oflag &= (unsigned) ~OFLAGS_TABS;
#else
- _term->Nttyb.sg_flags &= ~XTABS;
+ _term->Nttyb.sg_flags &= (unsigned) ~XTABS;
#endif
code = OK;
}
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;
}
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);