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