|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)cmd5.c 3.16 (Berkeley) 6/29/88";
20: #endif /* not lint */
21:
22: #include "defs.h"
23:
24: /*
25: * Window movement.
26: */
27:
28: c_move(w)
29: register struct ww *w;
30: {
31: int col, row;
32: int mincol, minrow;
33: int maxcol, maxrow;
34: int curcol, currow;
35:
36: if (!terse)
37: wwputs("New window position: ", cmdwin);
38: col = w->ww_w.l;
39: row = w->ww_w.t;
40: wwadd(boxwin, framewin->ww_back);
41: for (;;) {
42: wwbox(boxwin, row - 1, col - 1, w->ww_w.nr + 2, w->ww_w.nc + 2);
43: getminmax(row, w->ww_w.nr, 1, wwnrow,
44: &currow, &minrow, &maxrow);
45: getminmax(col, w->ww_w.nc, 0, wwncol,
46: &curcol, &mincol, &maxcol);
47: wwsetcursor(currow, curcol);
48: while (wwpeekc() < 0)
49: wwiomux();
50: switch (getpos(&row, &col, minrow, mincol, maxrow, maxcol)) {
51: case 3:
52: wwunbox(boxwin);
53: wwdelete(boxwin);
54: return;
55: case 2:
56: wwunbox(boxwin);
57: break;
58: case 1:
59: wwunbox(boxwin);
60: case 0:
61: continue;
62: }
63: break;
64: }
65: wwdelete(boxwin);
66: if (!terse)
67: wwputc('\n', cmdwin);
68: wwcurtowin(cmdwin);
69: movewin(w, row, col);
70: }
71:
72: movewin(w, row, col)
73: register struct ww *w;
74: {
75: struct ww *back = w->ww_back;
76:
77: w->ww_alt.t = w->ww_w.t;
78: w->ww_alt.l = w->ww_w.l;
79: wwdelete(w);
80: wwmove(w, row, col);
81: wwadd(w, back);
82: reframe();
83: }
84:
85: /*
86: * Weird stufff, don't ask.
87: */
88: getminmax(x, n, a, b, curx, minx, maxx)
89: register x, n, a, b;
90: int *curx, *minx, *maxx;
91: {
92: if (x < 0)
93: *curx = x + n - 1;
94: else
95: *curx = x;
96:
97: if (x <= a)
98: *minx = 1 - n;
99: else if (x <= b - n)
100: *minx = a;
101: else
102: *minx = b - n;
103:
104: if (x >= b - n)
105: *maxx = b - 1;
106: else if (x >= a)
107: *maxx = b - n;
108: else
109: *maxx = a;
110: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.