1*13979Sedward #ifndef lint 2*13979Sedward static char *sccsid = "@(#)cmd2.c 1.1 83/07/18"; 3*13979Sedward #endif 4*13979Sedward 5*13979Sedward #include "defs.h" 6*13979Sedward 7*13979Sedward struct ww *getwin(); 8*13979Sedward struct ww *openwin(); 9*13979Sedward char *strtime(); 10*13979Sedward 11*13979Sedward dohelp() 12*13979Sedward { 13*13979Sedward register struct ww *w; 14*13979Sedward 15*13979Sedward if ((w = openwin(20, "Help")) == 0) 16*13979Sedward return; 17*13979Sedward wwprintf(w, "The escape character is ^P, which gets you into command mode.\r\n"); 18*13979Sedward wwprintf(w, "The commands are:\r\n"); 19*13979Sedward wwprintf(w, "%%[1-9] select window [1-9]\r\n"); 20*13979Sedward wwprintf(w, "[1-9] select window [1-9] and exit command mode\r\n"); 21*13979Sedward wwprintf(w, "c[1-9] close window [1-9]\r\n"); 22*13979Sedward wwprintf(w, "C close all empty windows\r\n"); 23*13979Sedward wwprintf(w, "R force refresh after every newline in current window\r\n"); 24*13979Sedward wwprintf(w, "r don't refresh every line\r\n"); 25*13979Sedward wwprintf(w, "w open a new window\r\n"); 26*13979Sedward wwprintf(w, "s print IO statistics\r\n"); 27*13979Sedward wwprintf(w, "t print resource usage of this program\r\n"); 28*13979Sedward wwprintf(w, "T print resource usage of children\r\n"); 29*13979Sedward wwprintf(w, "escape exit command mode\r\n"); 30*13979Sedward wwprintf(w, "^L redraw screen\r\n"); 31*13979Sedward wwprintf(w, "^Z suspend\r\n"); 32*13979Sedward wwprintf(w, ". quit\r\n"); 33*13979Sedward closewin(w); 34*13979Sedward } 35*13979Sedward 36*13979Sedward dotime(flag) 37*13979Sedward { 38*13979Sedward register struct ww *w; 39*13979Sedward struct rusage rusage; 40*13979Sedward struct timeval timeval; 41*13979Sedward 42*13979Sedward if ((w = openwin(9, "Time")) == 0) 43*13979Sedward return; 44*13979Sedward 45*13979Sedward gettimeofday(&timeval, &timezone); 46*13979Sedward timeval.tv_sec -= starttime.tv_sec; 47*13979Sedward if ((timeval.tv_usec -= starttime.tv_usec) < 0) { 48*13979Sedward timeval.tv_sec--; 49*13979Sedward timeval.tv_usec += 1000000; 50*13979Sedward } 51*13979Sedward getrusage(flag, &rusage); 52*13979Sedward 53*13979Sedward wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n"); 54*13979Sedward wwprintf(w, "%-16s", strtime(&timeval)); 55*13979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_utime)); 56*13979Sedward wwprintf(w, "%-16s", strtime(&rusage.ru_stime)); 57*13979Sedward wwprintf(w, "%D\t%D\t%D\t%D\r\n", 58*13979Sedward rusage.ru_maxrss, rusage.ru_ixrss, 59*13979Sedward rusage.ru_idrss, rusage.ru_isrss); 60*13979Sedward wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n"); 61*13979Sedward wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n", 62*13979Sedward rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap, 63*13979Sedward rusage.ru_inblock, rusage.ru_oublock, 64*13979Sedward rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals, 65*13979Sedward rusage.ru_nvcsw, rusage.ru_nivcsw); 66*13979Sedward 67*13979Sedward closewin(w); 68*13979Sedward } 69*13979Sedward 70*13979Sedward char * 71*13979Sedward strtime(t) 72*13979Sedward register struct timeval *t; 73*13979Sedward { 74*13979Sedward char fill = 0; 75*13979Sedward static char buf[20]; 76*13979Sedward register char *p = buf; 77*13979Sedward 78*13979Sedward if (t->tv_sec > 60*60) { 79*13979Sedward sprintf(p, "%D:", t->tv_sec / (60*60)); 80*13979Sedward while (*p++) 81*13979Sedward ; 82*13979Sedward p--; 83*13979Sedward t->tv_sec %= 60*60; 84*13979Sedward fill++; 85*13979Sedward } 86*13979Sedward if (t->tv_sec > 60) { 87*13979Sedward sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60); 88*13979Sedward while (*p++) 89*13979Sedward ; 90*13979Sedward p--; 91*13979Sedward t->tv_sec %= 60; 92*13979Sedward fill++; 93*13979Sedward } 94*13979Sedward sprintf(p, fill ? "%02D.%02d" : "%D.%02D", 95*13979Sedward t->tv_sec, t->tv_usec / 10000); 96*13979Sedward return buf; 97*13979Sedward } 98*13979Sedward 99*13979Sedward struct ww * 100*13979Sedward openwin(nrow, label) 101*13979Sedward char *label; 102*13979Sedward { 103*13979Sedward register struct ww *w; 104*13979Sedward 105*13979Sedward if ((w = wwopen(WW_NONE, 0, nrow, WCols, 1, 0)) == 0) { 106*13979Sedward wwputs("\r\nCan't open help window. ", cmdwin); 107*13979Sedward return 0; 108*13979Sedward } 109*13979Sedward wwframe(w); 110*13979Sedward wwlabel(w, label, WINVERSE); 111*13979Sedward wwsetcurrent(w); 112*13979Sedward return w; 113*13979Sedward } 114*13979Sedward 115*13979Sedward closewin(w) 116*13979Sedward register struct ww *w; 117*13979Sedward { 118*13979Sedward wwprintf(w, "\r\nType return to continue: "); 119*13979Sedward wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win)); 120*13979Sedward while (bgetc() < 0) { 121*13979Sedward wwflush(); 122*13979Sedward bread(); 123*13979Sedward } 124*13979Sedward wwclose(w); 125*13979Sedward wwsetcurrent(cmdwin); 126*13979Sedward } 127