Make dictionary compacting functions a little more general.
[pspp-builds.git] / src / data / data-in.c
index cc3a3e40775d63f134bbe71095ad82593ca59fc9..1e8fe67983350fefb5ae4ce117b312bbb0711f9f 100644 (file)
@@ -39,8 +39,6 @@
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
-
-#include <libpspp/debug-print.h>
 \f
 /* Specialized error routine. */
 
@@ -50,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
@@ -570,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;
 }