118742Sedward /* 233514Sbostic * Copyright (c) 1983 Regents of the University of California. 333514Sbostic * All rights reserved. 433514Sbostic * 5*42954Sbostic * This code is derived from software contributed to Berkeley by 6*42954Sbostic * Edward Wang at The University of California, Berkeley. 7*42954Sbostic * 842835Sbostic * %sccs.include.redist.c% 918742Sedward */ 1018742Sedward 1133514Sbostic #ifndef lint 12*42954Sbostic static char sccsid[] = "@(#)wwmove.c 3.11 (Berkeley) 06/06/90"; 1333514Sbostic #endif /* not lint */ 1433514Sbostic 1514980Sedward #include "ww.h" 1614980Sedward 1714980Sedward /* 1814980Sedward * Move a window. Should be unattached. 1914980Sedward */ 2014980Sedward wwmove(w, row, col) 2114980Sedward register struct ww *w; 2214980Sedward { 2314989Sedward register dr, dc; 2414989Sedward register i; 2514989Sedward 2614989Sedward dr = row - w->ww_w.t; 2714989Sedward dc = col - w->ww_w.l; 2814980Sedward 2914989Sedward w->ww_w.t += dr; 3014989Sedward w->ww_w.b += dr; 3114989Sedward w->ww_w.l += dc; 3214989Sedward w->ww_w.r += dc; 3314989Sedward 3414989Sedward w->ww_b.t += dr; 3514989Sedward w->ww_b.b += dr; 3614989Sedward w->ww_b.l += dc; 3714989Sedward w->ww_b.r += dc; 3814989Sedward 3914980Sedward w->ww_i.t = MAX(w->ww_w.t, 0); 4014980Sedward w->ww_i.b = MIN(w->ww_w.b, wwnrow); 4114980Sedward w->ww_i.nr = w->ww_i.b - w->ww_i.t; 4214980Sedward w->ww_i.l = MAX(w->ww_w.l, 0); 4314980Sedward w->ww_i.r = MIN(w->ww_w.r, wwncol); 4414980Sedward w->ww_i.nc = w->ww_i.r - w->ww_i.l; 4514989Sedward 4614989Sedward w->ww_cur.r += dr; 4714989Sedward w->ww_cur.c += dc; 4814989Sedward 4914989Sedward w->ww_win -= dr; 5014989Sedward for (i = w->ww_w.t; i < w->ww_w.b; i++) 5114989Sedward w->ww_win[i] -= dc; 5214989Sedward if (w->ww_fmap != 0) { 5314989Sedward w->ww_fmap -= dr; 5414989Sedward for (i = w->ww_w.t; i < w->ww_w.b; i++) 5514989Sedward w->ww_fmap[i] -= dc; 5614989Sedward } 5714989Sedward w->ww_nvis -= dr; 5815002Sedward for (i = w->ww_i.t; i < w->ww_i.b; i++) { 5915002Sedward register j = w->ww_i.l; 6015002Sedward register char *win = &w->ww_win[i][j]; 6115592Sedward register char *smap = &wwsmap[i][j]; 6215002Sedward int nvis = 0; 6315002Sedward 6415592Sedward for (; j < w->ww_i.r; j++, win++, smap++) 6515592Sedward if (*win == 0 && *smap == w->ww_index) 6615002Sedward nvis++; 6715002Sedward w->ww_nvis[i] = nvis; 6815002Sedward } 6914989Sedward w->ww_buf -= dr; 7014989Sedward for (i = w->ww_b.t; i < w->ww_b.b; i++) 7114989Sedward w->ww_buf[i] -= dc; 7214980Sedward } 73