113979Sedward #ifndef lint 2*14073Sedward static char *sccsid = "@(#)cmd2.c 1.4 83/07/22"; 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 1514027Sedward if ((w = openwin(22, "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"); 2114027Sedward wwprintf(w, "[1-9] Select window [1-9] and exit command mode\r\n"); 2214027Sedward wwprintf(w, "%%[1-9] Select window [1-9]\r\n"); 2314027Sedward wwprintf(w, "c[1-9] Close window [1-9]\r\n"); 2414027Sedward wwprintf(w, "C Close all empty windows\r\n"); 2514027Sedward wwprintf(w, "Z Close all windows\r\n"); 2614027Sedward wwprintf(w, "Q Show all windows in sequence\r\n"); 2714027Sedward wwprintf(w, "R Force refresh after every newline in current window\r\n"); 2814027Sedward wwprintf(w, "r Don't refresh every line\r\n"); 2914027Sedward wwprintf(w, "w Open a new window\r\n"); 3014027Sedward wwprintf(w, "s Print IO statistics\r\n"); 3114027Sedward wwprintf(w, "t Print resource usage of this program\r\n"); 3214027Sedward wwprintf(w, "T Print resource usage of children\r\n"); 3314027Sedward wwprintf(w, "escape Exit command mode\r\n"); 3414027Sedward wwprintf(w, "^L Redraw screen\r\n"); 3514027Sedward wwprintf(w, "^Z Suspend\r\n"); 3614027Sedward wwprintf(w, ". Quit\r\n"); 3713994Sedward waitnl(w); 3813979Sedward closewin(w); 3913979Sedward } 4013979Sedward 4113979Sedward dotime(flag) 4213979Sedward { 4313979Sedward register struct ww *w; 4413979Sedward struct rusage rusage; 4513979Sedward struct timeval timeval; 4613979Sedward 47*14073Sedward if ((w = openwin(8, "Timing and Resource Usage")) == 0) { 4814027Sedward wwputs("Can't open time window. ", cmdwin); 4913979Sedward return; 5014027Sedward } 5113979Sedward 5213979Sedward gettimeofday(&timeval, &timezone); 5313979Sedward timeval.tv_sec -= starttime.tv_sec; 5413979Sedward if ((timeval.tv_usec -= starttime.tv_usec) < 0) { 5513979Sedward timeval.tv_sec--; 5613979Sedward timeval.tv_usec += 1000000; 5713979Sedward } 5813979Sedward getrusage(flag, &rusage); 5913979Sedward 6013979Sedward wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n"); 6113979Sedward wwprintf(w, "%-16s", strtime(&timeval)); 6213979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_utime)); 6313979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_stime)); 6413979Sedward wwprintf(w, "%D\t%D\t%D\t%D\r\n", 6513979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 6613979Sedward rusage.ru_idrss, rusage.ru_isrss); 6713979Sedward wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n"); 6813979Sedward wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n", 6913979Sedward rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap, 7013979Sedward rusage.ru_inblock, rusage.ru_oublock, 7113979Sedward rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals, 7213979Sedward rusage.ru_nvcsw, rusage.ru_nivcsw); 7313979Sedward 7413994Sedward waitnl(w); 7513979Sedward closewin(w); 7613979Sedward } 7713979Sedward 7813979Sedward char * 7913979Sedward strtime(t) 8013979Sedward register struct timeval *t; 8113979Sedward { 8213979Sedward char fill = 0; 8313979Sedward static char buf[20]; 8413979Sedward register char *p = buf; 8513979Sedward 8613979Sedward if (t->tv_sec > 60*60) { 8713979Sedward sprintf(p, "%D:", t->tv_sec / (60*60)); 8813979Sedward while (*p++) 8913979Sedward ; 9013979Sedward p--; 9113979Sedward t->tv_sec %= 60*60; 9213979Sedward fill++; 9313979Sedward } 9413979Sedward if (t->tv_sec > 60) { 9513979Sedward sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 9613979Sedward while (*p++) 9713979Sedward ; 9813979Sedward p--; 9913979Sedward t->tv_sec %= 60; 10013979Sedward fill++; 10113979Sedward } 10213979Sedward sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 10313979Sedward t->tv_sec, t->tv_usec / 10000); 10413979Sedward return buf; 10513979Sedward } 10613979Sedward 107*14073Sedward dostat() 108*14073Sedward { 109*14073Sedward register struct ww *w; 110*14073Sedward 111*14073Sedward if ((w = openwin(22, "IO Statics")) == 0) { 112*14073Sedward wwputs("Can't open statistics window. ", cmdwin); 113*14073Sedward return; 114*14073Sedward } 115*14073Sedward wwprintf(w, "nread: %d\r\n", nread); 116*14073Sedward waitnl(w); 117*14073Sedward closewin(w); 118*14073Sedward } 119*14073Sedward 12014027Sedward doquit() 12114027Sedward { 12214027Sedward wwputs("Really quit? ", cmdwin); 12314027Sedward wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win)); 12414027Sedward while (bpeekc() < 0) 12514027Sedward bread(); 12614027Sedward if (bgetc() == 'y') { 12714027Sedward wwputs("Yes", cmdwin); 12814027Sedward quit++; 12914027Sedward } else 13014027Sedward wwputs("\r\n", cmdwin); 13114027Sedward } 13214027Sedward 13313979Sedward struct ww * 13413979Sedward openwin(nrow, label) 13513979Sedward char *label; 13613979Sedward { 13713979Sedward register struct ww *w; 13813979Sedward 139*14073Sedward if ((w = wwopen(WW_NONE, 0, nrow, wwncol, 1, 0)) == 0) 14013979Sedward return 0; 14113979Sedward wwframe(w); 14213979Sedward wwlabel(w, label, WINVERSE); 14314027Sedward wwsetcurwin(w); 14413979Sedward return w; 14513979Sedward } 14613979Sedward 14713994Sedward waitnl(w) 14813979Sedward register struct ww *w; 14913979Sedward { 15014027Sedward wwsetcurwin(w); 15113979Sedward wwprintf(w, "\r\nType return to continue: "); 15213979Sedward wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win)); 15313994Sedward while (bgetc() < 0) 15413979Sedward bread(); 15513994Sedward } 15613994Sedward 15713994Sedward closewin(w) 15813994Sedward register struct ww *w; 15913994Sedward { 16013979Sedward wwclose(w); 16114027Sedward wwsetcurwin(cmdwin); 16213979Sedward } 163