X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fautorecode.c;h=1f0fd8a3d6943581c3a91b56d619cf609b0b53a5;hb=897a260ef7a8b954d56698cc40241a3197127505;hp=f6b8e15ece49a73ae1737ab9036300198350897a;hpb=fd05c51301e8051c3ac61ca06c57ecda0e22fbea;p=pspp diff --git a/src/autorecode.c b/src/autorecode.c index f6b8e15ece..1f0fd8a3d6 100644 --- a/src/autorecode.c +++ b/src/autorecode.c @@ -14,14 +14,16 @@ 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 -#include +#include "error.h" #include #include "alloc.h" +#include "case.h" #include "command.h" +#include "dictionary.h" #include "error.h" #include "hash.h" #include "lexer.h" @@ -30,6 +32,9 @@ #include "var.h" #include "vfm.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + /* FIXME: Implement PRINT subcommand. */ /* Explains how to recode one value. `from' must be first element. */ @@ -103,7 +108,6 @@ cmd_autorecode (void) 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, @@ -150,7 +154,7 @@ cmd_autorecode (void) goto lossage; } for (j = 0; j < i; j++) - if (!strcmp (arc.dst_names[i], arc.dst_names[j])) + if (!strcasecmp (arc.dst_names[i], arc.dst_names[j])) { msg (SE, _("Duplicate variable name %s among target variables."), arc.dst_names[i]); @@ -205,7 +209,8 @@ arc_free (struct autorecode_pgm *arc) 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); } @@ -230,7 +235,7 @@ recode (const struct autorecode_pgm *arc) for (i = 0; i < arc->var_cnt; i++) { struct arc_spec *spec = &t->specs[i]; - void **p = hsh_sort (arc->src_values[i]); + void *const *p = hsh_sort (arc->src_values[i]); int count = hsh_count (arc->src_values[i]); int j; @@ -262,7 +267,7 @@ recode (const struct autorecode_pgm *arc) 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; @@ -271,17 +276,15 @@ autorecode_trns_proc (struct trns_header * trns, struct ccase * c, { 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; } @@ -346,9 +349,9 @@ autorecode_proc_func (struct ccase *c, void *arc_) 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)