Forgot to fix ww_buf after ^[E.
[unix-history] / usr / src / usr.bin / window / cmd5.c
CommitLineData
0fae0eb5 1#ifndef lint
f2a77fe1 2static char *sccsid = "@(#)cmd5.c 3.6 83/09/15";
0fae0eb5 3#endif
8baf70f5
EW
4
5#include "defs.h"
6
7/*
8 * Window movement.
9 */
10c_move(w)
11register struct ww *w;
12{
13 int col, row;
19f9784c
EW
14 int mincol, minrow;
15 int maxcol, maxrow;
16 int curcol, currow;
8baf70f5
EW
17 struct ww *back = w->ww_back;
18
19 col = w->ww_w.l;
20 row = w->ww_w.t;
21 wwadd(boxwin, framewin->ww_back);
22 for (;;) {
23 wwbox(boxwin, row - 1, col - 1, w->ww_w.nr + 2, w->ww_w.nc + 2);
19f9784c
EW
24 getminmax(row, w->ww_w.nr, 1, wwnrow,
25 &currow, &minrow, &maxrow);
26 getminmax(col, w->ww_w.nc, 0, wwncol,
27 &curcol, &mincol, &maxcol);
28 wwsetcursor(currow, curcol);
8baf70f5
EW
29 while (bpeekc() < 0)
30 bread();
31 wwunbox(boxwin);
19f9784c 32 switch (getpos(&row, &col, minrow, mincol, maxrow, maxcol)) {
8baf70f5
EW
33 case -1:
34 wwdelete(boxwin);
35 if (!terse)
36 (void) wwputs("\r\nCancelled. ", cmdwin);
37 return;
38 case 1:
39 break;
40 case 0:
41 continue;
42 }
43 break;
44 }
45 wwdelete(boxwin);
46 if (!terse)
47 (void) wwputs("\r\n", cmdwin);
48 wwcurtowin(cmdwin);
49 wwdelete(w);
19f9784c 50 wwmove(w, row, col);
8baf70f5
EW
51 wwadd(w, back);
52 reframe();
53}
19f9784c
EW
54
55/*
56 * Weird stufff, don't ask.
57 */
58getminmax(x, n, a, b, curx, minx, maxx)
59register x, n, a, b;
60int *curx, *minx, *maxx;
61{
f2a77fe1 62 if (x < 0)
19f9784c 63 *curx = x + n - 1;
f2a77fe1 64 else
19f9784c 65 *curx = x;
f2a77fe1
EW
66
67 if (x <= a)
19f9784c 68 *minx = 1 - n;
f2a77fe1 69 else if (x <= b - n)
19f9784c 70 *minx = a;
f2a77fe1 71 else
19f9784c 72 *minx = b - n;
f2a77fe1
EW
73
74 if (x >= b - n)
19f9784c 75 *maxx = b - 1;
f2a77fe1
EW
76 else if (x >= a)
77 *maxx = b - n;
78 else
79 *maxx = a;
19f9784c 80}