X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_set_term.c;h=7bf6ea4db581cc348090f65c043da686340301b2;hp=24f90d1b19a55e19c7a1539d71313213ad3a3c6f;hb=da1f84b7eb32f17e91f6de242132ab3b2d462148;hpb=1078c0231b8a58fbd2dd56b6e0a81b19d6b07f77 diff --git a/ncurses/base/lib_set_term.c b/ncurses/base/lib_set_term.c index 24f90d1b..7bf6ea4d 100644 --- a/ncurses/base/lib_set_term.c +++ b/ncurses/base/lib_set_term.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 * ****************************************************************************/ /* @@ -44,7 +45,11 @@ #include /* cur_term */ #include -MODULE_ID("$Id: lib_set_term.c,v 1.112 2008/06/07 22:29:07 tom Exp $") +#ifndef CUR +#define CUR SP_TERMTYPE +#endif + +MODULE_ID("$Id: lib_set_term.c,v 1.124 2009/06/27 21:36:14 tom Exp $") NCURSES_EXPORT(SCREEN *) set_term(SCREEN *screenp) @@ -164,11 +169,6 @@ delscreen(SCREEN *sp) FreeIfNeeded(sp->_acs_map); FreeIfNeeded(sp->_screen_acs_map); -#if 0 - /* FIXME - this should be a copy of the struct, not a pointer */ - del_curterm(sp->_term); -#endif - /* * If the associated output stream has been closed, we can discard the * set-buffer. Limit the error check to EBADF, since fflush may fail @@ -181,6 +181,7 @@ delscreen(SCREEN *sp) free(sp->_setbuf); } + del_curterm(sp->_term); free(sp); /* @@ -260,6 +261,9 @@ _nc_setupscreen(int slines GCC_UNUSED, bool filtered, int slk_format) { +#if NCURSES_SP_FUNCS + SCREEN *sp = CURRENT_SCREEN; +#endif char *env; int bottom_stolen = 0; bool support_cookies = USE_XMC_SUPPORT; @@ -276,6 +280,9 @@ _nc_setupscreen(int slines GCC_UNUSED, } T(("created SP %p", SP)); +#if NCURSES_SP_FUNCS + sp = SP; /* fixup so SET_LINES and SET_COLS works */ +#endif SP->_next_screen = _nc_screen_chain; _nc_screen_chain = SP; @@ -326,11 +333,7 @@ _nc_setupscreen(int slines GCC_UNUSED, SP->_ofp = output; SP->_cursor = -1; /* cannot know real cursor shape */ -#if NCURSES_NO_PADDING - SP->_no_padding = getenv("NCURSES_NO_PADDING") != 0; - TR(TRACE_CHARPUT | TRACE_MOVE, ("padding will%s be used", - SP->_no_padding ? " not" : "")); -#endif + SetNoPadding(SP); #if NCURSES_EXT_FUNCS SP->_default_color = FALSE; @@ -367,11 +370,10 @@ _nc_setupscreen(int slines GCC_UNUSED, * Allow those assumed/default color assumptions to be overridden at * runtime: */ - if (getenv("NCURSES_ASSUMED_COLORS") != 0) { - char *p = getenv("NCURSES_ASSUMED_COLORS"); + if ((env = getenv("NCURSES_ASSUMED_COLORS")) != 0) { int fg, bg; char sep1, sep2; - int count = sscanf(p, "%d%c%d%c", &fg, &sep1, &bg, &sep2); + int count = sscanf(env, "%d%c%d%c", &fg, &sep1, &bg, &sep2); if (count >= 1) { SP->_default_fg = (fg >= 0 && fg < max_colors) ? fg : C_MASK; if (count >= 3) { @@ -427,11 +429,6 @@ _nc_setupscreen(int slines GCC_UNUSED, SP->_mouse_wrap = no_mouse_wrap; SP->_mouse_fd = -1; - /* initialize the panel hooks */ - SP->_panelHook.top_panel = (struct panel *) 0; - SP->_panelHook.bottom_panel = (struct panel *) 0; - SP->_panelHook.stdscr_pseudo_panel = (struct panel *) 0; - /* * If we've no magic cookie support, we suppress attributes that xmc would * affect, i.e., the attributes that affect the rendition of a space. @@ -520,7 +517,7 @@ _nc_setupscreen(int slines GCC_UNUSED, /* initialize normal acs before wide, since we use mapping in the latter */ #if !USE_WIDEC_SUPPORT - if (_nc_unicode_locale() && _nc_locale_breaks_acs()) { + if (_nc_unicode_locale() && _nc_locale_breaks_acs(cur_term)) { acs_chars = NULL; ena_acs = NULL; enter_alt_charset_mode = NULL; @@ -532,7 +529,8 @@ _nc_setupscreen(int slines GCC_UNUSED, #if USE_WIDEC_SUPPORT _nc_init_wacs(); - SP->_screen_acs_fix = (_nc_unicode_locale() && _nc_locale_breaks_acs()); + SP->_screen_acs_fix = (_nc_unicode_locale() + && _nc_locale_breaks_acs(cur_term)); #endif env = _nc_get_locale(); SP->_legacy_coding = ((env == 0) @@ -559,7 +557,7 @@ _nc_setupscreen(int slines GCC_UNUSED, curscr = SP->_curscr; #endif #if USE_SIZECHANGE - SP->_resize = resizeterm; + SP->_resize = NCURSES_SP_NAME(resizeterm); #endif newscr->_clear = TRUE; @@ -568,8 +566,8 @@ _nc_setupscreen(int slines GCC_UNUSED, def_shell_mode(); def_prog_mode(); - for (rop = ripoff_stack; - rop != ripoff_sp && (rop - ripoff_stack) < N_RIPS; + for (rop = safe_ripoff_stack; + rop != safe_ripoff_sp && (rop - safe_ripoff_stack) < N_RIPS; rop++) { /* If we must simulate soft labels, grab off the line to be used. @@ -608,7 +606,7 @@ _nc_setupscreen(int slines GCC_UNUSED, } } /* reset the stack */ - ripoff_sp = ripoff_stack; + safe_ripoff_sp = safe_ripoff_stack; T(("creating stdscr")); assert((SP->_lines_avail + SP->_topstolen + bottom_stolen) == slines); @@ -628,27 +626,39 @@ _nc_setupscreen(int slines GCC_UNUSED, * off from the top or bottom. */ NCURSES_EXPORT(int) -_nc_ripoffline(int line, int (*init) (WINDOW *, int)) +NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_DCLx + int line, + int (*init) (WINDOW *, int)) { T((T_CALLED("_nc_ripoffline(%d, %p)"), line, init)); if (line != 0) { - if (ripoff_sp == 0) - ripoff_sp = ripoff_stack; - if (ripoff_sp >= ripoff_stack + N_RIPS) + if (safe_ripoff_sp == 0) + safe_ripoff_sp = safe_ripoff_stack; + if (safe_ripoff_sp >= safe_ripoff_stack + N_RIPS) returnCode(ERR); - ripoff_sp->line = line; - ripoff_sp->hook = init; - ripoff_sp++; + safe_ripoff_sp->line = line; + safe_ripoff_sp->hook = init; + safe_ripoff_sp++; } returnCode(OK); } +#if NCURSES_SP_FUNCS NCURSES_EXPORT(int) -ripoffline(int line, int (*init) (WINDOW *, int)) +_nc_ripoffline(int line, int (*init) (WINDOW *, int)) +{ + return NCURSES_SP_NAME(_nc_ripoffline) (CURRENT_SCREEN, line, init); +} +#endif + +NCURSES_EXPORT(int) +NCURSES_SP_NAME(ripoffline) (NCURSES_SP_DCLx + int line, + int (*init) (WINDOW *, int)) { START_TRACE(); T((T_CALLED("ripoffline(%d,%p)"), line, init)); @@ -656,5 +666,15 @@ ripoffline(int line, int (*init) (WINDOW *, int)) if (line == 0) returnCode(OK); - returnCode(_nc_ripoffline((line < 0) ? -1 : 1, init)); + returnCode(NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_ARGx + (line < 0) ? -1 : 1, + init)); } + +#if NCURSES_SP_FUNCS +NCURSES_EXPORT(int) +ripoffline(int line, int (*init) (WINDOW *, int)) +{ + return NCURSES_SP_NAME(ripoffline) (CURRENT_SCREEN, line, init); +} +#endif