xref: /original-bsd/usr.bin/window/cmd2.c (revision 8251a00e)
1 #ifndef lint
2 static	char *sccsid = "@(#)cmd2.c	3.2 83/08/12";
3 #endif
4 
5 #include "defs.h"
6 
7 struct ww *openiwin();
8 
9 c_help()
10 {
11 	register struct ww *w;
12 
13 	if ((w = openiwin(wwnrow - 2, "Help")) == 0) {
14 		error("Can't open help window.");
15 		return;
16 	}
17 	(void) wwprintf(w, "The escape character is %s, which gets you into command mode.\r\n\n",
18 		unctrl(escapec));
19 	(void) wwprintf(w, "Short commands:\r\n\n");
20 	(void) wwprintf(w, "{1-9}   Select window {1-9} and return to conversation mode.\r\n");
21 	(void) wwprintf(w, "%%{1-9}  Select window {1-9}.\r\n");
22 	(void) wwprintf(w, "c{1-9}  Close window {1-9}.\r\n");
23 	(void) wwprintf(w, "C       Close all windows.\r\n");
24 	(void) wwprintf(w, "S       Show all windows in sequence.\r\n");
25 	(void) wwprintf(w, "L       List all windows with their labels.\r\n");
26 	(void) wwprintf(w, "w       Open a new window.\r\n");
27 	(void) wwprintf(w, "[^U^D]  Scroll [up, down] half a window.\r\n");
28 	(void) wwprintf(w, "[^B^F]  Scroll [up, down] a full window.\r\n");
29 	(void) wwprintf(w, "[hjkl]  Move cursor [left, down, up, right].\r\n");
30 	(void) wwprintf(w, "escape  Exit command mode.\r\n");
31 	(void) wwprintf(w, "^L      Redraw screen.\r\n");
32 	(void) wwprintf(w, "^Z      Suspend.\r\n");
33 	(void) wwprintf(w, ".       Quit.\r\n");
34 	waitnl(w);
35 	(void) wwprintf(w, "Long commands:\r\n\n");
36 	(void) wwprintf(w, ":terse [off]            Turn on (or off) terse mode.\r\n");
37 	(void) wwprintf(w, ":refresh {1-9} [off]    Turn on (or off) refresh after every newline\r\n");
38 	(void) wwprintf(w, "                        for window {1-9}.\r\n");
39 	(void) wwprintf(w, ":label {1-9} string     Label window {1-9}.\r\n");
40 	(void) wwprintf(w, ":escape C               Set escape character to C.\r\n");
41 	(void) wwprintf(w, ":%%{1-9}                 Select window {1-9}.\r\n");
42 	(void) wwprintf(w, ":window r c nr nc       Open a window at row r column c\r\n");
43 	(void) wwprintf(w, "                        with nr rows and nc colomns\r\n");
44 	(void) wwprintf(w, ":source filename        Execute the commands in `filename'.\r\n");
45 	waitnl(w);
46 	closeiwin(w);
47 }
48 
49 char *strtime();
50 
51 c_time(flag)
52 {
53 	register struct ww *w;
54 	struct rusage rusage;
55 	struct timeval timeval;
56 	struct timezone timezone;
57 
58 	if ((w = openiwin(6, "Timing and Resource Usage")) == 0) {
59 		error("Can't open time window.");
60 		return;
61 	}
62 
63 	(void) gettimeofday(&timeval, &timezone);
64 	timeval.tv_sec -= starttime.tv_sec;
65 	if ((timeval.tv_usec -= starttime.tv_usec) < 0) {
66 		timeval.tv_sec--;
67 		timeval.tv_usec += 1000000;
68 	}
69 	(void) getrusage(flag, &rusage);
70 
71 	(void) wwprintf(w, "time\t\tutime\t\tstime\t\tmaxrss\tixrss\tidrss\tisrss\r\n");
72 	(void) wwprintf(w, "%-16s", strtime(&timeval));
73 	(void) wwprintf(w, "%-16s", strtime(&rusage.ru_utime));
74 	(void) wwprintf(w, "%-16s", strtime(&rusage.ru_stime));
75 	(void) wwprintf(w, "%D\t%D\t%D\t%D\r\n",
76 		rusage.ru_maxrss, rusage.ru_ixrss,
77 		rusage.ru_idrss, rusage.ru_isrss);
78 	(void) wwprintf(w, "minflt\tmajflt\tnswap\tinblk\toublk\tmsgsnd\tmsgrcv\tnsigs\tnvcsw\tnivcsw\r\n");
79 	(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",
80 		rusage.ru_minflt, rusage.ru_majflt, rusage.ru_nswap,
81 		rusage.ru_inblock, rusage.ru_oublock,
82 		rusage.ru_msgsnd, rusage.ru_msgrcv, rusage.ru_nsignals,
83 		rusage.ru_nvcsw, rusage.ru_nivcsw);
84 
85 	waitnl(w);
86 	closeiwin(w);
87 }
88 
89 char *
90 strtime(t)
91 register struct timeval *t;
92 {
93 	char fill = 0;
94 	static char buf[20];
95 	register char *p = buf;
96 
97 	if (t->tv_sec > 60*60) {
98 		(void) sprintf(p, "%D:", t->tv_sec / (60*60));
99 		while (*p++)
100 			;
101 		p--;
102 		t->tv_sec %= 60*60;
103 		fill++;
104 	}
105 	if (t->tv_sec > 60) {
106 		(void) sprintf(p, fill ? "%02D:" : "%D:", t->tv_sec / 60);
107 		while (*p++)
108 			;
109 		p--;
110 		t->tv_sec %= 60;
111 		fill++;
112 	}
113 	(void) sprintf(p, fill ? "%02D.%02d" : "%D.%02D",
114 		t->tv_sec, t->tv_usec / 10000);
115 	return buf;
116 }
117 
118 c_stat()
119 {
120 	register struct ww *w;
121 
122 	if ((w = openiwin(6, "IO Statics")) == 0) {
123 		error("Can't open statistics window.");
124 		return;
125 	}
126 	(void) wwprintf(w, "nread\tnreadz\tnreade\tnreadc\tnwrite\tnwritec\r\n");
127 	(void) wwprintf(w, "%d\t%d\t%d\t%d\t%d\t%d\r\n",
128 		nread, nreadz, nreade, nreadc, wwnwrite, wwnwritec);
129 	waitnl(w);
130 	closeiwin(w);
131 }
132 
133 c_list()
134 {
135 	register struct ww *w;
136 	register i;
137 	int n;
138 
139 	for (n = 0, i = 0; i < NWINDOW; i++)
140 		if (window[i] != 0)
141 			n++;
142 	if ((w = openiwin(MAX(n, 1) + 2, "Active Windows")) == 0) {
143 		error("Can't open listing window.");
144 		return;
145 	}
146 	if (n == 0) {
147 		(void) wwputs("No windows.\r\n", w);
148 	} else {
149 		for (i = 0; i < NWINDOW; i++) {
150 			if (window[i] == 0)
151 				continue;
152 			(void) wwprintf(w, "%c   %s\r\n", i + '1',
153 				window[i]->ww_label ? window[i]->ww_label
154 					: "(No label)");
155 		}
156 	}
157 	waitnl(w);
158 	closeiwin(w);
159 }
160 
161 c_quit()
162 {
163 	if (terse)
164 		wwadd(cmdwin, &wwhead);
165 	(void) wwputs("Really quit [yn]? ", cmdwin);
166 	wwcurtowin(cmdwin);
167 	while (bpeekc() < 0)
168 		bread();
169 	if (bgetc() == 'y') {
170 		(void) wwputs("Yes", cmdwin);
171 		quit++;
172 	} else
173 		(void) wwputs("\r\n", cmdwin);
174 	if (terse && !quit)
175 		wwdelete(cmdwin);
176 }
177 
178 /*
179  * Open an information window.
180  */
181 struct ww *
182 openiwin(nrow, label)
183 char *label;
184 {
185 	register struct ww *w;
186 
187 	if ((w = wwopen(0, nrow, wwncol, 2, 0, 0)) == 0)
188 		return 0;
189 	/*
190 	w->ww_mapnl = 1;
191 	*/
192 	w->ww_hasframe = 1;
193 	w->ww_id = -1;
194 	w->ww_center = 1;
195 	(void) setlabel(w, label);
196 	wwadd(w, framewin);
197 	reframe();
198 	return w;
199 }
200 
201 waitnl(w)
202 register struct ww *w;
203 {
204 	if (w->ww_back != framewin) {
205 		(void) wwputs("reframed", w);
206 		wwdelete(w);
207 		wwadd(w, framewin);
208 		reframe();
209 	}
210 	(void) wwputs("\r\nType return to continue: ", w);
211 	wwcurtowin(w);
212 	while (bgetc() < 0)
213 		bread();
214 	(void) wwputs("\033E", w);		/* clear and home cursor */
215 }
216 
217 closeiwin(w)
218 struct ww *w;
219 {
220 	closewin(w);
221 	reframe();
222 }
223