Commit | Line | Data |
---|---|---|
0fae0eb5 | 1 | #ifndef lint |
60de5df9 | 2 | static 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 |
17 | c_move(w) |
18 | register 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 | ||
61 | movewin(w, row, col) | |
62 | register 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 | */ | |
77 | getminmax(x, n, a, b, curx, minx, maxx) | |
78 | register x, n, a, b; | |
79 | int *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 | } |