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