X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Finpt-pgm.c;h=d3b04ed9448ef03dc0f0d3808ea85aead2fa4ae7;hb=338fb2a2e84df6427a2fdee6769421f57d5666d8;hp=3459ee0fbb03eaba4094924dcd5ae370b5b36e9c;hpb=3816248a008a4af75aac6319d0c9929cb7ff679e;p=pspp-builds.git diff --git a/src/language/data-io/inpt-pgm.c b/src/language/data-io/inpt-pgm.c index 3459ee0f..d3b04ed9 100644 --- a/src/language/data-io/inpt-pgm.c +++ b/src/language/data-io/inpt-pgm.c @@ -161,14 +161,15 @@ cmd_input_program (struct lexer *lexer, struct dataset *ds) for (i = 0; i < dict_get_var_cnt (dataset_dict (ds)); i++) { struct variable *var = dict_get_var (dataset_dict (ds), i); + size_t value_cnt = var_get_value_cnt (var); enum value_init_type value_init; size_t j; - value_init = var->type == NUMERIC ? INP_NUMERIC : INP_STRING; - value_init |= var->leave ? INP_INIT_ONCE : INP_REINIT; + value_init = var_is_numeric (var) ? INP_NUMERIC : INP_STRING; + value_init |= var_get_leave (var) ? INP_INIT_ONCE : INP_REINIT; - for (j = 0; j < var->nv; j++) - inp->init[j + var->fv] = value_init; + for (j = 0; j < value_cnt; j++) + inp->init[j + var_get_case_index (var)] = value_init; } for (i = 0; i < inp->init_cnt; i++) assert (inp->init[i] != -1); @@ -197,14 +198,15 @@ init_case (const struct input_program_pgm *inp, struct ccase *c) switch (inp->init[i]) { case INP_NUMERIC | INP_INIT_ONCE: - case_data_rw (c, i)->f = 0.0; + case_data_rw_idx (c, i)->f = 0.0; break; case INP_NUMERIC | INP_REINIT: - case_data_rw (c, i)->f = SYSMIS; + case_data_rw_idx (c, i)->f = SYSMIS; break; case INP_STRING | INP_INIT_ONCE: case INP_STRING | INP_REINIT: - memset (case_data_rw (c, i)->s, ' ', sizeof case_data_rw (c, i)->s); + memset (case_data_rw_idx (c, i)->s, ' ', + sizeof case_data_rw_idx (c, i)->s); break; default: NOT_REACHED (); @@ -223,12 +225,13 @@ clear_case (const struct input_program_pgm *inp, struct ccase *c) case INP_NUMERIC | INP_INIT_ONCE: break; case INP_NUMERIC | INP_REINIT: - case_data_rw (c, i)->f = SYSMIS; + case_data_rw_idx (c, i)->f = SYSMIS; break; case INP_STRING | INP_INIT_ONCE: break; case INP_STRING | INP_REINIT: - memset (case_data_rw (c, i)->s, ' ', sizeof case_data_rw (c, i)->s); + memset (case_data_rw_idx (c, i)->s, ' ', + sizeof case_data_rw_idx (c, i)->s); break; default: NOT_REACHED (); @@ -358,6 +361,7 @@ cmd_reread (struct lexer *lexer, struct dataset *ds) { lex_error (lexer, NULL); expr_free (e); + return CMD_CASCADING_FAILURE; } }