xref: /csrg-svn/usr.bin/window/mloop.c (revision 31140)
114894Sedward #ifndef lint
2*31140Sedward static char sccsid[] = "@(#)mloop.c	3.9 05/18/87";
314894Sedward #endif
414894Sedward 
518742Sedward /*
618742Sedward  * Copyright (c) 1983 Regents of the University of California,
718742Sedward  * All rights reserved.  Redistribution permitted subject to
818742Sedward  * the terms of the Berkeley Software License Agreement.
918742Sedward  */
1018742Sedward 
1114894Sedward #include "defs.h"
1214894Sedward 
1314894Sedward mloop()
1414894Sedward {
1517409Sedward 	wwrint();		/* catch typeahead before we set ASYNC */
1614894Sedward 	while (!quit) {
1716282Sedward 		if (incmd) {
1816124Sedward 			docmd();
1916124Sedward 		} else if (wwcurwin->ww_state != WWS_HASPROC) {
20*31140Sedward 			if (!wwcurwin->ww_keepopen)
21*31140Sedward 				closewin(wwcurwin);
2216282Sedward 			setcmd(1);
2316124Sedward 			if (wwpeekc() == escapec)
2416124Sedward 				(void) wwgetc();
2514894Sedward 			error("Process died.");
2616124Sedward 		} else {
2718334Sedward 			register struct ww *w = wwcurwin;
2816124Sedward 			register char *p;
2916124Sedward 			register n;
3016124Sedward 
3115872Sedward 			wwiomux();
3216124Sedward 			if (wwibp < wwibq) {
3316124Sedward 				for (p = wwibp; p < wwibq && *p != escapec;
3416124Sedward 				     p++)
3516124Sedward 					;
3616124Sedward 				if ((n = p - wwibp) > 0) {
3718334Sedward 					if (!w->ww_ispty && w->ww_stopped)
3818334Sedward 						startwin(w);
3918334Sedward 					(void) write(w->ww_pty, wwibp, n);
4016124Sedward 					wwibp = p;
4116124Sedward 				}
4216124Sedward 				if (wwpeekc() == escapec) {
4316124Sedward 					(void) wwgetc();
4416282Sedward 					setcmd(1);
4516124Sedward 				}
4614894Sedward 			}
4714894Sedward 		}
4814894Sedward 	}
4914894Sedward }
50