X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_setup.c;h=9968083c9ff10cb91448ff480696ced5d4318a63;hp=08cb783c5942acc5fb0f14ca82791a325621089d;hb=7a6bbc8cf41c5186d46accc3d08622dc86526b34;hpb=ed530db2c5b10aa19d06104dfe82cf248a813860 diff --git a/ncurses/tinfo/lib_setup.c b/ncurses/tinfo/lib_setup.c index 08cb783c..9968083c 100644 --- a/ncurses/tinfo/lib_setup.c +++ b/ncurses/tinfo/lib_setup.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * + * Copyright (c) 1998-2008,2009 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 * @@ -30,6 +30,7 @@ * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * + * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* @@ -53,7 +54,7 @@ #include /* lines, columns, cur_term */ -MODULE_ID("$Id: lib_setup.c,v 1.105 2008/05/03 22:41:42 tom Exp $") +MODULE_ID("$Id: lib_setup.c,v 1.114 2009/04/18 23:52:03 tom Exp $") /**************************************************************************** * @@ -99,6 +100,12 @@ MODULE_ID("$Id: lib_setup.c,v 1.105 2008/05/03 22:41:42 tom Exp $") # endif #endif +/* + * Reduce explicit use of "cur_term" global variable. + */ +#undef CUR +#define CUR termp->type. + /* * Wrap global variables in this module. */ @@ -109,15 +116,25 @@ NCURSES_PUBLIC_VAR(ttytype) (void) static char empty[] = ""; return cur_term ? cur_term->type.term_names : empty; } +NCURSES_EXPORT(int *) +_nc_ptr_Lines(void) +{ + return ptrLines(CURRENT_SCREEN); +} NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(LINES) (void) { - return (SP ? SP->_LINES : _nc_prescreen._LINES); + return *_nc_ptr_Lines(); +} +NCURSES_EXPORT(int *) +_nc_ptr_Cols(void) +{ + return ptrCols(CURRENT_SCREEN); } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(COLS) (void) { - return SP ? SP->_COLS : _nc_prescreen._COLS; + return *_nc_ptr_Cols(); } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(TABSIZE) (void) @@ -133,21 +150,30 @@ NCURSES_EXPORT_VAR(int) TABSIZE = 0; #if NCURSES_EXT_FUNCS NCURSES_EXPORT(int) -set_tabsize(int value) +NCURSES_SP_NAME(set_tabsize) (NCURSES_SP_DCLx int value) { int code = OK; #if USE_REENTRANT - if (SP) { - SP->_TABSIZE = value; + if (SP_PARM) { + SP_PARM->_TABSIZE = value; } else { code = ERR; } #else + (void) SP_PARM; TABSIZE = value; #endif return code; } + +#if NCURSES_SP_FUNCS +NCURSES_EXPORT(int) +set_tabsize(int value) +{ + return NCURSES_SP_NAME(set_tabsize) (CURRENT_SCREEN, value); +} #endif +#endif /* NCURSES_EXT_FUNCS */ #if USE_SIGWINCH /* @@ -172,17 +198,30 @@ _nc_handle_sigwinch(SCREEN *sp) #endif NCURSES_EXPORT(void) -use_env(bool f) +NCURSES_SP_NAME(use_env) (NCURSES_SP_DCLx bool f) { T((T_CALLED("use_env()"))); - _nc_prescreen.use_env = f; + if (IsPreScreen(SP_PARM)) { + SP_PARM->_use_env = f; + } else { + _nc_prescreen.use_env = f; + } returnVoid; } +#if NCURSES_SP_FUNCS +NCURSES_EXPORT(void) +use_env(bool f) +{ + NCURSES_SP_NAME(use_env) (CURRENT_SCREEN, f); +} +#endif + NCURSES_EXPORT(void) _nc_get_screensize(SCREEN *sp, int *linep, int *colp) /* Obtain lines/columns values from the environment and/or terminfo entry */ { + TERMINAL *termp = cur_term; int my_tabsize; /* figure out the size of the screen */ @@ -287,6 +326,7 @@ _nc_get_screensize(SCREEN *sp, int *linep, int *colp) NCURSES_EXPORT(void) _nc_update_screensize(SCREEN *sp) { + TERMINAL *termp = cur_term; int old_lines = lines; int new_lines; int old_cols = columns; @@ -369,21 +409,23 @@ grab_entry(const char *const tn, TERMTYPE *const tp) ** and substitute it in for the prototype given in 'command_character'. */ static void -do_prototype(void) +do_prototype(TERMINAL * termp) { - int i; + unsigned i; char CC; char proto; char *tmp; - tmp = getenv("CC"); - CC = *tmp; - proto = *command_character; + if ((tmp = getenv("CC")) != 0) { + if ((CC = *tmp) != 0) { + proto = *command_character; - for_each_string(i, &(cur_term->type)) { - for (tmp = cur_term->type.Strings[i]; *tmp; tmp++) { - if (*tmp == proto) - *tmp = CC; + for_each_string(i, &(termp->type)) { + for (tmp = termp->type.Strings[i]; *tmp; tmp++) { + if (*tmp == proto) + *tmp = CC; + } + } } } } @@ -443,7 +485,7 @@ _nc_unicode_locale(void) * character set. */ NCURSES_EXPORT(int) -_nc_locale_breaks_acs(void) +_nc_locale_breaks_acs(TERMINAL * termp) { char *env; @@ -473,6 +515,7 @@ _nc_locale_breaks_acs(void) NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) { + TERMINAL *termp; int status; START_TRACE(); @@ -517,23 +560,22 @@ _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) * properly with this feature). */ if (reuse - && cur_term != 0 - && cur_term->Filedes == Filedes - && cur_term->_termname != 0 - && !strcmp(cur_term->_termname, tname) - && _nc_name_match(cur_term->type.term_names, tname, "|")) { + && (termp = cur_term) != 0 + && termp->Filedes == Filedes + && termp->_termname != 0 + && !strcmp(termp->_termname, tname) + && _nc_name_match(termp->type.term_names, tname, "|")) { T(("reusing existing terminal information and mode-settings")); } else { - TERMINAL *term_ptr; - term_ptr = typeCalloc(TERMINAL, 1); + termp = typeCalloc(TERMINAL, 1); - if (term_ptr == 0) { + if (termp == 0) { ret_error0(TGETENT_ERR, "Not enough memory to create terminal structure.\n"); } #if USE_DATABASE || USE_TERMCAP - status = grab_entry(tname, &term_ptr->type); + status = grab_entry(tname, &termp->type); #else status = TGETENT_NO; #endif @@ -543,32 +585,31 @@ _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) const TERMTYPE *fallback = _nc_fallback(tname); if (fallback) { - term_ptr->type = *fallback; + termp->type = *fallback; status = TGETENT_YES; } } if (status != TGETENT_YES) { - del_curterm(term_ptr); + del_curterm(termp); 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); } } - - set_curterm(term_ptr); - - if (command_character && getenv("CC")) - do_prototype(); - #if !USE_REENTRANT - strncpy(ttytype, cur_term->type.term_names, NAMESIZE - 1); + strncpy(ttytype, termp->type.term_names, NAMESIZE - 1); ttytype[NAMESIZE - 1] = '\0'; #endif - cur_term->Filedes = Filedes; - cur_term->_termname = strdup(tname); + termp->Filedes = Filedes; + termp->_termname = strdup(tname); + + set_curterm(termp); + + if (command_character && getenv("CC")) + do_prototype(termp); /* * If an application calls setupterm() rather than initscr() or @@ -585,13 +626,7 @@ _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) /* * We should always check the screensize, just in case. */ -#if USE_REENTRANT - _nc_get_screensize(SP, - SP ? &(SP->_LINES) : &(_nc_prescreen._LINES), - SP ? &(SP->_COLS) : &(_nc_prescreen._COLS)); -#else - _nc_get_screensize(SP, &LINES, &COLS); -#endif + _nc_get_screensize(SP, ptrLines(SP), ptrCols(SP)); if (errret) *errret = TGETENT_YES;