]> git.lyx.org Git - lyx.git/blobdiff - lib/examples/listerrors.lyx
template files: remove all relative paths to re-eanable to use "new from template"
[lyx.git] / lib / examples / listerrors.lyx
index 4214c4fe45a6db8ba607f4491595983fb9da456e..aed3ecb92e52282f6787ad788a86cab76746a318 100644 (file)
@@ -1,8 +1,8 @@
 #LyX 2.1 created this file. For more info see http://www.lyx.org/
-\lyxformat 442
+\lyxformat 474
 \begin_document
 \begin_header
-\textclass literate-article
+\textclass article
 \begin_preamble
 %
 % ps2pdf stuff
@@ -18,6 +18,9 @@
 \let\nwdocspar=\smallbreak
 \end_preamble
 \use_default_options false
+\begin_modules
+noweb
+\end_modules
 \maintain_unincluded_children false
 \language english
 \language_package default
@@ -34,7 +37,7 @@
 \font_sf_scale 100
 \font_tt_scale 100
 \graphics default
-\default_output_format default
+\default_output_format pdf
 \output_sync 0
 \bibtex_command default
 \index_command default
 \use_geometry false
 \use_package amsmath 0
 \use_package amssymb 0
+\use_package cancel 0
 \use_package esint 0
 \use_package mathdots 1
 \use_package mathtools 0
 \use_package mhchem 1
+\use_package stackrel 0
+\use_package stmaryrd 0
 \use_package undertilde 0
 \cite_engine basic
-\cite_engine_type numerical
+\cite_engine_type default
 \biblio_style plain
 \use_bibtopic false
 \use_indices false
@@ -311,118 +317,127 @@ listerrors
  available for all other platforms.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<listerrors>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 #!/usr/bin/python -tt
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 """reformat noweb and compiler errors for LyX.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 Expects to read from stdin and output to stdout.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 """
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 __author__ = "Kayvan A.
  Sylvan <kayvan@sylvan.com>"
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 __date__ = "$Date: 2005/07/18 09:42:26 $"
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 __version__ = "$Revision: 1.5 $"
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 __credits__ = """Edmar Wienskoski Jr.
  <edmar-w-jr@technologist.com>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     original Literate support for LyX.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 Bernard Michael Hurley <berhardh@westherts.ac.uk>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     modifications to original listerrors."""
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 __copyright__ = "Copyright 2002 - Kayvan Sylvan."
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 import sys, string
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 <<Function Bodies>>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 if __name__ == "__main__":
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   main()
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Section
 LaTeX style error message
 \end_layout
@@ -431,40 +446,46 @@ LaTeX style error message
 The following function mimics the TeX error message format.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Function Bodies>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 def write_error(msg, tool = "noweb", line_number = 1):
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   """Write out the given message in TeX error style.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   called like: write_error(msg, tool, line_number)."""
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   print "! Build Error: ==> %s ==>
 \backslash
 n" % (tool),
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   print " ...
 \backslash
@@ -473,40 +494,52 @@ n
 nl.%d ...
 \backslash
 n" % (line_number),
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   if type(msg) == type("str"): # simple string
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     print msg
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   else: # some kind of list (sequence or tuple)
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     for m in msg:
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
         if m != "": print m,
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     print
-\begin_inset Newline newline
-\end_inset
+\end_layout
 
+\begin_layout Plain Layout
 
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 @ %def write_error
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Section
 Filtering errors
 \end_layout
@@ -533,127 +566,148 @@ pushline
  set of functions:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Function Bodies>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 __lines = [] # lines pushed back
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 def getline(file = sys.stdin):
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   """read a line from internal stack or from file.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   optional file argument defaults to sys.stdin."""
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   global __lines
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   lines = __lines
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   if lines:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     line = lines.pop()
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   else:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     line = file.readline()
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   return line
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @ %def getline
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 And now for the corresponding pushline function:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Function Bodies>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 def pushline(line):
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   "push a line onto the pushback stack."
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   global __lines
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   lines = __lines
-\begin_inset Newline newline
-\end_inset
+\end_layout
 
