Commit | Line | Data |
---|---|---|
708ccf0a | 1 | #ifndef lint |
a200c620 | 2 | static char *sccsid = "@(#)cmd2.c 3.15 83/12/02"; |
708ccf0a EW |
3 | #endif |
4 | ||
5 | #include "defs.h" | |
6 | ||
bb05dfb5 | 7 | c_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 |
51 | char *strtime(); |
52 | ||
53 | c_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 | ||
91 | char * | |
92 | strtime(t) | |
93 | register 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 | 121 | c_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 | 139 | c_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 | 172 | c_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 | 192 | struct ww * |
bb05dfb5 | 193 | openiwin(nrow, label) |
708ccf0a EW |
194 | char *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 | 210 | waitnl(w) |
708ccf0a EW |
211 | register 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 |
221 | closeiwin(w) |
222 | struct ww *w; | |
b4be6cd6 | 223 | { |
bb05dfb5 EW |
224 | closewin(w); |
225 | reframe(); | |
708ccf0a | 226 | } |