101 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* Copyright (c) 1985 Ceriel J.H. Jacobs */
 | 
						|
 | 
						|
/*
 | 
						|
 * Handle output to screen
 | 
						|
 */
 | 
						|
 | 
						|
# ifndef lint
 | 
						|
static char rcsid[] = "$Header$";
 | 
						|
# endif
 | 
						|
 | 
						|
# define _OUTPUT_
 | 
						|
 | 
						|
# include "in_all.h"
 | 
						|
# include "output.h"
 | 
						|
# include "main.h"
 | 
						|
 | 
						|
# define OBUFSIZ 64*128
 | 
						|
 | 
						|
static char _outbuf[OBUFSIZ];
 | 
						|
 | 
						|
VOID
 | 
						|
flush() {			/* Flush output buffer, by writing it */
 | 
						|
	register char *p = _outbuf;
 | 
						|
 | 
						|
	_ocnt = OBUFSIZ;
 | 
						|
	if (_optr) (VOID) write(1, p, _optr - p);
 | 
						|
	_optr = p;
 | 
						|
}
 | 
						|
 | 
						|
VOID
 | 
						|
nflush() {			/* Flush output buffer, ignoring it */
 | 
						|
 | 
						|
	_ocnt = OBUFSIZ;
 | 
						|
	_optr = _outbuf;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
fputch(ch) char ch; {		/* print a character */
 | 
						|
	putch(ch);
 | 
						|
}
 | 
						|
 | 
						|
VOID
 | 
						|
putline(s) register char *s; {	/* Print string s */
 | 
						|
 | 
						|
	if (!s) return;
 | 
						|
	while (*s) {
 | 
						|
		putch(*s++);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * A safe version of putline. All control characters are echoed as ^X
 | 
						|
 */
 | 
						|
 | 
						|
VOID
 | 
						|
cputline(s) char *s; {
 | 
						|
	register c;
 | 
						|
 | 
						|
	while (c = *s++) {
 | 
						|
		if ((unsigned) c > 0177) c &= 0177;
 | 
						|
		if (c < ' ' || c == 0177) {
 | 
						|
			putch('^');
 | 
						|
			c ^= 0100;
 | 
						|
		}
 | 
						|
		putch(c);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * Simple minded routine to print a number
 | 
						|
 */
 | 
						|
 | 
						|
VOID
 | 
						|
prnum(n) long n; {
 | 
						|
 | 
						|
	putline(getnum(n));
 | 
						|
}
 | 
						|
 | 
						|
static char *
 | 
						|
fillnum(n, p)
 | 
						|
	long n;
 | 
						|
	char *p;
 | 
						|
{
 | 
						|
	if (n >= 10) {
 | 
						|
		p = fillnum(n / 10, p);
 | 
						|
	}
 | 
						|
	*p++ = (int) (n % 10) + '0';
 | 
						|
	*p = '\0';
 | 
						|
	return p;
 | 
						|
}
 | 
						|
 | 
						|
char *
 | 
						|
getnum(n)
 | 
						|
	long n;
 | 
						|
{
 | 
						|
	static char buf[20];
 | 
						|
 | 
						|
	fillnum(n, buf);
 | 
						|
	return buf;
 | 
						|
}
 |