xref: /csrg-svn/usr.bin/window/ttoutput.c (revision 18756)
116125Sedward #ifndef lint
2*18756Sedward static char sccsid[] = "@(#)ttoutput.c	3.3 04/24/85";
316125Sedward #endif
416125Sedward 
5*18756Sedward /*
6*18756Sedward  * Copyright (c) 1983 Regents of the University of California,
7*18756Sedward  * All rights reserved.  Redistribution permitted subject to
8*18756Sedward  * the terms of the Berkeley Software License Agreement.
9*18756Sedward  */
10*18756Sedward 
1116125Sedward #include "ww.h"
1216125Sedward #include "tt.h"
1316125Sedward #include <sys/errno.h>
1416125Sedward 
1516125Sedward /*
1616125Sedward  * Buffered output package.
1716125Sedward  * We need this because stdio fails on non-blocking writes.
1816125Sedward  */
1916125Sedward 
2016125Sedward ttflush()
2116125Sedward {
2216125Sedward 	register char *p;
2316125Sedward 	register n;
2416125Sedward 	extern errno;
2516125Sedward 
2616125Sedward 	wwnflush++;
2716125Sedward 	for (p = tt_ob; p < tt_obp;) {
2816125Sedward 		wwnwr++;
2916125Sedward 		n = write(1, p, tt_obp - p);
3016125Sedward 		if (n < 0) {
3116125Sedward 			wwnwre++;
3216125Sedward 			if (errno != EWOULDBLOCK) {
3316125Sedward 				/* can't deal with this */
3416125Sedward 				p = tt_obp;
3516125Sedward 			}
3616125Sedward 		} else if (n == 0) {
3716125Sedward 			/* what to do? */
3816125Sedward 			wwnwrz++;
3916125Sedward 		} else {
4016125Sedward 			wwnwrc += n;
4116125Sedward 			p += n;
4216125Sedward 		}
4316125Sedward 	}
4416125Sedward 	tt_obp = tt_ob;
4516125Sedward }
4616125Sedward 
4716125Sedward ttputs(s)
4816125Sedward register char *s;
4916125Sedward {
5016125Sedward 	while (*s)
5116125Sedward 		ttputc(*s++);
5216125Sedward }
53