home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 4
/
DATAFILE_PDCD4.iso
/
unix
/
unixlib36d
/
src
/
c
/
strtol
< prev
next >
Wrap
Text File
|
1994-03-08
|
2KB
|
148 lines
#ifdef __STDC__
static char sccs_id[] = "@(#) strtol.c 1.3 " __DATE__ " HJR";
#else
static char sccs_id[] = "@(#) strtol.c 1.3 26/9/90 HJR";
#endif
/* strtol.c (c) Copyright 1990 H.Rogers */
#include <ctype.h>
#ifdef __STDC__
#include <stdlib.h>
#else
extern int atoi ();
extern long atol ();
extern long strtol ();
extern unsigned long strtoul ();
#endif
#ifdef __STDC__
int (atoi) (register const char *s)
#else
int (atoi) (s)
register const char *s;
#endif
{
return (atoi (s));
}
#ifdef __STDC__
long (atol) (register const char *s)
#else
long (atol) (s)
register const char *s;
#endif
{
return (atol (s));
}
#define digit(x) (((x) > '9') ? (((x) & 31) + 9) : ((x) - '0'))
#ifdef __STDC__
long
strtol (register const char *s, char **end, register int b)
#else
long
strtol (s, end, b)
register const char *s;
char **end;
register int b;
#endif
{
register long r = 0L;
register int r_ = 0, d;
if (!s)
return (r);
while (isspace (*s))
s++;
if (*s == '+' || *s == '-')
{
if (*s == '-')
r_ = 1;
s++;
}
if (!b)
{
if (*s == '0')
{
s++;
b = 010;
if (*s == 'x')
{
s++;
b = 0x10;
}
}
else
b = 10;
}
else if (b == 16)
if (*s == '0' && *++s == 'x')
s++;
while (d = digit (*s), d >= 0 && d < b)
{
r = r * (long) b + (long) d;
s++;
}
if (end)
*end = (char *) s;
return (r_ ? -r : r);
}
#ifdef __STDC__
unsigned long
strtoul (register const char *s, char **end, register int b)
#else
unsigned long
strtoul (s, end, b)
register const char *s;
char **end;
register int b;
#endif
{
register unsigned long r = 0;
register int d;
if (!s)
return (r);
while (isspace (*s))
s++;
if (!b)
{
if (*s == '0')
{
s++;
b = 010;
if (*s == 'x')
{
s++;
b = 0x10;
}
}
else
b = 10;
}
else if (b == 16)
if (*s == '0' && *++s == 'x')
s++;
while (d = digit (*s), d >= 0 && d < b)
{
r = r * (unsigned long) b + (unsigned long) d;
s++;
}
if (end)
*end = (char *) s;
return (r);
}