Commit | Line | Data |
---|---|---|
0fae0eb5 | 1 | #ifndef lint |
7edc52ec | 2 | static char sccsid[] = "@(#)cmd5.c 3.12 %G%"; |
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); | |
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 | ||
53 | movewin(w, row, col) | |
54 | register 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 | */ | |
69 | getminmax(x, n, a, b, curx, minx, maxx) | |
70 | register x, n, a, b; | |
71 | int *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 | } |