114980Sedward #ifndef lint 2*18742Sedward static char sccsid[] = "@(#)wwmove.c 3.7 04/24/85"; 314980Sedward #endif 414980Sedward 5*18742Sedward /* 6*18742Sedward * Copyright (c) 1983 Regents of the University of California, 7*18742Sedward * All rights reserved. Redistribution permitted subject to 8*18742Sedward * the terms of the Berkeley Software License Agreement. 9*18742Sedward */ 10*18742Sedward 1114980Sedward #include "ww.h" 1214980Sedward 1314980Sedward /* 1414980Sedward * Move a window. Should be unattached. 1514980Sedward */ 1614980Sedward wwmove(w, row, col) 1714980Sedward register struct ww *w; 1814980Sedward { 1914989Sedward register dr, dc; 2014989Sedward register i; 2114989Sedward 2214989Sedward dr = row - w->ww_w.t; 2314989Sedward dc = col - w->ww_w.l; 2414980Sedward 2514989Sedward w->ww_w.t += dr; 2614989Sedward w->ww_w.b += dr; 2714989Sedward w->ww_w.l += dc; 2814989Sedward w->ww_w.r += dc; 2914989Sedward 3014989Sedward w->ww_b.t += dr; 3114989Sedward w->ww_b.b += dr; 3214989Sedward w->ww_b.l += dc; 3314989Sedward w->ww_b.r += dc; 3414989Sedward 3514980Sedward w->ww_i.t = MAX(w->ww_w.t, 0); 3614980Sedward w->ww_i.b = MIN(w->ww_w.b, wwnrow); 3714980Sedward w->ww_i.nr = w->ww_i.b - w->ww_i.t; 3814980Sedward w->ww_i.l = MAX(w->ww_w.l, 0); 3914980Sedward w->ww_i.r = MIN(w->ww_w.r, wwncol); 4014980Sedward w->ww_i.nc = w->ww_i.r - w->ww_i.l; 4114989Sedward 4214989Sedward w->ww_cur.r += dr; 4314989Sedward w->ww_cur.c += dc; 4414989Sedward 4514989Sedward w->ww_win -= dr; 4614989Sedward for (i = w->ww_w.t; i < w->ww_w.b; i++) 4714989Sedward w->ww_win[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; 5415002Sedward for (i = w->ww_i.t; i < w->ww_i.b; i++) { 5515002Sedward register j = w->ww_i.l; 5615002Sedward register char *win = &w->ww_win[i][j]; 5715592Sedward register char *smap = &wwsmap[i][j]; 5815002Sedward int nvis = 0; 5915002Sedward 6015592Sedward for (; j < w->ww_i.r; j++, win++, smap++) 6115592Sedward if (*win == 0 && *smap == w->ww_index) 6215002Sedward nvis++; 6315002Sedward w->ww_nvis[i] = nvis; 6415002Sedward } 6514989Sedward w->ww_buf -= dr; 6614989Sedward for (i = w->ww_b.t; i < w->ww_b.b; i++) 6714989Sedward w->ww_buf[i] -= dc; 6814980Sedward } 69