X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Flib_setup.c;h=23239969a84c974ed2c1776c6f4413dddf2f0fc9;hp=51030b6b4f03069c280ccb85bd4aa63301979012;hb=e2e9c09c48b19b24979cafb2d4864f538b5ddd1c;hpb=cdbe3d3df7ca08989c4aaead5164309466e519eb diff --git a/ncurses/tinfo/lib_setup.c b/ncurses/tinfo/lib_setup.c index 51030b6b..23239969 100644 --- a/ncurses/tinfo/lib_setup.c +++ b/ncurses/tinfo/lib_setup.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. * + * Copyright (c) 1998-2015,2016 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 * @@ -48,7 +48,7 @@ #include #endif -MODULE_ID("$Id: lib_setup.c,v 1.149 2012/09/03 16:19:14 tom Exp $") +MODULE_ID("$Id: lib_setup.c,v 1.167 2016/09/10 20:07:30 tom Exp $") /**************************************************************************** * @@ -283,7 +283,7 @@ _nc_get_screensize(SCREEN *sp, TCB = (TERMINAL_CONTROL_BLOCK *) termp; my_tabsize = TCB->info.tabsize; - TCB->drv->size(TCB, linep, colp); + TCB->drv->td_size(TCB, linep, colp); #if USE_REENTRANT if (sp != 0) { @@ -305,8 +305,6 @@ _nc_get_screensize(SCREEN *sp, *colp = (int) columns; if (_nc_prescreen.use_env || _nc_prescreen.use_tioctl) { - int value; - #ifdef __EMX__ { int screendata[2]; @@ -321,7 +319,7 @@ _nc_get_screensize(SCREEN *sp, #endif #if HAVE_SIZECHANGE /* try asking the OS */ - if (isatty(cur_term->Filedes)) { + if (NC_ISATTY(cur_term->Filedes)) { STRUCT_WINSIZE size; errno = 0; @@ -341,6 +339,8 @@ _nc_get_screensize(SCREEN *sp, #endif /* HAVE_SIZECHANGE */ if (_nc_prescreen.use_env) { + int value; + if (_nc_prescreen.use_tioctl) { /* * If environment variables are used, update them. @@ -423,7 +423,7 @@ _nc_update_screensize(SCREEN *sp) assert(sp != 0); - CallDriver_2(sp, getsize, &old_lines, &old_cols); + CallDriver_2(sp, td_getsize, &old_lines, &old_cols); #else TERMINAL *termp = cur_term; @@ -438,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)) { @@ -456,7 +455,7 @@ _nc_update_screensize(SCREEN *sp) * ****************************************************************************/ -#if USE_DATABASE || USE_TERMCAP +#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP /* * Return 1 if entry found, 0 if not found, -1 if database not accessible, * just like tgetent(). @@ -495,8 +494,6 @@ _nc_setup_tinfo(const char *const tn, TERMTYPE *const tp) void _nc_tinfo_cmdch(TERMINAL * termp, int proto) { - unsigned i; - char CC; char *tmp; /* @@ -505,7 +502,9 @@ _nc_tinfo_cmdch(TERMINAL * termp, int proto) * name as an environment variable - using the same symbol. */ if ((tmp = getenv("CC")) != 0 && strlen(tmp) == 1) { - CC = *tmp; + unsigned i; + char CC = *tmp; + for_each_string(i, &(termp->type)) { for (tmp = termp->type.Strings[i]; tmp && *tmp; tmp++) { if (UChar(*tmp) == proto) @@ -575,10 +574,11 @@ NCURSES_EXPORT(int) _nc_locale_breaks_acs(TERMINAL * termp) { const char *env_name = "NCURSES_NO_UTF8_ACS"; - char *env; + const char *env; int value; int result = 0; + T((T_CALLED("_nc_locale_breaks_acs:%d"), result)); if (getenv(env_name) != 0) { result = _nc_getenv_num(env_name); } else if ((value = tigetnum("U8")) >= 0) { @@ -598,7 +598,7 @@ _nc_locale_breaks_acs(TERMINAL * termp) } } } - return result; + returnCode(result); } NCURSES_EXPORT(int) @@ -610,8 +610,6 @@ TINFO_SETUP_TERM(TERMINAL ** tp, { #ifdef USE_TERM_DRIVER TERMINAL_CONTROL_BLOCK *TCB = 0; -#else - int status; #endif TERMINAL *termp; SCREEN *sp = 0; @@ -636,7 +634,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 } } @@ -652,7 +654,7 @@ TINFO_SETUP_TERM(TERMINAL ** tp, * Allow output redirection. This is what SVr3 does. If stdout is * directed to a file, screen updates go to standard error. */ - if (Filedes == STDOUT_FILENO && !isatty(Filedes)) + if (Filedes == STDOUT_FILENO && !NC_ISATTY(Filedes)) Filedes = STDERR_FILENO; /* @@ -679,10 +681,17 @@ 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); + TERMINAL_CONTROL_BLOCK *my_tcb; + my_tcb = typeCalloc(TERMINAL_CONTROL_BLOCK, 1); + termp = &(my_tcb->term); #else + int status; + termp = typeCalloc(TERMINAL, 1); #endif if (termp == 0) { @@ -697,11 +706,11 @@ TINFO_SETUP_TERM(TERMINAL ** tp, termp->Filedes = (short) Filedes; termp->_termname = strdup(tname); } else { - ret_error0(TGETENT_ERR, + ret_error0(errret ? *errret : TGETENT_ERR, "Could not find any driver to handle this terminal.\n"); } #else -#if USE_DATABASE || USE_TERMCAP +#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP status = _nc_setup_tinfo(tname, &termp->type); #else status = TGETENT_NO; @@ -726,8 +735,9 @@ TINFO_SETUP_TERM(TERMINAL ** tp, } } #if !USE_REENTRANT - strncpy(ttytype, termp->type.term_names, (size_t) (NAMESIZE - 1)); - ttytype[NAMESIZE - 1] = '\0'; +#define MY_SIZE (size_t) (NAMESIZE - 1) + _nc_STRNCPY(ttytype, termp->type.term_names, MY_SIZE); + ttytype[MY_SIZE] = '\0'; #endif termp->Filedes = (short) Filedes; @@ -744,7 +754,7 @@ TINFO_SETUP_TERM(TERMINAL ** tp, * _nc_setupscreen(). Do it now anyway, so we can initialize the * baudrate. */ - if (isatty(Filedes)) { + if (NC_ISATTY(Filedes)) { def_prog_mode(); baudrate(); } @@ -755,7 +765,7 @@ TINFO_SETUP_TERM(TERMINAL ** tp, #ifdef USE_TERM_DRIVER *tp = termp; NCURSES_SP_NAME(set_curterm) (sp, termp); - TCB->drv->init(TCB); + TCB->drv->td_init(TCB); #else sp = SP; #endif @@ -779,6 +789,7 @@ TINFO_SETUP_TERM(TERMINAL ** tp, && VALID_STRING(clear_screen)) { ret_error1(TGETENT_YES, "terminal is not really generic.\n", tname); } else { + del_curterm(termp); ret_error1(TGETENT_NO, "I need something more specific.\n", tname); } } else if (hard_copy) { @@ -798,29 +809,27 @@ TINFO_SETUP_TERM(TERMINAL ** tp, NCURSES_EXPORT(SCREEN *) new_prescr(void) { - static SCREEN *sp; + 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; + 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; + sp->_no_padding = _nc_prescreen._no_padding; #endif - sp->slk_format = 0; - sp->_slk = 0; - sp->_prescreen = TRUE; - SP_PRE_INIT(sp); + 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; + sp->_TABSIZE = _nc_prescreen._TABSIZE; + sp->_ESCDELAY = _nc_prescreen._ESCDELAY; #endif - } } returnSP(sp); } @@ -838,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); @@ -855,5 +864,6 @@ _nc_setupterm(NCURSES_CONST char *tname, NCURSES_EXPORT(int) setupterm(NCURSES_CONST char *tname, int Filedes, int *errret) { + START_TRACE(); return _nc_setupterm(tname, Filedes, errret, FALSE); }