]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/lib_set_term.c
ncurses 6.0 - patch 20170408
[ncurses.git] / ncurses / base / lib_set_term.c
index 94c24189d2c4be4212d3e62bd75f157c737b66db..854270bc211a44adeb7c793a2283545135ce269d 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2015,2016 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2016,2017 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            *
@@ -47,7 +47,7 @@
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_set_term.c,v 1.154 2016/01/23 21:32:00 tom Exp $")
+MODULE_ID("$Id: lib_set_term.c,v 1.159 2017/04/02 14:26:18 tom Exp $")
 
 #ifdef USE_TERM_DRIVER
 #define MaxColors      InfoOf(sp).maxcolors
@@ -134,7 +134,6 @@ delink_screen(SCREEN *sp)
 NCURSES_EXPORT(void)
 delscreen(SCREEN *sp)
 {
-    int i;
 
     T((T_CALLED("delscreen(%p)"), (void *) sp));
 
@@ -159,7 +158,10 @@ delscreen(SCREEN *sp)
        (void) _nc_freewin(StdScreen(sp));
 
        if (sp->_slk != 0) {
+
            if (sp->_slk->ent != 0) {
+               int i;
+
                for (i = 0; i < sp->_slk->labcnt; ++i) {
                    FreeIfNeeded(sp->_slk->ent[i].ent_text);
                    FreeIfNeeded(sp->_slk->ent[i].form_text);
@@ -284,9 +286,11 @@ NCURSES_SP_NAME(_nc_setupscreen) (
                                     int filtered,
                                     int slk_format)
 {
+#ifndef USE_TERM_DRIVER
+    static const TTY null_TTY; /* all zeros iff uninitialized */
+#endif
     char *env;
     int bottom_stolen = 0;
-    ripoff_t *rop;
     SCREEN *sp;
 #ifndef USE_TERM_DRIVER
     bool support_cookies = USE_XMC_SUPPORT;
@@ -303,6 +307,7 @@ NCURSES_SP_NAME(_nc_setupscreen) (
 
     if (!sp) {
        sp = _nc_alloc_screen_sp();
+       T(("_nc_alloc_screen_sp %p", (void *) sp));
        *spp = sp;
     }
     if (!sp
@@ -419,8 +424,8 @@ NCURSES_SP_NAME(_nc_setupscreen) (
     sp->_default_fg = COLOR_WHITE;
     sp->_default_bg = COLOR_BLACK;
 #else
-    sp->_default_fg = C_MASK;
-    sp->_default_bg = C_MASK;
+    sp->_default_fg = COLOR_DEFAULT;
+    sp->_default_bg = COLOR_DEFAULT;
 #endif
 
     /*
@@ -432,9 +437,9 @@ NCURSES_SP_NAME(_nc_setupscreen) (
        char sep1, sep2;
        int count = sscanf(env, "%d%c%d%c", &fg, &sep1, &bg, &sep2);
        if (count >= 1) {
-           sp->_default_fg = ((fg >= 0 && fg < MaxColors) ? fg : C_MASK);
+           sp->_default_fg = ((fg >= 0 && fg < MaxColors) ? fg : COLOR_DEFAULT);
            if (count >= 3) {
-               sp->_default_bg = ((bg >= 0 && bg < MaxColors) ? bg : C_MASK);
+               sp->_default_bg = ((bg >= 0 && bg < MaxColors) ? bg : COLOR_DEFAULT);
            }
            TR(TRACE_CHARPUT | TRACE_MOVE,
               ("from environment assumed fg=%d, bg=%d",
@@ -627,10 +632,22 @@ NCURSES_SP_NAME(_nc_setupscreen) (
     NewScreen(sp)->_clear = TRUE;
     CurScreen(sp)->_clear = FALSE;
 
-    NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_ARG);
-    NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_ARG);
+    /*
+     * Get the current tty-modes. setupterm() may already have done this,
+     * unless we use the term-driver.
+     */
+#ifndef USE_TERM_DRIVER
+    if (cur_term != 0 &&
+       !memcmp(&cur_term->Ottyb, &null_TTY, sizeof(TTY)))
+#endif
+    {
+       NCURSES_SP_NAME(def_shell_mode) (NCURSES_SP_ARG);
+       NCURSES_SP_NAME(def_prog_mode) (NCURSES_SP_ARG);
+    }
 
     if (safe_ripoff_sp && safe_ripoff_sp != safe_ripoff_stack) {
+       ripoff_t *rop;
+
        for (rop = safe_ripoff_stack;
             rop != safe_ripoff_sp && (rop - safe_ripoff_stack) < N_RIPS;
             rop++) {