113979Sedward #ifndef lint 2*14183Sedward static char *sccsid = "@(#)cmd2.c 1.7 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*14183Sedward if ((w = openwin(wwncol - 1, "Help")) == 0) { 1614027Sedward wwputs("Can't open help window. ", cmdwin); 1713979Sedward return; 1814027Sedward } 1913979Sedward wwprintf(w, "The escape character is ^P, which gets you into command mode.\r\n"); 2013979Sedward wwprintf(w, "The commands are:\r\n"); 2114137Sedward wwprintf(w, "[1-9] Select window [1-9] and exit command mode.\r\n"); 2214137Sedward wwprintf(w, "%%[1-9] Select window [1-9].\r\n"); 2314137Sedward wwprintf(w, "c[1-9] Close window [1-9].\r\n"); 24*14183Sedward wwprintf(w, "C Close all windows.\r\n"); 25*14183Sedward wwprintf(w, "S Show all windows in sequence.\r\n"); 2614137Sedward wwprintf(w, "R Force refresh after every newline (current window only).\r\n"); 2714137Sedward wwprintf(w, "r Don't refresh every line.\r\n"); 2814137Sedward wwprintf(w, "w Open a new window.\r\n"); 2914137Sedward wwprintf(w, "^U Scroll up.\r\n"); 3014137Sedward wwprintf(w, "^D Scroll down.\r\n"); 3114137Sedward wwprintf(w, "[hjkl] Move cursor [left, down, up, right].\r\n"); 3214137Sedward /* 3314137Sedward wwprintf(w, "s Print IO statistics.\r\n"); 3414137Sedward wwprintf(w, "t Print resource usage of this program.\r\n"); 3514137Sedward wwprintf(w, "T Print resource usage of children.\r\n"); 3614137Sedward */ 3714137Sedward wwprintf(w, "escape Exit command mode.\r\n"); 3814137Sedward wwprintf(w, "^L Redraw screen.\r\n"); 3914137Sedward wwprintf(w, "^Z Suspend.\r\n"); 4014137Sedward wwprintf(w, ". Quit.\r\n"); 4113994Sedward waitnl(w); 4213979Sedward closewin(w); 4313979Sedward } 4413979Sedward 4513979Sedward dotime(flag) 4613979Sedward { 4713979Sedward register struct ww *w; 4813979Sedward struct rusage rusage; 4913979Sedward struct timeval timeval; 5013979Sedward 5114073Sedward if ((w = openwin(8, "Timing and Resource Usage")) == 0) { 5214027Sedward wwputs("Can't open time window. ", cmdwin); 5313979Sedward return; 5414027Sedward } 5513979Sedward 5613979Sedward gettimeofday(&timeval, &timezone); 5713979Sedward timeval.tv_sec -= starttime.tv_sec; 5813979Sedward if ((timeval.tv_usec -= starttime.tv_usec) < 0) { 5913979Sedward timeval.tv_sec--; 6013979Sedward timeval.tv_usec += 1000000; 6113979Sedward } 6213979Sedward getrusage(flag, &rusage); 6313979Sedward 6413979Sedward wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n"); 6513979Sedward wwprintf(w, "%-16s", strtime(&timeval)); 6613979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_utime)); 6713979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_stime)); 6813979Sedward wwprintf(w, "%D\t%D\t%D\t%D\r\n", 6913979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 7013979Sedward rusage.ru_idrss, rusage.ru_isrss); 7113979Sedward wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n"); 7213979Sedward wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n", 7313979Sedward rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap, 7413979Sedward rusage.ru_inblock, rusage.ru_oublock, 7513979Sedward rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals, 7613979Sedward rusage.ru_nvcsw, rusage.ru_nivcsw); 7713979Sedward 7813994Sedward waitnl(w); 7913979Sedward closewin(w); 8013979Sedward } 8113979Sedward 8213979Sedward char * 8313979Sedward strtime(t) 8413979Sedward register struct timeval *t; 8513979Sedward { 8613979Sedward char fill = 0; 8713979Sedward static char buf[20]; 8813979Sedward register char *p = buf; 8913979Sedward 9013979Sedward if (t->tv_sec > 60*60) { 9113979Sedward sprintf(p, "%D:", t->tv_sec / (60*60)); 9213979Sedward while (*p++) 9313979Sedward ; 9413979Sedward p--; 9513979Sedward t->tv_sec %= 60*60; 9613979Sedward fill++; 9713979Sedward } 9813979Sedward if (t->tv_sec > 60) { 9913979Sedward sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 10013979Sedward while (*p++) 10113979Sedward ; 10213979Sedward p--; 10313979Sedward t->tv_sec %= 60; 10413979Sedward fill++; 10513979Sedward } 10613979Sedward sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 10713979Sedward t->tv_sec, t->tv_usec / 10000); 10813979Sedward return buf; 10913979Sedward } 11013979Sedward 11114073Sedward dostat() 11214073Sedward { 11314073Sedward register struct ww *w; 11414073Sedward 11514154Sedward if ((w = openwin(6, "IO Statics")) == 0) { 11614073Sedward wwputs("Can't open statistics window. ", cmdwin); 11714073Sedward return; 11814073Sedward } 11914154Sedward wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n"); 12014154Sedward wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n", 12114154Sedward nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec); 12214073Sedward waitnl(w); 12314073Sedward closewin(w); 12414073Sedward } 12514073Sedward 12614027Sedward doquit() 12714027Sedward { 12814137Sedward wwputs("Really quit [yn]? ", cmdwin); 12914027Sedward wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win)); 13014027Sedward while (bpeekc() < 0) 13114027Sedward bread(); 13214027Sedward if (bgetc() == 'y') { 13314027Sedward wwputs("Yes", cmdwin); 13414027Sedward quit++; 13514027Sedward } else 13614027Sedward wwputs("\r\n", cmdwin); 13714027Sedward } 13814027Sedward 13913979Sedward struct ww * 14013979Sedward openwin(nrow, label) 14113979Sedward char *label; 14213979Sedward { 14313979Sedward register struct ww *w; 14413979Sedward 14514073Sedward if ((w = wwopen(WW_NONE, 0, nrow, wwncol, 1, 0)) == 0) 14613979Sedward return 0; 14713979Sedward wwframe(w); 148*14183Sedward wwlabel(w, (wwncol - strlen(label)) / 2 + 1, label, WINVERSE); 14914027Sedward wwsetcurwin(w); 15013979Sedward return w; 15113979Sedward } 15213979Sedward 15313994Sedward waitnl(w) 15413979Sedward register struct ww *w; 15513979Sedward { 15614027Sedward wwsetcurwin(w); 15713979Sedward wwprintf(w, "\r\nType return to continue: "); 15813979Sedward wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win)); 15913994Sedward while (bgetc() < 0) 16013979Sedward bread(); 16113994Sedward } 16213994Sedward 16313994Sedward closewin(w) 16413994Sedward register struct ww *w; 16513994Sedward { 16613979Sedward wwclose(w); 16714027Sedward wwsetcurwin(cmdwin); 16813979Sedward } 169