sl@0: /**************************************************************** sl@0: sl@0: The author of this software is David M. Gay. sl@0: sl@0: Copyright (C) 1998 by Lucent Technologies sl@0: All Rights Reserved sl@0: sl@0: Permission to use, copy, modify, and distribute this software and sl@0: its documentation for any purpose and without fee is hereby sl@0: granted, provided that the above copyright notice appear in all sl@0: copies and that both that the copyright notice and this sl@0: permission notice and warranty disclaimer appear in supporting sl@0: documentation, and that the name of Lucent or any of its entities sl@0: not be used in advertising or publicity pertaining to sl@0: distribution of the software without specific, written prior sl@0: permission. sl@0: sl@0: LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, sl@0: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. sl@0: IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY sl@0: SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES sl@0: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER sl@0: IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, sl@0: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF sl@0: THIS SOFTWARE. sl@0: sl@0: ****************************************************************/ sl@0: sl@0: /* Please send bug reports to sl@0: David M. Gay sl@0: Bell Laboratories, Room 2C-463 sl@0: 600 Mountain Avenue sl@0: Murray Hill, NJ 07974-0636 sl@0: U.S.A. sl@0: dmg@bell-labs.com sl@0: */ sl@0: sl@0: #ifndef GDTOA_H_INCLUDED sl@0: #define GDTOA_H_INCLUDED sl@0: sl@0: #include "arith.h" sl@0: sl@0: #ifndef Long sl@0: #define Long long sl@0: #endif sl@0: #ifndef ULong sl@0: typedef unsigned Long ULong; sl@0: #endif sl@0: #ifndef UShort sl@0: typedef unsigned short UShort; sl@0: #endif sl@0: sl@0: #ifndef ANSI sl@0: #ifdef KR_headers sl@0: #define ANSI(x) () sl@0: #define Void /*nothing*/ sl@0: #else sl@0: #define ANSI(x) x sl@0: #define Void void sl@0: #endif sl@0: #endif /* ANSI */ sl@0: sl@0: #ifndef CONST sl@0: #ifdef KR_headers sl@0: #define CONST /* blank */ sl@0: #else sl@0: #define CONST const sl@0: #endif sl@0: #endif /* CONST */ sl@0: sl@0: enum { /* return values from strtodg */ sl@0: STRTOG_Zero = 0, sl@0: STRTOG_Normal = 1, sl@0: STRTOG_Denormal = 2, sl@0: STRTOG_Infinite = 3, sl@0: STRTOG_NaN = 4, sl@0: STRTOG_NaNbits = 5, sl@0: STRTOG_NoNumber = 6, sl@0: STRTOG_Retmask = 7, sl@0: sl@0: /* The following may be or-ed into one of the above values. */ sl@0: sl@0: STRTOG_Neg = 0x08, sl@0: STRTOG_Inexlo = 0x10, sl@0: STRTOG_Inexhi = 0x20, sl@0: STRTOG_Inexact = 0x30, sl@0: STRTOG_Underflow= 0x40, sl@0: STRTOG_Overflow = 0x80 sl@0: }; sl@0: sl@0: typedef struct sl@0: FPI { sl@0: int nbits; sl@0: int emin; sl@0: int emax; sl@0: int rounding; sl@0: int sudden_underflow; sl@0: } FPI; sl@0: sl@0: enum { /* FPI.rounding values: same as FLT_ROUNDS */ sl@0: FPI_Round_zero = 0, sl@0: FPI_Round_near = 1, sl@0: FPI_Round_up = 2, sl@0: FPI_Round_down = 3 sl@0: }; sl@0: sl@0: #ifdef __cplusplus sl@0: extern "C" { sl@0: #endif sl@0: sl@0: extern char* dtoa ANSI((double d, int mode, int ndigits, int *decpt, sl@0: int *sign, char **rve)); sl@0: extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp, sl@0: int mode, int ndigits, int *decpt, char **rve)); sl@0: extern void freedtoa ANSI((char*)); sl@0: extern float strtof ANSI((CONST char *, char **)); sl@0: extern double strtod ANSI((CONST char *, char **)); sl@0: extern int strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*)); sl@0: sl@0: extern char* g_ddfmt ANSI((char*, double*, int, unsigned)); sl@0: extern char* g_dfmt ANSI((char*, double*, int, unsigned)); sl@0: extern char* g_ffmt ANSI((char*, float*, int, unsigned)); sl@0: extern char* g_Qfmt ANSI((char*, void*, int, unsigned)); sl@0: extern char* g_xfmt ANSI((char*, void*, int, unsigned)); sl@0: extern char* g_xLfmt ANSI((char*, void*, int, unsigned)); sl@0: sl@0: extern int strtoId ANSI((CONST char*, char**, double*, double*)); sl@0: extern int strtoIdd ANSI((CONST char*, char**, double*, double*)); sl@0: extern int strtoIf ANSI((CONST char*, char**, float*, float*)); sl@0: extern int strtoIQ ANSI((CONST char*, char**, void*, void*)); sl@0: extern int strtoIx ANSI((CONST char*, char**, void*, void*)); sl@0: extern int strtoIxL ANSI((CONST char*, char**, void*, void*)); sl@0: extern int strtord ANSI((CONST char*, char**, int, double*)); sl@0: extern int strtordd ANSI((CONST char*, char**, int, double*)); sl@0: extern int strtorf ANSI((CONST char*, char**, int, float*)); sl@0: extern int strtorQ ANSI((CONST char*, char**, int, void*)); sl@0: extern int strtorx ANSI((CONST char*, char**, int, void*)); sl@0: extern int strtorxL ANSI((CONST char*, char**, int, void*)); sl@0: #if 1 sl@0: extern int strtodI ANSI((CONST char*, char**, double*)); sl@0: extern int strtopd ANSI((CONST char*, char**, double*)); sl@0: extern int strtopdd ANSI((CONST char*, char**, double*)); sl@0: extern int strtopf ANSI((CONST char*, char**, float*)); sl@0: extern int strtopQ ANSI((CONST char*, char**, void*)); sl@0: extern int strtopx ANSI((CONST char*, char**, void*)); sl@0: extern int strtopxL ANSI((CONST char*, char**, void*)); sl@0: #else sl@0: #define strtopd(s,se,x) strtord(s,se,1,x) sl@0: #define strtopdd(s,se,x) strtordd(s,se,1,x) sl@0: #define strtopf(s,se,x) strtorf(s,se,1,x) sl@0: #define strtopQ(s,se,x) strtorQ(s,se,1,x) sl@0: #define strtopx(s,se,x) strtorx(s,se,1,x) sl@0: #define strtopxL(s,se,x) strtorxL(s,se,1,x) sl@0: #endif sl@0: sl@0: #ifdef __cplusplus sl@0: } sl@0: #endif sl@0: #endif /* GDTOA_H_INCLUDED */