ncurses 5.8 - patch 20110307
[ncurses.git] / ncurses / base / lib_set_term.c
index 816ab041d647c81c1c076bda82313ba9426216e6..df0a276aef8a3a61f749226e5eb7216244b5b43d 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2009,2010 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.135 2009/11/28 21:49:24 tom Exp $")
+MODULE_ID("$Id: lib_set_term.c,v 1.138 2010/12/20 00:42:20 tom Exp $")
 
 #ifdef USE_TERM_DRIVER
 #define MaxColors      InfoOf(sp).maxcolors
@@ -117,7 +117,7 @@ delink_screen(SCREEN *sp)
     for (each_screen(temp)) {
        if (temp == sp) {
            if (last)
-               last = sp->_next_screen;
+               last->_next_screen = sp->_next_screen;
            else
                _nc_screen_chain = sp->_next_screen;
            result = TRUE;
@@ -314,7 +314,7 @@ NCURSES_SP_NAME(_nc_setupscreen) (
        ReturnScreenError();
     }
 
-    T(("created SP %p", sp));
+    T(("created SP %p", (void *) sp));
     sp->_next_screen = _nc_screen_chain;
     _nc_screen_chain = sp;
 
@@ -380,9 +380,9 @@ NCURSES_SP_NAME(_nc_setupscreen) (
     setmode(output, O_BINARY);
 #endif
     NCURSES_SP_NAME(_nc_set_buffer) (NCURSES_SP_ARGx output, TRUE);
-    sp->_lines = slines;
-    sp->_lines_avail = slines;
-    sp->_columns = scolumns;
+    sp->_lines = (NCURSES_SIZE_T) slines;
+    sp->_lines_avail = (NCURSES_SIZE_T) slines;
+    sp->_columns = (NCURSES_SIZE_T) scolumns;
     sp->_ofp = output;
     SP_PRE_INIT(sp);
     SetNoPadding(sp);
@@ -663,11 +663,12 @@ NCURSES_SP_NAME(_nc_setupscreen) (
                } else {
                    ReturnScreenError();
                }
-               if (rop->line < 0)
+               if (rop->line < 0) {
                    bottom_stolen += count;
-               else
-                   sp->_topstolen += count;
-               sp->_lines_avail -= count;
+               } else {
+                   sp->_topstolen = (NCURSES_SIZE_T) (sp->_topstolen + count);
+               }
+               sp->_lines_avail = (NCURSES_SIZE_T) (sp->_lines_avail - count);
            }
        }
        /* reset the stack */
@@ -722,7 +723,7 @@ NCURSES_SP_NAME(_nc_ripoffline) (NCURSES_SP_DCLx
     int code = ERR;
 
     START_TRACE();
-    T((T_CALLED("ripoffline(%p,%d,%p)"), (void *) SP_PARM, line, (void *) init));
+    T((T_CALLED("ripoffline(%p,%d,%p)"), (void *) SP_PARM, line, init));
 
 #if NCURSES_SP_FUNCS
     if (SP_PARM != 0 && SP_PARM->_prescreen)