Moved EXPORT comments to new header file
[pspp-builds.git] / src / value-labels.c
index e061e452e5fbb000a79b535b8375ab002f79152a..cff267f09df9848b1e5fcc66c4bac9d407fac915 100644 (file)
 
    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 <config.h>
 #include "value-labels.h"
-#include <assert.h>
+#include "error.h"
 #include <stdlib.h>
-#include <string.h>
 #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;
@@ -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;
     }
@@ -384,7 +384,7 @@ hash_int_val_lab (const void *vl_, void *vls_)
 
 /* Free a value label. */
 void
-free_int_val_lab (void *vl_, void *vls_ unused
+free_int_val_lab (void *vl_, void *vls_ UNUSED
 {
   struct int_val_lab *vl = vl_;
 
@@ -462,7 +462,7 @@ atom_to_string (const struct atom *atom)
 
 /* A hsh_compare_func that compares A and B. */
 static int
-compare_atoms (const void *a_, const void *b_, void *aux unused
+compare_atoms (const void *a_, const void *b_, void *aux UNUSED
 {
   const struct atom *a = a_;
   const struct atom *b = b_;
@@ -472,7 +472,7 @@ compare_atoms (const void *a_, const void *b_, void *aux unused)
 
 /* A hsh_hash_func that hashes ATOM. */
 static unsigned
-hash_atom (const void *atom_, void *aux unused
+hash_atom (const void *atom_, void *aux UNUSED
 {
   const struct atom *atom = atom_;
 
@@ -481,10 +481,38 @@ hash_atom (const void *atom_, void *aux unused)
 
 /* A hsh_free_func that destroys ATOM. */
 static void
-free_atom (void *atom_, void *aux unused
+free_atom (void *atom_, void *aux UNUSED
 {
   struct atom *atom = atom_;
 
   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;
+}