X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fget.c;h=fd9492210ab782544186749f1d26ddce7420df37;hb=a1c8f6fe2935432af4dbe30aef2434c6ad437a56;hp=851059ca1139377c969a73c4ed236fbc8bf79b37;hpb=1339492699ce7e12c9bf9fa17f9d60a66024cbd1;p=pspp diff --git a/src/get.c b/src/get.c index 851059ca11..fd9492210a 100644 --- a/src/get.c +++ b/src/get.c @@ -728,7 +728,8 @@ cmd_match_files (void) dict_set_case_limit (mtf.dict, dict_get_case_limit (default_dict)); lex_match ('/'); - while (lex_id_match ("FILE", tokid) || lex_id_match ("TABLE", tokid)) + while (token == T_ID + && (lex_id_match ("FILE", tokid) || lex_id_match ("TABLE", tokid))) { struct mtf_file *file = xmalloc (sizeof *file); @@ -741,6 +742,7 @@ cmd_match_files (void) } else assert (0); + lex_match ('='); file->by = NULL; file->handle = NULL; @@ -774,9 +776,7 @@ cmd_match_files (void) mtf.head = file; first_table->prev = file; } - - lex_match ('='); - + if (lex_match ('*')) { file->handle = NULL; @@ -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)