114980Sedward #ifndef lint 2*15002Sedward static char *sccsid = "@(#)wwmove.c 3.3 83/09/16"; 314980Sedward #endif 414980Sedward 514980Sedward #include "ww.h" 614980Sedward 714980Sedward /* 814980Sedward * Move a window. Should be unattached. 914980Sedward */ 1014980Sedward wwmove(w, row, col) 1114980Sedward register struct ww *w; 1214980Sedward { 1314989Sedward register dr, dc; 1414989Sedward register i; 1514989Sedward 1614980Sedward if (w->ww_forw != 0 || w->ww_back != 0) 1714980Sedward return; /* sanity */ 1814980Sedward 1914989Sedward dr = row - w->ww_w.t; 2014989Sedward dc = col - w->ww_w.l; 2114980Sedward 2214989Sedward w->ww_w.t += dr; 2314989Sedward w->ww_w.b += dr; 2414989Sedward w->ww_w.l += dc; 2514989Sedward w->ww_w.r += dc; 2614989Sedward 2714989Sedward w->ww_b.t += dr; 2814989Sedward w->ww_b.b += dr; 2914989Sedward w->ww_b.l += dc; 3014989Sedward w->ww_b.r += dc; 3114989Sedward 3214980Sedward w->ww_i.t = MAX(w->ww_w.t, 0); 3314980Sedward w->ww_i.b = MIN(w->ww_w.b, wwnrow); 3414980Sedward w->ww_i.nr = w->ww_i.b - w->ww_i.t; 3514980Sedward w->ww_i.l = MAX(w->ww_w.l, 0); 3614980Sedward w->ww_i.r = MIN(w->ww_w.r, wwncol); 3714980Sedward w->ww_i.nc = w->ww_i.r - w->ww_i.l; 3814989Sedward 3914989Sedward w->ww_cur.r += dr; 4014989Sedward w->ww_cur.c += dc; 4114989Sedward 4214989Sedward w->ww_win -= dr; 4314989Sedward for (i = w->ww_w.t; i < w->ww_w.b; i++) 4414989Sedward w->ww_win[i] -= dc; 4514989Sedward w->ww_cov -= dr; 4614989Sedward for (i = w->ww_w.t; i < w->ww_w.b; i++) 4714989Sedward w->ww_cov[i] -= dc; 4814989Sedward if (w->ww_fmap != 0) { 4914989Sedward w->ww_fmap -= dr; 5014989Sedward for (i = w->ww_w.t; i < w->ww_w.b; i++) 5114989Sedward w->ww_fmap[i] -= dc; 5214989Sedward } 5314989Sedward w->ww_nvis -= dr; 54*15002Sedward for (i = w->ww_i.t; i < w->ww_i.b; i++) { 55*15002Sedward register j = w->ww_i.l; 56*15002Sedward register char *win = &w->ww_win[i][j]; 57*15002Sedward int nvis = 0; 58*15002Sedward 59*15002Sedward for (; j < w->ww_i.r; j++) 60*15002Sedward if (*win++ == 0) 61*15002Sedward nvis++; 62*15002Sedward w->ww_nvis[i] = nvis; 63*15002Sedward } 6414989Sedward w->ww_buf -= dr; 6514989Sedward for (i = w->ww_b.t; i < w->ww_b.b; i++) 6614989Sedward w->ww_buf[i] -= dc; 6714980Sedward } 68