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