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