xref: /original-bsd/old/lib2648/outchar.c (revision e59fb703)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #ifndef lint
8 static char sccsid[] = "@(#)outchar.c	5.1 (Berkeley) 04/26/85";
9 #endif not lint
10 
11 #include "2648.h"
12 
13 outchar(c)
14 char c;
15 {
16 	extern int QUIET;
17 #ifdef TRACE
18 	if (trace)
19 		fprintf(trace, "%s", rdchar(c));
20 #endif
21 	if (QUIET)
22 		return;
23 	_outcount++;
24 	putchar(c);
25 
26 	/* Do 2648 ^E/^F handshake */
27 	if (_outcount > TBLKSIZ && _on2648) {
28 #ifdef TRACE
29 		if (trace)
30 			fprintf(trace, "ENQ .. ");
31 #endif
32 		putchar(ENQ);
33 		fflush(stdout);
34 		c = getchar();
35 		while (c != ACK) {
36 			if (_pb_front == NULL) {
37 				_pb_front = _pushback;
38 				_pb_back = _pb_front - 1;
39 			}
40 			*++_pb_back = c;
41 #ifdef TRACE
42 			if (trace)
43 				fprintf(trace, "push back %s, front=%d, back=%d, ", rdchar(c), _pb_front-_pushback, _pb_front-_pushback);
44 #endif
45 			c = getchar();
46 		}
47 #ifdef TRACE
48 		if (trace)
49 			fprintf(trace, "ACK\n");
50 #endif
51 		_outcount = 0;
52 	}
53 }
54