AUSAM/source/mac/mac/mac32.c

Compare this file to the similar file:
Show the results in this format:

#include	"mac.h"
#include	"mac.x"

/*
 *   Auxilliary routines #2
 */


/*
 *   Convert ascii number to binary pointed to by 'p'.
 */
argnum()
{
	register int n;
	register int j;

	n = 0;

	if (*p == '0')  {
		p++;

		if (*p == 'x')  {
			p++;
			while ((j = any(*p, hextab)) >= 0)  {
				n = (n<<4) | j;
				p++;
				}
			return(n);
			}

		if (*p == 'b')  {
			p++;
			while (*p == '0' || *p == '1')
				n = (n<<1) | (*p++ - '0');
			return(n);
			}

		while ((j = any(*p, octtab)) >= 0)  {
			n = (n<<3) | j;
			p++;
			}
		return(n);
		}

	while ((j = any(*p, dectab)) >= 0)  {
		n = n * 10 + j;
		p++;
		}

	return(n);
}

/*
 *   Comparison for searching.
 *
 *	return  1:  *r > *s,
 *		0:  *r = *s,
 *	       -1:  *r < *s.
 */
cmp(r, s)
register char *r;
register char *s;
{
	register int i;


	/*
	 *   fast compare
	 */
	if (*r < *s)
		return(-1);
	if (*s < *r)
		return(1);

	i = 0;
	while (i < 8)  {
		r++;
		s++;

		if (*r < *s)
			return(-1);
		if (*s < *r)
			return(1);
		if (!*r)
			return(0);		/* equal on nul */
		i++;
		}
	return(0);
}


/*
 *   printl:  like prf1 but with leading zero's.
 */
printl(width, data)
register int width;
register int data;
{
	register char *r;
	register int i;
	register int fmt;
	register int mask;

	if (!data)  {
		for (i=0; i<width; i++)
			putchar('0');
		return;
		}

	r = buf;
	if (OPTION('h'))  {
		fmt = 'h';		/* hex */
		mask = BITMASK(WORDSIZ - 4);
		}
	if (OPTION('o'))  {
		fmt = 'o';		/* oct */
		mask = BITMASK(WORDSIZ - 3);
		}
	if (OPTION('b'))  {
		fmt = 'b';		/* bin */
		mask = BITMASK(WORDSIZ - 1);
		}

	i = width;
	while (i--)  switch (fmt)  {

		case 'd':
		case 'h':
			*r++ = hextab[data & 0x0f];
			data = (data >> 4) & mask;
			break;

		case 'o':
			*r++ = (data & 07) + '0';
			data = (data >> 3) & mask;
			break;

		case 'b':
			*r++ = (data & 01) + '0';
			data = (data >> 1) & mask;
			break;

		}

	r = &buf[width-1];
	for (i=0; i<width; i++)
		putchar(*r--);

	return;
}