Don't declare malloc, instead cast the value, Richard Stallman, Nov 91.
Include sys/types.h before signal.h, Apr 92.
Support NO_LONG_DOUBLE_IO in f_define and f_rep; new fn fake_f_rep, Apr 92.
+ Enclose -f output in #ifndef _FLOAT_H___, Richard Stallman, May 92.
+
+ Add #undef before every #define, Jim Wilson, Dec 92.
+
+ Changes by Paul Eggert, installed Feb 93:
+ (fake_f_rep): Clear all of u, initially. Make the ints in u unsigned.
+ (f_define): Use ordinary constants for long double
+ if it's same width as double. Make __convert_long_double_i unsigned.
COMPILING
With luck and a following wind, just the following will work:
#include <setjmp.h>
#endif
-/* Kludge around the possiblity that <stdio.h> includes <limits.h> */
+/* Kludge around the possibility that <stdio.h> includes <limits.h> */
#ifdef CHAR_BIT
#undef CHAR_BIT
#undef CHAR_MAX
if (L) printf("%slimits.h%s\n", co, oc);
if (F) printf("%sfloat.h%s\n", co, oc);
+ if (F) {
+ printf ("#ifndef _FLOAT_H___\n");
+ printf ("#define _FLOAT_H___\n");
+ }
#ifdef ID
printf("%sProduced on %s by enquire version %s, CWI, Amsterdam%s\n",
co, ID, VERSION, oc);
co, (total+511)/512, oc);
}
#endif
+ if (F) {
+ printf ("#endif %s _FLOAT_H___%s\n", co, oc);
+ }
farewell(bugs);
return bugs; /* To keep compilers and lint happy */
}
char *desc, *extra, *sort, *name; long val, lim, req; char *mark; {
/* Produce a #define for a signed int type */
describe(desc, extra);
+ printf("#undef %s%s\n", sort, name);
if (val >= 0) {
printf("#define %s%s %ld%s\n", sort, name, val, mark);
} else if (val + lim < 0) {
char *desc, *extra, *sort, *name; unsigned long val, req; char *mark; {
/* Produce a #define for an unsigned value */
describe(desc, extra);
+ printf("#undef %s%s\n", sort, name);
printf("#define %s%s %lu%s%s\n", sort, name, val, U, mark);
if (val != req) {
printf("%s*** Verify failed for above #define!\n", co);
Long_double val; char *mark; {
/* Produce a #define for a float/double/long double */
describe(desc, extra);
+ printf ("#undef %s%s\n", sort, name);
if (stdc) {
#ifdef NO_LONG_DOUBLE_IO
static int union_defined = 0;
- if (!strcmp(sort, "LDBL")) {
+ if (sizeof(double) != sizeof(Long_double)
+ && !strcmp(sort, "LDBL")) {
if (!union_defined) {
printf("#ifndef __LDBL_UNION__\n");
printf("#define __LDBL_UNION__\n");
printf("union __convert_long_double {\n");
- printf(" int __convert_long_double_i[4];\n");
+ printf(" unsigned __convert_long_double_i[4];\n");
printf(" long double __convert_long_double_d;\n");
printf("};\n");
printf("#endif\n");
/* Print a value of type TYPE with value VAL,
assuming that sprintf can't handle this type properly (without truncation).
- We create an expession that uses type casting to create the value from
+ We create an expression that uses type casting to create the value from
a bit pattern. */
char *fake_f_rep(type, val) char *type; Long_double val; {
static char buf[1024];
- union { int i[4]; Long_double ld;} u;
+ union { unsigned int i[4]; Long_double ld;} u;
+ u.i[0] = u.i[1] = u.i[2] = u.i[3] = 0;
u.ld = val;
- sprintf(buf, "(((union __convert_long_double) {0x%x, 0x%x, 0x%x, 0x%x}).__convert_long_double_d)",
+ sprintf(buf, "(__extension__ ((union __convert_long_double) {0x%x, 0x%x, 0x%x, 0x%x}).__convert_long_double_d)",
u.i[0], u.i[1], u.i[2], u.i[3]);
return buf;
}