debug off
[unix-history] / usr / src / usr.bin / window / cmd2.c
CommitLineData
708ccf0a 1#ifndef lint
b1189050 2static char *sccsid = "@(#)cmd2.c 3.23 84/03/03";
708ccf0a
EW
3#endif
4
5#include "defs.h"
6
d4001d43
EW
7char *help_shortcmd[] = {
8 "{1-9} Select window {1-9} and return to conversation mode.",
9 "%{1-9} Select window {1-9} but stay in command mode.",
10 "escape Return to conversation mode",
11 " and don't change the current window.",
12 "^^ Return to conversation mode",
13 " and change to previously selected window.",
14 "c{1-9} Close window {1-9}.",
15 "C Close all windows.",
16 "S Show all windows in sequence.",
17 "L List all windows with their labels.",
18 "w Open a new window.",
19 "m{1-9} Move window {1-9}.",
20 "M{1-9} Move window {1-9} to previous position.",
21 "v List all variables.",
22 "{^Y^E} Scroll {up, down} one line",
23 "{^U^D} Scroll {up, down} half a window.",
24 "{^B^F} Scroll {up, down} a full window.",
25 "{hjkl} Move cursor {left, down, up, right}.",
26 "^L Redraw screen.",
27 "^Z Suspend.",
28 "q Quit.",
29 0
30};
31char *help_longcmd[] = {
32 ":%{1-9} Select window {1-9}.",
33 ":buffer lines Set the default window buffer size.",
34 ":close {1-9} Close window.",
35 ":cursor modes Set the cursor modes.",
36 ":escape C Set escape character to C.",
37 ":label {1-9} string Label window {1-9}.",
38 ":source filename Execute commands in ``filename''.",
39 ":terse [off] Turn on (or off) terse mode.",
2a3029ae 40 ":unset variable Deallocate ``variable''.",
d4001d43
EW
41 ":window row col nrow ncol [nline label]",
42 " Open a window at ``row'', ``col''",
43 " of size ``nrow'', ``ncol'',",
44 " with ``nline'', and ``label''.",
45 ":write {1-9} string Write ``string'' to window {1-9}.",
46 0
47};
48
bb05dfb5 49c_help()
708ccf0a
EW
50{
51 register struct ww *w;
52
39b7960d 53 if ((w = openiwin(wwnrow - 3, "Help")) == 0) {
03e75950 54 error("Can't open help window: %s.", wwerror());
708ccf0a 55 return;
8c4fb896 56 }
b1189050 57 wwprintf(w, "The escape character is %s, which gets you into command mode.\n\n",
101acab4 58 unctrl(escapec));
4a972f7c
EW
59 if (help_print(w, "Short commands", help_shortcmd) >= 0)
60 (void) help_print(w, "Long commands", help_longcmd);
bb05dfb5 61 closeiwin(w);
708ccf0a
EW
62}
63
d4001d43
EW
64help_print(w, name, list)
65register struct ww *w;
66char *name;
4a972f7c 67register char **list;
d4001d43 68{
b1189050 69 wwprintf(w, "%s:\n\n", name);
4a972f7c
EW
70 while (*list)
71 switch (more(w, 0)) {
72 case 0:
b1189050
EW
73 wwputs(*list++, w);
74 wwputc('\n', w);
4a972f7c
EW
75 break;
76 case 1:
b1189050 77 wwprintf(w, "%s: (continued)\n\n", name);
4a972f7c
EW
78 break;
79 case 2:
80 return -1;
d4001d43 81 }
4a972f7c 82 return more(w, 1) == 2 ? -1 : 0;
d4001d43
EW
83}
84
57fc9db6 85#ifndef O_4_1A
bb05dfb5
EW
86char *strtime();
87
88c_time(flag)
708ccf0a
EW
89{
90 register struct ww *w;
91 struct rusage rusage;
92 struct timeval timeval;
93
bb05dfb5 94 if ((w = openiwin(6, "Timing and Resource Usage")) == 0) {
03e75950 95 error("Can't open time window: %s.", wwerror());
708ccf0a 96 return;
8c4fb896 97 }
708ccf0a 98
b1189050 99 (void) gettimeofday(&timeval, (struct timezone *)0);
708ccf0a
EW
100 timeval.tv_sec -= starttime.tv_sec;
101 if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
102 timeval.tv_sec--;
103 timeval.tv_usec += 1000000;
104 }
bb05dfb5 105 (void) getrusage(flag, &rusage);
708ccf0a 106
b1189050
EW
107 wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n");
108 wwprintf(w, "%-16s", strtime(&timeval));
109 wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
110 wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
111 wwprintf(w, "%D\t%D\t%D\t%D\n",
708ccf0a
EW
112 rusage.ru_maxrss, rusage.ru_ixrss,
113 rusage.ru_idrss, rusage.ru_isrss);
b1189050
EW
114 wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n");
115 wwprintf(w, "%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\n",
708ccf0a
EW
116 rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
117 rusage.ru_inblock, rusage.ru_oublock,
118 rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
119 rusage.ru_nvcsw, rusage.ru_nivcsw);
120
b4be6cd6 121 waitnl(w);
bb05dfb5 122 closeiwin(w);
708ccf0a
EW
123}
124
125char *
126strtime(t)
127register struct timeval *t;
128{
129 char fill = 0;
130 static char buf[20];
131 register char *p = buf;
132
133 if (t->tv_sec > 60*60) {
bb05dfb5 134 (void) sprintf(p, "%D:", t->tv_sec / (60*60));
708ccf0a
EW
135 while (*p++)
136 ;
137 p--;
138 t->tv_sec %= 60*60;
139 fill++;
140 }
141 if (t->tv_sec > 60) {
bb05dfb5 142 (void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
708ccf0a
EW
143 while (*p++)
144 ;
145 p--;
146 t->tv_sec %= 60;
147 fill++;
148 }
bb05dfb5 149 (void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
708ccf0a
EW
150 t->tv_sec, t->tv_usec / 10000);
151 return buf;
152}
57fc9db6 153#endif
708ccf0a 154
bb05dfb5 155c_stat()
c417b691
EW
156{
157 register struct ww *w;
158
b1189050 159 if ((w = openiwin(14, "IO Statistics")) == 0) {
03e75950 160 error("Can't open statistics window: %s.", wwerror());
c417b691
EW
161 return;
162 }
b1189050
EW
163 wwprintf(w, "ttflush\twrite\terror\tzero\tchar\n");
164 wwprintf(w, "%d\t%d\t%d\t%d\t%d\n",
165 wwnflush, wwnwr, wwnwre, wwnwrz, wwnwrc);
166 wwprintf(w, "wwwrite\tattmpt\tchar\n");
167 wwprintf(w, "%d\t%d\t%d\n",
168 wwnwwr, wwnwwra, wwnwwrc);
169 wwprintf(w, "wwupdat\tline\tmiss\tmajor\tmiss\n");
170 wwprintf(w, "%d\t%d\t%d\t%d\t%d\n",
04d70db4 171 wwnupdate, wwnupdline, wwnupdmiss, wwnmajline, wwnmajmiss);
b1189050
EW
172 wwprintf(w, "select\terror\tzero\n");
173 wwprintf(w, "%d\t%d\t%d\n",
174 wwnselect, wwnselecte, wwnselectz);
175 wwprintf(w, "read\terror\tzero\tchar\n");
176 wwprintf(w, "%d\t%d\t%d\t%d\n",
177 wwnread, wwnreade, wwnreadz, wwnreadc);
178 wwprintf(w, "ptyread\terror\tzero\tcontrol\tdata\tchar\n");
179 wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\n",
180 wwnwread, wwnwreade, wwnwreadz,
181 wwnwreadp, wwnwreadd, wwnwreadc);
c417b691 182 waitnl(w);
bb05dfb5 183 closeiwin(w);
c417b691
EW
184}
185
bb05dfb5 186c_list()
101acab4 187{
86845af3 188 register struct ww *w, *wp;
bb05dfb5
EW
189 register i;
190 int n;
191
192 for (n = 0, i = 0; i < NWINDOW; i++)
193 if (window[i] != 0)
194 n++;
d4001d43
EW
195 if (n == 0) {
196 error("No windows.");
197 return;
198 }
199 if ((w = openiwin(n + 2, "Windows")) == 0) {
03e75950 200 error("Can't open listing window: %s.", wwerror());
101acab4
EW
201 return;
202 }
d4001d43
EW
203 for (i = 0; i < NWINDOW; i++) {
204 if ((wp = window[i]) == 0)
205 continue;
b1189050 206 wwprintf(w, "%c %c %-13s %-.*s\n",
d4001d43
EW
207 wp == selwin ? '*' : ' ',
208 i + '1',
4a972f7c 209 wp->ww_state == WWS_HASPROC ? "" : "(No process)",
d4001d43 210 wwncol - 20,
4a972f7c 211 wp->ww_label ? wp->ww_label : "(No label)");
101acab4 212 }
101acab4 213 waitnl(w);
bb05dfb5 214 closeiwin(w);
101acab4
EW
215}
216
bb05dfb5 217c_quit()
8c4fb896 218{
101acab4 219 if (terse)
bb05dfb5 220 wwadd(cmdwin, &wwhead);
b1189050 221 wwputs("Really quit [yn]? ", cmdwin);
bb05dfb5 222 wwcurtowin(cmdwin);
8fa6d94c
EW
223 while (wwpeekc() < 0)
224 wwiomux();
225 if (wwgetc() == 'y') {
b1189050 226 wwputs("Yes", cmdwin);
8c4fb896
EW
227 quit++;
228 } else
b1189050 229 wwputs("\r\n", cmdwin);
bb05dfb5
EW
230 if (terse && !quit)
231 wwdelete(cmdwin);
8c4fb896 232}