1 #ifndef lint 2 static char *sccsid = "@(#)wwmove.c 3.3 83/09/16"; 3 #endif 4 5 #include "ww.h" 6 7 /* 8 * Move a window. Should be unattached. 9 */ 10 wwmove(w, row, col) 11 register struct ww *w; 12 { 13 register dr, dc; 14 register i; 15 16 if (w->ww_forw != 0 || w->ww_back != 0) 17 return; /* sanity */ 18 19 dr = row - w->ww_w.t; 20 dc = col - w->ww_w.l; 21 22 w->ww_w.t += dr; 23 w->ww_w.b += dr; 24 w->ww_w.l += dc; 25 w->ww_w.r += dc; 26 27 w->ww_b.t += dr; 28 w->ww_b.b += dr; 29 w->ww_b.l += dc; 30 w->ww_b.r += dc; 31 32 w->ww_i.t = MAX(w->ww_w.t, 0); 33 w->ww_i.b = MIN(w->ww_w.b, wwnrow); 34 w->ww_i.nr = w->ww_i.b - w->ww_i.t; 35 w->ww_i.l = MAX(w->ww_w.l, 0); 36 w->ww_i.r = MIN(w->ww_w.r, wwncol); 37 w->ww_i.nc = w->ww_i.r - w->ww_i.l; 38 39 w->ww_cur.r += dr; 40 w->ww_cur.c += dc; 41 42 w->ww_win -= dr; 43 for (i = w->ww_w.t; i < w->ww_w.b; i++) 44 w->ww_win[i] -= dc; 45 w->ww_cov -= dr; 46 for (i = w->ww_w.t; i < w->ww_w.b; i++) 47 w->ww_cov[i] -= dc; 48 if (w->ww_fmap != 0) { 49 w->ww_fmap -= dr; 50 for (i = w->ww_w.t; i < w->ww_w.b; i++) 51 w->ww_fmap[i] -= dc; 52 } 53 w->ww_nvis -= dr; 54 for (i = w->ww_i.t; i < w->ww_i.b; i++) { 55 register j = w->ww_i.l; 56 register char *win = &w->ww_win[i][j]; 57 int nvis = 0; 58 59 for (; j < w->ww_i.r; j++) 60 if (*win++ == 0) 61 nvis++; 62 w->ww_nvis[i] = nvis; 63 } 64 w->ww_buf -= dr; 65 for (i = w->ww_b.t; i < w->ww_b.b; i++) 66 w->ww_buf[i] -= dc; 67 } 68