113979Sedward #ifndef lint 2*14027Sedward static char *sccsid = "@(#)cmd2.c 1.3 83/07/20"; 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*14027Sedward if ((w = openwin(22, "Help")) == 0) { 16*14027Sedward wwputs("Can't open help window. ", cmdwin); 1713979Sedward return; 18*14027Sedward } 1913979Sedward wwprintf(w, "The escape character is ^P, which gets you into command mode.\r\n"); 2013979Sedward wwprintf(w, "The commands are:\r\n"); 21*14027Sedward wwprintf(w, "[1-9] Select window [1-9] and exit command mode\r\n"); 22*14027Sedward wwprintf(w, "%%[1-9] Select window [1-9]\r\n"); 23*14027Sedward wwprintf(w, "c[1-9] Close window [1-9]\r\n"); 24*14027Sedward wwprintf(w, "C Close all empty windows\r\n"); 25*14027Sedward wwprintf(w, "Z Close all windows\r\n"); 26*14027Sedward wwprintf(w, "Q Show all windows in sequence\r\n"); 27*14027Sedward wwprintf(w, "R Force refresh after every newline in current window\r\n"); 28*14027Sedward wwprintf(w, "r Don't refresh every line\r\n"); 29*14027Sedward wwprintf(w, "w Open a new window\r\n"); 30*14027Sedward wwprintf(w, "s Print IO statistics\r\n"); 31*14027Sedward wwprintf(w, "t Print resource usage of this program\r\n"); 32*14027Sedward wwprintf(w, "T Print resource usage of children\r\n"); 33*14027Sedward wwprintf(w, "escape Exit command mode\r\n"); 34*14027Sedward wwprintf(w, "^L Redraw screen\r\n"); 35*14027Sedward wwprintf(w, "^Z Suspend\r\n"); 36*14027Sedward 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*14027Sedward if ((w = openwin(8, "Time")) == 0) { 48*14027Sedward wwputs("Can't open time window. ", cmdwin); 4913979Sedward return; 50*14027Sedward } 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*14027Sedward doquit() 108*14027Sedward { 109*14027Sedward wwputs("Really quit? ", cmdwin); 110*14027Sedward wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win)); 111*14027Sedward while (bpeekc() < 0) 112*14027Sedward bread(); 113*14027Sedward if (bgetc() == 'y') { 114*14027Sedward wwputs("Yes", cmdwin); 115*14027Sedward quit++; 116*14027Sedward } else 117*14027Sedward wwputs("\r\n", cmdwin); 118*14027Sedward } 119*14027Sedward 12013979Sedward struct ww * 12113979Sedward openwin(nrow, label) 12213979Sedward char *label; 12313979Sedward { 12413979Sedward register struct ww *w; 12513979Sedward 126*14027Sedward if ((w = wwopen(WW_NONE, 0, nrow, WCols, 1, 0)) == 0) 12713979Sedward return 0; 12813979Sedward wwframe(w); 12913979Sedward wwlabel(w, label, WINVERSE); 130*14027Sedward wwsetcurwin(w); 13113979Sedward return w; 13213979Sedward } 13313979Sedward 13413994Sedward waitnl(w) 13513979Sedward register struct ww *w; 13613979Sedward { 137*14027Sedward wwsetcurwin(w); 13813979Sedward wwprintf(w, "\r\nType return to continue: "); 13913979Sedward wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win)); 14013994Sedward while (bgetc() < 0) 14113979Sedward bread(); 14213994Sedward } 14313994Sedward 14413994Sedward closewin(w) 14513994Sedward register struct ww *w; 14613994Sedward { 14713979Sedward wwclose(w); 148*14027Sedward wwsetcurwin(cmdwin); 14913979Sedward } 150