home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Source Code 1992 March
/
Source_Code_CD-ROM_Walnut_Creek_March_1992.iso
/
usenet
/
altsrcs
/
3
/
3571
/
atov.c
next >
Wrap
C/C++ Source or Header
|
1991-07-02
|
2KB
|
76 lines
/* +-------------------------------------------------------------------+ */
/* | Copyright 1988,1991, David Koblas. | */
/* | Permission to use, copy, modify, and distribute this software | */
/* | and its documentation for any purpose and without fee is hereby | */
/* | granted, provided that the above copyright notice appear in all | */
/* | copies and that both that copyright notice and this permission | */
/* | notice appear in supporting documentation. This software is | */
/* | provided "as is" without express or implied warranty. | */
/* +-------------------------------------------------------------------+ */
#include <ctype.h>
#ifdef TEST
main(argc,argv)
int argc;
char **argv;
{
int i;
for (i=1;i<argc;i++)
printf("%10s == %d\n",argv[i],atov(argv[i],0));
}
#endif
atov(str,type)
char *str;
int type;
{
int sign = 1;
int i;
char c;
int val=0,n;
i=0;
while ((str[i]==' ') || (str[i]=='\t')) i++;
if (str[i]=='-') {
sign = -1;
i++;
} else if (str[i]=='+') {
sign = 1;
i++;
}
if (type==0) {
if (str[i]=='0') {
i++;
if (str[i]=='%') {
i++;
type=2;
} else if (str[i]=='x') {
i++;
type=16;
} else {
type=8;
}
} else {
type=10;
}
}
for (;i<strlen(str);i++) {
c=str[i];
if (isdigit(c)) {
n = c - '0';
} else if (isupper(c)) {
n = c - 'A' + 10;
} else if (islower(c)) {
n = c - 'a' + 10;
} else {
goto out;
}
if (n>=type)
goto out;
val = (val*type)+n;
}
out:
return(val * sign);
}