1 /* 2 * Copyright (c) 1983 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are permitted 6 * provided that this notice is preserved and that due credit is given 7 * to the University of California at Berkeley. The name of the University 8 * may not be used to endorse or promote products derived from this 9 * software without specific prior written permission. This software 10 * is provided ``as is'' without express or implied warranty. 11 */ 12 13 #ifndef lint 14 static char sccsid[] = "@(#)wwmove.c 3.8 (Berkeley) 02/21/88"; 15 #endif /* not lint */ 16 17 #include "ww.h" 18 19 /* 20 * Move a window. Should be unattached. 21 */ 22 wwmove(w, row, col) 23 register struct ww *w; 24 { 25 register dr, dc; 26 register i; 27 28 dr = row - w->ww_w.t; 29 dc = col - w->ww_w.l; 30 31 w->ww_w.t += dr; 32 w->ww_w.b += dr; 33 w->ww_w.l += dc; 34 w->ww_w.r += dc; 35 36 w->ww_b.t += dr; 37 w->ww_b.b += dr; 38 w->ww_b.l += dc; 39 w->ww_b.r += dc; 40 41 w->ww_i.t = MAX(w->ww_w.t, 0); 42 w->ww_i.b = MIN(w->ww_w.b, wwnrow); 43 w->ww_i.nr = w->ww_i.b - w->ww_i.t; 44 w->ww_i.l = MAX(w->ww_w.l, 0); 45 w->ww_i.r = MIN(w->ww_w.r, wwncol); 46 w->ww_i.nc = w->ww_i.r - w->ww_i.l; 47 48 w->ww_cur.r += dr; 49 w->ww_cur.c += dc; 50 51 w->ww_win -= dr; 52 for (i = w->ww_w.t; i < w->ww_w.b; i++) 53 w->ww_win[i] -= dc; 54 if (w->ww_fmap != 0) { 55 w->ww_fmap -= dr; 56 for (i = w->ww_w.t; i < w->ww_w.b; i++) 57 w->ww_fmap[i] -= dc; 58 } 59 w->ww_nvis -= dr; 60 for (i = w->ww_i.t; i < w->ww_i.b; i++) { 61 register j = w->ww_i.l; 62 register char *win = &w->ww_win[i][j]; 63 register char *smap = &wwsmap[i][j]; 64 int nvis = 0; 65 66 for (; j < w->ww_i.r; j++, win++, smap++) 67 if (*win == 0 && *smap == w->ww_index) 68 nvis++; 69 w->ww_nvis[i] = nvis; 70 } 71 w->ww_buf -= dr; 72 for (i = w->ww_b.t; i < w->ww_b.b; i++) 73 w->ww_buf[i] -= dc; 74 } 75