]>
Commit | Line | Data |
---|---|---|
9385eb3d A |
1 | /**************************************************************** |
2 | ||
3 | The author of this software is David M. Gay. | |
4 | ||
5 | Copyright (C) 1998 by Lucent Technologies | |
6 | All Rights Reserved | |
7 | ||
8 | Permission to use, copy, modify, and distribute this software and | |
9 | its documentation for any purpose and without fee is hereby | |
10 | granted, provided that the above copyright notice appear in all | |
11 | copies and that both that the copyright notice and this | |
12 | permission notice and warranty disclaimer appear in supporting | |
13 | documentation, and that the name of Lucent or any of its entities | |
14 | not be used in advertising or publicity pertaining to | |
15 | distribution of the software without specific, written prior | |
16 | permission. | |
17 | ||
18 | LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | |
19 | INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. | |
20 | IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY | |
21 | SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
22 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |
23 | IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |
24 | ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF | |
25 | THIS SOFTWARE. | |
26 | ||
27 | ****************************************************************/ | |
28 | ||
3d9156a7 A |
29 | /* Please send bug reports to David M. Gay (dmg at acm dot org, |
30 | * with " at " changed at "@" and " dot " changed to "."). */ | |
9385eb3d A |
31 | |
32 | #ifndef GDTOA_H_INCLUDED | |
33 | #define GDTOA_H_INCLUDED | |
34 | ||
35 | #include "arith.h" | |
34e8f829 | 36 | #include <stddef.h> /* for size_t */ |
9385eb3d A |
37 | |
38 | #ifndef Long | |
39 | #define Long long | |
40 | #endif | |
41 | #ifndef ULong | |
42 | typedef unsigned Long ULong; | |
43 | #endif | |
44 | #ifndef UShort | |
45 | typedef unsigned short UShort; | |
46 | #endif | |
47 | ||
48 | #ifndef ANSI | |
49 | #ifdef KR_headers | |
50 | #define ANSI(x) () | |
51 | #define Void /*nothing*/ | |
52 | #else | |
53 | #define ANSI(x) x | |
54 | #define Void void | |
55 | #endif | |
56 | #endif /* ANSI */ | |
57 | ||
58 | #ifndef CONST | |
59 | #ifdef KR_headers | |
60 | #define CONST /* blank */ | |
61 | #else | |
62 | #define CONST const | |
63 | #endif | |
64 | #endif /* CONST */ | |
65 | ||
66 | enum { /* return values from strtodg */ | |
67 | STRTOG_Zero = 0, | |
68 | STRTOG_Normal = 1, | |
69 | STRTOG_Denormal = 2, | |
70 | STRTOG_Infinite = 3, | |
71 | STRTOG_NaN = 4, | |
72 | STRTOG_NaNbits = 5, | |
73 | STRTOG_NoNumber = 6, | |
74 | STRTOG_Retmask = 7, | |
75 | ||
76 | /* The following may be or-ed into one of the above values. */ | |
77 | ||
34e8f829 A |
78 | STRTOG_Neg = 0x08, /* does not affect STRTOG_Inexlo or STRTOG_Inexhi */ |
79 | STRTOG_Inexlo = 0x10, /* returned result rounded toward zero */ | |
80 | STRTOG_Inexhi = 0x20, /* returned result rounded away from zero */ | |
9385eb3d A |
81 | STRTOG_Inexact = 0x30, |
82 | STRTOG_Underflow= 0x40, | |
83 | STRTOG_Overflow = 0x80 | |
84 | }; | |
85 | ||
86 | typedef struct | |
87 | FPI { | |
88 | int nbits; | |
89 | int emin; | |
90 | int emax; | |
91 | int rounding; | |
92 | int sudden_underflow; | |
93 | } FPI; | |
94 | ||
95 | enum { /* FPI.rounding values: same as FLT_ROUNDS */ | |
96 | FPI_Round_zero = 0, | |
97 | FPI_Round_near = 1, | |
98 | FPI_Round_up = 2, | |
99 | FPI_Round_down = 3 | |
100 | }; | |
101 | ||
102 | #ifdef __cplusplus | |
103 | extern "C" { | |
104 | #endif | |
105 | ||
106 | extern char* dtoa ANSI((double d, int mode, int ndigits, int *decpt, | |
107 | int *sign, char **rve)); | |
108 | extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp, | |
109 | int mode, int ndigits, int *decpt, char **rve)); | |
110 | extern void freedtoa ANSI((char*)); | |
111 | extern float strtof ANSI((CONST char *, char **)); | |
112 | extern double strtod ANSI((CONST char *, char **)); | |
113 | extern int strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*)); | |
114 | ||
34e8f829 A |
115 | extern char* g_ddfmt ANSI((char*, double*, int, size_t)); |
116 | extern char* g_dfmt ANSI((char*, double*, int, size_t)); | |
117 | extern char* g_ffmt ANSI((char*, float*, int, size_t)); | |
118 | extern char* g_Qfmt ANSI((char*, void*, int, size_t)); | |
119 | extern char* g_xfmt ANSI((char*, void*, int, size_t)); | |
120 | extern char* g_xLfmt ANSI((char*, void*, int, size_t)); | |
9385eb3d A |
121 | |
122 | extern int strtoId ANSI((CONST char*, char**, double*, double*)); | |
123 | extern int strtoIdd ANSI((CONST char*, char**, double*, double*)); | |
124 | extern int strtoIf ANSI((CONST char*, char**, float*, float*)); | |
125 | extern int strtoIQ ANSI((CONST char*, char**, void*, void*)); | |
126 | extern int strtoIx ANSI((CONST char*, char**, void*, void*)); | |
127 | extern int strtoIxL ANSI((CONST char*, char**, void*, void*)); | |
128 | extern int strtord ANSI((CONST char*, char**, int, double*)); | |
129 | extern int strtordd ANSI((CONST char*, char**, int, double*)); | |
130 | extern int strtorf ANSI((CONST char*, char**, int, float*)); | |
131 | extern int strtorQ ANSI((CONST char*, char**, int, void*)); | |
132 | extern int strtorx ANSI((CONST char*, char**, int, void*)); | |
133 | extern int strtorxL ANSI((CONST char*, char**, int, void*)); | |
134 | #if 1 | |
135 | extern int strtodI ANSI((CONST char*, char**, double*)); | |
136 | extern int strtopd ANSI((CONST char*, char**, double*)); | |
137 | extern int strtopdd ANSI((CONST char*, char**, double*)); | |
138 | extern int strtopf ANSI((CONST char*, char**, float*)); | |
139 | extern int strtopQ ANSI((CONST char*, char**, void*)); | |
140 | extern int strtopx ANSI((CONST char*, char**, void*)); | |
141 | extern int strtopxL ANSI((CONST char*, char**, void*)); | |
142 | #else | |
143 | #define strtopd(s,se,x) strtord(s,se,1,x) | |
144 | #define strtopdd(s,se,x) strtordd(s,se,1,x) | |
145 | #define strtopf(s,se,x) strtorf(s,se,1,x) | |
146 | #define strtopQ(s,se,x) strtorQ(s,se,1,x) | |
147 | #define strtopx(s,se,x) strtorx(s,se,1,x) | |
148 | #define strtopxL(s,se,x) strtorxL(s,se,1,x) | |
149 | #endif | |
150 | ||
151 | #ifdef __cplusplus | |
152 | } | |
153 | #endif | |
154 | #endif /* GDTOA_H_INCLUDED */ |