xref: /csrg-svn/usr.bin/window/cmd2.c (revision 14590)
113979Sedward #ifndef lint
2*14590Sedward static	char *sccsid = "@(#)cmd2.c	3.2 83/08/12";
313979Sedward #endif
413979Sedward 
513979Sedward #include "defs.h"
613979Sedward 
714408Sedward struct ww *openiwin();
813979Sedward 
914408Sedward c_help()
1013979Sedward {
1113979Sedward 	register struct ww *w;
1213979Sedward 
1314408Sedward 	if ((w = openiwin(wwnrow - 2, "Help")) == 0) {
1414408Sedward 		error("Can't open help window.");
1513979Sedward 		return;
1614027Sedward 	}
1714408Sedward 	(void) wwprintf(w, "The escape character is %s, which gets you into command mode.\r\n\n",
1814189Sedward 		unctrl(escapec));
1914408Sedward 	(void) wwprintf(w, "Short commands:\r\n\n");
2014408Sedward 	(void) wwprintf(w, "{1-9}   Select window {1-9} and return to conversation mode.\r\n");
2114408Sedward 	(void) wwprintf(w, "%%{1-9}  Select window {1-9}.\r\n");
2214408Sedward 	(void) wwprintf(w, "c{1-9}  Close window {1-9}.\r\n");
2314408Sedward 	(void) wwprintf(w, "C       Close all windows.\r\n");
2414408Sedward 	(void) wwprintf(w, "S       Show all windows in sequence.\r\n");
2514408Sedward 	(void) wwprintf(w, "L       List all windows with their labels.\r\n");
2614408Sedward 	(void) wwprintf(w, "w       Open a new window.\r\n");
2714408Sedward 	(void) wwprintf(w, "[^U^D]  Scroll [up, down] half a window.\r\n");
2814408Sedward 	(void) wwprintf(w, "[^B^F]  Scroll [up, down] a full window.\r\n");
2914408Sedward 	(void) wwprintf(w, "[hjkl]  Move cursor [left, down, up, right].\r\n");
3014408Sedward 	(void) wwprintf(w, "escape  Exit command mode.\r\n");
3114408Sedward 	(void) wwprintf(w, "^L      Redraw screen.\r\n");
3214408Sedward 	(void) wwprintf(w, "^Z      Suspend.\r\n");
3314408Sedward 	(void) wwprintf(w, ".       Quit.\r\n");
3413994Sedward 	waitnl(w);
3514408Sedward 	(void) wwprintf(w, "Long commands:\r\n\n");
3614408Sedward 	(void) wwprintf(w, ":terse [off]            Turn on (or off) terse mode.\r\n");
3714408Sedward 	(void) wwprintf(w, ":refresh {1-9} [off]    Turn on (or off) refresh after every newline\r\n");
3814408Sedward 	(void) wwprintf(w, "                        for window {1-9}.\r\n");
3914408Sedward 	(void) wwprintf(w, ":label {1-9} string     Label window {1-9}.\r\n");
4014408Sedward 	(void) wwprintf(w, ":escape C               Set escape character to C.\r\n");
4114408Sedward 	(void) wwprintf(w, ":%%{1-9}                 Select window {1-9}.\r\n");
4214408Sedward 	(void) wwprintf(w, ":window r c nr nc       Open a window at row r column c\r\n");
4314408Sedward 	(void) wwprintf(w, "                        with nr rows and nc colomns\r\n");
4414408Sedward 	(void) wwprintf(w, ":source filename        Execute the commands in `filename'.\r\n");
4514189Sedward 	waitnl(w);
4614408Sedward 	closeiwin(w);
4713979Sedward }
4813979Sedward 
4914408Sedward char *strtime();
5014408Sedward 
5114408Sedward c_time(flag)
5213979Sedward {
5313979Sedward 	register struct ww *w;
5413979Sedward 	struct rusage rusage;
5513979Sedward 	struct timeval timeval;
5614408Sedward 	struct timezone timezone;
5713979Sedward 
5814408Sedward 	if ((w = openiwin(6, "Timing and Resource Usage")) == 0) {
5914408Sedward 		error("Can't open time window.");
6013979Sedward 		return;
6114027Sedward 	}
6213979Sedward 
6314408Sedward 	(void) gettimeofday(&timeval, &timezone);
6413979Sedward 	timeval.tv_sec -= starttime.tv_sec;
6513979Sedward 	if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
6613979Sedward 		timeval.tv_sec--;
6713979Sedward 		timeval.tv_usec += 1000000;
6813979Sedward 	}
6914408Sedward 	(void) getrusage(flag, &rusage);
7013979Sedward 
7114408Sedward 	(void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n");
7214408Sedward 	(void) wwprintf(w, "%-16s", strtime(&timeval));
7314408Sedward 	(void) wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
7414408Sedward 	(void) wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
7514408Sedward 	(void) wwprintf(w, "%D\t%D\t%D\t%D\r\n",
7613979Sedward 		rusage.ru_maxrss, rusage.ru_ixrss,
7713979Sedward 		rusage.ru_idrss, rusage.ru_isrss);
7814408Sedward 	(void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n");
7914408Sedward 	(void) wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n",
8013979Sedward 		rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
8113979Sedward 		rusage.ru_inblock, rusage.ru_oublock,
8213979Sedward 		rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
8313979Sedward 		rusage.ru_nvcsw, rusage.ru_nivcsw);
8413979Sedward 
8513994Sedward 	waitnl(w);
8614408Sedward 	closeiwin(w);
8713979Sedward }
8813979Sedward 
8913979Sedward char *
9013979Sedward strtime(t)
9113979Sedward register struct timeval *t;
9213979Sedward {
9313979Sedward 	char fill = 0;
9413979Sedward 	static char buf[20];
9513979Sedward 	register char *p = buf;
9613979Sedward 
9713979Sedward 	if (t->tv_sec > 60*60) {
9814408Sedward 		(void) sprintf(p, "%D:", t->tv_sec / (60*60));
9913979Sedward 		while (*p++)
10013979Sedward 			;
10113979Sedward 		p--;
10213979Sedward 		t->tv_sec %= 60*60;
10313979Sedward 		fill++;
10413979Sedward 	}
10513979Sedward 	if (t->tv_sec > 60) {
10614408Sedward 		(void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
10713979Sedward 		while (*p++)
10813979Sedward 			;
10913979Sedward 		p--;
11013979Sedward 		t->tv_sec %= 60;
11113979Sedward 		fill++;
11213979Sedward 	}
11314408Sedward 	(void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
11413979Sedward 		t->tv_sec, t->tv_usec / 10000);
11513979Sedward 	return buf;
11613979Sedward }
11713979Sedward 
11814408Sedward c_stat()
11914073Sedward {
12014073Sedward 	register struct ww *w;
12114073Sedward 
12214408Sedward 	if ((w = openiwin(6, "IO Statics")) == 0) {
12314408Sedward 		error("Can't open statistics window.");
12414073Sedward 		return;
12514073Sedward 	}
12614408Sedward 	(void) wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n");
12714408Sedward 	(void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n",
12814154Sedward 		nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec);
12914073Sedward 	waitnl(w);
13014408Sedward 	closeiwin(w);
13114073Sedward }
13214073Sedward 
13314408Sedward c_list()
13414189Sedward {
13514408Sedward 	register struct ww *w;
13614408Sedward 	register i;
13714408Sedward 	int n;
13814189Sedward 
13914408Sedward 	for (n = 0, i = 0; i < NWINDOW; i++)
14014408Sedward 		if (window[i] != 0)
14114408Sedward 			n++;
142*14590Sedward 	if ((w = openiwin(MAX(n, 1) + 2, "Active Windows")) == 0) {
14314408Sedward 		error("Can't open listing window.");
14414189Sedward 		return;
14514189Sedward 	}
14614408Sedward 	if (n == 0) {
14714408Sedward 		(void) wwputs("No windows.\r\n", w);
14814408Sedward 	} else {
14914408Sedward 		for (i = 0; i < NWINDOW; i++) {
15014408Sedward 			if (window[i] == 0)
15114408Sedward 				continue;
15214408Sedward 			(void) wwprintf(w, "%c   %s\r\n", i + '1',
15314408Sedward 				window[i]->ww_label ? window[i]->ww_label
15414408Sedward 					: "(No label)");
15514408Sedward 		}
15614189Sedward 	}
15714189Sedward 	waitnl(w);
15814408Sedward 	closeiwin(w);
15914189Sedward }
16014189Sedward 
16114408Sedward c_quit()
16214027Sedward {
16314189Sedward 	if (terse)
16414408Sedward 		wwadd(cmdwin, &wwhead);
16514408Sedward 	(void) wwputs("Really quit [yn]? ", cmdwin);
16614408Sedward 	wwcurtowin(cmdwin);
16714027Sedward 	while (bpeekc() < 0)
16814027Sedward 		bread();
16914027Sedward 	if (bgetc() == 'y') {
17014408Sedward 		(void) wwputs("Yes", cmdwin);
17114027Sedward 		quit++;
17214027Sedward 	} else
17314408Sedward 		(void) wwputs("\r\n", cmdwin);
17414408Sedward 	if (terse && !quit)
17514408Sedward 		wwdelete(cmdwin);
17614027Sedward }
17714027Sedward 
17814408Sedward /*
17914408Sedward  * Open an information window.
18014408Sedward  */
18113979Sedward struct ww *
18214408Sedward openiwin(nrow, label)
18313979Sedward char *label;
18413979Sedward {
18513979Sedward 	register struct ww *w;
18613979Sedward 
18714408Sedward 	if ((w = wwopen(0, nrow, wwncol, 2, 0, 0)) == 0)
18813979Sedward 		return 0;
18914408Sedward 	/*
19014408Sedward 	w->ww_mapnl = 1;
19114408Sedward 	*/
19214408Sedward 	w->ww_hasframe = 1;
19314408Sedward 	w->ww_id = -1;
19414408Sedward 	w->ww_center = 1;
19514408Sedward 	(void) setlabel(w, label);
19614408Sedward 	wwadd(w, framewin);
19714408Sedward 	reframe();
19813979Sedward 	return w;
19913979Sedward }
20013979Sedward 
20113994Sedward waitnl(w)
20213979Sedward register struct ww *w;
20313979Sedward {
20414408Sedward 	if (w->ww_back != framewin) {
20514408Sedward 		(void) wwputs("reframed", w);
20614408Sedward 		wwdelete(w);
20714408Sedward 		wwadd(w, framewin);
20814408Sedward 		reframe();
20914408Sedward 	}
21014408Sedward 	(void) wwputs("\r\nType return to continue: ", w);
21114408Sedward 	wwcurtowin(w);
21213994Sedward 	while (bgetc() < 0)
21313979Sedward 		bread();
21414408Sedward 	(void) wwputs("\033E", w);		/* clear and home cursor */
21513994Sedward }
21613994Sedward 
21714408Sedward closeiwin(w)
21814408Sedward struct ww *w;
21913994Sedward {
22014408Sedward 	closewin(w);
22114408Sedward 	reframe();
22213979Sedward }
223