xref: /csrg-svn/usr.bin/window/cmd2.c (revision 14073)
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