xref: /original-bsd/usr.bin/window/wwredrawwin.c (revision 900dc424)
1 /*
2  * Copyright (c) 1983, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Edward Wang at The University of California, Berkeley.
7  *
8  * %sccs.include.redist.c%
9  */
10 
11 #ifndef lint
12 static char sccsid[] = "@(#)wwredrawwin.c	8.1 (Berkeley) 06/06/93";
13 #endif /* not lint */
14 
15 #include "ww.h"
16 
17 wwredrawwin1(w, row1, row2, offset)
18 register struct ww *w;
19 int row1, row2, offset;
20 {
21 	int row;
22 	register col;
23 	register char *smap;
24 	register union ww_char *buf;
25 	register char *win;
26 	register union ww_char *ns;
27 	int x;
28 	int nchanged;
29 
30 	for (row = row1; row < row2; row++) {
31 		col = w->ww_i.l;
32 		ns = wwns[row];
33 		smap = &wwsmap[row][col];
34 		buf = w->ww_buf[row + offset];
35 		win = w->ww_win[row];
36 		nchanged = 0;
37 		for (; col < w->ww_i.r; col++)
38 			if (*smap++ == w->ww_index &&
39 			    ns[col].c_w !=
40 			    (x = buf[col].c_w ^ win[col] << WWC_MSHIFT)) {
41 				nchanged++;
42 				ns[col].c_w = x;
43 			}
44 		if (nchanged > 0)
45 			wwtouched[row] |= WWU_TOUCHED;
46 	}
47 }
48