]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/lib_set_term.c
ncurses 6.0 - patch 20180120
[ncurses.git] / ncurses / base / lib_set_term.c
index 6cbf36ec60687f67d2fa0deac4a7ff229d9a466e..7ba5859960f75aa4348e0d2662eee29be1d61c1d 100644 (file)
@@ -46,7 +46,7 @@
 #undef CUR
 #define CUR SP_TERMTYPE
 
-MODULE_ID("$Id: lib_set_term.c,v 1.162 2017/04/15 21:44:03 tom Exp $")
+MODULE_ID("$Id: lib_set_term.c,v 1.167 2017/09/10 21:09:16 tom Exp $")
 
 #ifdef USE_TERM_DRIVER
 #define MaxColors      InfoOf(sp).maxcolors
@@ -182,6 +182,7 @@ delscreen(SCREEN *sp)
        FreeIfNeeded(sp->_color_table);
        FreeIfNeeded(sp->_color_pairs);
 
+       FreeIfNeeded(sp->_oldnum_list);
        FreeIfNeeded(sp->oldhash);
        FreeIfNeeded(sp->newhash);
        FreeIfNeeded(sp->hashtab);
@@ -192,8 +193,9 @@ delscreen(SCREEN *sp)
        NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
        NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx sp->_term);
        FreeIfNeeded(sp->out_buffer);
-       if (_nc_prescreen.allocated == sp)
-           _nc_prescreen.allocated = 0;
+       if (_nc_find_prescr() == sp) {
+           _nc_forget_prescr();
+       }
        free(sp);
 
        /*
@@ -367,13 +369,19 @@ NCURSES_SP_NAME(_nc_setupscreen) (
 #ifdef USE_TERM_DRIVER
        CallDriver(sp, td_setfilter);
 #else
-       clear_screen = 0;
-       cursor_down = parm_down_cursor = 0;
-       cursor_address = 0;
-       cursor_up = parm_up_cursor = 0;
-       row_address = 0;
+       /* *INDENT-EQLS* */
+       clear_screen     = ABSENT_STRING;
+       cursor_address   = ABSENT_STRING;
+       cursor_down      = ABSENT_STRING;
+       cursor_up        = ABSENT_STRING;
+       parm_down_cursor = ABSENT_STRING;
+       parm_up_cursor   = ABSENT_STRING;
+       row_address      = ABSENT_STRING;
+       cursor_home      = carriage_return;
+
+       if (back_color_erase)
+           clr_eos = ABSENT_STRING;
 
-       cursor_home = carriage_return;
 #endif
        T(("filter screensize %dx%d", slines, scolumns));
     }
@@ -753,12 +761,15 @@ NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_DCLx
        if (line == 0) {
            code = OK;
        } else {
-           if (safe_ripoff_sp == 0)
+           if (safe_ripoff_sp == 0) {
                safe_ripoff_sp = safe_ripoff_stack;
+           }
            if (safe_ripoff_sp < safe_ripoff_stack + N_RIPS) {
                safe_ripoff_sp->line = line;
                safe_ripoff_sp->hook = init;
                (safe_ripoff_sp)++;
+               T(("ripped-off %d:%d chunks",
+                  (int) (safe_ripoff_sp - safe_ripoff_stack), N_RIPS));
                code = OK;
            }
        }
@@ -771,7 +782,12 @@ NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_DCLx
 NCURSES_EXPORT(int)
 _nc_ripoffline(int line, int (*init) (WINDOW *, int))
 {
-    return NCURSES_SP_NAME(_nc_ripoffline) (CURRENT_SCREEN_PRE, line, init);
+    int rc;
+    _nc_lock_global(prescreen);
+    START_TRACE();
+    rc = NCURSES_SP_NAME(_nc_ripoffline) (CURRENT_SCREEN_PRE, line, init);
+    _nc_unlock_global(prescreen);
+    return rc;
 }
 #endif
 
@@ -790,6 +806,11 @@ NCURSES_SP_NAME(ripoffline) (NCURSES_SP_DCLx
 NCURSES_EXPORT(int)
 ripoffline(int line, int (*init) (WINDOW *, int))
 {
-    return NCURSES_SP_NAME(ripoffline) (CURRENT_SCREEN_PRE, line, init);
+    int rc;
+    _nc_lock_global(prescreen);
+    START_TRACE();
+    rc = NCURSES_SP_NAME(ripoffline) (CURRENT_SCREEN_PRE, line, init);
+    _nc_unlock_global(prescreen);
+    return rc;
 }
 #endif