xref: /csrg-svn/usr.bin/window/cmd2.c (revision 14183)
113979Sedward #ifndef lint
2*14183Sedward static	char *sccsid = "@(#)cmd2.c	1.7 83/07/28";
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*14183Sedward 	if ((w = openwin(wwncol - 1, "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");
2114137Sedward 	wwprintf(w, "[1-9]   Select window [1-9] and exit command mode.\r\n");
2214137Sedward 	wwprintf(w, "%%[1-9]  Select window [1-9].\r\n");
2314137Sedward 	wwprintf(w, "c[1-9]  Close window [1-9].\r\n");
24*14183Sedward 	wwprintf(w, "C       Close all windows.\r\n");
25*14183Sedward 	wwprintf(w, "S       Show all windows in sequence.\r\n");
2614137Sedward 	wwprintf(w, "R       Force refresh after every newline (current window only).\r\n");
2714137Sedward 	wwprintf(w, "r       Don't refresh every line.\r\n");
2814137Sedward 	wwprintf(w, "w       Open a new window.\r\n");
2914137Sedward 	wwprintf(w, "^U      Scroll up.\r\n");
3014137Sedward 	wwprintf(w, "^D      Scroll down.\r\n");
3114137Sedward 	wwprintf(w, "[hjkl]  Move cursor [left, down, up, right].\r\n");
3214137Sedward 	/*
3314137Sedward 	wwprintf(w, "s       Print IO statistics.\r\n");
3414137Sedward 	wwprintf(w, "t       Print resource usage of this program.\r\n");
3514137Sedward 	wwprintf(w, "T       Print resource usage of children.\r\n");
3614137Sedward 	*/
3714137Sedward 	wwprintf(w, "escape  Exit command mode.\r\n");
3814137Sedward 	wwprintf(w, "^L      Redraw screen.\r\n");
3914137Sedward 	wwprintf(w, "^Z      Suspend.\r\n");
4014137Sedward 	wwprintf(w, ".       Quit.\r\n");
4113994Sedward 	waitnl(w);
4213979Sedward 	closewin(w);
4313979Sedward }
4413979Sedward 
4513979Sedward dotime(flag)
4613979Sedward {
4713979Sedward 	register struct ww *w;
4813979Sedward 	struct rusage rusage;
4913979Sedward 	struct timeval timeval;
5013979Sedward 
5114073Sedward 	if ((w = openwin(8, "Timing and Resource Usage")) == 0) {
5214027Sedward 		wwputs("Can't open time window.  ", cmdwin);
5313979Sedward 		return;
5414027Sedward 	}
5513979Sedward 
5613979Sedward 	gettimeofday(&timeval, &timezone);
5713979Sedward 	timeval.tv_sec -= starttime.tv_sec;
5813979Sedward 	if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
5913979Sedward 		timeval.tv_sec--;
6013979Sedward 		timeval.tv_usec += 1000000;
6113979Sedward 	}
6213979Sedward 	getrusage(flag, &rusage);
6313979Sedward 
6413979Sedward 	wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n");
6513979Sedward 	wwprintf(w, "%-16s", strtime(&timeval));
6613979Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
6713979Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
6813979Sedward 	wwprintf(w, "%D\t%D\t%D\t%D\r\n",
6913979Sedward 		rusage.ru_maxrss, rusage.ru_ixrss,
7013979Sedward 		rusage.ru_idrss, rusage.ru_isrss);
7113979Sedward 	wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n");
7213979Sedward 	wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n",
7313979Sedward 		rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
7413979Sedward 		rusage.ru_inblock, rusage.ru_oublock,
7513979Sedward 		rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
7613979Sedward 		rusage.ru_nvcsw, rusage.ru_nivcsw);
7713979Sedward 
7813994Sedward 	waitnl(w);
7913979Sedward 	closewin(w);
8013979Sedward }
8113979Sedward 
8213979Sedward char *
8313979Sedward strtime(t)
8413979Sedward register struct timeval *t;
8513979Sedward {
8613979Sedward 	char fill = 0;
8713979Sedward 	static char buf[20];
8813979Sedward 	register char *p = buf;
8913979Sedward 
9013979Sedward 	if (t->tv_sec > 60*60) {
9113979Sedward 		sprintf(p, "%D:", t->tv_sec / (60*60));
9213979Sedward 		while (*p++)
9313979Sedward 			;
9413979Sedward 		p--;
9513979Sedward 		t->tv_sec %= 60*60;
9613979Sedward 		fill++;
9713979Sedward 	}
9813979Sedward 	if (t->tv_sec > 60) {
9913979Sedward 		sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
10013979Sedward 		while (*p++)
10113979Sedward 			;
10213979Sedward 		p--;
10313979Sedward 		t->tv_sec %= 60;
10413979Sedward 		fill++;
10513979Sedward 	}
10613979Sedward 	sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
10713979Sedward 		t->tv_sec, t->tv_usec / 10000);
10813979Sedward 	return buf;
10913979Sedward }
11013979Sedward 
11114073Sedward dostat()
11214073Sedward {
11314073Sedward 	register struct ww *w;
11414073Sedward 
11514154Sedward 	if ((w = openwin(6, "IO Statics")) == 0) {
11614073Sedward 		wwputs("Can't open statistics window.  ", cmdwin);
11714073Sedward 		return;
11814073Sedward 	}
11914154Sedward 	wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n");
12014154Sedward 	wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n",
12114154Sedward 		nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec);
12214073Sedward 	waitnl(w);
12314073Sedward 	closewin(w);
12414073Sedward }
12514073Sedward 
12614027Sedward doquit()
12714027Sedward {
12814137Sedward 	wwputs("Really quit [yn]? ", cmdwin);
12914027Sedward 	wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win));
13014027Sedward 	while (bpeekc() < 0)
13114027Sedward 		bread();
13214027Sedward 	if (bgetc() == 'y') {
13314027Sedward 		wwputs("Yes", cmdwin);
13414027Sedward 		quit++;
13514027Sedward 	} else
13614027Sedward 		wwputs("\r\n", cmdwin);
13714027Sedward }
13814027Sedward 
13913979Sedward struct ww *
14013979Sedward openwin(nrow, label)
14113979Sedward char *label;
14213979Sedward {
14313979Sedward 	register struct ww *w;
14413979Sedward 
14514073Sedward 	if ((w = wwopen(WW_NONE, 0, nrow, wwncol, 1, 0)) == 0)
14613979Sedward 		return 0;
14713979Sedward 	wwframe(w);
148*14183Sedward 	wwlabel(w, (wwncol - strlen(label)) / 2 + 1, label, WINVERSE);
14914027Sedward 	wwsetcurwin(w);
15013979Sedward 	return w;
15113979Sedward }
15213979Sedward 
15313994Sedward waitnl(w)
15413979Sedward register struct ww *w;
15513979Sedward {
15614027Sedward 	wwsetcurwin(w);
15713979Sedward 	wwprintf(w, "\r\nType return to continue: ");
15813979Sedward 	wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win));
15913994Sedward 	while (bgetc() < 0)
16013979Sedward 		bread();
16113994Sedward }
16213994Sedward 
16313994Sedward closewin(w)
16413994Sedward register struct ww *w;
16513994Sedward {
16613979Sedward 	wwclose(w);
16714027Sedward 	wwsetcurwin(cmdwin);
16813979Sedward }
169