Change signature of text_to_value.
[pspp-builds.git] / src / ui / gui / helper.c
index a4c07ca46d78ae74efd5317f3a7b87216578b1ee..b09a2f58c3f1cc7bff73e36aecbb4775a81c1049 100644 (file)
 /* Formats a value according to FORMAT
    The returned string must be freed when no longer required */
 gchar *
-value_to_text (union value v, struct fmt_spec format)
+value_to_text (union value v, const PsppireDict *dict, struct fmt_spec format)
 {
   gchar *s = 0;
 
-  s = g_new (gchar, format.w + 1);
-  data_out (&v, &format, s);
-  s[format.w]='\0';
+  s = data_out (&v, dict_get_encoding (dict->dict),  &format);
   g_strchug (s);
 
   return s;
 }
 
 
+/* Converts TEXT to a value.
 
-gboolean
-text_to_value (const gchar *text, union value *v,
-             struct fmt_spec format)
+   VAL will be initialised and filled by this function.
+   It is the caller's responsibility to destroy VAL when no longer needed.
+   VAR and DICT must be the variable and dictionary with which VAL
+   is associated.
+
+   On success, VAL is returned, NULL otherwise.
+*/
+union value *
+text_to_value (const gchar *text,
+              const PsppireDict *dict,
+              const struct variable *var,
+              union value *val)
 {
-  bool ok;
+  const struct fmt_spec *format = var_get_print_format (var);
+  int width = var_get_width (var);
 
-  if ( format.type != FMT_A)
+  if ( format->type != FMT_A)
     {
-      if ( ! text ) return FALSE;
+      if ( ! text ) return NULL;
 
       {
        const gchar *s = text;
@@ -82,16 +91,18 @@ text_to_value (const gchar *text, union value *v,
            s++;
          }
 
-       if ( !*s) return FALSE;
+       if ( !*s) return NULL;
       }
     }
 
+  value_init (val, width);
   msg_disable ();
-  ok = data_in (ss_cstr (text), LEGACY_NATIVE, format.type, 0, 0, 0,
-                v, fmt_var_width (&format));
+  data_in (ss_cstr (text), UTF8, format->type, 0, 0, 0,
+               dict->dict,
+                val, width);
   msg_enable ();
 
-  return ok;
+  return val;
 }