02111-1307, USA. */
#include <config.h>
-#include <assert.h>
+#include "error.h"
#include <stdlib.h>
#include "alloc.h"
+#include "case.h"
#include "command.h"
#include "error.h"
#include "hash.h"
arc.print = 0;
dst_cnt = 0;
- lex_match_id ("AUTORECODE");
lex_match_id ("VARIABLES");
lex_match ('=');
if (!parse_variables (default_dict, &arc.src_vars, &arc.var_cnt,
int i;
for (i = 0; i < arc->var_cnt; i++)
- hsh_destroy (arc->src_values[i]);
+ hsh_destroy (arc->src_values[i]);
+ free (arc->src_values);
}
pool_destroy (arc->src_values_pool);
}
static int
autorecode_trns_proc (struct trns_header * trns, struct ccase * c,
- int case_num UNUSED)
+ int case_idx UNUSED)
{
struct autorecode_trns *t = (struct autorecode_trns *) trns;
int i;
{
struct arc_spec *spec = &t->specs[i];
struct arc_item *item;
+ union value v;
if (spec->src->type == NUMERIC)
- item = hsh_force_find (spec->items, &c->data[spec->src->fv].f);
+ v.f = case_num (c, spec->src->fv);
else
- {
- union value v;
- v.c = c->data[spec->src->fv].s;
- item = hsh_force_find (spec->items, &v);
- }
+ v.c = (char *) case_str (c, spec->src->fv);
+ item = hsh_force_find (spec->items, &v);
- c->data[spec->dest->fv].f = item->to;
+ case_data_rw (c, spec->dest->fv)->f = item->to;
}
return -1;
}
union value v, *vp, **vpp;
if (arc->src_vars[i]->type == NUMERIC)
- v.f = c->data[arc->src_vars[i]->fv].f;
+ v.f = case_num (c, arc->src_vars[i]->fv);
else
- v.c = c->data[arc->src_vars[i]->fv].s;
+ v.c = (char *) case_str (c, arc->src_vars[i]->fv);
vpp = (union value **) hsh_probe (arc->src_values[i], &v);
if (*vpp == NULL)