X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_setup.c;h=c2a481d7d91150b51e953edb86ac20e7e4eb04e0;hp=891a1012c0180a9ac141df6122185904eba23c58;hb=41068edef084c39be0cecdf949d9b538d925f42c;hpb=3a0d9d27e0cf115ff9dcc6163c251bccaa62bd7d diff --git a/ncurses/tinfo/lib_setup.c b/ncurses/tinfo/lib_setup.c index 891a1012..c2a481d7 100644 --- a/ncurses/tinfo/lib_setup.c +++ b/ncurses/tinfo/lib_setup.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * + * Copyright (c) 1998-2009,2010 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 * @@ -42,7 +42,6 @@ #include #include /* for MAX_NAME_SIZE */ -#include #if SVR4_TERMIO && !defined(_POSIX_SOURCE) #define _POSIX_SOURCE @@ -52,7 +51,7 @@ #include #endif -MODULE_ID("$Id: lib_setup.c,v 1.120 2009/10/24 21:56:15 tom Exp $") +MODULE_ID("$Id: lib_setup.c,v 1.127 2010/01/23 17:57:43 tom Exp $") /**************************************************************************** * @@ -268,6 +267,7 @@ _nc_get_screensize(SCREEN *sp, sp->_TABSIZE = my_tabsize; } #else + (void) sp; TABSIZE = my_tabsize; #endif T(("TABSIZE = %d", my_tabsize)); @@ -465,35 +465,34 @@ grab_entry(const char *const tn, TERMTYPE *const tp) return (status); } #endif +#endif /* !USE_TERM_DRIVER */ /* -** do_prototype() -** ** Take the real command character out of the CC environment variable ** and substitute it in for the prototype given in 'command_character'. */ -static void -do_prototype(TERMINAL * termp) +void +_nc_tinfo_cmdch(TERMINAL * termp, char proto) { unsigned i; char CC; - char proto; char *tmp; - if ((tmp = getenv("CC")) != 0) { - if ((CC = *tmp) != 0) { - proto = *command_character; - - for_each_string(i, &(termp->type)) { - for (tmp = termp->type.Strings[i]; *tmp; tmp++) { - if (*tmp == proto) - *tmp = CC; - } + /* + * Only use the character if the string is a single character, + * since it is fairly common for developers to set the C compiler + * name as an environment variable - using the same symbol. + */ + if ((tmp = getenv("CC")) != 0 && strlen(tmp) == 1) { + CC = *tmp; + for_each_string(i, &(termp->type)) { + for (tmp = termp->type.Strings[i]; *tmp; tmp++) { + if (*tmp == proto) + *tmp = CC; } } } } -#endif /* !USE_TERM_DRIVER */ /* * Find the locale which is in effect. @@ -663,7 +662,7 @@ TINFO_SETUP_TERM(TERMINAL ** tp, } #ifdef USE_TERM_DRIVER TCB = (TERMINAL_CONTROL_BLOCK *) termp; - code = _nc_get_driver(TCB, tname, errret); + code = _nc_globals.term_driver(TCB, tname, errret); if (code == OK) { termp->Filedes = Filedes; termp->_termname = strdup(tname); @@ -706,8 +705,8 @@ TINFO_SETUP_TERM(TERMINAL ** tp, set_curterm(termp); - if (command_character && getenv("CC")) - do_prototype(termp); + if (command_character) + _nc_tinfo_cmdch(termp, *command_character); /* * If an application calls setupterm() rather than initscr() or @@ -750,6 +749,44 @@ TINFO_SETUP_TERM(TERMINAL ** tp, returnCode(code); } +#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. + */ +NCURSES_EXPORT(SCREEN *) +new_prescr(void) +{ + static SCREEN *sp; + + START_TRACE(); + T((T_CALLED("new_prescr()"))); + + if (sp == 0) { + sp = _nc_alloc_screen_sp(); + if (sp != 0) { + sp->rsp = sp->rippedoff; + sp->_filtered = _nc_prescreen.filter_mode; + sp->_use_env = _nc_prescreen.use_env; +#if NCURSES_NO_PADDING + sp->_no_padding = _nc_prescreen._no_padding; +#endif + sp->slk_format = 0; + sp->_slk = 0; + sp->_prescreen = TRUE; + SP_PRE_INIT(sp); +#if USE_REENTRANT + sp->_TABSIZE = _nc_prescreen._TABSIZE; + sp->_ESCDELAY = _nc_prescreen._ESCDELAY; +#endif + } + } + returnSP(sp); +} +#endif + #ifdef USE_TERM_DRIVER /* * This entrypoint is called from tgetent() to allow a special case of reusing