X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fautorecode.c;h=e34e395c62cf75c86e6e5443eae9ac9870330c81;hb=bf71a28cc57afd259bb086ac5dfde5b685ba7995;hp=a28b13bdcac0e8c3cd2a6257f4019de448324a6f;hpb=b321086267ad1014dc5d09886396cde30f094437;p=pspp-builds.git diff --git a/src/autorecode.c b/src/autorecode.c index a28b13bd..e34e395c 100644 --- a/src/autorecode.c +++ b/src/autorecode.c @@ -14,8 +14,8 @@ 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 "error.h" @@ -32,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. */ @@ -52,10 +55,9 @@ struct arc_spec /* AUTORECODE transformation. */ struct autorecode_trns { - struct trns_header h; - struct pool *owner; /* Contains AUTORECODE specs. */ + struct pool *pool; /* Contains AUTORECODE specs. */ struct arc_spec *specs; /* AUTORECODE specifications. */ - int spec_cnt; /* Number of specifications. */ + size_t spec_cnt; /* Number of specifications. */ }; /* Descending or ascending sort order. */ @@ -72,7 +74,7 @@ struct autorecode_pgm char **dst_names; /* Target variable names. */ struct variable **dst_vars; /* Target variables. */ struct hsh_table **src_values; /* `union value's of source vars. */ - int var_cnt; /* Number of variables. */ + size_t var_cnt; /* Number of variables. */ struct pool *src_values_pool; /* Pool used by src_values. */ enum direction direction; /* Sort order. */ int print; /* Print mapping table if nonzero. */ @@ -92,8 +94,8 @@ int cmd_autorecode (void) { struct autorecode_pgm arc; - int dst_cnt; - int i; + size_t dst_cnt; + size_t i; arc.src_vars = NULL; arc.dst_names = NULL; @@ -117,10 +119,11 @@ cmd_autorecode (void) goto lossage; if (dst_cnt != arc.var_cnt) { - int i; + size_t i; - msg (SE, _("Source variable count (%d) does not match " - "target variable count (%d)."), arc.var_cnt, dst_cnt); + msg (SE, _("Source variable count (%u) does not match " + "target variable count (%u)."), + (unsigned) arc.var_cnt, (unsigned) dst_cnt); for (i = 0; i < dst_cnt; i++) free (arc.dst_names[i]); @@ -151,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]); @@ -160,8 +163,8 @@ cmd_autorecode (void) } arc.src_values_pool = pool_create (); - arc.dst_vars = xmalloc (sizeof *arc.dst_vars * arc.var_cnt); - arc.src_values = xmalloc (sizeof *arc.src_values * arc.var_cnt); + arc.dst_vars = xnmalloc (arc.var_cnt, sizeof *arc.dst_vars); + arc.src_values = xnmalloc (arc.var_cnt, sizeof *arc.src_values); for (i = 0; i < dst_cnt; i++) if (arc.src_vars[i]->type == ALPHA) arc.src_values[i] = hsh_create (10, compare_alpha_value, @@ -194,7 +197,7 @@ arc_free (struct autorecode_pgm *arc) free (arc->src_vars); if (arc->dst_names != NULL) { - int i; + size_t i; for (i = 0; i < arc->var_cnt; i++) free (arc->dst_names[i]); @@ -203,7 +206,7 @@ arc_free (struct autorecode_pgm *arc) free (arc->dst_vars); if (arc->src_values != NULL) { - int i; + size_t i; for (i = 0; i < arc->var_cnt; i++) hsh_destroy (arc->src_values[i]); @@ -218,21 +221,16 @@ arc_free (struct autorecode_pgm *arc) static void recode (const struct autorecode_pgm *arc) { - struct autorecode_trns *t; - struct pool *pool; - int i; - - pool = pool_create (); - t = xmalloc (sizeof *t); - t->h.proc = autorecode_trns_proc; - t->h.free = autorecode_trns_free; - t->owner = pool; - t->specs = pool_alloc (t->owner, sizeof *t->specs * arc->var_cnt); - t->spec_cnt = arc->var_cnt; + struct autorecode_trns *trns; + size_t i; + + trns = pool_create_container (struct autorecode_trns, pool); + trns->specs = pool_nalloc (trns->pool, arc->var_cnt, sizeof *trns->specs); + trns->spec_cnt = arc->var_cnt; for (i = 0; i < arc->var_cnt; i++) { - struct arc_spec *spec = &t->specs[i]; - void **p = hsh_sort (arc->src_values[i]); + struct arc_spec *spec = &trns->specs[i]; + void *const *p = hsh_sort (arc->src_values[i]); int count = hsh_count (arc->src_values[i]); int j; @@ -248,30 +246,29 @@ recode (const struct autorecode_pgm *arc) for (j = 0; *p; p++, j++) { - struct arc_item *item = pool_alloc (t->owner, sizeof *item); + struct arc_item *item = pool_alloc (trns->pool, sizeof *item); union value *vp = *p; if (arc->src_vars[i]->type == NUMERIC) item->from.f = vp->f; else - item->from.c = pool_strdup (t->owner, vp->c); + item->from.c = pool_strdup (trns->pool, vp->c); item->to = arc->direction == ASCENDING ? j + 1 : count - j; hsh_force_insert (spec->items, item); } } - add_transformation (&t->h); + add_transformation (autorecode_trns_proc, autorecode_trns_free, trns); } static int -autorecode_trns_proc (struct trns_header * trns, struct ccase * c, - int case_idx UNUSED) +autorecode_trns_proc (void *trns_, struct ccase *c, int case_idx UNUSED) { - struct autorecode_trns *t = (struct autorecode_trns *) trns; - int i; + struct autorecode_trns *trns = trns_; + size_t i; - for (i = 0; i < t->spec_cnt; i++) + for (i = 0; i < trns->spec_cnt; i++) { - struct arc_spec *spec = &t->specs[i]; + struct arc_spec *spec = &trns->specs[i]; struct arc_item *item; union value v; @@ -287,14 +284,14 @@ autorecode_trns_proc (struct trns_header * trns, struct ccase * c, } static void -autorecode_trns_free (struct trns_header * trns) +autorecode_trns_free (void *trns_) { - struct autorecode_trns *t = (struct autorecode_trns *) trns; - int i; + struct autorecode_trns *trns = trns_; + size_t i; - for (i = 0; i < t->spec_cnt; i++) - hsh_destroy (t->specs[i].items); - pool_destroy (t->owner); + for (i = 0; i < trns->spec_cnt; i++) + hsh_destroy (trns->specs[i].items); + pool_destroy (trns->pool); } /* AUTORECODE procedure. */ @@ -339,7 +336,7 @@ static int autorecode_proc_func (struct ccase *c, void *arc_) { struct autorecode_pgm *arc = arc_; - int i; + size_t i; for (i = 0; i < arc->var_cnt; i++) { @@ -353,12 +350,12 @@ autorecode_proc_func (struct ccase *c, void *arc_) vpp = (union value **) hsh_probe (arc->src_values[i], &v); if (*vpp == NULL) { - vp = pool_alloc (arc->src_values_pool, sizeof (union value)); + vp = pool_alloc (arc->src_values_pool, sizeof *vp); if (arc->src_vars[i]->type == NUMERIC) vp->f = v.f; else - vp->c = pool_strndup (arc->src_values_pool, - v.c, arc->src_vars[i]->width); + vp->c = pool_clone (arc->src_values_pool, + v.c, arc->src_vars[i]->width); *vpp = vp; } }