113979Sedward #ifndef lint 2*14590Sedward static char *sccsid = "@(#)cmd2.c 3.2 83/08/12"; 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 } 1714408Sedward (void) wwprintf(w, "The escape character is %s, which gets you into command mode.\r\n\n", 1814189Sedward unctrl(escapec)); 1914408Sedward (void) wwprintf(w, "Short commands:\r\n\n"); 2014408Sedward (void) wwprintf(w, "{1-9} Select window {1-9} and return to conversation mode.\r\n"); 2114408Sedward (void) wwprintf(w, "%%{1-9} Select window {1-9}.\r\n"); 2214408Sedward (void) wwprintf(w, "c{1-9} Close window {1-9}.\r\n"); 2314408Sedward (void) wwprintf(w, "C Close all windows.\r\n"); 2414408Sedward (void) wwprintf(w, "S Show all windows in sequence.\r\n"); 2514408Sedward (void) wwprintf(w, "L List all windows with their labels.\r\n"); 2614408Sedward (void) wwprintf(w, "w Open a new window.\r\n"); 2714408Sedward (void) wwprintf(w, "[^U^D] Scroll [up, down] half a window.\r\n"); 2814408Sedward (void) wwprintf(w, "[^B^F] Scroll [up, down] a full window.\r\n"); 2914408Sedward (void) wwprintf(w, "[hjkl] Move cursor [left, down, up, right].\r\n"); 3014408Sedward (void) wwprintf(w, "escape Exit command mode.\r\n"); 3114408Sedward (void) wwprintf(w, "^L Redraw screen.\r\n"); 3214408Sedward (void) wwprintf(w, "^Z Suspend.\r\n"); 3314408Sedward (void) wwprintf(w, ". Quit.\r\n"); 3413994Sedward waitnl(w); 3514408Sedward (void) wwprintf(w, "Long commands:\r\n\n"); 3614408Sedward (void) wwprintf(w, ":terse [off] Turn on (or off) terse mode.\r\n"); 3714408Sedward (void) wwprintf(w, ":refresh {1-9} [off] Turn on (or off) refresh after every newline\r\n"); 3814408Sedward (void) wwprintf(w, " for window {1-9}.\r\n"); 3914408Sedward (void) wwprintf(w, ":label {1-9} string Label window {1-9}.\r\n"); 4014408Sedward (void) wwprintf(w, ":escape C Set escape character to C.\r\n"); 4114408Sedward (void) wwprintf(w, ":%%{1-9} Select window {1-9}.\r\n"); 4214408Sedward (void) wwprintf(w, ":window r c nr nc Open a window at row r column c\r\n"); 4314408Sedward (void) wwprintf(w, " with nr rows and nc colomns\r\n"); 4414408Sedward (void) wwprintf(w, ":source filename Execute the commands in `filename'.\r\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 7114408Sedward (void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\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)); 7514408Sedward (void) wwprintf(w, "%D\t%D\t%D\t%D\r\n", 7613979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 7713979Sedward rusage.ru_idrss, rusage.ru_isrss); 7814408Sedward (void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n"); 7914408Sedward (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", 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 } 12614408Sedward (void) wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n"); 12714408Sedward (void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n", 12814154Sedward nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec); 12914073Sedward waitnl(w); 13014408Sedward closeiwin(w); 13114073Sedward } 13214073Sedward 13314408Sedward c_list() 13414189Sedward { 13514408Sedward register struct ww *w; 13614408Sedward register i; 13714408Sedward int n; 13814189Sedward 13914408Sedward for (n = 0, i = 0; i < NWINDOW; i++) 14014408Sedward if (window[i] != 0) 14114408Sedward n++; 142*14590Sedward if ((w = openiwin(MAX(n, 1) + 2, "Active Windows")) == 0) { 14314408Sedward error("Can't open listing window."); 14414189Sedward return; 14514189Sedward } 14614408Sedward if (n == 0) { 14714408Sedward (void) wwputs("No windows.\r\n", w); 14814408Sedward } else { 14914408Sedward for (i = 0; i < NWINDOW; i++) { 15014408Sedward if (window[i] == 0) 15114408Sedward continue; 15214408Sedward (void) wwprintf(w, "%c %s\r\n", i + '1', 15314408Sedward window[i]->ww_label ? window[i]->ww_label 15414408Sedward : "(No label)"); 15514408Sedward } 15614189Sedward } 15714189Sedward waitnl(w); 15814408Sedward closeiwin(w); 15914189Sedward } 16014189Sedward 16114408Sedward c_quit() 16214027Sedward { 16314189Sedward if (terse) 16414408Sedward wwadd(cmdwin, &wwhead); 16514408Sedward (void) wwputs("Really quit [yn]? ", cmdwin); 16614408Sedward wwcurtowin(cmdwin); 16714027Sedward while (bpeekc() < 0) 16814027Sedward bread(); 16914027Sedward if (bgetc() == 'y') { 17014408Sedward (void) wwputs("Yes", cmdwin); 17114027Sedward quit++; 17214027Sedward } else 17314408Sedward (void) wwputs("\r\n", cmdwin); 17414408Sedward if (terse && !quit) 17514408Sedward wwdelete(cmdwin); 17614027Sedward } 17714027Sedward 17814408Sedward /* 17914408Sedward * Open an information window. 18014408Sedward */ 18113979Sedward struct ww * 18214408Sedward openiwin(nrow, label) 18313979Sedward char *label; 18413979Sedward { 18513979Sedward register struct ww *w; 18613979Sedward 18714408Sedward if ((w = wwopen(0, nrow, wwncol, 2, 0, 0)) == 0) 18813979Sedward return 0; 18914408Sedward /* 19014408Sedward w->ww_mapnl = 1; 19114408Sedward */ 19214408Sedward w->ww_hasframe = 1; 19314408Sedward w->ww_id = -1; 19414408Sedward w->ww_center = 1; 19514408Sedward (void) setlabel(w, label); 19614408Sedward wwadd(w, framewin); 19714408Sedward reframe(); 19813979Sedward return w; 19913979Sedward } 20013979Sedward 20113994Sedward waitnl(w) 20213979Sedward register struct ww *w; 20313979Sedward { 20414408Sedward if (w->ww_back != framewin) { 20514408Sedward (void) wwputs("reframed", w); 20614408Sedward wwdelete(w); 20714408Sedward wwadd(w, framewin); 20814408Sedward reframe(); 20914408Sedward } 21014408Sedward (void) wwputs("\r\nType return to continue: ", w); 21114408Sedward wwcurtowin(w); 21213994Sedward while (bgetc() < 0) 21313979Sedward bread(); 21414408Sedward (void) wwputs("\033E", w); /* clear and home cursor */ 21513994Sedward } 21613994Sedward 21714408Sedward closeiwin(w) 21814408Sedward struct ww *w; 21913994Sedward { 22014408Sedward closewin(w); 22114408Sedward reframe(); 22213979Sedward } 223