xref: /csrg-svn/usr.bin/window/cmd2.c (revision 16281)
113979Sedward #ifndef lint
2*16281Sedward static	char *sccsid = "@(#)cmd2.c	3.24 84/04/05";
313979Sedward #endif
413979Sedward 
513979Sedward #include "defs.h"
613979Sedward 
715675Sedward char *help_shortcmd[] = {
815675Sedward 	"{1-9}   Select window {1-9} and return to conversation mode.",
915675Sedward 	"%{1-9}  Select window {1-9} but stay in command mode.",
1015675Sedward 	"escape  Return to conversation mode",
1115675Sedward 	"        and don't change the current window.",
1215675Sedward 	"^^      Return to conversation mode",
1315675Sedward 	"        and change to previously selected window.",
1415675Sedward 	"c{1-9}  Close window {1-9}.",
1515675Sedward 	"C       Close all windows.",
1615675Sedward 	"S       Show all windows in sequence.",
1715675Sedward 	"L       List all windows with their labels.",
1815675Sedward 	"w       Open a new window.",
1915675Sedward 	"m{1-9}  Move window {1-9}.",
2015675Sedward 	"M{1-9}  Move window {1-9} to previous position.",
2115675Sedward 	"v       List all variables.",
2215675Sedward 	"{^Y^E}  Scroll {up, down} one line",
2315675Sedward 	"{^U^D}  Scroll {up, down} half a window.",
2415675Sedward 	"{^B^F}  Scroll {up, down} a full window.",
2515675Sedward 	"{hjkl}  Move cursor {left, down, up, right}.",
2615675Sedward 	"^L      Redraw screen.",
2715675Sedward 	"^Z      Suspend.",
2815675Sedward 	"q       Quit.",
2915675Sedward 	0
3015675Sedward };
3115675Sedward char *help_longcmd[] = {
3215675Sedward 	":%{1-9}               Select window {1-9}.",
3315675Sedward 	":buffer lines         Set the default window buffer size.",
3415675Sedward 	":close {1-9}          Close window.",
3515675Sedward 	":cursor modes         Set the cursor modes.",
3615675Sedward 	":escape C             Set escape character to C.",
3715675Sedward 	":label {1-9} string   Label window {1-9}.",
3815675Sedward 	":source filename      Execute commands in ``filename''.",
3915675Sedward 	":terse [off]          Turn on (or off) terse mode.",
4015845Sedward 	":unset variable       Deallocate ``variable''.",
4115675Sedward 	":window row col nrow ncol [nline label]",
4215675Sedward 	"                      Open a window at ``row'', ``col''",
4315675Sedward 	"                      of size ``nrow'', ``ncol'',",
4415675Sedward 	"                      with ``nline'', and ``label''.",
4515675Sedward 	":write {1-9} string   Write ``string'' to window {1-9}.",
4615675Sedward 	0
4715675Sedward };
4815675Sedward 
4914408Sedward c_help()
5013979Sedward {
5113979Sedward 	register struct ww *w;
5213979Sedward 
5314665Sedward 	if ((w = openiwin(wwnrow - 3, "Help")) == 0) {
5414857Sedward 		error("Can't open help window: %s.", wwerror());
5513979Sedward 		return;
5614027Sedward 	}
5716116Sedward 	wwprintf(w, "The escape character is %s, which gets you into command mode.\n\n",
5814189Sedward 		unctrl(escapec));
5915856Sedward 	if (help_print(w, "Short commands", help_shortcmd) >= 0)
6015856Sedward 		(void) help_print(w, "Long commands", help_longcmd);
6114408Sedward 	closeiwin(w);
6213979Sedward }
6313979Sedward 
6415675Sedward help_print(w, name, list)
6515675Sedward register struct ww *w;
6615675Sedward char *name;
6715856Sedward register char **list;
6815675Sedward {
6916116Sedward 	wwprintf(w, "%s:\n\n", name);
7015856Sedward 	while (*list)
7115856Sedward 		switch (more(w, 0)) {
7215856Sedward 		case 0:
7316116Sedward 			wwputs(*list++, w);
7416116Sedward 			wwputc('\n', w);
7515856Sedward 			break;
7615856Sedward 		case 1:
7716116Sedward 			wwprintf(w, "%s: (continued)\n\n", name);
7815856Sedward 			break;
7915856Sedward 		case 2:
8015856Sedward 			return -1;
8115675Sedward 		}
8215856Sedward 	return more(w, 1) == 2 ? -1 : 0;
8315675Sedward }
8415675Sedward 
8515364Sedward #ifndef O_4_1A
8614408Sedward char *strtime();
8714408Sedward 
8814408Sedward c_time(flag)
8913979Sedward {
9013979Sedward 	register struct ww *w;
9113979Sedward 	struct rusage rusage;
9213979Sedward 	struct timeval timeval;
9313979Sedward 
9414408Sedward 	if ((w = openiwin(6, "Timing and Resource Usage")) == 0) {
9514857Sedward 		error("Can't open time window: %s.", wwerror());
9613979Sedward 		return;
9714027Sedward 	}
9813979Sedward 
9916116Sedward 	(void) gettimeofday(&timeval, (struct timezone *)0);
10013979Sedward 	timeval.tv_sec -= starttime.tv_sec;
10113979Sedward 	if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
10213979Sedward 		timeval.tv_sec--;
10313979Sedward 		timeval.tv_usec += 1000000;
10413979Sedward 	}
10514408Sedward 	(void) getrusage(flag, &rusage);
10613979Sedward 
10716116Sedward 	wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n");
10816116Sedward 	wwprintf(w, "%-16s", strtime(&timeval));
10916116Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
11016116Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
11116116Sedward 	wwprintf(w, "%D\t%D\t%D\t%D\n",
11213979Sedward 		rusage.ru_maxrss, rusage.ru_ixrss,
11313979Sedward 		rusage.ru_idrss, rusage.ru_isrss);
11416116Sedward 	wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n");
11516116Sedward 	wwprintf(w, "%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\n",
11613979Sedward 		rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
11713979Sedward 		rusage.ru_inblock, rusage.ru_oublock,
11813979Sedward 		rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
11913979Sedward 		rusage.ru_nvcsw, rusage.ru_nivcsw);
12013979Sedward 
12113994Sedward 	waitnl(w);
12214408Sedward 	closeiwin(w);
12313979Sedward }
12413979Sedward 
12513979Sedward char *
12613979Sedward strtime(t)
12713979Sedward register struct timeval *t;
12813979Sedward {
12913979Sedward 	char fill = 0;
13013979Sedward 	static char buf[20];
13113979Sedward 	register char *p = buf;
13213979Sedward 
13313979Sedward 	if (t->tv_sec > 60*60) {
13414408Sedward 		(void) sprintf(p, "%D:", t->tv_sec / (60*60));
13513979Sedward 		while (*p++)
13613979Sedward 			;
13713979Sedward 		p--;
13813979Sedward 		t->tv_sec %= 60*60;
13913979Sedward 		fill++;
14013979Sedward 	}
14113979Sedward 	if (t->tv_sec > 60) {
14214408Sedward 		(void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
14313979Sedward 		while (*p++)
14413979Sedward 			;
14513979Sedward 		p--;
14613979Sedward 		t->tv_sec %= 60;
14713979Sedward 		fill++;
14813979Sedward 	}
14914408Sedward 	(void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
15013979Sedward 		t->tv_sec, t->tv_usec / 10000);
15113979Sedward 	return buf;
15213979Sedward }
15315364Sedward #endif
15413979Sedward 
15514408Sedward c_stat()
15614073Sedward {
15714073Sedward 	register struct ww *w;
15814073Sedward 
15916116Sedward 	if ((w = openiwin(14, "IO Statistics")) == 0) {
16014857Sedward 		error("Can't open statistics window: %s.", wwerror());
16114073Sedward 		return;
16214073Sedward 	}
16316116Sedward 	wwprintf(w, "ttflush\twrite\terror\tzero\tchar\n");
16416116Sedward 	wwprintf(w, "%d\t%d\t%d\t%d\t%d\n",
16516116Sedward 		wwnflush, wwnwr, wwnwre, wwnwrz, wwnwrc);
16616116Sedward 	wwprintf(w, "wwwrite\tattmpt\tchar\n");
16716116Sedward 	wwprintf(w, "%d\t%d\t%d\n",
16816116Sedward 		wwnwwr, wwnwwra, wwnwwrc);
16916116Sedward 	wwprintf(w, "wwupdat\tline\tmiss\tmajor\tmiss\n");
17016116Sedward 	wwprintf(w, "%d\t%d\t%d\t%d\t%d\n",
17115872Sedward 		wwnupdate, wwnupdline, wwnupdmiss, wwnmajline, wwnmajmiss);
17216116Sedward 	wwprintf(w, "select\terror\tzero\n");
17316116Sedward 	wwprintf(w, "%d\t%d\t%d\n",
17416116Sedward 		wwnselect, wwnselecte, wwnselectz);
17516116Sedward 	wwprintf(w, "read\terror\tzero\tchar\n");
17616116Sedward 	wwprintf(w, "%d\t%d\t%d\t%d\n",
17716116Sedward 		wwnread, wwnreade, wwnreadz, wwnreadc);
17816116Sedward 	wwprintf(w, "ptyread\terror\tzero\tcontrol\tdata\tchar\n");
17916116Sedward 	wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\n",
18016116Sedward 		wwnwread, wwnwreade, wwnwreadz,
18116116Sedward 		wwnwreadp, wwnwreadd, wwnwreadc);
18214073Sedward 	waitnl(w);
18314408Sedward 	closeiwin(w);
18414073Sedward }
18514073Sedward 
18614408Sedward c_list()
18714189Sedward {
18814893Sedward 	register struct ww *w, *wp;
18914408Sedward 	register i;
19014408Sedward 	int n;
19114189Sedward 
19214408Sedward 	for (n = 0, i = 0; i < NWINDOW; i++)
19314408Sedward 		if (window[i] != 0)
19414408Sedward 			n++;
19515675Sedward 	if (n == 0) {
19615675Sedward 		error("No windows.");
19715675Sedward 		return;
19815675Sedward 	}
19915675Sedward 	if ((w = openiwin(n + 2, "Windows")) == 0) {
20014857Sedward 		error("Can't open listing window: %s.", wwerror());
20114189Sedward 		return;
20214189Sedward 	}
20315675Sedward 	for (i = 0; i < NWINDOW; i++) {
20415675Sedward 		if ((wp = window[i]) == 0)
20515675Sedward 			continue;
20616116Sedward 		wwprintf(w, "%c %c %-13s %-.*s\n",
20715675Sedward 			wp == selwin ? '*' : ' ',
20815675Sedward 			i + '1',
20915856Sedward 			wp->ww_state == WWS_HASPROC ? "" : "(No process)",
21015675Sedward 			wwncol - 20,
21115856Sedward 			wp->ww_label ? wp->ww_label : "(No label)");
21214189Sedward 	}
21314189Sedward 	waitnl(w);
21414408Sedward 	closeiwin(w);
21514189Sedward }
21614189Sedward 
21714408Sedward c_quit()
21814027Sedward {
219*16281Sedward 	char oldterse = terse;
220*16281Sedward 
221*16281Sedward 	setterse(0);
22216116Sedward 	wwputs("Really quit [yn]? ", cmdwin);
22314408Sedward 	wwcurtowin(cmdwin);
22415872Sedward 	while (wwpeekc() < 0)
22515872Sedward 		wwiomux();
22615872Sedward 	if (wwgetc() == 'y') {
22716116Sedward 		wwputs("Yes", cmdwin);
22814027Sedward 		quit++;
22914027Sedward 	} else
23016116Sedward 		wwputs("\r\n", cmdwin);
231*16281Sedward 	setterse(!quit && oldterse);
23214027Sedward }
233