diff options
Diffstat (limited to 'info/digests/tex-implementors/024')
-rw-r--r-- | info/digests/tex-implementors/024 | 1054 |
1 files changed, 1054 insertions, 0 deletions
diff --git a/info/digests/tex-implementors/024 b/info/digests/tex-implementors/024 new file mode 100644 index 0000000000..2a939b131c --- /dev/null +++ b/info/digests/tex-implementors/024 @@ -0,0 +1,1054 @@ +Date: 27 Mar 90 Message No: 024 + +To: TeX implementors and distributors + +From: Barbara Beeton + +Subject: TeX 3.0 is here; BibTeX; inquiry from Peter Breitenlohner + + +The files for TeX 3.0 were installed at labrea on Sunday, Mar 25. +I shall confine this message to just a few items: the differences +between TeX 2.993 and 3.0, updates to TEX82.BUG, and a list of the +files that have been updated at labrea since 6 Jan 90. (That is a +random date, but I think it should include just about everything +that is really important, and should save some of you from having +to spend the time getting a directory.) + +There have been some new names added to the list, and some address +changes, so I would appreciate an acknowledgement that everyone has +received this message. + +I am still trying to figure out how to get copies of the TRIP and TRAP +files to everyone. I have received simple C programs for encoding and +decoding files, and that may be a practical option. Please send the +following information along with your acknowledgement: + + 1 Do you have access to FTP? (In other words, you can get all the + files you need direct from labrea.) + 2 Would you be willing to provide copies of the TRIP files to other + implementors in your area? (That is, I would have to send copies + of the TRIP and TRAP files to fewer people, but everyone would + still be taken care of.) + 3 Do you have a C compiler? (In other words, if I sent copies of + the encoding/decoding programs, you could compile them and then + use them to convert files encoded here and sent to you back into + useful form.) + 4 Would you prefer getting the TRIP and TRAP files on diskette, and + if so, in what format? (I can create only IBM PC compatible + diskettes myself, and that isn't really convenient. To get other + formats, I will have to find someone else to do it. So either of + these options may take longer than electronic mail.) + 5 If you have any other suggestions, I'd be delighted to hear them. + +On another topic, I spoke yesterday with Oren Patashnik, who has finally +finished his dissertation and is now working on BibTeX 1.0. Although +he does not want to be deluged with requests for new features, he did +express a concern that he may have missed some things that are important +to European users of BibTeX. He is also interested in hearing about any +bugs that may still be present in the code. If anyone has anything to +say about either concern, I am preparing a summary of the things I've +seen mentioned in UKTeX, TEX-NL and GUT (he already watches TeXhax) to +send to him, and will be happy to include other information. Or you +could send your comments directly to him: + opbibtex@Neon.Stanford.EDU + +Peter Breitenlohner (PEB@DM0MPI11.Bitnet) reported this problem: + When running the TRIP/TRAP test on the CMS versions of TeX/MF + I get a discrepancy in the buf_stack usage. To be precise I + get one less than the files from Stanford say. + In the TRIP test I get: + 5i,7n,9p,113b,38s stack positions out of 200i,... + instead of: + 5i,7n,9p,114b,38s stack positions out of 200i,... + in the TRIP test I get: + 8i,43n,14r,8p,167b stack positions out of 30i,... + instead of: + 8i,43n,14r,8p,168b stack positions out of 30i,... + Yes we have modified the function input_ln for efficiency, + but I have tried to check very carefully that max_buf_stack + is computed as in the original version. + To be sure I just redid the TRIP test with all modifications of + input_ln removed (i.e. with the original version of input_ln). + I still get the same discrepancy ???????????????? + Do you know of anyone else having a similar problem. +Can anyone help? + +By the way, if anyone wants to send a message to this list, it should +be very easy. The address is on the Internet: + TeX-implementors@Math.AMS.com +Be warned, though, that depending on the phase of the moon and the whim +of the mail forwarding software at various gateways, some addresses may +get bounced, and some may just fall into the void. There are several +implementors who don't have any e-mail access at all, and if you would +like them included in a message distribution, please send me a separate +note, and I will ask the TUG office to handle the postal distribution. + + +######################################################################## + +Differences between TEX.WEB 2.993 and 3.0 + +;COMPARISON OF TX:<TEX.TEX>TEX-2-993.WEB.1 AND TX:<TEX.NEW>TEX-3-0.WEB.1 +;OPTIONS ARE /E /3 + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-41 (2739) +% A reward of $163.84 will be paid to the first finder of any remaining bug, + +% not counting changes introduced after August 1989. +% (This amount will double again in 1990.) + +% Although considerable effort has been expended to make the TeX program +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-40 (2737) +% Version 3.0 fixed unusual displays; was more \output robust (March 1990). + +% A reward of $327.68 will be paid to the first finder of any remaining bug, +% not counting changes introduced after August 1989. + +% Although considerable effort has been expended to make the TeX program +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-186 (10245) +@d banner=='This is TeX, Version 2.993' {printed when \TeX\ starts} + +@ Different \PASCAL s have slightly different conventions, and the present +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-186 (10278) +@d banner=='This is TeX, Version 3.0' {printed when \TeX\ starts} + +@ Different \PASCAL s have slightly different conventions, and the present +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-434 (23068) + about |(mem_max-mem_min)/10|, but 2100 is already quite generous} +@d hash_prime=1777 {a prime number equal to about 85\pct! of |hash_size|} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-434 (23099) + about |(mem_max-mem_min)/10|} +@d hash_prime=1777 {a prime number equal to about 85\pct! of |hash_size|} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-1012 (48416) +@<Report overflow of the input buffer, and abort@>= +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-1011 (48409) +(If the \PASCAL\ compiler does not support non-local |@!goto|, the +@^system dependencies@> +statement `|goto final_end|' should be replaced by something that +quietly terminates the program.) + +@<Report overflow of the input buffer, and abort@>= +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-1829 (81516) +goes to |end_of_TEX|. This is the only nonlocal |@!goto| statement in the +whole program. It is used when there is no recovery from a particular error. +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-1833 (81705) +goes to |end_of_TEX|. This is the only nontrivial |@!goto| statement in the +whole program. It is used when there is no recovery from a particular error. +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-6151 (274364) +definitions, marks, and \.{\\write} texts are kept in \TeX's memory in the +form of token lists, preceded by a node that has a reference count in its +|token_ref_count| field. The token stored in location |p| is called +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-6155 (274555) +definitions, marks, \.{\\write} texts, and a few other things +are remembered by \TeX\ in the form +of token lists, usually preceded by a node with a reference count in its +|token_ref_count| field. The token stored in location |p| is called +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-6523 (291727) +@!input_file : array[1..max_in_open] of alpha_file; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-6528 (291941) +@!open_parens : 0..max_in_open; {the number of open text files} +@!input_file : array[1..max_in_open] of alpha_file; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-7053 (313800) +in_open:=0; max_buf_stack:=0; +param_ptr:=0; max_param_stack:=0; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-7059 (314079) +in_open:=0; open_parens:=0; max_buf_stack:=0; +param_ptr:=0; max_param_stack:=0; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-7497 (331520) + begin if (end_line_char<0)or(end_line_char>127) then incr(limit); + if limit=start then {previous line was empty} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-7503 (331815) + begin if end_line_char_inactive then incr(limit); + if limit=start then {previous line was empty} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-7531 (332655) + begin print_char(")"); force_eof:=false; + update_terminal; {show user that file has been read} + end_file_reading; {resume previous level} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-7537 (332934) + begin print_char(")"); decr(open_parens); + update_terminal; {show user that file has been read} + force_eof:=false; + end_file_reading; {resume previous level} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-8039 (354643) +end + +@ If |long_state=outer_call|, a runaway argument has already been reported. +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-8046 (354944) +end {a white lie; the \.{\\par} won't always trigger a runaway} + +@ If |long_state=outer_call|, a runaway argument has already been reported. +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-9811 (423493) +$$\vbox{\halign{\.{#}\hfil\cr + {}\\def\\a\{\\c\}\cr + {}\\def\\b\{\\d\}\cr + {}\\def\\c\{\}\cr + {}\\def\\d\{\}\cr}}$$ +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-9818 (423854) +$$\vbox{\halign{\.{#}\hfil&\qquad\.{#}\hfil\cr + {}\\def\\a\{\\c\}& + {}\\def\\c\{\}\cr + {}\\def\\b\{\\d\}& + {}\\def\\d\{\}\cr}}$$ +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-9819 (423724) +while (p<>null)and(q<>null) do + if info(p)<>info(q) then p:=null + else begin p:=link(p); q:=link(q); + end; +b:=((p=null)and(q=null)); +end +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-9826 (424098) +if p=q then b:=true +else begin while (p<>null)and(q<>null) do + if info(p)<>info(q) then p:=null + else begin p:=link(p); q:=link(q); + end; + b:=((p=null)and(q=null)); + end; +end +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-10334 (445117) +print_char("("); print(name); update_terminal; state:=new_line; +if name=str_ptr-1 then {we can conserve string pool space now} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-10343 (445539) +print_char("("); incr(open_parens); print(name); update_terminal; +state:=new_line; +if name=str_ptr-1 then {we can conserve string pool space now} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-10348 (445589) +begin if not input_ln(cur_file,false) then do_nothing; +firm_up_the_line; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-10358 (446031) +begin if input_ln(cur_file,false) then do_nothing; +firm_up_the_line; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-14297 (620139) +@<Convert \(m)math glue to ordinary glue@>= +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-14306 (620575) +@!@:non_script_}{\.{\\nonscript} primitive@> + +@<Convert \(m)math glue to ordinary glue@>= +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-15757 (682439) + begin if type(q)=unset_node then + @<Set the unset box |q| and the unset boxes in it@> + else if type(q)=rule_node then + @<Make the running dimensions in rule |q| extend to the + boundaries of the alignment@>; + s:=q; q:=link(q); +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-15768 (682923) + begin if not is_char_node(q) then + if type(q)=unset_node then + @<Set the unset box |q| and the unset boxes in it@> + else if type(q)=rule_node then + @<Make the running dimensions in rule |q| extend to the + boundaries of the alignment@>; + s:=q; q:=link(q); +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16291 (708908) +@!artificial_badness:boolean; {has |b| been forced to zero?} +@!save_link:pointer; {temporarily holds value of |link(cur_p)|} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16303 (709433) +@!artificial_demerits:boolean; {has |d| been forced to zero?} +@!save_link:pointer; {temporarily holds value of |link(cur_p)|} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16327 (710517) +@!minimal_demerits:array[very_loose_fit..tight_fit] of scaled; {best total + demerits known for current line class and position, given the fitness} +@!minimum_demerits:scaled; {best total demerits known for current line class + and position} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16339 (711043) +@!minimal_demerits:array[very_loose_fit..tight_fit] of integer; {best total + demerits known for current line class and position, given the fitness} +@!minimum_demerits:integer; {best total demerits known for current line class + and position} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16372 (712390) +minimum_demerits:=minimum_demerits+abs(adj_demerits); +for fit_class:=very_loose_fit to tight_fit do +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16384 (712918) +if abs(adj_demerits)>=awful_bad-minimum_demerits then + minimum_demerits:=awful_bad-1 +else minimum_demerits:=minimum_demerits+abs(adj_demerits); +for fit_class:=very_loose_fit to tight_fit do +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16648 (724003) +begin @!stat artificial_badness:=false;@+tats@/ +@^inner loop@> +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16662 (724624) +begin artificial_demerits:=false;@/ +@^inner loop@> +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16715 (726855) + begin b:=0; {set badness zero, this break is forced} + @!stat artificial_badness:=true;@+tats + end +else if b>threshold then goto deactivate; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16729 (727464) + artificial_demerits:=true {set demerits zero, this break is forced} +else if b>threshold then goto deactivate; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16730 (727496) +@<Compute the demerits, |d|, from |r| to |cur_p|@>; +@!stat if tracing_paragraphs>0 then +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16742 (728071) +if artificial_demerits then d:=0 +else @<Compute the demerits, |d|, from |r| to |cur_p|@>; +@!stat if tracing_paragraphs>0 then +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16759 (728599) +if artificial_badness then print_char("*")@+else print_int(b); +@.*\relax@> +print(" p="); print_int(pi); +print(" d="); print_int(d); +end +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16772 (729213) +if b>inf_bad then print_char("*")@+else print_int(b); +@.*\relax@> +print(" p="); print_int(pi); print(" d="); +if artificial_demerits then print_char("*")@+else print_int(d); +end +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16789 (729635) +d:=line_penalty+b; d:=d*d; +if pi<>0 then +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16802 (730290) +begin d:=line_penalty+b; +if abs(d)>=10000 then d:=100000000@+else d:=d*d; +if pi<>0 then +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-16796 (729893) +if abs(fit_class-fitness(r))>1 then d:=d+adj_demerits + +@ When an active node disappears, we must delete an adjacent delta node if the +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-16810 (730596) +if abs(fit_class-fitness(r))>1 then d:=d+adj_demerits; +end + +@ When an active node disappears, we must delete an adjacent delta node if the +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-17443 (757502) +label common_ending,done,found,found1,not_found,not_found+1,exit; +var @<Local variables for hyphenation@>@; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-17458 (758211) +label common_ending,done,found,found1,found2,not_found,exit; +var @<Local variables for hyphenation@>@; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-17573 (762590) +if type(hb)=ligature_node then if odd(subtype(hb)) then + bchar:=font_bchar[hf]; +if is_char_node(ha) then + begin init_list:=ha; init_lig:=false; hu[0]:=qo(character(ha)); + end +else if type(ha)=ligature_node then + begin init_list:=lig_ptr(ha); init_lig:=true; init_lft:=(subtype(ha)>1); + hu[0]:=qo(character(lig_char(ha))); + if init_list=null then if init_lft then + begin hu[0]:=256; init_lig:=false; + end; {in this case a ligature will be reconstructed from scratch} + free_node(ha,small_node_size); + end +else goto not_found+1; {no punctuation found} +s:=cur_p; {we have |cur_p<>ha| because |type(cur_p)=glue_node|} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-17588 (763294) +if not is_char_node(hb) then + if type(hb)=ligature_node then if odd(subtype(hb)) then + bchar:=font_bchar[hf]; +if is_char_node(ha) then + if font(ha)<>hf then goto found2 + else begin init_list:=ha; init_lig:=false; hu[0]:=qo(character(ha)); + end +else if type(ha)=ligature_node then + if font(lig_char(ha))<>hf then goto found2 + else begin init_list:=lig_ptr(ha); init_lig:=true; init_lft:=(subtype(ha)>1); + hu[0]:=qo(character(lig_char(ha))); + if init_list=null then if init_lft then + begin hu[0]:=256; init_lig:=false; + end; {in this case a ligature will be reconstructed from scratch} + free_node(ha,small_node_size); + end +else begin {no punctuation found; look for left boundary} + if not is_char_node(r) then if type(r)=ligature_node then + if subtype(r)>1 then goto found2; + j:=1; s:=ha; init_list:=null; goto common_ending; + end; +s:=cur_p; {we have |cur_p<>ha| because |type(cur_p)=glue_node|} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-17590 (763293) +not_found+1: j:=1; s:=ha; init_list:=null; +if not is_char_node(r) then if type(r)=ligature_node then + if subtype(r)>1 then + begin j:=0; hu[0]:=256; init_lig:=false; + end; +common_ending: flush_node_list(r); +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-17612 (764306) +found2: s:=ha; j:=0; hu[0]:=256; init_lig:=false; init_list:=null; +common_ending: flush_node_list(r); +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-19734 (856246) +else begin wait:=false; s:=ins_ptr(p); + link(last_ins_ptr(r)):=s; s:=last_ins_ptr(r); + if best_ins_ptr(r)=p then +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-19752 (857149) +else begin wait:=false; s:=last_ins_ptr(r); link(s):=ins_ptr(p); + if best_ins_ptr(r)=p then +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-19752 (856951) + split_top_skip:=split_top_ptr(p); +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-19769 (857831) + link(s):=null; + split_top_skip:=split_top_ptr(p); +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-19759 (857236) + link(s):=null; + end; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-19777 (858136) + end; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-19816 (859123) +begin if loc<>null then @<Recover from an unbalanced output routine@>; +end_token_list; {conserve stack space in case more outputs are triggered} +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-19833 (860003) +begin if (loc<>null) or + ((token_type<>output_text)and(token_type<>backed_up)) then + @<Recover from an unbalanced output routine@>; +end_token_list; {conserve stack space in case more outputs are triggered} +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-19836 (859949) +help2("Your sneaky output routine has fewer real {'s than }'s.")@/ +("I can't handle that very well; good luck."); error; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-19855 (860894) +help2("Your sneaky output routine has problematic {'s and/or }'s.")@/ +("I can't handle that very well; good luck."); error; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-19840 (860108) +end + +@ @<Ensure that box 255 is empty after output@>= +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-19859 (861056) +end {loops forever if reading from a file, since |null=min_halfword<=0|} + +@ @<Ensure that box 255 is empty after output@>= +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-20367 (883423) + build_page; {append \.{\\hbox to \\hsize\{\}\\vss\\penalty-'10000000000}} + end; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-20386 (884440) + build_page; {append \.{\\hbox to \\hsize\{\}\\vfill\\penalty-'10000000000}} + end; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-20568 (891433) +@ It's very hard to get this error message; indeed, the case didn't arise +until more than two years after it had been programmed. + +@<Drop current token and complain that it was unmatched@>= +begin print_err("Extra "); print_cmd_chr(cur_cmd,cur_chr); +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-20587 (892452) +@ @<Drop current token and complain that it was unmatched@>= +begin print_err("Extra "); print_cmd_chr(cur_cmd,cur_chr); +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22187 (951719) +removed when they surround a single Ord character or, when they +surround an accent that is the nucleus of an Ord atom. +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22203 (952606) +removed when they surround a single Ord without sub/superscripts, or when they +surround an accent that is the nucleus of an Ord atom. +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22278 (954827) + begin cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; + mlist_to_hlist; a:=hpack(link(temp_head),natural); +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22294 (955729) + begin @<Check that another \.\$ follows@>; + cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; + mlist_to_hlist; a:=hpack(link(temp_head),natural); +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22282 (955044) + if danger then flush_math; + m:=mode; p:=fin_mlist(null); +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22299 (955986) + danger:=false; + @<Check that the necessary fonts for math symbols are present; + if not, flush the current math lists and set |danger:=true|@>; + m:=mode; p:=fin_mlist(null); +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22287 (955165) +else begin @<Check that another \.\$ follows@>; + @<Finish displayed math@>; +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22306 (956229) +else begin if a=null then @<Check that another \.\$ follows@>; + @<Finish displayed math@>; +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22365 (958481) +adjust_tail:=adjust_head; b:=hpack(p,natural); +t:=adjust_tail; adjust_tail:=null;@/ +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22384 (959560) +adjust_tail:=adjust_head; b:=hpack(p,natural); p:=list_ptr(b); +t:=adjust_tail; adjust_tail:=null;@/ +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22425 (960728) + if p<>null then if type(p)=glue_node then d:=0; + end +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22444 (961823) + if p<>null then if not is_char_node(p) then if type(p)=glue_node then d:=0; + end +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22458 (961923) +shift_amount(b):=s+d; append_to_vlist(b); +if t<>adjust_head then + begin link(tail):=link(adjust_head); tail:=t; + end + +@ @<Append the glue or equation number following the display@>= +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22477 (963046) +shift_amount(b):=s+d; append_to_vlist(b) + +@ @<Append the glue or equation number following the display@>= +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-22468 (962255) + tail_append(new_penalty(post_display_penalty)); + end +else begin tail_append(new_penalty(post_display_penalty)); + tail_append(new_param_glue(g2)); + end + +@ When \.{\\halign} appears in a display, the alignment routines operate +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-22484 (963296) + g2:=0; + end; +if t<>adjust_head then {migrating material comes after equation number} + begin link(tail):=link(adjust_head); tail:=t; + end; +tail_append(new_penalty(post_display_penalty)); +if g2>0 then tail_append(new_param_glue(g2)) + +@ When \.{\\halign} appears in a display, the alignment routines operate +*************** + +**** FILE TX:<TEX.TEX>TEX-2-993.WEB.1, 1-24221 (1024814) +if cur_level>level_one then +**** FILE TX:<TEX.NEW>TEX-3-0.WEB.1, 1-24239 (1025936) +while open_parens>0 do + begin print(" )"); decr(open_parens); + end; +if cur_level>level_one then +*************** + + +######################################################################## + +Updates to TEX82.BUG + +380. Slightly more robust recovery and detection of \output anomalies. +(Suggested by Chris Thompson, provoked by George Russell, January 1990) +@x module 1026 +begin if loc<>null then @<Recover from an unbalanced output routine@>; +@y +begin if (loc<>null) or + ((token_type<>output_text)and(token_type<>backed_up)) then + @<Recover from an unbalanced output routine@>; +@z +@x module 1027 +help2("Your sneaky output routine has fewer real {'s than }'s.")@/ +@y +help2("Your sneaky output routine has problematic {'s and/or }'s.")@/ +@z + +381. \eqno\aftergroup*$$ should yield * after the $$ (Michael Downes, 29 Jan 90) +@x module 1194 + begin cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; +@y + begin @<Check that another \.\$ follows@>; + cur_mlist:=p; cur_style:=text_style; mlist_penalties:=false; +@z +@x ibid +else begin @<Check that another \.\$ follows@>; +@y +else begin if a=null then @<Check that another \.\$ follows@>; +@z + +382. Missed a case in the 8-bit change (Wayne Sullivan, 1 Feb 1990) +@x module 360 + begin if (end_line_char<0)or(end_line_char>127) then incr(limit); +@y + begin if end_line_char_inactive then incr(limit); +@z + +383. Linebreaking needs to be more robust when total demerits get +very high (Frank Mittelbach, 22 Feb 1990) +@x module 830 +@!artificial_badness:boolean; {has |b| been forced to zero?} +@y +@!artificial_demerits:boolean; {has |d| been forced to zero?} +@z +@x module 833 (this change is cosmetic only) +@!minimal_demerits:array[very_loose_fit..tight_fit] of scaled; {best total + demerits known for current line class and position, given the fitness} +@!minimum_demerits:scaled; {best total demerits known for current line class +@y +@!minimal_demerits:array[very_loose_fit..tight_fit] of integer; {best total + demerits known for current line class and position, given the fitness} +@!minimum_demerits:integer; {best total demerits known for current line class +@z +@x module 836 here we want to ensure that total_demerits < awful_bad +minimum_demerits:=minimum_demerits+abs(adj_demerits); +@y +if abs(adj_demerits)>=awful_bad-minimum_demerits then + minimum_demerits:=awful_bad-1 +else minimum_demerits:=minimum_demerits+abs(adj_demerits); +@z +@x module 851 +begin @!stat artificial_badness:=false;@+tats@/ +@y +begin artificial_demerits:=false;@/ +@z +@x module 854 + begin b:=0; {set badness zero, this break is forced} + @!stat artificial_badness:=true;@+tats + end +@y + artificial_demerits:=true {set demerits zero, this break is forced} +@z +@x module 855 +@<Compute the demerits, |d|, from |r| to |cur_p|@>; +@y +if artificial_demerits then d:=0 +else @<Compute the demerits, |d|, from |r| to |cur_p|@>; +@z +@x module 856 +if artificial_badness then print_char("*")@+else print_int(b); +@.*\relax@> +print(" p="); print_int(pi); +print(" d="); print_int(d); +@y +if b>inf_bad then print_char("*")@+else print_int(b); +@.*\relax@> +print(" p="); print_int(pi); print(" d="); +if artificial_demerits then print_char("*")@+else print_int(d); +@z +@x module 859 +d:=line_penalty+b; d:=d*d; +@y +begin d:=line_penalty+b; +if abs(d)>=10000 then d:=100000000@+else d:=d*d; +@z +@x ibid +if abs(fit_class-fitness(r))>1 then d:=d+adj_demerits +@y +if abs(fit_class-fitness(r))>1 then d:=d+adj_demerits; +end +@z + +384. Math fonts may disappear outside of \eqno (Marc van Leeuwen). +@x module 1194 + if danger then flush_math; +@y + danger:=false; + @<Check that the necessary fonts for math symbols are present; + if not, flush the current math lists and set |danger:=true|@>; +@z + +385. Forgot to rule out charnode when testing for node type (Marc van Leeuwen). +@x module 805 + begin if type(q)=unset_node then + @<Set the unset box |q| and the unset boxes in it@> + else if type(q)=rule_node then + @<Make the running dimensions in rule |q| extend to the + boundaries of the alignment@>; +@y + begin if not is_char_node(q) then + if type(q)=unset_node then + @<Set the unset box |q| and the unset boxes in it@> + else if type(q)=rule_node then + @<Make the running dimensions in rule |q| extend to the + boundaries of the alignment@>; +@z +@x module 903 +if type(hb)=ligature_node then if odd(subtype(hb)) then +@y +if not is_char_node(hb) then + if type(hb)=ligature_node then if odd(subtype(hb)) then +@z +@x module 1202 + if p<>null then if type(p)=glue_node then d:=0; +@y + if p<>null then if not is_char_node(p) then if type(p)=glue_node then d:=0; +@z + +386. Don't change the font of punctuation before a hyphenated word + (Scott Allendorf, reported 7 Mar 90) +@x module 895 +label common_ending,done,found,found1,not_found,not_found+1,exit; +@y +label common_ending,done,found,found1,found2,not_found,exit; +@z +@x module 903 +if is_char_node(ha) then + begin init_list:=ha; init_lig:=false; hu[0]:=qo(character(ha)); + end +else if type(ha)=ligature_node then + begin init_list:=lig_ptr(ha); init_lig:=true; init_lft:=(subtype(ha)>1); + hu[0]:=qo(character(lig_char(ha))); + if init_list=null then if init_lft then + begin hu[0]:=256; init_lig:=false; + end; {in this case a ligature will be reconstructed from scratch} + free_node(ha,small_node_size); + end +else goto not_found+1; {no punctuation found} +s:=cur_p; {we have |cur_p<>ha| because |type(cur_p)=glue_node|} +while link(s)<>ha do s:=link(s); +j:=0; goto common_ending; +not_found+1: j:=1; s:=ha; init_list:=null; +if not is_char_node(r) then if type(r)=ligature_node then + if subtype(r)>1 then + begin j:=0; hu[0]:=256; init_lig:=false; + end; +@y +if is_char_node(ha) then + if font(ha)<>hf then goto found2 + else begin init_list:=ha; init_lig:=false; hu[0]:=qo(character(ha)); + end +else if type(ha)=ligature_node then + if font(lig_char(ha))<>hf then goto found2 + else begin init_list:=lig_ptr(ha); init_lig:=true; init_lft:=(subtype(ha)>1); + hu[0]:=qo(character(lig_char(ha))); + if init_list=null then if init_lft then + begin hu[0]:=256; init_lig:=false; + end; {in this case a ligature will be reconstructed from scratch} + free_node(ha,small_node_size); + end +else begin {no punctuation found; look for left boundary} + if not is_char_node(r) then if type(r)=ligature_node then + if subtype(r)>1 then goto found2; + j:=1; s:=ha; init_list:=null; goto common_ending; + end; +s:=cur_p; {we have |cur_p<>ha| because |type(cur_p)=glue_node|} +while link(s)<>ha do s:=link(s); +j:=0; goto common_ending; +found2: s:=ha; j:=0; hu[0]:=256; init_lig:=false; init_list:=null; +@z + +387. Balance the parens showing on the terminal (for Lispers). +@x module 304 +@!in_open : 0..max_in_open; {the number of lines in the buffer, less one} +@y +@!in_open : 0..max_in_open; {the number of lines in the buffer, less one} +@!open_parens : 0..max_in_open; {the number of open text files} +@z +@x module 331 +in_open:=0; max_buf_stack:=0; +@y +in_open:=0; open_parens:=0; max_buf_stack:=0; +@z +@x module 362 + begin print_char(")"); force_eof:=false; + update_terminal; {show user that file has been read} +@y + begin print_char(")"); decr(open_parens); + update_terminal; {show user that file has been read} + force_eof:=false; +@z +@x module 537 +print_char("("); print(name); update_terminal; state:=new_line; +@y +print_char("("); incr(open_parens); print(name); update_terminal; +state:=new_line; +@z +@x module 1334 +if job_name=0 then open_log_file; +@y +if job_name=0 then open_log_file; +while open_parens>0 do + begin print(" )"); decr(open_parens); + end; +@z + +388. Optimize \ifx\p\q after \let\p=\q (Marc van Leeuwen says that + AmS-TeX uses this a lot). +@x module 508 + while (p<>null)and(q<>null) do + if info(p)<>info(q) then p:=null + else begin p:=link(p); q:=link(q); + end; +b:=((p=null)and(q=null)); +@y +if p=q then b:=true +else begin while (p<>null)and(q<>null) do + if info(p)<>info(q) then p:=null + else begin p:=link(p); q:=link(q); + end; + b:=((p=null)and(q=null)); + end; +@z +@x module 538 (while we're at it, might as well optimize this too) +begin if not input_ln(cur_file,false) then do_nothing; +@y +begin if input_ln(cur_file,false) then do_nothing; +@z +@x module 1020 (and this) +else begin wait:=false; s:=ins_ptr(p); + link(last_ins_ptr(r)):=s; s:=last_ins_ptr(r); +@y +else begin wait:=false; s:=last_ins_ptr(r); link(s):=ins_ptr(p); +@z + +389. Treat migration properly in displays (Marc van Leeuwen). +@x module 1199 (a bad bug that really has bitten) +adjust_tail:=adjust_head; b:=hpack(p,natural); +@y +adjust_tail:=adjust_head; b:=hpack(p,natural); p:=list_ptr(b); +@z +@x module 1204 +shift_amount(b):=s+d; append_to_vlist(b); +if t<>adjust_head then + begin link(tail):=link(adjust_head); tail:=t; + end +@y +shift_amount(b):=s+d; append_to_vlist(b) +@z +@x module 1205 + tail_append(new_penalty(post_display_penalty)); + end +else begin tail_append(new_penalty(post_display_penalty)); + tail_append(new_param_glue(g2)); + end +@y + g2:=0; + end; +if t<>adjust_head then {migrating material comes after equation number} + begin link(tail):=link(adjust_head); tail:=t; + end; +tail_append(new_penalty(post_display_penalty)); +if g2>0 then tail_append(new_param_glue(g2)) +@z + +-----------Here I draw the line with respect to further changes + +390. (I sincerely hope that there won't be any more) + + +######################################################################## + +New files at labrea.stanford.edu since 6 Jan 90 + +/tex: +-rw-rw-r-- 1 0 5 1444 Jan 8 22:34 CHANGES.Jan90 * +-rw-rw-r-- 1 0 5 928 Mar 25 16:44 CHANGES.Mar90 * +-rw-rw-r-- 1 0 5 3283 Mar 25 16:43 README * + +/tex/cm: +-rw-r--r-- 1 0 5 39792 Mar 25 16:16 romanl.mf * +-rw-r--r-- 1 0 5 43157 Mar 25 16:16 symbol.mf * + +/tex/errata: +-rw-r--r-- 1 0 5 39891 Mar 25 16:16 cm85.bug * +-rw-r--r-- 1 0 5 12359 Mar 25 16:16 errata.tex * +-rw-r--r-- 1 0 5 121688 Mar 25 16:17 errorlog.tex * +-rw-r--r-- 1 0 5 78087 Mar 25 16:17 mf84.bug * +-rw-r--r-- 1 0 5 293189 Mar 25 16:17 tex82.bug * + +/tex/etc: +-rw-r--r-- 1 0 5 87839 Feb 7 11:25 vftovp.web * +-rw-r--r-- 1 0 5 122079 Jan 30 09:48 vptovf.web * + +/tex/fonts: +-rw-rw-r-- 1 0 5 256 Mar 19 13:52 logo9.tfm * +-rw-rw-r-- 1 0 5 552 Jan 28 1989 ransom10.tfm * + +/tex/gf: +-rw-r--r-- 1 0 5 7464 Jan 28 1989 ransom10.300gf * + +/tex/latex: + [ lcircle*.mf renamed from circle*.mf ] +-rw-rw-r-- 1 0 5 125 Apr 3 1986 lcircle10.mf * +-rw-rw-r-- 1 0 5 125 Apr 3 1986 lcirclew10.mf * + +/tex/lib: +-rw-r--r-- 1 0 5 22394 Mar 25 16:17 plain.mf * +-rw-r--r-- 1 0 5 43760 Mar 25 16:17 plain.tex * +-rw-r--r-- 1 0 5 9204 Mar 25 16:17 testfont.tex * +-rw-r--r-- 1 0 5 9992 Mar 25 16:18 webmac.tex * + +/tex/latex: + [ lcircle*.mf renamed from circle*.mf ] +-rw-rw-r-- 1 0 5 125 Apr 3 1986 lcircle10.mf * +-rw-rw-r-- 1 0 5 125 Apr 3 1986 lcirclew10.mf * + +/tex/local/etc: +-rw-r--r-- 1 0 5 772 Jan 3 18:10 Makefile * +-rw-r--r-- 1 0 5 10843 Mar 25 16:18 vftovp.ch * +-rw-r--r-- 1 0 5 4384 Jan 3 23:26 vptovf.ch * + +/tex/local/lib: +-rw-r--r-- 1 0 5 5307 Jan 7 22:39 epsf.tex * +-rw-r--r-- 1 0 5 3201 Jan 6 02:17 fontchart.tex * +-rw-r--r-- 1 0 5 33672 Jan 7 13:32 gkpmac.tex * +-rw-r--r-- 1 0 5 4300 Jan 8 09:59 letter.tex * +-rw-r--r-- 1 0 5 1485 Jan 5 18:24 list.tex * +-rw-r--r-- 1 0 5 2083 Jan 5 20:22 llist.tex * +-rw-r--r-- 1 0 5 8220 Mar 25 16:18 picmac.tex * +-rw-r--r-- 1 0 5 1936 Jan 7 22:39 rotate.tex * + +/tex/local/man1: +-rwxr--r-- 1 0 5 6513 Oct 29 20:13 tex.1 * +-rw-r--r-- 1 0 5 791 Dec 30 23:07 vftovp.1 * +-rw-r--r-- 1 0 5 848 Dec 30 23:14 vptovf.1 * + +/tex/local/mf: +-rw-r--r-- 1 0 5 1958 Jan 7 21:53 Makefile * +-rw-r--r-- 1 0 5 54080 Mar 25 16:18 inimf.ch * +-rw-r--r-- 1 0 5 22157 Mar 25 16:18 mf.pool * +-rw-r--r-- 1 0 5 690 Mar 25 16:18 plain.log * + +/tex/local/mfware: +-rw-r--r-- 1 0 5 996 Nov 8 11:59 Makefile * +-rw-r--r-- 1 0 5 11456 Nov 23 00:04 gftopk.ch * +-rw-r--r-- 1 0 5 8404 Nov 18 21:58 pktype.ch * +-rw-r--r-- 1 0 5 47330 Nov 18 21:56 pktype.web * + +/tex/local/tex: +-rw-r--r-- 1 0 5 1873 Jan 7 21:51 Makefile * +-rwxr--r-- 1 0 5 664 Oct 30 18:21 ini_to_trip * +-rwxr--r-- 1 0 5 447 Nov 30 14:03 ini_to_vir * +-rw-r--r-- 1 0 5 53593 Mar 25 16:18 initex.ch * +-rw-r--r-- 1 0 5 165468 Jan 8 00:31 plain.fmt * +-rw-r--r-- 1 0 5 2367 Mar 25 16:18 plain.log * +-rw-r--r-- 1 0 5 25675 Mar 25 16:18 tex.pool * + +/tex/local/texware: +-rw-r--r-- 1 0 5 809 Dec 11 23:14 Makefile * +-rw-r--r-- 1 0 5 16127 Jan 2 18:07 dvitype.ch * +-rw-r--r-- 1 0 5 4454 Jan 3 23:30 pltotf.ch * +-rw-r--r-- 1 0 5 7033 Dec 10 23:40 tftopl.ch * + +/tex/local/web: +-rw-r--r-- 1 0 5 682 Nov 8 12:00 Makefile * +-rw-r--r-- 1 0 5 20055 Mar 25 16:18 weave.ch * + +/tex/mf: +total 2013 +-rw-r--r-- 1 0 5 916616 Mar 25 16:20 mf.web * +-rw-r--r-- 1 0 5 938281 Mar 25 16:21 mfbook.tex * +-rw-r--r-- 1 0 5 1703 Mar 25 16:21 trap.fot * +-rw-r--r-- 1 0 5 121719 Mar 25 16:21 trap.log * +-rw-r--r-- 1 0 5 11842 Mar 25 16:21 trap.mf * +-rw-r--r-- 1 0 5 10388 Dec 20 13:04 trap.pl +-rw-r--r-- 1 0 5 4550 Mar 25 16:21 trap.typ * +-rw-r--r-- 1 0 5 4586 Mar 25 16:21 trapin.log * +-rw-r--r-- 1 0 5 18249 Dec 4 20:32 trapman.tex + +/tex/mfware: +-rw-r--r-- 1 0 5 186565 Jan 2 14:16 gftodvi.web * +-rw-r--r-- 1 0 5 92291 Nov 23 00:04 gftopk.web * +-rw-r--r-- 1 0 5 74981 Dec 4 16:19 mft.web * + +/tex/patches: +total 131 +-rw-rw-r-- 1 0 5 842 Mar 25 16:40 TeX3.0.patch1 * +-rw-rw-r-- 1 0 5 2999 Mar 25 16:40 TeX3.0.patch2 * +-rw-rw-r-- 1 0 5 48519 Mar 25 16:40 TeX3.0.patch3 * +-rw-rw-r-- 1 0 5 39542 Mar 25 16:40 TeX3.0.patch4 * +-rw-rw-r-- 1 0 5 40546 Mar 25 16:40 TeX3.0.patch5 * + +/tex/tex: +total 2662 +-rw-r--r-- 1 0 5 1025443 Mar 25 16:23 tex.web * +-rw-r--r-- 1 0 5 1381711 Mar 25 16:25 texbook.tex * +-rw-r--r-- 1 0 5 2437 Mar 25 16:25 trip.fot * +-rw-r--r-- 1 0 5 182686 Mar 25 16:25 trip.log * +-rw-r--r-- 1 0 5 16990 Oct 6 09:35 trip.pl +-rw-r--r-- 1 0 5 22555 Mar 25 16:25 trip.tex * +-rw-r--r-- 1 0 5 18025 Mar 25 16:25 trip.typ * +-rw-r--r-- 1 0 5 12931 Mar 25 16:25 tripin.log * +-rw-r--r-- 1 0 5 19227 Dec 4 19:51 tripman.tex +-rw-r--r-- 1 0 5 58 May 30 1983 tripos.tex + +/tex/tugboat: +-rw-r--r-- 1 0 5 32405 Feb 26 13:36 guidepro.tex * +-rw-r--r-- 1 0 5 12488 Feb 26 13:35 ltugboat.sty * +-rw-r--r-- 1 0 5 22349 Feb 26 13:35 tugboat.com * +-rw-r--r-- 1 0 5 64456 Feb 26 13:35 tugboat.sty * +-rw-r--r-- 1 0 5 6154 Feb 26 13:35 tugproc.sty * + +/tex/web: +total 416 +-rw-r--r-- 1 0 5 129556 Oct 6 17:57 tangle.web +-rw-r--r-- 1 0 5 185497 Mar 25 16:26 weave.web * +-rw-r--r-- 1 0 5 89194 Mar 25 16:26 webman.tex * + + +######################################################################## + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Character code reference +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Upper case letters: ABCDEFGHIJKLMNOPQRSTUVWXYZ +% Lower case letters: abcdefghijklmnopqrstuvwxyz +% Digits: 0123456789 +% Square, curly, angle braces, parentheses: [] {} <> () +% Backslash, slash, vertical bar: \ / | +% Punctuation: . ? ! , : ; +% Underscore, hyphen, equals sign: _ - = +% Quotes--right left double: ' ` " +%"at", "number" "dollar", "percent", "and": @ # $ % & +% "hat", "star", "plus", "tilde": ^ * + ~ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[ end of message 024 ] |