/****************************************************************************
- * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2010,2011 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 <curses.priv.h>
#include <tic.h> /* for MAX_NAME_SIZE */
-#if SVR4_TERMIO && !defined(_POSIX_SOURCE)
-#define _POSIX_SOURCE
-#endif
-
#if HAVE_LOCALE_H
#include <locale.h>
#endif
-MODULE_ID("$Id: lib_setup.c,v 1.128 2010/04/03 13:54:45 tom Exp $")
+MODULE_ID("$Id: lib_setup.c,v 1.138 2011/06/14 22:36:29 tom Exp $")
/****************************************************************************
*
{
T((T_CALLED("use_env(%p,%d)"), (void *) SP_PARM, (int) f));
#if NCURSES_SP_FUNCS
+ START_TRACE();
if (IsPreScreen(SP_PARM)) {
SP_PARM->_use_env = f;
}
use_env(bool f)
{
T((T_CALLED("use_env(%d)"), (int) f));
+ START_TRACE();
_nc_prescreen.use_env = f;
returnVoid;
}
exit(EXIT_FAILURE);\
}
-#ifndef USE_TERM_DRIVER
#if USE_DATABASE || USE_TERMCAP
/*
* Return 1 if entry found, 0 if not found, -1 if database not accessible,
* just like tgetent().
*/
-static int
-grab_entry(const char *const tn, TERMTYPE *const tp)
+int
+_nc_setup_tinfo(const char *const tn, TERMTYPE *const tp)
{
char filename[PATH_MAX];
int status = _nc_read_entry(tn, filename, tp);
return (status);
}
#endif
-#endif /* !USE_TERM_DRIVER */
/*
** Take the real command character out of the CC environment variable
NCURSES_EXPORT(int)
_nc_locale_breaks_acs(TERMINAL * termp)
{
+ const char *env_name = "NCURSES_NO_UTF8_ACS";
char *env;
+ int value;
+ int result = 0;
- if ((env = getenv("NCURSES_NO_UTF8_ACS")) != 0) {
- return atoi(env);
+ if (getenv(env_name) != 0) {
+ result = _nc_getenv_num(env_name);
+ } else if ((value = tigetnum("U8")) >= 0) {
+ result = value; /* use extension feature */
} else if ((env = getenv("TERM")) != 0) {
- if (strstr(env, "linux"))
- return 1; /* always broken */
- if (strstr(env, "screen") != 0
- && ((env = getenv("TERMCAP")) != 0
- && strstr(env, "screen") != 0)
- && strstr(env, "hhII00") != 0) {
+ if (strstr(env, "linux")) {
+ result = 1; /* always broken */
+ } else if (strstr(env, "screen") != 0
+ && ((env = getenv("TERMCAP")) != 0
+ && strstr(env, "screen") != 0)
+ && strstr(env, "hhII00") != 0) {
if (CONTROL_N(enter_alt_charset_mode) ||
CONTROL_O(enter_alt_charset_mode) ||
CONTROL_N(set_attributes) ||
- CONTROL_O(set_attributes))
- return 1;
+ CONTROL_O(set_attributes)) {
+ result = 1;
+ }
}
}
- return 0;
+ return result;
}
NCURSES_EXPORT(int)
#ifdef USE_TERM_DRIVER
T((T_CALLED("_nc_setupterm_ex(%p,%s,%d,%p)"),
- tp, _nc_visbuf(tname), Filedes, errret));
+ (void *) tp, _nc_visbuf(tname), Filedes, (void *) errret));
if (tp == 0) {
ret_error0(TGETENT_ERR,
"Not enough memory to create terminal structure.\n");
}
#ifdef USE_TERM_DRIVER
+ INIT_TERM_DRIVER();
TCB = (TERMINAL_CONTROL_BLOCK *) termp;
code = _nc_globals.term_driver(TCB, tname, errret);
if (code == OK) {
- termp->Filedes = Filedes;
+ termp->Filedes = (short) Filedes;
termp->_termname = strdup(tname);
} else {
ret_error0(TGETENT_ERR,
}
#else
#if USE_DATABASE || USE_TERMCAP
- status = grab_entry(tname, &termp->type);
+ status = _nc_setup_tinfo(tname, &termp->type);
#else
status = TGETENT_NO;
#endif
ttytype[NAMESIZE - 1] = '\0';
#endif
- termp->Filedes = Filedes;
+ termp->Filedes = (short) Filedes;
termp->_termname = strdup(tname);
set_curterm(termp);