tentative fix for issue 3 (ex 53)
[mplib] / CHANGES
1 $Id: CHANGES,v 1.9 2005/08/24 10:54:02 taco Exp $
2 By John Hobby and others.  Public domain (see README).
3
4 ----------------------------------------------------------------------
5 What is new in the alpha release of MPlib (0.10.0):
6 ----------------------------------------------------------------------
7
8 * The source is converted to cweb, and split into a library part
9   (mpdir/lib/*.w) and a frontend executable (mpdir/mpost.w).
10
11 * The front end executable is named "newmpost", this takes
12   care of configuring the MPlib library via C code, and uses
13   kpathsea for file searching. There is no change file involved, 
14   and the web2c runtime library is not used.
15
16 * Some of the internal arrays now grow dynamically when needed:
17
18   * the input buffer
19   * the string pool and number of strings
20   * the font memory and number of fonts
21   * the number of "readfrom" and "write" files
22   * the path segment size
23   * the input nesting stack
24   * the number of new internals
25   * the TFM writing arrays (but these are limited by TFM format)
26
27   Still not doing that (so these can only be changed in --ini mode):
28
29   * the main memory
30   * the hash size
31   * the number of simultaneous macro parameters
32   * the level of "input" file nesting
33
34 * The following command-line options are ignored by the front-end
35   command (for now):
36
37   -[no-]file-line-error
38   -halt-on-error
39   -output-directory=
40   -[no-]parse-first-line
41   -recorder
42   -translate-file=
43   -8bit
44   -T
45   
46   The other web2c command-line options should work as normal.
47
48 * the mpware tools are not in this distribution, their functionality
49   will eventually be assimilated into the frontend application.
50
51 * the build process depends on a local "ctangle" command being in the 
52   path, for now. The confiration and building system is not yet complete.
53
54 * API documentation is still missing, but the MetaPost input language 
55   has not changed.
56
57 ----------------------------------------------------------------------
58 What is new in version 1.002:
59 ----------------------------------------------------------------------
60
61 * Version 1.001 introduced a memory allocation error in mpto that could
62   result in the program looping endlessly
63
64 ----------------------------------------------------------------------
65 What is new in version 1.001:
66 ----------------------------------------------------------------------
67
68 * The default cmyk 'black' color now uses only black, not all four
69   ink colors (after a discussion on the mailing list).
70
71 * Some issues were reported with the new turningnumber algorithm,
72   all known problems are now fixed.
73
74 * Gábor Braun discovered that mpost did not always download the font
75   encodings into all the created output files.
76
77 * Akira Kakuto and Hartmut Henkel found some small issues in mpto
78   regarding trailing and leading whitespace.
79
80 * A fix for the 'Helvetica' entries in trfonts.map was provided by
81   Werner Lemberg, and Michail Vidiassov supplied two extra font 
82   entries for troff.map (Symbol and ZapfDingbats). Karl Berry
83   provided the new file troff-updmap.map, to be used by the updmap 
84   tool in texlive.
85
86 * Mpost now supports web2c's --output-directory option.
87
88 * Any warnings about missing fonts and characters are now always 
89   written to the terminal as well as to the log.
90
91 * Now that makempx is a C program, it needed a different install line
92   in build.sh. Also, Olaf Mersmann contributed a patch to recognize
93   'gmake' in build.sh
94
95 * Luigi Scarso found some typing errors in the web source that prevented
96   clean weaving of the source.
97
98 * Stephan Hennig fixed a number of problems in the manual (mpman.tex)
99   and the introduction paper (mpintro.tex). He also wrote new sections on 
100   how to preview metapost graphics and on how to use metapost graphics 
101   inside  other documents. On top of that, the manual is now hypertext-aware, 
102   and fixes for a whole series of small problems have been applied.
103
104 ----------------------------------------------------------------------
105 What is new in version 1.000:
106 ----------------------------------------------------------------------
107
108 *  The use of DSC (document structuring) comments has been
109    been cleaned up, thanks to comments by Michail Vidiassov.
110  
111 *  By setting prologues to 2 or 3, you can ask MetaPost to 
112    reencode and include the used labels fonts in the output,
113    thus creating proper Encapsulated PostScript files even
114    if labels are present.
115
116 *  Support for greyscale and cmykcolor models is added.
117
118 *  The new drawing options "withprescript" and withpostscript"
119    allow the user to attach PostSCript special text to a specific
120    drawing object.
121
122 *  Setting the new internal "mpprocset" to 1 will make MetaPost
123    create a somewhat extended preamble that defines shortcuts
124    for the postscript commands (e..g "l" instead of "lineto").
125    For big images, this can help shrink the output a bit.
126
127 *  The pool file is now integrated in the executable, so there
128    is not separate 'mp.pool' anymore, except at build time.
129
130 *  Groff support is redone, and dmp now uses kpathsea searching.
131    Groff related changes are thanks to the efforts of Werner 
132    Lemberg and Michail Vidiassov 
133
134 *  makempx is now a compiled executable on all systems,
135    thank you Akira Kakuto
136
137 *  The error for 'special's longer then 255 characters
138    is removed, so specials can now be of any length.
139
140 *  There is new turningnumber implementation that attempts
141    to find the mathematically correct "turningnumber" of a 
142    path. The formulae are derived from a mailinglist discussion
143    between (especially) Dan Luecking and Giuseppe Bilotta.
144
145 *  The manual is updated and modernized. It is currently 
146    maintained by Stephan Hennig and Troy Henderson.
147
148 ------------------------------------------------------------------
149 Changes in version 0.920:
150 ----------------------------------------------------------------------
151
152 *  Fixed a long-standing bug in web2c where changing values of the
153    memory_size setting in web2c could cause crashes and other random
154    problems. The memory array size is now written to the dump file
155    and loading is aborted if the values do not match.
156 *  Implement configurable figure output filename templates.
157 *  Implement cmyk, greyscale, and marking only color models.
158 *  The mpost executable is now version 0.920
159   
160 ----------------------------------------------------------------------
161 Changes in version 0.902:
162 ----------------------------------------------------------------------
163 *  Fix a bug in mpto resulting in correctly placed labels (with
164    thanks to Dan Luecking)
165 *  Fix a bug blocking compilation of dmp on MacOSX
166 *  The mpost,dmp,mpto executables are now version 0.902
167
168
169 ----------------------------------------------------------------------
170 Changes in version 0.901:
171 ----------------------------------------------------------------------
172 *  A corrected bugfix for bug item 3 from version 0.9 (the old fix
173    made metapost fail the trap test)
174 *  Included mpost.mp for mem generation
175 *  Updated the trap test output.
176 *  The mpost executable is now version 0.901
177
178 ----------------------------------------------------------------------
179 What is new in version 0.9:
180 ----------------------------------------------------------------------
181 1. There is a new internal quantity called mpversion that reports the 
182    current metapost version, and the version information is also written 
183    to the PostScript file.   
184 2. The LaTeX sources of the mpman, mpintro, and mpgraph manuals have
185    become part of the distribution package.
186 3. TEX.mp now has TeX format support through a pair of macros called 
187    TEXPRE() and TEXPOST(). This llows you to process the contents of 
188    the TEX() macro with, for example, LaTeX (instead of plain TeX).
189    An example is given in the manual.
190 4. metapost now writes a %%HiReSBoundingBox comment
191 5. The EPS output no longer contains actual spaces within PostScript 
192    strings as for example output by label("a space"), but their
193    octal escape (\040) instead.
194 6. The EPS output now also has a %%BeginProlog DSC comment
195    as well as %%EndProlog
196 7. The comments in the Web source have been changed to point out
197    that on modern machines, acquiring the random seed has actually
198    become a system-dependant operation (a granularity of whole seconds 
199    is not small enough on new machines).
200 8. The 'newer' command now accepts more than 2 arguments, testing
201    each of the files in turn.
202
203 ----------------------------------------------------------------------
204 Bugfixes in version 0.9:
205 ----------------------------------------------------------------------
206 1. Documentation improvements: all known errata and typos have been 
207    removed, better explanations of e.g. dash patterns and dotlabel have
208    been provided, and a number of omissions has been rectified.
209 2. The BoundingBox was not computed correctly when a filldraw command
210    with a noticeable pen size was used at the edge of the picture.
211 3. Paths starting with degenerate constructions like (0,0)--(0,0)--(0,0) 
212    could overflow memory.
213 4. The PostScript output could accidentally contain 8-bit characters 
214    within PostScript strings in previous versions because a test was
215    shared between terminal printing and PostScript printing.
216 5. A bug has been found in the assignment of serial numbers to independant
217    variables in metafont 2.71828. This bug affected MP as well, and the
218    same patch has been applied.
219 6. The turningnumber was sometimes wrong in unexpected ways. The new
220    implementation is still sometimes wrong (when there are strange path
221    segments involved), but in a much more predictable way: the new code
222    always draws straight lines between the actual points, and calculates 
223    the turningnumber based on that path instead of the actual path. The
224    effect is that cusps and loops within segments are now completely 
225    ignored. A more thorough fix of turningnumber is planned for the 
226    next release.
227 7. There was an 'off by one' error in dvitomp wrt. the interpretation
228    of virtual fonts.
229 8. mpto uses a new TeX macro for the generation of labels, making it
230    more robust wrt. strange user code within the actual label text.
231 9. A missing colon in boxes.mp has been added
232 10. A missing save in mfplain.mp has been added
233 11. The generisize in boxes.mp has been fixed so that it now accepts [[ as 
234     a valid variable name
235
236 ----------------------------------------------------------------------
237 Version 0.641:
238 ----------------------------------------------------------------------
239 The only change was to fix the code for transforming a picture that
240 contains a filldraw.  Version 0.64 introduced a bug that caused an
241 inappropriate memory reference in that case.
242
243 ----------------------------------------------------------------------
244 What is new in Version 0.64:
245 ----------------------------------------------------------------------
246 1. A new primitive command  closefrom filename  closes a readfrom file
247    so that subsequent calls to readfrom with that file name will go back
248    to the beginning of the file.
249 2. The ^^ notation for unprintable characters is now used only when printing
250    on the terminal or the log file.  Internal computations and the write
251    command are all 8-bit clean.  (This is partly due to material in mp.ch
252    that changes the initialization of the xchr array.  Without these
253    system-dependent changes, the write command would map all non-ascii
254    characters to spaces.)
255 3. Arithmetic overflow during a comparison such as  20000>-20000 is now
256    ignored.  This avoids extraneous error message when using the graph.mp
257    macro package.
258 4. Transformations with negative determinants now work properly on pictures
259    drawn with polygonal pens.
260 5. When the readfrom operator is applied to a file that does not exist,
261    an attempt to close a non-open file could cause problems in some
262    implementations.  This has now been fixed.
263 6. Using  draw picture_expression withpen  where the picture_expression
264    was a scaled picture containing dashed lines, the dash lengths would
265    change.  This bug has been fixed.
266 7. The dashpart operator could return an invalid picture or a picture that
267    is not properly scaled.  This has also been fixed.
268 8. The |char_base| variable could become negative when using fonts that
269    do not start at character 0.  There was also bad Pascal code in function
270    b_open_in.  This has all been fixed.
271 9. Dvitomp has been fixed to avoid a font data structure problem that
272    could cause some characters to come out in the wrong font when you
273    mix virtual and non-virtual fonts.
274 10. Dvitomp now correctly prints font names when there is a checksum
275    mismatch, and it aborts instead of just printing an error if a tfm
276    or vf file is bad.
277 11. In plain.mp, the drawdblarrow macro now uses filldraw so that it works
278    better with large pen sizes.
279
280 ----------------------------------------------------------------------
281 Version 0.632:
282 ----------------------------------------------------------------------
283 When prologues is negative, the output files use full precision for
284 coordinates in "%%BoundingBox" comments.  In btex..etex blocks,
285 "number too large" and "invalid character" errors are suppressed.
286 The result of btex..etex is now guaranteed to be in a setbounds path
287 so that a for...within iteration will always treat it as a unit.
288
289 There are also some obscure bug fixes involving string compaction when
290 scanning a file name or when mp is compiled in debug mode.  Some possible
291 identifier name conflicts and range check errors have also been fixed.
292
293
294 ----------------------------------------------------------------------
295 Version 0.631:
296 ----------------------------------------------------------------------
297 This version fixes an obscure bug that could cause certain perfectly valid
298 strings to be printed as "???" or " NONEXISTENT".  It also includes a minor
299 fix to the PATHEXPAND code that prevents running out of file descriptors.
300
301
302 ----------------------------------------------------------------------
303 What is new in Version 0.63:
304 ----------------------------------------------------------------------
305 1. Backslashes in the PostScript output are rendered correctly.  They used
306    to come out as (\) instead of (\\).
307 2. Recycling an independent variable should no longer cause spurious overflows.
308    (This bug was recently found in mf.web.)
309 3. Pythagorean addition should now be faster in certain trivial cases.
310 4. Rotating text by arbitrary angles should no longer cause bad PostScript
311    output.  The problem was that arguments to "fshow" could be inaccurate.
312 5. Obscure bugs inherited from mf.web are now fixed.  These involve
313    balancing parentheses showing on the terminal, reporting the correct
314    line number in case of buffer overflow, and removing spurious reference
315    counts that could effect end-of-job statistics.
316 6. Fonts with ec=255 should no longer cause mp's PostScript output routines
317    to go into a loop.
318 7. When mp's string mechanism was heavily used, file names could occaisonally
319    be printed on the terminal and log file as "(?)".  This has been fixed.
320 8. Setting PATHEXPAND in site.h causes mp, dvitomp and dmp to understand "//"
321    in path variables as "search multiple levels of subdirectories".  This is
322    for compatibility with recent versions of the Web2c TeX distribution.
323 9. A typo in mpware/makempx and mpware/troffmpx has been fixed.  Previous
324    versions of these scripts would not run on some systems.
325 10. Data files *.d have been added to the doc directory.  These are used by
326    doc/mpgraph.mp which generates figures for "Drawing Graphs with MetaPost".
327 11. Typos in mpintro.tex and mp.web's TeX material have been fixed.
328 12. Files examples.mp, mpintro.tex and mpintro.bib have moved from mplib to
329     the doc directory.
330 13. The author's email address now appears in the README file.
331
332
333 ----------------------------------------------------------------------
334 Macros added to the mplib directory between Versions 0.50 and 0.62:
335 ----------------------------------------------------------------------
336 rboxes.mp is a slightly more general version of boxes.mp
337 TEX.mp provides a way of running tex dynamically instead of as a pre-processor
338 graph.mp, format.mp, and sarith.mp are documented in doc/mpgraph.ps
339 (This is the same as ftp://netlib.att.com/netlib/att/cs/cstr/164.ps.Z)
340 marith.mp, string.mp, texnum.mp, and troffnum.mp are low-level packages
341 used by graph.mp, format.mp, and sarith.mp.
342
343
344 ----------------------------------------------------------------------
345 Other minor bug fixes subsequent to Version 0.60
346 ----------------------------------------------------------------------
347 1. plain.mp has been fixed so that the x**y works properly when x<0 and y is
348    a negative integer.
349 2. Programs mptotex.c and mptotr.c which extract btex..etex material have been
350    fixed so they work properly with input files that do not end with a newline
351    character.
352 3. Program dmp.c which handles troff output from btex..etex blocks has been
353    modified to avoid outputting any non-ASCII characters that the C function
354    isprint() accepts.
355 4. Program dmp.c no longer gets troff graphics specials confused with text.
356    This seldom matters because btex..etex blocks are unlikely to contain
357    troff graphics.
358 5. Pictures containing clipped subpictures could come out with some colors
359    in the subpicture wrong.
360 6. Colors in PostSript output were not being restricted to the standard 0..1
361    range.
362 7. Transforming a path or a pen should no longer generate extraneous overflow
363    errors in certain unusual situations.
364 8. Drawing with a degenerate 2-vertex polygonal pen such as penrazor should
365    no longer cause an infinite loop in certain unusual situations.
366 9. There were some bugs in the mfplain macros.  (These macros are designed
367    to similate plain METAFONT.)  The drawing and filling macros now apply
368    currenttransform to the path but not the pen rather than vice versa.
369    The predefined modes now set o_correction to 1.0.
370 10. For security reasons, mp can no longer read or write files whose names
371    begin with '.'
372
373
374 ----------------------------------------------------------------------
375 Changes to the MetaPost language between Version 0.50 and Version 0.60
376 ----------------------------------------------------------------------
377 1. New operator `readfrom <filename>' and new command
378    `write <string expression> to <filename>' do file I/O.  Plain defines
379    a special string EOF that readfrom returns to indicate end-of-file
380    and write..to understands as well.
381 2. New iteration type `for p within <picture expression>: <loop text> endfor'
382    iterates through the interior components of the picture.  An `interior
383    component' is a single pen stroke, filled outline, or piece of typeset
384    text.  A part of the picture enclosed in a clipping or setbounds path
385    also counts as an interior component.  If the whole picture is enclosed
386    in such a path, the for..within iteration looks inside.  Note that a
387    picture generated by btex..etex is enclosed in a setbounds path.
388 3. The length operator now applies to pictures.  It returns the number of
389    interior components.
390 4. New boolean operators stroked, filled, textual, clipped, bounded test
391    the first component of a picture.  A picture enclosed in a clipping or
392    setbounds path counts as a single component.
393 5. Part extraction operators now work for pictures.  Standard operators
394    redpart, greenpart, bluepart apply to the color of the first component
395    and xpart, ypart, xxpart, xypart, yxpart, yypart extract parts of the
396    tranformation that has been applied to a text component.  If `textual p'
397    is false, the transform components are all zero; if `clipped p' or
398    `bounded p' is true, the color parts are all zero.  Additional operators
399    fontpart, textpart, pathpart, penpart, dashpart extract other information
400    from the first component of a picture.  They all return null values when
401    the first component has the wrong type:  fontpart and textpart return
402    null strings; pathpart returns the path (0,0); penpart returns nullpen;
403    and dashpart returns nullpicture.
404 6. The construction `dashed nullpicture' is now a no-op.  It used to be
405    an error.
406 7. The clip and setbounds statements used to ignore operations on empty
407    pictures.  Now they do not.
408 8. Structuring comments in the PostScript output are now based on EPSF-3.0
409    as described in the 2nd Edition of the PostScript Reference Manual.
410    When prologues is 0, some structuring comments are included but the
411    output is not flagged a `conforming document'.  Previous versions of
412    MetaPost behaved similarly but used slightly different structuring
413    comments.
414 9. When warningcheck is 0, numeric tokens and results from the hex and
415    oct operators can be as large as 32767.99998.  The old limit of about
416    4096 applies only when warningcheck is positive.
417 10. Various optimizations should make the output a little more compact.
418 11. For PostScript engines that obey the scan-conversion rules documented
419    in the 2nd edition PostScript Language Reference Manual, hrules and
420    vrules in btex..etex blocks should now come out to exactly the right
421    number of pixels.  The change affects all pen strokes drawn in MetaPost
422    It is implemented via PostScripts dtransform and idtransform operators.
423 12. A bug involving setbounds and MetaPost's corner operators has been fixed.
424 13. Degenerate elliptical pens no longer cause PostScript to divide by zero.
425 14. Fixed a very obscure bug involving readstring and end-of-file.
426 15. String compaction statistics are now printed correctly when the job
427    terminates with tracingstats positive.
428
429
430
431 ----------------------------------------------------------------------
432 Changes to the source files between Version 0.50 and Version 0.60
433 ----------------------------------------------------------------------
434
435 CHANGES to ./README.MP
436 The installation instructions should now be clearer.  They also explain
437 how to cope with verious versions of WEB2C.
438
439 CHANGES to ./site.h
440 I removed unused entries and clarified instructions in commentary material.
441 Confusing comments about possibly merging it with the WEB2C version of site.h
442 were removed--I think such merging is a bad idea.
443
444 CHANGES TO ./Makefile, mp/Makefile, mpware/Makefile:
445 Improved default settings, simplified the `install' recipe,
446 fixed a few missing depencies, portability problems, etc.
447
448 RENAMED FILES
449    mp/mp.defines, mpware/mpware.defines, mpware/dvitompext.c
450 TO mp/mp.def,     mpware/mpware.def,     mpware/dvimpext.c
451 (The names also changed in the Makefiles and convert scripts)
452
453 CHANGES TO mp/mp.web, mp/mp.ch, mp/mp.def, mp/mpext.c:
454 Lots of new features were added as noted above.  The only new system-
455 dependencies are for `readfrom' and `write...to'.
456 The change file now increases max_read_files; it doesn't bother with
457 max_write_files, but perhaps it should.  There is a new change entitled
458 "Path selector for..readfrom file".  From the web2C sources I borrowed
459 a change "`logname' is declared in <unistd.h> in some systems".  I also
460 added a PASCAL-like eof() routine to mpext, removed a change entitled
461 "avoid using eof() in read_psname_table" and added a new change
462 "[48.1199] `eof'...[in read_mem_file]".
463
464 Reorganization of math routines in the mp directory:
465 I moved the floating-point math routines from mpext.c to mpath.c.  A
466 C-language version of the standard math routines was moved from mpmath.c
467 to a new file pmath.c for use in mathtest only.  This required chages to
468 mathtest.c and time.c (also used only for mathtest).  The point of all
469 this is that there is now just one copy of the floating-point math routines
470 and it is used for mathtest and (optionally) for mp itself.
471
472 Routines in doc and mp/trapdir:
473 The output was updated to Version 0.60.  Another test file mptrap.mp
474 tests new features.  There have also been minor updates to the manual,
475 although the new features for Version 0.60 are not included yet.
476
477 CHANGES to macros in mplib:
478 A minor change to boxes.mp should make it more robust.  Changed default
479 setting of tracinglostchars in mfplain.mp and plain.mp.  Added a string
480 constant EOF to plain.mp for use with readfrom and write..to.
481 Changed mproof.tex to make it more portable as suggested by Knuth.
482
483 CHANGES to mpware/dvitomp.web, mpware/dvitomp.ch:
484 The web file was changed to output rules as horizontal or vertical
485 penstrokes with butt endcaps.  This also affected dvitomp.ch.  Also in
486 dvitomp.ch, put terminal output on stdout instead of stderr and require
487 the output file to be given on the command line.
488
489 CHANGES to mpware/makempx, mpware/troffmpx:
490 Added comments explaining what path names need fixing.  Portability improvements
491 and dvitomp's output change affect makempx only.
492
493 CHANGES to mpware/mptotex.c mpware/mptotr.c mpware/testex.err mpware/testex.mp:
494 Ignore an initial newline in the TeX (or troff) material to avoid generating
495 a blank line in the output file.  The test file now covers this case.
496
497 CHANGE to mpware/newer.c
498 Minor changes to make it compile in strict ANSI/POSIX environments.