41 lines
668 B
C
41 lines
668 B
C
/* $Id$ */
|
|
/*
|
|
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
*/
|
|
/* str2long()
|
|
*/
|
|
|
|
#include "ack_string.h"
|
|
|
|
value(c, b)
|
|
char c;
|
|
int b;
|
|
{
|
|
register int ch;
|
|
|
|
ch = c - '0';
|
|
if ((unsigned) ch <= 9) return ch;
|
|
ch = c - 'A';
|
|
if ((unsigned) ch <= 5) return ch + 10;
|
|
ch = c - 'a';
|
|
if ((unsigned) ch <= 5) return ch + 10;
|
|
return b;
|
|
}
|
|
|
|
long
|
|
str2long(str, base)
|
|
register char *str;
|
|
int base;
|
|
{
|
|
int minus = 0, d;
|
|
long l = 0;
|
|
|
|
if (*str == '-') {
|
|
minus++;
|
|
str++;
|
|
}
|
|
while ((d = value(*str++, base)) < base)
|
|
l = base * l + d;
|
|
return minus ? -l : l;
|
|
}
|