|
|
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[] = "@(#)wwmove.c 3.11 (Berkeley) 6/6/90";
25: #endif /* not lint */
26:
27: #include "ww.h"
28:
29: /*
30: * Move a window. Should be unattached.
31: */
32: wwmove(w, row, col)
33: register struct ww *w;
34: {
35: register dr, dc;
36: register i;
37:
38: dr = row - w->ww_w.t;
39: dc = col - w->ww_w.l;
40:
41: w->ww_w.t += dr;
42: w->ww_w.b += dr;
43: w->ww_w.l += dc;
44: w->ww_w.r += dc;
45:
46: w->ww_b.t += dr;
47: w->ww_b.b += dr;
48: w->ww_b.l += dc;
49: w->ww_b.r += dc;
50:
51: w->ww_i.t = MAX(w->ww_w.t, 0);
52: w->ww_i.b = MIN(w->ww_w.b, wwnrow);
53: w->ww_i.nr = w->ww_i.b - w->ww_i.t;
54: w->ww_i.l = MAX(w->ww_w.l, 0);
55: w->ww_i.r = MIN(w->ww_w.r, wwncol);
56: w->ww_i.nc = w->ww_i.r - w->ww_i.l;
57:
58: w->ww_cur.r += dr;
59: w->ww_cur.c += dc;
60:
61: w->ww_win -= dr;
62: for (i = w->ww_w.t; i < w->ww_w.b; i++)
63: w->ww_win[i] -= dc;
64: if (w->ww_fmap != 0) {
65: w->ww_fmap -= dr;
66: for (i = w->ww_w.t; i < w->ww_w.b; i++)
67: w->ww_fmap[i] -= dc;
68: }
69: w->ww_nvis -= dr;
70: for (i = w->ww_i.t; i < w->ww_i.b; i++) {
71: register j = w->ww_i.l;
72: register char *win = &w->ww_win[i][j];
73: register char *smap = &wwsmap[i][j];
74: int nvis = 0;
75:
76: for (; j < w->ww_i.r; j++, win++, smap++)
77: if (*win == 0 && *smap == w->ww_index)
78: nvis++;
79: w->ww_nvis[i] = nvis;
80: }
81: w->ww_buf -= dr;
82: for (i = w->ww_b.t; i < w->ww_b.b; i++)
83: w->ww_buf[i] -= dc;
84: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.