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;
struct atom;
static struct atom *atom_create (const char *string);
static void atom_destroy (struct atom *);
-static const char *atom_to_string (const struct atom *);
+static char *atom_to_string (const struct atom *);
/* A set of value labels. */
struct val_labs
returns the label; otherwise, returns a null pointer. If
VLS's width is greater than MAX_SHORT_STRING, always returns a
null pointer. */
-const char *
+char *
val_labs_find (const struct val_labs *vls, union value value)
{
assert (vls != NULL);
/* 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_;
}
/* Returns the string associated with ATOM. */
-static const char *
+static char *
atom_to_string (const struct atom *atom)
{
assert (atom != NULL);
/* 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_;
/* 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_;
/* 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)
+{
+ static char buf[100];
+ char *s;
+ const struct val_labs *val_labs ;
+
+ if ( !val || ! var )
+ return 0;
+
+ val_labs = var->val_labs;
+
+
+ s = val_labs_find (val_labs, *val);
+
+ if ( s )
+ return s;
+
+ if ( 0 == var->width )
+ snprintf(buf,100,"%g",val->f);
+ else
+ {
+ strncpy(buf,val->s,MAX_SHORT_STRING);
+ strcat(buf,"\0");
+ }
+ return buf;
+}