1*13977Sedward #ifndef lint 2*13977Sedward static char *sccsid = "@(#)cmd.c 1.1 83/07/18"; 3*13977Sedward #endif 4*13977Sedward 5*13977Sedward #include "defs.h" 6*13977Sedward 7*13977Sedward struct ww *getwin(); 8*13977Sedward struct ww *openwin(); 9*13977Sedward char *strtime(); 10*13977Sedward 11*13977Sedward docmd() 12*13977Sedward { 13*13977Sedward register char c; 14*13977Sedward register struct ww *w; 15*13977Sedward char buf; 16*13977Sedward 17*13977Sedward top: 18*13977Sedward Wunhide(cmdwin->ww_win); 19*13977Sedward while ((c = bgetc()) >= 0) { 20*13977Sedward wwputs("\r\n", cmdwin); 21*13977Sedward switch (c) { 22*13977Sedward case 'r': 23*13977Sedward case 'R': 24*13977Sedward case CTRL([): 25*13977Sedward case ESCAPE: 26*13977Sedward if (selwin == 0) { 27*13977Sedward wwputs("No window. ", cmdwin); 28*13977Sedward continue; 29*13977Sedward } 30*13977Sedward } 31*13977Sedward switch (c) { 32*13977Sedward case '1': case '2': case '3': case '4': case '5': 33*13977Sedward case '6': case '7': case '8': case '9': 34*13977Sedward if ((w = wwfind(c - '0')) == 0) { 35*13977Sedward Ding(); 36*13977Sedward break; 37*13977Sedward } 38*13977Sedward setselwin(w); 39*13977Sedward goto out; 40*13977Sedward case '%': 41*13977Sedward if ((w = getwin()) == 0) 42*13977Sedward break; 43*13977Sedward setselwin(w); 44*13977Sedward break; 45*13977Sedward case 'c': 46*13977Sedward case 'C': 47*13977Sedward case 'Z': 48*13977Sedward doclose(c); 49*13977Sedward break; 50*13977Sedward case 'w': 51*13977Sedward dowindow(); 52*13977Sedward break; 53*13977Sedward case 'r': 54*13977Sedward selwin->ww_refresh = 0; 55*13977Sedward break; 56*13977Sedward case 'R': 57*13977Sedward selwin->ww_refresh = 1; 58*13977Sedward break; 59*13977Sedward case 't': 60*13977Sedward dotime(RUSAGE_SELF); 61*13977Sedward break; 62*13977Sedward case 'T': 63*13977Sedward dotime(RUSAGE_CHILDREN); 64*13977Sedward break; 65*13977Sedward case CTRL(l): 66*13977Sedward ScreenGarbaged = 1; 67*13977Sedward break; 68*13977Sedward case '?': 69*13977Sedward dohelp(); 70*13977Sedward break; 71*13977Sedward case ESCAPE: 72*13977Sedward buf = ESCAPE; 73*13977Sedward write(selwin->ww_pty, &buf, 1); 74*13977Sedward case CTRL([): 75*13977Sedward goto out; 76*13977Sedward case CTRL(z): 77*13977Sedward wwsuspend(); 78*13977Sedward break; 79*13977Sedward case '.': 80*13977Sedward quit++; 81*13977Sedward goto out; 82*13977Sedward default: 83*13977Sedward Ding(); 84*13977Sedward wwputs("Type ? for help. ", cmdwin); 85*13977Sedward break; 86*13977Sedward } 87*13977Sedward } 88*13977Sedward wwputs("Command: ", cmdwin); 89*13977Sedward wwsetcursor(WCurRow(cmdwin->ww_win), WCurCol(cmdwin->ww_win)); 90*13977Sedward while (bpeekc() < 0) { 91*13977Sedward wwflush(); 92*13977Sedward bread(); 93*13977Sedward } 94*13977Sedward goto top; 95*13977Sedward out: 96*13977Sedward if (!quit) 97*13977Sedward wwsetcurrent(selwin); 98*13977Sedward Whide(cmdwin->ww_win); 99*13977Sedward } 100*13977Sedward 101*13977Sedward struct ww * 102*13977Sedward getwin() 103*13977Sedward { 104*13977Sedward register int c; 105*13977Sedward struct ww *w; 106*13977Sedward 107*13977Sedward while ((c = bgetc()) < 0) { 108*13977Sedward wwflush(); 109*13977Sedward bread(); 110*13977Sedward } 111*13977Sedward if (c < '1' || c > '9') { 112*13977Sedward Ding(); 113*13977Sedward return 0; 114*13977Sedward } 115*13977Sedward if ((w = wwfind(c - '0')) == 0) 116*13977Sedward Ding(); 117*13977Sedward return w; 118*13977Sedward } 119*13977Sedward 120*13977Sedward setselwin(w) 121*13977Sedward register struct ww *w; 122*13977Sedward { 123*13977Sedward if (selwin) 124*13977Sedward labelwin(selwin, 0); 125*13977Sedward selwin = w; 126*13977Sedward if (w) { 127*13977Sedward labelwin(w, WINVERSE); 128*13977Sedward /* bring it to the top just below cmdwin */ 129*13977Sedward wwsetcurrent(w); 130*13977Sedward wwsetcurrent(cmdwin); 131*13977Sedward } 132*13977Sedward } 133*13977Sedward 134*13977Sedward labelwin(w, mode) 135*13977Sedward register struct ww *w; 136*13977Sedward { 137*13977Sedward char buf[2]; 138*13977Sedward 139*13977Sedward buf[0] = w->ww_ident + '0'; 140*13977Sedward buf[1] = 0; 141*13977Sedward wwlabel(w, buf, mode); 142*13977Sedward } 143