113920Sedward #ifndef lint 2*14169Sedward static char *sccsid = "@(#)main.c 1.8 83/07/28"; 313920Sedward #endif 413920Sedward 513969Sedward #include "defs.h" 613920Sedward 7*14169Sedward char escapec = CTRL(l); 8*14169Sedward 9*14169Sedward #define next(a) (**(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 10*14169Sedward 11*14169Sedward /*ARGUSED*/ 12*14169Sedward main(argc, argv) 13*14169Sedward char **argv; 1413920Sedward { 1513920Sedward register n; 1613920Sedward register char *p; 1713920Sedward int wwchild(); 1813920Sedward int imask; 1913920Sedward 20*14169Sedward while (*++argv) { 21*14169Sedward if (**argv == '-') { 22*14169Sedward switch (*++*argv) { 23*14169Sedward case 'e': 24*14169Sedward setescape(next(argv)); 25*14169Sedward break; 26*14169Sedward case 't': 27*14169Sedward terse++; 28*14169Sedward break; 29*14169Sedward default: 30*14169Sedward usage(); 31*14169Sedward } 32*14169Sedward } else 33*14169Sedward usage(); 34*14169Sedward } 3513969Sedward gettimeofday(&starttime, &timezone); 3613962Sedward if (wwinit() < 0) { 3713962Sedward fflush(stdout); 3813962Sedward fprintf("Can't do windows on this terminal.\n"); 3913962Sedward exit(1); 4013962Sedward } 4114065Sedward if ((cmdwin = wwopen(WW_NONE, 0, 1, wwncol, 0, 0)) == 0) { 4213962Sedward fflush(stdout); 4313969Sedward fprintf(stderr, "Can't open command window.\r\n"); 4413962Sedward goto bad; 4513962Sedward } 46*14169Sedward if (terse) 47*14169Sedward Whide(cmdwin->ww_win); 4814024Sedward wwsetcurwin(cmdwin); 4914065Sedward for (n = 0; n < wwncol; n++) /* XXX */ 5013969Sedward Waputc(0, WINVERSE|WBUF, cmdwin->ww_win); 5113969Sedward wwflush(); 5213920Sedward (void) signal(SIGCHLD, wwchild); 5314024Sedward if (doconfig() < 0) 5414024Sedward dodefault(); 5514024Sedward if (selwin != 0) 5614024Sedward wwsetcurwin(selwin); 5713969Sedward while (!quit) { 5813969Sedward if (curwin == cmdwin) { 5913969Sedward docmd(); 6013962Sedward continue; 6113969Sedward } 6213994Sedward /* 6313994Sedward * Loop until we get some keyboard input. 6413994Sedward */ 6513969Sedward while (ibufc == 0) { 6613969Sedward wwsetcursor(WCurRow(curwin->ww_win), 6713969Sedward WCurCol(curwin->ww_win)); 6813969Sedward wwflush(); 6913994Sedward imask = 1 << 0; 7013994Sedward while (wwforce(&imask) < 0) 7113994Sedward ; 7213994Sedward if ((imask & 1 << 0) == 0) 7313962Sedward continue; 7413994Sedward /* NOTE: ibufc == 0 */ 7513994Sedward ibufp = ibuf; 7614153Sedward if ((ibufc = read(0, ibuf, sizeof ibuf)) < 0) { 7713994Sedward ibufc = 0; 7814153Sedward nreade++; 7914153Sedward } else if (ibufc == 0) 8014153Sedward nreadz++; 8114153Sedward else 8214153Sedward nreadc += ibufc; 8314153Sedward nread++; 8413994Sedward } 8513994Sedward /* 8613994Sedward * Weird loop. Copy the buffer to the pty stopping 8713994Sedward * on the escape character in a hopefully efficient 8813994Sedward * way. 8913994Sedward * Probably a good thing to make ibufc == 1 a special 9013994Sedward * case. 9113994Sedward */ 9213994Sedward for (p = ibufp, n = ibufc;;) { 9313994Sedward if (--n < 0) { 9413994Sedward write(curwin->ww_pty, ibufp, ibufc); 9513969Sedward ibufp = ibuf; 9613994Sedward ibufc = 0; 9713994Sedward break; 98*14169Sedward } else if (*p++ == escapec) { 9913994Sedward if ((n = p - ibufp) > 1) 10013994Sedward write(curwin->ww_pty, ibufp, n - 1); 10113994Sedward ibufp = p; 10213994Sedward ibufc -= n; 10314024Sedward wwsetcurwin(cmdwin); 10413994Sedward break; 10513994Sedward } 10613920Sedward } 10713920Sedward } 10813920Sedward bad: 10913920Sedward wwend(); 11013920Sedward return 0; 11113920Sedward } 112*14169Sedward 113*14169Sedward usage() 114*14169Sedward { 115*14169Sedward fprintf(stderr, "window: [-e escape] [-t]\n"); 116*14169Sedward exit(1); 117*14169Sedward } 118