-  lines.append(line)
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
 
+lines.append(line)
+\end_layout
 
-\begin_inset Newline newline
-\end_inset
+\begin_layout Plain Layout
+
+\end_layout
+
+\begin_layout Plain Layout
 
 @ %def pushline
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 The main() entry point function is extremely simple.
  Note that this version of 
@@ -671,92 +725,113 @@ listerrors
  
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Function Bodies>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 def main():
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   """Entry point for listerrors.
  Takes no options.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   Reads stdin and writes to stdout.
  Filter errors"""
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   while 1:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     line = getline()
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     if line == "": break
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     <<Check line against patterns and take action>>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @ %def main
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 For each line read in, we need to find out if it matches any of our tools
  (noweb, gcc, etc.) and act accordingly.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Check line against patterns and take action>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 try_patterns_dispatch = [ noweb_try, gcc_try, xlc_try ]
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 for predicate in try_patterns_dispatch:
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   if predicate(line): break
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Section
 Different Error Formats
 \end_layout
@@ -776,65 +851,74 @@ Noweb errors are output on a single line, so examining just the current
  line is enough.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Function Bodies>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 def noweb_try(line):
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   """see if line is a noweb error.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   Returns 1 on success, 0 otherwise.
  Outputs on stdout."""
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   retval = 0
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   <<Look for the unescaped angle-brackets in documentation>>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   <<Look for anything with double angle brackets>>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   <<Last ditch effort scan for specific strings>>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   return retval
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @ %def noweb_try
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 First, we look for the 
 \begin_inset Quotes eld
@@ -848,214 +932,247 @@ unescaped < < in documentation chunk
  This is the only message with an associated line number from noweb.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 <<Look for the unescaped angle-brackets in documentation>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 if string.find(line, ": unescaped << in documentation chunk") != -1:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   line_parts = string.split(line, ':')
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   num_str = line_parts[1]
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   num_len = len(num_str)
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   i = 0
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   while i < num_len and (num_str[i] in string.digits): i = i + 1
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   if i == num_len:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     write_error(":" + line_parts[2], "noweb", int(num_str))
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     retval = 1
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
-Some noweb messages are simply about undefined scraps.
+Some noweb messages are simply about undefined chunks.
  These can be seen by looking for matching double-angle-brackets.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Look for anything with double angle brackets>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 if (not retval):
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   left = string.find(line, "<<")
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   if (left != -1) and ((left + 2) < len(line)) and 
 \backslash
 
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
      (string.find(line[left+2:], ">>") != -1):
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     write_error(line, "noweb");
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     retval = 1;
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 Finally, here is an additional list of explicit strings to check for.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Last ditch effort scan for specific strings>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 if (not retval):
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   msgs_to_try = ("couldn't open file",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "couldn't open temporary file",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "error writing temporary file",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "ill-formed option",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "unknown option",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "Bad format sequence",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "Can't open output file",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "Can't open temporary file",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "Capacity exceeded:",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "Ignoring unknown option -",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "This can't happen:",
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     "non-numeric line number in")
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   for msg in msgs_to_try:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     if string.find(line, msg) != -1:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
       write_error(line, "noweb")
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
       retval = 1
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
       break
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Subsection
 gcc errors
 \end_layout
