xref: /original-bsd/usr.bin/window/wwdelete.c (revision 8251a00e)
1 #ifndef lint
2 static	char *sccsid = "@(#)wwdelete.c	3.2 83/08/11";
3 #endif
4 
5 #include "ww.h"
6 
7 /*
8  * Pull w free from the cover list.
9  */
10 wwdelete(w)
11 register struct ww *w;
12 {
13 	register i;
14 
15 	for (i = w->ww_w.t; i < w->ww_w.b; i++) {
16 		register int j = w->ww_w.l;
17 		register char *smap = &wwsmap[i][j];
18 		register union ww_char *ns = &wwns[i][j];
19 		for (j = w->ww_w.nc; --j >= 0;) {
20 			if (*smap == w->ww_index) {
21 				*smap++ = WWX_NOBODY;
22 				ns++->c_w = ' ';
23 			} else {
24 				smap++;
25 				ns++;
26 			}
27 		}
28 	}
29 	{
30 		register struct ww *wp;
31 		for (wp = w->ww_forw; wp != &wwhead; wp = wp->ww_forw) {
32 			wp->ww_order--;
33 			wwuncover(w, wp);
34 		}
35 	}
36 	for (i = 0; i < w->ww_w.nr; i++) {
37 		register j;
38 		register char *win = w->ww_win[i];
39 		register char *cov = w->ww_cov[i];
40 		for (j = w->ww_w.nc; --j >= 0;) {
41 			if (*win != 0) {
42 				if ((*win++ &= ~WWM_COV) == 0)
43 					w->ww_nvis[i]++;
44 			} else
45 				win++;
46 			*cov++ = WWX_NOBODY;
47 		}
48 	}
49 	w->ww_back->ww_forw = w->ww_forw;
50 	w->ww_forw->ww_back = w->ww_back;
51 	w->ww_forw = w->ww_back = 0;
52 }
53