-#This file was created by <wiensk> Tue Feb 23 22:25:52 1999
-#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
-\lyxformat 2.15
+#LyX 1.2 created this file. For more info see http://www.lyx.org/
+\lyxformat 220
\textclass literate-article
-\language default
+\language english
\inputencoding default
\fontscheme default
\graphics default
\paperpackage a4
\use_geometry 0
\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
Edmar Wienskoski Jr.
\newline
edmar-w-jr@technologist.com
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+Modified by Bernard Michael Hurley bernardh@westherts.ac.uk ---- Don't blame
+ Edmar for any errors that have crept in!
+\end_inset
+
+
+\layout Abstract
+
+
+\series bold
+Note:
+\series default
+ This example program is provided for educational use only.
+ The functionality in this C program has been superceded by the equivalent
+ Python code in
+\emph on
+examples/listerrors.lyx
+\emph default
+ which should be installed in the LyX scripts directory.
\layout Date
-\latex latex
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
\backslash
today
+\end_inset
+
+
\layout Standard
-\begin_inset LatexCommand \tableofcontents
+\begin_inset LatexCommand \tableofcontents{}
\end_inset
The filter is required to read from standard input, parse for error messages
and copy the error messages to the standard output.
- During the output process, the filter must present the error messages in a
- format that LyX can interpret, currently, the LaTeX error message format.
- Of course, nothing will prevent future LyX releases from being able to read
- other formats as well (like gcc error messages for example).
- This mechanism is necessary to fully explore the literate programming
- tool's capabilities.
+ During the output process, the filter must present the error messages in
+ a format that LyX can interpret, currently, the LaTeX error message format.
+ Of course, nothing will prevent future LyX releases from being able to
+ read other formats as well (like gcc error messages for example).
+ This mechanism is necessary to fully explore the literate programming tool's
+ capabilities.
\layout Section
Algorithm
\newline
{
\newline
-
-\protected_separator
- if (argc == 2) {
+ if (argc == 2) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- switch (argv[1][0]) {
+ switch (argv[1][0]) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- case 'n':
+ case 'n':
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- <<Scan input for noweb error messages>>
+ <<Scan input for noweb error messages>>
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- break;
+ break;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- case 'x':
+ case 'x':
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- <<Scan input for xlc error messages>>
+ <<Scan input for xlc error messages>>
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- break;
+ break;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- case 'a':
+ case 'a':
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-<<AIX system using both noweb and xlc>>
+ <<AIX system using both noweb and xlc>>
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- break;
+ break;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- case 's':
+ case 's':
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- case 'b':
+ case 'b':
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- <<Solaris and Linux systems using both noweb and gcc>>
+ <<Solaris and Linux systems using both noweb and gcc>>
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- break;
+ break;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- case 'g':
+ case 'g':
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- default:
+ default:
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- <<Scan input for gcc error messages>>
+ <<Scan input for gcc error messages>>
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- break;
+ break;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- }
+ }
\newline
-
-\protected_separator
- } else {
+ } else {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- <<Scan input for gcc error messages>>
+ <<Scan input for gcc error messages>>
\newline
-
-\protected_separator
- }
+ }
\newline
}
\newline
<<Global variables>>=
\newline
-char
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- buffer[200][200];
+char buffer[200][200];
\newline
-int
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- last_buf_line;
+int last_buf_line;
\newline
-int
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- last_err_line;
+int last_err_line;
\newline
-int
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- err_line;
+int err_line;
\newline
@
\layout Section
The output format
\layout Standard
-The output format mimics the LaTeX error messages format.
+The output format mimics the TeX error messages format.
This function prints a number of lines residing in the global variable
\family typewriter
\family default
, a program name and line number.
There is no special requirement on the input strings, they can be anything.
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+This function has been slightly changed from EW's original to make scanning
+ a bit easier with LaTeX::scanLogFile().
+ The test has been added because LyX can crash if empty lines are allowed
+ here --- I can't figure out why! --- BMH
+\end_inset
+
+
\layout Scrap
<<Function bodies>>=
\newline
{
\newline
-
-\protected_separator
- int
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- i;
+ int i;
\newline
-
-\protected_separator
-
+
\newline
-
-\protected_separator
- fprintf(stdout, "! Build Error: ==> %s ==>
+ fprintf(stdout, "! Build Error: ==> %s ==>
\backslash
n", tool);
\newline
-
-\protected_separator
- for (i=0; i<buf_size; i++)
-\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- fprintf(stdout, "%s", buffer[i]);
-\newline
-
-\protected_separator
- fprintf(stdout, " ...
+ fprintf(stdout, " ...
\backslash
n
\backslash
nl.%d ...
\backslash
-n
-\backslash
n", error_line);
\newline
+
+\newline
+ for (i=0; i<buf_size; i++)
+\newline
+ if (strlen(buffer[i]) != 0)
+\newline
+ fprintf(stdout, "%s", buffer[i]);
+\newline
+
+\newline
+ fprintf(stdout, "
+\backslash
+n");
+\newline
}
\newline
@
\newline
{
\newline
-
-\protected_separator
- last_buf_line = 0;
+ last_buf_line = 0;
\newline
-
-\protected_separator
- while (fgets(buffer[0], 200, stdin)) {
+ while (fgets(buffer[0], 200, stdin)) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (noweb_try(0))
+ if (noweb_try(0))
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- output_error(1, 0, "noweb");
+ output_error(1, err_line, "noweb");
\newline
-
-\protected_separator
- }
+ }
\newline
}
\newline
\newline
char *noweb_msgs[] = {
\newline
-
-\protected_separator
- "couldn't open file",
+ "couldn't open file",
\newline
-
-\protected_separator
- "couldn't open temporary file",
+ "couldn't open temporary file",
\newline
-
-\protected_separator
- "error writing temporary file",
+ "error writing temporary file",
\newline
-
-\protected_separator
- "ill-formed option",
+ "ill-formed option",
\newline
-
-\protected_separator
- "unknown option",
+ "unknown option",
\newline
-
-\protected_separator
- "Bad format sequence",
+ "Bad format sequence",
\newline
-
-\protected_separator
- "Can't open output file",
+ "Can't open output file",
\newline
-
-\protected_separator
- "Can't open temporary file",
+ "Can't open temporary file",
\newline
-
-\protected_separator
- "Capacity exceeded:",
+ "Capacity exceeded:",
\newline
-
-\protected_separator
- "Ignoring unknown option -",
+ "Ignoring unknown option -",
\newline
-
-\protected_separator
- "This can't happen:",
+ "This can't happen:",
+\newline
+ "non-numeric line number in"
+\newline
+};
\newline
-\protected_separator
- "non-numeric line number in"
+\newline
+char *noweb_msgs_mimic_gcc[] = {
+\newline
+ ": unescaped << in documentation chunk"
\newline
};
\newline
\layout Standard
A noweb error message can be any string that contains a matching pair of
- < <
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-> >, or any of the above strings.
+ < <\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+> >, or any of the above strings
\layout Scrap
<<Function bodies>>=
\newline
{
\newline
-
-\protected_separator
- char
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- *s, *b;
+ char *s, *t, *b;
\newline
-
-\protected_separator
- int
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- i;
+ int i;
\newline
-\protected_separator
-
\newline
-
-\protected_separator
- b = buffer[buf_line];
+ b = buffer[buf_line];
\newline
-
-\protected_separator
- s = strstr(b, "<<");
+ err_line = 0;
\newline
-\protected_separator
- if (s != NULL) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- s = strstr(s+2, ">>");
+ for (i=0; i<1; i++) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (s != NULL)
+ s = (char *)strstr (b, noweb_msgs_mimic_gcc[i]);
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- return 1;
+ if (s != NULL) {
\newline
-
-\protected_separator
- } else {
+ t = (char *)strchr(buffer[buf_line], ':');
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- for (i=0; i<12; i++) {
+ err_line = atoi(t+1);
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- s = strstr (b, noweb_msgs[i]);
+ t = buffer[buf_line];
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (s != NULL)
+ ++s;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-break;
+ while (*(t++) = *(s++));
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- }
+ return 1;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (s != NULL)
+ }
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- return 1;
+ }
\newline
-
-\protected_separator
- }
+ s = (char *)strstr(b, "<<");
\newline
-
-\protected_separator
- return 0;
+ if (s != NULL) {
+\newline
+ s = (char *)strstr(s+2, ">>");
+\newline
+ if (s != NULL) {
+\newline
+ return 1;
+\newline
+ }
+\newline
+ } else {
+\newline
+ for (i = 0; i < 12; ++i) {
+\newline
+ s = (char *)strstr (b, noweb_msgs[i]);
+\newline
+ if (s != NULL) {
+\newline
+ return 1;
+\newline
+ }
+\newline
+ }
+\newline
+ }
+\newline
+ return 0;
\newline
}
\newline
line at a time.
\layout Scrap
-<<Scan input for xlc error messages>>=
-\protected_separator
-
+<<Scan input for xlc error messages>>=
\newline
{
\newline
-
-\protected_separator
- last_buf_line = 0;
+ last_buf_line = 0;
\newline
-
-\protected_separator
- while (fgets(buffer[last_buf_line], 200, stdin)) {
+ while (fgets(buffer[last_buf_line], 200, stdin)) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (xlc_try(0))
+ if (xlc_try(0))
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- output_error(1, err_line, "xlc");
+ output_error(1, err_line, "xlc");
\newline
-
-\protected_separator
- }
+ }
\newline
}
\newline
\newline
{
\newline
-
-\protected_separator
- char
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- *s, *t;
+ char *s, *t;
\newline
-
-\protected_separator
-
+
\newline
-
-\protected_separator
- t = buffer[buf_line];
+ t = buffer[buf_line];
\newline
-
-\protected_separator
- s = t+1;
+ s = t+1;
\newline
-
-\protected_separator
- while (*s != '"' && *s != ' ' && *s != '
+ while (*s != '"' && *s != ' ' && *s != '
\backslash
0')
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- s++;
+ s++;
\newline
-
-\protected_separator
- if (*t != '"' || *s != '"' || strncmp(s+1, ", line ", 7) != 0)
+ if (*t != '"' || *s != '"' || strncmp(s+1, ", line ", 7) != 0)
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- return 0;
+ return 0;
\newline
-
-\protected_separator
- s += 8;
+ s += 8;
\newline
-
-\protected_separator
- err_line = atoi(s);
+ err_line = atoi(s);
\newline
-
-\protected_separator
- return 1;
+ return 1;
\newline
}
\newline
\newline
{
\newline
-
-\protected_separator
- char
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- *s, *t;
+ char *s, *t;
\newline
-
-\protected_separator
-
+
\newline
-
-\protected_separator
- last_buf_line = 0;
+ last_buf_line = 0;
\newline
-
-\protected_separator
- while (fgets(buffer[last_buf_line], 200, stdin)) {
+ while (fgets(buffer[last_buf_line], 200, stdin)) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- /****** Skip lines until I find an error */
+ /****** Skip lines until I find an error */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- s = strpbrk(buffer[last_buf_line], " :");
+ s = (char *)strpbrk(buffer[last_buf_line], " :");
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (s == NULL || *s == ' ')
+ if (s == NULL || *s == ' ')
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- continue; /* No gcc error found here */
+ continue; /* No gcc error found here */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- do {
+ do {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-<<gcc error message criteria is to find a "...:999:" or a "...: ">>
+ <<gcc error message criteria is to find a "...:999:" or a "...: ">>
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- /****** OK It is an error message, get line number */
+ /****** OK It is an error message, get line number */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- err_line = atoi(s+1);
+ err_line = atoi(s+1);
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (last_err_line == 0 || last_err_line == err_line) {
+ if (last_err_line == 0 || last_err_line == err_line) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-last_err_line = err_line;
+ last_err_line = err_line;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-continue; /* It's either a header or a continuation, don't output yet */
+ continue; /* It's either a header or a continuation, don't output
+ yet */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- }
+ }
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- /****** Completed the scan of one error message, output it to LyX */
+ /****** Completed the scan of one error message, output it to LyX
+ */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- discharge_buffer(1);
+ discharge_buffer(1);
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- break;
+ break;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- } while (fgets(buffer[last_buf_line], 200, stdin));
+ } while (fgets(buffer[last_buf_line], 200, stdin));
\newline
-
-\protected_separator
- }
+ }
\newline
-
-\protected_separator
-
-\protected_separator
-/****** EOF completes the scan of whatever was being scanned */
+ /****** EOF completes the scan of whatever was being scanned */
\newline
-
-\protected_separator
- discharge_buffer(0);
+ discharge_buffer(0);
\newline
}
\newline
\newline
/****** Search first ":" in the error number */
\newline
-s = strpbrk(buffer[last_buf_line], " :");
+s = (char *)strpbrk(buffer[last_buf_line], " :");
\newline
last_buf_line++;
\newline
if (s == NULL || *s == ' ')
\newline
-
-\protected_separator
- <<No gcc error found here, but it might terminate the scanning of a previous
+ <<No gcc error found here, but it might terminate the scanning of a previous
one>>
\newline
/****** Search second ":" in the error number */
\newline
-t = strpbrk(s+1, " :");
+t = (char *)strpbrk(s+1, " :");
\newline
if (t == NULL || *t == ' ')
\newline
-
-\protected_separator
- <<No gcc error found here, but it might terminate the scanning of a previous
+ <<No gcc error found here, but it might terminate the scanning of a previous
one>>
\newline
/****** Verify if is all digits between ":" */
\newline
if (t != s+1+strspn(s+1, "0123456789"))
\newline
-
-\protected_separator
- <<No gcc error found here, but it might terminate the scanning of a previous
+ <<No gcc error found here, but it might terminate the scanning of a previous
one>>
\newline
@
\newline
{
\newline
-
-\protected_separator
-
-\protected_separator
-err_line = 0;
+ err_line = 0;
\newline
-
-\protected_separator
-
-\protected_separator
-discharge_buffer(1);
+ discharge_buffer(1);
\newline
-
-\protected_separator
-
-\protected_separator
-continue;
+ continue;
\newline
}
\newline
\newline
{
\newline
-
-\protected_separator
- if (last_err_line != 0) {
+ if (last_err_line != 0) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (save_last != 0) {
+ clean_gcc_messages();
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- output_error(last_buf_line-1, last_err_line, "gcc");
+ if (save_last != 0) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- strcpy (buffer[0], buffer[last_buf_line-1]);
+ output_error(last_buf_line-1, last_err_line, "gcc");
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- last_err_line = err_line;
+ strcpy (buffer[0], buffer[last_buf_line-1]);
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- last_buf_line = 1;
+ last_err_line = err_line;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- } else {
+ last_buf_line = 1;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- output_error (last_buf_line, last_err_line, "gcc");
+ } else {
\newline
+ ++last_buf_line;
+\newline
+ clean_gcc_messages();
+\newline
+ output_error(last_buf_line-1, last_err_line, "gcc");
+\newline
+ last_err_line = 0;
+\newline
+ last_buf_line = 0;
+\newline
+ }
+\newline
+ }
+\newline
+}
+\newline
+@
+\layout Scrap
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- last_err_line = 0;
+<<Function prototypes>>=
+\newline
+void discharge_buffer (int save_last);
\newline
+@
+\layout Standard
-\protected_separator
+The next function
+\begin_inset Quotes eld
+\end_inset
-\protected_separator
+cleans
+\begin_inset Quotes erd
+\end_inset
-\protected_separator
+ superfluous information from gcc messages, namely the name of the noweb
+ file and the line number of the Error.
+\begin_inset Foot
+collapsed true
-\protected_separator
+\layout Standard
-\protected_separator
- last_buf_line = 0;
-\newline
+More could be done.
+ For instance, some way of distinguishing between gcc Errors and Warnings
+ should be devised.
+\end_inset
-\protected_separator
-\protected_separator
+\layout Scrap
-\protected_separator
- }
+<<Function bodies>>=
\newline
-
-\protected_separator
- }
+void
+\newline
+clean_gcc_messages ()
+\newline
+{
+\newline
+ int index;
+\newline
+ char search [30];
+\newline
+ char *tail, *head;
+\newline
+ int search_len = sprintf(search, ".nw:%d:", last_err_line);
+\newline
+
+\newline
+ for (index = 0; index < last_buf_line-1; index++) {
+\newline
+ tail = (char *)strstr (buffer[index], search);
+\newline
+ if ( tail == NULL) {
+\newline
+ tail = (char *) strstr (buffer[index], ".nw:");
+\newline
+ if (tail) {
+\newline
+ tail += 4;
+\newline
+ }
+\newline
+ } else {
+\newline
+ tail += search_len;
+\newline
+ }
+\newline
+ if (tail != NULL) {
+\newline
+ head = buffer[index];
+\newline
+ while (*(head++) = *(tail++));
+\newline
+ }
+\newline
+ }
\newline
}
\newline
<<Function prototypes>>=
\newline
-void discharge_buffer (int save_last);
+void clean_gcc_messages ();
\newline
@
\layout Standard
\newline
{
\newline
-
-\protected_separator
- last_buf_line = 0;
+ last_buf_line = 0;
\newline
-
-\protected_separator
- while (fgets(buffer[0], 200, stdin)) {
+ while (fgets(buffer[0], 200, stdin)) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (noweb_try(0))
+ if (noweb_try(0))
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- output_error(1, 0, "noweb");
+ output_error(1, err_line, "noweb");
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- else if (xlc_try(0))
+ else if (xlc_try(0))
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- output_error(1, err_line, "xlc");
+ output_error(1, err_line, "xlc");
\newline
-
-\protected_separator
- }
+ }
\newline
}
\newline
\layout Standard
To combine the scan of noweb error messages and gcc error messages is simple
- if we realize that it is not possible to find a noweb error message
- in the middle of a gcc error message.
+ if we realize that it is not possible to find a noweb error message in
+ the middle of a gcc error message.
So we just repeat the gcc procedure and test for noweb error messages in
the beginning of the scan:
\layout Scrap
\newline
{
\newline
-
-\protected_separator
- char
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- *s, *t;
+ char *s, *t;
\newline
-
-\protected_separator
-
+
\newline
-
-\protected_separator
- last_buf_line = 0;
+ last_buf_line = 0;
\newline
-
-\protected_separator
- while (fgets(buffer[last_buf_line], 200, stdin)) {
+ while (fgets(buffer[last_buf_line], 200, stdin)) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- /****** Skip lines until I find an error */
+ /****** Skip lines until I find an error */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (last_buf_line == 0 && noweb_try(0)) {
+ if (last_buf_line == 0 && noweb_try(0)) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- output_error(1, 0, "noweb");
+ output_error(1, err_line, "noweb");
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- continue;
+ continue;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- }
+ }
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- s = strpbrk(buffer[last_buf_line], " :");
+ s = (char *)strpbrk(buffer[last_buf_line], " :");
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (s == NULL || *s == ' ')
+ if (s == NULL || *s == ' ')
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- continue; /* No gcc error found here */
+ continue; /* No gcc error found here */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- do {
+ do {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-<<gcc error message criteria is to find a "...:999:" or a "...: ">>
+ <<gcc error message criteria is to find a "...:999:" or a "...: ">>
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- /****** OK It is an error, get line number */
+ /****** OK It is an error, get line number */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- err_line = atoi(s+1);
+ err_line = atoi(s+1);
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- if (last_err_line == 0 || last_err_line == err_line) {
+ if (last_err_line == 0 || last_err_line == err_line) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-last_err_line = err_line;
+ last_err_line = err_line;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-continue; /* It's either a header or a continuation, don't output yet */
+ continue; /* It's either a header or a continuation, don't output
+ yet */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- }
+ }
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- /****** Completed the scan of one error message, output it to LyX */
+ /****** Completed the scan of one error message, output it to LyX
+ */
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- discharge_buffer(1);
+ discharge_buffer(1);
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- break;
+ break;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
- } while (fgets(buffer[last_buf_line], 200, stdin));
+ } while (fgets(buffer[last_buf_line], 200, stdin));
\newline
-
-\protected_separator
- }
+ }
\newline
-
-\protected_separator
-
-\protected_separator
-/****** EOF completes the scan of whatever was being scanned */
+ /****** EOF completes the scan of whatever was being scanned */
\newline
-
-\protected_separator
- discharge_buffer(0);
+ discharge_buffer(0);
\newline
}
\newline
\newline
#include <stdio.h>
\newline
-#include <strings.h>
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
+#include <strings.h>
\newline
-
-\protected_separator
-
+
\newline
<<Global variables>>
\newline
<<build-script>>=
\newline
-#!/usr/local/bin/bash
+#!/bin/sh
+\newline
+if [ -z "$NOWEB_SOURCE" ]; then NOWEB_SOURCE=Literate.nw; fi
\newline
-notangle -L -Rlisterrors.c Literate.nw > listerrors.c
+notangle -L -Rlisterrors.c ${NOWEB_SOURCE} > listerrors.c
\newline
gcc -g -o listerrors listerrors.c
\newline
#!/bin/sh
\newline
-notangle -Rbuild-script $1 | sh
-\the_end
-
-
-
-
-
+notangle -Rbuild-script $1 | env NOWEB_SOURCE=$1 sh
+\layout LyX-Code
+\the_end