$Id: CHANGES,v 1.9 2005/08/24 10:54:02 taco Exp $
By John Hobby and others.  Public domain (see README).

----------------------------------------------------------------------
Changes in version 0.920:
----------------------------------------------------------------------

*  Fixed a long-standing bug in web2c where changing values of the
   memory_size setting in web2c could cause crashes and other random
   problems. The memory array size is now written to the dump file
   and loading is aborted if the values do not match.
*  Implement configurable figure output filename templates.
*  Implement cmyk, greyscale, and marking only color models.
*  The mpost executable is now version 0.920
  
----------------------------------------------------------------------
Changes in version 0.902:
----------------------------------------------------------------------
*  Fix a bug in mpto resulting in correctly placed labels (with
   thanks to Dan Luecking)
*  Fix a bug blocking compilation of dmp on MacOSX
*  The mpost,dmp,mpto executables are now version 0.902


----------------------------------------------------------------------
Changes in version 0.901:
----------------------------------------------------------------------
*  A corrected bugfix for bug item 3 from version 0.9 (the old fix
   made metapost fail the trap test)
*  Included mpost.mp for mem generation
*  Updated the trap test output.
*  The mpost executable is now version 0.901

----------------------------------------------------------------------
What is new in version 0.9:
----------------------------------------------------------------------
1. There is a new internal quantity called mpversion that reports the 
   current metapost version, and the version information is also written 
   to the PostScript file.   
2. The LaTeX sources of the mpman, mpintro, and mpgraph manuals have
   become part of the distribution package.
3. TEX.mp now has TeX format support through a pair of macros called 
   TEXPRE() and TEXPOST(). This llows you to process the contents of 
   the TEX() macro with, for example, LaTeX (instead of plain TeX).
   An example is given in the manual.
4. metapost now writes a %%HiReSBoundingBox comment
5. The EPS output no longer contains actual spaces within PostScript 
   strings as for example output by label("a space"), but their
   octal escape (\040) instead.
6. The EPS output now also has a %%BeginProlog DSC comment
   as well as %%EndProlog
7. The comments in the Web source have been changed to point out
   that on modern machines, acquiring the random seed has actually
   become a system-dependant operation (a granularity of whole seconds 
   is not small enough on new machines).
8. The 'newer' command now accepts more than 2 arguments, testing
   each of the files in turn.

----------------------------------------------------------------------
Bugfixes in version 0.9:
----------------------------------------------------------------------
1. Documentation improvements: all known errata and typos have been 
   removed, better explanations of e.g. dash patterns and dotlabel have
   been provided, and a number of omissions has been rectified.
2. The BoundingBox was not computed correctly when a filldraw command
   with a noticeable pen size was used at the edge of the picture.
3. Paths starting with degenerate constructions like (0,0)--(0,0)--(0,0) 
   could overflow memory.
4. The PostScript output could accidentally contain 8-bit characters 
   within PostScript strings in previous versions because a test was
   shared between terminal printing and PostScript printing.
5. A bug has been found in the assignment of serial numbers to independant
   variables in metafont 2.71828. This bug affected MP as well, and the
   same patch has been applied.
6. The turningnumber was sometimes wrong in unexpected ways. The new
   implementation is still sometimes wrong (when there are strange path
   segments involved), but in a much more predictable way: the new code
   always draws straight lines between the actual points, and calculates 
   the turningnumber based on that path instead of the actual path. The
   effect is that cusps and loops within segments are now completely 
   ignored. A more thorough fix of turningnumber is planned for the 
   next release.
7. There was an 'off by one' error in dvitomp wrt. the interpretation
   of virtual fonts.
8. mpto uses a new TeX macro for the generation of labels, making it
   more robust wrt. strange user code within the actual label text.
