/* Berzerkeley atoi.c hacked to recognize octal & hex - psl 10/88
** 0*[xX] => hex, else 0* => octal, else decimal.
** Decimal numbers may be signed, octal and hex may not.
*/

myatoi(cp)
register char *cp;
{
	register int n, f, base;

	base = 10;
	for (f = 0; *cp == ' ' || *cp == '\t' || *cp == '0'; )
	    if (*cp++ == '0')
		base = 8;
	if (base == 8 && (*cp == 'x' || *cp == 'X')) {
	    base = 16;
	    cp++;
	} else if (*cp == '-')
	    f = *cp++;
	else if (*cp == '+')
	    cp++;
	n = 0;
	if (base == 16) {
	    while (('0' <= *cp && *cp <= '9')
	     || ('A' <= *cp && *cp <= 'F')
	     || ('a' <= *cp && *cp <= 'f')) {
		if ('0' <= *cp && *cp <= '9')
		    n = (n << 4) + *cp++ - '0';
		else if ('A' <= *cp && *cp <= 'F')
		    n = (n << 4) + 10 + *cp++ - 'A';
		else
		    n = (n << 4) + 10 + *cp++ - 'a';
	    }
	} else
	    while (*cp >= '0' && *cp <= '9')
		n = n * base + *cp++ - '0';
	return (f? -n : n);
}
