xref: /csrg-svn/usr.bin/window/mloop.c (revision 62461)
118742Sedward /*
2*62461Sbostic  * Copyright (c) 1983, 1993
3*62461Sbostic  *	The Regents of the University of California.  All rights reserved.
433514Sbostic  *
542954Sbostic  * This code is derived from software contributed to Berkeley by
642954Sbostic  * Edward Wang at The University of California, Berkeley.
742954Sbostic  *
842835Sbostic  * %sccs.include.redist.c%
918742Sedward  */
1018742Sedward 
1133514Sbostic #ifndef lint
12*62461Sbostic static char sccsid[] = "@(#)mloop.c	8.1 (Berkeley) 06/06/93";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1558159Storek #include <sys/param.h>
1614894Sedward #include "defs.h"
1714894Sedward 
mloop()1814894Sedward mloop()
1914894Sedward {
2014894Sedward 	while (!quit) {
2116282Sedward 		if (incmd) {
2216124Sedward 			docmd();
2316124Sedward 		} else if (wwcurwin->ww_state != WWS_HASPROC) {
2431140Sedward 			if (!wwcurwin->ww_keepopen)
2531140Sedward 				closewin(wwcurwin);
2616282Sedward 			setcmd(1);
2716124Sedward 			if (wwpeekc() == escapec)
2816124Sedward 				(void) wwgetc();
2914894Sedward 			error("Process died.");
3016124Sedward 		} else {
3118334Sedward 			register struct ww *w = wwcurwin;
3216124Sedward 			register char *p;
3316124Sedward 			register n;
3416124Sedward 
3534107Sedward 			if (wwibp >= wwibq)
3634107Sedward 				wwiomux();
3755912Sedward 			for (p = wwibp; p < wwibq && wwmaskc(*p) != escapec;
3834107Sedward 			     p++)
3934107Sedward 				;
4034107Sedward 			if ((n = p - wwibp) > 0) {
4134107Sedward 				if (!w->ww_ispty && w->ww_stopped)
4234107Sedward 					startwin(w);
4358159Storek #if defined(sun) && !defined(BSD)
4458159Storek 				/* workaround for SunOS pty bug */
4556711Sedward 				while (--n >= 0)
4656711Sedward 					(void) write(w->ww_pty, wwibp++, 1);
4756711Sedward #else
4834107Sedward 				(void) write(w->ww_pty, wwibp, n);
4934107Sedward 				wwibp = p;
5056711Sedward #endif
5114894Sedward 			}
5234107Sedward 			if (wwpeekc() == escapec) {
5334107Sedward 				(void) wwgetc();
5434107Sedward 				setcmd(1);
5534107Sedward 			}
5614894Sedward 		}
5714894Sedward 	}
5814894Sedward }
59