DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦72b6a99fe⟧ TextFile

    Length: 1183 (0x49f)
    Types: TextFile
    Notes: UNIX file
    Names: »printf.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »unimenu/src/menu/printf.c« 

TextFile


/*
 * "@(#)printf.c	1.1 15:35:19 4/6/85"
 *
 * let's see if this can't replace some of the stdio stuff
 */

/*
 * printf - menu only uses %s and %d
 */
static	char	obuf[128] = {0};
static	char	*outp = 0;
static	int	ocnt = 0;

/* VARAGRS */
printf(fmt)
char	*fmt;
{
char	**argv;
char	*p;
long	*lp;

	outp = &obuf[0];
	ocnt = 0;

	for (argv = &fmt; *fmt; fmt++ )
	{
		if ( *fmt == '%' )
		{
			fmt++;
			if ( *fmt == 'd' )
				bpnum((int) *(++argv));
			else if ( *fmt == 'D' )
			{
				lp = (long *) (++argv);
				argv++;
				bplng(lp);
			}
			else if ( *fmt == 's' )
			{
				p = *(++argv);
				while ( *p )
					bwrch(*p++);
			}
			else if ( *fmt == 'c' )
				bwrch(*(++argv));
			else
				bwrch(*fmt);
		}
		else
			bwrch(*fmt);
	}
	if ( ocnt )
		write(1, obuf, ocnt);
}

static	bwrch(c)
char	c;
{
	*outp++ = c;
	if ( ++ocnt >= 128 )
	{
		write(1, obuf, ocnt);
		ocnt = 0;
	}
}

static	char	nums[] = "0123456789abcdef";
static bpnum(n)
int	n;
{

	if ( n < 0 )
	{
		bwrch('-');
		n = -n;
	}
	if ( n >= 10 )
		bpnum(n/10);
	bwrch(nums[n%10]);
}
static bplng(n)
long	n;
{
	if ( n < 0L )
	{
		bwrch('-');
		n = -n;
	}

	if ( n >= 10L )
		bplng(n/10L);
	bwrch(nums[(int) n % 10]);
}