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