Commit | Line | Data |
---|---|---|
0fae0eb5 | 1 | #ifndef lint |
f2a77fe1 | 2 | static 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 | */ | |
10 | c_move(w) | |
11 | register 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 | */ | |
58 | getminmax(x, n, a, b, curx, minx, maxx) | |
59 | register x, n, a, b; | |
60 | int *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 | } |