X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_setup.c;h=0b104ab9f9262489eea21228f8810c4792bab308;hp=9a49ee74060c8e25eaf85b00fdc233c0740bd019;hb=1078c0231b8a58fbd2dd56b6e0a81b19d6b07f77;hpb=7a27c7d49c2e8b4a1ecbe85b4423d647cbc75ea5 diff --git a/ncurses/tinfo/lib_setup.c b/ncurses/tinfo/lib_setup.c index 9a49ee74..0b104ab9 100644 --- a/ncurses/tinfo/lib_setup.c +++ b/ncurses/tinfo/lib_setup.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 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 * @@ -53,7 +53,7 @@ #include /* lines, columns, cur_term */ -MODULE_ID("$Id: lib_setup.c,v 1.98 2007/04/21 19:57:42 tom Exp $") +MODULE_ID("$Id: lib_setup.c,v 1.107 2008/06/07 22:22:58 tom Exp $") /**************************************************************************** * @@ -99,21 +99,35 @@ MODULE_ID("$Id: lib_setup.c,v 1.98 2007/04/21 19:57:42 tom Exp $") # endif #endif +/* + * Wrap global variables in this module. + */ #if USE_REENTRANT NCURSES_EXPORT(char *) NCURSES_PUBLIC_VAR(ttytype) (void) { - return cur_term ? cur_term->type.term_names : ""; + 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 : 0; + 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 : 0; + return *_nc_ptr_Cols(); } NCURSES_EXPORT(int) NCURSES_PUBLIC_VAR(TABSIZE) (void) @@ -127,28 +141,42 @@ NCURSES_EXPORT_VAR(int) COLS = 0; NCURSES_EXPORT_VAR(int) TABSIZE = 0; #endif +#if NCURSES_EXT_FUNCS +NCURSES_EXPORT(int) +set_tabsize(int value) +{ + int code = OK; +#if USE_REENTRANT + if (SP) { + SP->_TABSIZE = value; + } else { + code = ERR; + } +#else + TABSIZE = value; +#endif + return code; +} +#endif + #if USE_SIGWINCH /* * 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 @@ -162,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; @@ -216,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); } @@ -257,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 @@ -267,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 @@ -538,20 +566,19 @@ _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) ret_error(status, "'%s': unknown terminal type.\n", tname); } } +#if !USE_REENTRANT + strncpy(ttytype, term_ptr->type.term_names, NAMESIZE - 1); + ttytype[NAMESIZE - 1] = '\0'; +#endif + + term_ptr->Filedes = Filedes; + term_ptr->_termname = strdup(tname); set_curterm(term_ptr); if (command_character && getenv("CC")) do_prototype(); -#if !USE_REENTRANT - strncpy(ttytype, cur_term->type.term_names, NAMESIZE - 1); - ttytype[NAMESIZE - 1] = '\0'; -#endif - - cur_term->Filedes = Filedes; - cur_term->_termname = strdup(tname); - /* * If an application calls setupterm() rather than initscr() or * newterm(), we will not have the def_prog_mode() call in @@ -564,6 +591,11 @@ _nc_setupterm(NCURSES_CONST char *tname, int Filedes, int *errret, bool reuse) } } + /* + * We should always check the screensize, just in case. + */ + _nc_get_screensize(SP, ptrLines(), ptrCols()); + if (errret) *errret = TGETENT_YES;