xref: /csrg-svn/usr.bin/window/cmd.c (revision 13994)
113977Sedward #ifndef lint
2*13994Sedward static	char *sccsid = "@(#)cmd.c	1.2 83/07/19";
313977Sedward #endif
413977Sedward 
513977Sedward #include "defs.h"
613977Sedward 
713977Sedward struct ww *getwin();
813977Sedward struct ww *openwin();
913977Sedward char *strtime();
1013977Sedward 
1113977Sedward docmd()
1213977Sedward {
1313977Sedward 	register char c;
1413977Sedward 	register struct ww *w;
1513977Sedward 	char buf;
1613977Sedward 
1713977Sedward top:
1813977Sedward 	Wunhide(cmdwin->ww_win);
1913977Sedward 	while ((c = bgetc()) >= 0) {
2013977Sedward 		wwputs("\r\n", cmdwin);
2113977Sedward 		switch (c) {
2213977Sedward 		case 'r':
2313977Sedward 		case 'R':
2413977Sedward 		case CTRL([):
2513977Sedward 		case ESCAPE:
2613977Sedward 			if (selwin == 0) {
2713977Sedward 				wwputs("No window.  ", cmdwin);
2813977Sedward 				continue;
2913977Sedward 			}
3013977Sedward 		}
3113977Sedward 		switch (c) {
3213977Sedward 		case '1': case '2': case '3': case '4': case '5':
3313977Sedward 		case '6': case '7': case '8': case '9':
3413977Sedward 			if ((w = wwfind(c - '0')) == 0) {
3513977Sedward 				Ding();
3613977Sedward 				break;
3713977Sedward 			}
3813977Sedward 			setselwin(w);
3913977Sedward 			goto out;
4013977Sedward 		case '%':
4113977Sedward 			if ((w = getwin()) == 0)
4213977Sedward 				break;
4313977Sedward 			setselwin(w);
4413977Sedward 			break;
4513977Sedward 		case 'c':
4613977Sedward 		case 'C':
4713977Sedward 		case 'Z':
4813977Sedward 			doclose(c);
4913977Sedward 			break;
5013977Sedward 		case 'w':
5113977Sedward 			dowindow();
5213977Sedward 			break;
53*13994Sedward 		case 'Q':
54*13994Sedward 			doquery();
55*13994Sedward 			break;
5613977Sedward 		case 'r':
5713977Sedward 			selwin->ww_refresh = 0;
5813977Sedward 			break;
5913977Sedward 		case 'R':
6013977Sedward 			selwin->ww_refresh = 1;
6113977Sedward 			break;
6213977Sedward 		case 't':
6313977Sedward 			dotime(RUSAGE_SELF);
6413977Sedward 			break;
6513977Sedward 		case 'T':
6613977Sedward 			dotime(RUSAGE_CHILDREN);
6713977Sedward 			break;
6813977Sedward 		case CTRL(l):
6913977Sedward 			ScreenGarbaged = 1;
7013977Sedward 			break;
7113977Sedward 		case '?':
7213977Sedward 			dohelp();
7313977Sedward 			break;
7413977Sedward 		case ESCAPE:
7513977Sedward 			buf = ESCAPE;
7613977Sedward 			write(selwin->ww_pty, &buf, 1);
7713977Sedward 		case CTRL([):
7813977Sedward 			goto out;
7913977Sedward 		case CTRL(z):
8013977Sedward 			wwsuspend();
8113977Sedward 			break;
8213977Sedward 		case '.':
8313977Sedward 			quit++;
8413977Sedward 			goto out;
8513977Sedward 		default:
8613977Sedward 			Ding();
87*13994Sedward 			wwprintf(cmdwin, "(%x) Type ? for help.  ", c);
8813977Sedward 			break;
8913977Sedward 		}
9013977Sedward 	}
9113977Sedward 	wwputs("Command: ", cmdwin);
9213977Sedward 	wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win));
93*13994Sedward 	while (bpeekc() < 0)
9413977Sedward 		bread();
9513977Sedward 	goto top;
9613977Sedward out:
9713977Sedward 	if (!quit)
9813977Sedward 		wwsetcurrent(selwin);
9913977Sedward 	Whide(cmdwin->ww_win);
10013977Sedward }
10113977Sedward 
10213977Sedward struct ww *
10313977Sedward getwin()
10413977Sedward {
10513977Sedward 	register int c;
10613977Sedward 	struct ww *w;
10713977Sedward 
108*13994Sedward 	while ((c = bgetc()) < 0)
10913977Sedward 		bread();
11013977Sedward 	if (c < '1' || c > '9') {
11113977Sedward 		Ding();
11213977Sedward 		return 0;
11313977Sedward 	}
11413977Sedward 	if ((w = wwfind(c - '0')) == 0)
11513977Sedward 		Ding();
11613977Sedward 	return w;
11713977Sedward }
11813977Sedward 
11913977Sedward setselwin(w)
12013977Sedward register struct ww *w;
12113977Sedward {
12213977Sedward 	if (selwin)
12313977Sedward 		labelwin(selwin, 0);
12413977Sedward 	selwin = w;
12513977Sedward 	if (w) {
12613977Sedward 		labelwin(w, WINVERSE);
12713977Sedward 		/* bring it to the top just below cmdwin */
12813977Sedward 		wwsetcurrent(w);
12913977Sedward 		wwsetcurrent(cmdwin);
13013977Sedward 	}
13113977Sedward }
13213977Sedward 
13313977Sedward labelwin(w, mode)
13413977Sedward register struct ww *w;
13513977Sedward {
13613977Sedward 	char buf[2];
13713977Sedward 
13813977Sedward 	buf[0] = w->ww_ident + '0';
13913977Sedward 	buf[1] = 0;
14013977Sedward 	wwlabel(w, buf, mode);
14113977Sedward }
142