#ifndef lint
-static char *sccsid = "@(#)wwunframe.c 3.1 83/08/09";
+static char sccsid[] = "@(#)wwunframe.c 3.14 %G%";
#endif
-#include "ww.h"
+/*
+ * Copyright (c) 1983 Regents of the University of California,
+ * All rights reserved. Redistribution permitted subject to
+ * the terms of the Berkeley Software License Agreement.
+ */
-char **wwfmap;
+#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 struct 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 = ' ';
+ 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 > 4)
+ wwtouched[i] |= WWU_MAJOR|WWU_TOUCHED;
+ else 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);
}