#include <data/sys-file-writer.h>
#include <data/sys-file-reader.h>
#include <data/value.h>
+#include <data/vardict.h>
#include <data/value-labels.h>
#include <data/format.h>
#include <data/data-in.h>
+#include <data/data-out.h>
#include <string.h>
typedef struct fmt_spec input_format ;
const char *ver
CODE:
assert (0 == strcmp (ver, bare_version));
+ i18n_init ();
msg_init (NULL, message_handler);
settings_init (0, 0);
fh_init ();
CODE:
SV *ret;
const struct fmt_spec *fmt = var_get_print_format (var);
+ const struct dictionary *dict = var_get_vardict (var)->dict;
union value uv;
char *s;
make_value_from_scalar (&uv, val, var);
- s = malloc (fmt->w);
- memset (s, '\0', fmt->w);
- data_out (&uv, fmt, s);
+ s = data_out (&uv, dict_get_encoding (dict), fmt);
value_destroy (&uv, var_get_width (var));
ret = newSVpv (s, fmt->w);
free (s);
sv_setpv (errstr, "");
CODE:
union value the_value;
+ int width = var_get_width (var);
+ int ok;
+ value_init (&the_value, width);
if ( var_is_numeric (var))
{
if ( ! looks_like_number (key))
{
sv_setpv (errstr, "Cannot add label with string key to a numeric variable");
+ value_destroy (&the_value, width);
XSRETURN_IV (0);
}
the_value.f = SvNV (key);
}
else
{
- if ( var_is_long_string (var) )
- {
- sv_setpv (errstr, "Cannot add label to a long string variable");
- XSRETURN_IV (0);
- }
- strncpy (the_value.short_string, SvPV_nolen(key), MAX_SHORT_STRING);
+ value_copy_str_rpad (&the_value, width, SvPV_nolen(key), ' ');
}
- if (! var_add_value_label (var, &the_value, label) )
+ ok = var_add_value_label (var, &the_value, label);
+ value_destroy (&the_value, width);
+ if (!ok)
{
sv_setpv (errstr, "Something went wrong");
XSRETURN_IV (0);
{
struct substring ss = ss_cstr (SvPV_nolen (sv));
if ( ! data_in (ss, LEGACY_NATIVE, ifmt->type, 0, 0, 0,
+ sfi->dict,
case_data_rw (c, v),
var_get_width (v)) )
{