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