X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fvariable.c;h=2ceeecd2717c86212378bc783b0fea293d80d6bc;hb=6b3938165488f5562ab4c1e4a808f2f36407956c;hp=1f9b62e1929114db84b74ad9ee8f517d88d9d085;hpb=32ee0e0402d6d56674f53a47d879ec5c07dabe09;p=pspp diff --git a/src/data/variable.c b/src/data/variable.c index 1f9b62e192..2ceeecd271 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -26,6 +26,7 @@ #include "data/format.h" #include "data/identifier.h" #include "data/missing-values.h" +#include "data/settings.h" #include "data/value-labels.h" #include "data/vardict.h" #include "libpspp/assertion.h" @@ -157,6 +158,7 @@ var_destroy (struct variable *v) var_clear_aux (v); val_labs_destroy (v->val_labs); var_clear_label (v); + attrset_destroy (var_get_attributes (v)); free (v->name); free (v); } @@ -467,6 +469,19 @@ var_lookup_value_label (const struct variable *v, const union value *value) return val_labs_find (v->val_labs, value); } +/* + Append to STR the string representation of VALUE for variable V. + STR must be a pointer to an initialised struct string. +*/ +static void +append_value (const struct variable *v, const union value *value, + struct string *str) +{ + char *s = data_out (value, var_get_encoding (v), &v->print); + ds_put_cstr (str, s); + free (s); +} + /* Append STR with a string representing VALUE for variable V. That is, if VALUE has a label, append that label, otherwise format VALUE and append the formatted string. @@ -476,15 +491,33 @@ void var_append_value_name (const struct variable *v, const union value *value, struct string *str) { + enum settings_value_style style = settings_get_value_style (); const char *name = var_lookup_value_label (v, value); - if (name == NULL) + + switch (style) { - char *s = data_out (value, var_get_encoding (v), &v->print); - ds_put_cstr (str, s); - free (s); - } - else - ds_put_cstr (str, name); + case SETTINGS_VAL_STYLE_VALUES: + append_value (v, value, str); + break; + + case SETTINGS_VAL_STYLE_LABELS: + if (name == NULL) + append_value (v, value, str); + else + ds_put_cstr (str, name); + break; + + case SETTINGS_VAL_STYLE_BOTH: + default: + append_value (v, value, str); + if (name != NULL) + { + ds_put_cstr (str, " ("); + ds_put_cstr (str, name); + ds_put_cstr (str, ")"); + } + break; + }; } /* Print and write formats. */