Fully implement arbitrary delimiters on DATA LIST, extending the half
[pspp-builds.git] / src / data-in.c
index aac47680ff6731e791b807af483a3577eff9ab7e..c082516d664efe45f39f6eaf31a1b439c0cdfb3b 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <config.h>
 #include "data-in.h"
-#include <assert.h>
+#include "error.h"
 #include <math.h>
 #include <ctype.h>
 #include <stdarg.h>
@@ -42,7 +42,7 @@
 /* Specialized error routine. */
 
 static void dls_error (const struct data_in *, const char *format, ...)
-     __attribute__ ((format (printf, 2, 3)));
+     PRINTF_FORMAT (2, 3);
 
 static void
 dls_error (const struct data_in *i, const char *format, ...)
@@ -64,9 +64,9 @@ dls_error (const struct data_in *i, const char *format, ...)
     struct error e;
     struct string title;
 
-    ds_init (NULL, &title, 64);
+    ds_init (&title, 64);
     if (!getl_reading_script)
-      ds_concat (&title, _("data-file error: "));
+      ds_puts (&title, _("data-file error: "));
     if (i->f1 == i->f2)
       ds_printf (&title, _("(column %d"), i->f1);
     else
@@ -75,7 +75,7 @@ dls_error (const struct data_in *i, const char *format, ...)
     
     e.class = DE;
     err_location (&e.where);
-    e.title = ds_value (&title);
+    e.title = ds_c_str (&title);
     e.text = buf;
 
     err_vmsg (&e);
@@ -140,16 +140,18 @@ parse_numeric (struct data_in *i)
       if (*i->s == '-' || *i->s == '+')
        i->s++;
     }
+  else
+    sign = 1;
   
   if (type != FMT_DOT)
     {
-      decimal = set_decimal;
-      grouping = set_grouping;
+      decimal = get_decimal();
+      grouping = get_grouping();
     }
   else
     {
-      decimal = set_grouping;
-      grouping = set_decimal;
+      decimal = get_grouping();
+      grouping = get_decimal();
     }
 
   i->v->f = SYSMIS;
@@ -1489,7 +1491,7 @@ default_result (struct data_in *i)
   if (fmt->cat & FCAT_STRING)
     memset (i->v->s, ' ', i->format.w);
   else
-    i->v->f = set_blanks;
+    i->v->f = get_blanks();
 }
 
 int
@@ -1527,7 +1529,7 @@ data_in (struct data_in *i)
 
          if (++cp == i->e)
            {
-             i->v->f = set_blanks;
+             i->v->f = get_blanks();
              return 1;
            }
        }