X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Faggregate.c;h=67e8bb91b1c4e27d2006d1e8e7e08646dafb13e9;hb=53ceff2865473a6b561b521986fafd31a993a1a6;hp=8fe168ecf78175581c92de4d50f4c3ba6bb0b144;hpb=55b1c76a0846cb91ac5af9f3d638b7ecf03ea76a;p=pspp diff --git a/src/aggregate.c b/src/aggregate.c index 8fe168ecf7..67e8bb91b1 100644 --- a/src/aggregate.c +++ b/src/aggregate.c @@ -21,6 +21,7 @@ #include "error.h" #include #include "alloc.h" +#include "any-writer.h" #include "case.h" #include "casefile.h" #include "command.h" @@ -40,6 +41,9 @@ #include "vfm.h" #include "vfmP.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + /* Specifies how to make an aggregate variable. */ struct agr_var { @@ -74,7 +78,7 @@ enum struct agr_func { const char *name; /* Aggregation function name. */ - int n_args; /* Number of arguments. */ + size_t n_args; /* Number of arguments. */ int alpha_type; /* When given ALPHA arguments, output type. */ struct fmt_spec format; /* Format spec if alpha_type != ALPHA. */ }; @@ -118,7 +122,7 @@ enum missing_treatment struct agr_proc { /* We have either an output file or a sink. */ - struct sfm_writer *writer; /* Output file, or null if none. */ + struct any_writer *writer; /* Output file, or null if none. */ struct case_sink *sink; /* Sink, or null if none. */ /* Break variables. */ @@ -178,7 +182,7 @@ cmd_aggregate (void) lex_match ('='); if (!lex_match ('*')) { - out_file = fh_parse (); + out_file = fh_parse (FH_REF_FILE | FH_REF_SCRATCH); if (out_file == NULL) goto error; } @@ -275,7 +279,7 @@ cmd_aggregate (void) } else { - agr.writer = sfm_open_writer (out_file, agr.dict, get_scompression (), 0); + agr.writer = any_writer_open (out_file, agr.dict); if (agr.writer == NULL) goto error; @@ -293,7 +297,7 @@ cmd_aggregate (void) while (casereader_read_xfer (reader, &c)) { if (aggregate_single_case (&agr, &c, &agr.agr_case)) - sfm_write_case (agr.writer, &agr.agr_case); + any_writer_write (agr.writer, &agr.agr_case); case_destroy (&c); } casereader_destroy (reader); @@ -308,7 +312,7 @@ cmd_aggregate (void) if (agr.case_cnt > 0) { dump_aggregate_info (&agr, &agr.agr_case); - sfm_write_case (agr.writer, &agr.agr_case); + any_writer_write (agr.writer, &agr.agr_case); } } @@ -332,7 +336,7 @@ parse_aggregate_functions (struct agr_proc *agr) { char **dest; char **dest_label; - int n_dest; + size_t n_dest; int include_missing; const struct agr_func *function; @@ -341,9 +345,9 @@ parse_aggregate_functions (struct agr_proc *agr) union value arg[2]; struct variable **src; - int n_src; + size_t n_src; - int i; + size_t i; dest = NULL; dest_label = NULL; @@ -357,7 +361,7 @@ parse_aggregate_functions (struct agr_proc *agr) /* Parse the list of target variables. */ while (!lex_match ('=')) { - int n_dest_prev = n_dest; + size_t n_dest_prev = n_dest; if (!parse_DATA_LIST_vars (&dest, &n_dest, PV_APPEND | PV_SINGLE | PV_NO_SCRATCH)) @@ -367,7 +371,7 @@ parse_aggregate_functions (struct agr_proc *agr) { int j; - dest_label = xrealloc (dest_label, sizeof *dest_label * n_dest); + dest_label = xnrealloc (dest_label, n_dest, sizeof *dest_label); for (j = n_dest_prev; j < n_dest; j++) dest_label[j] = NULL; } @@ -482,9 +486,9 @@ parse_aggregate_functions (struct agr_proc *agr) like `unknown variable t'. */ if (n_src != n_dest) { - msg (SE, _("Number of source variables (%d) does not match " - "number of target variables (%d)."), - n_src, n_dest); + msg (SE, _("Number of source variables (%u) does not match " + "number of target variables (%u)."), + (unsigned) n_src, (unsigned) n_dest); goto error; } @@ -648,7 +652,7 @@ agr_destroy (struct agr_proc *agr) { struct agr_var *iter, *next; - sfm_close_writer (agr->writer); + any_writer_close (agr->writer); if (agr->sort != NULL) sort_destroy_criteria (agr->sort); free (agr->break_vars); @@ -659,8 +663,8 @@ agr_destroy (struct agr_proc *agr) if (iter->function & FSTRING) { - int n_args; - int i; + size_t n_args; + size_t i; n_args = agr_func_tab[iter->function & FUNC].n_args; for (i = 0; i < n_args; i++) @@ -723,7 +727,8 @@ accumulate_aggregate_info (struct agr_proc *agr, { const union value *v = case_data (input, iter->src->fv); - if ((!iter->include_missing && is_missing (v, iter->src)) + if ((!iter->include_missing + && mv_is_value_missing (&iter->src->miss, v)) || (iter->include_missing && iter->src->type == NUMERIC && v->f == SYSMIS)) { @@ -1070,7 +1075,7 @@ presorted_agr_to_sysfile (struct ccase *c, void *agr_) struct agr_proc *agr = agr_; if (aggregate_single_case (agr, c, &agr->agr_case)) - sfm_write_case (agr->writer, &agr->agr_case); + any_writer_write (agr->writer, &agr->agr_case); return 1; }