/****************************************************************************
- * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2016,2017 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 <locale.h>
#endif
-MODULE_ID("$Id: lib_setup.c,v 1.167 2016/09/10 20:07:30 tom Exp $")
+MODULE_ID("$Id: lib_setup.c,v 1.182 2017/06/17 22:21:50 tom Exp $")
/****************************************************************************
*
* Reduce explicit use of "cur_term" global variable.
*/
#undef CUR
-#define CUR termp->type.
+#define CUR TerminalType(termp).
/*
* Wrap global variables in this module.
if (CURRENT_SCREEN) {
TERMINAL *termp = TerminalOf(CURRENT_SCREEN);
if (termp != 0) {
- result = termp->type.term_names;
+ result = TerminalType(termp).term_names;
}
}
#else
if (cur_term != 0) {
- result = cur_term->type.term_names;
+ result = TerminalType(cur_term).term_names;
}
#endif
return result;
NCURSES_EXPORT(void)
NCURSES_SP_NAME(use_env) (NCURSES_SP_DCLx bool f)
{
+ START_TRACE();
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;
}
NCURSES_EXPORT(void)
NCURSES_SP_NAME(use_tioctl) (NCURSES_SP_DCLx bool f)
{
+ START_TRACE();
T((T_CALLED("use_tioctl(%p,%d)"), (void *) SP_PARM, (int) f));
#if NCURSES_SP_FUNCS
- START_TRACE();
if (IsPreScreen(SP_PARM)) {
- SP_PARM->_use_tioctl = f;
+ SP_PARM->use_tioctl = f;
}
#else
_nc_prescreen.use_tioctl = f;
NCURSES_EXPORT(void)
use_env(bool f)
{
- T((T_CALLED("use_env(%d)"), (int) f));
START_TRACE();
+ T((T_CALLED("use_env(%d)"), (int) f));
_nc_prescreen.use_env = f;
returnVoid;
}
NCURSES_EXPORT(void)
use_tioctl(bool f)
{
- T((T_CALLED("use_tioctl(%d)"), (int) f));
START_TRACE();
+ T((T_CALLED("use_tioctl(%d)"), (int) f));
_nc_prescreen.use_tioctl = f;
returnVoid;
}
NCURSES_EXPORT(void)
_nc_get_screensize(SCREEN *sp,
#ifdef USE_TERM_DRIVER
- TERMINAL * termp,
+ TERMINAL *termp,
#endif
int *linep, int *colp)
/* Obtain lines/columns values from the environment and/or terminfo entry */
#else /* !USE_TERM_DRIVER */
TERMINAL *termp = cur_term;
int my_tabsize;
+ bool useEnv = _nc_prescreen.use_env;
+ bool 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 (_nc_prescreen.use_env || _nc_prescreen.use_tioctl) {
+#if NCURSES_SP_FUNCS
+ if (sp) {
+ useEnv = sp->_use_env;
+ useTioctl = sp->use_tioctl;
+ }
+#endif
+
+ if (useEnv || useTioctl) {
#ifdef __EMX__
{
int screendata[2];
}
#endif /* HAVE_SIZECHANGE */
- if (_nc_prescreen.use_env) {
+ if (useEnv) {
int value;
- if (_nc_prescreen.use_tioctl) {
+ if (useTioctl) {
/*
* If environment variables are used, update them.
*/
* Put the derived values back in the screen-size caps, so
* tigetnum() and tgetnum() will do the right thing.
*/
- lines = (short) (*linep);
- columns = (short) (*colp);
+ lines = (NCURSES_INT2) (*linep);
+ columns = (NCURSES_INT2) (*colp);
+#if NCURSES_EXT_NUMBERS
+#define OldNumber(termp,name) \
+ (termp)->type.Numbers[(&name - (termp)->type2.Numbers)]
+ OldNumber(termp, lines) = (short) (*linep);
+ OldNumber(termp, columns) = (short) (*colp);
+#endif
}
T(("screen size is %dx%d", *linep, *colp));
* just like tgetent().
*/
int
-_nc_setup_tinfo(const char *const tn, TERMTYPE *const tp)
+_nc_setup_tinfo(const char *const tn, TERMTYPE2 *const tp)
{
char filename[PATH_MAX];
- int status = _nc_read_entry(tn, filename, tp);
+ int status = _nc_read_entry2(tn, filename, tp);
/*
* If we have an entry, force all of the cancelled strings to null
** and substitute it in for the prototype given in 'command_character'.
*/
void
-_nc_tinfo_cmdch(TERMINAL * termp, int proto)
+_nc_tinfo_cmdch(TERMINAL *termp, int proto)
{
char *tmp;
* character set.
*/
NCURSES_EXPORT(int)
-_nc_locale_breaks_acs(TERMINAL * termp)
+_nc_locale_breaks_acs(TERMINAL *termp)
{
const char *env_name = "NCURSES_NO_UTF8_ACS";
const char *env;
}
NCURSES_EXPORT(int)
-TINFO_SETUP_TERM(TERMINAL ** tp,
+TINFO_SETUP_TERM(TERMINAL **tp,
NCURSES_CONST char *tname,
int Filedes,
int *errret,
&& termp->Filedes == Filedes
&& termp->_termname != 0
&& !strcmp(termp->_termname, tname)
- && _nc_name_match(termp->type.term_names, tname, "|")) {
+ && _nc_name_match(TerminalType(termp).term_names, tname, "|")) {
T(("reusing existing terminal information and mode-settings"));
code = OK;
#ifdef USE_TERM_DRIVER
termp->Filedes = (short) Filedes;
termp->_termname = strdup(tname);
} else {
+ _nc_free_termtype2(&TerminalType(termp));
+ free(my_tcb);
ret_error0(errret ? *errret : TGETENT_ERR,
"Could not find any driver to handle this terminal.\n");
}
#else
#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP
- status = _nc_setup_tinfo(tname, &termp->type);
+ status = _nc_setup_tinfo(tname, &TerminalType(termp));
#else
status = TGETENT_NO;
#endif
/* try fallback list if entry on disk */
if (status != TGETENT_YES) {
- const TERMTYPE *fallback = _nc_fallback(tname);
+ const TERMTYPE2 *fallback = _nc_fallback2(tname);
if (fallback) {
- _nc_copy_termtype(&(termp->type), fallback);
+ TerminalType(termp) = *fallback;
status = TGETENT_YES;
}
}
if (status != TGETENT_YES) {
del_curterm(termp);
if (status == TGETENT_ERR) {
+ _nc_free_termtype2(&TerminalType(termp));
ret_error0(status, "terminals database is inaccessible\n");
} else if (status == TGETENT_NO) {
+ _nc_free_termtype2(&TerminalType(termp));
ret_error1(status, "unknown terminal type.\n", tname);
}
}
+#if NCURSES_EXT_NUMBERS
+ _nc_export_termtype2(&termp->type, &TerminalType(termp));
+#endif
#if !USE_REENTRANT
-#define MY_SIZE (size_t) (NAMESIZE - 1)
- _nc_STRNCPY(ttytype, termp->type.term_names, MY_SIZE);
- ttytype[MY_SIZE] = '\0';
+ save_ttytype(termp);
#endif
termp->Filedes = (short) Filedes;
* If an application calls setupterm() rather than initscr() or
* newterm(), we will not have the def_prog_mode() call in
* _nc_setupscreen(). Do it now anyway, so we can initialize the
- * baudrate.
+ * baudrate. Also get the shell-mode so that erasechar() works.
*/
if (NC_ISATTY(Filedes)) {
- def_prog_mode();
+ NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_ARG);
+ NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_ARG);
baudrate();
}
code = OK;
#if NCURSES_SP_FUNCS
/*
* In case of handling multiple screens, we need to have a screen before
- * initialization in setupscreen takes place. This is to extend the substitute
- * for some of the stuff in _nc_prescreen, especially for slk and ripoff
- * handling which should be done per screen.
+ * initialization in _nc_setupscreen takes place. This is to extend the
+ * substitute for some of the stuff in _nc_prescreen, especially for slk and
+ * ripoff handling which should be done per screen.
*/
NCURSES_EXPORT(SCREEN *)
new_prescr(void)
T((T_CALLED("new_prescr()")));
sp = _nc_alloc_screen_sp();
+ T(("_nc_alloc_screen_sp %p", (void *) sp));
if (sp != 0) {
+ _nc_prescreen.allocated = sp;
sp->rsp = sp->rippedoff;
sp->_filtered = _nc_prescreen.filter_mode;
sp->_use_env = _nc_prescreen.use_env;