xref: /csrg-svn/usr.bin/window/ttoutput.c (revision 16125)
1*16125Sedward #ifndef lint
2*16125Sedward static	char *sccsid = "@(#)ttoutput.c	3.1 84/03/03";
3*16125Sedward #endif
4*16125Sedward 
5*16125Sedward #include "ww.h"
6*16125Sedward #include "tt.h"
7*16125Sedward #include <sys/errno.h>
8*16125Sedward 
9*16125Sedward /*
10*16125Sedward  * Buffered output package.
11*16125Sedward  * We need this because stdio fails on non-blocking writes.
12*16125Sedward  */
13*16125Sedward 
14*16125Sedward ttflush()
15*16125Sedward {
16*16125Sedward 	register char *p;
17*16125Sedward 	register n;
18*16125Sedward 	extern errno;
19*16125Sedward 
20*16125Sedward 	wwnflush++;
21*16125Sedward 	for (p = tt_ob; p < tt_obp;) {
22*16125Sedward 		wwnwr++;
23*16125Sedward 		n = write(1, p, tt_obp - p);
24*16125Sedward 		if (n < 0) {
25*16125Sedward 			wwnwre++;
26*16125Sedward 			if (errno != EWOULDBLOCK) {
27*16125Sedward 				/* can't deal with this */
28*16125Sedward 				p = tt_obp;
29*16125Sedward 			}
30*16125Sedward 		} else if (n == 0) {
31*16125Sedward 			/* what to do? */
32*16125Sedward 			wwnwrz++;
33*16125Sedward 		} else {
34*16125Sedward 			wwnwrc += n;
35*16125Sedward 			p += n;
36*16125Sedward 		}
37*16125Sedward 	}
38*16125Sedward 	tt_obp = tt_ob;
39*16125Sedward }
40*16125Sedward 
41*16125Sedward ttputs(s)
42*16125Sedward register char *s;
43*16125Sedward {
44*16125Sedward 	while (*s)
45*16125Sedward 		ttputc(*s++);
46*16125Sedward }
47