X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Ferrors.c;h=195bfe9f90948bee4ef85c2cec4df79979630d11;hb=d8d68d0bd4c45af6f0dc69b4fc33d37d961aca85;hp=c1e62412873f35669fdde5852bfb38fd56ceef0e;hpb=8760c1ba6442153afe76bcac742e086f90c59fe8;p=inform.git diff --git a/src/errors.c b/src/errors.c index c1e6241..195bfe9 100644 --- a/src/errors.c +++ b/src/errors.c @@ -3,7 +3,7 @@ /* (with error throwback code for RISC OS machines) */ /* */ /* Part of Inform 6.35 */ -/* copyright (c) Graham Nelson 1993 - 2020 */ +/* copyright (c) Graham Nelson 1993 - 2021 */ /* */ /* Inform is free software: you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ @@ -56,6 +56,7 @@ static void print_preamble(void) if (!(ErrorReport.main_flag)) printf("\"%s\", ", p); printf("line %d: ", ErrorReport.line_number); + if (ErrorReport.orig_file) { char *op; if (ErrorReport.orig_file <= 0 || ErrorReport.orig_file > total_files) @@ -81,18 +82,58 @@ static void print_preamble(void) } printf("%s", p); if (with_extension_flag) printf("%s", Source_Extension); - printf("(%d): ", ErrorReport.line_number); + printf("(%d)", ErrorReport.line_number); + + if (ErrorReport.orig_file) { + char *op; + if (ErrorReport.orig_file <= 0 || ErrorReport.orig_file > total_files) + op = ErrorReport.orig_source; + else + op = InputFiles[ErrorReport.orig_file-1].filename; + printf("|%s", op); + if (ErrorReport.orig_line) { + printf("(%d", ErrorReport.orig_line); + if (ErrorReport.orig_char) { + printf(":%d", ErrorReport.orig_char); + } + printf(")"); + } + } + + printf(": "); break; case 2: /* Macintosh Programmer's Workshop error message format */ - printf("File \"%s\"; Line %d\t# ", p, ErrorReport.line_number); + printf("File \"%s\"; Line %d", p, ErrorReport.line_number); + + if (ErrorReport.orig_file) { + char *op; + if (ErrorReport.orig_file <= 0 || ErrorReport.orig_file > total_files) + op = ErrorReport.orig_source; + else + op = InputFiles[ErrorReport.orig_file-1].filename; + printf(": (\"%s\"", op); + if (ErrorReport.orig_line) { + printf("; Line %d", ErrorReport.orig_line); + if (ErrorReport.orig_char) { + printf("; Char %d", ErrorReport.orig_char); + } + } + printf(")"); + } + + printf("\t# "); break; } } static char *location_text(brief_location report_line) { + int j; + char *p; + int len; + /* Convert the location to a brief string. (Some error messages need to report a secondary location.) This uses the static buffer other_pos_buff. */ @@ -104,17 +145,20 @@ static char *location_text(brief_location report_line) errpos.main_flag = 0; errpos.orig_source = NULL; export_brief_location(report_line, &errpos); - - int j; - char *p; j = errpos.file_number; if (j <= 0 || j > total_files) p = errpos.source; else p = InputFiles[j-1].filename; + if (!p && errpos.line_number == 0) { + /* Special case */ + strcpy(other_pos_buff, "compiler setup"); + return other_pos_buff; + } + if (!p) p = ""; - int len = 0; + len = 0; if (!(errpos.main_flag)) { snprintf(other_pos_buff+len, ERROR_BUFLEN-len,