X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fget.c;h=fd9492210ab782544186749f1d26ddce7420df37;hb=bd68eeaf9bf3dba6052943d41a907bc3c3dd3b9b;hp=0073383b0df4c9509bdd7320d90778672c0a80d4;hpb=dbb0228a4c98cbf4756ba651fda158c1565b3b55;p=pspp diff --git a/src/get.c b/src/get.c index 0073383b0d..fd9492210a 100644 --- a/src/get.c +++ b/src/get.c @@ -957,6 +957,8 @@ cmd_match_files (void) } } + /* Set up mapping from each file's variables to master + variables. */ for (iter = mtf.head; iter != NULL; iter = iter->next) { struct dictionary *d = iter->dict; @@ -971,11 +973,10 @@ cmd_match_files (void) } } + /* Add IN variables to master dictionary. */ for (iter = mtf.head; iter != NULL; iter = iter->next) if (iter->in_name != NULL) { - static const struct fmt_spec f1_0 = {FMT_F, 1, 0}; - iter->in_var = dict_create_var (mtf.dict, iter->in_name, 0); if (iter->in_var == NULL) { @@ -984,7 +985,8 @@ cmd_match_files (void) iter->in_var); goto error; } - iter->in_var->print = iter->in_var->write = f1_0; + iter->in_var->print = iter->in_var->write + = make_output_format (FMT_F, 1, 0); } /* MATCH FILES performs an n-way merge on all its input files. @@ -1028,7 +1030,7 @@ cmd_match_files (void) if (mtf.sink->class->open != NULL) mtf.sink->class->open (mtf.sink); - mtf.seq_nums = xcalloc (dict_get_var_cnt (mtf.dict) * sizeof *mtf.seq_nums); + mtf.seq_nums = xcalloc (dict_get_var_cnt (mtf.dict), sizeof *mtf.seq_nums); case_create (&mtf.mtf_case, dict_get_next_value_idx (mtf.dict)); mtf_read_nonactive_records (&mtf); @@ -1199,7 +1201,9 @@ mtf_processing (struct ccase *c, void *mtf_) bool read_active_file; assert (mtf->head != NULL); - assert (mtf->head->type == MTF_FILE); + if (mtf->head->type == MTF_TABLE) + return 1; + do { struct mtf_file *min_head, *min_tail; /* Files with minimum BY values. */ @@ -1398,13 +1402,14 @@ mtf_merge_dictionary (struct dictionary *const m, struct mtf_file *f) } } - dict_compact_values (d); - for (i = 0; i < dict_get_var_cnt (d); i++) { struct variable *dv = dict_get_var (d, i); struct variable *mv = dict_lookup_var (m, dv->name); + if (dict_class_from_id (dv->name) == DC_SCRATCH) + continue; + if (mv != NULL) { if (mv->width != dv->width)