xref: /original-bsd/usr.bin/window/wwredrawwin.c (revision 81a135f6)
1 #ifndef lint
2 static char sccsid[] = "@(#)wwredrawwin.c	3.9 05/23/84";
3 #endif
4 
5 #include "ww.h"
6 
7 wwredrawwin1(w, row1, row2, offset)
8 register struct ww *w;
9 int row1, row2, offset;
10 {
11 	int row;
12 	register col;
13 	register char *smap;
14 	register union ww_char *buf;
15 	register char *win;
16 	register union ww_char *ns;
17 	int nchanged;
18 
19 	for (row = row1; row < row2; row++) {
20 		col = w->ww_i.l;
21 		ns = wwns[row];
22 		smap = &wwsmap[row][col];
23 		buf = w->ww_buf[row + offset];
24 		win = w->ww_win[row];
25 		nchanged = 0;
26 		for (; col < w->ww_i.r; col++)
27 			if (*smap++ == w->ww_index) {
28 				nchanged++;
29 				ns[col].c_w =
30 					buf[col].c_w ^ win[col] << WWC_MSHIFT;
31 			}
32 		if (nchanged > 4)
33 			wwtouched[row] |= WWU_MAJOR|WWU_TOUCHED;
34 		else if (nchanged > 0)
35 			wwtouched[row] |= WWU_TOUCHED;
36 	}
37 }
38