xref: /csrg-svn/usr.bin/window/cmd2.c (revision 14189)
113979Sedward #ifndef lint
2*14189Sedward static	char *sccsid = "@(#)cmd2.c	1.8 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*14189Sedward 	if ((w = openwin(wwnrow - 1, "Help")) == 0) {
16*14189Sedward 		if (terse)
17*14189Sedward 			Ding();
18*14189Sedward 		else
19*14189Sedward 			wwputs("Can't open help window.  ", cmdwin);
2013979Sedward 		return;
2114027Sedward 	}
22*14189Sedward 	wwprintf(w, "The escape character is %s, which gets you into command mode.\r\n\n",
23*14189Sedward 		unctrl(escapec));
24*14189Sedward 	wwprintf(w, "Short commands:\r\n\n");
25*14189Sedward 	wwprintf(w, "{1-9}   Select window {1-9} and return to conversation mode.\r\n");
26*14189Sedward 	wwprintf(w, "%%{1-9}  Select window {1-9}.\r\n");
27*14189Sedward 	wwprintf(w, "c{1-9}  Close window {1-9}.\r\n");
2814183Sedward 	wwprintf(w, "C       Close all windows.\r\n");
2914183Sedward 	wwprintf(w, "S       Show all windows in sequence.\r\n");
30*14189Sedward 	wwprintf(w, "L       List all windows with their labels.\r\n");
3114137Sedward 	wwprintf(w, "w       Open a new window.\r\n");
32*14189Sedward 	wwprintf(w, "[^U^D]  Scroll [up, down] half a window.\r\n");
33*14189Sedward 	wwprintf(w, "[^B^F]  Scroll [up, down] a full window.\r\n");
3414137Sedward 	wwprintf(w, "[hjkl]  Move cursor [left, down, up, right].\r\n");
3514137Sedward 	wwprintf(w, "escape  Exit command mode.\r\n");
3614137Sedward 	wwprintf(w, "^L      Redraw screen.\r\n");
3714137Sedward 	wwprintf(w, "^Z      Suspend.\r\n");
3814137Sedward 	wwprintf(w, ".       Quit.\r\n");
3913994Sedward 	waitnl(w);
40*14189Sedward 	wwprintf(w, "Long commands:\r\n\n");
41*14189Sedward 	wwprintf(w, ":terse [off]            Turn on (or off) terse mode.\r\n");
42*14189Sedward 	wwprintf(w, ":refresh {1-9} [off]    Turn on (or off) refresh after every newline\r\n");
43*14189Sedward 	wwprintf(w, "                        for window {1-9}.\r\n");
44*14189Sedward 	wwprintf(w, ":label {1-9} string     Label window {1-9}.\r\n");
45*14189Sedward 	wwprintf(w, ":escape c               Set escape character to c.\r\n");
46*14189Sedward 	wwprintf(w, ":%{1-9}                 Select window {1-9}.\r\n");
47*14189Sedward 	wwprintf(w, ":window r c nr nc       Open a window at row r column c\r\n");
48*14189Sedward 	wwprintf(w, "                        with nr rows and nc colomns\r\n");
49*14189Sedward 	waitnl(w);
5013979Sedward 	closewin(w);
5113979Sedward }
5213979Sedward 
5313979Sedward dotime(flag)
5413979Sedward {
5513979Sedward 	register struct ww *w;
5613979Sedward 	struct rusage rusage;
5713979Sedward 	struct timeval timeval;
5813979Sedward 
5914073Sedward 	if ((w = openwin(8, "Timing and Resource Usage")) == 0) {
60*14189Sedward 		if (terse)
61*14189Sedward 			Ding();
62*14189Sedward 		else
63*14189Sedward 			wwputs("Can't open time window.  ", cmdwin);
6413979Sedward 		return;
6514027Sedward 	}
6613979Sedward 
6713979Sedward 	gettimeofday(&timeval, &timezone);
6813979Sedward 	timeval.tv_sec -= starttime.tv_sec;
6913979Sedward 	if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
7013979Sedward 		timeval.tv_sec--;
7113979Sedward 		timeval.tv_usec += 1000000;
7213979Sedward 	}
7313979Sedward 	getrusage(flag, &rusage);
7413979Sedward 
7513979Sedward 	wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n");
7613979Sedward 	wwprintf(w, "%-16s", strtime(&timeval));
7713979Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
7813979Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
7913979Sedward 	wwprintf(w, "%D\t%D\t%D\t%D\r\n",
8013979Sedward 		rusage.ru_maxrss, rusage.ru_ixrss,
8113979Sedward 		rusage.ru_idrss, rusage.ru_isrss);
8213979Sedward 	wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n");
8313979Sedward 	wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n",
8413979Sedward 		rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
8513979Sedward 		rusage.ru_inblock, rusage.ru_oublock,
8613979Sedward 		rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
8713979Sedward 		rusage.ru_nvcsw, rusage.ru_nivcsw);
8813979Sedward 
8913994Sedward 	waitnl(w);
9013979Sedward 	closewin(w);
9113979Sedward }
9213979Sedward 
9313979Sedward char *
9413979Sedward strtime(t)
9513979Sedward register struct timeval *t;
9613979Sedward {
9713979Sedward 	char fill = 0;
9813979Sedward 	static char buf[20];
9913979Sedward 	register char *p = buf;
10013979Sedward 
10113979Sedward 	if (t->tv_sec > 60*60) {
10213979Sedward 		sprintf(p, "%D:", t->tv_sec / (60*60));
10313979Sedward 		while (*p++)
10413979Sedward 			;
10513979Sedward 		p--;
10613979Sedward 		t->tv_sec %= 60*60;
10713979Sedward 		fill++;
10813979Sedward 	}
10913979Sedward 	if (t->tv_sec > 60) {
11013979Sedward 		sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
11113979Sedward 		while (*p++)
11213979Sedward 			;
11313979Sedward 		p--;
11413979Sedward 		t->tv_sec %= 60;
11513979Sedward 		fill++;
11613979Sedward 	}
11713979Sedward 	sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
11813979Sedward 		t->tv_sec, t->tv_usec / 10000);
11913979Sedward 	return buf;
12013979Sedward }
12113979Sedward 
12214073Sedward dostat()
12314073Sedward {
12414073Sedward 	register struct ww *w;
12514073Sedward 
12614154Sedward 	if ((w = openwin(6, "IO Statics")) == 0) {
127*14189Sedward 		if (terse)
128*14189Sedward 			Ding();
129*14189Sedward 		else
130*14189Sedward 			wwputs("Can't open statistics window.  ", cmdwin);
13114073Sedward 		return;
13214073Sedward 	}
13314154Sedward 	wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n");
13414154Sedward 	wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n",
13514154Sedward 		nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec);
13614073Sedward 	waitnl(w);
13714073Sedward 	closewin(w);
13814073Sedward }
13914073Sedward 
140*14189Sedward dolist()
141*14189Sedward {
142*14189Sedward 	register struct ww *w, *w1;
143*14189Sedward 	int id;
144*14189Sedward 	char doneit = 0;
145*14189Sedward 
146*14189Sedward 	if ((w = openwin(14, "Active Windows")) == 0) {
147*14189Sedward 		if (terse)
148*14189Sedward 			Ding();
149*14189Sedward 		else
150*14189Sedward 			wwputs("Can't open listing window.  ", cmdwin);
151*14189Sedward 		return;
152*14189Sedward 	}
153*14189Sedward 	for (id = 1; id <= NWINDOW; id++) {
154*14189Sedward 		if ((w1 = wwfind(id)) == 0)
155*14189Sedward 			continue;
156*14189Sedward 		doneit = 1;
157*14189Sedward 		wwprintf(w, "%d   %s\r\n", id, w1->ww_label);
158*14189Sedward 	}
159*14189Sedward 	if (!doneit)
160*14189Sedward 		wwprintf(w, "No windows.\r\n");
161*14189Sedward 	waitnl(w);
162*14189Sedward 	closewin(w);
163*14189Sedward }
164*14189Sedward 
16514027Sedward doquit()
16614027Sedward {
167*14189Sedward 	if (terse)
168*14189Sedward 		Wunhide(cmdwin->ww_win);
16914137Sedward 	wwputs("Really quit [yn]? ", cmdwin);
17014027Sedward 	wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win));
17114027Sedward 	while (bpeekc() < 0)
17214027Sedward 		bread();
17314027Sedward 	if (bgetc() == 'y') {
17414027Sedward 		wwputs("Yes", cmdwin);
17514027Sedward 		quit++;
17614027Sedward 	} else
17714027Sedward 		wwputs("\r\n", cmdwin);
178*14189Sedward 	if (terse)
179*14189Sedward 		Whide(cmdwin->ww_win);
18014027Sedward }
18114027Sedward 
18213979Sedward struct ww *
18313979Sedward openwin(nrow, label)
18413979Sedward char *label;
18513979Sedward {
18613979Sedward 	register struct ww *w;
187*14189Sedward 	int startcol;
18813979Sedward 
189*14189Sedward 	if ((w = wwopen(WW_NONE, 0, nrow, wwncol, 0, 0)) == 0)
19013979Sedward 		return 0;
19113979Sedward 	wwframe(w);
192*14189Sedward 	if ((startcol = (wwncol - strlen(label)) / 2) <= 0)
193*14189Sedward 		startcol = 1;
194*14189Sedward 	wwlabel(w, startcol, label, WINVERSE);
19514027Sedward 	wwsetcurwin(w);
19613979Sedward 	return w;
19713979Sedward }
19813979Sedward 
19913994Sedward waitnl(w)
20013979Sedward register struct ww *w;
20113979Sedward {
20214027Sedward 	wwsetcurwin(w);
20313979Sedward 	wwprintf(w, "\r\nType return to continue: ");
20413979Sedward 	wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win));
20513994Sedward 	while (bgetc() < 0)
20613979Sedward 		bread();
207*14189Sedward 	wwputs("\033E", w);			/* clear and home cursor */
20813994Sedward }
20913994Sedward 
21013994Sedward closewin(w)
21113994Sedward register struct ww *w;
21213994Sedward {
21313979Sedward 	wwclose(w);
21414027Sedward 	wwsetcurwin(cmdwin);
21513979Sedward }
216