+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Edward Wang at The University of California, Berkeley.
+ *
+ * %sccs.include.redist.c%
+ */
+
#ifndef lint
-static char *sccsid = "@(#)wwunframe.c 3.4 83/08/16";
-#endif
+static char sccsid[] = "@(#)wwunframe.c 3.20 (Berkeley) %G%";
+#endif /* not lint */
#include "ww.h"
wwunframe(w)
register struct ww *w;
{
- register i, j;
- register char *win;
- register char *fmap;
- register struct ww *wp;
+ int i;
+
+ for (i = w->ww_i.t; i < w->ww_i.b; i++) {
+ 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 union ww_char *ns = wwns[i];
+ int nchanged = 0;
- if (wwfmap == 0)
- return;
- for (i = w->ww_w.t; i < w->ww_w.b; i++) {
- win = w->ww_win[i - w->ww_w.t];
- fmap = wwfmap[i];
- for (j = w->ww_w.l; j < w->ww_w.r; j++) {
- if (*win & WWM_GLS) {
- win++;
- fmap++;
+ for (j = w->ww_i.l; j < w->ww_i.r; j++) {
+ if (win[j] & WWM_GLS)
continue;
- }
- *win++ |= WWM_GLS;
- *fmap++ = 0;
- if (wwsmap[i][j] == w->ww_index) {
- wwsmap[i][j] = WWX_NOBODY;
- wwns[i][j].c_w = ' ';
- wwtouched[i] = 1;
+ win[j] |= WWM_GLS;
+ if (fmap != 0)
+ fmap[j] = 0;
+ if (smap[j] == w->ww_index) {
+ smap[j] = WWX_NOBODY;
+ ns[j].c_w = ' ';
+ nchanged++;
}
}
+ if (nchanged > 0)
+ wwtouched[i] |= WWU_TOUCHED;
w->ww_nvis[i] = 0;
}
- 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);
}