113979Sedward #ifndef lint 2*14189Sedward static char *sccsid = "@(#)cmd2.c 1.8 83/07/28"; 313979Sedward #endif 413979Sedward 513979Sedward #include "defs.h" 613979Sedward 713979Sedward struct ww *getwin(); 813979Sedward struct ww *openwin(); 913979Sedward char *strtime(); 1013979Sedward 1113979Sedward dohelp() 1213979Sedward { 1313979Sedward register struct ww *w; 1413979Sedward 15*14189Sedward if ((w = openwin(wwnrow - 1, "Help")) == 0) { 16*14189Sedward if (terse) 17*14189Sedward Ding(); 18*14189Sedward else 19*14189Sedward wwputs("Can't open help window. ", cmdwin); 2013979Sedward return; 2114027Sedward } 22*14189Sedward wwprintf(w, "The escape character is %s, which gets you into command mode.\r\n\n", 23*14189Sedward unctrl(escapec)); 24*14189Sedward wwprintf(w, "Short commands:\r\n\n"); 25*14189Sedward wwprintf(w, "{1-9} Select window {1-9} and return to conversation mode.\r\n"); 26*14189Sedward wwprintf(w, "%%{1-9} Select window {1-9}.\r\n"); 27*14189Sedward wwprintf(w, "c{1-9} Close window {1-9}.\r\n"); 2814183Sedward wwprintf(w, "C Close all windows.\r\n"); 2914183Sedward wwprintf(w, "S Show all windows in sequence.\r\n"); 30*14189Sedward wwprintf(w, "L List all windows with their labels.\r\n"); 3114137Sedward wwprintf(w, "w Open a new window.\r\n"); 32*14189Sedward wwprintf(w, "[^U^D] Scroll [up, down] half a window.\r\n"); 33*14189Sedward wwprintf(w, "[^B^F] Scroll [up, down] a full window.\r\n"); 3414137Sedward wwprintf(w, "[hjkl] Move cursor [left, down, up, right].\r\n"); 3514137Sedward wwprintf(w, "escape Exit command mode.\r\n"); 3614137Sedward wwprintf(w, "^L Redraw screen.\r\n"); 3714137Sedward wwprintf(w, "^Z Suspend.\r\n"); 3814137Sedward wwprintf(w, ". Quit.\r\n"); 3913994Sedward waitnl(w); 40*14189Sedward wwprintf(w, "Long commands:\r\n\n"); 41*14189Sedward wwprintf(w, ":terse [off] Turn on (or off) terse mode.\r\n"); 42*14189Sedward wwprintf(w, ":refresh {1-9} [off] Turn on (or off) refresh after every newline\r\n"); 43*14189Sedward wwprintf(w, " for window {1-9}.\r\n"); 44*14189Sedward wwprintf(w, ":label {1-9} string Label window {1-9}.\r\n"); 45*14189Sedward wwprintf(w, ":escape c Set escape character to c.\r\n"); 46*14189Sedward wwprintf(w, ":%{1-9} Select window {1-9}.\r\n"); 47*14189Sedward wwprintf(w, ":window r c nr nc Open a window at row r column c\r\n"); 48*14189Sedward wwprintf(w, " with nr rows and nc colomns\r\n"); 49*14189Sedward waitnl(w); 5013979Sedward closewin(w); 5113979Sedward } 5213979Sedward 5313979Sedward dotime(flag) 5413979Sedward { 5513979Sedward register struct ww *w; 5613979Sedward struct rusage rusage; 5713979Sedward struct timeval timeval; 5813979Sedward 5914073Sedward if ((w = openwin(8, "Timing and Resource Usage")) == 0) { 60*14189Sedward if (terse) 61*14189Sedward Ding(); 62*14189Sedward else 63*14189Sedward wwputs("Can't open time window. ", cmdwin); 6413979Sedward return; 6514027Sedward } 6613979Sedward 6713979Sedward gettimeofday(&timeval, &timezone); 6813979Sedward timeval.tv_sec -= starttime.tv_sec; 6913979Sedward if ((timeval.tv_usec -= starttime.tv_usec) < 0) { 7013979Sedward timeval.tv_sec--; 7113979Sedward timeval.tv_usec += 1000000; 7213979Sedward } 7313979Sedward getrusage(flag, &rusage); 7413979Sedward 7513979Sedward wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n"); 7613979Sedward wwprintf(w, "%-16s", strtime(&timeval)); 7713979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_utime)); 7813979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_stime)); 7913979Sedward wwprintf(w, "%D\t%D\t%D\t%D\r\n", 8013979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 8113979Sedward rusage.ru_idrss, rusage.ru_isrss); 8213979Sedward wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n"); 8313979Sedward wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n", 8413979Sedward rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap, 8513979Sedward rusage.ru_inblock, rusage.ru_oublock, 8613979Sedward rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals, 8713979Sedward rusage.ru_nvcsw, rusage.ru_nivcsw); 8813979Sedward 8913994Sedward waitnl(w); 9013979Sedward closewin(w); 9113979Sedward } 9213979Sedward 9313979Sedward char * 9413979Sedward strtime(t) 9513979Sedward register struct timeval *t; 9613979Sedward { 9713979Sedward char fill = 0; 9813979Sedward static char buf[20]; 9913979Sedward register char *p = buf; 10013979Sedward 10113979Sedward if (t->tv_sec > 60*60) { 10213979Sedward sprintf(p, "%D:", t->tv_sec / (60*60)); 10313979Sedward while (*p++) 10413979Sedward ; 10513979Sedward p--; 10613979Sedward t->tv_sec %= 60*60; 10713979Sedward fill++; 10813979Sedward } 10913979Sedward if (t->tv_sec > 60) { 11013979Sedward sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 11113979Sedward while (*p++) 11213979Sedward ; 11313979Sedward p--; 11413979Sedward t->tv_sec %= 60; 11513979Sedward fill++; 11613979Sedward } 11713979Sedward sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 11813979Sedward t->tv_sec, t->tv_usec / 10000); 11913979Sedward return buf; 12013979Sedward } 12113979Sedward 12214073Sedward dostat() 12314073Sedward { 12414073Sedward register struct ww *w; 12514073Sedward 12614154Sedward if ((w = openwin(6, "IO Statics")) == 0) { 127*14189Sedward if (terse) 128*14189Sedward Ding(); 129*14189Sedward else 130*14189Sedward wwputs("Can't open statistics window. ", cmdwin); 13114073Sedward return; 13214073Sedward } 13314154Sedward wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n"); 13414154Sedward wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n", 13514154Sedward nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec); 13614073Sedward waitnl(w); 13714073Sedward closewin(w); 13814073Sedward } 13914073Sedward 140*14189Sedward dolist() 141*14189Sedward { 142*14189Sedward register struct ww *w, *w1; 143*14189Sedward int id; 144*14189Sedward char doneit = 0; 145*14189Sedward 146*14189Sedward if ((w = openwin(14, "Active Windows")) == 0) { 147*14189Sedward if (terse) 148*14189Sedward Ding(); 149*14189Sedward else 150*14189Sedward wwputs("Can't open listing window. ", cmdwin); 151*14189Sedward return; 152*14189Sedward } 153*14189Sedward for (id = 1; id <= NWINDOW; id++) { 154*14189Sedward if ((w1 = wwfind(id)) == 0) 155*14189Sedward continue; 156*14189Sedward doneit = 1; 157*14189Sedward wwprintf(w, "%d %s\r\n", id, w1->ww_label); 158*14189Sedward } 159*14189Sedward if (!doneit) 160*14189Sedward wwprintf(w, "No windows.\r\n"); 161*14189Sedward waitnl(w); 162*14189Sedward closewin(w); 163*14189Sedward } 164*14189Sedward 16514027Sedward doquit() 16614027Sedward { 167*14189Sedward if (terse) 168*14189Sedward Wunhide(cmdwin->ww_win); 16914137Sedward wwputs("Really quit [yn]? ", cmdwin); 17014027Sedward wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win)); 17114027Sedward while (bpeekc() < 0) 17214027Sedward bread(); 17314027Sedward if (bgetc() == 'y') { 17414027Sedward wwputs("Yes", cmdwin); 17514027Sedward quit++; 17614027Sedward } else 17714027Sedward wwputs("\r\n", cmdwin); 178*14189Sedward if (terse) 179*14189Sedward Whide(cmdwin->ww_win); 18014027Sedward } 18114027Sedward 18213979Sedward struct ww * 18313979Sedward openwin(nrow, label) 18413979Sedward char *label; 18513979Sedward { 18613979Sedward register struct ww *w; 187*14189Sedward int startcol; 18813979Sedward 189*14189Sedward if ((w = wwopen(WW_NONE, 0, nrow, wwncol, 0, 0)) == 0) 19013979Sedward return 0; 19113979Sedward wwframe(w); 192*14189Sedward if ((startcol = (wwncol - strlen(label)) / 2) <= 0) 193*14189Sedward startcol = 1; 194*14189Sedward wwlabel(w, startcol, label, WINVERSE); 19514027Sedward wwsetcurwin(w); 19613979Sedward return w; 19713979Sedward } 19813979Sedward 19913994Sedward waitnl(w) 20013979Sedward register struct ww *w; 20113979Sedward { 20214027Sedward wwsetcurwin(w); 20313979Sedward wwprintf(w, "\r\nType return to continue: "); 20413979Sedward wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win)); 20513994Sedward while (bgetc() < 0) 20613979Sedward bread(); 207*14189Sedward wwputs("\033E", w); /* clear and home cursor */ 20813994Sedward } 20913994Sedward 21013994Sedward closewin(w) 21113994Sedward register struct ww *w; 21213994Sedward { 21313979Sedward wwclose(w); 21414027Sedward wwsetcurwin(cmdwin); 21513979Sedward } 216