New cover algorithm, and new loop structure.
authorEdward Wang <edward@ucbvax.Berkeley.EDU>
Tue, 29 Nov 1983 09:14:38 +0000 (01:14 -0800)
committerEdward Wang <edward@ucbvax.Berkeley.EDU>
Tue, 29 Nov 1983 09:14:38 +0000 (01:14 -0800)
SCCS-vsn: usr.bin/window/wwdelete.c 3.9
SCCS-vsn: usr.bin/window/wwunframe.c 3.11

usr/src/usr.bin/window/wwdelete.c
usr/src/usr.bin/window/wwunframe.c

index 2453e01..818ac20 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwdelete.c  3.8 83/11/28";
+static char *sccsid = "@(#)wwdelete.c  3.9 83/11/28";
 #endif
 
 #include "ww.h"
 #endif
 
 #include "ww.h"
@@ -10,22 +10,32 @@ static      char *sccsid = "@(#)wwdelete.c  3.8 83/11/28";
 wwdelete(w)
 register struct ww *w;
 {
 wwdelete(w)
 register struct ww *w;
 {
-       register struct ww *wp;
-       register i, j;
+       register i;
+
+       for (i = w->ww_i.t; i < w->ww_i.b; i++) {
+               register j;
+               register char *smap = wwsmap[i];
+               register struct ww_char *ns = wwns[i];
+               register char *touched = &wwtouched[i];
 
 
-       for (i = w->ww_i.t; i < w->ww_i.b; i++)
                for (j = w->ww_i.l; j < w->ww_i.r; j++)
                for (j = w->ww_i.l; j < w->ww_i.r; j++)
-                       if (wwsmap[i][j] == w->ww_index) {
-                               wwsmap[i][j] = WWX_NOBODY;
-                               wwns[i][j].c_w = ' ';
-                               wwtouched[i] = 1;
+                       if (smap[j] == w->ww_index) {
+                               smap[j] = WWX_NOBODY;
+                               ns[j].c_w = ' ';
+                               *touched = 1;
                        }
                        }
+       }
 
 
-       for (wp = w->ww_forw; wp != &wwhead; wp = wp->ww_forw)
-               w->ww_order--;
+       {
+               register struct ww *wp;
 
 
-       if ((wp = w->ww_forw) != &wwhead)
-               wwdelete1(wp, w->ww_i.t, w->ww_i.b, w->ww_i.l, w->ww_i.r);
+               for (wp = w->ww_forw; wp != &wwhead; wp = wp->ww_forw)
+                       wp->ww_order--;
+       }
+
+       if (w->ww_forw != &wwhead)
+               wwdelete1(w->ww_forw,
+                       w->ww_i.t, w->ww_i.b, w->ww_i.l, w->ww_i.r);
 
        w->ww_back->ww_forw = w->ww_forw;
        w->ww_forw->ww_back = w->ww_back;
 
        w->ww_back->ww_forw = w->ww_forw;
        w->ww_forw->ww_back = w->ww_back;
@@ -43,7 +53,7 @@ register struct ww *w;
        ll = MAX(l, w->ww_i.l);
        rr = MIN(r, w->ww_i.r);
        for (i = tt; i < bb; i++) {
        ll = MAX(l, w->ww_i.l);
        rr = MIN(r, w->ww_i.r);
        for (i = tt; i < bb; i++) {
-               register j = ll;
+               register j;
                register char *smap = wwsmap[i];
                register union ww_char *ns = wwns[i];
                register char *win = w->ww_win[i];
                register char *smap = wwsmap[i];
                register union ww_char *ns = wwns[i];
                register char *win = w->ww_win[i];
@@ -52,15 +62,13 @@ register struct ww *w;
                char touched = wwtouched[i];
 
                for (j = ll; j < rr; j++) {
                char touched = wwtouched[i];
 
                for (j = ll; j < rr; j++) {
-                       if (smap[j] != WWX_NOBODY)
+                       if (smap[j] != WWX_NOBODY || win[j] & WWM_GLS)
                                continue;
                                continue;
-                       if ((win[j] & WWM_GLS) == 0) {
-                               smap[j] = w->ww_index;
-                               ns[j].c_w = buf[j].c_w ^ win[j] << WWC_MSHIFT;
-                               touched = 1;
-                               if (win[j] == 0)
-                                       nvis++;
-                       }
+                       smap[j] = w->ww_index;
+                       ns[j].c_w = buf[j].c_w ^ win[j] << WWC_MSHIFT;
+                       touched = 1;
+                       if (win[j] == 0)
+                               nvis++;
                }
                wwtouched[i] = touched;
                w->ww_nvis[i] = nvis;
                }
                wwtouched[i] = touched;
                w->ww_nvis[i] = nvis;
index 4603822..b718554 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)wwunframe.c 3.10 83/11/23";
+static char *sccsid = "@(#)wwunframe.c 3.11 83/11/28";
 #endif
 
 #include "ww.h"
 #endif
 
 #include "ww.h"
@@ -7,37 +7,33 @@ static        char *sccsid = "@(#)wwunframe.c 3.10 83/11/23";
 wwunframe(w)
 register struct ww *w;
 {
 wwunframe(w)
 register struct ww *w;
 {
-       register i;
+       int i;
 
        for (i = w->ww_i.t; i < w->ww_i.b; i++) {
 
        for (i = w->ww_i.t; i < w->ww_i.b; i++) {
-               register j = w->ww_i.l;
-               register char *win = &w->ww_win[i][j];
-               register char *fmap = w->ww_fmap ? &w->ww_fmap[i][j] : 0;
-               register char *smap = &wwsmap[i][j];
+               register j;
+               register char *win = w->ww_win[i];
+               register char *fmap = w->ww_fmap ? w->ww_fmap[i] : 0;
+               register char *smap = wwsmap[i];
+               register struct ww_char *ns = wwns[i];
+               char touched = wwtouched[i];
 
 
-               for (; j < w->ww_i.r; j++) {
-                       if (*win & WWM_GLS) {
-                               win++;
-                               fmap++;
-                               smap++;
+               for (j = w->ww_i.l; j < w->ww_i.r; j++) {
+                       if (win[j] & WWM_GLS)
                                continue;
                                continue;
+                       win[j] |= WWM_GLS;
+                       if (fmap != 0)
+                               fmap[j] = 0;
+                       if (smap[j] == w->ww_index) {
+                               smap[j] = WWX_NOBODY;
+                               ns[j].c_w = ' ';
+                               touched = 1;
                        }
                        }
-                       *win++ |= WWM_GLS;
-                       if (w->ww_fmap != 0)
-                               *fmap++ = 0;
-                       if (*smap == w->ww_index) {
-                               *smap = WWX_NOBODY;
-                               wwns[i][j].c_w = ' ';
-                               wwtouched[i] = 1;
-                       }
-                       smap++;
                }
                }
+               wwtouched[i] = touched;
                w->ww_nvis[i] = 0;
        }
                w->ww_nvis[i] = 0;
        }
-       {
-               register struct ww *wp;
 
 
-               for (wp = w->ww_forw; wp != &wwhead; wp = wp->ww_forw)
-                       wwuncover(w, wp);
-       }
+       if (w->ww_forw != &wwhead)
+               wwdelete1(w->ww_forw,
+                       w->ww_i.t, w->ww_i.b, w->ww_i.l, w->ww_i.r);
 }
 }