fts_statb -> fts_statp
[unix-history] / usr / src / usr.bin / window / cmd1.c
CommitLineData
60de5df9 1/*
46e9ea25
KB
2 * Copyright (c) 1983 Regents of the University of California.
3 * All rights reserved.
4 *
3dd3a9e5
KB
5 * This code is derived from software contributed to Berkeley by
6 * Edward Wang at The University of California, Berkeley.
7 *
87f529ec 8 * %sccs.include.redist.c%
60de5df9
EW
9 */
10
46e9ea25 11#ifndef lint
3dd3a9e5 12static char sccsid[] = "@(#)cmd1.c 3.36 (Berkeley) %G%";
46e9ea25
KB
13#endif /* not lint */
14
827ef1a8 15#include "defs.h"
0e64e422 16#include "char.h"
827ef1a8 17
bb05dfb5 18c_window()
827ef1a8
EW
19{
20 int col, row, xcol, xrow;
827ef1a8 21 int id;
827ef1a8 22
03e75950 23 if ((id = findid()) < 0)
827ef1a8 24 return;
101acab4 25 if (!terse)
dbf7630d 26 wwputs("New window (upper left corner): ", cmdwin);
827ef1a8
EW
27 col = 0;
28 row = 1;
43c1dd56 29 wwadd(boxwin, framewin->ww_back);
827ef1a8 30 for (;;) {
43c1dd56 31 wwbox(boxwin, row - 1, col - 1, 3, 3);
827ef1a8 32 wwsetcursor(row, col);
8fa6d94c
EW
33 while (wwpeekc() < 0)
34 wwiomux();
a204c1d8
EW
35 switch (getpos(&row, &col, row > 1, 0,
36 wwnrow - 1, wwncol - 1)) {
eb52ebfc
EW
37 case 3:
38 wwunbox(boxwin);
43c1dd56 39 wwdelete(boxwin);
b4be6cd6 40 return;
eb52ebfc
EW
41 case 2:
42 wwunbox(boxwin);
827ef1a8 43 break;
eb52ebfc
EW
44 case 1:
45 wwunbox(boxwin);
827ef1a8
EW
46 case 0:
47 continue;
48 }
49 break;
50 }
101acab4 51 if (!terse)
dbf7630d 52 wwputs("\nNew window (lower right corner): ", cmdwin);
bb05dfb5
EW
53 xcol = col;
54 xrow = row;
827ef1a8 55 for (;;) {
43c1dd56
EW
56 wwbox(boxwin, row - 1, col - 1,
57 xrow - row + 3, xcol - col + 3);
827ef1a8 58 wwsetcursor(xrow, xcol);
8fa6d94c
EW
59 while (wwpeekc() < 0)
60 wwiomux();
8baf70f5
EW
61 switch (getpos(&xrow, &xcol, row, col, wwnrow - 1, wwncol - 1))
62 {
eb52ebfc
EW
63 case 3:
64 wwunbox(boxwin);
43c1dd56 65 wwdelete(boxwin);
b4be6cd6 66 return;
eb52ebfc
EW
67 case 2:
68 wwunbox(boxwin);
827ef1a8 69 break;
eb52ebfc
EW
70 case 1:
71 wwunbox(boxwin);
827ef1a8
EW
72 case 0:
73 continue;
74 }
75 break;
76 }
43c1dd56 77 wwdelete(boxwin);
101acab4 78 if (!terse)
bf3b96e9 79 wwputc('\n', cmdwin);
bb05dfb5 80 wwcurtowin(cmdwin);
6a1ef78a
EW
81 (void) openwin(id, row, col, xrow-row+1, xcol-col+1, default_nline,
82 (char *) 0, 1, 1, default_shellfile, default_shell);
8c4fb896
EW
83}
84
8baf70f5
EW
85getpos(row, col, minrow, mincol, maxrow, maxcol)
86register int *row, *col;
87int minrow, mincol;
88int maxrow, maxcol;
827ef1a8 89{
961dd7d0 90 static int scount;
827ef1a8
EW
91 int count;
92 char c;
eb52ebfc 93 int oldrow = *row, oldcol = *col;
827ef1a8 94
8fa6d94c 95 while ((c = wwgetc()) >= 0) {
827ef1a8
EW
96 switch (c) {
97 case '0': case '1': case '2': case '3': case '4':
98 case '5': case '6': case '7': case '8': case '9':
99 scount = scount * 10 + c - '0';
100 continue;
101 }
102 count = scount ? scount : 1;
103 scount = 0;
104 switch (c) {
105 case 'h':
106 if ((*col -= count) < mincol)
107 *col = mincol;
108 break;
109 case 'H':
110 *col = mincol;
111 break;
112 case 'l':
8baf70f5
EW
113 if ((*col += count) > maxcol)
114 *col = maxcol;
827ef1a8
EW
115 break;
116 case 'L':
8baf70f5 117 *col = maxcol;
827ef1a8
EW
118 break;
119 case 'j':
8baf70f5
EW
120 if ((*row += count) > maxrow)
121 *row = maxrow;
827ef1a8
EW
122 break;
123 case 'J':
8baf70f5 124 *row = maxrow;
827ef1a8
EW
125 break;
126 case 'k':
127 if ((*row -= count) < minrow)
128 *row = minrow;
129 break;
130 case 'K':
131 *row = minrow;
132 break;
95bc282c 133 case ctrl('['):
eb52ebfc 134 if (!terse)
cfdab788 135 wwputs("\nCancelled. ", cmdwin);
eb52ebfc 136 return 3;
827ef1a8 137 case '\r':
eb52ebfc 138 return 2;
827ef1a8 139 default:
101acab4 140 if (!terse)
bf3b96e9 141 wwputs("\nType [hjklHJKL] to move, return to enter position, escape to cancel.", cmdwin);
7ecf4dca 142 wwbell();
827ef1a8
EW
143 }
144 }
eb52ebfc 145 return oldrow != *row || oldcol != *col;
827ef1a8 146}