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