#include <data/case.h>
#include <data/dictionary.h>
+#include <data/format.h>
#include <data/procedure.h>
#include <data/settings.h>
#include <data/value-labels.h>
static inline struct var_freqs *
get_var_freqs (const struct variable *v)
{
- assert (v != NULL);
- assert (v->aux != NULL);
- return v->aux;
+ return var_get_aux (v);
}
static void determine_charts (void);
for (i = 0; i < n_variables; i++)
{
const struct variable *v = v_variables[i];
- const union value *val = case_data (c, v->fv);
+ const union value *val = case_data (c, v);
struct var_freqs *vf = get_var_freqs (v);
struct freq_tab *ft = &vf->tab;
hsh_hash_func *hash;
hsh_compare_func *compare;
- if (v->type == NUMERIC)
+ if (var_is_numeric (v))
{
hash = hash_value_numeric;
compare = compare_value_numeric_a;
sorting a frequency table by FRQ_SORT using VAR_TYPE
variables. */
static hsh_compare_func *
-get_freq_comparator (int frq_sort, int var_type)
+get_freq_comparator (int frq_sort, enum var_type var_type)
{
- /* Note that q2c generates tags beginning with 1000. */
- switch (frq_sort | (var_type << 16))
+ bool is_numeric = var_type == VAR_NUMERIC;
+ switch (frq_sort)
{
- case FRQ_AVALUE | (NUMERIC << 16): return compare_value_numeric_a;
- case FRQ_AVALUE | (ALPHA << 16): return compare_value_alpha_a;
- case FRQ_DVALUE | (NUMERIC << 16): return compare_value_numeric_d;
- case FRQ_DVALUE | (ALPHA << 16): return compare_value_alpha_d;
- case FRQ_AFREQ | (NUMERIC << 16): return compare_freq_numeric_a;
- case FRQ_AFREQ | (ALPHA << 16): return compare_freq_alpha_a;
- case FRQ_DFREQ | (NUMERIC << 16): return compare_freq_numeric_d;
- case FRQ_DFREQ | (ALPHA << 16): return compare_freq_alpha_d;
- default: NOT_REACHED ();
+ case FRQ_AVALUE:
+ return is_numeric ? compare_value_numeric_a : compare_value_alpha_a;
+ case FRQ_DVALUE:
+ return is_numeric ? compare_value_numeric_d : compare_value_alpha_d;
+ case FRQ_AFREQ:
+ return is_numeric ? compare_freq_numeric_a : compare_freq_alpha_a;
+ case FRQ_DFREQ:
+ return is_numeric ? compare_freq_numeric_d : compare_freq_alpha_d;
+ default:
+ NOT_REACHED ();
}
-
- return 0;
}
/* Returns true iff the value in struct freq F is non-missing
const struct freq *f = f_;
const struct variable *v = v_;
- return !mv_is_value_missing (&v->miss, f->v);
+ return !var_is_value_missing (v, f->v);
}
/* Summarizes the frequency table data for variable V. */
ft = &get_var_freqs (v)->tab;
assert (ft->mode == FRQM_GENERAL);
- compare = get_freq_comparator (cmd.sort, v->type);
+ compare = get_freq_comparator (cmd.sort, var_get_type (v));
/* Extract data from hash table. */
count = hsh_count (ft->data);
struct variable *v = v_variables[i];
struct var_freqs *vf;
- if (v->aux != NULL)
+ if (var_get_aux (v) != NULL)
{
msg (SE, _("Variable %s specified multiple times on VARIABLES "
- "subcommand."), v->name);
+ "subcommand."), var_get_name (v));
return 0;
}
- if (mode == FRQM_INTEGER && v->type != NUMERIC)
+ if (mode == FRQM_INTEGER && !var_is_numeric (v))
{
msg (SE, _("Integer mode specified, but %s is not a numeric "
- "variable."), v->name);
+ "variable."), var_get_name (v));
return 0;
}
vf->tab.vector = NULL;
vf->n_groups = 0;
vf->groups = NULL;
- vf->width = v->width;
- vf->print = v->print;
+ vf->width = var_get_width (v);
+ vf->print = *var_get_print_format (v);
if (vf->width > MAX_SHORT_STRING && get_algorithm () == COMPATIBLE)
{
+ enum fmt_type type = var_get_print_format (v)->type;
vf->width = MAX_SHORT_STRING;
- vf->print.w = MAX_SHORT_STRING * (v->print.type == FMT_AHEX ? 2 : 1);
+ vf->print.w = MAX_SHORT_STRING * (type == FMT_AHEX ? 2 : 1);
}
}
return 1;
}
for (i = 0; i < n; i++)
- if (v[i]->aux == NULL)
+ if (var_get_aux (v[i]) == NULL)
msg (SE, _("Variables %s specified on GROUPED but not on "
- "VARIABLES."), v[i]->name);
+ "VARIABLES."), var_get_name (v[i]));
else
{
struct var_freqs *vf = get_var_freqs (v[i]);
if (vf->groups != NULL)
msg (SE, _("Variables %s specified multiple times on GROUPED "
- "subcommand."), v[i]->name);
+ "subcommand."), var_get_name (v[i]));
else
{
vf->n_groups = nl;
int i;
if (lab)
- t->w[0] = min (tab_natural_width (t, d, 0), d->prop_em_width * 15);
+ t->w[0] = MIN (tab_natural_width (t, d, 0), d->prop_em_width * 15);
for (i = lab; i < lab + 5; i++)
- t->w[i] = max (tab_natural_width (t, d, i), d->prop_em_width * 8);
+ t->w[i] = MAX (tab_natural_width (t, d, i), d->prop_em_width * 8);
for (i = 0; i < t->nr; i++)
t->h[i] = d->font_height;
}
if (lab)
{
- const char *label = val_labs_find (v->val_labs, f->v[0]);
+ const char *label = var_lookup_value_label (v, &f->v[0]);
if (label != NULL)
tab_text (t, 0, r, TAB_LEFT, label);
}
if (lab)
{
- const char *label = val_labs_find (v->val_labs, f->v[0]);
+ const char *label = var_lookup_value_label (v, &f->v[0]);
if (label != NULL)
tab_text (t, 0, r, TAB_LEFT, label);
}
tab_float (t, 2 + lab, r, TAB_NONE, 100.0, 5, 1);
tab_float (t, 3 + lab, r, TAB_NONE, 100.0, 5, 1);
- tab_title (t, "%s: %s", v->name, v->label ? v->label : "");
+ tab_title (t, "%s", var_to_string (v));
tab_submit (t);
-
}
/* Sets the widths of all the columns and heights of all the rows in
static void
condensed_dim (struct tab_table *t, struct outp_driver *d)
{
- int cum_w = max (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL),
- max (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL),
+ int cum_w = MAX (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL),
+ MAX (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL),
outp_string_width (d, "000", OUTP_PROPORTIONAL)));
int i;
for (i = 0; i < 2; i++)
- t->w[i] = max (tab_natural_width (t, d, i), d->prop_em_width * 8);
+ t->w[i] = MAX (tab_natural_width (t, d, i), d->prop_em_width * 8);
for (i = 2; i < 4; i++)
t->w[i] = cum_w;
for (i = 0; i < t->nr; i++)
cmd.spaces == FRQ_SINGLE ? -1 : TAL_GAP, TAL_1,
0, 0, 3, r - 1);
tab_hline (t, TAL_2, 0, 3, 2);
- tab_title (t, "%s: %s", v->name, v->label ? v->label : "");
+ tab_title (t, "%s", var_to_string (v));
tab_columns (t, SOM_COL_DOWN, 1);
tab_submit (t);
}
if ( implicit_50th && n_percentiles > 0 )
--n_percentiles;
- if (v->type == ALPHA)
+ if (var_is_alpha (v))
return;
ft = &get_var_freqs (v)->tab;
if (ft->n_valid == 0)
{
msg (SW, _("No valid data for variable %s; statistics not displayed."),
- v->name);
+ var_get_name (v));
return;
}
calc_stats (v, stat_value);
tab_columns (t, SOM_COL_DOWN, 1);
if (show_varname)
- {
- if (v->label)
- tab_title (t, "%s: %s", v->name, v->label);
- else
- tab_title (t, "%s", v->name);
- }
+ tab_title (t, "%s", var_to_string (v));
else
tab_flags (t, SOMF_NO_TITLE);
/* Find out the extremes of the x value */
for ( frq = hsh_first(fh, &hi); frq != 0; frq = hsh_next(fh, &hi) )
{
- if ( mv_is_value_missing(&var->miss, frq->v))
+ if ( var_is_value_missing(var, frq->v))
continue;
if ( frq->v[0].f < x_min ) x_min = frq->v[0].f ;
{
const struct freq *frq = &frq_tab->valid[i];
- slices[i].label = value_to_string(frq->v, var);
+ slices[i].label = var_get_value_name (var, frq->v);
slices[i].magnetude = frq->c;
}