118742Sedward /*
2*62479Sbostic * Copyright (c) 1983, 1993
3*62479Sbostic * The Regents of the University of California. All rights reserved.
433514Sbostic *
542954Sbostic * This code is derived from software contributed to Berkeley by
642954Sbostic * Edward Wang at The University of California, Berkeley.
742954Sbostic *
842835Sbostic * %sccs.include.redist.c%
918742Sedward */
1018742Sedward
1133514Sbostic #ifndef lint
12*62479Sbostic static char sccsid[] = "@(#)wwmove.c 8.1 (Berkeley) 06/06/93";
1333514Sbostic #endif /* not lint */
1433514Sbostic
1514980Sedward #include "ww.h"
1614980Sedward
1714980Sedward /*
1814980Sedward * Move a window. Should be unattached.
1914980Sedward */
wwmove(w,row,col)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