1 /* 2 * Copyright (c) 1983, 1993 3 * The Regents of the University of California. 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 * %sccs.include.redist.c% 9 */ 10 11 #ifndef lint 12 static char sccsid[] = "@(#)wwmove.c 8.1 (Berkeley) 06/06/93"; 13 #endif /* not lint */ 14 15 #include "ww.h" 16 17 /* 18 * Move a window. Should be unattached. 19 */ 20 wwmove(w, row, col) 21 register struct ww *w; 22 { 23 register dr, dc; 24 register i; 25 26 dr = row - w->ww_w.t; 27 dc = col - w->ww_w.l; 28 29 w->ww_w.t += dr; 30 w->ww_w.b += dr; 31 w->ww_w.l += dc; 32 w->ww_w.r += dc; 33 34 w->ww_b.t += dr; 35 w->ww_b.b += dr; 36 w->ww_b.l += dc; 37 w->ww_b.r += dc; 38 39 w->ww_i.t = MAX(w->ww_w.t, 0); 40 w->ww_i.b = MIN(w->ww_w.b, wwnrow); 41 w->ww_i.nr = w->ww_i.b - w->ww_i.t; 42 w->ww_i.l = MAX(w->ww_w.l, 0); 43 w->ww_i.r = MIN(w->ww_w.r, wwncol); 44 w->ww_i.nc = w->ww_i.r - w->ww_i.l; 45 46 w->ww_cur.r += dr; 47 w->ww_cur.c += dc; 48 49 w->ww_win -= dr; 50 for (i = w->ww_w.t; i < w->ww_w.b; i++) 51 w->ww_win[i] -= dc; 52 if (w->ww_fmap != 0) { 53 w->ww_fmap -= dr; 54 for (i = w->ww_w.t; i < w->ww_w.b; i++) 55 w->ww_fmap[i] -= dc; 56 } 57 w->ww_nvis -= dr; 58 for (i = w->ww_i.t; i < w->ww_i.b; i++) { 59 register j = w->ww_i.l; 60 register char *win = &w->ww_win[i][j]; 61 register char *smap = &wwsmap[i][j]; 62 int nvis = 0; 63 64 for (; j < w->ww_i.r; j++, win++, smap++) 65 if (*win == 0 && *smap == w->ww_index) 66 nvis++; 67 w->ww_nvis[i] = nvis; 68 } 69 w->ww_buf -= dr; 70 for (i = w->ww_b.t; i < w->ww_b.b; i++) 71 w->ww_buf[i] -= dc; 72 } 73