X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_setup.c;h=6e738e0f5a7dafaeb013557fb74e1839c5873ccf;hp=ff5857b3730990d33e767d4df9cc8e5aa44eace6;hb=938680fa3bc29d2a086031a2f648dfd6cadcb51e;hpb=26001c55f3e698f2467ee6e4a6c376bed9be6439 diff --git a/ncurses/tinfo/lib_setup.c b/ncurses/tinfo/lib_setup.c index ff5857b3..6e738e0f 100644 --- a/ncurses/tinfo/lib_setup.c +++ b/ncurses/tinfo/lib_setup.c @@ -48,7 +48,7 @@ #include #endif -MODULE_ID("$Id: lib_setup.c,v 1.147 2012/07/14 23:59:26 tom Exp $") +MODULE_ID("$Id: lib_setup.c,v 1.155 2012/12/15 19:04:54 tom Exp $") /**************************************************************************** * @@ -304,7 +304,7 @@ _nc_get_screensize(SCREEN *sp, *linep = (int) lines; *colp = (int) columns; - if (_nc_prescreen.use_env) { + if (_nc_prescreen.use_env || _nc_prescreen.use_tioctl) { int value; #ifdef __EMX__ @@ -340,33 +340,35 @@ _nc_get_screensize(SCREEN *sp, } #endif /* HAVE_SIZECHANGE */ - if (_nc_prescreen.use_tioctl) { + if (_nc_prescreen.use_env) { + if (_nc_prescreen.use_tioctl) { + /* + * 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); + } + } + /* - * If environment variables are used, update them. + * Finally, look for environment variables. + * + * Solaris lets users override either dimension with an environment + * variable. */ - if ((sp == 0 || !sp->_filtered) && _nc_getenv_num("LINES") > 0) { - _nc_setenv_num("LINES", *linep); + if ((value = _nc_getenv_num("LINES")) > 0) { + *linep = value; + T(("screen size: environment LINES = %d", *linep)); } - if (_nc_getenv_num("COLUMNS") > 0) { - _nc_setenv_num("COLUMNS", *colp); + if ((value = _nc_getenv_num("COLUMNS")) > 0) { + *colp = value; + T(("screen size: environment COLUMNS = %d", *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 */ if (*linep <= 0) { *linep = (int) lines; @@ -436,8 +438,7 @@ _nc_update_screensize(SCREEN *sp) * We're doing it this way because those functions belong to the upper * ncurses library, while this resides in the lower terminfo library. */ - if (sp != 0 - && sp->_resize != 0) { + if (sp != 0 && sp->_resize != 0) { if ((new_lines != old_lines) || (new_cols != old_cols)) { sp->_resize(NCURSES_SP_ARGx new_lines, new_cols); } else if (sp->_sig_winch && (sp->_ungetch != 0)) { @@ -544,7 +545,9 @@ NCURSES_EXPORT(int) _nc_unicode_locale(void) { int result = 0; -#if HAVE_LANGINFO_CODESET +#if defined(__MINGW32__) && USE_WIDEC_SUPPORT + result = 1; +#elif HAVE_LANGINFO_CODESET char *env = nl_langinfo(CODESET); result = !strcmp(env, "UTF-8"); T(("_nc_unicode_locale(%s) ->%d", env, result)); @@ -632,7 +635,11 @@ TINFO_SETUP_TERM(TERMINAL ** tp, if (tname == 0) { tname = getenv("TERM"); if (tname == 0 || *tname == '\0') { +#ifdef USE_TERM_DRIVER + tname = "unknown"; +#else ret_error0(TGETENT_ERR, "TERM environment variable not set.\n"); +#endif } } @@ -675,6 +682,9 @@ TINFO_SETUP_TERM(TERMINAL ** tp, && _nc_name_match(termp->type.term_names, tname, "|")) { T(("reusing existing terminal information and mode-settings")); code = OK; +#ifdef USE_TERM_DRIVER + TCB = (TERMINAL_CONTROL_BLOCK *) termp; +#endif } else { #ifdef USE_TERM_DRIVER termp = (TERMINAL *) typeCalloc(TERMINAL_CONTROL_BLOCK, 1); @@ -773,11 +783,14 @@ TINFO_SETUP_TERM(TERMINAL ** tp, if ((VALID_STRING(cursor_address) || (VALID_STRING(cursor_down) && VALID_STRING(cursor_home))) && VALID_STRING(clear_screen)) { + free(termp); ret_error1(TGETENT_YES, "terminal is not really generic.\n", tname); } else { + free(termp); ret_error1(TGETENT_NO, "I need something more specific.\n", tname); } } else if (hard_copy) { + free(termp); ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n", tname); } #endif @@ -834,7 +847,7 @@ _nc_setupterm(NCURSES_CONST char *tname, int reuse) { int res; - TERMINAL *termp; + TERMINAL *termp = 0; res = TINFO_SETUP_TERM(&termp, tname, Filedes, errret, reuse); if (ERR != res) NCURSES_SP_NAME(set_curterm) (CURRENT_SCREEN_PRE, termp);