X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fstats%2Fmatrix.c;h=69c6323ef48152076b9c953bf2b4aaea13f2dc27;hb=d84c9fab98875caf8fea1d870bf2a6bceeb36bdc;hp=7c8d6519d18270b01d8b50c317d14e424c885351;hpb=f5d1ac814687386b4cd6af9fa9e6f2f98913aa7d;p=pspp diff --git a/src/language/stats/matrix.c b/src/language/stats/matrix.c index 7c8d6519d1..69c6323ef4 100644 --- a/src/language/stats/matrix.c +++ b/src/language/stats/matrix.c @@ -6265,6 +6265,8 @@ matrix_save_parse (struct matrix_state *s) if (!save->expression) goto error; + int names_start = 0; + int names_end = 0; while (lex_match (s->lexer, T_SLASH)) { if (lex_match_id (s->lexer, "OUTFILE")) @@ -6302,7 +6304,9 @@ matrix_save_parse (struct matrix_state *s) { lex_match (s->lexer, T_EQUALS); matrix_expr_destroy (names); + names_start = lex_ofs (s->lexer); names = matrix_parse_exp (s); + names_end = lex_ofs (s->lexer) - 1; if (!names) goto error; } @@ -6331,7 +6335,7 @@ matrix_save_parse (struct matrix_state *s) fh = fh_ref (s->prev_save_file); else { - lex_sbc_missing ("OUTFILE"); + lex_sbc_missing (s->lexer, "OUTFILE"); goto error; } } @@ -6340,7 +6344,8 @@ matrix_save_parse (struct matrix_state *s) if (variables.n && names) { - msg (SW, _("VARIABLES and NAMES both specified; ignoring NAMES.")); + lex_ofs_msg (s->lexer, SW, names_start, names_end, + _("Ignoring NAMES because VARIABLES was also specified.")); matrix_expr_destroy (names); names = NULL; } @@ -6596,7 +6601,7 @@ matrix_read_parse (struct matrix_state *s) if (!read->c1) { - lex_sbc_missing ("FIELD"); + lex_sbc_missing (s->lexer, "FIELD"); goto error; } @@ -6615,7 +6620,7 @@ matrix_read_parse (struct matrix_state *s) fh = fh_ref (s->prev_read_file); else { - lex_sbc_missing ("FILE"); + lex_sbc_missing (s->lexer, "FILE"); goto error; } } @@ -7172,7 +7177,7 @@ matrix_write_parse (struct matrix_state *s) if (!write->c1) { - lex_sbc_missing ("FIELD"); + lex_sbc_missing (s->lexer, "FIELD"); goto error; } @@ -7182,7 +7187,7 @@ matrix_write_parse (struct matrix_state *s) fh = fh_ref (s->prev_write_file); else { - lex_sbc_missing ("OUTFILE"); + lex_sbc_missing (s->lexer, "OUTFILE"); goto error; } } @@ -7249,9 +7254,38 @@ matrix_write_parse (struct matrix_state *s) write->format = xmalloc (sizeof *write->format); *write->format = (struct fmt_spec) { .type = format, .w = w }; - if (!fmt_check_output (write->format)) - goto error; - }; + char *error = fmt_check_output__ (write->format); + if (error) + { + msg (SE, "%s", error); + free (error); + + if (has_format) + lex_ofs_msg (s->lexer, SN, format_ofs, format_ofs, + _("This syntax specifies format %s."), + fmt_name (format)); + + if (repetitions) + { + lex_ofs_msg (s->lexer, SN, format_ofs, format_ofs, + ngettext ("This syntax specifies %d repetition.", + "This syntax specifies %d repetitions.", + repetitions), + repetitions); + lex_ofs_msg (s->lexer, SN, record_width_start, record_width_end, + _("This syntax designates record width %d, " + "which divided by %d repetitions implies " + "field width %d."), + record_width, repetitions, w); + } + + if (by) + lex_ofs_msg (s->lexer, SN, by_ofs, by_ofs, + _("This syntax specifies field width %d."), by); + + goto error; + } + } if (write->format && fmt_var_width (write->format) > sizeof (double)) { @@ -7896,7 +7930,7 @@ matrix_msave_parse (struct matrix_state *s) } if (!msave->rowtype) { - lex_sbc_missing ("TYPE"); + lex_sbc_missing (s->lexer, "TYPE"); goto error; } @@ -7914,7 +7948,7 @@ matrix_msave_parse (struct matrix_state *s) } if (!common->outfile) { - lex_sbc_missing ("OUTFILE"); + lex_sbc_missing (s->lexer, "OUTFILE"); goto error; } common->location = lex_ofs_location (s->lexer, start_ofs,