X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=perl-module%2FPSPP.xs;h=36300cc806daa17d022c71d49473108f0834b5f2;hb=231ebe7e6d5c8c8eba47560793b5fa53c013b87f;hp=8179d29a3721aa27b0b0e7417085a515eb65c591;hpb=6b562f8a8263930b8d1ed1862efec76f2511ed08;p=pspp-builds.git diff --git a/perl-module/PSPP.xs b/perl-module/PSPP.xs index 8179d29a..36300cc8 100644 --- a/perl-module/PSPP.xs +++ b/perl-module/PSPP.xs @@ -38,9 +38,11 @@ #include #include #include +#include #include #include #include +#include #include typedef struct fmt_spec input_format ; @@ -163,6 +165,7 @@ onBoot (ver) const char *ver CODE: assert (0 == strcmp (ver, bare_version)); + i18n_init (); msg_init (NULL, message_handler); settings_init (0, 0); fh_init (); @@ -174,12 +177,11 @@ format_value (val, var) 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); @@ -371,6 +373,37 @@ clear_value_labels (var) CODE: var_clear_value_labels (var); +SV * +get_write_format (var) + struct variable *var +CODE: + HV *fmthash = (HV *) sv_2mortal ((SV *) newHV()); + const struct fmt_spec *fmt = var_get_write_format (var); + + hv_store (fmthash, "fmt", 3, newSVnv (fmt->type), 0); + hv_store (fmthash, "decimals", 8, newSVnv (fmt->d), 0); + hv_store (fmthash, "width", 5, newSVnv (fmt->w), 0); + + RETVAL = newRV ((SV *) fmthash); + OUTPUT: +RETVAL + +SV * +get_print_format (var) + struct variable *var +CODE: + HV *fmthash = (HV *) sv_2mortal ((SV *) newHV()); + const struct fmt_spec *fmt = var_get_print_format (var); + + hv_store (fmthash, "fmt", 3, newSVnv (fmt->type), 0); + hv_store (fmthash, "decimals", 8, newSVnv (fmt->d), 0); + hv_store (fmthash, "width", 5, newSVnv (fmt->w), 0); + + RETVAL = newRV ((SV *) fmthash); + OUTPUT: +RETVAL + + void pxs_set_write_format (var, fmt) struct variable *var @@ -612,6 +645,7 @@ CODE: { 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)) ) {