Date: 25 Nov 87 Message No: 001 To: TeX implementors and distributors From: Barbara Beeton Subject: First informational message from the early-warning system Below is an extract from Knuth's TeX82.BUG file dated 17 Nov 87, 15:03. This includes changes from version 2.2 - 2.7 inclusive. Note that this file contains only essential changes to program code. Some trivial code changes and most changes to documentation are not included in this list. Most appear in the ERRATA.TeX file, but that is not the easiest source of information to use when updating a .WEB file. I have used the TOPS-20 program SRCCOM to generate a differences list between Knuth's version 2.7 file and a version 2.0 file received on a distribution tape. If you would like a copy, let me know; it is about 31Kbytes -- too big to want to include in a general message, but well able to be sent out on request. I understand that corrected pages of volumes B, C and D of C&T have been sent to Addison-Wesley, so revised editions should be appearing in a few months. The latest version of Knuth's errata list is dated 18 Nov 87; it contains only changes since 15 Jun 87, and is about 9Kbytes. This too will be sent to anyone requesting it. Future messages will assume that TeX version 2.7 is the baseline version. Here is the summary from TeX.WEB describing the nature of the changes. % Version 2.1 corrects anomalies in discretionary breaks (January 1987). % Version 2.2 corrects "(Please type...)" with null \endlinechar (April 1987). % Version 2.3 avoids incomplete page in premature termination (August 1987). % Version 2.4 fixes \noaligned rules in indented displays (August 1987). % Version 2.5 saves cur_order when expanding tokens (September 1987). % Version 2.6 adds 10sp slop when shipping leaders (November 1987). % Version 2.7 improves rounding of negative-width characters (November 1987). % A reward of $40.96 will be paid to the first finder of any remaining bug. % (This amount will double again in 1988.) ************************************************************************ *** Version 2.1 was released on January 26, 1987. 326. Removal of redundant code (found by Pat Monardo, 5 Feb 87) @x module 1224 [this change need not be made, since it has no effect] char_def_code: define(p,char_given,cur_val); math_char_def_code: define(p,math_given,cur_val); @y the cases cannot occur, so we simply don't list them @z 327. More robustness is needed when debugging (Ronaldo Am\'a, 14 Apr 87) @x module 174 begin while p>null do @y maybe mem_min>null (but nodes shouldn't be put in location mem_min exactly) begin while p>mem_min do @z @x module 182 @p procedure show_node_list(@!p:pointer); {prints a node list symbolically} @y @p procedure show_node_list(@!p:integer); {prints a node list symbolically} @z @x module 182, continued while p>null do @y while p>mem_min do @z 328. Storage allocation can be more elegant and efficient (4/21/87) @x module 127 if r=p then if ((rlink(p)<>rover) or (llink(p)<>rover)) then @y if r=p then if rlink(p)<>p then @z 329. Miscalculation of empty-line condition (April 22, 1987) @x module 360 begin if limit=start then {previous line was empty} @y begin if (end_line_char<0)or(end_line_char>127) then incr(limit); if limit=start then {previous line was empty} @z 330. A case where we don't have to assume system bookkeeping (April 28, 1987) @x module 560 done: b_close(tfm_file); read_font_info:=g; @y [suggested by Jim Sterken] done: if file_opened then b_close(tfm_file); read_font_info:=g; @z [this was not a bug, according to the comment in module 28] 331. jump_out must fix unfinished output (Found by Klaus Gunterman, 3 Aug 87) @x module 593 doing_leaders:=false; dead_cycles:=0; @y doing_leaders:=false; dead_cycles:=0; cur_s:=-1; @z @x module 617 cur_s:=-1; ensure_dvi_open; @y ensure_dvi_open; @z @x module 640 dvi_out(eop); incr(total_pages); @y dvi_out(eop); incr(total_pages); cur_s:=-1; @z @x module 642 if total_pages=0 then print_nl("No pages of output.") @y while cur_s>-1 do begin if cur_s>0 then dvi_out(pop) else begin dvi_out(eop); incr(total_pages); end; decr(cur_s); end; if total_pages=0 then print_nl("No pages of output.") @z 332. \hangindent=1pt$$\halign{...\cr\noalign{\hrule}}$$ problem (19 Aug 87) @x module 805 q:=link(head); @y q:=link(head); s:=head; @z @x module 805, continued q:=link(q); @y s:=q; q:=link(q); @z @x module 806 if is_running(depth(q)) then depth(q):=depth(p); @y if is_running(depth(q)) then depth(q):=depth(p); if o<>0 then begin r:=link(q); link(q):=null; q:=hpack(q,natural); shift_amount(q):=o; link(q):=r; link(s):=q; end; @z 333. \hskip 0pt plus 1fil\ifdim problem (found by Alan Guth, 20 Aug 87) @x module 366 @!cvl_backup,@!radix_backup:small_number; {to save |cur_val_level| and |radix|} @y @!cvl_backup,@!radix_backup,@!co_backup:small_number; {to save |cur_val_level|, etc.} @z @x backup_backup:=link(backup_head); @y co_backup:=cur_order; backup_backup:=link(backup_head); @z @x link(backup_head):=backup_backup; @y cur_order:=co_backup; link(backup_head):=backup_backup; @z 334. leaders too sensitive near exact multiples (M. F. Bridgland, 9 Nov 87) @x module 626 begin edge:=cur_h+rule_wd; lx:=0; @y begin rule_wd:=rule_wd+10; {compensate for floating-point rounding} edge:=cur_h+rule_wd; lx:=0; @z @x ibid cur_h:=edge; goto next_p; @y cur_h:=edge-10; goto next_p; @z @x module 635 begin edge:=cur_v+rule_ht; lx:=0; @y begin rule_ht:=rule_ht+10; {compensate for floating-point rounding} edge:=cur_v+rule_ht; lx:=0; @z @x ibid cur_v:=edge; goto next_p; @y cur_v:=edge-10; goto next_p; @z 335. Glitch in fixed-point multiplication of negatives (W.G. Sullivan, 17Nov87) @x module 572 begin alpha:=16*z; beta:=16; while z>=@'40000000 do begin z:=z div 2; beta:=beta div 2; end; @y begin alpha:=16; while z>=@'40000000 do begin z:=z div 2; alpha:=alpha+alpha; end; beta:=256 div alpha; alpha:=alpha*z; @z 336. (I sincerely hope that there won't be any more) -------