/* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Edward Wang at The University of California, Berkeley. * * %sccs.include.redist.c% */ #ifndef lint static char sccsid[] = "@(#)mloop.c 8.1 (Berkeley) 06/06/93"; #endif /* not lint */ #include #include "defs.h" mloop() { while (!quit) { if (incmd) { docmd(); } else if (wwcurwin->ww_state != WWS_HASPROC) { if (!wwcurwin->ww_keepopen) closewin(wwcurwin); setcmd(1); if (wwpeekc() == escapec) (void) wwgetc(); error("Process died."); } else { register struct ww *w = wwcurwin; register char *p; register n; if (wwibp >= wwibq) wwiomux(); for (p = wwibp; p < wwibq && wwmaskc(*p) != escapec; p++) ; if ((n = p - wwibp) > 0) { if (!w->ww_ispty && w->ww_stopped) startwin(w); #if defined(sun) && !defined(BSD) /* workaround for SunOS pty bug */ while (--n >= 0) (void) write(w->ww_pty, wwibp++, 1); #else (void) write(w->ww_pty, wwibp, n); wwibp = p; #endif } if (wwpeekc() == escapec) { (void) wwgetc(); setcmd(1); } } } }