xref: /original-bsd/usr.bin/window/wwredrawwin.c (revision 8251a00e)
1 #ifndef lint
2 static	char *sccsid = "@(#)wwredrawwin.c	3.1 83/08/12";
3 #endif
4 
5 #include "ww.h"
6 
7 wwredrawwin(w)
8 register struct ww *w;
9 {
10 	wwredrawwin1(w, 0, w->ww_w.nr - 1, w->ww_scroll);
11 }
12 
13 wwredrawwin1(w, srow, erow, offset)
14 register struct ww *w;
15 int srow, erow, offset;
16 {
17 	int i;
18 	register j;
19 	register char *smap;
20 	register union ww_char *buf;
21 	register char *win;
22 	register union ww_char *ns;
23 
24 	for (i = srow; i <= erow; i++) {
25 		ns = &wwns[i + w->ww_w.t][w->ww_w.l];
26 		smap = &wwsmap[i + w->ww_w.t][w->ww_w.l];
27 		buf = w->ww_buf[offset + i];
28 		win = w->ww_win[i];
29 		for (j = w->ww_w.nc; --j >= 0;)
30 			if (*smap++ != w->ww_index)
31 				win++, ns++, buf++;
32 			else
33 				ns++->c_w = buf++->c_w
34 					^ *win++ << WWC_MSHIFT;
35 	}
36 }
37