]> pd.if.org Git - pdclib/blob - functions/stdlib/strtox.c
Re-import from Subversion.
[pdclib] / functions / stdlib / strtox.c
1 /* ----------------------------------------------------------------------------
2  * $Id$
3  * ----------------------------------------------------------------------------
4  * Public Domain C Library - http://pdclib.sourceforge.net
5  * This code is Public Domain. Use, modify, and redistribute at will.
6  * --------------------------------------------------------------------------*/
7
8 double atof( const char * s ) { /* TODO */ };
9 int atoi( const char * s ) { /* TODO */ };
10 long atol( const char * s ) { /* TODO */ };
11 long long atoll( const char * s) { /* TODO */ };
12
13 double strtod( const char * restrict s, char * * restrict endptr ) { /* TODO */ };
14 float strtof( const char * restrict s, char * * restrict endptr ) { /* TODO */ };
15 long double strtold( const char * restrict s, char * * restrict endptr ) { /* TODO */ };
16
17 long long strtoll( const char * restrict s, char * * restrict endptr, int base ) { /* TODO */ };
18 unsigned long long strtoull( const char * restrict s, char * * restrict endptr, int base) { /* TODO */ };
19
20 long strtol( const char * restrict s, char * * restrict endptr, int base ) { /* TODO */ };
21 unsigned long strtoul( const char * restrict s, char * * restrict endptr, int base) { /* TODO */ };
22
23 /* PDPC code - unreviewed, verbatim
24 double atof(const char *nptr)
25 {
26     return (strtod(nptr, (char **)NULL));
27 }
28
29 double strtod(const char *nptr, char **endptr)
30 {
31     double x = 0.0;
32     
33     while (1)
34     {
35         if (isdigit(*nptr))
36         {
37             x = x * 10 + (*nptr - '0');
38         }
39         else
40         {
41             if (endptr != NULL)
42             {
43                 *endptr = (char *)nptr;
44             }
45             break;
46         }
47         nptr++;
48     }
49     return (x);
50 }
51
52 int atoi(const char *nptr)
53 {
54     return ((int)strtol(nptr, (char **)NULL, 10));
55 }
56
57 long int atol(const char *nptr)
58 {
59     return (strtol(nptr, (char **)NULL, 10));
60 }
61
62 long int strtol(const char *nptr, char **endptr, int base)
63 {
64     long x = 0;
65     int undecided = 0;
66     
67     if (base == 0)
68     {
69         undecided = 1;
70     }
71     while (1)
72     {
73         if (isdigit(*nptr))
74         {
75             if (base == 0)
76             {
77                 if (*nptr == '0')
78                 {
79                     base = 8;
80                 }
81                 else
82                 {
83                     base = 10;
84                     undecided = 0;
85                 }
86             }
87             x = x * base + (*nptr - '0');
88             nptr++;
89         }
90         else if (isalpha(*nptr))
91         {
92             if ((*nptr == 'X') || (*nptr == 'x'))
93             {
94                 if ((base == 0) || ((base == 8) && undecided))
95                 {
96                     base = 16;
97                     undecided = 0;
98                 }
99                 else
100                 {
101                     break;
102                 }
103             }
104             else
105             {
106                 x = x * base + (toupper((unsigned char)*nptr) - 'A') + 10;
107                 nptr++;
108             }
109         }
110         else
111         {
112             break;
113         }
114     }
115     if (endptr != NULL)
116     {
117         *endptr = (char *)nptr;
118     }
119     return (x);
120 }
121
122 unsigned long int strtoul(const char *nptr, char **endptr, int base)
123 {
124     unsigned long x = 0;
125     
126     while (1)
127     {
128         if (isdigit(*nptr))
129         {
130             x = x * base + (*nptr - '0');
131             nptr++;
132         }
133         else if (isalpha(*nptr) && (base > 10))
134         {
135             x = x * base + (toupper((unsigned char)*nptr) - 'A') + 10;
136             nptr++;
137         }
138         else
139         {
140             break;
141         }
142     }
143     if (endptr != NULL)
144     {
145         *endptr = (char *)nptr;
146     }
147     return (x);
148 }
149 */