File:  [Research Unix] / researchv9 / jtools / src / demo / pacman / prf.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:59 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv9-SUN3_old, researchv9-SUN3, HEAD
researchv9-SUN3(old)

#include "style.h"
#include "pacman.h"

/*	PIECES COMMENTED OUT TO SAVE SPACE */
#ifdef BLIT

Code textmode;
Point curloc;

showchar(c)
char c;
{
	static char str[] = "x";

	str[0] = c;
	curloc = string(&defont,str,&display,curloc,textmode);
}

movexy(x,y)
int	x,y;
{
	curloc.x = x*9+8;
	curloc.y = y*16+12;
}
#endif

/*VARARGS1*/
printf(fmt, x1)
char *fmt;
unsigned x1;
{
    extern int showchar();

    prf(fmt, &x1, showchar);
}


/*
 * Scaled down version of C Library printf.
 */

prf(fmt, adx, pfunc)
register char *fmt;
register int  *adx;
int          (*pfunc)();
{
	register int b, c, i, len;
	char *s;
	int zfill;
	int any;

loop:
	while ((c = *fmt++) != '%') {
		if(c == '\0')
			return;
		(*pfunc)(c);
	}
	len = 0;
	zfill = 0;

again:
	c = *fmt++;

	switch (c) {

/*
	case 'x': case 'X':
		b = 16;
		goto number;
	case 'o': case 'O':
		b = 8;
		goto number;
	case 'D':
	case 'u':
*/
	case 'd':
		b = 10;
number:
		printn((long)*adx, b, len, zfill, pfunc);
		break;
	case 'l':
		b = 10;
		printn(*((long *)(adx++)), b, len, zfill, pfunc);
		break;
/*
	case 'c':
		b = *adx;
		for (i = 24; i >= 0; i -= 8)
			if (c = (b >> i) & 0x7f)
				(*pfunc)(c);
		break;
	case 'b':
		b = *adx++;
		s = (char *)*adx;
		printn((long)b, *s++,0,0, pfunc);
		any = 0;
		if (b) {
			(*pfunc)('<');
			while (i = *s++) {
				if (b & (1 << (i-1))) {
					if (any)
						(*pfunc)(',');
					any = 1;
					for (; (c = *s) > 32; s++)
						(*pfunc)(c);
				} else
					for (; *s > 32; s++)
						;
			}
			if (any)
				(*pfunc)('>');
		}
		break;
*/
	case 's':
		s = (char *)*adx;
		while (c = *s++)
			(*pfunc)(c);
		break;

	case '0':
		if ( len==0 ) zfill = 1;
	case '1': case '2': case '3': case '4':
	case '5': case '6': case '7': case '8': case '9':
		len = len*10 + (c-'0');
		goto again;




	case '%':
		(*pfunc)('%');
		break;
	}
	adx++;
	goto loop;
}

/*
 * Printn prints a number n in base b.
 * We don't use recursion to avoid deep kernel stacks.
 */
printn(n, b, len, zfill, pfunc)
register long n;
register int len;
int (*pfunc)();
{
	char prbuf[11];
	register char *cp;

	if (b == 10 && n < 0) {
		(*pfunc)('-');
		n = (unsigned)(-n);
	}
	cp = prbuf;
	do {
		*cp++ = "0123456789abcdef"[n%b];
		n /= b;
	} while (n);
	while ( len-- > cp-prbuf )
		if ( zfill )
			(*pfunc)('0');
		else
			(*pfunc)(' ');

	do
		(*pfunc)(*--cp);
	while (cp > prbuf);
}



unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.