X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fdata-list.c;h=a6ed9563028ccca519ec4f5a68fd0ff13262c606;hb=510cc9dd9baf3108ba55cfb7893384517c9930b4;hp=461289bc60d2975105d317ed7a0ed2e9bb622c81;hpb=6e097c89af440da90b43ce90864394c4d0c843d5;p=pspp diff --git a/src/language/data-io/data-list.c b/src/language/data-io/data-list.c index 461289bc60..a6ed956302 100644 --- a/src/language/data-io/data-list.c +++ b/src/language/data-io/data-list.c @@ -118,33 +118,25 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) } else if (lex_match_id (lexer, "RECORDS")) { + if (data_parser_get_records (parser) > 0) + { + lex_sbc_only_once ("RECORDS"); + goto error; + } lex_match (lexer, T_EQUALS); lex_match (lexer, T_LPAREN); - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "RECORDS", 0, INT_MAX)) goto error; - - int records = lex_integer (lexer); - if (records < 0) - { - msg (SE, _("The %s value must be nonnegative."), "RECORDS"); - goto error; - } - data_parser_set_records (parser, records); + data_parser_set_records (parser, lex_integer (lexer)); lex_get (lexer); lex_match (lexer, T_RPAREN); } else if (lex_match_id (lexer, "SKIP")) { lex_match (lexer, T_EQUALS); - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "SKIP", 0, INT_MAX)) goto error; - int skip = lex_integer (lexer); - if (skip < 0) - { - msg (SE, _("The %s value must be nonnegative."), "SKIP"); - goto error; - } - data_parser_set_skip (parser, skip); + data_parser_set_skip (parser, lex_integer (lexer)); lex_get (lexer); } else if (lex_match_id (lexer, "END")) @@ -156,7 +148,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) } if (end) { - msg (SE, _("The %s subcommand may only be specified once."), "END"); + lex_sbc_only_once ("END"); goto error; } @@ -242,7 +234,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) data_parser_set_quotes (parser, ss_cstr ("'\"")); data_parser_set_soft_delimiters (parser, ss_cstr (CC_SPACES)); - const char decimal = settings_get_decimal_char (FMT_F); + const char decimal = settings_get_fmt_settings ()->decimal; data_parser_set_hard_delimiters (parser, ss_buffer (",", (decimal == '.') ? 1 : 0)); } @@ -306,7 +298,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) add_transformation (ds, data_list_trns_proc, data_list_trns_free, trns); } else - data_parser_make_active_file (parser, ds, reader, dict); + data_parser_make_active_file (parser, ds, reader, dict, NULL, NULL); fh_unref (fh); free (encoding); @@ -316,7 +308,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) error: data_parser_destroy (parser); if (!in_input_program ()) - dict_destroy (dict); + dict_unref (dict); fh_unref (fh); free (encoding); return CMD_CASCADING_FAILURE; @@ -368,7 +360,8 @@ parse_fixed (struct lexer *lexer, struct dictionary *dict, if (v != NULL) { /* Success. */ - struct fmt_spec output = fmt_for_output_from_input (f); + struct fmt_spec output = fmt_for_output_from_input ( + f, settings_get_fmt_settings ()); var_set_both_formats (v, &output); } else @@ -472,7 +465,8 @@ parse_free (struct lexer *lexer, struct dictionary *dict, if (input.type == FMT_N) input.type = FMT_F; - output = fmt_for_output_from_input (&input); + output = fmt_for_output_from_input (&input, + settings_get_fmt_settings ()); } else { @@ -538,7 +532,7 @@ data_list_trns_proc (void *trns_, struct ccase **c, casenumber case_num UNUSED) /* If there was an END subcommand handle it. */ if (trns->end != NULL) { - double *end = &case_data_rw (*c, trns->end)->f; + double *end = case_num_rw (*c, trns->end); if (retval == TRNS_END_FILE) { *end = 1.0;