1 #ifndef lint 2 static char *sccsid = "@(#)cmd2.c 3.2 83/08/12"; 3 #endif 4 5 #include "defs.h" 6 7 struct ww *openiwin(); 8 9 c_help() 10 { 11 register struct ww *w; 12 13 if ((w = openiwin(wwnrow - 2, "Help")) == 0) { 14 error("Can't open help window."); 15 return; 16 } 17 (void) wwprintf(w, "The escape character is %s, which gets you into command mode.\r\n\n", 18 unctrl(escapec)); 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"); 34 waitnl(w); 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"); 45 waitnl(w); 46 closeiwin(w); 47 } 48 49 char *strtime(); 50 51 c_time(flag) 52 { 53 register struct ww *w; 54 struct rusage rusage; 55 struct timeval timeval; 56 struct timezone timezone; 57 58 if ((w = openiwin(6, "Timing and Resource Usage")) == 0) { 59 error("Can't open time window."); 60 return; 61 } 62 63 (void) gettimeofday(&timeval, &timezone); 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 } 69 (void) getrusage(flag, &rusage); 70 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", 76 rusage.ru_maxrss, rusage.ru_ixrss, 77 rusage.ru_idrss, rusage.ru_isrss); 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", 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 85 waitnl(w); 86 closeiwin(w); 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) { 98 (void) sprintf(p, "%D:", t->tv_sec / (60*60)); 99 while (*p++) 100 ; 101 p--; 102 t->tv_sec %= 60*60; 103 fill++; 104 } 105 if (t->tv_sec > 60) { 106 (void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 107 while (*p++) 108 ; 109 p--; 110 t->tv_sec %= 60; 111 fill++; 112 } 113 (void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 114 t->tv_sec, t->tv_usec / 10000); 115 return buf; 116 } 117 118 c_stat() 119 { 120 register struct ww *w; 121 122 if ((w = openiwin(6, "IO Statics")) == 0) { 123 error("Can't open statistics window."); 124 return; 125 } 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", 128 nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec); 129 waitnl(w); 130 closeiwin(w); 131 } 132 133 c_list() 134 { 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(MAX(n, 1) + 2, "Active Windows")) == 0) { 143 error("Can't open listing window."); 144 return; 145 } 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 } 156 } 157 waitnl(w); 158 closeiwin(w); 159 } 160 161 c_quit() 162 { 163 if (terse) 164 wwadd(cmdwin, &wwhead); 165 (void) wwputs("Really quit [yn]? ", cmdwin); 166 wwcurtowin(cmdwin); 167 while (bpeekc() < 0) 168 bread(); 169 if (bgetc() == 'y') { 170 (void) wwputs("Yes", cmdwin); 171 quit++; 172 } else 173 (void) wwputs("\r\n", cmdwin); 174 if (terse && !quit) 175 wwdelete(cmdwin); 176 } 177 178 /* 179 * Open an information window. 180 */ 181 struct ww * 182 openiwin(nrow, label) 183 char *label; 184 { 185 register struct ww *w; 186 187 if ((w = wwopen(0, nrow, wwncol, 2, 0, 0)) == 0) 188 return 0; 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(); 198 return w; 199 } 200 201 waitnl(w) 202 register struct ww *w; 203 { 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); 212 while (bgetc() < 0) 213 bread(); 214 (void) wwputs("\033E", w); /* clear and home cursor */ 215 } 216 217 closeiwin(w) 218 struct ww *w; 219 { 220 closewin(w); 221 reframe(); 222 } 223