front() must reframe() when called from setselwin()
[unix-history] / usr / src / usr.bin / window / cmd2.c
CommitLineData
708ccf0a 1#ifndef lint
a200c620 2static char *sccsid = "@(#)cmd2.c 3.15 83/12/02";
708ccf0a
EW
3#endif
4
5#include "defs.h"
6
bb05dfb5 7c_help()
708ccf0a
EW
8{
9 register struct ww *w;
10
39b7960d 11 if ((w = openiwin(wwnrow - 3, "Help")) == 0) {
03e75950 12 error("Can't open help window: %s.", wwerror());
708ccf0a 13 return;
8c4fb896 14 }
81cffcd0 15 (void) wwprintf(w, "The escape character is %s, which gets you into command mode.\n\n",
101acab4 16 unctrl(escapec));
81cffcd0
EW
17 (void) wwprintf(w, "Short commands:\n\n");
18 (void) wwprintf(w, "{1-9} Select window {1-9} and return to conversation mode.\n");
0fb8ce9c
EW
19 (void) wwprintf(w, "%%{1-9} Select window {1-9} but stay in command mode.\n");
20 (void) wwprintf(w, "escape Return to conversation mode and don't change the current window.\n");
81cffcd0
EW
21 (void) wwprintf(w, "c{1-9} Close window {1-9}.\n");
22 (void) wwprintf(w, "C Close all windows.\n");
23 (void) wwprintf(w, "S Show all windows in sequence.\n");
24 (void) wwprintf(w, "L List all windows with their labels.\n");
25 (void) wwprintf(w, "w Open a new window.\n");
0fb8ce9c
EW
26 (void) wwprintf(w, "{^Y^E} Scroll {up, down} one line\n");
27 (void) wwprintf(w, "{^U^D} Scroll {up, down} half a window.\n");
28 (void) wwprintf(w, "{^B^F} Scroll {up, down} a full window.\n");
29 (void) wwprintf(w, "{hjkl} Move cursor {left, down, up, right}.\n");
81cffcd0
EW
30 (void) wwprintf(w, "^L Redraw screen.\n");
31 (void) wwprintf(w, "^Z Suspend.\n");
0fb8ce9c 32 (void) wwprintf(w, "q Quit.\n");
b4be6cd6 33 waitnl(w);
81cffcd0 34 (void) wwprintf(w, "Long commands:\n\n");
2c5a08ad
EW
35 (void) wwprintf(w, ":terse [off] Turn on (or off) terse mode.\n");
36 (void) wwprintf(w, ":label {1-9} string Label window {1-9}.\n");
37 (void) wwprintf(w, ":write {1-9} string Write ``strings'' to window {1-9}.\n");
38 (void) wwprintf(w, ":escape C Set escape character to C.\n");
39 (void) wwprintf(w, ":%%{1-9} Select window {1-9}.\n");
40 (void) wwprintf(w, ":window r c nr nc [nl] Open a window at row r column c\n");
41 (void) wwprintf(w, " with nr rows, nc colomns,\n");
42 (void) wwprintf(w, " and nl lines in the buffer.\n");
43 (void) wwprintf(w, ":buffer lines Set the default window buffer size.\n");
44 (void) wwprintf(w, ":close {1-9} Close window.\n");
45 (void) wwprintf(w, ":source filename Execute commands in ``filename''.\n");
101acab4 46 waitnl(w);
bb05dfb5 47 closeiwin(w);
708ccf0a
EW
48}
49
57fc9db6 50#ifndef O_4_1A
bb05dfb5
EW
51char *strtime();
52
53c_time(flag)
708ccf0a
EW
54{
55 register struct ww *w;
56 struct rusage rusage;
57 struct timeval timeval;
bb05dfb5 58 struct timezone timezone;
708ccf0a 59
bb05dfb5 60 if ((w = openiwin(6, "Timing and Resource Usage")) == 0) {
03e75950 61 error("Can't open time window: %s.", wwerror());
708ccf0a 62 return;
8c4fb896 63 }
708ccf0a 64
bb05dfb5 65 (void) gettimeofday(&timeval, &timezone);
708ccf0a
EW
66 timeval.tv_sec -= starttime.tv_sec;
67 if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
68 timeval.tv_sec--;
69 timeval.tv_usec += 1000000;
70 }
bb05dfb5 71 (void) getrusage(flag, &rusage);
708ccf0a 72
81cffcd0 73 (void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n");
bb05dfb5
EW
74 (void) wwprintf(w, "%-16s", strtime(&timeval));
75 (void) wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
76 (void) wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
81cffcd0 77 (void) wwprintf(w, "%D\t%D\t%D\t%D\n",
708ccf0a
EW
78 rusage.ru_maxrss, rusage.ru_ixrss,
79 rusage.ru_idrss, rusage.ru_isrss);
81cffcd0
EW
80 (void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n");
81 (void) wwprintf(w, "%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\n",
708ccf0a
EW
82 rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
83 rusage.ru_inblock, rusage.ru_oublock,
84 rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
85 rusage.ru_nvcsw, rusage.ru_nivcsw);
86
b4be6cd6 87 waitnl(w);
bb05dfb5 88 closeiwin(w);
708ccf0a
EW
89}
90
91char *
92strtime(t)
93register struct timeval *t;
94{
95 char fill = 0;
96 static char buf[20];
97 register char *p = buf;
98
99 if (t->tv_sec > 60*60) {
bb05dfb5 100 (void) sprintf(p, "%D:", t->tv_sec / (60*60));
708ccf0a
EW
101 while (*p++)
102 ;
103 p--;
104 t->tv_sec %= 60*60;
105 fill++;
106 }
107 if (t->tv_sec > 60) {
bb05dfb5 108 (void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
708ccf0a
EW
109 while (*p++)
110 ;
111 p--;
112 t->tv_sec %= 60;
113 fill++;
114 }
bb05dfb5 115 (void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
708ccf0a
EW
116 t->tv_sec, t->tv_usec / 10000);
117 return buf;
118}
57fc9db6 119#endif
708ccf0a 120
bb05dfb5 121c_stat()
c417b691
EW
122{
123 register struct ww *w;
124
04d70db4 125 if ((w = openiwin(6, "IO Statics")) == 0) {
03e75950 126 error("Can't open statistics window: %s.", wwerror());
c417b691
EW
127 return;
128 }
04d70db4
EW
129 (void) wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\n");
130 (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\n",
131 nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec);
132 (void) wwprintf(w, "nupdate\tnupdlin\tnupdmis\tnmajlin\tnmajmis\n");
133 (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\n",
134 wwnupdate, wwnupdline, wwnupdmiss, wwnmajline, wwnmajmiss);
c417b691 135 waitnl(w);
bb05dfb5 136 closeiwin(w);
c417b691
EW
137}
138
bb05dfb5 139c_list()
101acab4 140{
86845af3 141 register struct ww *w, *wp;
bb05dfb5
EW
142 register i;
143 int n;
144
145 for (n = 0, i = 0; i < NWINDOW; i++)
146 if (window[i] != 0)
147 n++;
86845af3 148 if ((w = openiwin(MAX(n, 1) + 2, "Windows")) == 0) {
03e75950 149 error("Can't open listing window: %s.", wwerror());
101acab4
EW
150 return;
151 }
bb05dfb5 152 if (n == 0) {
81cffcd0 153 (void) wwputs("No windows.\n", w);
bb05dfb5
EW
154 } else {
155 for (i = 0; i < NWINDOW; i++) {
86845af3 156 if ((wp = window[i]) == 0)
bb05dfb5 157 continue;
86845af3
EW
158 (void) wwprintf(w, "%c %c %-13s %-.*s\n",
159 wp == selwin ? '*' : ' ',
0fb8ce9c 160 i + '1',
86845af3
EW
161 wp->ww_state == WWS_HASPROC
162 ? "" : "(No process)",
163 wwncol - 20,
164 wp->ww_label
165 ? wp->ww_label : "(No label)");
bb05dfb5 166 }
101acab4 167 }
101acab4 168 waitnl(w);
bb05dfb5 169 closeiwin(w);
101acab4
EW
170}
171
bb05dfb5 172c_quit()
8c4fb896 173{
101acab4 174 if (terse)
bb05dfb5
EW
175 wwadd(cmdwin, &wwhead);
176 (void) wwputs("Really quit [yn]? ", cmdwin);
177 wwcurtowin(cmdwin);
8c4fb896
EW
178 while (bpeekc() < 0)
179 bread();
180 if (bgetc() == 'y') {
bb05dfb5 181 (void) wwputs("Yes", cmdwin);
8c4fb896
EW
182 quit++;
183 } else
bb05dfb5
EW
184 (void) wwputs("\r\n", cmdwin);
185 if (terse && !quit)
186 wwdelete(cmdwin);
8c4fb896
EW
187}
188
bb05dfb5
EW
189/*
190 * Open an information window.
191 */
708ccf0a 192struct ww *
bb05dfb5 193openiwin(nrow, label)
708ccf0a
EW
194char *label;
195{
196 register struct ww *w;
197
bb05dfb5 198 if ((w = wwopen(0, nrow, wwncol, 2, 0, 0)) == 0)
708ccf0a 199 return 0;
bb05dfb5 200 w->ww_mapnl = 1;
bb05dfb5
EW
201 w->ww_hasframe = 1;
202 w->ww_id = -1;
203 w->ww_center = 1;
204 (void) setlabel(w, label);
205 wwadd(w, framewin);
206 reframe();
708ccf0a
EW
207 return w;
208}
209
b4be6cd6 210waitnl(w)
708ccf0a
EW
211register struct ww *w;
212{
a200c620 213 front(w, 0);
81cffcd0 214 (void) wwputs("\nType return to continue: ", w);
bb05dfb5 215 wwcurtowin(w);
b4be6cd6 216 while (bgetc() < 0)
708ccf0a 217 bread();
bb05dfb5 218 (void) wwputs("\033E", w); /* clear and home cursor */
b4be6cd6
EW
219}
220
bb05dfb5
EW
221closeiwin(w)
222struct ww *w;
b4be6cd6 223{
bb05dfb5
EW
224 closewin(w);
225 reframe();
708ccf0a 226}