Make the expression code a little nicer and fix bugs found
[pspp-builds.git] / src / data-out.c
index c1f3ff8120feaa93c13844c4c280ed87babe4b1c..e8d0fa3b45e3c4fd298de0bf3c07739170b74173 100644 (file)
@@ -18,7 +18,7 @@
    02111-1307, USA. */
 
 #include <config.h>
-#include <assert.h>
+#include "error.h"
 #include <ctype.h>
 #include <math.h>
 #include <float.h>
@@ -103,9 +103,11 @@ data_out (char *s, const struct fmt_spec *fp, const union value *v)
 
         case FMT_A:
           assert (0);
+          abort ();
 
         case FMT_AHEX:
           assert (0);
+          abort ();
 
         case FMT_IB:
           ok = convert_IB (s, fp, number);
@@ -159,6 +161,7 @@ data_out (char *s, const struct fmt_spec *fp, const union value *v)
 
         default:
           assert (0);
+          abort ();
         }
     }
   else 
@@ -178,6 +181,7 @@ data_out (char *s, const struct fmt_spec *fp, const union value *v)
 
         default:
           assert (0);
+          abort ();
         }
     }
 
@@ -413,8 +417,8 @@ convert_E (char *dst, const struct fmt_spec *fp, double number)
 
   /* The C locale always uses a period `.' as a decimal point.
      Translate to comma if necessary. */
-  if ((set_decimal == ',' && fp->type != FMT_DOT)
-      || (set_decimal == '.' && fp->type == FMT_DOT))
+  if ((get_decimal() == ',' && fp->type != FMT_DOT)
+      || (get_decimal() == '.' && fp->type == FMT_DOT))
     {
       char *cp = strchr (buf, '.');
       if (cp)
@@ -1026,7 +1030,7 @@ insert_commas (char *dst, const char *src, const struct fmt_spec *fp)
       if (i % 3 == 0 && n_digits > i && n_items > n_reserved)
        {
          n_items--;
-         *dst++ = fp->type == FMT_COMMA ? set_grouping : set_decimal;
+         *dst++ = fp->type == FMT_COMMA ? get_grouping() : get_decimal();
        }
       *dst++ = *sp++;
     }
@@ -1052,7 +1056,7 @@ year4 (int year)
 static int
 try_CCx (char *dst, const struct fmt_spec *fp, double number)
 {
-  struct set_cust_currency *cc = &set_cc[fp->type - FMT_CCA];
+  const struct set_cust_currency *cc = get_cc(fp->type - FMT_CCA);
 
   struct fmt_spec f;
 
@@ -1062,7 +1066,7 @@ try_CCx (char *dst, const struct fmt_spec *fp, double number)
 
   /* Determine length available, decimal character for number
      proper. */
-  f.type = cc->decimal == set_decimal ? FMT_COMMA : FMT_DOT;
+  f.type = cc->decimal == get_decimal() ? FMT_COMMA : FMT_DOT;
   f.w = fp->w - strlen (cc->prefix) - strlen (cc->suffix);
   if (number < 0)
     f.w -= strlen (cc->neg_prefix) + strlen (cc->neg_suffix) - 1;
@@ -1297,8 +1301,8 @@ try_F (char *dst, const struct fmt_spec *fp, double number)
       if (n == n_int + n_dec)
        {
          /* Convert periods `.' to commas `,' for our foreign friends. */
-         if ((set_decimal == ',' && fp->type != FMT_DOT)
-             || (set_decimal == '.' && fp->type == FMT_DOT))
+         if ((get_decimal() == ',' && fp->type != FMT_DOT)
+             || (get_decimal() == '.' && fp->type == FMT_DOT))
            {
              cp = strchr (cp, '.');
              if (cp)