+wwscroll(w, n)
+register struct ww *w;
+register n;
+{
+ int dir;
+ register scroll;
+
+ if (n == 0)
+ return;
+ dir = n < 0 ? -1 : 1;
+ scroll = w->ww_scroll + n;
+ if (scroll < 0)
+ scroll = 0;
+ else if (scroll > w->ww_nline - w->ww_w.nr)
+ scroll = w->ww_nline - w->ww_w.nr;
+ n = abs(scroll - w->ww_scroll);
+ if (n < w->ww_w.nr) {
+ while (--n >= 0) {
+ wwscroll1(w, 0, w->ww_w.nr - 1, dir, 0);
+ w->ww_scroll += dir;
+ }
+ } else {
+ w->ww_scroll = scroll;
+ wwredrawwin(w);
+ }
+}
+