X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_setup.c;h=967d42a8677156416f4cffb42bf7c7522dc928e8;hp=a376fc60275b8627fd97c7f94e6c7fe47dc0adde;hb=ca276baf720e3a44721b9e18955d3f546955c6c8;hpb=25358bc041a5566ce2de4c9c792837e552b35671 diff --git a/ncurses/tinfo/lib_setup.c b/ncurses/tinfo/lib_setup.c index a376fc60..967d42a8 100644 --- a/ncurses/tinfo/lib_setup.c +++ b/ncurses/tinfo/lib_setup.c @@ -53,7 +53,7 @@ #include /* lines, columns, cur_term */ -MODULE_ID("$Id: lib_setup.c,v 1.102 2008/01/19 21:07:45 tom Exp $") +MODULE_ID("$Id: lib_setup.c,v 1.108 2008/06/21 21:00:18 tom Exp $") /**************************************************************************** * @@ -109,15 +109,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(); +} 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(); } 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) @@ -154,23 +164,19 @@ set_tabsize(int value) * If we have a pending SIGWINCH, set the flag in each screen. */ NCURSES_EXPORT(int) -_nc_handle_sigwinch(int update) +_nc_handle_sigwinch(SCREEN *sp) { SCREEN *scan; - (void) update; /* no longer used */ - if (_nc_globals.have_sigwinch) { _nc_globals.have_sigwinch = 0; - scan = _nc_screen_chain; - while (scan) { + for (each_screen(scan)) { scan->_sig_winch = TRUE; - scan = scan->_next_screen; } } - return (SP ? SP->_sig_winch : 0); + return (sp ? sp->_sig_winch : 0); } #endif @@ -184,7 +190,7 @@ use_env(bool f) } NCURSES_EXPORT(void) -_nc_get_screensize(int *linep, int *colp) +_nc_get_screensize(SCREEN *sp, int *linep, int *colp) /* Obtain lines/columns values from the environment and/or terminfo entry */ { int my_tabsize; @@ -238,7 +244,7 @@ _nc_get_screensize(int *linep, int *colp) * environment variable. */ if (*linep <= 0) - *linep = (SP != 0 && SP->_filtered) ? 1 : WINSIZE_ROWS(size); + *linep = (sp != 0 && sp->_filtered) ? 1 : WINSIZE_ROWS(size); if (*colp <= 0) *colp = WINSIZE_COLS(size); } @@ -279,8 +285,8 @@ _nc_get_screensize(int *linep, int *colp) my_tabsize = 8; #if USE_REENTRANT - if (SP != 0) - SP->_TABSIZE = my_tabsize; + if (sp != 0) + sp->_TABSIZE = my_tabsize; #else TABSIZE = my_tabsize; #endif @@ -289,25 +295,25 @@ _nc_get_screensize(int *linep, int *colp) #if USE_SIZECHANGE NCURSES_EXPORT(void) -_nc_update_screensize(void) +_nc_update_screensize(SCREEN *sp) { int old_lines = lines; int new_lines; int old_cols = columns; int new_cols; - _nc_get_screensize(&new_lines, &new_cols); + _nc_get_screensize(sp, &new_lines, &new_cols); /* * See is_term_resized() and resizeterm(). * 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(new_lines, new_cols); - SP->_sig_winch = FALSE; + sp->_resize(new_lines, new_cols); + sp->_sig_winch = FALSE; } } #endif @@ -373,7 +379,7 @@ 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; char CC; @@ -384,8 +390,8 @@ do_prototype(void) CC = *tmp; proto = *command_character; - for_each_string(i, &(cur_term->type)) { - for (tmp = cur_term->type.Strings[i]; *tmp; tmp++) { + for_each_string(i, &(termp->type)) { + for (tmp = termp->type.Strings[i]; *tmp; tmp++) { if (*tmp == proto) *tmp = CC; } @@ -477,6 +483,7 @@ _nc_locale_breaks_acs(void) NCURSES_EXPORT(int) _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) { + TERMINAL *term_ptr; int status; START_TRACE(); @@ -521,14 +528,13 @@ _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, "|")) { + && (term_ptr = cur_term) != 0 + && term_ptr->Filedes == Filedes + && term_ptr->_termname != 0 + && !strcmp(term_ptr->_termname, tname) + && _nc_name_match(term_ptr->type.term_names, tname, "|")) { T(("reusing existing terminal information and mode-settings")); } else { - TERMINAL *term_ptr; term_ptr = typeCalloc(TERMINAL, 1); @@ -560,19 +566,18 @@ _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) 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, term_ptr->type.term_names, NAMESIZE - 1); ttytype[NAMESIZE - 1] = '\0'; #endif - cur_term->Filedes = Filedes; - cur_term->_termname = strdup(tname); + term_ptr->Filedes = Filedes; + term_ptr->_termname = strdup(tname); + + set_curterm(term_ptr); + + if (command_character && getenv("CC")) + do_prototype(term_ptr); /* * If an application calls setupterm() rather than initscr() or @@ -589,12 +594,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->_LINES) : &(_nc_prescreen._LINES), - SP ? &(SP->_COLS) : &(_nc_prescreen._COLS)); -#else - _nc_get_screensize(&LINES, &COLS); -#endif + _nc_get_screensize(SP, ptrLines(), ptrCols()); if (errret) *errret = TGETENT_YES;