113977Sedward #ifndef lint 2*14080Sedward static char *sccsid = "@(#)cmd.c 1.5 83/07/22"; 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); 1914071Sedward if (selwin != 0) 2014071Sedward Woncursor(selwin->ww_win, 1); 2113977Sedward while ((c = bgetc()) >= 0) { 2213977Sedward wwputs("\r\n", cmdwin); 2313977Sedward switch (c) { 2413977Sedward case 'r': 2513977Sedward case 'R': 2614071Sedward case 'h': case 'j': case 'k': case 'l': 2714071Sedward case CTRL(u): 2814071Sedward case CTRL(d): 2914071Sedward case CTRL(b): 3014071Sedward case CTRL(f): 3113977Sedward case CTRL([): 3213977Sedward case ESCAPE: 3313977Sedward if (selwin == 0) { 3413977Sedward wwputs("No window. ", cmdwin); 3513977Sedward continue; 3613977Sedward } 3713977Sedward } 3813977Sedward switch (c) { 3913977Sedward case '1': case '2': case '3': case '4': case '5': 4013977Sedward case '6': case '7': case '8': case '9': 4113977Sedward if ((w = wwfind(c - '0')) == 0) { 4213977Sedward Ding(); 4313977Sedward break; 4413977Sedward } 4513977Sedward setselwin(w); 4613977Sedward goto out; 4713977Sedward case '%': 4813977Sedward if ((w = getwin()) == 0) 4913977Sedward break; 5013977Sedward setselwin(w); 5113977Sedward break; 5213977Sedward case 'c': 5314071Sedward doclose(CLOSE_ONE, getwin()); 5414071Sedward break; 5513977Sedward case 'C': 5614071Sedward doclose(CLOSE_DEAD, (struct ww *)0); 5714071Sedward break; 5813977Sedward case 'Z': 5914071Sedward doclose(CLOSE_ALL, (struct ww *)0); 6013977Sedward break; 6113977Sedward case 'w': 6213977Sedward dowindow(); 6313977Sedward break; 6413994Sedward case 'Q': 6513994Sedward doquery(); 6613994Sedward break; 6713977Sedward case 'r': 6813977Sedward selwin->ww_refresh = 0; 6913977Sedward break; 7013977Sedward case 'R': 7113977Sedward selwin->ww_refresh = 1; 7213977Sedward break; 73*14080Sedward case 's': 74*14080Sedward dostat(); 75*14080Sedward break; 7613977Sedward case 't': 7713977Sedward dotime(RUSAGE_SELF); 7813977Sedward break; 7913977Sedward case 'T': 8013977Sedward dotime(RUSAGE_CHILDREN); 8113977Sedward break; 8214071Sedward case 'h': 8314071Sedward Wcurleft(selwin->ww_win, 1); 8414071Sedward break; 8514071Sedward case 'j': 8614071Sedward Wcurdown(selwin->ww_win, 1); 8714071Sedward break; 8814071Sedward case 'k': 8914071Sedward Wcurup(selwin->ww_win, 1); 9014071Sedward break; 9114071Sedward case 'l': 9214071Sedward Wcurright(selwin->ww_win, 1); 9314071Sedward break; 9414071Sedward case CTRL(d): 9514071Sedward doscroll(1); 9614071Sedward break; 9714071Sedward case CTRL(u): 9814071Sedward doscroll(-1); 9914071Sedward break; 10014071Sedward case CTRL(f): 10114071Sedward doscroll(2); 10214071Sedward break; 10314071Sedward case CTRL(b): 10414071Sedward doscroll(-2); 10514071Sedward break; 10613977Sedward case CTRL(l): 10713977Sedward ScreenGarbaged = 1; 10813977Sedward break; 10913977Sedward case '?': 11013977Sedward dohelp(); 11113977Sedward break; 11213977Sedward case ESCAPE: 11313977Sedward buf = ESCAPE; 11413977Sedward write(selwin->ww_pty, &buf, 1); 11513977Sedward case CTRL([): 11613977Sedward goto out; 11713977Sedward case CTRL(z): 11813977Sedward wwsuspend(); 11913977Sedward break; 12013977Sedward case '.': 12114025Sedward doquit(); 12214025Sedward if (quit) 12314025Sedward goto out; 12414025Sedward break; 12513977Sedward default: 12613977Sedward Ding(); 12714025Sedward wwprintf(cmdwin, "Type ? for help. "); 12813977Sedward break; 12913977Sedward } 13013977Sedward } 13113977Sedward wwputs("Command: ", cmdwin); 13213977Sedward wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win)); 13313994Sedward while (bpeekc() < 0) 13413977Sedward bread(); 13513977Sedward goto top; 13613977Sedward out: 13713977Sedward if (!quit) 13814025Sedward wwsetcurwin(selwin); 13914071Sedward if (selwin != 0) 14014071Sedward Woncursor(selwin->ww_win, 0); 14113977Sedward Whide(cmdwin->ww_win); 14213977Sedward } 14313977Sedward 14413977Sedward struct ww * 14513977Sedward getwin() 14613977Sedward { 14713977Sedward register int c; 14813977Sedward struct ww *w; 14913977Sedward 15013994Sedward while ((c = bgetc()) < 0) 15113977Sedward bread(); 15213977Sedward if (c < '1' || c > '9') { 15313977Sedward Ding(); 15413977Sedward return 0; 15513977Sedward } 15613977Sedward if ((w = wwfind(c - '0')) == 0) 15713977Sedward Ding(); 15813977Sedward return w; 15913977Sedward } 16013977Sedward 16113977Sedward setselwin(w) 16213977Sedward register struct ww *w; 16313977Sedward { 16414071Sedward if (selwin) { 16513977Sedward labelwin(selwin, 0); 16614071Sedward Woncursor(selwin->ww_win, 0); 16714071Sedward } 16814071Sedward if (selwin = w) { 16913977Sedward labelwin(w, WINVERSE); 17013977Sedward /* bring it to the top just below cmdwin */ 17114025Sedward wwsetcurwin(w); 17214025Sedward wwsetcurwin(cmdwin); 17314071Sedward Woncursor(w->ww_win, 1); 17413977Sedward } 17513977Sedward } 17613977Sedward 17713977Sedward labelwin(w, mode) 17813977Sedward register struct ww *w; 17913977Sedward { 18013977Sedward char buf[2]; 18113977Sedward 18213977Sedward buf[0] = w->ww_ident + '0'; 18313977Sedward buf[1] = 0; 18413977Sedward wwlabel(w, buf, mode); 18513977Sedward } 186