9. A missing colon in boxes.mp has been added
10. A missing save in mfplain.mp has been added
11. The generisize in boxes.mp has been fixed so that it now accepts [[ as 
    a valid variable name

----------------------------------------------------------------------
Version 0.641:
----------------------------------------------------------------------
The only change was to fix the code for transforming a picture that
contains a filldraw.  Version 0.64 introduced a bug that caused an
inappropriate memory reference in that case.

----------------------------------------------------------------------
What is new in Version 0.64:
----------------------------------------------------------------------
1. A new primitive command  closefrom filename  closes a readfrom file
   so that subsequent calls to readfrom with that file name will go back
   to the beginning of the file.
2. The ^^ notation for unprintable characters is now used only when printing
   on the terminal or the log file.  Internal computations and the write
   command are all 8-bit clean.  (This is partly due to material in mp.ch
   that changes the initialization of the xchr array.  Without these
   system-dependent changes, the write command would map all non-ascii
   characters to spaces.)
3. Arithmetic overflow during a comparison such as  20000>-20000 is now
   ignored.  This avoids extraneous error message when using the graph.mp
   macro package.
4. Transformations with negative determinants now work properly on pictures
   drawn with polygonal pens.
5. When the readfrom operator is applied to a file that does not exist,
   an attempt to close a non-open file could cause problems in some
   implementations.  This has now been fixed.
6. Using  draw picture_expression withpen  where the picture_expression
   was a scaled picture containing dashed lines, the dash lengths would
   change.  This bug has been fixed.
7. The dashpart operator could return an invalid picture or a picture that
   is not properly scaled.  This has also been fixed.
8. The |char_base| variable could become negative when using fonts that
   do not start at character 0.  There was also bad Pascal code in function
   b_open_in.  This has all been fixed.
9. Dvitomp has been fixed to avoid a font data structure problem that
   could cause some characters to come out in the wrong font when you
   mix virtual and non-virtual fonts.
10. Dvitomp now correctly prints font names when there is a checksum
   mismatch, and it aborts instead of just printing an error if a tfm
   or vf file is bad.
11. In plain.mp, the drawdblarrow macro now uses filldraw so that it works
   better with large pen sizes.

----------------------------------------------------------------------
Version 0.632:
----------------------------------------------------------------------
When prologues is negative, the output files use full precision for
coordinates in "%%BoundingBox" comments.  In btex..etex blocks,
"number too large" and "invalid character" errors are suppressed.
The result of btex..etex is now guaranteed to be in a setbounds path
so that a for...within iteration will always treat it as a unit.

There are also some obscure bug fixes involving string compaction when
scanning a file name or when mp is compiled in debug mode.  Some possible
identifier name conflicts and range check errors have also been fixed.


----------------------------------------------------------------------
Version 0.631:
----------------------------------------------------------------------
This version fixes an obscure bug that could cause certain perfectly valid
strings to be printed as "???" or " NONEXISTENT".  It also includes a minor
fix to the PATHEXPAND code that prevents running out of file descriptors.


----------------------------------------------------------------------
What is new in Version 0.63:
----------------------------------------------------------------------
1. Backslashes in the PostScript output are rendered correctly.  They used
   to come out as (\) instead of (\\).
2. Recycling an independent variable should no longer cause spurious overflows.
   (This bug was recently found in mf.web.)
3. Pythagorean addition should now be faster in certain trivial cases.
4. Rotating text by arbitrary angles should no longer cause bad PostScript
   output.  The problem was that arguments to "fshow" could be inaccurate.
5. Obscure bugs inherited from mf.web are now fixed.  These involve
   balancing parentheses showing on the terminal, reporting the correct
   line number in case of buffer overflow, and removing spurious reference
   counts that could effect end-of-job statistics.
6. Fonts with ec=255 should no longer cause mp's PostScript output routines
   to go into a loop.
7. When mp's string mechanism was heavily used, file names could occaisonally
   be printed on the terminal and log file as "(?)".  This has been fixed.
8. Setting PATHEXPAND in site.h causes mp, dvitomp and dmp to understand "//"
   in path variables as "search multiple levels of subdirectories".  This is
   for compatibility with recent versions of the Web2c TeX distribution.
9. A typo in mpware/makempx and mpware/troffmpx has been fixed.  Previous
   versions of these scripts would not run on some systems.
10. Data files *.d have been added to the doc directory.  These are used by
   doc/mpgraph.mp which generates figures for "Drawing Graphs with MetaPost".
11. Typos in mpintro.tex and mp.web's TeX material have been fixed.
12. Files examples.mp, mpintro.tex and mpintro.bib have moved from mplib to
    the doc directory.
13. The author's email address now appears in the README file.


----------------------------------------------------------------------
Macros added to the mplib directory between Versions 0.50 and 0.62:
----------------------------------------------------------------------
rboxes.mp is a slightly more general version of boxes.mp
TEX.mp provides a way of running tex dynamically instead of as a pre-processor
graph.mp, format.mp, and sarith.mp are documented in doc/mpgraph.ps
(This is the same as ftp://netlib.att.com/netlib/att/cs/cstr/164.ps.Z)
marith.mp, string.mp, texnum.mp, and troffnum.mp are low-level packages
used by graph.mp, format.mp, and sarith.mp.


----------------------------------------------------------------------
Other minor bug fixes subsequent to Version 0.60
----------------------------------------------------------------------
1. plain.mp has been fixed so that the x**y works properly when x<0 and y is
   a negative integer.
2. Programs mptotex.c and mptotr.c which extract btex..etex material have been
   fixed so they work properly with input files that do not end with a newline
   character.
3. Program dmp.c which handles troff output from btex..etex blocks has been
   modified to avoid outputting any non-ASCII characters that the C function
   isprint() accepts.
4. Program dmp.c no longer gets troff graphics specials confused with text.
   This seldom matters because btex..etex blocks are unlikely to contain
   troff graphics.
5. Pictures containing clipped subpictures could come out with some colors
   in the subpicture wrong.
6. Colors in PostSript output were not being restricted to the standard 0..1
   range.
7. Transforming a path or a pen should no longer generate extraneous overflow
   errors in certain unusual situations.
8. Drawing with a degenerate 2-vertex polygonal pen such as penrazor should
   no longer cause an infinite loop in certain unusual situations.
9. There were some bugs in the mfplain macros.  (These macros are designed
   to similate plain METAFONT.)  The drawing and filling macros now apply
   currenttransform to the path but not the pen rather than vice versa.
   The predefined modes now set o_correction to 1.0.
10. For security reasons, mp can no longer read or write files whose names
   begin with '.'


----------------------------------------------------------------------
Changes to the MetaPost language between Version 0.50 and Version 0.60
----------------------------------------------------------------------
1. New operator `readfrom <filename>' and new command
   `write <string expression> to <filename>' do file I/O.  Plain defines
   a special string EOF that readfrom returns to indicate end-of-file
   and write..to understands as well.
2. New iteration type `for p within <picture expression>: <loop text> endfor'
   iterates through the interior components of the picture.  An `interior
   component' is a single pen stroke, filled outline, or piece of typeset
   text.  A part of the picture enclosed in a clipping or setbounds path
   also counts as an interior component.  If the whole picture is enclosed
   in such a path, the for..within iteration looks inside.  Note that a
   picture generated by btex..etex is enclosed in a setbounds path.
3. The length operator now applies to pictures.  It returns the number of
   interior components.
4. New boolean operators stroked, filled, textual, clipped, bounded test
   the first component of a picture.  A picture enclosed in a clipping or
   setbounds path counts as a single component.
5. Part extraction operators now work for pictures.  Standard operators
   redpart, greenpart, bluepart apply to the color of the first component
   and xpart, ypart, xxpart, xypart, yxpart, yypart extract parts of the
   tranformation that has been applied to a text component.  If `textual p'
   is false, the transform components are all zero; if `clipped p' or
   `bounded p' is true, the color parts are all zero.  Additional operators
   fontpart, textpart, pathpart, penpart, dashpart extract other information
   from the first component of a picture.  They all return null values when
   the first component has the wrong type:  fontpart and textpart return
   null strings; pathpart returns the path (0,0); penpart returns nullpen;
   and dashpart returns nullpicture.
6. The construction `dashed nullpicture' is now a no-op.  It used to be
   an error.
7. The clip and setbounds statements used to ignore operations on empty
   pictures.  Now they do not.
8. Structuring comments in the PostScript output are now based on EPSF-3.0
   as described in the 2nd Edition of the PostScript Reference Manual.
   When prologues is 0, some structuring comments are included but the
   output is not flagged a `conforming document'.  Previous versions of
   MetaPost behaved similarly but used slightly different structuring
   comments.
9. When warningcheck is 0, numeric tokens and results from the hex and
   oct operators can be as large as 32767.99998.  The old limit of about
   4096 applies only when warningcheck is positive.
10. Various optimizations should make the output a little more compact.
11. For PostScript engines that obey the scan-conversion rules documented
   in the 2nd edition PostScript Language Reference Manual, hrules and
   vrules in btex..etex blocks should now come out to exactly the right
   number of pixels.  The change affects all pen strokes drawn in MetaPost
   It is implemented via PostScripts dtransform and idtransform operators.
12. A bug involving setbounds and MetaPost's corner operators has been fixed.
13. Degenerate elliptical pens no longer cause PostScript to divide by zero.
14. Fixed a very obscure bug involving readstring and end-of-file.
15. String compaction statistics are now printed correctly when the job
   terminates with tracingstats positive.



----------------------------------------------------------------------
Changes to the source files between Version 0.50 and Version 0.60
----------------------------------------------------------------------

CHANGES to ./README.MP
The installation instructions should now be clearer.  They also explain
how to cope with verious versions of WEB2C.

CHANGES to ./site.h
I removed unused entries and clarified instructions in commentary material.
Confusing comments about possibly merging it with the WEB2C version of site.h
were removed--I think such merging is a bad idea.

CHANGES TO ./Makefile, mp/Makefile, mpware/Makefile:
Improved default settings, simplified the `install' recipe,
fixed a few missing depencies, portability problems, etc.

RENAMED FILES
   mp/mp.defines, mpware/mpware.defines, mpware/dvitompext.c
TO mp/mp.def,     mpware/mpware.def,     mpware/dvimpext.c
(The names also changed in the Makefiles and convert scripts)

CHANGES TO mp/mp.web, mp/mp.ch, mp/mp.def, mp/mpext.c:
Lots of new features were added as noted above.  The only new system-
dependencies are for `readfrom' and `write...to'.
The change file now increases max_read_files; it doesn't bother with
max_write_files, but perhaps it should.  There is a new change entitled
"Path selector for..readfrom file".  From the web2C sources I borrowed
a change "`logname' is declared in <unistd.h> in some systems".  I also
added a PASCAL-like eof() routine to mpext, removed a change entitled
"avoid using eof() in read_psname_table" and added a new change
"[48.1199] `eof'...[in read_mem_file]".

Reorganization of math routines in the mp directory:
I moved the floating-point math routines from mpext.c to mpath.c.  A
C-language version of the standard math routines was moved from mpmath.c
to a new file pmath.c for use in mathtest only.  This required chages to
mathtest.c and time.c (also used only for mathtest).  The point of all
this is that there is now just one copy of the floating-point math routines
and it is used for mathtest and (optionally) for mp itself.

Routines in doc and mp/trapdir:
The output was updated to Version 0.60.  Another test file mptrap.mp
tests new features.  There have also been minor updates to the manual,
although the new features for Version 0.60 are not included yet.

CHANGES to macros in mplib:
A minor change to boxes.mp should make it more robust.  Changed default
setting of tracinglostchars in mfplain.mp and plain.mp.  Added a string
constant EOF to plain.mp for use with readfrom and write..to.
Changed mproof.tex to make it more portable as suggested by Knuth.

CHANGES to mpware/dvitomp.web, mpware/dvitomp.ch:
The web file was changed to output rules as horizontal or vertical
penstrokes with butt endcaps.  This also affected dvitomp.ch.  Also in
dvitomp.ch, put terminal output on stdout instead of stderr and require
the output file to be given on the command line.

CHANGES to mpware/makempx, mpware/troffmpx:
Added comments explaining what path names need fixing.  Portability improvements
and dvitomp's output change affect makempx only.

CHANGES to mpware/mptotex.c mpware/mptotr.c mpware/testex.err mpware/testex.mp:
Ignore an initial newline in the TeX (or troff) material to avoid generating
a blank line in the output file.  The test file now covers this case.

CHANGE to mpware/newer.c
Minor changes to make it compile in strict ANSI/POSIX environments.
