This contains alterations to Matt's earlier modifications.
This version
has the benefits of Matt's version, with the cache being smaller and
easier to parse by external programs. I've gone back to the format
where there is one line per boundname in the cache file. My original
implementation had fixed size buffers. This version benefits from
Matt's rewriting of the input loops so more care is taken on error
handling and in building the lists name by name.
Matt had used a '%d\t%s\n' format for writing out strings which contain
arbitrary characters. The only special character in my original
implementation was the '@' character. If its seen, its now quoted with
a '\', and this is handled on input. This produces slightly smaller
output
Matt's version could handle very large filenames, this version is
restricted to the internal jam filename length, this is used elsewhere
in the program (MAXJPATH)
The initial age of a cache line is now 1 rather than 0. This allows us to
catch some errors by atoi() returning 0 when given a non-integer
I modified the global cache list handling, so the order its unchanged
between two invocations of Jam. This allows easier diff'ing to see what's
going on