xref: /csrg-svn/usr.bin/window/cmd2.c (revision 15872)
113979Sedward #ifndef lint
2*15872Sedward static	char *sccsid = "@(#)cmd2.c	3.22 84/01/16";
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 	}
5714660Sedward 	(void) 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 {
6915856Sedward 	(void) wwprintf(w, "%s:\n\n", name);
7015856Sedward 	while (*list)
7115856Sedward 		switch (more(w, 0)) {
7215856Sedward 		case 0:
7315856Sedward 			(void) wwputs(*list++, w);
7415675Sedward 			(void) wwputc('\n', w);
7515856Sedward 			break;
7615856Sedward 		case 1:
7715861Sedward 			(void) 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;
9314408Sedward 	struct timezone timezone;
9413979Sedward 
9514408Sedward 	if ((w = openiwin(6, "Timing and Resource Usage")) == 0) {
9614857Sedward 		error("Can't open time window: %s.", wwerror());
9713979Sedward 		return;
9814027Sedward 	}
9913979Sedward 
10014408Sedward 	(void) gettimeofday(&timeval, &timezone);
10113979Sedward 	timeval.tv_sec -= starttime.tv_sec;
10213979Sedward 	if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
10313979Sedward 		timeval.tv_sec--;
10413979Sedward 		timeval.tv_usec += 1000000;
10513979Sedward 	}
10614408Sedward 	(void) getrusage(flag, &rusage);
10713979Sedward 
10814660Sedward 	(void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\n");
10914408Sedward 	(void) wwprintf(w, "%-16s", strtime(&timeval));
11014408Sedward 	(void) wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
11114408Sedward 	(void) wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
11214660Sedward 	(void) wwprintf(w, "%D\t%D\t%D\t%D\n",
11313979Sedward 		rusage.ru_maxrss, rusage.ru_ixrss,
11413979Sedward 		rusage.ru_idrss, rusage.ru_isrss);
11514660Sedward 	(void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\n");
11614660Sedward 	(void) wwprintf(w, "%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\n",
11713979Sedward 		rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
11813979Sedward 		rusage.ru_inblock, rusage.ru_oublock,
11913979Sedward 		rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
12013979Sedward 		rusage.ru_nvcsw, rusage.ru_nivcsw);
12113979Sedward 
12213994Sedward 	waitnl(w);
12314408Sedward 	closeiwin(w);
12413979Sedward }
12513979Sedward 
12613979Sedward char *
12713979Sedward strtime(t)
12813979Sedward register struct timeval *t;
12913979Sedward {
13013979Sedward 	char fill = 0;
13113979Sedward 	static char buf[20];
13213979Sedward 	register char *p = buf;
13313979Sedward 
13413979Sedward 	if (t->tv_sec > 60*60) {
13514408Sedward 		(void) sprintf(p, "%D:", t->tv_sec / (60*60));
13613979Sedward 		while (*p++)
13713979Sedward 			;
13813979Sedward 		p--;
13913979Sedward 		t->tv_sec %= 60*60;
14013979Sedward 		fill++;
14113979Sedward 	}
14213979Sedward 	if (t->tv_sec > 60) {
14314408Sedward 		(void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
14413979Sedward 		while (*p++)
14513979Sedward 			;
14613979Sedward 		p--;
14713979Sedward 		t->tv_sec %= 60;
14813979Sedward 		fill++;
14913979Sedward 	}
15014408Sedward 	(void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
15113979Sedward 		t->tv_sec, t->tv_usec / 10000);
15213979Sedward 	return buf;
15313979Sedward }
15415364Sedward #endif
15513979Sedward 
15614408Sedward c_stat()
15714073Sedward {
15814073Sedward 	register struct ww *w;
15914073Sedward 
160*15872Sedward 	if ((w = openiwin(8, "IO Statistics")) == 0) {
16114857Sedward 		error("Can't open statistics window: %s.", wwerror());
16214073Sedward 		return;
16314073Sedward 	}
164*15872Sedward 	(void) wwprintf(w, "nwrite\tnwritec\tnupdate\tnupdlin\tnupdmis\tnmajlin\tnmajmis\n");
165*15872Sedward 	(void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
166*15872Sedward 		wwnwrite, wwnwritec,
167*15872Sedward 		wwnupdate, wwnupdline, wwnupdmiss, wwnmajline, wwnmajmiss);
168*15872Sedward 	(void) wwprintf(w, "nsel\tnselz\tnsele\tnread\tnreadz\tnreade\tnreadc\n");
169*15872Sedward 	(void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
170*15872Sedward 		wwnselect, wwnselectz, wwnselecte,
171*15872Sedward 		wwnread, wwnreadz, wwnreade, wwnreadc);
172*15872Sedward 	(void) wwprintf(w, "nwread\tnwreadz\tnwreade\tnwreadd\tnwreadc\tnwreadp\n");
17315653Sedward 	(void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\n",
174*15872Sedward 		wwnwread, wwnwreadz, wwnwreade,
175*15872Sedward 		wwnwreadd, wwnwreadc, wwnwreadp);
17614073Sedward 	waitnl(w);
17714408Sedward 	closeiwin(w);
17814073Sedward }
17914073Sedward 
18014408Sedward c_list()
18114189Sedward {
18214893Sedward 	register struct ww *w, *wp;
18314408Sedward 	register i;
18414408Sedward 	int n;
18514189Sedward 
18614408Sedward 	for (n = 0, i = 0; i < NWINDOW; i++)
18714408Sedward 		if (window[i] != 0)
18814408Sedward 			n++;
18915675Sedward 	if (n == 0) {
19015675Sedward 		error("No windows.");
19115675Sedward 		return;
19215675Sedward 	}
19315675Sedward 	if ((w = openiwin(n + 2, "Windows")) == 0) {
19414857Sedward 		error("Can't open listing window: %s.", wwerror());
19514189Sedward 		return;
19614189Sedward 	}
19715675Sedward 	for (i = 0; i < NWINDOW; i++) {
19815675Sedward 		if ((wp = window[i]) == 0)
19915675Sedward 			continue;
20015675Sedward 		(void) wwprintf(w, "%c %c %-13s %-.*s\n",
20115675Sedward 			wp == selwin ? '*' : ' ',
20215675Sedward 			i + '1',
20315856Sedward 			wp->ww_state == WWS_HASPROC ? "" : "(No process)",
20415675Sedward 			wwncol - 20,
20515856Sedward 			wp->ww_label ? wp->ww_label : "(No label)");
20614189Sedward 	}
20714189Sedward 	waitnl(w);
20814408Sedward 	closeiwin(w);
20914189Sedward }
21014189Sedward 
21114408Sedward c_quit()
21214027Sedward {
21314189Sedward 	if (terse)
21414408Sedward 		wwadd(cmdwin, &wwhead);
21514408Sedward 	(void) wwputs("Really quit [yn]? ", cmdwin);
21614408Sedward 	wwcurtowin(cmdwin);
217*15872Sedward 	while (wwpeekc() < 0)
218*15872Sedward 		wwiomux();
219*15872Sedward 	if (wwgetc() == 'y') {
22014408Sedward 		(void) wwputs("Yes", cmdwin);
22114027Sedward 		quit++;
22214027Sedward 	} else
22314408Sedward 		(void) wwputs("\r\n", cmdwin);
22414408Sedward 	if (terse && !quit)
22514408Sedward 		wwdelete(cmdwin);
22614027Sedward }
227