Below are upates to TeX.WEB, MF.WEB, and PLAIN.TeX. Differences between TeX.WEB for 2.92 and for 2.9 **** FILE TX:TEX-2-92.WEB.1, 1-28 (1880) % Version 2.91 fixes \outer\def\a0{}\a\a bug (April 1988). % Version 2.92 fixes \patterns, also file names with complex macros (May 1988). % A reward of $81.92 will be paid to the first finder of any remaining bug. % (This amount will double again in 1989.) % Although considerable effort has been expended to make the TeX program **** FILE TX:TEX-2-9.WEB.1, 1-29 (1882) % A reward of $40.96 will be paid to the first finder of any remaining bug. % (This amount will double again in 1988.) % Although considerable effort has been expended to make the TeX program *************** **** FILE TX:TEX-2-92.WEB.1, 2-93 (9207) @d banner=='This is TeX, Version 2.92' {printed when \TeX\ starts} @ Different \PASCAL s have slightly different conventions, and the present **** FILE TX:TEX-2-9.WEB.1, 2-93 (9066) @d banner=='This is TeX, Version 2.9' {printed when \TeX\ starts} @ Different \PASCAL s have slightly different conventions, and the present *************** **** FILE TX:TEX-2-92.WEB.1, 19-61 (240552) @!d:integer; {number of characters already in current string} @!p:pointer; {index in |hash| array} **** FILE TX:TEX-2-9.WEB.1, 19-61 (240410) @!p:pointer; {index in |hash| array} *************** **** FILE TX:TEX-2-92.WEB.1, 19-88 (241492) str_room(l); d:=cur_length; while pool_ptr>str_start[str_ptr] do begin decr(pool_ptr); str_pool[pool_ptr+l]:=str_pool[pool_ptr]; end; {move current string up to make room for another} for k:=j to j+l-1 do append_char(buffer[k]); text(p):=make_string; pool_ptr:=pool_ptr+d; @!stat incr(cs_count);@+tats@;@/ **** FILE TX:TEX-2-9.WEB.1, 19-87 (241287) str_room(l); for k:=j to j+l-1 do append_char(buffer[k]); text(p):=make_string; @!stat incr(cs_count);@+tats@;@/ *************** **** FILE TX:TEX-2-92.WEB.1, 20-77 (255280) @!group_code=0..max_group_code; {|save_level| for a level boundary} @ The global variable |cur_group| keeps track of what sort of group we are **** FILE TX:TEX-2-9.WEB.1, 20-77 (254875) @!group_code=0..max_group_code; {|save_index| for a level boundary} @ The global variable |cur_group| keeps track of what sort of group we are *************** **** FILE TX:TEX-2-92.WEB.1, 25-31 (308968) @!par_token:halfword; {token representing `\.{\\par}'} @ @= **** FILE TX:TEX-2-9.WEB.1, 25-31 (308563) @!par_token:halfword; {token representing '\.{\\par}'} @ @= *************** **** FILE TX:TEX-2-92.WEB.1, 25-372 (322487) @ The present point in the program is reached only when the |expand| routine has inserted a special marker into the input. In this special **** FILE TX:TEX-2-9.WEB.1, 25-372 (322082) @ The present point in the program is reached only when the |no_expand| routine has inserted a special marker into the input. In this special *************** **** FILE TX:TEX-2-92.WEB.1, 26-375 (343630) repeat link(temp_head):=null; if (info(r)>match_token+127)or(info(r)TEX-2-9.WEB.1, 26-375 (343228) repeat if (info(r)>match_token+127)or(info(r)TEX-2-92.WEB.1, 27-675 (378115) are |x| sp per unit; |goto attach_sign| if the units are internal@>; @; **** FILE TX:TEX-2-9.WEB.1, 27-675 (377704) are |x| units per sp; |goto attach_sign| if the units are internal@>; @; *************** **** FILE TX:TEX-2-92.WEB.1, 28-13 (388583) @p function str_toks(@!b:pool_pointer):pointer; {changes the string |str_pool[b..pool_ptr]| to a token list} var p:pointer; {tail of the token list} **** FILE TX:TEX-2-9.WEB.1, 28-13 (388173) @p function str_toks:pointer; {changes the current string to a token list} var p:pointer; {tail of the token list} *************** **** FILE TX:TEX-2-92.WEB.1, 28-20 (388915) p:=temp_head; link(p):=null; k:=b; while kTEX-2-9.WEB.1, 28-19 (388468) p:=temp_head; link(p):=null; k:=str_start[str_ptr]; while kTEX-2-92.WEB.1, 28-28 (389103) pool_ptr:=b; str_toks:=p; end; **** FILE TX:TEX-2-9.WEB.1, 28-27 (388673) pool_ptr:=str_start[str_ptr]; str_toks:=p; end; *************** **** FILE TX:TEX-2-92.WEB.1, 28-40 (389611) @!b:pool_pointer; {base of temporary string} begin get_x_token; scan_something_internal(tok_val,false); if cur_val_level>=ident_val then @ else begin old_setting:=selector; selector:=new_string; b:=pool_ptr; case cur_val_level of **** FILE TX:TEX-2-9.WEB.1, 28-39 (389198) begin get_x_token; scan_something_internal(tok_val,false); if cur_val_level>=ident_val then @ else begin old_setting:=selector; selector:=new_string; case cur_val_level of *************** **** FILE TX:TEX-2-92.WEB.1, 28-53 (390161) selector:=old_setting; the_toks:=str_toks(b); end; **** FILE TX:TEX-2-9.WEB.1, 28-51 (389689) selector:=old_setting; the_toks:=str_toks; end; *************** **** FILE TX:TEX-2-92.WEB.1, 28-117 (392508) @!b:pool_pointer; {base of temporary string} begin c:=cur_chr; @; old_setting:=selector; selector:=new_string; b:=pool_ptr; @; selector:=old_setting; link(garbage):=str_toks(b); ins_list(link(temp_head)); end; **** FILE TX:TEX-2-9.WEB.1, 28-115 (392033) begin c:=cur_chr; @; old_setting:=selector; selector:=new_string; @; selector:=old_setting; link(garbage):=str_toks; ins_list(link(temp_head)); end; *************** **** FILE TX:TEX-2-92.WEB.1, 30-262 (427879) begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings)or (cur_length>0) then make_name_string:="?" **** FILE TX:TEX-2-9.WEB.1, 30-262 (427342) begin if (pool_ptr+name_length>pool_size)or(str_ptr=max_strings) then make_name_string:="?" *************** **** FILE TX:TEX-2-92.WEB.1, 35-281 (573403) `\.\_' or `\.\~' or `\./' or `\.\\' if |p| is descended from the |subscr| or |supscr| or |denominator| or |numerator| fields of noads. For example, **** FILE TX:TEX-2-9.WEB.1, 35-281 (572846) `\.[' or `\.(' or `\./' or `\.\\' if |p| is descended from the |subscr| or |supscr| or |denominator| or |numerator| fields of noads. For example, *************** **** FILE TX:TEX-2-92.WEB.1, 43-68 (756339) to the impossible value 128, in order to guarantee that |hc[hn+3]| will never be fetched. **** FILE TX:TEX-2-9.WEB.1, 43-68 (755780) to the impossible value 256, in order to guarantee that |hc[hn+3]| will never be fetched. *************** **** FILE TX:TEX-2-92.WEB.1, 43-75 (756649) hc[0]:=127; hc[hn+1]:=127; hc[hn+2]:=128; {insert delimiters} for j:=0 to hn-2 do **** FILE TX:TEX-2-9.WEB.1, 43-75 (756090) hc[0]:=127; hc[hn+1]:=127; hc[hn+2]:=256; {insert delimiters} for j:=0 to hn-2 do *************** **** FILE TX:TEX-2-92.WEB.1, 43-196 (761319) until coming to a right brace; then |return|@>; exit:end; **** FILE TX:TEX-2-9.WEB.1, 43-196 (760760) until coming to a right brace; then skip an optional space and |return|@>; exit:end; *************** **** FILE TX:TEX-2-92.WEB.1, 44-201 (773038) trie_link(trie_size):=0; trie_back(0):=trie_size; {wrap around} for p:=1 to 128 do **** FILE TX:TEX-2-9.WEB.1, 44-201 (772506) for p:=1 to 128 do *************** **** FILE TX:TEX-2-92.WEB.1, 44-233 (774482) begin c:=trie_c[p]; if cTEX-2-9.WEB.1, 44-232 (773885) begin c:=trie_c[p]; {we have |c>0|} if cTEX-2-92.WEB.1, 44-345 (779179) brace@>; trie_root:=compress_trie(trie_root); {compress the trie} **** FILE TX:TEX-2-9.WEB.1, 44-343 (778549) brace; then skip an optional space@>; trie_root:=compress_trie(trie_root); {compress the trie} *************** **** FILE TX:TEX-2-92.WEB.1, 44-443 (782387) r:=trie_size; {finally, we will zero out the holes} h.rh:=0; h.b0:=min_quarterword; h.b1:=0; {|trie_link:=0|, **** FILE TX:TEX-2-9.WEB.1, 44-441 (781786) r:=0; {finally, we will zero out the holes} h.rh:=0; h.b0:=min_quarterword; h.b1:=0; {|trie_link:=0|, *************** ######################################################################## Differences between new and previous Plain.TeX **** FILE PS:PLAIN.TEX.2, 6-244 (33253) \def\arrowvert{\delimiter"33C000 } % arrow without arrowheads \def\Arrowvert{\delimiter"33D000 } % double arrow without arrowheads \def\bracevert{\delimiter"33E000 } % the vertical bar that extends braces **** FILE PS:PLAIN.TEX.1, 1-951 (33258) \def\arrowvert{\delimiter"33C } % arrow without arrowheads \def\Arrowvert{\delimiter"33D } % double arrow without arrowheads \def\bracevert{\delimiter"33E } % the vertical bar that extends braces *************** **** FILE PS:PLAIN.TEX.2, 8-22 (44482) \def\fmtname{plain}\def\fmtversion{2.92} % identifies the current format **** FILE PS:PLAIN.TEX.1, 1-1220 (44480) \def\fmtname{plain}\def\fmtversion{2.3} % identifies the current format *************** ######################################################################## Differences between MF.WEB for 1.4 and for 1.3 **** FILE PS:<1SCRATCH>MF.WEB.1, 1-15 (870) % Version 1.4 corrected scan_declared_variable timing (May 1988). % A few "harmless" optimizations have been made since then. % A reward of $20.48 will be paid to the first finder of any remaining bug. % (This amount will double again in 1989.) % Although considerable effort has been expended to make the METAFONT program **** FILE PS:MF.WEB.1, 1-15 (870) % A few "harmless" optimizations have been made since then. % A reward of $10.24 will be paid to the first finder of any remaining bug. % (This amount will double again in 1988.) % Although considerable effort has been expended to make the METAFONT program *************** **** FILE PS:<1SCRATCH>MF.WEB.1, 2-81 (7574) @d banner=='This is METAFONT, Version 1.4' {printed when \MF\ starts} @ Different \PASCAL s have slightly different conventions, and the present **** FILE PS:MF.WEB.1, 1-146 (7508) @d banner=='This is METAFONT, Version 1.3' {printed when \MF\ starts} @ Different \PASCAL s have slightly different conventions, and the present *************** **** FILE PS:<1SCRATCH>MF.WEB.1, 43-1162 (768090) if txx mod unity=0 then if tyy mod unity=0 then @; **** FILE PS:MF.WEB.1, 1-18695 (768065) if txy mod unity=0 then if tyy mod unity=0 then @; *************** **** FILE PS:<1SCRATCH>MF.WEB.1, 44-399 (798211) h:=get_avail; info(h):=x; t:=h;@/ **** FILE PS:MF.WEB.1, 1-19495 (798187) if equiv(x)=null then new_root(x); h:=get_avail; info(h):=x; t:=h;@/ *************** **** FILE PS:<1SCRATCH>MF.WEB.1, 44-407 (798526) done: if eq_type(x)<>tag_token then clear_symbol(x,false); if equiv(x)=null then new_root(x); scan_declared_variable:=h; end; **** FILE PS:MF.WEB.1, 1-19504 (798538) done:scan_declared_variable:=h; end; ***************