Commit | Line | Data |
---|---|---|
708ccf0a | 1 | #ifndef lint |
b1189050 | 2 | static char *sccsid = "@(#)cmd2.c 3.23 84/03/03"; |
708ccf0a EW |
3 | #endif |
4 | ||
5 | #include "defs.h" | |
6 | ||
d4001d43 EW |
7 | char *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 | }; | |
31 | char *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 | 49 | c_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 |
64 | help_print(w, name, list) |
65 | register struct ww *w; | |
66 | char *name; | |
4a972f7c | 67 | register 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 |
86 | char *strtime(); |
87 | ||
88 | c_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 | ||
125 | char * | |
126 | strtime(t) | |
127 | register 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 | 155 | c_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 | 186 | c_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 | 217 | c_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 | } |