date and time created 85/04/11 16:55:44 by miriam
[unix-history] / usr / src / usr.bin / window / cmd1.c
CommitLineData
827ef1a8 1#ifndef lint
dbf7630d 2static char sccsid[] = "@(#)cmd1.c 3.28 %G%";
827ef1a8
EW
3#endif
4
5#include "defs.h"
0e64e422 6#include "char.h"
827ef1a8 7
bb05dfb5 8c_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
76getpos(row, col, minrow, mincol, maxrow, maxcol)
77register int *row, *col;
78int minrow, mincol;
79int 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}