Commit | Line | Data |
---|---|---|
7c1c9e39 | 1 | #ifndef lint |
861cd1ed | 2 | static char *sccsid = "@(#)wwadd.c 3.3 83/08/16"; |
7c1c9e39 EW |
3 | #endif |
4 | ||
5 | #include "ww.h" | |
6 | ||
7 | /* | |
8 | * Stick w1 behind w2 | |
9 | * W1 should have an empty ww_cov map. | |
10 | */ | |
11 | wwadd(w1, w2) | |
12 | register struct ww *w1, *w2; | |
13 | { | |
14 | if (w1->ww_forw != 0 || w1->ww_back != 0) | |
15 | abort(); | |
16 | w1->ww_order = w2->ww_order + 1; | |
17 | w1->ww_back = w2; | |
18 | w1->ww_forw = w2->ww_forw; | |
19 | w2->ww_forw->ww_back = w1; | |
20 | w2->ww_forw = w1; | |
21 | { | |
22 | register struct ww *wp; | |
23 | ||
24 | for (wp = w2; wp != &wwhead; wp = wp->ww_back) | |
25 | wwcover(wp, w1); | |
26 | for (wp = w1->ww_forw; wp != &wwhead; wp = wp->ww_forw) { | |
27 | wp->ww_order++; | |
28 | wwcover(w1, wp); | |
29 | } | |
30 | } | |
31 | { | |
861cd1ed EW |
32 | int i = w1->ww_w.t; |
33 | char *touched = &wwtouched[i]; | |
7c1c9e39 | 34 | |
861cd1ed EW |
35 | for (; i < w1->ww_w.b; i++, touched++) { |
36 | int j = w1->ww_w.nc; | |
7c1c9e39 EW |
37 | register char *win = w1->ww_win[i - w1->ww_w.t]; |
38 | register char *smap = &wwsmap[i][w1->ww_w.l]; | |
39 | register union ww_char *ns = &wwns[i][w1->ww_w.l]; | |
40 | register union ww_char *buf = w1->ww_buf[w1->ww_scroll | |
41 | + i - w1->ww_w.t]; | |
42 | ||
861cd1ed | 43 | while (--j >= 0) { |
7c1c9e39 | 44 | if ((*win & (WWM_GLS|WWM_COV)) == 0) { |
861cd1ed | 45 | *touched = 1; |
7c1c9e39 EW |
46 | *smap++ = w1->ww_index; |
47 | ns++->c_w = buf++->c_w | |
48 | ^ *win++ << WWC_MSHIFT; | |
49 | } else { | |
50 | smap++; | |
51 | ns++; | |
52 | win++; | |
53 | buf++; | |
54 | } | |
55 | } | |
56 | } | |
57 | } | |
58 | } |