/* PSPP - computes sample statistics.
Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
- Written by Ben Pfaff <blp@gnu.org>.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
struct criteria *next;
/* Variables to count. */
- struct variable **vars;
+ const struct variable **vars;
size_t var_cnt;
- /* Count special values?. */
+ /* Count special values? */
bool count_system_missing; /* Count system missing? */
bool count_user_missing; /* Count user missing? */
for (;;)
{
bool ok;
-
+
crit->next = NULL;
crit->vars = NULL;
- if (!parse_variables (lexer, dataset_dict (ds), &crit->vars, &crit->var_cnt,
+ if (!parse_variables_const (lexer, dataset_dict (ds), &crit->vars,
+ &crit->var_cnt,
PV_DUPLICATE | PV_SAME_TYPE))
goto fail;
pool_register (trns->pool, free, crit->vars);
for (i = 0; i < crit->var_cnt; i++)
{
- double x = case_num (c, crit->vars[i]->fv);
- if (x == SYSMIS)
- counter += crit->count_system_missing;
- else if (crit->count_user_missing
- && var_is_num_user_missing (crit->vars[i], x))
- counter++;
+ double x = case_num (c, crit->vars[i]);
+ if (var_is_num_missing (crit->vars[i], x, MV_ANY))
+ {
+ if (x == SYSMIS
+ ? crit->count_system_missing
+ : crit->count_user_missing)
+ counter++;
+ }
else
{
struct num_value *v;
{
char **v;
for (v = crit->values.str; v < crit->values.str + crit->value_cnt; v++)
- if (!memcmp (case_str (c, crit->vars[i]->fv), *v,
+ if (!memcmp (case_str (c, crit->vars[i]), *v,
var_get_width (crit->vars[i])))
{
counter++;
counter += count_numeric (crit, c);
else
counter += count_string (crit, c);
- case_data_rw (c, dv->var->fv)->f = counter;
+ case_data_rw (c, dv->var)->f = counter;
}
return TRNS_CONTINUE;
}