date and time created 85/04/11 16:55:44 by miriam
[unix-history] / usr / src / usr.bin / window / cmd5.c
CommitLineData
0fae0eb5 1#ifndef lint
b27a9cfb 2static char sccsid[] = "@(#)cmd5.c 3.13 %G%";
0fae0eb5 3#endif
8baf70f5
EW
4
5#include "defs.h"
6
7/*
8 * Window movement.
9 */
f176f953 10
8baf70f5
EW
11c_move(w)
12register struct ww *w;
13{
14 int col, row;
19f9784c
EW
15 int mincol, minrow;
16 int maxcol, maxrow;
17 int curcol, currow;
8baf70f5 18
b27a9cfb
EW
19 if (!terse)
20 wwputs("New window position: ", cmdwin);
8baf70f5
EW
21 col = w->ww_w.l;
22 row = w->ww_w.t;
23 wwadd(boxwin, framewin->ww_back);
24 for (;;) {
25 wwbox(boxwin, row - 1, col - 1, w->ww_w.nr + 2, w->ww_w.nc + 2);
19f9784c
EW
26 getminmax(row, w->ww_w.nr, 1, wwnrow,
27 &currow, &minrow, &maxrow);
28 getminmax(col, w->ww_w.nc, 0, wwncol,
29 &curcol, &mincol, &maxcol);
30 wwsetcursor(currow, curcol);
8fa6d94c
EW
31 while (wwpeekc() < 0)
32 wwiomux();
19f9784c 33 switch (getpos(&row, &col, minrow, mincol, maxrow, maxcol)) {
eb52ebfc
EW
34 case 3:
35 wwunbox(boxwin);
8baf70f5 36 wwdelete(boxwin);
8baf70f5 37 return;
eb52ebfc
EW
38 case 2:
39 wwunbox(boxwin);
8baf70f5 40 break;
eb52ebfc
EW
41 case 1:
42 wwunbox(boxwin);
8baf70f5
EW
43 case 0:
44 continue;
45 }
46 break;
47 }
48 wwdelete(boxwin);
49 if (!terse)
bf3b96e9 50 wwputc('\n', cmdwin);
8baf70f5 51 wwcurtowin(cmdwin);
f176f953
EW
52 movewin(w, row, col);
53}
54
55movewin(w, row, col)
56register struct ww *w;
57{
58 struct ww *back = w->ww_back;
59
b27a9cfb
EW
60 w->ww_alt.t = w->ww_w.t;
61 w->ww_alt.l = w->ww_w.l;
8baf70f5 62 wwdelete(w);
19f9784c 63 wwmove(w, row, col);
8baf70f5
EW
64 wwadd(w, back);
65 reframe();
66}
19f9784c
EW
67
68/*
69 * Weird stufff, don't ask.
70 */
71getminmax(x, n, a, b, curx, minx, maxx)
72register x, n, a, b;
73int *curx, *minx, *maxx;
74{
f2a77fe1 75 if (x < 0)
19f9784c 76 *curx = x + n - 1;
f2a77fe1 77 else
19f9784c 78 *curx = x;
f2a77fe1
EW
79
80 if (x <= a)
19f9784c 81 *minx = 1 - n;
f2a77fe1 82 else if (x <= b - n)
19f9784c 83 *minx = a;
f2a77fe1 84 else
19f9784c 85 *minx = b - n;
f2a77fe1
EW
86
87 if (x >= b - n)
19f9784c 88 *maxx = b - 1;
f2a77fe1
EW
89 else if (x >= a)
90 *maxx = b - n;
91 else
92 *maxx = a;
19f9784c 93}