Date: 14 Nov 88 Message No: 009 To: TeX implementors and distributors From: Barbara Beeton Subject: TeX 2.94, Metafont 1.6, Plain 2.94 Earlier this month I received a message from Don Knuth announcing a new bug. This bug affects both TeX and Metafont: Tim Morgan (UC Irvine) found a scenario in which open_log_file can call fatal_error, contrary to what I believed when I wrote the code. (This happens only if TeX cannot open the log file AND the user then types control-Z instead of giving a new name, on some systems!) This is NOT a bug for anybody to worry about, so it's not important for implementors to get into version 2.94 with any hurry; .... Another bug in Metafont, and a font problem that resulted in a change to PLAIN.TeX: Chris Thompson found a bug in good.top and good.bot, which I'm now fixing. Also, Lyle Ramshaw noticed something strange about commas and periods in CM fonts, .... The details: (There are two small and identical changes to [both TeX and MF], affecting only cases of fatal errors; some errors are not now so disastrous.) Most users of previous versions have nothing to fear. Here's what happened: If TeX couldn't open a log file, there were three cases: 1) **\batchmode\read-1 to\next for example, when a fatal_error (in this case trying to read from the terminal during batchmode) occurs in batchmode or nonstopmode; TeX gave a message on the terminal and died. That was working as I intended. 2) **\batchmode % for example, when TeX tries to open the log file at the end of the first line and can't but is in batchmode. I had intended for this to give a message on the terminal, but TeX just died. In version 2.94, TeX explains its dilemma before dying. 3) **\relax % for example, when TeX tries to open the log file at the end of the first line and can't, but is in scrollmode or errorstopmode. Then it prompts for an alternative log file name. In version 2.93, if you now typed EOF (control Z I guess?), TeX got confused and tried to write on an unopened log file. (There's no way to get EOF on the terminal in the Pascal I use at SAIL, so I never was able to test this case.) In version 2.94, any EOF typed in response to a prompt is now ignored, while previously it was a fatal error. [In all of these you have to do something else that makes it impossible for TeX to open the file texput.log. For example, I had another job editing texput.log when I did these tests.] The change to plain.tex was in the definition of \ldotp: That control sequence used to take the dot (i.e. period) from family 0, but now it uses family 1. Reason: There's no difference at all except in sub/superscripts; but in the latter the periods are slightly wider in family 1 (fonts cmmi7 and cmmi5) than in family 0 (fonts cmr7 and cmr5). [The letter_fit parameter causes this, somewhat to my surprise.] Commas always come from family 1. Thus in a subscript like $a_{1,\ldots,n}$, the commas used to be slightly wider than the dots, because they came from the family with the bigger letter_fit. With the new plain (\fmtversion=2.94) the commas and dots are equally wide. It was a difference of about 1/7 of a point, but that was enough to confuse some drivers at low resolution; Lyle Ramshaw tells me he's been using such subscripts a lot, and getting better results with the new definition. In sub-subscripts the effect would be even more noticeable than in subscripts. Below you will find the new additions to TeX82.BUG, a comparison between the TeX.WEB files for versions "2.93b" and 2.94, additions to MF84.BUG, a comparison between MF.WEB files for versions 1.5 and 1.6, additions to ERRATA.TeX, and differences in PLAIN.TeX. There are also changes to TRIP.* and TRAP.*, which will be dealt with in later messages. (I still haven't figured out any reliable method of sending the TR*P.LOG files in mail, but I continue to think very hard about the problem.) All relevant files are now up to date at SCORE. As usual, please acknowledge your receipt of this message. We're migrating from a DECsystem-20 to a VAX, and this is the first time I've tried mailing to a list from the VAX. It will be reassuring to hear from you that the system is working. ######################################################################## Additions to TeX82.BUG (and some changes) ;COMPARISON OF PS:TEX82.BUG.12 AND PS:TEX82.BUG.3 ;OPTIONS ARE /E /3 **** FILE PS:TEX82.BUG.12, 2-16 (2676) 10. Module 857 line -5 (bug discovered 10/8/92 by HWT) change it to: if h>0 then decr(h) else h:=trie_op_hash_size; **** FILE PS:TEX82.BUG.3, 2-16 (2676) 10. Module 857 line -5 (bug discovered 10/8/82 by HWT) change it to: if h>0 then decr(h) else h:=trie_op_hash_size; *************** **** FILE PS:TEX82.BUG.12, 16-115 (78620) 255. Bug in \xleader computations (found by FY, August 18) @x in module 592 @!lq,@!lr,@!lx:integer; {quantities used in calculations for leaders} @y @!lq,@!lr:integer; {quantities used in calculations for leaders} @z **** FILE PS:TEX82.BUG.3, 16-115 (78620) 255. Bug in \xleader computations (found by FY, August 18) @x in module 592 @!lq,@!lr:integer; {quantities used in calculations for leaders} @y @!lq,@!lr,@!lx:integer; {quantities used in calculations for leaders} @z *************** **** FILE PS:TEX82.BUG.12, 21-417 (170719) 344. Avoid negative divisor rounding upward (Chris Thompson, fixed 19Jun88) @x module 126 **** FILE PS:TEX82.BUG.3, 21-417 (170719) 344. Avoid negative dividend rounding upward (Chris Thompson, fixed 19Jun88) @x module 126 *************** **** FILE PS:TEX82.BUG.12, 21-438 (171397) 347. (I sincerely hope that there won't be any more) * Possibly nice ideas that will not be implemented **** FILE PS:TEX82.BUG.3, 21-438 (171398) 347. Avoid fatal_error after terminal eof (Tim Morgan, reported 25Oct88) @x module 71 [serious problem occurred if this was called in open_log_file] if not input_ln(term_in,true) then fatal_error("End of file on the terminal!"); @y if not input_ln(term_in,true) then t_open_in; @z 348. Force terminal output when open_log_file aborts (6Nov88) @x module 535 begin print_err("I can't write on file `"); @y begin selector:=term_only; print_err("I can't write on file `"); @z 349. (I sincerely hope that there won't be any more) * Possibly nice ideas that will not be implemented *************** ######################################################################## Differences between TeX.WEB for "2.93b" and for 2.94 ;COMPARISON OF PS:TEX.WEB.9 AND PS:TEX.WEB.10 ;OPTIONS ARE /E /3 **** FILE PS:TEX.WEB.9, 1-32 (2103) % A reward of $81.92 will be paid to the first finder of any remaining bug. **** FILE PS:TEX.WEB.10, 1-31 (2101) % Version 2.94 keeps open_log_file from calling fatal_error (November 1988). % A reward of $81.92 will be paid to the first finder of any remaining bug. *************** **** FILE PS:TEX.WEB.9, 1-171 (9288) @d banner=='This is TeX, Version 2.93' {printed when \TeX\ starts} @ Different \PASCAL s have slightly different conventions, and the present **** FILE PS:TEX.WEB.10, 2-93 (9365) @d banner=='This is TeX, Version 2.94' {printed when \TeX\ starts} @ Different \PASCAL s have slightly different conventions, and the present *************** **** FILE PS:TEX.WEB.9, 1-1639 (72545) if not input_ln(term_in,true) then fatal_error("End of file on the terminal!"); @.End of file on the terminal@> **** FILE PS:TEX.WEB.10, 6-329 (72618) if not input_ln(term_in,true) then t_open_in; @.End of file on the terminal@> *************** **** FILE PS:TEX.WEB.9, 1-1964 (85573) The normal idea of |batch_mode| is that nothing at all should be written on the terminal. However, in the unusual case that a fatal error has occurred but no log file could be opened, we make an exception and allow an explanatory message to be seen. @p procedure normalize_selector; **** FILE PS:TEX.WEB.10, 7-318 (85611) @p procedure normalize_selector; *************** **** FILE PS:TEX.WEB.9, 1-10092 (434017) Incidentally, the program always refers to the log file as a `\.{transcript **** FILE PS:TEX.WEB.10, 30-416 (433776) The normal idea of |batch_mode| is that nothing at all should be written on the terminal. However, in the unusual case that no log file could be opened, we make an exception and allow an explanatory message to be seen. Incidentally, the program always refers to the log file as a `\.{transcript *************** **** FILE PS:TEX.WEB.9, 1-10098 (434283) begin print_err("I can't write on file `"); @.I can't write on file x@> **** FILE PS:TEX.WEB.10, 30-427 (434267) begin selector:=term_only; print_err("I can't write on file `"); @.I can't write on file x@> *************** ######################################################################## Additions to MF84.BUG 544. Avoid fatal_error after terminal eof (Tim Morgan, reported 25Oct88) @x module 66 [serious problem occurred if this was called in open_log_file] if not input_ln(term_in,true) then fatal_error("End of file on the terminal!"); @y if not input_ln(term_in,true) then t_open_in; @z 545. Force terminal output when open_log_file aborts (6Nov88) @x module 789 begin print_err("I can't write on file `"); @y begin selector:=term_only; print_err("I can't write on file `"); @z 546. (I sincerely hope that there won't be any more) ######################################################################## Differences between MF.WEB for 1.5 and for 1.6 ;COMPARISON OF PS:MF.WEB.4 AND PS:MF.WEB.1 ;OPTIONS ARE /E /3 **** FILE PS:MF.WEB.4, 1-8 (453) % METAFONT is a tradement of Addison-Wesley Publishing Company. % Version 0 was completed on July 28, 1984. **** FILE PS:MF.WEB.1, 1-8 (453) % METAFONT is a trademark of Addison-Wesley Publishing Company. % Version 0 was completed on July 28, 1984. *************** **** FILE PS:MF.WEB.4, 1-17 (1016) % A few "harmless" optimizations have been made without changing versions. **** FILE PS:MF.WEB.1, 1-17 (1016) % Version 1.6 keeps open_log_file from calling fatal_error (November 1988). % A few "harmless" optimizations have been made without changing versions. *************** **** FILE PS:MF.WEB.4, 2-81 (7668) @d banner=='This is METAFONT, Version 1.5' {printed when \MF\ starts} @ Different \PASCAL s have slightly different conventions, and the present **** FILE PS:MF.WEB.1, 2-81 (7745) @d banner=='This is METAFONT, Version 1.6' {printed when \MF\ starts} @ Different \PASCAL s have slightly different conventions, and the present *************** **** FILE PS:MF.WEB.4, 6-235 (67459) if not input_ln(term_in,true) then fatal_error("End of file on the terminal!"); @.End of file on the terminal@> **** FILE PS:MF.WEB.1, 6-235 (67536) if not input_ln(term_in,true) then t_open_in; @.End of file on the terminal@> *************** **** FILE PS:MF.WEB.4, 7-323 (80684) The normal idea of |batch_mode| is that nothing at all should be written on the terminal. However, in the unusual case that a fatal error has occurred but no log file could be opened, we make an exception and allow an explanatory message to be seen. @p procedure normalize_selector; **** FILE PS:MF.WEB.1, 7-323 (80727) @p procedure normalize_selector; *************** **** FILE PS:MF.WEB.4, 11-190 (139040) else t:=lo_mem_max+1+(hi_mem_min-lo_mem_max)div 2; {|lo_mem_max+2<=tmem_min+max_halfword then t:=mem_min+max_halfword; **** FILE PS:MF.WEB.1, 11-190 (138827) else t:=lo_mem_max+1+(hi_mem_min-lo_mem_max) div 2; {|lo_mem_max+2<=tmem_min+max_halfword then t:=mem_min+max_halfword; *************** **** FILE PS:MF.WEB.4, 39-402 (654836) Incidentally, the program always refers to the log file as a `\.{transcript **** FILE PS:MF.WEB.1, 39-402 (654627) The normal idea of |batch_mode| is that nothing at all should be written on the terminal. However, in the unusual case that no log file could be opened, we make an exception and allow an explanatory message to be seen. Incidentally, the program always refers to the log file as a `\.{transcript *************** **** FILE PS:MF.WEB.4, 39-408 (655102) begin print_err("I can't write on file `"); @.I can't write on file x@> **** FILE PS:MF.WEB.1, 39-413 (655118) begin selector:=term_only; print_err("I can't write on file `"); @.I can't write on file x@> *************** ######################################################################## Extracts from ERRATA.TeX (differences as compared with previous version) ;COMPARISON OF PS:ERRATA.TEX.14 AND PS:ERRATA.NEW.1 ;OPTIONS ARE /E /3 **** FILE PS:ERRATA.TEX.14, 1-40 (1480) of the books. % volume A **** FILE PS:ERRATA.NEW.1, 1-40 (1480) of the books. Some of these corrections affect the indexes and mini-indexes of Volumes B~and~D in ways not shown here. % volume A *************** **** FILE PS:ERRATA.TEX.14, 2-25 (2074) \bugonpage A359, lines 35--38 (5/24/88) **** FILE PS:ERRATA.NEW.1, 2-25 (2180) \bugonpage A359, line 2 (11/6/88) \ninepoint\noindent |\mathchardef\ldotp="613A\mathchardef\cdotp="6201\mathchardef\colon="603A| \bugonpage A359, lines 35--38 (5/24/88) *************** **** FILE PS:ERRATA.TEX.14, 2-36 (2501) \bugonpage A364, line 35 (5/24/88) \ninepoint\noindent |\def\fmtname{plain}\def\fmtversion{2.92} % identifies the current format| \bugonpage A379, line 15 (10/12/87) **** FILE PS:ERRATA.NEW.1, 2-41 (2743) \bugonpage A364, line 35 (11/6/88) \ninepoint\noindent |\def\fmtname{plain}\def\fmtversion{2.94} % identifies the current format| \bugonpage A379, line 15 (10/12/87) *************** **** FILE PS:ERRATA.TEX.14, 3-6 (4791) \bugonpage B2, line 32 (6/19/88) \ninepoint\noindent\hskip10pt {\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% {\tt This\]is\]TeX,\]Version\]2.93\char'23}\quad $\{\,$printed when \TeX\ starts$\,\}$ \bugonpage B52, line 5 (8/13/87) **** FILE PS:ERRATA.NEW.1, 3-6 (5033) \bugonpage B2, line 32 (11/6/88) \ninepoint\noindent\hskip10pt {\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% {\tt This\]is\]TeX,\]Version\]2.94\char'23}\quad $\{\,$printed when \TeX\ starts$\,\}$ \bugonpage B30, line 3 from the bottom (11/6/88) \ninepoint\noindent\hskip10pt {\bf if} $\lnot\\{input\_ln}(\\{term\_in},\\{true})$ {\bf then} \\{t\_open\_in}; \bugonpage B38, lines 7--9 from the bottom (11/6/88) \tenpoint\noindent[Delete this paragraph; it is being moved to page B214.] \bugonpage B52, line 5 (8/13/87) *************** **** FILE PS:ERRATA.TEX.14, 3-25 (5413) \mathbin{\bf div}2$;\quad $\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$ **** FILE PS:ERRATA.NEW.1, 3-35 (5958) \,\mathbin{\bf div}\,2$;\quad\kern-4pt $\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$ *************** **** FILE PS:ERRATA.TEX.14, 3-118 (8460) $\\{cur\_val\_level{\gets\\{int\_val}; \ $\\{radix}\gets0$; \ **** FILE PS:ERRATA.NEW.1, 3-128 (9018) $\\{cur\_val\_level}\gets\\{int\_val}$; \ $\\{radix}\gets0$; \ *************** **** FILE PS:ERRATA.TEX.14, 3-183 (10577) \bugonpage B224, second-last line (4/28/87) **** FILE PS:ERRATA.NEW.1, 3-193 (11136) \bugonpage B214, new paragraph after line 3 (11/6/88) \tenpoint\noindent\hskip10pt The normal idea of \\{batch\_mode} is that nothing at all should be written on the terminal. However, in the unusual case that no log file could be opened, we make an exception and allow an explanatory message to be seen. \bugonpage B214, lines 8--9 (11/6/88) \ninepoint\noindent\hskip20pt {\bf begin} $\\{selector}\gets\\{term\_only}$; \ \\{print\_err}({\tt\char`\"I\]can't\]write\]on\]file\]`\char`\"});\par \noindent\hskip20pt \\{print\_file\_name}$(\\{cur\_name},\\{cur\_area},\\{cur\_ext})$; \ \\{print}({\tt\char`\"'.\char`\"}); \bugonpage B224, second-last line (4/28/87) *************** **** FILE PS:ERRATA.TEX.14, 4-34 (18563) \bugonpage C331, just below the illustration (7/18/87) **** FILE PS:ERRATA.NEW.1, 4-34 (19764) \bugonpage C262, line 15 (11/6/88) \ninepoint\noindent |string base_name, base_version; base_name="plain"; base_version="1.6";| \bugonpage C273, lines 20 and 22 (9/26/88) \ninepoint\noindent | (z_+(0,pen_top))t_=round((z+(0,pen_top))t_); z_ enddef;|\par\noindent | (z_+(0,pen_bot))t_=round((z+(0,pen_bot))t_); z_ enddef;| \bugonpage C331, just below the illustration (7/18/87) *************** **** FILE PS:ERRATA.TEX.14, 5-6 (19368) \bugonpage D2, line 27 (6/20/88) \ninepoint\noindent\hskip10pt {\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% {\tt This\]is\]METAFONT,\]Version\]1.5\char'23}\quad $\{\,$printed when \MF\ starts$\,\}$ \bugonpage D66, lines 34--35 (7/9/88) **** FILE PS:ERRATA.NEW.1, 5-6 (20908) \bugonpage D2, line 27 (11/6/88) \ninepoint\noindent\hskip10pt {\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$% {\tt This\]is\]METAFONT,\]Version\]1.6\char'23}\quad $\{\,$printed when \MF\ starts$\,\}$ \bugonpage D28, line 7 from the bottom (11/6/88) \ninepoint\noindent\hskip10pt {\bf if} $\lnot\\{input\_ln}(\\{term\_in},\\{true})$ {\bf then} \\{t\_open\_in}; \bugonpage D36, lines 3--5 (11/6/88) \tenpoint\noindent[Delete this paragraph; it is being moved to page D349.] \bugonpage D66, lines 34--35 (7/9/88) *************** **** FILE PS:ERRATA.TEX.14, 5-19 (19852) \mathbin{\bf div}2$;\quad $\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$ \bugonpage D420, bottom line (5/25/88) **** FILE PS:ERRATA.NEW.1, 5-29 (21679) \,\mathbin{\bf div}\,2$;\quad\kern-4pt $\{\,\\{lo\_mem\_max}+2\le t<\\{hi\_mem\_min}\,\}$ \bugonpage D349, new paragraph after line 7 (11/6/88) \tenpoint\noindent\hskip10pt The normal idea of \\{batch\_mode} is that nothing at all should be written on the terminal. However, in the unusual case that no log file could be opened, we make an exception and allow an explanatory message to be seen. \bugonpage D349, lines 12--13 (11/6/88) \ninepoint\noindent\hskip20pt {\bf begin} $\\{selector}\gets\\{term\_only}$; \ \\{print\_err}({\tt\char`\"I\]can't\]write\]on\]file\]`\char`\"});\par \noindent\hskip20pt \\{print\_file\_name}$(\\{cur\_name},\\{cur\_area},\\{cur\_ext})$; \ \\{print}({\tt\char`\"'.\char`\"}); \bugonpage D420, bottom line (5/25/88) *************** **** FILE PS:ERRATA.TEX.14, 6-11 (20853) \bugonpage E285, bottom line (12/1/87) **** FILE PS:ERRATA.NEW.1, 6-11 (23337) \bugonpage E111, line 29 (10/16/88) \ninepoint\noindent $\\{lft}\,x_{11}={\rm hround}\,u$; \ $x_{1l}-x_{11}=x_{2l}-x_{12}=x_{22}-x_{2r}={\rm hround}\,1.6\\{cap\_jut}$; \bugonpage E285, bottom line (12/1/87) *************** **** FILE PS:ERRATA.TEX.14, 6-44 (21846) \bugonpage E550, new line after line 23 (8/15/87) **** FILE PS:ERRATA.NEW.1, 6-50 (24507) \bugonpage E487, line 17 (8/4/88) \ninepoint\line{% {\bf fill} \\{fullcircle} scaled$\,(\\{bold}+3.8\\{dw}+\\{eps})\,$% shifted$\,(.5[z_4,z_8])$;\hfill\% dot} \smallskip\noindent[Also remove page 487 from the index entry for \\{dot\_size}, and add it to the entries for \\{bold} and \\{dw}.] \bugonpage E550, new line after line 23 (8/15/87) *************** ######################################################################## Differences between PLAIN.TeX 2.92 and 2.94 ;COMPARISON OF PS:PLAIN.TEX.2 AND PS:PLAIN.TEX.1 ;OPTIONS ARE /3 **** FILE PS:PLAIN.TEX.2, 6-204 (31411) \mathchardef\ldotp="602E % ldot as a punctuation mark **** FILE PS:PLAIN.TEX.1, 6-204 (31411) \mathchardef\ldotp="613A % ldot as a punctuation mark *************** **** FILE PS:PLAIN.TEX.2, 8-22 (44482) \def\fmtname{plain}\def\fmtversion{2.92} % identifies the current format **** FILE PS:PLAIN.TEX.1, 8-22 (44482) \def\fmtname{plain}\def\fmtversion{2.94} % identifies the current format *************** ######################################################################## [ end of message 009 ] -------