1: #ifndef lint
2: static char sccsid[] = "@(#)ttoutput.c 3.4 9/19/85";
3: #endif
4:
5: /*
6: * Copyright (c) 1983 Regents of the University of California,
7: * All rights reserved. Redistribution permitted subject to
8: * the terms of the Berkeley Software License Agreement.
9: */
10:
11: #include "ww.h"
12: #include "tt.h"
13: #include <sys/errno.h>
14:
15: /*
16: * Buffered output package.
17: * We need this because stdio fails on non-blocking writes.
18: */
19:
20: ttflush()
21: {
22: register char *p;
23: register n;
24: extern errno;
25:
26: wwnflush++;
27: for (p = tt_ob; p < tt_obp;) {
28: wwnwr++;
29: n = write(1, p, tt_obp - p);
30: if (n < 0) {
31: wwnwre++;
32: if (errno != EWOULDBLOCK) {
33: /* can't deal with this */
34: p = tt_obp;
35: }
36: } else if (n == 0) {
37: /* what to do? */
38: wwnwrz++;
39: } else {
40: wwnwrc += n;
41: p += n;
42: }
43: }
44: tt_obp = tt_ob;
45: }
46:
47: ttputs(s)
48: register char *s;
49: {
50: while (*s)
51: ttputc(*s++);
52: }
53:
54: ttwrite(s, n)
55: register char *s;
56: register n;
57: {
58: switch (n) {
59: case 0:
60: break;
61: case 1:
62: ttputc(*s);
63: break;
64: case 2:
65: if (tt_obe - tt_obp < 2)
66: ttflush();
67: *tt_obp++ = *s++;
68: *tt_obp++ = *s;
69: break;
70: case 3:
71: if (tt_obe - tt_obp < 3)
72: ttflush();
73: *tt_obp++ = *s++;
74: *tt_obp++ = *s++;
75: *tt_obp++ = *s;
76: break;
77: case 4:
78: if (tt_obe - tt_obp < 4)
79: ttflush();
80: *tt_obp++ = *s++;
81: *tt_obp++ = *s++;
82: *tt_obp++ = *s++;
83: *tt_obp++ = *s;
84: break;
85: case 5:
86: if (tt_obe - tt_obp < 5)
87: ttflush();
88: *tt_obp++ = *s++;
89: *tt_obp++ = *s++;
90: *tt_obp++ = *s++;
91: *tt_obp++ = *s++;
92: *tt_obp++ = *s;
93: break;
94: default:
95: while (n > 0) {
96: register m;
97:
98: while ((m = tt_obe - tt_obp) == 0)
99: ttflush();
100: if ((m = tt_obe - tt_obp) > n)
101: m = n;
102: bcopy(s, tt_obp, m);
103: tt_obp += m;
104: s += m;
105: n -= m;
106: }
107: }
108: }
Defined functions
Defined variables
sccsid
defined in line
2;
never used