xref: /csrg-svn/usr.bin/window/cmd.c (revision 14025)
113977Sedward #ifndef lint
2*14025Sedward static	char *sccsid = "@(#)cmd.c	1.3 83/07/20";
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;
5313994Sedward 		case 'Q':
5413994Sedward 			doquery();
5513994Sedward 			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 '.':
83*14025Sedward 			doquit();
84*14025Sedward 			if (quit)
85*14025Sedward 				goto out;
86*14025Sedward 			break;
8713977Sedward 		default:
8813977Sedward 			Ding();
89*14025Sedward 			wwprintf(cmdwin, "Type ? for help.  ");
9013977Sedward 			break;
9113977Sedward 		}
9213977Sedward 	}
9313977Sedward 	wwputs("Command: ", cmdwin);
9413977Sedward 	wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win));
9513994Sedward 	while (bpeekc() < 0)
9613977Sedward 		bread();
9713977Sedward 	goto top;
9813977Sedward out:
9913977Sedward 	if (!quit)
100*14025Sedward 		wwsetcurwin(selwin);
10113977Sedward 	Whide(cmdwin->ww_win);
10213977Sedward }
10313977Sedward 
10413977Sedward struct ww *
10513977Sedward getwin()
10613977Sedward {
10713977Sedward 	register int c;
10813977Sedward 	struct ww *w;
10913977Sedward 
11013994Sedward 	while ((c = bgetc()) < 0)
11113977Sedward 		bread();
11213977Sedward 	if (c < '1' || c > '9') {
11313977Sedward 		Ding();
11413977Sedward 		return 0;
11513977Sedward 	}
11613977Sedward 	if ((w = wwfind(c - '0')) == 0)
11713977Sedward 		Ding();
11813977Sedward 	return w;
11913977Sedward }
12013977Sedward 
12113977Sedward setselwin(w)
12213977Sedward register struct ww *w;
12313977Sedward {
12413977Sedward 	if (selwin)
12513977Sedward 		labelwin(selwin, 0);
12613977Sedward 	selwin = w;
12713977Sedward 	if (w) {
12813977Sedward 		labelwin(w, WINVERSE);
12913977Sedward 		/* bring it to the top just below cmdwin */
130*14025Sedward 		wwsetcurwin(w);
131*14025Sedward 		wwsetcurwin(cmdwin);
13213977Sedward 	}
13313977Sedward }
13413977Sedward 
13513977Sedward labelwin(w, mode)
13613977Sedward register struct ww *w;
13713977Sedward {
13813977Sedward 	char buf[2];
13913977Sedward 
14013977Sedward 	buf[0] = w->ww_ident + '0';
14113977Sedward 	buf[1] = 0;
14213977Sedward 	wwlabel(w, buf, mode);
14313977Sedward }
144