xref: /original-bsd/old/lib2648/outchar.c (revision 5366c07e)
1*5366c07eSdist /*
2*5366c07eSdist  * Copyright (c) 1980 Regents of the University of California.
3*5366c07eSdist  * All rights reserved.  The Berkeley software License Agreement
4*5366c07eSdist  * specifies the terms and conditions for redistribution.
5*5366c07eSdist  */
6*5366c07eSdist 
7*5366c07eSdist #ifndef lint
8*5366c07eSdist static char sccsid[] = "@(#)outchar.c	5.1 (Berkeley) 04/26/85";
9*5366c07eSdist #endif not lint
103a27c6adSralph 
113a27c6adSralph #include "2648.h"
123a27c6adSralph 
outchar(c)133a27c6adSralph outchar(c)
143a27c6adSralph char c;
153a27c6adSralph {
163a27c6adSralph 	extern int QUIET;
173a27c6adSralph #ifdef TRACE
183a27c6adSralph 	if (trace)
193a27c6adSralph 		fprintf(trace, "%s", rdchar(c));
203a27c6adSralph #endif
213a27c6adSralph 	if (QUIET)
223a27c6adSralph 		return;
233a27c6adSralph 	_outcount++;
243a27c6adSralph 	putchar(c);
253a27c6adSralph 
263a27c6adSralph 	/* Do 2648 ^E/^F handshake */
273a27c6adSralph 	if (_outcount > TBLKSIZ && _on2648) {
283a27c6adSralph #ifdef TRACE
293a27c6adSralph 		if (trace)
303a27c6adSralph 			fprintf(trace, "ENQ .. ");
313a27c6adSralph #endif
323a27c6adSralph 		putchar(ENQ);
333a27c6adSralph 		fflush(stdout);
343a27c6adSralph 		c = getchar();
353a27c6adSralph 		while (c != ACK) {
363a27c6adSralph 			if (_pb_front == NULL) {
373a27c6adSralph 				_pb_front = _pushback;
383a27c6adSralph 				_pb_back = _pb_front - 1;
393a27c6adSralph 			}
403a27c6adSralph 			*++_pb_back = c;
413a27c6adSralph #ifdef TRACE
423a27c6adSralph 			if (trace)
433a27c6adSralph 				fprintf(trace, "push back %s, front=%d, back=%d, ", rdchar(c), _pb_front-_pushback, _pb_front-_pushback);
443a27c6adSralph #endif
453a27c6adSralph 			c = getchar();
463a27c6adSralph 		}
473a27c6adSralph #ifdef TRACE
483a27c6adSralph 		if (trace)
493a27c6adSralph 			fprintf(trace, "ACK\n");
503a27c6adSralph #endif
513a27c6adSralph 		_outcount = 0;
523a27c6adSralph 	}
533a27c6adSralph }
54