diff --git a/src/stuff.c b/src/stuff.c index 68211ec8b5dc7e04052b75315a5737ac145b176a..fc10d0ab16b9d67ec6a0bedf8143b5a06c88daf6 100644 --- a/src/stuff.c +++ b/src/stuff.c @@ -5,7 +5,7 @@ \*/ /* - * $Id: stuff.c,v 1.6 1998/03/28 15:04:29 grubba Exp $ + * $Id: stuff.c,v 1.7 1999/02/27 20:35:34 grubba Exp $ */ #include "stuff.h" @@ -123,3 +123,33 @@ double my_strtod(char *nptr, char **endptr) } return tmp; } + +double strtod_pcharp(PCHARP ptr, PCHARP *endptr) +{ + /* NOTE: Cuts at 63 digits */ + + char buff[64]; + int i; + double res; + char *end_; + + endptr->shift = ptr.shift; + + if (!ptr.shift) { + return my_strtod(ptr.ptr, &endptr->ptr); + } + + for (i=0; i < 63; i++) { + unsigned int c = INDEX_PCHARP(ptr, i); + if (!c || (c >= 256)) { + break; + } + buff[i] = c; + } + buff[i] = 0; + + res = my_strtod(buff, &end_); + + endptr->ptr = ptr.ptr + ((end_ - buff)<<SHIFT); + return res; +} diff --git a/src/stuff.h b/src/stuff.h index dda28f0f6349a0c951909817c5f24b38cf8ca9f9..cfde9b6a1e54668dedf896d57cb6619a51cb5019 100644 --- a/src/stuff.h +++ b/src/stuff.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: stuff.h,v 1.5 1998/03/28 14:59:12 grubba Exp $ + * $Id: stuff.h,v 1.6 1999/02/27 20:36:14 grubba Exp $ */ #ifndef STUFF_H #define STUFF_H @@ -17,6 +17,7 @@ int my_log2(unsigned INT32 x); int count_bits(unsigned INT32 x); int is_more_than_one_bit(unsigned INT32 x); double my_strtod(char *nptr, char **endptr); +double strtod_pcharp(PCHARP ptr, PCHARP *endptr); /* Prototypes end here */ extern INT32 hashprimes[32];