@@ -1068,224 +1185,276 @@ The gcc errors can be multi-line, with the following format:
 foo.c: In function `main': 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 foo.c:3: `bar' undeclared (first use in this function) 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 foo.c:3: (Each undeclared identifier is reported only once 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 foo.c:3: for each function it appears in.) 
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 foo.c:3: parse error before `x'
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 In order to parse this, the gcc error handler has to look ahead and return
  any and all lines that do not match the expected pattern.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Function Bodies>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 def gcc_try(line):
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   """See if line is a gcc error.
  Read ahead to handle all the lines.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   Returns 1 on success, 0 otherwise.
  Outputs on stdout."""
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   retval = 0
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   <<Handle the gcc error message>>
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   return retval
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @ %def gcc_try
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 The error message starts with a gcc header (as above) without an associated
  line number.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Handle the gcc error message>>= 
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 first_space = string.find(line, ' ')
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 if first_space > 1: # The smallest would be "X: "
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
   if line[first_space - 1] == ':':
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     header_to_see = line[:first_space - 1]
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     next_line = getline()
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     if next_line and next_line[:first_space - 1] == header_to_see:
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
       num_end = first_space
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
       while next_line[num_end] in string.digits: num_end = num_end + 1
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
       if num_end > first_space: # good!
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
         <<Accumulate gcc error lines and print it>>
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
       else: # oops! Not a gcc error.
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
         pushline(next_line)
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
     elif next_line:
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
       pushline(next_line) # return this line to input stream
-\begin_inset Newline newline
-\end_inset
+\end_layout
+
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Standard
 At the point in the code that we know that we are in the middle of an error
  message, we do the following:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<Accumulate gcc error lines and print it>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 num_str = next_line[first_space:num_end]
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 msgs = [line[first_space:]]
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 msgs.append(next_line[num_end + 1:])
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 header_to_see = next_line[:num_end]
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 next_line = getline()
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 while next_line and next_line[:num_end] == header_to_see:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   msgs.append(next_line[num_end + 1:])
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   next_line = getline()
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 if next_line: pushline(next_line)
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 write_error(msgs, "gcc", int(num_str))
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 retval = 1
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Subsection
 xlc errors
 \end_layout
  
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 <<Function Bodies>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 def xlc_try(line):
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   """see if line is an xlc error.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   Returns 1 on success, 0 otherwise.
  Outputs on stdout."""
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   retval = 0
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   if line[0] == '"': # This is the first character of all xlc errors
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     next_quote = string.find(line, '"', 1)
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     first_space = string.find(line, ' ')
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
     if (next_quote != -1) and (first_space > next_quote): # no space inisde
  quotes
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
       if line[first_space - 1:first_space + 6] == ", line ":
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
         num_start = num_end = first_space + 6
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
         while line[num_end] in string.digits: num_end = num_end + 1
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
         if num_end > num_start:
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
           write_error(line, "xlc", int(line[num_start : num_end]))
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
           retval = 1
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   return retval
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
   
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @ %def xlc_try
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Section
 Extracting the code
 \end_layout
@@ -1433,7 +1611,7 @@ Program
 \begin_inset Quotes erd
 \end_inset
 
- convertor to call a generic script that always extracts a scrap named 
+ convertor to call a generic script that always extracts a chunk named 
 \family typewriter
 build-script
 \family default
@@ -1443,51 +1621,60 @@ build-script
 
 \begin_layout LyX-Code
 #!/bin/sh
-\begin_inset Newline newline
-\end_inset
+\end_layout
 
-notangle -Rbuild-script $1 | env NOWEB_SOURCE=$1 sh
+\begin_layout LyX-Code
+notangle -Rbuild-script $1 | env NOWEB_SOURCE=$1 NOWEB_OUTPUT_DIR=$2 sh
 \end_layout
 
 \begin_layout Standard
 This section defines our build-script, which extracts the code.
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
 
 <<build-script>>=
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 #!/bin/sh
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 if [ -z "$NOWEB_SOURCE" ]; then NOWEB_SOURCE=listerrors.nw; fi
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 if [ -z "$NOWEB_OUTPUT_DIR" ]; then NOWEB_OUTPUT_DIR=.; fi
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 notangle -Rlisterrors ${NOWEB_SOURCE} > ${NOWEB_OUTPUT_DIR}/listerrors
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 chmod +x ${NOWEB_OUTPUT_DIR}/listerrors
 \end_layout
 
-\begin_layout Scrap
+\begin_layout Plain Layout
 
 @
 \end_layout
 
+\end_inset
+
+
+\end_layout
+
 \begin_layout Section
 Indices
 \end_layout