Date: 7 Jan 89 Message No: 012 To: TeX implementors and distributors From: Barbara Beeton Subject: more errata; corrections to TEX82.BUG and CM changes Don Knuth says people still read those books and still find mistakes! I just added errata for pages A383 and C271. Page A383 should have been updated when I made TeX version 1.3 in 1985! Changes to ERRATA.TEX are included below. A small correction has been made to TEX82.BUG in a very old change; it affects only documentation, and corrects a module number. Chris Thompson has informed me that some lines in the difference list for SYMBOL.MF were corrupted. I believe that all of these were in the final context lines, so anyone who has tried to apply the changes by hand has probably been able to get a correct file. Nonetheless, the correct difference list is given below. (The discrepancies are due to a glitch in the software used to transfer the difference files from a DEC-20 to a VAX/VMS. I knew this was a problem, and checked all the difference files accordingly, or so I thought. This one slipped through somehow. Apologies.) After contemplating the nature of the last two bug fixes to TeX and MF, I have decided that a cumulative list of differences might be useful to anyone who may have delayed installing the changes conveyed in these messages. The following cumulative difference lists now exist, and I will be happy to send one or more of them to anyone who sends me a specific request. TeX 2.0 (Dec 86) through 2.7 (Nov 87) TeX 2.7 (Nov 87) through 2.95 (Dec 88) MF 1.3 (Dec 86) through 1.7 (Dec 88) When I communicated the changes for TANGLE 2.9 in message 11, I failed to include Knuth's explanation. Here it is. At the suggestion of Wayne Sewell, who is writing a book about WEB, I've removed a restriction: One can now use a nonnumeric macro before declaring it. (The old documentation for section 59 of TANGLE mentioned that this restriction wasn't really necessary. I've finally eliminated it, because Wayne found it a hassle, and I wanted to reward him for all his hard work. The only change, except to version number and documentation, is to insert `if t=numeric then' before the first err_print in section 59. The only change as far as users go is that some programs that used to give error messages will now run without error. Programmers who use a macro before declaring it may get a spurious warning about conflict between identifiers with the same first six letters; TANGLE won't know that certain identifiers will later become macros. The changes to TANGLE precipitated some changes in the WEB manual. Those changes are listed below. In response to an inquiry for suggestions on how the TRIP and TRAP LOG files might safely be sent across unpredictable gateways, I was sent two small C programs, one to hexify files and the other to unhex them. Here is the description and a warning that came with the code: The C programs hex.c and unhex.c translate between 8-bit binary files and straight hex files, in which every pair of hexadecimal digits corresponds to a single 8-bit byte. Certain files in the Kermit distribution are in this format. You can recognize them because they contain only the characters 0-9 and A-F -- no colons or other characters. Warning - HEX.C doesn't work under Microsoft C on the IBM PC family: getchar() returns EOF (-1) whenever it reads a 0xFF byte from the input file. Seems like a bug in MSC... Since everything is an int, there shouldn't be any sign extension going on. Boo. Testing with feof() wouldn't help either, because getchar() buffers ahead. Maybe use single-character read()? This seems the most promising method I've heard about so far. I doubt very much that any 0xFF bytes will occur in the LOG files, so that doesn't seem a problem. I plan to test this out, and if I can succeed in making it work here, the next message will include the C code, and then I will begin to send out the long-awaited TRIP and TRAP. If anyone believes they would have a problem with this technique, please let me know; on the other hand, if anyone has another reasonable suggestion, I'd like to hear that too. I was notified by my system administrator that at least two copies of the last message failed to be sent, but the addresses were scrambled and there was no way to identify the intended recipients. If you have missed any messages, please let me know, and also acknowledge receipt of this one. I will be out of town from Jan 13-30, and I will try, after I return, to query anyone from whom I haven't received a reply. (TRIP and TRAP will also have to wait until after I return, but I hope finally to be able to take care of them quickly then.) ######################################################################## Extracts from ERRATA.TeX (differences as compared with previous version) ;COMPARISON OF PS:ERRATA.TEX.18 AND PS:ERRATA.NEW.2 ;OPTIONS ARE /E /3 **** FILE PS:ERRATA.TEX.18, 2-51 (2996) \bugonpage A454, lines 23--29 (8/13/87) **** FILE PS:ERRATA.NEW.2, 2-51 (2996) \bugonpage A383, lines 7--15 from the bottom (1/4/89) \begintt 209 strings out of 1685 1659 string characters out of 17636 27618 words of memory out of 52821 1172 multiletter control sequences out of 2500 \endtt Consequently there was plenty of room for more macros: $52821-27618= 25203$ unused cells of main memory, $2500-1172=1328$ of name memory, $1685-209=1476$ of string memory, and $17636-1659=15977$ of character memory. But a fairly large \TeX\ was being used, and only the macros of Appendices B and~E were loaded; in other circumstances it might have been necessary to conserve space. \bugonpage A454, lines 23--29 (8/13/87) *************** **** FILE PS:ERRATA.TEX.18, 2-100 (4766) \bugonpage A480, right column (2/15/88) **** FILE PS:ERRATA.NEW.2, 2-115 (5382) \bugonpage A474, left column (12/27/88) \eightpoint\indent \hbox to0pt{\hss\lower1pt\hbox{*}}|\parshape|, 101--102, 214, 271, 277, 283, \bugonpage A480, right column (2/15/88) *************** **** FILE PS:ERRATA.TEX.18, 4-39 (21232) \bugonpage C271, line 4 from the bottom (12/23/88) **** FILE PS:ERRATA.NEW.2, 4-39 (21991) \bugonpage C271, line 12 (1/4/89) \ninepoint\noindent the user and \MF's primitive picture commands. First, some important program\cutpar \bugonpage C271, line 4 from the bottom (12/23/88) *************** ######################################################################## Correction to TEX82.BUG in change no. 300 (25 Nov 84) ;COMPARISON OF PS:TEX82.BUG.14 AND PS:TEX82.BUG.2 ;OPTIONS ARE /E /3 **** FILE PS:TEX82.BUG.14, 19-463 (139100) @x module 693 print_int(dyn_used); print("; max so far: "); **** FILE PS:TEX82.BUG.15, 19-463 (139100) @x module 639 print_int(dyn_used); print("; max so far: "); *************** ######################################################################## Differences in SYMBOL.MF ;COMPARISON OF PS:SYMBOL.MF.7 AND PS:SYMBOL.MF.8 ;OPTIONS ARE /E /3 **** FILE PS:SYMBOL.MF.7, 1-47 (1929) x3-.5dot_size=hround(.5w-.5dot_size); w:=r:=2x3; y3+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]+.5dot_size); **** FILE PS:SYMBOL.MF.8, 1-47 (1929) x3-.5dot_size=hround(.5w-.5dot_size); center_on(x3); y3+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]+.5dot_size); *************** **** FILE PS:SYMBOL.MF.7, 1-500 (21343) .5[x1,x2]=x3=good.x .5w; w:=r:=2x3; lft x1=hround(.5w-u*sqrt48); draw z1--z2--z3--cycle; % stroke **** FILE PS:SYMBOL.MF.8, 1-500 (21347) .5[x1,x2]=x3=good.x .5w; center_on(x3); lft x1=hround(.5w-u*sqrt48); draw z1--z2--z3--cycle; % stroke *************** **** FILE PS:SYMBOL.MF.7, 1-508 (21625) .5[x1,x2]=x3=good.x .5w; w:=r:=2x3; lft x1=hround(.5w-u*sqrt48); draw z1--z2--z3--cycle; % stroke **** FILE PS:SYMBOL.MF.8, 1-508 (21633) .5[x1,x2]=x3=good.x .5w; center_on(x3); lft x1=hround(.5w-u*sqrt48); draw z1--z2--z3--cycle; % stroke *************** **** FILE PS:SYMBOL.MF.7, 1-615 (26376) x1=x2=good.x .5w; w:=r:=2x1; lft x3=hround u; x4=r-x3; bot y1=0; y2-y1=x4-x3; **** FILE PS:SYMBOL.MF.8, 1-615 (26388) x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=w-x3; bot y1=0; y2-y1=x4-x3; *************** **** FILE PS:SYMBOL.MF.7, 1-626 (26691) x1=x2=good.x .5w; w:=r:=2x1; lft x3=hround u; x4=r-x3; bot y1=0; y2-y1=x4-x3; **** FILE PS:SYMBOL.MF.8, 1-626 (26707) x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=w-x3; bot y1=0; y2-y1=x4-x3; *************** **** FILE PS:SYMBOL.MF.7, 1-932 (39305) x1=x2=x3=x4; x1-.5stem=hround(.5w-.5stem); w:=r:=2x1; x5-.5stem=hround u; x6=w-x5; **** FILE PS:SYMBOL.MF.8, 1-932 (39325) x1=x2=x3=x4; x1-.5stem=hround(.5w-.5stem); center_on(x1); x5-.5stem=hround u; x6=w-x5; *************** **** FILE PS:SYMBOL.MF.7, 1-946 (39921) x1=x2=x3; x1-.5stem=hround(.5w-.5stem); w:=r:=2x1; x4-.5stem=hround u; x5=w-x4; **** FILE PS:SYMBOL.MF.8, 1-946 (39945) x1=x2=x3; x1-.5stem=hround(.5w-.5stem); center_on(x1); x4-.5stem=hround u; x5=w-x4; *************** **** FILE PS:SYMBOL.MF.7, 1-979 (41448) x1=x4=x30=x33=good.x .5w; w:=r:=2x1; x2=good.x(x1-.5u)-eps; lft x1-rt x10=hround .5pt; lft x12=hround .5u; **** FILE PS:SYMBOL.MF.8, 1-979 (41476) x1=x4=x30=x33=good.x .5w; center_on(x1); x2=good.x(x1-.5u)-eps; lft x1-rt x10=hround .5pt; lft x12=hround .5u; *************** **** FILE PS:SYMBOL.MF.7, 1-997 (42416) x1=x4=good.x .5w; w:=r:=2x1; lft x2=hround u; x3=w-x2; **** FILE PS:SYMBOL.MF.8, 1-997 (42448) x1=x4=good.x .5w; center_on(x1); lft x2=hround u; x3=w-x2; *************** **** FILE PS:SYMBOL.MF.7, 1-1009 (42973) x1=x5=good.x .5w; w:=r:=2x1; lft x7=hround u; x8=4u; x2+x8=x3+x7=x4+x6=w; **** FILE PS:SYMBOL.MF.8, 1-1009 (43009) x1=x5=good.x .5w; center_on(x1); lft x7=hround u; x8=4u; x2+x8=x3+x7=x4+x6=w; *************** **** FILE PS:SYMBOL.MF.7, 1-1023 (43554) x1=x10=good.x .5w; w:=r:=2x1; x2=good.x(x1-.5u)-eps; lft x1-rt x6=hround .5pt; x5=x6; **** FILE PS:SYMBOL.MF.8, 1-1023 (43594) x1=x10=good.x .5w; center_on(x1); x2=good.x(x1-.5u)-eps; lft x1-rt x6=hround .5pt; x5=x6; *************** ######################################################################## Changes in the WEB manual ;COMPARISON OF PS:WEBMAN.TEX.2 AND PS:WEBMAN.TEX.3 ;OPTIONS ARE /E /3 **** FILE PS:WEBMAN.TEX.2, 1-198 (11598) A module begins with the pair of symbols `\.{@\ }' or `\.{@*}', where **** FILE PS:WEBMAN.TEX.3, 3-43 (11596) \eject % page break inserted Dec 88 A module begins with the pair of symbols `\.{@\ }' or `\.{@*}', where *************** **** FILE PS:WEBMAN.TEX.2, 1-361 (21994) and \\{char}, even though \\{buffer} and \\{char} **** FILE PS:WEBMAN.TEX.3, 3-208 (22031) \vadjust{\eject} % page break inserted Dec 88 and \\{char}, even though \\{buffer} and \\{char} *************** **** FILE PS:WEBMAN.TEX.2, 1-413 (24876) than one; it must not be a single letter. Furthermore, the identifier must be making its first appearance in the \.{WEB} file; a macro must be defined before it is used. Numeric macros are subject to the following restrictions:\quad (1)~The right-hand side of the numeric definition must be made entirely from integer constants, numeric macros, preprocessed strings (see below), and **** FILE PS:WEBMAN.TEX.3, 4-18 (24959) than one; it must not be a single letter. Numeric macros are subject to the following restrictions:\quad (1)~The identifier must be making its first appearance in the \.{WEB} file; a numeric macro must be defined before it is used.\quad (2)~The right-hand side of the numeric definition must be made entirely from integer constants, numeric macros, preprocessed strings (see below), and *************** **** FILE PS:WEBMAN.TEX.2, 1-425 (25582) (2)~The numeric value must be less than $2^{15}=32768$ in absolute value. (For larger values, you can use `\.{==}' in place of~`\.=', thus making use **** FILE PS:WEBMAN.TEX.3, 4-31 (25670) (3)~The numeric value must be less than $2^{15}=32768$ in absolute value. (For larger values, you can use `\.{==}' in place of~`\.=', thus making use *************** ######################################################################## [ end of message 012 ] -------