Commit | Line | Data |
---|---|---|
0fae0eb5 | 1 | #ifndef lint |
f176f953 | 2 | static char *sccsid = "@(#)cmd5.c 3.7 83/09/15"; |
0fae0eb5 | 3 | #endif |
8baf70f5 EW |
4 | |
5 | #include "defs.h" | |
6 | ||
7 | /* | |
8 | * Window movement. | |
9 | */ | |
f176f953 | 10 | |
8baf70f5 EW |
11 | c_move(w) |
12 | register 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); | |
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); | |
f176f953 EW |
49 | movewin(w, row, col); |
50 | } | |
51 | ||
52 | movewin(w, row, col) | |
53 | register struct ww *w; | |
54 | { | |
55 | struct ww *back = w->ww_back; | |
56 | ||
57 | w->ww_altpos.r = w->ww_w.t; | |
58 | w->ww_altpos.c = w->ww_w.l; | |
8baf70f5 | 59 | wwdelete(w); |
19f9784c | 60 | wwmove(w, row, col); |
8baf70f5 EW |
61 | wwadd(w, back); |
62 | reframe(); | |
63 | } | |
19f9784c EW |
64 | |
65 | /* | |
66 | * Weird stufff, don't ask. | |
67 | */ | |
68 | getminmax(x, n, a, b, curx, minx, maxx) | |
69 | register x, n, a, b; | |
70 | int *curx, *minx, *maxx; | |
71 | { | |
f2a77fe1 | 72 | if (x < 0) |
19f9784c | 73 | *curx = x + n - 1; |
f2a77fe1 | 74 | else |
19f9784c | 75 | *curx = x; |
f2a77fe1 EW |
76 | |
77 | if (x <= a) | |
19f9784c | 78 | *minx = 1 - n; |
f2a77fe1 | 79 | else if (x <= b - n) |
19f9784c | 80 | *minx = a; |
f2a77fe1 | 81 | else |
19f9784c | 82 | *minx = b - n; |
f2a77fe1 EW |
83 | |
84 | if (x >= b - n) | |
19f9784c | 85 | *maxx = b - 1; |
f2a77fe1 EW |
86 | else if (x >= a) |
87 | *maxx = b - n; | |
88 | else | |
89 | *maxx = a; | |
19f9784c | 90 | } |