xref: /csrg-svn/old/lib2648/rawchar.c (revision 18780)
111488Sralph /*
2*18780Sdist  * Copyright (c) 1980 Regents of the University of California.
3*18780Sdist  * All rights reserved.  The Berkeley software License Agreement
4*18780Sdist  * specifies the terms and conditions for redistribution.
5*18780Sdist  */
6*18780Sdist 
7*18780Sdist #ifndef lint
8*18780Sdist static char sccsid[] = "@(#)rawchar.c	5.1 (Berkeley) 04/26/85";
9*18780Sdist #endif not lint
10*18780Sdist 
11*18780Sdist /*
1211488Sralph  * get a character from the terminal, with no line buffering.
1311488Sralph  */
1411488Sralph 
1511488Sralph #include "2648.h"
1611488Sralph 
rawchar()1711488Sralph rawchar()
1811488Sralph {
1911488Sralph 	char c;
2011488Sralph 
2111488Sralph 	sync();
2211488Sralph 	escseq(NONE);
2311488Sralph 	fflush(stdout);
2411488Sralph 	if (_pb_front && _on2648) {
2511488Sralph 		c = *_pb_front++;
2611488Sralph #ifdef TRACE
2711488Sralph 		if (trace)
2811488Sralph 			fprintf(trace, "%s from queue, front=%d, back=%d\n", rdchar(c), _pb_front-_pushback, _pb_back-_pushback);
2911488Sralph #endif
3011488Sralph 		if (_pb_front > _pb_back) {
3111488Sralph 			_pb_front = _pb_back = NULL;
3211488Sralph #ifdef TRACE
3311488Sralph 			if (trace)
3411488Sralph 				fprintf(trace, "reset pushback to null\n");
3511488Sralph #endif
3611488Sralph 		}
3711488Sralph 		return (c);
3811488Sralph 	}
3911488Sralph 	_outcount = 0;
4011488Sralph 	c = getchar();
4111488Sralph #ifdef TRACE
4211488Sralph 	if (trace)
4311488Sralph 		fprintf(trace, "rawchar '%s'\n", rdchar(c));
4411488Sralph #endif
4511488Sralph 	return (c);
4611488Sralph }
47