Commit | Line | Data |
---|---|---|
827ef1a8 | 1 | #ifndef lint |
dbf7630d | 2 | static char sccsid[] = "@(#)cmd1.c 3.28 %G%"; |
827ef1a8 EW |
3 | #endif |
4 | ||
5 | #include "defs.h" | |
0e64e422 | 6 | #include "char.h" |
827ef1a8 | 7 | |
bb05dfb5 | 8 | c_window() |
827ef1a8 EW |
9 | { |
10 | int col, row, xcol, xrow; | |
827ef1a8 | 11 | int id; |
827ef1a8 | 12 | |
03e75950 | 13 | if ((id = findid()) < 0) |
827ef1a8 | 14 | return; |
101acab4 | 15 | if (!terse) |
dbf7630d | 16 | wwputs("New window (upper left corner): ", cmdwin); |
827ef1a8 EW |
17 | col = 0; |
18 | row = 1; | |
43c1dd56 | 19 | wwadd(boxwin, framewin->ww_back); |
827ef1a8 | 20 | for (;;) { |
43c1dd56 | 21 | wwbox(boxwin, row - 1, col - 1, 3, 3); |
827ef1a8 | 22 | wwsetcursor(row, col); |
8fa6d94c EW |
23 | while (wwpeekc() < 0) |
24 | wwiomux(); | |
a204c1d8 EW |
25 | switch (getpos(&row, &col, row > 1, 0, |
26 | wwnrow - 1, wwncol - 1)) { | |
eb52ebfc EW |
27 | case 3: |
28 | wwunbox(boxwin); | |
43c1dd56 | 29 | wwdelete(boxwin); |
b4be6cd6 | 30 | return; |
eb52ebfc EW |
31 | case 2: |
32 | wwunbox(boxwin); | |
827ef1a8 | 33 | break; |
eb52ebfc EW |
34 | case 1: |
35 | wwunbox(boxwin); | |
827ef1a8 EW |
36 | case 0: |
37 | continue; | |
38 | } | |
39 | break; | |
40 | } | |
101acab4 | 41 | if (!terse) |
dbf7630d | 42 | wwputs("\nNew window (lower right corner): ", cmdwin); |
bb05dfb5 EW |
43 | xcol = col; |
44 | xrow = row; | |
827ef1a8 | 45 | for (;;) { |
43c1dd56 EW |
46 | wwbox(boxwin, row - 1, col - 1, |
47 | xrow - row + 3, xcol - col + 3); | |
827ef1a8 EW |
48 | wwsetcursor(xrow, xcol); |
49 | wwflush(); | |
8fa6d94c EW |
50 | while (wwpeekc() < 0) |
51 | wwiomux(); | |
8baf70f5 EW |
52 | switch (getpos(&xrow, &xcol, row, col, wwnrow - 1, wwncol - 1)) |
53 | { | |
eb52ebfc EW |
54 | case 3: |
55 | wwunbox(boxwin); | |
43c1dd56 | 56 | wwdelete(boxwin); |
b4be6cd6 | 57 | return; |
eb52ebfc EW |
58 | case 2: |
59 | wwunbox(boxwin); | |
827ef1a8 | 60 | break; |
eb52ebfc EW |
61 | case 1: |
62 | wwunbox(boxwin); | |
827ef1a8 EW |
63 | case 0: |
64 | continue; | |
65 | } | |
66 | break; | |
67 | } | |
43c1dd56 | 68 | wwdelete(boxwin); |
101acab4 | 69 | if (!terse) |
bf3b96e9 | 70 | wwputc('\n', cmdwin); |
bb05dfb5 | 71 | wwcurtowin(cmdwin); |
74bf1c32 | 72 | (void) openwin(id, row, col, xrow-row+1, xcol-col+1, nbufline, |
7ecf4dca | 73 | (char *) 0, 1, 1, shellfile, shell); |
8c4fb896 EW |
74 | } |
75 | ||
8baf70f5 EW |
76 | getpos(row, col, minrow, mincol, maxrow, maxcol) |
77 | register int *row, *col; | |
78 | int minrow, mincol; | |
79 | int maxrow, maxcol; | |
827ef1a8 | 80 | { |
961dd7d0 | 81 | static int scount; |
827ef1a8 EW |
82 | int count; |
83 | char c; | |
eb52ebfc | 84 | int oldrow = *row, oldcol = *col; |
827ef1a8 | 85 | |
8fa6d94c | 86 | while ((c = wwgetc()) >= 0) { |
827ef1a8 EW |
87 | switch (c) { |
88 | case '0': case '1': case '2': case '3': case '4': | |
89 | case '5': case '6': case '7': case '8': case '9': | |
90 | scount = scount * 10 + c - '0'; | |
91 | continue; | |
92 | } | |
93 | count = scount ? scount : 1; | |
94 | scount = 0; | |
95 | switch (c) { | |
96 | case 'h': | |
97 | if ((*col -= count) < mincol) | |
98 | *col = mincol; | |
99 | break; | |
100 | case 'H': | |
101 | *col = mincol; | |
102 | break; | |
103 | case 'l': | |
8baf70f5 EW |
104 | if ((*col += count) > maxcol) |
105 | *col = maxcol; | |
827ef1a8 EW |
106 | break; |
107 | case 'L': | |
8baf70f5 | 108 | *col = maxcol; |
827ef1a8 EW |
109 | break; |
110 | case 'j': | |
8baf70f5 EW |
111 | if ((*row += count) > maxrow) |
112 | *row = maxrow; | |
827ef1a8 EW |
113 | break; |
114 | case 'J': | |
8baf70f5 | 115 | *row = maxrow; |
827ef1a8 EW |
116 | break; |
117 | case 'k': | |
118 | if ((*row -= count) < minrow) | |
119 | *row = minrow; | |
120 | break; | |
121 | case 'K': | |
122 | *row = minrow; | |
123 | break; | |
0e64e422 | 124 | case ctrl([): |
eb52ebfc | 125 | if (!terse) |
cc7b6f9b | 126 | wwputs("\nCanceled. ", cmdwin); |
eb52ebfc | 127 | return 3; |
827ef1a8 | 128 | case '\r': |
eb52ebfc | 129 | return 2; |
827ef1a8 | 130 | default: |
101acab4 | 131 | if (!terse) |
bf3b96e9 | 132 | wwputs("\nType [hjklHJKL] to move, return to enter position, escape to cancel.", cmdwin); |
7ecf4dca | 133 | wwbell(); |
827ef1a8 EW |
134 | } |
135 | } | |
eb52ebfc | 136 | return oldrow != *row || oldcol != *col; |
827ef1a8 | 137 | } |