|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Edward Wang at The University of California, Berkeley.
7: *
8: * Redistribution and use in source and binary forms are permitted provided
9: * that: (1) source distributions retain this entire copyright notice and
10: * comment, and (2) distributions including binaries display the following
11: * acknowledgement: ``This product includes software developed by the
12: * University of California, Berkeley and its contributors'' in the
13: * documentation or other materials provided with the distribution and in
14: * all advertising materials mentioning features or use of this software.
15: * Neither the name of the University nor the names of its contributors may
16: * be used to endorse or promote products derived from this software without
17: * specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: */
22:
23: #ifndef lint
24: static char sccsid[] = "@(#)wwadd.c 3.14 (Berkeley) 6/6/90";
25: #endif /* not lint */
26:
27: #include "ww.h"
28:
29: /*
30: * Stick w1 behind w2.
31: */
32: wwadd(w1, w2)
33: register struct ww *w1;
34: struct ww *w2;
35: {
36: register i;
37: register struct ww *w;
38:
39: w1->ww_order = w2->ww_order + 1;
40: w1->ww_back = w2;
41: w1->ww_forw = w2->ww_forw;
42: w2->ww_forw->ww_back = w1;
43: w2->ww_forw = w1;
44:
45: for (w = w1->ww_forw; w != &wwhead; w = w->ww_forw)
46: w->ww_order++;
47: for (i = w1->ww_i.t; i < w1->ww_i.b; i++) {
48: register j;
49: register char *smap = wwsmap[i];
50: register char *win = w1->ww_win[i];
51: union ww_char *ns = wwns[i];
52: union ww_char *buf = w1->ww_buf[i];
53: int nvis = 0;
54: int nchanged = 0;
55:
56: for (j = w1->ww_i.l; j < w1->ww_i.r; j++) {
57: w = wwindex[smap[j]];
58: if (w1->ww_order > w->ww_order)
59: continue;
60: if (win[j] & WWM_GLS)
61: continue;
62: if (w != &wwnobody && w->ww_win[i][j] == 0)
63: w->ww_nvis[i]--;
64: smap[j] = w1->ww_index;
65: if (win[j] == 0)
66: nvis++;
67: ns[j].c_w = buf[j].c_w ^ win[j] << WWC_MSHIFT;
68: nchanged++;
69: }
70: if (nchanged > 0)
71: wwtouched[i] |= WWU_TOUCHED;
72: w1->ww_nvis[i] = nvis;
73: }
74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.