new options to "window": shell, pty, frame
[unix-history] / usr / src / usr.bin / window / cmd5.c
CommitLineData
0fae0eb5 1#ifndef lint
bf3b96e9 2static char *sccsid = "@(#)cmd5.c 3.11 84/04/08";
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
EW
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);
8fa6d94c
EW
29 while (wwpeekc() < 0)
30 wwiomux();
19f9784c 31 switch (getpos(&row, &col, minrow, mincol, maxrow, maxcol)) {
eb52ebfc
EW
32 case 3:
33 wwunbox(boxwin);
8baf70f5 34 wwdelete(boxwin);
8baf70f5 35 return;
eb52ebfc
EW
36 case 2:
37 wwunbox(boxwin);
8baf70f5 38 break;
eb52ebfc
EW
39 case 1:
40 wwunbox(boxwin);
8baf70f5
EW
41 case 0:
42 continue;
43 }
44 break;
45 }
46 wwdelete(boxwin);
47 if (!terse)
bf3b96e9 48 wwputc('\n', cmdwin);
8baf70f5 49 wwcurtowin(cmdwin);
f176f953
EW
50 movewin(w, row, col);
51}
52
53movewin(w, row, col)
54register struct ww *w;
55{
56 struct ww *back = w->ww_back;
57
58 w->ww_altpos.r = w->ww_w.t;
59 w->ww_altpos.c = w->ww_w.l;
8baf70f5 60 wwdelete(w);
19f9784c 61 wwmove(w, row, col);
8baf70f5
EW
62 wwadd(w, back);
63 reframe();
64}
19f9784c
EW
65
66/*
67 * Weird stufff, don't ask.
68 */
69getminmax(x, n, a, b, curx, minx, maxx)
70register x, n, a, b;
71int *curx, *minx, *maxx;
72{
f2a77fe1 73 if (x < 0)
19f9784c 74 *curx = x + n - 1;
f2a77fe1 75 else
19f9784c 76 *curx = x;
f2a77fe1
EW
77
78 if (x <= a)
19f9784c 79 *minx = 1 - n;
f2a77fe1 80 else if (x <= b - n)
19f9784c 81 *minx = a;
f2a77fe1 82 else
19f9784c 83 *minx = b - n;
f2a77fe1
EW
84
85 if (x >= b - n)
19f9784c 86 *maxx = b - 1;
f2a77fe1
EW
87 else if (x >= a)
88 *maxx = b - n;
89 else
90 *maxx = a;
19f9784c 91}