113979Sedward #ifndef lint 2*14660Sedward static char *sccsid = "@(#)cmd2.c 3.4 83/08/16"; 313979Sedward #endif 413979Sedward 513979Sedward #include "defs.h" 613979Sedward 714408Sedward struct ww *openiwin(); 813979Sedward 914408Sedward c_help() 1013979Sedward { 1113979Sedward register struct ww *w; 1213979Sedward 1314408Sedward if ((w = openiwin(wwnrow - 2, "Help")) == 0) { 1414408Sedward error("Can't open help window."); 1513979Sedward return; 1614027Sedward } 17*14660Sedward (void) wwprintf(w, "The escape character is %s, which gets you into command mode.\n\n", 1814189Sedward unctrl(escapec)); 19*14660Sedward (void) wwprintf(w, "Short commands:\n\n"); 20*14660Sedward (void) wwprintf(w, "{1-9} Select window {1-9} and return to conversation mode.\n"); 21*14660Sedward (void) wwprintf(w, "%%{1-9} Select window {1-9}.\n"); 22*14660Sedward (void) wwprintf(w, "c{1-9} Close window {1-9}.\n"); 23*14660Sedward (void) wwprintf(w, "C Close all windows.\n"); 24*14660Sedward (void) wwprintf(w, "S Show all windows in sequence.\n"); 25*14660Sedward (void) wwprintf(w, "L List all windows with their labels.\n"); 26*14660Sedward (void) wwprintf(w, "w Open a new window.\n"); 27*14660Sedward (void) wwprintf(w, "[^U^D] Scroll [up, down] half a window.\n"); 28*14660Sedward (void) wwprintf(w, "[^B^F] Scroll [up, down] a full window.\n"); 29*14660Sedward (void) wwprintf(w, "[hjkl] Move cursor [left, down, up, right].\n"); 30*14660Sedward (void) wwprintf(w, "escape Exit command mode.\n"); 31*14660Sedward (void) wwprintf(w, "^L Redraw screen.\n"); 32*14660Sedward (void) wwprintf(w, "^Z Suspend.\n"); 33*14660Sedward (void) wwprintf(w, ". Quit.\n"); 3413994Sedward waitnl(w); 35*14660Sedward (void) wwprintf(w, "Long commands:\n\n"); 36*14660Sedward (void) wwprintf(w, ":terse [off] Turn on (or off) terse mode.\n"); 37*14660Sedward (void) wwprintf(w, ":refresh {1-9} [off] Turn on (or off) refresh after every newline\n"); 38*14660Sedward (void) wwprintf(w, " for window {1-9}.\n"); 39*14660Sedward (void) wwprintf(w, ":label {1-9} string Label window {1-9}.\n"); 40*14660Sedward (void) wwprintf(w, ":escape C Set escape character to C.\n"); 41*14660Sedward (void) wwprintf(w, ":%%{1-9} Select window {1-9}.\n"); 42*14660Sedward (void) wwprintf(w, ":window r c nr nc Open a window at row r column c\n"); 43*14660Sedward (void) wwprintf(w, " with nr rows and nc colomns\n"); 44*14660Sedward (void) wwprintf(w, ":source filename Execute the commands in `filename'.\n"); 4514189Sedward waitnl(w); 4614408Sedward closeiwin(w); 4713979Sedward } 4813979Sedward 4914408Sedward char *strtime(); 5014408Sedward 5114408Sedward c_time(flag) 5213979Sedward { 5313979Sedward register struct ww *w; 5413979Sedward struct rusage rusage; 5513979Sedward struct timeval timeval; 5614408Sedward struct timezone timezone; 5713979Sedward 5814408Sedward if ((w = openiwin(6, "Timing and Resource Usage")) == 0) { 5914408Sedward error("Can't open time window."); 6013979Sedward return; 6114027Sedward } 6213979Sedward 6314408Sedward (void) gettimeofday(&timeval, &timezone); 6413979Sedward timeval.tv_sec -= starttime.tv_sec; 6513979Sedward if ((timeval.tv_usec -= starttime.tv_usec) < 0) { 6613979Sedward timeval.tv_sec--; 6713979Sedward timeval.tv_usec += 1000000; 6813979Sedward } 6914408Sedward (void) getrusage(flag, &rusage); 7013979Sedward 71*14660Sedward (void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n"); 7214408Sedward (void) wwprintf(w, "%-16s", strtime(&timeval)); 7314408Sedward (void) wwprintf(w, "%-16s", strtime(&rusage.ru_utime)); 7414408Sedward (void) wwprintf(w, "%-16s", strtime(&rusage.ru_stime)); 75*14660Sedward (void) wwprintf(w, "%D\t%D\t%D\t%D\n", 7613979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 7713979Sedward rusage.ru_idrss, rusage.ru_isrss); 78*14660Sedward (void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n"); 79*14660Sedward (void) wwprintf(w, "%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\n", 8013979Sedward rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap, 8113979Sedward rusage.ru_inblock, rusage.ru_oublock, 8213979Sedward rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals, 8313979Sedward rusage.ru_nvcsw, rusage.ru_nivcsw); 8413979Sedward 8513994Sedward waitnl(w); 8614408Sedward closeiwin(w); 8713979Sedward } 8813979Sedward 8913979Sedward char * 9013979Sedward strtime(t) 9113979Sedward register struct timeval *t; 9213979Sedward { 9313979Sedward char fill = 0; 9413979Sedward static char buf[20]; 9513979Sedward register char *p = buf; 9613979Sedward 9713979Sedward if (t->tv_sec > 60*60) { 9814408Sedward (void) sprintf(p, "%D:", t->tv_sec / (60*60)); 9913979Sedward while (*p++) 10013979Sedward ; 10113979Sedward p--; 10213979Sedward t->tv_sec %= 60*60; 10313979Sedward fill++; 10413979Sedward } 10513979Sedward if (t->tv_sec > 60) { 10614408Sedward (void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 10713979Sedward while (*p++) 10813979Sedward ; 10913979Sedward p--; 11013979Sedward t->tv_sec %= 60; 11113979Sedward fill++; 11213979Sedward } 11314408Sedward (void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 11413979Sedward t->tv_sec, t->tv_usec / 10000); 11513979Sedward return buf; 11613979Sedward } 11713979Sedward 11814408Sedward c_stat() 11914073Sedward { 12014073Sedward register struct ww *w; 12114073Sedward 12214408Sedward if ((w = openiwin(6, "IO Statics")) == 0) { 12314408Sedward error("Can't open statistics window."); 12414073Sedward return; 12514073Sedward } 126*14660Sedward (void) wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\tnupdt\tntouch\tnmiss\n"); 127*14660Sedward (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", 12814656Sedward nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec, 129*14660Sedward wwnupdate, wwntouched, wwnmiss); 13014073Sedward waitnl(w); 13114408Sedward closeiwin(w); 13214073Sedward } 13314073Sedward 13414408Sedward c_list() 13514189Sedward { 13614408Sedward register struct ww *w; 13714408Sedward register i; 13814408Sedward int n; 13914189Sedward 14014408Sedward for (n = 0, i = 0; i < NWINDOW; i++) 14114408Sedward if (window[i] != 0) 14214408Sedward n++; 14314590Sedward if ((w = openiwin(MAX(n, 1) + 2, "Active Windows")) == 0) { 14414408Sedward error("Can't open listing window."); 14514189Sedward return; 14614189Sedward } 14714408Sedward if (n == 0) { 148*14660Sedward (void) wwputs("No windows.\n", w); 14914408Sedward } else { 15014408Sedward for (i = 0; i < NWINDOW; i++) { 15114408Sedward if (window[i] == 0) 15214408Sedward continue; 153*14660Sedward (void) wwprintf(w, "%c %s\n", i + '1', 15414408Sedward window[i]->ww_label ? window[i]->ww_label 15514408Sedward : "(No label)"); 15614408Sedward } 15714189Sedward } 15814189Sedward waitnl(w); 15914408Sedward closeiwin(w); 16014189Sedward } 16114189Sedward 16214408Sedward c_quit() 16314027Sedward { 16414189Sedward if (terse) 16514408Sedward wwadd(cmdwin, &wwhead); 16614408Sedward (void) wwputs("Really quit [yn]? ", cmdwin); 16714408Sedward wwcurtowin(cmdwin); 16814027Sedward while (bpeekc() < 0) 16914027Sedward bread(); 17014027Sedward if (bgetc() == 'y') { 17114408Sedward (void) wwputs("Yes", cmdwin); 17214027Sedward quit++; 17314027Sedward } else 17414408Sedward (void) wwputs("\r\n", cmdwin); 17514408Sedward if (terse && !quit) 17614408Sedward wwdelete(cmdwin); 17714027Sedward } 17814027Sedward 17914408Sedward /* 18014408Sedward * Open an information window. 18114408Sedward */ 18213979Sedward struct ww * 18314408Sedward openiwin(nrow, label) 18413979Sedward char *label; 18513979Sedward { 18613979Sedward register struct ww *w; 18713979Sedward 18814408Sedward if ((w = wwopen(0, nrow, wwncol, 2, 0, 0)) == 0) 18913979Sedward return 0; 19014408Sedward w->ww_mapnl = 1; 19114408Sedward w->ww_hasframe = 1; 19214408Sedward w->ww_id = -1; 19314408Sedward w->ww_center = 1; 19414408Sedward (void) setlabel(w, label); 19514408Sedward wwadd(w, framewin); 19614408Sedward reframe(); 19713979Sedward return w; 19813979Sedward } 19913979Sedward 20013994Sedward waitnl(w) 20113979Sedward register struct ww *w; 20213979Sedward { 20314408Sedward if (w->ww_back != framewin) { 20414408Sedward (void) wwputs("reframed", w); 20514408Sedward wwdelete(w); 20614408Sedward wwadd(w, framewin); 20714408Sedward reframe(); 20814408Sedward } 209*14660Sedward (void) wwputs("\nType return to continue: ", w); 21014408Sedward wwcurtowin(w); 21113994Sedward while (bgetc() < 0) 21213979Sedward bread(); 21314408Sedward (void) wwputs("\033E", w); /* clear and home cursor */ 21413994Sedward } 21513994Sedward 21614408Sedward closeiwin(w) 21714408Sedward struct ww *w; 21813994Sedward { 21914408Sedward closewin(w); 22014408Sedward reframe(); 22113979Sedward } 222