X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvalue-labels.c;h=03eda933ad2820ea2c49647379dae65ac5b00db4;hb=92fb12eb06716d14c05b781f5d9dcde956d77c30;hp=9c7640866ceb209e5a77c38cd470228328d156f8;hpb=7b98b3a4f58f6dc5a8e9cbc188b627966d5e652d;p=pspp diff --git a/src/value-labels.c b/src/value-labels.c index 9c7640866c..03eda933ad 100644 --- a/src/value-labels.c +++ b/src/value-labels.c @@ -14,16 +14,16 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ #include #include "value-labels.h" -#include +#include "error.h" #include -#include #include "alloc.h" #include "hash.h" +#include "str.h" static hsh_compare_func compare_int_val_lab; static hsh_hash_func hash_int_val_lab; @@ -111,7 +111,7 @@ val_labs_clear (struct val_labs *vls) /* Returns the number of value labels in VLS. */ size_t -val_labs_count (struct val_labs *vls) +val_labs_count (const struct val_labs *vls) { assert (vls != NULL); @@ -220,7 +220,7 @@ val_labs_remove (struct val_labs *vls, union value value) if (vls->labels != NULL) { struct int_val_lab *ivl = create_int_val_lab (vls, value, ""); - int deleted = hsh_delete (vls->labels, &ivl); + int deleted = hsh_delete (vls->labels, ivl); free (ivl); return deleted; } @@ -488,3 +488,31 @@ free_atom (void *atom_, void *aux UNUSED) free (atom->string); free (atom); } + + +/* Get a string representing the value. + That is, if it has a label, then return that label, + otherwise, if the value is alpha, then return the string for it, + else format it and return the formatted string +*/ +const char * +value_to_string (const union value *val, const struct variable *var) +{ + char *s; + + assert (val != NULL); + assert (var != NULL); + + s = val_labs_find (var->val_labs, *val); + if (s == NULL) + { + static char buf[256]; + if (var->width != 0) + str_copy_buf_trunc (buf, sizeof buf, val->s, var->width); + else + snprintf(buf, 100, "%g", val->f); + s = buf; + } + + return s; +}