};
/* Table of statistics, indexed by dsc_*. */
-static struct frq_info st_name[frq_n_stats + 1] =
+static const struct frq_info st_name[frq_n_stats + 1] =
{
{FRQ_ST_MEAN, N_("Mean")},
{FRQ_ST_SEMEAN, N_("S.E. Mean")},
};
static inline struct var_freqs *
-get_var_freqs (struct variable *v)
+get_var_freqs (const struct variable *v)
{
assert (v != NULL);
assert (v->aux != NULL);
static void calc_stats (struct variable *v, double d[frq_n_stats]);
-static void precalc (const struct ccase *, void *);
-static bool calc (const struct ccase *, void *);
-static void postcalc (void *);
+static void precalc (const struct ccase *, void *, const struct dataset *);
+static bool calc (const struct ccase *, void *, const struct dataset *);
+static bool postcalc (void *, const struct dataset *);
static void postprocess_freq_tab (struct variable *);
static void dump_full (struct variable *);
\f
/* Parser and outline. */
-static int internal_cmd_frequencies (void);
+static int internal_cmd_frequencies (struct lexer *lexer, struct dataset *ds);
int
-cmd_frequencies (void)
+cmd_frequencies (struct lexer *lexer, struct dataset *ds)
{
int result;
int_pool = pool_create ();
- result = internal_cmd_frequencies ();
+ result = internal_cmd_frequencies (lexer, ds);
pool_destroy (int_pool);
int_pool=0;
pool_destroy (gen_pool);
}
static int
-internal_cmd_frequencies (void)
+internal_cmd_frequencies (struct lexer *lexer, struct dataset *ds)
{
int i;
bool ok;
n_variables = 0;
v_variables = NULL;
- if (!parse_frequencies (&cmd, NULL))
+ if (!parse_frequencies (lexer, ds, &cmd, NULL))
return CMD_FAILURE;
if (cmd.onepage_limit == NOT_LONG)
int pl;
subc_list_double *ptl_list = &cmd.dl_percentiles[i];
for ( pl = 0 ; pl < subc_list_double_count(ptl_list); ++pl)
- add_percentile(subc_list_double_at(ptl_list,pl) / 100.0 );
+ add_percentile (subc_list_double_at(ptl_list, pl) / 100.0 );
}
}
if ( cmd.sbc_ntiles )
{
int j;
for (j = 0; j <= cmd.n_ntiles[i]; ++j )
- add_percentile(j / (double) cmd.n_ntiles[i]);
+ add_percentile (j / (double) cmd.n_ntiles[i]);
}
}
/* Do it! */
- ok = procedure_with_splits (precalc, calc, postcalc, NULL);
+ ok = procedure_with_splits (ds, precalc, calc, postcalc, NULL);
free_frequencies(&cmd);
/* Add data from case C to the frequency table. */
static bool
-calc (const struct ccase *c, void *aux UNUSED)
+calc (const struct ccase *c, void *aux UNUSED, const struct dataset *ds)
{
double weight;
size_t i;
bool bad_warn = true;
- weight = dict_get_case_weight (default_dict, c, &bad_warn);
+ weight = dict_get_case_weight (dataset_dict (ds), c, &bad_warn);
for (i = 0; i < n_variables; i++)
{
- struct variable *v = v_variables[i];
+ const struct variable *v = v_variables[i];
const union value *val = case_data (c, v->fv);
struct var_freqs *vf = get_var_freqs (v);
struct freq_tab *ft = &vf->tab;
/* Prepares each variable that is the target of FREQUENCIES by setting
up its hash table. */
static void
-precalc (const struct ccase *first, void *aux UNUSED)
+precalc (const struct ccase *first, void *aux UNUSED, const struct dataset *ds)
{
size_t i;
- output_split_file_values (first);
+ output_split_file_values (ds, first);
pool_destroy (gen_pool);
gen_pool = pool_create ();
/* Finishes up with the variables after frequencies have been
calculated. Displays statistics, percentiles, ... */
-static void
-postcalc (void *aux UNUSED)
+static bool
+postcalc (void *aux UNUSED, const struct dataset *ds UNUSED)
{
size_t i;
norm.N = vf->tab.valid_cases;
- calc_stats(v,d);
+ calc_stats (v, d);
norm.mean = d[frq_mean];
norm.stddev = d[frq_stddev];
cleanup_freq_tab (v);
}
+
+ return true;
}
/* Returns the comparison function that should be used for
return 0;
}
-/* Returns nonzero iff the value in struct freq F is non-missing
+/* Returns true iff the value in struct freq F is non-missing
for variable V. */
-static int
-not_missing (const void *f_, void *v_)
+static bool
+not_missing (const void *f_, const void *v_)
{
const struct freq *f = f_;
- struct variable *v = v_;
+ const struct variable *v = v_;
return !mv_is_value_missing (&v->miss, f->v);
}
/* Parses the VARIABLES subcommand, adding to
{n_variables,v_variables}. */
static int
-frq_custom_variables (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
+frq_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
{
int mode;
int min = 0, max = 0;
size_t old_n_variables = n_variables;
size_t i;
- lex_match ('=');
- if (token != T_ALL && (token != T_ID
- || dict_lookup_var (default_dict, tokid) == NULL))
+ lex_match (lexer, '=');
+ if (lex_token (lexer) != T_ALL && (lex_token (lexer) != T_ID
+ || dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) == NULL))
return 2;
- if (!parse_variables (default_dict, &v_variables, &n_variables,
+ if (!parse_variables (lexer, dataset_dict (ds), &v_variables, &n_variables,
PV_APPEND | PV_NO_SCRATCH))
return 0;
- if (!lex_match ('('))
+ if (!lex_match (lexer, '('))
mode = FRQM_GENERAL;
else
{
mode = FRQM_INTEGER;
- if (!lex_force_int ())
+ if (!lex_force_int (lexer))
return 0;
- min = lex_integer ();
- lex_get ();
- if (!lex_force_match (','))
+ min = lex_integer (lexer);
+ lex_get (lexer);
+ if (!lex_force_match (lexer, ','))
return 0;
- if (!lex_force_int ())
+ if (!lex_force_int (lexer))
return 0;
- max = lex_integer ();
- lex_get ();
- if (!lex_force_match (')'))
+ max = lex_integer (lexer);
+ lex_get (lexer);
+ if (!lex_force_match (lexer, ')'))
return 0;
if (max < min)
{
/* Parses the GROUPED subcommand, setting the n_grouped, grouped
fields of specified variables. */
static int
-frq_custom_grouped (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
+frq_custom_grouped (struct lexer *lexer, struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
{
- lex_match ('=');
- if ((token == T_ID && dict_lookup_var (default_dict, tokid) != NULL)
- || token == T_ID)
+ lex_match (lexer, '=');
+ if ((lex_token (lexer) == T_ID && dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) != NULL)
+ || lex_token (lexer) == T_ID)
for (;;)
{
size_t i;
size_t n;
struct variable **v;
- if (!parse_variables (default_dict, &v, &n,
+ if (!parse_variables (lexer, dataset_dict (ds), &v, &n,
PV_NO_DUPLICATE | PV_NUMERIC))
return 0;
- if (lex_match ('('))
+ if (lex_match (lexer, '('))
{
nl = ml = 0;
dl = NULL;
- while (lex_integer ())
+ while (lex_integer (lexer))
{
if (nl >= ml)
{
ml += 16;
dl = pool_nrealloc (int_pool, dl, ml, sizeof *dl);
}
- dl[nl++] = tokval;
- lex_get ();
- lex_match (',');
+ dl[nl++] = lex_tokval (lexer);
+ lex_get (lexer);
+ lex_match (lexer, ',');
}
/* Note that nl might still be 0 and dl might still be
NULL. That's okay. */
- if (!lex_match (')'))
+ if (!lex_match (lexer, ')'))
{
free (v);
msg (SE, _("`)' expected after GROUPED interval list."));
}
}
free (v);
- if (!lex_match ('/'))
+ if (!lex_match (lexer, '/'))
break;
- if ((token != T_ID || dict_lookup_var (default_dict, tokid) != NULL)
- && token != T_ALL)
+ if ((lex_token (lexer) != T_ID || dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) != NULL)
+ && lex_token (lexer) != T_ALL)
{
- lex_put_back ('/');
+ lex_put_back (lexer, '/');
break;
}
}
break;
}
- if (i >= n_percentiles || tokval != percentiles[i].p)
+ if (i >= n_percentiles || x != percentiles[i].p)
{
percentiles = pool_nrealloc (int_pool, percentiles,
n_percentiles + 1, sizeof *percentiles);
/* Hash of numeric values. */
static unsigned
-hash_value_numeric (const void *value_, void *foo UNUSED)
+hash_value_numeric (const void *value_, const void *aux UNUSED)
{
const struct freq *value = value_;
return hsh_hash_double (value->v[0].f);
/* Hash of string values. */
static unsigned
-hash_value_alpha (const void *value_, void *v_)
+hash_value_alpha (const void *value_, const void *v_)
{
const struct freq *value = value_;
- struct variable *v = v_;
+ const struct variable *v = v_;
struct var_freqs *vf = get_var_freqs (v);
return hsh_hash_bytes (value->v[0].s, vf->width);
/* Ascending numeric compare of values. */
static int
-compare_value_numeric_a (const void *a_, const void *b_, void *foo UNUSED)
+compare_value_numeric_a (const void *a_, const void *b_, const void *aux UNUSED)
{
const struct freq *a = a_;
const struct freq *b = b_;
/* Ascending string compare of values. */
static int
-compare_value_alpha_a (const void *a_, const void *b_, void *v_)
+compare_value_alpha_a (const void *a_, const void *b_, const void *v_)
{
const struct freq *a = a_;
const struct freq *b = b_;
- struct variable *v = v_;
+ const struct variable *v = v_;
struct var_freqs *vf = get_var_freqs (v);
return memcmp (a->v[0].s, b->v[0].s, vf->width);
/* Descending numeric compare of values. */
static int
-compare_value_numeric_d (const void *a, const void *b, void *foo UNUSED)
+compare_value_numeric_d (const void *a, const void *b, const void *aux UNUSED)
{
- return -compare_value_numeric_a (a, b, foo);
+ return -compare_value_numeric_a (a, b, aux);
}
/* Descending string compare of values. */
static int
-compare_value_alpha_d (const void *a, const void *b, void *v)
+compare_value_alpha_d (const void *a, const void *b, const void *v)
{
return -compare_value_alpha_a (a, b, v);
}
/* Ascending numeric compare of frequency;
secondary key on ascending numeric value. */
static int
-compare_freq_numeric_a (const void *a_, const void *b_, void *foo UNUSED)
+compare_freq_numeric_a (const void *a_, const void *b_, const void *aux UNUSED)
{
const struct freq *a = a_;
const struct freq *b = b_;
/* Ascending numeric compare of frequency;
secondary key on ascending string value. */
static int
-compare_freq_alpha_a (const void *a_, const void *b_, void *v_)
+compare_freq_alpha_a (const void *a_, const void *b_, const void *v_)
{
const struct freq *a = a_;
const struct freq *b = b_;
- struct variable *v = v_;
+ const struct variable *v = v_;
struct var_freqs *vf = get_var_freqs (v);
if (a->c > b->c)
/* Descending numeric compare of frequency;
secondary key on ascending numeric value. */
static int
-compare_freq_numeric_d (const void *a_, const void *b_, void *foo UNUSED)
+compare_freq_numeric_d (const void *a_, const void *b_, const void *aux UNUSED)
{
const struct freq *a = a_;
const struct freq *b = b_;
/* Descending numeric compare of frequency;
secondary key on ascending string value. */
static int
-compare_freq_alpha_d (const void *a_, const void *b_, void *v_)
+compare_freq_alpha_d (const void *a_, const void *b_, const void *v_)
{
const struct freq *a = a_;
const struct freq *b = b_;
- struct variable *v = v_;
+ const struct variable *v = v_;
struct var_freqs *vf = get_var_freqs (v);
if (a->c > b->c)
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;
}
const char *s;
};
- struct init *p;
+ const struct init *p;
- static struct init vec[] =
+ static const struct init vec[] =
{
{4, 0, N_("Valid")},
{5, 0, N_("Cum")},
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++)