summaryrefslogtreecommitdiff
path: root/info/digests/tex-implementors/message.11
diff options
context:
space:
mode:
Diffstat (limited to 'info/digests/tex-implementors/message.11')
-rw-r--r--info/digests/tex-implementors/message.111052
1 files changed, 1052 insertions, 0 deletions
diff --git a/info/digests/tex-implementors/message.11 b/info/digests/tex-implementors/message.11
new file mode 100644
index 0000000000..870000a1c2
--- /dev/null
+++ b/info/digests/tex-implementors/message.11
@@ -0,0 +1,1052 @@
+Date: 23 Dec 88 Message No: 011
+
+To: TeX implementors and distributors
+
+From: Barbara Beeton
+
+Subject: TeX 2.95, MF 1.7, changes to CM fonts, TANGLE 2.9
+
+
+As you were warned last week, TeX has again been modified, to handle the
+change first made in 2.94 more robustly. The change also affects MF,
+which is now at version 1.7. Updates to TeX82.BUG, MF84.BUG, TeX.WEB,
+MF.WEB and ERRATA.TEX are given below; note that these changes reverse
+some of the changes made in TeX 2.94 and MF 1.6, so be particularly
+careful applying them if you are using the line numbers for reference.
+
+Some fixes have been made to bugs in the CM fonts. These changes affect
+the following files:
+
+ BIGOP.MF
+ CMBASE.MF
+ ROMANL.MF
+ SYM.MF
+ SYMBOL.MF
+
+The changes are posted in CM85.BUG and also in ERRATA.TEX. The changes
+given in CM85.BUG for BIGOP and ROMANL are clear, and since there are
+many similar code lines in these .MF files that could lead to the changes
+being applied to the wrong character descriptions, I am not providing
+difference lists for these. Difference lists are provided for CMBASE.MF
+and SYM and SYMBOL.MF, where the changes are more extensive, or more
+clearly followed from the complete list of differences.
+
+Finally, TANGLE has been modified to permit references to non-numeric macros
+before their definitions. The changes (version 2.9) are listed below.
+
+All relevant files are now up to date at SCORE.
+
+As usual, I'd appreciate an acknowledgement that you have received
+this message.
+
+And I'd like to wish everyone the very best of holidays.
+
+
+########################################################################
+
+Additions to TEX82.BUG
+
+349. By popular request, undo #347 and fix the bug a more complex way.
+@x module 71 [this undoes change #347]
+if not input_ln(term_in,true) then t_open_in;
+@y
+if not input_ln(term_in,true) then fatal_error("End of file on the terminal!");
+@z
+@x module 92 [now we get to the new stuff]
+begin if job_name>0 then selector:=term_and_log
+@y
+begin if log_opened then selector:=term_and_log
+@z
+@x module 93
+ error;
+@y
+ if log_opened then error;
+@z
+@x module 527
+@!job_name:str_number; {principal file name}
+@y
+@!job_name:str_number; {principal file name}
+@!log_opened:boolean; {has the transcript file been opened?}
+@z
+@x module 528
+@<Initialize the output...@>=job_name:=0; name_in_progress:=false;
+@y
+@<Initialize the output...@>=
+job_name:=0; name_in_progress:=false; log_opened:=false;
+@z
+@x module 534
+selector:=log_only;
+@y
+selector:=log_only; log_opened:=true;
+@z
+@x module 535
+begin if interaction<scroll_mode then {bypass |fatal_error|}
+ begin selector:=term_only; print_err("I can't write on file `");
+@.I can't write on file x@>
+ print_file_name(cur_name,cur_area,cur_ext); print("'.");@/
+ job_name:=0; history:=fatal_error_stop; jump_out;
+ end; {abort the program without a log file}
+@y
+begin selector:=term_only;
+@z
+@x module 1265 [this change is optional, but it's a slight improvement]
+if job_name<>0 then selector:=selector+2;
+@y
+if log_opened then selector:=selector+2;
+@z
+@x module 1333
+if job_name>0 then
+@y
+if log_opened then
+@z
+@x module 1334
+if job_name>0 then {the log file is open}
+@y
+if log_opened then
+@z
+
+350. (I sincerely hope that there won't be any more)
+
+
+########################################################################
+
+Differences between TEX.WEB 2.94 and 2.95
+
+;COMPARISON OF TX:<TEX.WEB>TEX.WEB.10 AND TX:<TEX.NEW>TEX.WEB.1
+;OPTIONS ARE /E /3
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 1-33 (2181)
+% A reward of $81.92 will be paid to the first finder of any remaining bug.
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 1-32 (2179)
+% Version 2.95 solves that problem a better way (December 1988).
+
+% A reward of $81.92 will be paid to the first finder of any remaining bug.
+***************
+
+**** FILE TX:<TEX.WEB>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 TX:<TEX.NEW>TEX.WEB.1, 2-93 (9431)
+@d banner=='This is TeX, Version 2.95' {printed when \TeX\ starts}
+
+@ Different \PASCAL s have slightly different conventions, and the present
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 7-319 (85645)
+begin if job_name>0 then selector:=term_and_log
+else selector:=term_only;
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 7-319 (85711)
+begin if log_opened then selector:=term_and_log
+else selector:=term_only;
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 7-329 (85988)
+ error;
+ @!debug if interaction>batch_mode then debug_help;@+gubed@;@/
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 7-329 (86054)
+ if log_opened then error;
+ @!debug if interaction>batch_mode then debug_help;@+gubed@;@/
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 30-312 (429711)
+@ Initially |job_name=0|; it becomes nonzero as soon as the true name is known.
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 30-311 (429794)
+@!log_opened:boolean; {has the transcript file been opened?}
+
+@ Initially |job_name=0|; it becomes nonzero as soon as the true name is known.
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 30-316 (429948)
+@<Initialize the output...@>=job_name:=0; name_in_progress:=false;
+
+@ Here is a routine that manufactures the output file names, assuming that
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 30-317 (430095)
+@<Initialize the output...@>=
+job_name:=0; name_in_progress:=false; log_opened:=false;
+
+@ Here is a routine that manufactures the output file names, assuming that
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 30-399 (433094)
+selector:=log_only;
+@<Print the banner line, including the date and time@>;
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 30-401 (433262)
+selector:=log_only; log_opened:=true;
+@<Print the banner line, including the date and time@>;
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 30-413 (433677)
+Therefore the program is careful not to call |prompt_file_name| if a
+fatal error could result.
+
+The normal idea of |batch_mode| is that nothing at all should be written
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 30-415 (433863)
+The |prompt_file_name| routine can result in a |fatal_error|, but the |error|
+routine will not be invoked because |log_opened| will be false.
+
+The normal idea of |batch_mode| is that nothing at all should be written
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 30-426 (434205)
+begin if interaction<scroll_mode then {bypass |fatal_error|}
+ begin selector:=term_only; print_err("I can't write on file `");
+@.I can't write on file x@>
+ print_file_name(cur_name,cur_area,cur_ext); print("'.");@/
+ job_name:=0; history:=fatal_error_stop; jump_out;
+ end; {abort the program without a log file}
+prompt_file_name("transcript file name",".log");
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 30-428 (434438)
+begin selector:=term_only;
+prompt_file_name("transcript file name",".log");
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 50-796 (956324)
+if job_name<>0 then selector:=selector+2;
+end;
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 50-796 (956264)
+if log_opened then selector:=selector+2;
+end;
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 52-107 (986057)
+if job_name>0 then
+ begin wlog_cr; a_close(log_file); selector:=selector-2;
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 52-107 (985996)
+if log_opened then
+ begin wlog_cr; a_close(log_file); selector:=selector-2;
+***************
+
+**** FILE TX:<TEX.WEB>TEX.WEB.10, 52-122 (986549)
+if job_name>0 then {the log file is open}
+ begin wlog_ln(' ');
+**** FILE TX:<TEX.NEW>TEX.WEB.1, 52-122 (986488)
+if log_opened then
+ begin wlog_ln(' ');
+***************
+
+
+########################################################################
+
+Additions to MF84.BUG
+
+546. By popular request, undo #544 and fix the bug a more complex way.
+@x module 66 [this undoes chan44]
+if not input_ln(term_in,true) n_in;
+@y
+if not input_ln(term_in,true) then fatal_error("End of file on the terminal!");
+@z
+@x module 87 [now we get to the new stuff]
+begin if job_name>0 selector:=term_and_log
+@y
+begin if log_opened then selector:=term_and_log
+@z
+@x module 88
+ error;
+@y
+ if log_opened then error;
+@z
+@x module 782
+@!job_name:str_number; {principal file name}
+@y
+@!job_name:str_number; {principal file name}
+@!log_opened:boolean; {has the transcript file been opened?}
+@z
+@x module 783
+@<Initialize the output...@>=job_name:=0;
+@y
+@<Initialize the output...@>=job_name:=0; log_opened:=false;
+@z
+@x module 788
+selector:=log_only;
+@y
+selector:=log_only; log_opened:=true;
+@z
+@x module 789
+begin if interaction<scroll_mode then {bypass |fatal_error|}
+ begin selector:=term_only; print_err("I can't write on file `");
+@.I can't write on file x@>
+ print_file_name(cur_name,cur_area,cur_ext); print("'.");@/
+ job_name:=0; history:=fatal_error_stop; jump_out;
+ end; {abort the program without a log file}
+@y
+begin selector:=term_only;
+@z
+@x module 1023 [this change is optional, but it's a slight improvement]
+ if job_name<>0 then selector:=selector+2;
+@y
+ if log_opened then selector:=selector+2;
+@z
+@x module 1205
+if job_name>0 then
+@y
+if log_opened then
+@z
+@x module 1208
+if job_name>0 then {the log file is open}
+@y
+if log_opened then
+@z
+
+547. (I sincerely hope that there won't be any more)
+
+
+########################################################################
+
+Differences between MF.WEB 1.6 and 1.7
+
+;COMPARISON OF PS:<TEX.MF>MF.WEB.5 AND PS:<TEX.NEW>MF.WEB.1
+;OPTIONS ARE /E /3
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 1-18 (1093)
+% A few "harmless" optimizations have been made without changing versions.
+**** FILE PS:<TEX.NEW>MF.WEB.1, 1-18 (1093)
+% Version 1.7 solves that problem a better way (December 1988).
+% A few "harmless" optimizations have been made without changing versions.
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 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:<TEX.NEW>MF.WEB.1, 2-81 (7810)
+@d banner=='This is METAFONT, Version 1.7' {printed when \MF\ starts}
+
+@ Different \PASCAL s have slightly different conventions, and the present
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 7-324 (80761)
+begin if job_name>0 then selector:=term_and_log
+else selector:=term_only;
+**** FILE PS:<TEX.NEW>MF.WEB.1, 7-324 (80826)
+begin if log_opened then selector:=term_and_log
+else selector:=term_only;
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 7-334 (81103)
+ error;
+ @!debug if interaction>batch_mode then debug_help;@+gubed@;@/
+**** FILE PS:<TEX.NEW>MF.WEB.1, 7-334 (81168)
+ if log_opened then error;
+ @!debug if interaction>batch_mode then debug_help;@+gubed@;@/
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 39-307 (650905)
+@!log_name:str_number; {full name of the log file}
+**** FILE PS:<TEX.NEW>MF.WEB.1, 39-307 (650989)
+@!log_opened:boolean; {has the transcript file been opened?}
+@!log_name:str_number; {full name of the log file}
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 39-313 (651196)
+@<Initialize the output...@>=job_name:=0;
+
+@ Here is a routine that manufactures the output file names, assuming that
+**** FILE PS:<TEX.NEW>MF.WEB.1, 39-314 (651342)
+@<Initialize the output...@>=job_name:=0; log_opened:=false;
+
+@ Here is a routine that manufactures the output file names, assuming that
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 39-386 (653986)
+selector:=log_only;
+@<Print the banner line, including the date and time@>;
+**** FILE PS:<TEX.NEW>MF.WEB.1, 39-387 (654151)
+selector:=log_only; log_opened:=true;
+@<Print the banner line, including the date and time@>;
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 39-399 (654528)
+Therefore the program is careful not to call |prompt_file_name| if a
+fatal error could result.
+
+The normal idea of |batch_mode| is that nothing at all should be written
+**** FILE PS:<TEX.NEW>MF.WEB.1, 39-400 (654711)
+The |prompt_file_name| routine can result in a |fatal_error|, but the |error|
+routine will not be invoked because |log_opened| will be false.
+
+The normal idea of |batch_mode| is that nothing at all should be written
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 39-412 (655056)
+begin if interaction<scroll_mode then {bypass |fatal_error|}
+ begin selector:=term_only; print_err("I can't write on file `");
+@.I can't write on file x@>
+ print_file_name(cur_name,cur_area,cur_ext); print("'.");@/
+ job_name:=0; history:=fatal_error_stop; jump_out;
+ end; {abort the program without a log file}
+prompt_file_name("transcript file name",".log");
+**** FILE PS:<TEX.NEW>MF.WEB.1, 39-413 (655286)
+begin selector:=term_only;
+prompt_file_name("transcript file name",".log");
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 45-46 (803909)
+ if job_name<>0 then selector:=selector+2;
+ get_x_next;
+**** FILE PS:<TEX.NEW>MF.WEB.1, 45-46 (803846)
+ if log_opened then selector:=selector+2;
+ get_x_next;
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 50-116 (916496)
+if job_name>0 then
+ begin wlog_cr;
+**** FILE PS:<TEX.NEW>MF.WEB.1, 50-116 (916432)
+if log_opened then
+ begin wlog_cr;
+***************
+
+**** FILE PS:<TEX.MF>MF.WEB.5, 50-161 (918333)
+if job_name>0 then {the log file is open}
+ begin wlog_ln(' ');
+**** FILE PS:<TEX.NEW>MF.WEB.1, 50-161 (918269)
+if log_opened then
+ begin wlog_ln(' ');
+***************
+
+
+########################################################################
+
+Extracts from ERRATA.TeX (differences as compared with previous version)
+
+;COMPARISON OF TX:<TEX.DOC>ERRATA.TEX.14 AND TX:<TEX.DOC>ERRATA.NEW.1
+;OPTIONS ARE /E /3
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 2-83 (4289)
+\bugonpage A465, entry for {\tt\char`\\everymath} (12/12/87)
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 2-83 (4289)
+\bugonpage A464, left column, under Displays (12/8/88)
+
+\eightpoint\indent\quad
+non-centered, 186, 326, 375--376, 420--421.
+
+\bugonpage A465, entry for {\tt\char`\\everymath} (12/12/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 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 TX:<TEX.DOC>ERRATA.NEW.1, 3-6 (5163)
+\bugonpage B2, line 32 (12/14/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]TeX,\]Version\]2.95\char'23}\quad
+$\{\,$printed when \TeX\ starts$\,\}$
+
+\bugonpage B38, lines 7--9 from the bottom (11/6/88)
+
+\tenpoint\noindent[Delete this paragraph; it is being moved to page B214.]
+
+\bugonpage B38, line 5 from the bottom (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{term\_and\_log}$
+
+\bugonpage B39, line 5 (12/14/88)
+
+\ninepoint\noindent\kern50pt
+{\bf if\/} \\{log\_opened} {\bf then} \\{error};
+
+\bugonpage B52, line 5 (8/13/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 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
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 3-197 (11385)
+\bugonpage B211, new line of code before the mini-index (12/14/88)
+
+\ninepoint\noindent
+\\{log\_opened}: \\{boolean};\quad$\{\,$has the transcript file been opened?$\,\}$
+
+\bugonpage B212, line 5 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{job\_name}\gets0$; \ $\\{name\_in\_progress}\gets\\{false}$; \
+$\\{log\_opened}\gets\\{false}$;
+
+\bugonpage B213, line 24 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{log\_name}\gets\\{a\_make\_name\_string}(\\{log\_file})$; \
+$\\{selector}\gets\\{log\_only}$; \
+$\\{log\_opened}\gets\\{true}$;
+
+\bugonpage B214, lines 2 and 3 (12/14/88)
+
+\tenpoint\noindent
+messages or even to \\{show\_context}.
+The \\{prompt\_file\_name} routine can result in a \\{fatal\_error},
+but the \\{error}
+routine will not be invoked because \\{log\_opened} will be false.
+\par\noindent\hskip10pt
+The normal idea of \\{batch\_mode} is that nothing at all should be written
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 3-201 (11451)
+\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 TX:<TEX.DOC>ERRATA.NEW.1, 3-228 (12455)
+\bugonpage B214, lines 7--11 reduce to a single line (12/14/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} $\\{selector}\gets\\{term\_only}$;
+
+\bugonpage B224, second-last line (4/28/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 3-390 (17709)
+\bugonpage B547, right column (9/20/87)
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 3-413 (18534)
+\bugonpage B507, line 13 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{selector}+2$;
+
+\bugonpage B527, line 21 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage B528, line 5 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage B547, right column (9/20/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 3-417 (18382)
+\bugonpage B559, right column (8/13/87)
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 3-455 (19571)
+\bugonpage B559, new entry (12/14/88)
+
+\eightpoint\noindent
+\\{log\_opened}, 92--93, $\underline{527}$, 528, 534--535, 1265, 1333--1334.
+
+\bugonpage B559, right column (8/13/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 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 TX:<TEX.DOC>ERRATA.NEW.1, 5-6 (22240)
+\bugonpage D2, line 27 (12/14/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
+{\tt This\]is\]METAFONT,\]Version\]1.7\char'23}\quad
+$\{\,$printed when \MF\ starts$\,\}$
+
+\bugonpage D36, lines 3--5 (11/6/88)
+
+\tenpoint\noindent[Delete this paragraph; it is being moved to page D349.]
+
+\bugonpage D36, line 7 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf begin if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{term\_and\_log}$
+
+\bugonpage D36, line 16 (12/14/88)
+
+\ninepoint\noindent\kern50pt
+{\bf if\/} \\{log\_opened} {\bf then} \\{error};
+
+\bugonpage D66, lines 34--35 (7/9/88)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 5-32 (21773)
+\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
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 5-36 (23209)
+\bugonpage D347, new line of code after line 5 (12/14/88)
+
+\ninepoint\noindent
+\\{log\_opened}: \\{boolean};\quad$\{\,$has the transcript file been opened?$\,\}$
+
+\bugonpage D347, line 11 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{job\_name}\gets0$; \
+$\\{log\_opened}\gets\\{false}$;
+
+\bugonpage D348, line 4 from the bottom (12/14/88)
+
+\ninepoint\noindent\kern10pt
+$\\{log\_name}\gets\\{a\_make\_name\_string}(\\{log\_file})$; \
+$\\{selector}\gets\\{log\_only}$; \
+$\\{log\_opened}\gets\\{true}$;
+
+\bugonpage D349, lines 6 and 7 (12/14/88)
+
+\tenpoint\noindent
+print error messages or even to \\{show\_context}.
+The \\{prompt\_file\_name} routine can result in a \\{fatal\_error},
+but the \\{error}
+routine will not be invoked because \\{log\_opened} will be false.
+\par\noindent\hskip10pt
+The normal idea of \\{batch\_mode} is that nothing at all should be written
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 5-40 (22088)
+\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 TX:<TEX.DOC>ERRATA.NEW.1, 5-67 (24256)
+\bugonpage D349, lines 11--15 reduce to a single line (12/14/88)
+
+\ninepoint\noindent\hskip10pt
+{\bf begin} $\\{selector}\gets\\{term\_only}$;
+
+\bugonpage D420, bottom line (5/25/88)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 5-63 (22896)
+\bugonpage D545, left column (10/31/87)
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 5-86 (24884)
+\bugonpage D444, line 8 from the bottom (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then} $\\{selector}\gets\\{selector}+2$;
+
+\bugonpage D510, line 14 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage D511, line 11 (12/14/88)
+
+\ninepoint\noindent\kern10pt
+{\bf if\/} \\{log\_opened} {\bf then}
+
+\bugonpage D530, new entry (12/14/88)
+
+\eightpoint\noindent
+\\{log\_opened}, 87--88, $\underline{782}$, 783, 788--789, 1023, 1205, 1208.
+
+\bugonpage D545, left column (10/31/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 6-21 (23635)
+\bugonpage E353, lines 38--39 (8/12/87)
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 6-21 (26146)
+\bugonpage E333, line 11 (12/11/88)
+
+\ninepoint
+\line{{\bf if\/} not \\{monospace}:
+ $r:={\rm hround}(x_5+x_1)+l$; {\bf fi}\hfill
+ \% change width for better fit}
+
+\bugonpage E353, lines 38--39 (8/12/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 6-46 (24394)
+\bugonpage E485, line 4 (8/7/87)
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 6-53 (27077)
+\bugonpage E471, line 5 (12/11/88)
+
+\ninepoint\noindent
+$x_2=\\{good}.x\,.5w$; \ $\\{center\_on}(x_2)$;
+
+\bugonpage E471, insert two lines below the rule at bottom of page (12/11/88)
+
+\ninepoint
+\line{{\bf def\/}
+\\{center\_on}({\bf expr} $x) =\null$
+{\bf if\/} not \\{monospace}:\hfill \% change width for symmetric fit}
+\leftline{\kern10pt
+ $r:=r+2x-w$; \ $w:=2x$; \ {\bf fi} {\bf enddef};}
+
+\bugonpage E477, line 20 (12/11/87)
+
+\ninepoint\noindent
+$x_4=x_8=\\{good}.x\,.5w$; \ $\\{center\_on}(x_4)$; \
+$x_2=w-x_6=\\{good}.x(x_4+a)$;
+
+\bugonpage E483, third line of elementary division operator (12/11/88)
+
+\ninepoint\noindent
+$x_3-.5\\{dot\_size}={\rm hround}(.5w-.5\\{dot\_size})$; \
+$\\{center\_on}(x_3)$;
+
+\bugonpage E485, line 4 (8/7/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 6-58 (24810)
+\bugonpage E550, new line after line 23 (8/15/87)
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 6-91 (28231)
+\bugonpage E515, lines 5 and 12 (12/11/88)
+
+\ninepoint\noindent
+$.5[x_1,x_2]=x_3=\\{good}.x\,.5w$; \
+$\\{center\_on}(x_3)$; \ $\\{lft}\,x_1={\rm hround}(.5w-u*{\rm sqrt}48)$;
+
+\bugonpage E521, lines 4 and 14 (12/12/88)
+
+\ninepoint\noindent
+$x_1=x_2=\\{good}.x\,.5w$; \
+$\\{center\_on}(x_1)$; \ $\\{lft}\,x_3={\rm hround}\,u$; \ $x_4=w-x_3$;
+
+\bugonpage E537, line 6 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_2=x_3=x_4$; \
+$x_1-.5\\{stem}={\rm hround}(.5w-.5\\{stem})$; \
+$\\{center\_on}(x_1)$;
+
+\bugonpage E537, line 19 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_2=x_3$; \
+$x_1-.5\\{stem}={\rm hround}(.5w-.5\\{stem})$; \
+$\\{center\_on}(x_1)$;
+
+\bugonpage E539, line 4 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_4=x_{30}=x_{33}=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E539, line 21 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_4=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E541, line 4 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_5=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E541, line 17 (12/11/88)
+
+\ninepoint\noindent
+$x_1=x_{10}=\\{good}.x\,.5w$; \ $\\{center\_on}(x_1)$;
+
+\bugonpage E550, new line after line 23 (8/15/87)
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 6-62 (24960)
+ {\bf if} $\hbox{\$}<3$: $\hbox{\$}:=3$; {\bf fi endfor}
+\smallskip\noindent
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 6-141 (29521)
+ {\bf if\/} $\hbox{\$}<3$: $\hbox{\$}:=3$; {\bf fi endfor}
+\smallskip\noindent
+***************
+
+**** FILE TX:<TEX.DOC>ERRATA.TEX.15, 6-71 (25320)
+ \\{cap\_bar},\\{cap\_band}$;
+
+\bye
+**** FILE TX:<TEX.DOC>ERRATA.NEW.1, 6-150 (29883)
+ \\{cap\_bar},\\{cap\_band})$;
+
+\bugonpage E572, new entry at bottom (12/11/88)
+
+\eightpoint\noindent
+\\{center\_on}, $\underline{473}$, 477, 483, 515, 521, 537--541.
+
+\bye
+***************
+
+
+########################################################################
+
+Additions to CM85.BUG
+
+@x in BIGOP, the \displaystyle coproduct sign
+lft x11=hround u; x1l-x11=x2l-x12=x22-x2r=hround cap_jut;
+@y
+lft x11=hround u; x1l-x11=x2l-x12=x22-x2r=hround 1.6cap_jut;
+@z
+
+@x in ROMANL, the letter m
+if not monospace: r:=hround(x5+x1)-l; fi % change width for better fit
+@y
+if not monospace: r:=hround(x5+x1)+l; fi % change width for better fit
+@z
+
+@x a new routine for CMBASE, following change_width
+@y
+def center_on(expr x) = if not monospace: % change width for symmetric fit
+ r:=r+2x-w; w:=2x; fi enddef;
+@z
+@x in SYMBOL, the elementary division operator
+x3-.5dot_size=hround(.5w-.5dot_size); w:=r:=2x3;
+@y
+x3-.5dot_size=hround(.5w-.5dot_size); center_on(x3);
+@z
+Similarly, whenever the construction "w:=r:=2x*" appears, change it to
+"center_on(x*)". This happens in the programs for elementary division operator
+(as noted above), large triangle, large inverted triangle, lattice top,
+lattice bottom, dagger mark, double dagger mark, club/diamond/heart/spade suit
+(all in SYMBOL), plus the diamond operator and universal quantifier in SYM.
+The following additional change needs to be made in the programs
+for lattice top and lattice bottom:
+@x
+x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=r-x3;
+@y
+x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=w-x3;
+@z
+
+(I sincerely hope there won't be any more!)
+
+
+########################################################################
+
+Differences in CMBASE.MF
+
+;COMPARISON OF PS:<TEX.CM>CMBASE.MF.11 AND PS:<TEX.CM>CMBASE.MF.12
+;OPTIONS ARE /E /3
+
+**** FILE PS:<TEX.CM>CMBASE.MF.11, 1-490 (21001)
+def padded expr del_sharp =
+**** FILE PS:<TEX.CM>CMBASE.MF.12, 1-490 (21001)
+def center_on(expr x) = if not monospace: % change width for symmetric fit
+ r:=r+2x-w; w:=2x; fi enddef;
+
+def padded expr del_sharp =
+***************
+
+
+########################################################################
+
+Differences in SYM.MF
+
+;COMPARISON OF PS:<TEX.CM>SYM.MF.8 AND PS:<TEX.CM>SYM.MF.9
+;OPTIONS ARE /E /3
+
+**** FILE PS:<TEX.CM>SYM.MF.8, 1-218 (9135)
+x2=good.x .5w; w:=r:=2x2;
+lft x1=0; x3=w-x1;
+**** FILE PS:<TEX.CM>SYM.MF.9, 1-218 (9135)
+x2=good.x .5w; center_on(x2);
+lft x1=0; x3=w-x1;
+***************
+
+**** FILE PS:<TEX.CM>SYM.MF.8, 1-354 (14154)
+x4=x8=good.x .5w; w:=r:=2x4; x2=w-x6=good.x(x4+a);
+y2=y6=.5[y4,y8]=math_axis; y8=good.y(y2+a);
+**** FILE PS:<TEX.CM>SYM.MF.9, 1-354 (14158)
+x4=x8=good.x .5w; center_on(x4); x2=w-x6=good.x(x4+a);
+y2=y6=.5[y4,y8]=math_axis; y8=good.y(y2+a);
+***************
+
+
+########################################################################
+
+Differences in SYMBOL.MF
+
+;COMPARISON OF PS:<TEX.CM>SYMBOL.MF.7 AND PS:<TEX.CM>SYMBOL.MF.8
+;OPTIONS ARE /E /3
+
+**** FILE PS:<TEX.CM>SYMBOL.MF.7, 1-47 (1929)
+x3-.5dot_size=hround(.5w-.5dot_size); w:=r:=2x3;
+y3+.5dot_size=vround(math_spread[.5x_hei+.5dot_size);
+**** FILE PS:<TEX.CM>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:<TEX.CM>SYMBOL.MF.7, 1-500 (21343)
+.5[x1,x2]=x3=good.x .5w; w:=r:=2x3; lft x1=hround(.5w-u*sqrt48);
+draw z1--zle; % stroke
+**** FILE PS:<TEX.CM>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:<TEX.CM>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:<TEX.CM>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:<TEX.CM>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:<TEX.CM>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:<TEX.CM>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:<TEX.CM>SYMBOL.MF.8, 1-626 (26707)
+x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=w-x3;
+bot yy2-y1=x4-x3;
+***************
+
+**** FILE PS:<TEX.CM>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:<TEX.CM>SYMBOL.MF.8, 1-932 (39325)
+x1=x2=x3=x4; x1-.5stem=hround(.5w-.5stem); center_on(x1);
+x5-.5hround u; x6=w-x5;
+***************
+
+**** FILE PS:<TEX.CM>SYMBOL.MF.7, 1-946 (39921)
+x1=x2=x3; x1-.5stem=hround(.5w-.5stem); w:=r:=2x1;
+x4-.5hround u; x5=w-x4;
+**** FILE PS:<TEX.CM>SYMBOL.MF.8, 1-946 (39945)
+x1=x2=x3; x1-.5stem=hround(.5w-.5stem); center_on(x1);
+x4-.5d u; x5=w-x4;
+***************
+
+**** FILE PS:<TEX.CM>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:<TEX.CM>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:<TEX.CM>SYMBOL.MF.7, 1-997 (42416)
+x1=x4=good.x .5w; w:=r:=2x1;
+lft x2=hround u; x3=w-x2;
+**** FILE PS:<TEX.CM>SYMBOL.MF.8, 1-997 (42448)
+x1=x4=good.x .5w; center_on(x1);
+lft x2=hround u; x3=w-x2;
+***************
+
+**** FILE PS:<TEX.CM>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:<TEX.CM>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:<TEX.CM>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:<TEX.CM>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;
+***************
+
+
+########################################################################
+
+Differences between TANGLE.WEB 2.8 and 2.9
+
+;COMPARISON OF PS:<TEX.WEB>TANGLE.WEB.4 AND PS:<TEX.NEW>TANGLE.WEB.1
+;OPTIONS ARE /E /3
+
+**** FILE PS:<TEX.WEB>TANGLE.WEB.4, 1-15 (889)
+% Here is TeX material that gets inserted after \input webmac
+**** FILE PS:<TEX.NEW>TANGLE.WEB.1, 1-14 (887)
+% Version 2.9 allows nonnumeric macros before their definition (December, 1988).
+% Here is TeX material that gets inserted after \input webmac
+***************
+
+**** FILE PS:<TEX.WEB>TANGLE.WEB.4, 1-32 (1590)
+ \centerline{(Version 2.8)}
+ \vfill}
+**** FILE PS:<TEX.NEW>TANGLE.WEB.1, 1-33 (1672)
+ \centerline{(Version 2.9)}
+ \vfill}
+***************
+
+**** FILE PS:<TEX.WEB>TANGLE.WEB.4, 1-61 (2855)
+@d banner=='This is TANGLE, Version 2.8'
+
+@ The program begins with a fairly normal header, made up of pieces that
+**** FILE PS:<TEX.NEW>TANGLE.WEB.1, 2-26 (2936)
+@d banner=='This is TANGLE, Version 2.9'
+
+@ The program begins with a fairly normal header, made up of pieces that
+***************
+
+**** FILE PS:<TEX.WEB>TANGLE.WEB.4, 1-1003 (43139)
+if p<>name_ptr then @<Give double-definition error and change |p| to type |t|@>
+else @<Enter a new identifier into the table at position |p|@>;
+**** FILE PS:<TEX.NEW>TANGLE.WEB.1, 7-114 (43215)
+if p<>name_ptr then
+ @<Give double-definition error, if necessary, and change |p| to type |t|@>
+else @<Enter a new identifier into the table at position |p|@>;
+***************
+
+**** FILE PS:<TEX.WEB>TANGLE.WEB.4, 1-1026 (43934)
+@ If a macro has appeared before it was defined, \.{TANGLE} will
+still work all right; after all, such behavior is typical of the replacement
+**** FILE PS:<TEX.NEW>TANGLE.WEB.1, 7-138 (44028)
+@ If a nonnumeric macro has appeared before it was defined, \.{TANGLE} will
+still work all right; after all, such behavior is typical of the replacement
+***************
+
+**** FILE PS:<TEX.WEB>TANGLE.WEB.4, 1-1031 (44245)
+so \.{TANGLE} finds it simplest to make a blanket rule that macros should
+be defined before they are used. The following routine gives an error message
+**** FILE PS:<TEX.NEW>TANGLE.WEB.1, 7-143 (44350)
+so \.{TANGLE} finds it simplest to make a blanket rule that numeric macros should
+be defined before they are used. The following routine gives an error message
+***************
+
+**** FILE PS:<TEX.WEB>TANGLE.WEB.4, 1-1037 (44544)
+ begin err_print('! This identifier has already appeared');
+@.This identifier has already...@>
+**** FILE PS:<TEX.NEW>TANGLE.WEB.1, 7-149 (44657)
+ begin if t=numeric then err_print('! This identifier has already appeared');
+@.This identifier has already...@>
+***************
+
+
+########################################################################
+
+
+[ end of message 011 ]
+-------