BBN-Vax-TCP/src/libnet/_atouv.c

/*
 * some special routines to read numbers
 *	base is octal if leading 0, decimal otherwise
 *	don't bother with sign, everything is positive
 */

/*
 * ascii to long
 */
char *
_atoulv(sp, lp)
register char *sp;
register long *lp;
{
	register int dval;
	register long lval;
	register int base;

	base = (*sp == '0')? 8 : 10;
	for (lval = 0; (dval = digit(*sp, base)) >= 0; ++sp) {
		lval *= base;
		lval += dval;
	}
	*lp = lval;
	return sp;
}

/*
 * ascii to unsigned int
 */
char *
_atouiv(sp, ip)
register char *sp;
register unsigned int *ip;
{
	register int dval;
	register unsigned int ival;
	register int base;

	base = (*sp == '0')? 8 : 10;
	for (ival = 0; (dval = digit(*sp, base)) >= 0; ++sp) {
		ival *= base;
		ival += dval;
	}
	*ip = ival;
	return sp;
}

/*
 * return value of digit d in base b
 */
static
digit(d, b)
register int d, b;
{
	static char s[] = "0123456789abcdef";
	register char *p;

	for (p = s; b-- > 0 && *p; ++p)
		if (*p == d)
			return p - s;
	return -1;
}