| 1 | #ifndef lint |
| 2 | static char *sccsid = "@(#)wwredrawwin.c 3.3 83/08/18"; |
| 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 | char *touched; |
| 24 | |
| 25 | touched = &wwtouched[srow + w->ww_w.t]; |
| 26 | for (i = srow; i <= erow; i++, touched++) { |
| 27 | ns = &wwns[i + w->ww_w.t][w->ww_w.l]; |
| 28 | smap = &wwsmap[i + w->ww_w.t][w->ww_w.l]; |
| 29 | buf = w->ww_buf[offset + i]; |
| 30 | win = w->ww_win[i]; |
| 31 | for (j = w->ww_w.nc; --j >= 0;) |
| 32 | if (*smap++ != w->ww_index) |
| 33 | win++, ns++, buf++; |
| 34 | else { |
| 35 | *touched = 1; |
| 36 | ns++->c_w = buf++->c_w |
| 37 | ^ *win++ << WWC_MSHIFT; |
| 38 | } |
| 39 | } |
| 40 | } |