Commit | Line | Data |
---|---|---|
708ccf0a | 1 | #ifndef lint |
bb05dfb5 | 2 | static char *sccsid = "@(#)cmd2.c 2.1.1.1 83/08/09"; |
708ccf0a EW |
3 | #endif |
4 | ||
5 | #include "defs.h" | |
6 | ||
bb05dfb5 | 7 | struct ww *openiwin(); |
708ccf0a | 8 | |
bb05dfb5 | 9 | c_help() |
708ccf0a EW |
10 | { |
11 | register struct ww *w; | |
12 | ||
bb05dfb5 EW |
13 | if ((w = openiwin(wwnrow - 2, "Help")) == 0) { |
14 | error("Can't open help window."); | |
708ccf0a | 15 | return; |
8c4fb896 | 16 | } |
bb05dfb5 | 17 | (void) wwprintf(w, "The escape character is %s, which gets you into command mode.\r\n\n", |
101acab4 | 18 | unctrl(escapec)); |
bb05dfb5 EW |
19 | (void) wwprintf(w, "Short commands:\r\n\n"); |
20 | (void) wwprintf(w, "{1-9} Select window {1-9} and return to conversation mode.\r\n"); | |
21 | (void) wwprintf(w, "%%{1-9} Select window {1-9}.\r\n"); | |
22 | (void) wwprintf(w, "c{1-9} Close window {1-9}.\r\n"); | |
23 | (void) wwprintf(w, "C Close all windows.\r\n"); | |
24 | (void) wwprintf(w, "S Show all windows in sequence.\r\n"); | |
25 | (void) wwprintf(w, "L List all windows with their labels.\r\n"); | |
26 | (void) wwprintf(w, "w Open a new window.\r\n"); | |
27 | (void) wwprintf(w, "[^U^D] Scroll [up, down] half a window.\r\n"); | |
28 | (void) wwprintf(w, "[^B^F] Scroll [up, down] a full window.\r\n"); | |
29 | (void) wwprintf(w, "[hjkl] Move cursor [left, down, up, right].\r\n"); | |
30 | (void) wwprintf(w, "escape Exit command mode.\r\n"); | |
31 | (void) wwprintf(w, "^L Redraw screen.\r\n"); | |
32 | (void) wwprintf(w, "^Z Suspend.\r\n"); | |
33 | (void) wwprintf(w, ". Quit.\r\n"); | |
b4be6cd6 | 34 | waitnl(w); |
bb05dfb5 EW |
35 | (void) wwprintf(w, "Long commands:\r\n\n"); |
36 | (void) wwprintf(w, ":terse [off] Turn on (or off) terse mode.\r\n"); | |
37 | (void) wwprintf(w, ":refresh {1-9} [off] Turn on (or off) refresh after every newline\r\n"); | |
38 | (void) wwprintf(w, " for window {1-9}.\r\n"); | |
39 | (void) wwprintf(w, ":label {1-9} string Label window {1-9}.\r\n"); | |
40 | (void) wwprintf(w, ":escape C Set escape character to C.\r\n"); | |
41 | (void) wwprintf(w, ":%%{1-9} Select window {1-9}.\r\n"); | |
42 | (void) wwprintf(w, ":window r c nr nc Open a window at row r column c\r\n"); | |
43 | (void) wwprintf(w, " with nr rows and nc colomns\r\n"); | |
44 | (void) wwprintf(w, ":source filename Execute the commands in `filename'.\r\n"); | |
101acab4 | 45 | waitnl(w); |
bb05dfb5 | 46 | closeiwin(w); |
708ccf0a EW |
47 | } |
48 | ||
bb05dfb5 EW |
49 | char *strtime(); |
50 | ||
51 | c_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 | |
bb05dfb5 EW |
71 | (void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n"); |
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)); | |
75 | (void) wwprintf(w, "%D\t%D\t%D\t%D\r\n", | |
708ccf0a EW |
76 | rusage.ru_maxrss, rusage.ru_ixrss, |
77 | rusage.ru_idrss, rusage.ru_isrss); | |
bb05dfb5 EW |
78 | (void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n"); |
79 | (void) wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\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 | ||
89 | char * | |
90 | strtime(t) | |
91 | register 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 | 118 | c_stat() |
c417b691 EW |
119 | { |
120 | register struct ww *w; | |
121 | ||
bb05dfb5 EW |
122 | if ((w = openiwin(6, "IO Statics")) == 0) { |
123 | error("Can't open statistics window."); | |
c417b691 EW |
124 | return; |
125 | } | |
bb05dfb5 EW |
126 | (void) wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n"); |
127 | (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n", | |
39b49130 | 128 | nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec); |
c417b691 | 129 | waitnl(w); |
bb05dfb5 | 130 | closeiwin(w); |
c417b691 EW |
131 | } |
132 | ||
bb05dfb5 | 133 | c_list() |
101acab4 | 134 | { |
bb05dfb5 EW |
135 | register struct ww *w; |
136 | register i; | |
137 | int n; | |
138 | ||
139 | for (n = 0, i = 0; i < NWINDOW; i++) | |
140 | if (window[i] != 0) | |
141 | n++; | |
142 | if ((w = openiwin(MIN(n, 1) + 2, "Active Windows")) == 0) { | |
143 | error("Can't open listing window."); | |
101acab4 EW |
144 | return; |
145 | } | |
bb05dfb5 EW |
146 | if (n == 0) { |
147 | (void) wwputs("No windows.\r\n", w); | |
148 | } else { | |
149 | for (i = 0; i < NWINDOW; i++) { | |
150 | if (window[i] == 0) | |
151 | continue; | |
152 | (void) wwprintf(w, "%c %s\r\n", i + '1', | |
153 | window[i]->ww_label ? window[i]->ww_label | |
154 | : "(No label)"); | |
155 | } | |
101acab4 | 156 | } |
101acab4 | 157 | waitnl(w); |
bb05dfb5 | 158 | closeiwin(w); |
101acab4 EW |
159 | } |
160 | ||
bb05dfb5 | 161 | c_quit() |
8c4fb896 | 162 | { |
101acab4 | 163 | if (terse) |
bb05dfb5 EW |
164 | wwadd(cmdwin, &wwhead); |
165 | (void) wwputs("Really quit [yn]? ", cmdwin); | |
166 | wwcurtowin(cmdwin); | |
8c4fb896 EW |
167 | while (bpeekc() < 0) |
168 | bread(); | |
169 | if (bgetc() == 'y') { | |
bb05dfb5 | 170 | (void) wwputs("Yes", cmdwin); |
8c4fb896 EW |
171 | quit++; |
172 | } else | |
bb05dfb5 EW |
173 | (void) wwputs("\r\n", cmdwin); |
174 | if (terse && !quit) | |
175 | wwdelete(cmdwin); | |
8c4fb896 EW |
176 | } |
177 | ||
bb05dfb5 EW |
178 | /* |
179 | * Open an information window. | |
180 | */ | |
708ccf0a | 181 | struct ww * |
bb05dfb5 | 182 | openiwin(nrow, label) |
708ccf0a EW |
183 | char *label; |
184 | { | |
185 | register struct ww *w; | |
186 | ||
bb05dfb5 | 187 | if ((w = wwopen(0, nrow, wwncol, 2, 0, 0)) == 0) |
708ccf0a | 188 | return 0; |
bb05dfb5 EW |
189 | /* |
190 | w->ww_mapnl = 1; | |
191 | */ | |
192 | w->ww_hasframe = 1; | |
193 | w->ww_id = -1; | |
194 | w->ww_center = 1; | |
195 | (void) setlabel(w, label); | |
196 | wwadd(w, framewin); | |
197 | reframe(); | |
708ccf0a EW |
198 | return w; |
199 | } | |
200 | ||
b4be6cd6 | 201 | waitnl(w) |
708ccf0a EW |
202 | register struct ww *w; |
203 | { | |
bb05dfb5 EW |
204 | if (w->ww_back != framewin) { |
205 | (void) wwputs("reframed", w); | |
206 | wwdelete(w); | |
207 | wwadd(w, framewin); | |
208 | reframe(); | |
209 | } | |
210 | (void) wwputs("\r\nType return to continue: ", w); | |
211 | wwcurtowin(w); | |
b4be6cd6 | 212 | while (bgetc() < 0) |
708ccf0a | 213 | bread(); |
bb05dfb5 | 214 | (void) wwputs("\033E", w); /* clear and home cursor */ |
b4be6cd6 EW |
215 | } |
216 | ||
bb05dfb5 EW |
217 | closeiwin(w) |
218 | struct ww *w; | |
b4be6cd6 | 219 | { |
bb05dfb5 EW |
220 | closewin(w); |
221 | reframe(); | |
708ccf0a | 222 | } |