tt_availmodes
[unix-history] / usr / src / usr.bin / window / wwadd.c
CommitLineData
7c1c9e39 1#ifndef lint
861cd1ed 2static 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 */
11wwadd(w1, w2)
12register 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}