- if ( psppire_variable_get_type(pv) == NUMERIC)
- psppire_case_array_set_value(store->cases, row, index, set_sysmis_value,0);
- else
- psppire_case_array_set_value(store->cases, row, index, set_null_string_value,0);
- return TRUE;
+ idx = var_get_case_index (pv);
+
+ g_assert (idx >= 0);
+
+ v = psppire_data_store_get_value (store, row, idx, NULL,
+ var_get_width (pv));
+
+ g_return_val_if_fail (v, NULL);
+
+ if ( store->show_labels)
+ {
+ const gchar *label = var_lookup_value_label (pv, v);
+ if (label)
+ {
+ free (v);
+ return pspp_locale_to_utf8 (label, -1, 0);
+ }
+ }
+
+ fp = var_get_write_format (pv);
+
+ s = g_string_sized_new (fp->w + 1);
+ g_string_set_size (s, fp->w);
+
+ memset (s->str, 0, fp->w);
+
+ g_assert (fp->w == s->len);
+
+ /* Converts binary value V into printable form in the exactly
+ FP->W character in buffer S according to format specification
+ FP. No null terminator is appended to the buffer. */
+ data_out (v, fp, s->str);
+
+ text = pspp_locale_to_utf8 (s->str, fp->w, 0);
+ g_string_free (s, TRUE);
+
+ g_strchomp (text);
+
+ free (v);
+ return text;