BBN-Vax-TCP/src/libbbn/atoiv.c
/*
* C library - atoiv: get an int
* from a string and return it where the second argument
* points (with pointer to next char returned directly).
* Atoint is like atoiv except third argument
* is base if non-zero (0 defaults to octal on leading zero, else decimal).
*/
char *atoiv (astring, apointer)
char *astring;
int *apointer;
{
extern char *atoint ();
return (atoint (astring, apointer, 0));
}
char *atoint (astring, apointer, abase)
char *astring;
int *apointer,
abase;
{
register char *pointer;
register int number,
base;
int negative;
for (pointer = astring; *pointer == ' ' || *pointer == '\t'; pointer++)
;
for (negative = 0; *pointer == '-'; pointer++)
negative++;
if (abase != 0)
base = abase;
else
{
if ((pointer[0] == '0') && ((pointer[1] == 'x') || (pointer[1] == 'X')))
{
base = 16;
pointer = &pointer[2];
}
else
base = (*pointer == '0') ? 8 : 10;
}
for (number = 0; *pointer; pointer++)
{
if ((*pointer >= '0') && (*pointer <= '9'))
{
number = (number * base) + (*pointer - '0');
continue;
}
if (base <= 10)
break;
if ((*pointer >= 'A') && (*pointer <= 'Z'))
{
number = (number * base) + ((*pointer - 'A') + 10);
continue;
}
if ((*pointer >= 'a') && (*pointer <= 'z'))
{
number = (number * base) + ((*pointer - 'a') + 10);
continue;
}
break;
}
if (negative)
number = -number;
*apointer = number;
return (pointer);
}