xref: /csrg-svn/usr.bin/window/cmd2.c (revision 13979)
1*13979Sedward #ifndef lint
2*13979Sedward static	char *sccsid = "@(#)cmd2.c	1.1 83/07/18";
3*13979Sedward #endif
4*13979Sedward 
5*13979Sedward #include "defs.h"
6*13979Sedward 
7*13979Sedward struct ww *getwin();
8*13979Sedward struct ww *openwin();
9*13979Sedward char *strtime();
10*13979Sedward 
11*13979Sedward dohelp()
12*13979Sedward {
13*13979Sedward 	register struct ww *w;
14*13979Sedward 
15*13979Sedward 	if ((w = openwin(20, "Help")) == 0)
16*13979Sedward 		return;
17*13979Sedward 	wwprintf(w, "The escape character is ^P, which gets you into command mode.\r\n");
18*13979Sedward 	wwprintf(w, "The commands are:\r\n");
19*13979Sedward 	wwprintf(w, "%%[1-9]  select window [1-9]\r\n");
20*13979Sedward 	wwprintf(w, "[1-9]   select window [1-9] and exit command mode\r\n");
21*13979Sedward 	wwprintf(w, "c[1-9]  close window [1-9]\r\n");
22*13979Sedward 	wwprintf(w, "C       close all empty windows\r\n");
23*13979Sedward 	wwprintf(w, "R       force refresh after every newline in current window\r\n");
24*13979Sedward 	wwprintf(w, "r       don't refresh every line\r\n");
25*13979Sedward 	wwprintf(w, "w       open a new window\r\n");
26*13979Sedward 	wwprintf(w, "s       print IO statistics\r\n");
27*13979Sedward 	wwprintf(w, "t       print resource usage of this program\r\n");
28*13979Sedward 	wwprintf(w, "T       print resource usage of children\r\n");
29*13979Sedward 	wwprintf(w, "escape  exit command mode\r\n");
30*13979Sedward 	wwprintf(w, "^L      redraw screen\r\n");
31*13979Sedward 	wwprintf(w, "^Z      suspend\r\n");
32*13979Sedward 	wwprintf(w, ".       quit\r\n");
33*13979Sedward 	closewin(w);
34*13979Sedward }
35*13979Sedward 
36*13979Sedward dotime(flag)
37*13979Sedward {
38*13979Sedward 	register struct ww *w;
39*13979Sedward 	struct rusage rusage;
40*13979Sedward 	struct timeval timeval;
41*13979Sedward 
42*13979Sedward 	if ((w = openwin(9, "Time")) == 0)
43*13979Sedward 		return;
44*13979Sedward 
45*13979Sedward 	gettimeofday(&timeval, &timezone);
46*13979Sedward 	timeval.tv_sec -= starttime.tv_sec;
47*13979Sedward 	if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
48*13979Sedward 		timeval.tv_sec--;
49*13979Sedward 		timeval.tv_usec += 1000000;
50*13979Sedward 	}
51*13979Sedward 	getrusage(flag, &rusage);
52*13979Sedward 
53*13979Sedward 	wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n");
54*13979Sedward 	wwprintf(w, "%-16s", strtime(&timeval));
55*13979Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
56*13979Sedward 	wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
57*13979Sedward 	wwprintf(w, "%D\t%D\t%D\t%D\r\n",
58*13979Sedward 		rusage.ru_maxrss, rusage.ru_ixrss,
59*13979Sedward 		rusage.ru_idrss, rusage.ru_isrss);
60*13979Sedward 	wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n");
61*13979Sedward 	wwprintf(w, "%D\%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\t%D\r\n",
62*13979Sedward 		rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
63*13979Sedward 		rusage.ru_inblock, rusage.ru_oublock,
64*13979Sedward 		rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
65*13979Sedward 		rusage.ru_nvcsw, rusage.ru_nivcsw);
66*13979Sedward 
67*13979Sedward 	closewin(w);
68*13979Sedward }
69*13979Sedward 
70*13979Sedward char *
71*13979Sedward strtime(t)
72*13979Sedward register struct timeval *t;
73*13979Sedward {
74*13979Sedward 	char fill = 0;
75*13979Sedward 	static char buf[20];
76*13979Sedward 	register char *p = buf;
77*13979Sedward 
78*13979Sedward 	if (t->tv_sec > 60*60) {
79*13979Sedward 		sprintf(p, "%D:", t->tv_sec / (60*60));
80*13979Sedward 		while (*p++)
81*13979Sedward 			;
82*13979Sedward 		p--;
83*13979Sedward 		t->tv_sec %= 60*60;
84*13979Sedward 		fill++;
85*13979Sedward 	}
86*13979Sedward 	if (t->tv_sec > 60) {
87*13979Sedward 		sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
88*13979Sedward 		while (*p++)
89*13979Sedward 			;
90*13979Sedward 		p--;
91*13979Sedward 		t->tv_sec %= 60;
92*13979Sedward 		fill++;
93*13979Sedward 	}
94*13979Sedward 	sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
95*13979Sedward 		t->tv_sec, t->tv_usec / 10000);
96*13979Sedward 	return buf;
97*13979Sedward }
98*13979Sedward 
99*13979Sedward struct ww *
100*13979Sedward openwin(nrow, label)
101*13979Sedward char *label;
102*13979Sedward {
103*13979Sedward 	register struct ww *w;
104*13979Sedward 
105*13979Sedward 	if ((w = wwopen(WW_NONE, 0, nrow, WCols, 1, 0)) == 0) {
106*13979Sedward 		wwputs("\r\nCan't open help window.  ", cmdwin);
107*13979Sedward 		return 0;
108*13979Sedward 	}
109*13979Sedward 	wwframe(w);
110*13979Sedward 	wwlabel(w, label, WINVERSE);
111*13979Sedward 	wwsetcurrent(w);
112*13979Sedward 	return w;
113*13979Sedward }
114*13979Sedward 
115*13979Sedward closewin(w)
116*13979Sedward register struct ww *w;
117*13979Sedward {
118*13979Sedward 	wwprintf(w, "\r\nType return to continue: ");
119*13979Sedward 	wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win));
120*13979Sedward 	while (bgetc() < 0) {
121*13979Sedward 		wwflush();
122*13979Sedward 		bread();
123*13979Sedward 	}
124*13979Sedward 	wwclose(w);
125*13979Sedward 	wwsetcurrent(cmdwin);
126*13979Sedward }
127