Fixed SCROLLWIN problems: don't output last character of window
authorElan Amir <elan@ucbvax.Berkeley.EDU>
Fri, 7 May 1993 04:39:39 +0000 (20:39 -0800)
committerElan Amir <elan@ucbvax.Berkeley.EDU>
Fri, 7 May 1993 04:39:39 +0000 (20:39 -0800)
until first character on next line is output.

SCCS-vsn: lib/libcurses/refresh.c 5.39

usr/src/lib/libcurses/refresh.c

index fcd07ed..29758d1 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)refresh.c  5.38 (Berkeley) %G%";
+static char sccsid[] = "@(#)refresh.c  5.39 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <curses.h>
 #endif /* not lint */
 
 #include <curses.h>
@@ -270,12 +270,13 @@ makech(win, wy)
                                                        curscr->flags &=
                                                            ~__WSTANDOUT;
                                                }
                                                        curscr->flags &=
                                                            ~__WSTANDOUT;
                                                }
-                                       if (!curwin) {
-                                               csp->attr = nsp->attr;
-                                               putchar(csp->ch = nsp->ch);
-                                       } else
-                                               putchar(nsp->ch);
-
+                                       if (!(win->flags & __SCROLLWIN)) {
+                                               if (!curwin) {
+                                                       csp->attr = nsp->attr;
+                                                       putchar(csp->ch = nsp->ch);
+                                               } else
+                                                       putchar(nsp->ch);
+                                       }
                                        if (wx + win->begx < curscr->maxx) {
                                                domvcur(ly, wx + win->begx, 
                                                    win->begy + win->maxy - 1,
                                        if (wx + win->begx < curscr->maxx) {
                                                domvcur(ly, wx + win->begx, 
                                                    win->begy + win->maxy - 1,
@@ -284,18 +285,16 @@ makech(win, wy)
                                        ly = win->begy + win->maxy - 1;
                                        lx = win->begx + win->maxx - 1;
                                        return (OK);
                                        ly = win->begy + win->maxy - 1;
                                        lx = win->begx + win->maxx - 1;
                                        return (OK);
-                               } else
-                                       if (win->flags & __SCROLLWIN) {
-                                               lx = --wx;
-                                               return (ERR);
-                                       }
-                       if (!curwin) {
-                               csp->attr = nsp->attr;
-                               putchar(csp->ch = nsp->ch);
-                               csp++;
-                       } else
-                               putchar(nsp->ch);
-                       
+                               } 
+                       if (wx < win->maxx || wy < win->maxy - 1 || 
+                           !(win->flags & __SCROLLWIN)) {
+                               if (!curwin) {
+                                       csp->attr = nsp->attr;
+                                       putchar(csp->ch = nsp->ch);
+                                       csp++;
+                               } else 
+                                       putchar(nsp->ch);
+                       }
 #ifdef DEBUG
                        __TRACE("makech: putchar(%c)\n", nsp->ch & 0177);
 #endif
 #ifdef DEBUG
                        __TRACE("makech: putchar(%c)\n", nsp->ch & 0177);
 #endif
@@ -304,10 +303,10 @@ makech(win, wy)
                                tputs(UC, 0, __cputchar);
                        }
                        nsp++;
                                tputs(UC, 0, __cputchar);
                        }
                        nsp++;
-               }
 #ifdef DEBUG
                __TRACE("makech: 2: wx = %d, lx = %d\n", wx, lx);
 #endif
 #ifdef DEBUG
                __TRACE("makech: 2: wx = %d, lx = %d\n", wx, lx);
 #endif
+               }
                if (lx == wx + win->begx)       /* If no change. */
                        break;
                lx = wx + win->begx;
                if (lx == wx + win->begx)       /* If no change. */
                        break;
                lx = wx + win->begx;