Implemented support for very long strings a la spss v13/v14
[pspp-builds.git] / src / data / data-in.c
index 1502417be5d048343e0106a9d9f445ab0626a1fe..1e8fe67983350fefb5ae4ce117b312bbb0711f9f 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <config.h>
 #include "data-in.h"
-#include "message.h"
+#include <libpspp/message.h>
 #include <math.h>
 #include <ctype.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
-#include "message.h"
+#include <libpspp/message.h>
 #include "calendar.h"
+#include <libpspp/compiler.h>
 #include "identifier.h"
-#include "magic.h"
-#include "misc.h"
+#include <libpspp/magic.h>
+#include <libpspp/misc.h>
 #include "settings.h"
-#include "str.h"
+#include <libpspp/str.h>
 #include "variable.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
-
-#include "debug-print.h"
 \f
 /* Specialized error routine. */
 
@@ -49,26 +48,26 @@ static void dls_error (const struct data_in *, const char *format, ...)
 static void
 vdls_error (const struct data_in *i, const char *format, va_list args)
 {
-  struct error e;
-  struct string title;
+  struct msg m;
+  struct string text;
 
   if (i->flags & DI_IGNORE_ERROR)
     return;
 
-  ds_init (&title, 64);
+  ds_init (&text, 64);
   if (i->f1 == i->f2)
-    ds_printf (&title, _("(column %d"), i->f1);
+    ds_printf (&text, _("(column %d"), i->f1);
   else
-    ds_printf (&title, _("(columns %d-%d"), i->f1, i->f2);
-  ds_printf (&title, _(", field type %s) "), fmt_to_string (&i->format));
-    
-  e.class = DE;
-  err_location (&e.where);
-  e.title = ds_c_str (&title);
+    ds_printf (&text, _("(columns %d-%d"), i->f1, i->f2);
+  ds_printf (&text, _(", field type %s) "), fmt_to_string (&i->format));
+  ds_vprintf (&text, format, args);
 
-  err_vmsg (&e, format, args);
+  m.category = MSG_DATA;
+  m.severity = MSG_ERROR;
+  msg_location (&m.where);
+  m.text = ds_c_str (&text);
 
-  ds_destroy (&title);
+  msg_emit (&m);
 }
 
 static void
@@ -569,10 +568,14 @@ parse_RB (struct data_in *i)
   return true;
 }
 
+
 static inline bool
 parse_A (struct data_in *i)
 {
-  buf_copy_rpad (i->v->s, i->format.w, i->s, i->e - i->s);
+  const int bytes = width_to_bytes(i->format.w);
+
+  copy_mangle (i->v->s, bytes, i->s, i->e - i->s);
+  
   return true;
 }