date and time created 83/09/14 14:21:03 by edward
[unix-history] / usr / src / usr.bin / window / wwadd.c
CommitLineData
7c1c9e39 1#ifndef lint
19f9784c 2static char *sccsid = "@(#)wwadd.c 3.4 83/09/14";
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 */
11wwadd(w1, w2)
12register struct ww *w1, *w2;
13{
14 if (w1->ww_forw != 0 || w1->ww_back != 0)
19f9784c
EW
15 return; /* sanity */
16
7c1c9e39
EW
17 w1->ww_order = w2->ww_order + 1;
18 w1->ww_back = w2;
19 w1->ww_forw = w2->ww_forw;
20 w2->ww_forw->ww_back = w1;
21 w2->ww_forw = w1;
19f9784c 22
7c1c9e39
EW
23 {
24 register struct ww *wp;
25
26 for (wp = w2; wp != &wwhead; wp = wp->ww_back)
27 wwcover(wp, w1);
28 for (wp = w1->ww_forw; wp != &wwhead; wp = wp->ww_forw) {
29 wp->ww_order++;
30 wwcover(w1, wp);
31 }
32 }
33 {
19f9784c 34 int i = w1->ww_i.t;
861cd1ed 35 char *touched = &wwtouched[i];
7c1c9e39 36
19f9784c
EW
37 for (; i < w1->ww_i.b; i++, touched++) {
38 int j = w1->ww_i.nc;
39 register char *win = &w1->ww_win[i - w1->ww_w.t]
40 [w1->ww_i.l - w1->ww_w.l];
41 register char *smap = &wwsmap[i][w1->ww_i.l];
42 register union ww_char *ns = &wwns[i][w1->ww_i.l];
43 register union ww_char *buf
44 = &w1->ww_buf[w1->ww_scroll + i - w1->ww_w.t]
45 [w1->ww_i.l - w1->ww_w.l];
7c1c9e39 46
861cd1ed 47 while (--j >= 0) {
7c1c9e39 48 if ((*win & (WWM_GLS|WWM_COV)) == 0) {
861cd1ed 49 *touched = 1;
7c1c9e39
EW
50 *smap++ = w1->ww_index;
51 ns++->c_w = buf++->c_w
52 ^ *win++ << WWC_MSHIFT;
53 } else {
54 smap++;
55 ns++;
56 win++;
57 buf++;
58 }
59 }
60 }
61 }
62}