DIFFERENCES BETWEEN KNUTH'S MASTER FILES: THE FILES RELEASED A YEAR AGO VERSUS THE FILES AS OF 16 MAR 92 ("oldtex" files have the date 16 March because they were retrieved today from labrea sources) diff -r -c2 oldtex/dist/cm/calu.mf newtex/dist/cm/calu.mf *** oldtex/dist/cm/calu.mf Mon Mar 16 11:05:01 1992 --- newtex/dist/cm/calu.mf Sun Jan 12 23:14:02 1992 *************** *** 77,84 **** adjust_fit(-.1w#,-u#); pickup cal.nib; x1=.5w; x3=.4w; lft x4=.1w; x5=x2+.35w; x6=.7[x1,x7]; rt x7=w; ! top y1=top y6=h; z2=.5[z3,z1]+bend; bot y3=-o; y4=.1h; y5=y2; y7=.9h; draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem ! draw z1-flourish_change{up}...z1---z6...{down}z7; % upper bar draw z2--z5--z5-(0,.1cap_curve); % middle bar math_fit(0,.5ic#); labels(1,2,3,4,5,6,7); endchar; --- 77,84 ---- adjust_fit(-.1w#,-u#); pickup cal.nib; x1=.5w; x3=.4w; lft x4=.1w; x5=x2+.35w; x6=.7[x1,x7]; rt x7=w; ! top y1=top y6=h; z2=.5[z3,z1]+1.2bend; bot y3=-o; y4=.1h; y5=y2; y7=.9h; draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem ! draw z1-flourish_change{up}...(z1-(u,0))---z6...{down}z7; % upper bar draw z2--z5--z5-(0,.1cap_curve); % middle bar math_fit(0,.5ic#); labels(1,2,3,4,5,6,7); endchar; *************** *** 102,112 **** italcorr max(h#*slant-.2w#,.15h#*slant)+.5u#; adjust_fit(4u#,0); pickup cal.nib; ! lft x1=lft x3=0; rt x4=rt x6=.8w; rt x9=w; ! top y1=top y4=h; bot y3=-o; bot y6=bot_flourish_line; y9=y6+.1h; ! z2=.6[z3,z1]+bend; z5=.4[z6,z4]-2bend; path p[]; p1=flex(z1,z2,z3); p2=flex(z4,z5,z6); ! p3=(-w,.55h)--(2w,.55h); ! lft z7=p3 intersectionpoint p1; rt z8=p3 intersectionpoint p2; ! draw (z1-flourish_change{up}....z1-(u,0)---z1) softjoin p1; % left stem draw p2 softjoin (z6{right}...{up}z9); % right stem draw z7--z8; % bar --- 102,112 ---- italcorr max(h#*slant-.2w#,.15h#*slant)+.5u#; adjust_fit(4u#,0); pickup cal.nib; ! lft x1=lft x3=.5u; rt x4=rt x6=.8w-.6u; rt x9=w; ! top y1=top y4=h; bot y3=-.06h; bot y6=bot_flourish_line; y9=y6+.1h; ! z2=.6[z3,z1]+bend; z5=.4[z6,z4]-bend; path p[]; p1=flex(z1,z2,z3); p2=flex(z4,z5,z6); ! p3=(-w,.45h)--(2w,.45h); ! rt z7+2bend=p3 intersectionpoint p1; rt z8=p3 intersectionpoint p2; ! draw (z1-flourish_change-bend{curl2}....z1-(u,0)---z1) softjoin p1; % left stem draw p2 softjoin (z6{right}...{up}z9); % right stem draw z7--z8; % bar *************** *** 118,122 **** italcorr max(h#*slant+.5cap_curve#-.2w#,.15h#*slant)+.5u#; adjust_fit(0,0); pickup cal.nib; ! lft x0=0; x1=.9w; x2=x4=.5w; x5=.2w; x6=.75w; rt x7=w; y0=.8h; top y1=top y2=h; z3=.5[z4,z2]+bend; bot y4=bot y5=bot y6=0; y7=.15h; --- 118,122 ---- italcorr max(h#*slant+.5cap_curve#-.2w#,.15h#*slant)+.5u#; adjust_fit(0,0); pickup cal.nib; ! lft x0=0; x1=.9w; x2=x4=.5w; x5=.2w; x6=.8w; rt x7=1.05w; y0=.8h; top y1=top y2=h; z3=.5[z4,z2]+bend; bot y4=bot y5=bot y6=0; y7=.15h; *************** *** 287,299 **** italcorr h#*slant+.5u#; adjust_fit(0,-.5u#); pickup heavy_cal.nib; ! x1=x3=.5w; lft x4=0; x5=w-x6=.25w; rt x7=w; ! top y1=h; bot y3=0; y4=5/7h; top y5=top y6=h; top y7=1.05h; ! z2=.5[z3,z1]+bend; ! x1-x8=x9-x1=2u; y8=y9=y3; ! z0=1/3[z1,z6]; ! draw z0{left}...z2{down}...{left}z8; % stem ! draw z8--z9; % foot ! draw z4{up}...z5{right}...z6{right}...{up}z7; % arms ! math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7,8,9); endchar; cmchar "Calligraphic U"; --- 287,298 ---- italcorr h#*slant+.5u#; adjust_fit(0,-.5u#); pickup heavy_cal.nib; ! x1=.47w; x3=.5w; lft x4=0; x5=.25w; x6=.85w; rt x7=1.05w; ! top y1=h; bot y3=-.1h; y4=3/4h; top y5=top y6=h; top y7=1.05h; ! z2=.3[z3,z1]+bend; ! top y0=y1; x0=x2; ! z8=(2u,.2h); ! draw z0---z2...z3; % stem ! draw z4{curl 2}...z5{right}...z6{right}...{up}z7; % arms ! math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7); endchar; cmchar "Calligraphic U"; diff -r -c2 oldtex/dist/cm/cmbase.mf newtex/dist/cm/cmbase.mf *** oldtex/dist/cm/cmbase.mf Mon Mar 16 11:05:02 1992 --- newtex/dist/cm/cmbase.mf Fri Jan 10 20:24:30 1992 *************** *** 454,458 **** --- 454,464 ---- newinternal l,r,shrink_fit; % adjustments to spacing + def do_expansion(expr expansion_factor) = + forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: + $:=$.#*expansion_factor*hppp; endfor + enddef; + def normal_adjust_fit(expr left_adjustment,right_adjustment) = + numeric charwd_in; charwd_in=charwd; l:=-hround(left_adjustment*hppp)-letter_fit; interim xoffset:=-l; *************** *** 460,471 **** r:=l+hround(charwd*hppp)-shrink_fit; w:=r-hround(right_adjustment*hppp)-letter_fit; enddef; def mono_adjust_fit(expr left_adjustment,right_adjustment) = numeric expansion_factor; mono_charwd#=2letter_fit# +expansion_factor*(charwd+left_adjustment+right_adjustment); - forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: - $:=$.#*expansion_factor*hppp; endfor l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; interim xoffset:=-l; --- 466,477 ---- r:=l+hround(charwd*hppp)-shrink_fit; w:=r-hround(right_adjustment*hppp)-letter_fit; + do_expansion(w/(charwd_in*hppp)); enddef; def mono_adjust_fit(expr left_adjustment,right_adjustment) = + numeric charwd_in; charwd_in=charwd; numeric expansion_factor; mono_charwd#=2letter_fit# +expansion_factor*(charwd+left_adjustment+right_adjustment); l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; interim xoffset:=-l; *************** *** 473,476 **** --- 479,483 ---- w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit; charwd:=mono_charwd#; charic:=mono_charic#; + do_expansion(w/(charwd_in*hppp)); enddef; diff -r -c2 oldtex/dist/cm/greekl.mf newtex/dist/cm/greekl.mf *** oldtex/dist/cm/greekl.mf Mon Mar 16 11:05:22 1992 --- newtex/dist/cm/greekl.mf Fri Mar 6 15:48:51 1992 *************** *** 65,80 **** italcorr .9asc_height#*slant+.5hair#-1.5u#; adjust_fit(0,0); pickup fine.nib; ! pos1(hair,-180); pos2(vair,-90); ! numeric theta; theta=angle(18u,-h); ! pos3(stem,theta+90); pos4(stem,theta+90); pos5(1/4[hair,stem],20); ! pos6(vair,-90); pos7(curve,-180); pos8(vair,-270); ! rt x1l=hround(w-2u+.5hair); x2=.5w; x3r=3u; rt x5r=hround(w-u); ! x4=x6=x8=.5w+.5u; lft x7r=hround(1.5u-.5curve); ! top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8; ! z4-z3=whatever*(18u,-h); y5=y7=.5[y6,y8]; bot y6=-oo; ! filldraw stroke z1e{x2-x1,3(y2-y1)}...z2e{left}...z3e---z4e ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl math_fit(-.3x_height#*slant+.5curve#-u#,.7x_height#*slant-.5u#); ! penlabels(1,2,3,4,5,6,7,8); endchar; cmchar "Lowercase Greek epsilon"; --- 65,86 ---- italcorr .9asc_height#*slant+.5hair#-1.5u#; adjust_fit(0,0); pickup fine.nib; ! x0=-u; y0=1.1h; ! numeric light_flare; light_flare=2/3[vair,flare]; ! x1=w-2u-.5light_flare; y1=h-.5light_flare; ! numeric theta; theta=angle (z1-z0); ! pos1(light_flare,theta-90); pos2(.2[vair,light_flare],-90); pos3(vair,theta); ! x2=x3+u; y2=h; ! x4=x6=.5w+.5u; top y8r=x_height+oo; z4=z8; ! pos6(vair,-90); pos7(stem,-180); pos8(vair,-270); ! pos4(stem,angle(z4-z0)+90); pos5(stem,30); ! z3=.5[.5[z1,z4],z0]; ! y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; ! lft x7r=hround(1.4u-.5stem); rt x5r=hround(w-u); ! filldraw stroke z1e{z0-z1e}....z2e....z3e{(z0-z1)rotated 90} ! ...z4e{z4e-.8[z4,z0]} ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl + filldraw z1r{z1r-z0}...z1l{z0-z1l}--cycle; % bulb math_fit(-.3x_height#*slant+.5curve#-u#,.7x_height#*slant-.5u#); ! penlabels(0,1,2,3,4,5,6,7,8); endchar; cmchar "Lowercase Greek epsilon"; diff -r -c2 oldtex/dist/cm/romms.mf newtex/dist/cm/romms.mf *** oldtex/dist/cm/romms.mf Mon Mar 16 11:05:32 1992 --- newtex/dist/cm/romms.mf Fri Mar 6 15:11:55 1992 *************** *** 9,16 **** beginchar(oct"050",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; ! y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; --- 9,18 ---- beginchar(oct"050",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); ! pos3(rule_thickness,0); pos4(rule_thickness,0); y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; ! y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; *************** *** 24,31 **** beginchar(oct"051",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; ! y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; --- 26,35 ---- beginchar(oct"051",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); ! pos3(rule_thickness,0); pos4(rule_thickness,0); y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; ! y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; *************** *** 39,46 **** beginchar(oct"052",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); ! y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; --- 43,52 ---- beginchar(oct"052",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); ! pos3(rule_thickness,0); pos4(rule_thickness,0); y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); ! y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; *************** *** 54,61 **** beginchar(oct"053",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); ! y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; --- 60,69 ---- beginchar(oct"053",18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); ! pos3(rule_thickness,0); pos4(rule_thickness,0); y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); ! y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; diff -r -c2 oldtex/dist/cm/sym.mf newtex/dist/cm/sym.mf *** oldtex/dist/cm/sym.mf Mon Mar 16 11:05:33 1992 --- newtex/dist/cm/sym.mf Fri Mar 6 15:35:17 1992 *************** *** 83,93 **** adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); ! pos3(bar,90); pos4(bar,90); lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; ! x0=x1=x2; bot y0=-d; x0-x3=x4-x0=3u+eps; ! y3=y4=y0+.24asc_height+eps; ! pos5(bar,angle(z4-z0)); z5l=z0; ! pos6(bar,angle(z3-z0)); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; --- 83,93 ---- adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); ! pos3(rule_thickness,90); pos4(rule_thickness,90); lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; ! x0=x1=x2; bot y0=-d; x0-x3=x4-x0=if monospace:3u else:4u fi+eps; ! y3=y4=y0+if monospace:.24 else:.36 fi asc_height+eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; *************** *** 102,112 **** adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); ! pos3(bar,90); pos4(bar,90); lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; ! x0=x1=x2; top y0=h; x0-x3=x4-x0=3u+eps; ! y3=y4=y0-.24asc_height-eps; ! pos5(bar,angle(z4-z0)); z5l=z0; ! pos6(bar,angle(z3-z0)); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; --- 102,112 ---- adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); ! pos3(rule_thickness,90); pos4(rule_thickness,90); lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; ! x0=x1=x2; top y0=h; x0-x3=x4-x0=if monospace:3u else:4u fi+eps; ! y3=y4=y0-if monospace:.24 else:.36 fi asc_height-eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; *************** *** 120,128 **** beginchar(left_arrow,18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; ! y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; --- 120,131 ---- beginchar(left_arrow,18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); ! pos3(rule_thickness,0); pos4(rule_thickness,0); y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; ! y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; ! x3=x4=x0+if monospace:3u else:4u fi+eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; *************** *** 136,144 **** beginchar(right_arrow,18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); ! y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; --- 139,150 ---- beginchar(right_arrow,18u#,v_center(spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); ! pos3(rule_thickness,0); pos4(rule_thickness,0); y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); ! y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; ! x3=x4=x0-if monospace:3u else:4u fi-eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; *************** *** 153,162 **** v_center(if monospace:.6asc_height#+fi spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u; if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi; ! y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; --- 159,171 ---- v_center(if monospace:.6asc_height#+fi spread#+rule_thickness#)); adjust_fit(0,0); pickup crisp.nib; ! pos1(rule_thickness,90); pos2(rule_thickness,90); ! pos3(rule_thickness,0); pos4(rule_thickness,0); y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u; if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi; ! y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; ! x3=x4=x0+if monospace:3u else:4u fi+eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p; *************** *** 164,174 **** --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) --z3l{z9-z3}..z0 & cycle; % left arrowhead and stem ! pos11(rule_thickness,90); pos12(rule_thickness,90); pos13(bar,0); pos14(bar,0); y10=y11=y12=math_axis if monospace:-vround.3asc_height fi; rt x10=hround(w-u); if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi; ! y13-y10=y10-y14=.24asc_height+eps; x13=x14=x10-3u-eps; ! pos15(bar,angle(z14-z10)); z15l=z10; pos16(bar,angle(z13-z10)); z16l=z10; ! z19=.381966[.5[z13,z14],z10]; numeric t; path p; p=z14l{z19-z14}..z16r; t=xpart(p intersectiontimes((0,y12l)--(w,y12l))); x12=xpart point t of p; --- 173,186 ---- --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r) --z3l{z9-z3}..z0 & cycle; % left arrowhead and stem ! pos11(rule_thickness,90); pos12(rule_thickness,90); ! pos13(rule_thickness,0); pos14(rule_thickness,0); y10=y11=y12=math_axis if monospace:-vround.3asc_height fi; rt x10=hround(w-u); if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi; ! y13-y10=y10-y14=if monospace:.24 else:.36 fi asc_height+eps; ! x13=x14=x10-if monospace:3u else:4u fi-eps; ! pos15(rule_thickness,angle(z14-z10)); z15l=z10; ! pos16(rule_thickness,angle(z13-z10)); z16l=z10; ! z19=.2[.5[z13,z14],z10]; numeric t; path p; p=z14l{z19-z14}..z16r; t=xpart(p intersectiontimes((0,y12l)--(w,y12l))); x12=xpart point t of p; diff -r -c2 oldtex/dist/cm/symbol.mf newtex/dist/cm/symbol.mf *** oldtex/dist/cm/symbol.mf Mon Mar 16 11:05:35 1992 --- newtex/dist/cm/symbol.mf Fri Mar 6 15:39:19 1992 *************** *** 246,253 **** if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(rule_thickness,90+theta); ! pos3(bar,theta); pos4(bar,theta); ! y3=y0; x4=x0; x0-x3=y0-y4=delta+eps; ! pos5(bar,-90); z5l=z0; pos6(bar,-180); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; --- 246,254 ---- if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(rule_thickness,90+theta); ! pos3(rule_thickness,theta); pos4(rule_thickness,theta); ! z3-z0=(-4u,.36asc_height) rotated theta; ! z4-z0=(-4u,-.36asc_height) rotated theta; ! pos5(rule_thickness,-90); z5l=z0; pos6(rule_thickness,-180); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; *************** *** 265,272 **** if abs(theta+45)<2.5: theta:=-45; y1:=y0+x0-x1; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(rule_thickness,90+theta); ! pos3(bar,theta); pos4(bar,theta); ! x3=x0; y4=y0; y3-y0=x0-x4=delta+eps; ! pos5(bar,180); z5l=z0; pos6(bar,90); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; --- 266,274 ---- if abs(theta+45)<2.5: theta:=-45; y1:=y0+x0-x1; fi % near-45$^\circ$ angle pos1(rule_thickness,90+theta); pos2(rule_thickness,90+theta); ! pos3(rule_thickness,theta); pos4(rule_thickness,theta); ! z3-z0=(-4u,.36asc_height) rotated theta; ! z4-z0=(-4u,-.36asc_height) rotated theta; ! pos5(rule_thickness,180); z5l=z0; pos6(rule_thickness,90); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; *************** *** 418,425 **** if abs(theta+45)<2.5: theta:=-45; y1:=y0+x0-x1; fi % near-45$^\circ$ angle pos1(rule_thickness,-90+theta); pos2(rule_thickness,-90+theta); ! pos3(bar,-180+theta); pos4(bar,-180+theta); ! x3=x0; y4=y0; x4-x0=y0-y3=delta+eps; ! pos5(bar,0); z5l=z0; pos6(bar,-90); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; --- 420,428 ---- if abs(theta+45)<2.5: theta:=-45; y1:=y0+x0-x1; fi % near-45$^\circ$ angle pos1(rule_thickness,-90+theta); pos2(rule_thickness,-90+theta); ! pos3(rule_thickness,-180+theta); pos4(rule_thickness,-180+theta); ! z4-z0=(4u,.36asc_height) rotated theta; ! z3-z0=(4u,-.36asc_height) rotated theta; ! pos5(rule_thickness,0); z5l=z0; pos6(rule_thickness,-90); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; *************** *** 437,444 **** if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,-90+theta); pos2(rule_thickness,-90+theta); ! pos3(bar,-180+theta); pos4(bar,-180+theta); ! y3=y0; x4=x0; x3-x0=y4-y0=delta+eps; ! pos5(bar,90); z5l=z0; pos6(bar,0); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; --- 440,448 ---- if abs(theta-45)<2.5: theta:=45; y1:=y0+x1-x0; fi % near-45$^\circ$ angle pos1(rule_thickness,-90+theta); pos2(rule_thickness,-90+theta); ! pos3(rule_thickness,-180+theta); pos4(rule_thickness,-180+theta); ! z4-z0=(4u,.36asc_height) rotated theta; ! z3-z0=(4u,-.36asc_height) rotated theta; ! pos5(rule_thickness,90); z5l=z0; pos6(rule_thickness,0); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4l{z9-z4}..z6r; t=xpart(p intersectiontimes (z1l--(z1l+2(z0-z1)))); z2l=point t of p; *************** *** 748,757 **** adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); ! pos3(bar,90); pos4(bar,90); lft x1l=hround(.5w-.5rule_thickness); y1=.5[-d,h]; ! x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=3u+eps; ! y3=y4=y0+.24asc_height+eps; ! pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; ! z9=.381966[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; --- 752,762 ---- adjust_fit(0,0); pickup crisp.nib; pos1(rule_thickness,0); pos2(rule_thickness,0); ! pos3(rule_thickness,90); pos4(rule_thickness,90); lft x1l=hround(.5w-.5rule_thickness); y1=.5[-d,h]; ! x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=4u+eps; ! y3=y4=y0+.36asc_height+eps; ! pos5(rule_thickness,angle(z4-z0)); z5l=z0; ! pos6(rule_thickness,angle(z3-z0)); z6l=z0; ! z9=.2[.5[z3,z4],z0]; numeric t; path p; p=z4r{z9-z4}..z6r; t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p; *************** *** 760,768 **** --z3l{z9-z3}..z0 & cycle; % lower arrowhead and stem pos11(rule_thickness,0); pos12(rule_thickness,0); z11=z1; ! pos13(bar,90); pos14(bar,90); ! x10=x11=x12; top y10=h+o; x10-x13=x14-x10=3u+eps; ! y13=y14=y10-.24asc_height-eps; ! pos15(bar,angle(z14-z10)); z15l=z10; pos16(bar,angle(z13-z10)); z16l=z10; ! z19=.381966[.5[z13,z14],z10]; numeric t; path p; p=z14l{z19-z14}..z16r; t=xpart(p intersectiontimes((x12r,-d)--(x12r,h))); y12=ypart point t of p; --- 765,774 ---- --z3l{z9-z3}..z0 & cycle; % lower arrowhead and stem pos11(rule_thickness,0); pos12(rule_thickness,0); z11=z1; ! pos13(rule_thickness,90); pos14(rule_thickness,90); ! x10=x11=x12; top y10=h+o; x10-x13=x14-x10=4u+eps; ! y13=y14=y10-.36asc_height-eps; ! pos15(rule_thickness,angle(z14-z10)); z15l=z10; ! pos16(rule_thickness,angle(z13-z10)); z16l=z10; ! z19=.2[.5[z13,z14],z10]; numeric t; path p; p=z14l{z19-z14}..z16r; t=xpart(p intersectiontimes((x12r,-d)--(x12r,h))); y12=ypart point t of p; diff -r -c2 oldtex/dist/cm/tsetsl.mf newtex/dist/cm/tsetsl.mf *** oldtex/dist/cm/tsetsl.mf Mon Mar 16 11:05:36 1992 --- newtex/dist/cm/tsetsl.mf Fri Mar 6 15:49:31 1992 *************** *** 88,102 **** italcorr .9asc_height#*slant+.5hair#-1.5u#; adjust_fit(0,ic#); pickup fine.nib; ! pos1(hair,-180); pos2(vair,-90); ! numeric theta; theta=angle(18u,-h); ! pos3(stem,theta+90); pos4(stem,theta+90); pos5(1/4[hair,stem],20); ! pos6(vair,-90); pos7(curve,-180); pos8(vair,-270); ! rt x1l=hround(w-2u+.5hair); x2=.5w; x3r=3u; rt x5r=hround(w-u); ! x4=x6=x8=.5w+.5u; lft x7r=hround(1.5u-.5curve); ! top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8; ! z4-z3=whatever*(18u,-h); y5=y7=.5[y6,y8]; bot y6=-oo; ! filldraw stroke z1e{x2-x1,3(y2-y1)}...z2e{left}...z3e---z4e ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl ! penlabels(1,2,3,4,5,6,7,8); endchar; cmchar "Partial differential sign for extended ASCII"; --- 88,108 ---- italcorr .9asc_height#*slant+.5hair#-1.5u#; adjust_fit(0,ic#); pickup fine.nib; ! x0=-u; y0=1.05h; ! numeric light_flare; light_flare=2/3[vair,flare]; ! x1=w-2u-.5light_flare; y1=h-.5light_flare; ! numeric theta; theta=angle (z1-z0); ! pos1(light_flare,theta-90); pos2(.2[vair,light_flare],-90); pos3(vair,theta); ! x2=x3+u; y2=h; ! x4=x6=.5w+.5u; top y8r=x_height+oo; z4=z8; ! pos6(vair,-90); pos7(stem,-180); pos8(vair,-270); ! pos4(stem,angle(z4-z0)+90); pos5(stem,30); ! z3=.5[.5[z1,z4],z0]; ! y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; ! lft x7r=hround(1.4u-.5stem); rt x5r=hround(w-u); ! filldraw stroke z1e{z0-z1e}....z2e....z3e{(z0-z1)rotated 90} ! ...z4e{z4e-.8[z4,z0]} ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl ! filldraw z1r{z1r-z0}...z1l{z0-z1l}--cycle; % bulb ! penlabels(0,1,2,3,4,5,6,7,8); endchar; cmchar "Partial differential sign for extended ASCII"; diff -r -c2 oldtex/dist/errata/cm85.bug newtex/dist/errata/cm85.bug *** oldtex/dist/errata/cm85.bug Mon Mar 16 11:05:56 1992 --- newtex/dist/errata/cm85.bug Fri Mar 6 15:50:17 1992 *************** *** 1112,1115 **** --- 1112,1520 ---- @z + -----------Improvements made in January 1992 + [No change to TFM files] + @x in cmbase (improve lowres as suggested by John Hobby) + def normal_adjust_fit(expr left_adjustment,right_adjustment) = + l:=-hround(left_adjustment*hppp)-letter_fit; + interim xoffset:=-l; + charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment; + r:=l+hround(charwd*hppp)-shrink_fit; + w:=r-hround(right_adjustment*hppp)-letter_fit; + enddef; + + def mono_adjust_fit(expr left_adjustment,right_adjustment) = + numeric expansion_factor; + mono_charwd#=2letter_fit# + +expansion_factor*(charwd+left_adjustment+right_adjustment); + forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: + $:=$.#*expansion_factor*hppp; endfor + l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; + interim xoffset:=-l; + r:=l+mono_charwd-shrink_fit; + w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit; + charwd:=mono_charwd#; charic:=mono_charic#; + enddef; + @y + def do_expansion(expr expansion_factor) = + forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: + $:=$.#*expansion_factor*hppp; endfor + enddef; + + def normal_adjust_fit(expr left_adjustment,right_adjustment) = + numeric charwd_in; charwd_in=charwd; + l:=-hround(left_adjustment*hppp)-letter_fit; + interim xoffset:=-l; + charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment; + r:=l+hround(charwd*hppp)-shrink_fit; + w:=r-hround(right_adjustment*hppp)-letter_fit; + do_expansion(w/(charwd_in*hppp)); + enddef; + + def mono_adjust_fit(expr left_adjustment,right_adjustment) = + numeric charwd_in; charwd_in=charwd; + numeric expansion_factor; + mono_charwd#=2letter_fit# + +expansion_factor*(charwd+left_adjustment+right_adjustment); + l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; + interim xoffset:=-l; + r:=l+mono_charwd-shrink_fit; + w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit; + charwd:=mono_charwd#; charic:=mono_charic#; + do_expansion(w/(charwd_in*hppp)); + enddef; + @z + @x in SYM, Downward arrow + pos3(bar,90); pos4(bar,90); + lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; + x0=x1=x2; bot y0=-d; x0-x3=x4-x0=3u+eps; + y3=y4=y0+.24asc_height+eps; + pos5(bar,angle(z4-z0)); z5l=z0; + pos6(bar,angle(z3-z0)); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y (make arrowheads heavier, as suggested by Zapf) + pos3(rule_thickness,90); pos4(rule_thickness,90); + lft x1l=hround(.5w-.5rule_thickness); y1+.5rule_thickness=h; + x0=x1=x2; bot y0=-d; x0-x3=x4-x0=if monospace:3u else:4u fi+eps; + y3=y4=y0+if monospace:.24 else:.36 fi asc_height+eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in SYM, Upward arrow + pos3(bar,90); pos4(bar,90); + lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; + x0=x1=x2; top y0=h; x0-x3=x4-x0=3u+eps; + y3=y4=y0-.24asc_height-eps; + pos5(bar,angle(z4-z0)); z5l=z0; + pos6(bar,angle(z3-z0)); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos3(rule_thickness,90); pos4(rule_thickness,90); + lft x1l=hround(.5w-.5rule_thickness); y1-.5rule_thickness=-d; + x0=x1=x2; top y0=h; x0-x3=x4-x0=if monospace:3u else:4u fi+eps; + y3=y4=y0-if monospace:.24 else:.36 fi asc_height-eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in SYM, Leftward arrow + pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); + y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; + y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos1(rule_thickness,90); pos2(rule_thickness,90); + pos3(rule_thickness,0); pos4(rule_thickness,0); + y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; + y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; + x3=x4=x0+if monospace:3u else:4u fi+eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in SYM, Rightward arrow + pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); + y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); + y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-4u-eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos1(rule_thickness,90); pos2(rule_thickness,90); + pos3(rule_thickness,0); pos4(rule_thickness,0); + y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); + y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; + x3=x4=x0-if monospace:3u else:4u fi-eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in SYM, Left-and-right arrow + pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); + y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u; + if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi; + y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos1(rule_thickness,90); pos2(rule_thickness,90); + pos3(rule_thickness,0); pos4(rule_thickness,0); + y0=y1=y2=math_axis if monospace:+vround.3asc_height fi; lft x0=hround u; + if monospace: x1+.5rule_thickness=hround(w-u) else: x1=.5w fi; + y3-y0=y0-y4=if monospace:.24 else:.36 fi asc_height+eps; + x3=x4=x0+if monospace:3u else:4u fi+eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x ibid + pos11(rule_thickness,90); pos12(rule_thickness,90); pos13(bar,0); pos14(bar,0); + y10=y11=y12=math_axis if monospace:-vround.3asc_height fi; + rt x10=hround(w-u); + if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi; + y13-y10=y10-y14=.24asc_height+eps; x13=x14=x10-3u-eps; + pos15(bar,angle(z14-z10)); z15l=z10; pos16(bar,angle(z13-z10)); z16l=z10; + z19=.381966[.5[z13,z14],z10]; + @y + pos11(rule_thickness,90); pos12(rule_thickness,90); + pos13(rule_thickness,0); pos14(rule_thickness,0); + y10=y11=y12=math_axis if monospace:-vround.3asc_height fi; + rt x10=hround(w-u); + if monospace: x11-.5rule_thickness=hround u else: x11=.5w fi; + y13-y10=y10-y14=if monospace:.24 else:.36 fi asc_height+eps; + x13=x14=x10-if monospace:3u else:4u fi-eps; + pos15(rule_thickness,angle(z14-z10)); z15l=z10; + pos16(rule_thickness,angle(z13-z10)); z16l=z10; + z19=.2[.5[z13,z14],z10]; + @z + @x in SYMBOL, Up-and-down arrow + pos3(bar,90); pos4(bar,90); + lft x1l=hround(.5w-.5rule_thickness); y1=.5[-d,h]; + x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=3u+eps; + y3=y4=y0+.24asc_height+eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos3(rule_thickness,90); pos4(rule_thickness,90); + lft x1l=hround(.5w-.5rule_thickness); y1=.5[-d,h]; + x0=x1=x2; bot y0=-d-o; x0-x3=x4-x0=4u+eps; + y3=y4=y0+.36asc_height+eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x ibid + pos13(bar,90); pos14(bar,90); + x10=x11=x12; top y10=h+o; x10-x13=x14-x10=3u+eps; + y13=y14=y10-.36asc_height-eps; + pos15(bar,angle(z14-z10)); z15l=z10; + pos16(bar,angle(z13-z10)); z16l=z10; + z19=.381966[.5[z13,z14],z10]; + @y + pos13(rule_thickness,90); pos14(rule_thickness,90); + x10=x11=x12; top y10=h+o; x10-x13=x14-x10=4u+eps; + y13=y14=y10-.24asc_height-eps; + pos15(rule_thickness,angle(z14-z10)); z15l=z10; + pos16(rule_thickness,angle(z13-z10)); z16l=z10; + z19=.2[.5[z13,z14],z10]; + @z + @x in SYMBOL, Northeast arrow + pos3(bar,theta); pos4(bar,theta); + y3=y0; x4=x0; x0-x3=y0-y4=delta+eps; + pos5(bar,-90); z5l=z0; pos6(bar,-180); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos3(rule_thickness,theta); pos4(rule_thickness,theta); + z3-z0=(-4u,.36asc_height) rotated theta; + z4-z0=(-4u,-.36asc_height) rotated theta; + pos5(rule_thickness,-90); z5l=z0; pos6(rule_thickness,-180); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in SYMBOL, Southeast arrow + pos3(bar,theta); pos4(bar,theta); + x3=x0; y4=y0; y3-y0=x0-x4=delta+eps; + pos5(bar,180); z5l=z0; pos6(bar,90); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos3(rule_thickness,theta); pos4(rule_thickness,theta); + z3-z0=(-4u,.36asc_height) rotated theta; + z4-z0=(-4u,-.36asc_height) rotated theta; + pos5(rule_thickness,180); z5l=z0; pos6(rule_thickness,90); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in SYMBOL, Northwest arrow + pos3(bar,-180+theta); pos4(bar,-180+theta); + x3=x0; y4=y0; x4-x0=y0-y3=delta+eps; + pos5(bar,0); z5l=z0; pos6(bar,-90); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos3(rule_thickness,-180+theta); pos4(rule_thickness,-180+theta); + z4-z0=(4u,.36asc_height) rotated theta; + z3-z0=(4u,-.36asc_height) rotated theta; + pos5(rule_thickness,0); z5l=z0; pos6(rule_thickness,-90); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in SYMBOL, Southwest arrow + pos3(bar,-180+theta); pos4(bar,-180+theta); + y3=y0; x4=x0; x3-x0=y4-y0=delta+eps; + pos5(bar,90); z5l=z0; pos6(bar,0); z6l=z0; + z9=.381966[.5[z3,z4],z0]; + @y + pos3(rule_thickness,-180+theta); pos4(rule_thickness,-180+theta); + z4-z0=(4u,.36asc_height) rotated theta; + z3-z0=(4u,-.36asc_height) rotated theta; + pos5(rule_thickness,90); z5l=z0; pos6(rule_thickness,0); z6l=z0; + z9=.2[.5[z3,z4],z0]; + @z + @x in ROMMS, Leftward top half arrow + pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); + y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; + y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + @y + pos1(rule_thickness,90); pos2(rule_thickness,90); + pos3(rule_thickness,0); pos4(rule_thickness,0); + y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; + y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + @z + @x in ROMMS, Leftward bottom half arrow + pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); + y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; + y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + @y + pos1(rule_thickness,90); pos2(rule_thickness,90); + pos3(rule_thickness,0); pos4(rule_thickness,0); + y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u; + y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0+4u+eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + @z + @x in ROMMS, Rightward top half arrow + pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); + y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); + y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + @y + pos1(rule_thickness,90); pos2(rule_thickness,90); + pos3(rule_thickness,0); pos4(rule_thickness,0); + y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); + y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + @z + @x in ROMMS, Rightward bottom half arrow + pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(bar,0); pos4(bar,0); + y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); + y3-y0=y0-y4=.asc_height+eps; x3=x4=x0-3u-eps; + pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0; + @y + pos1(rule_thickness,90); pos2(rule_thickness,90); + pos3(rule_thickness,0); pos4(rule_thickness,0); + y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u); + y3-y0=y0-y4=.36asc_height+eps; x3=x4=x0-4u-eps; + pos5(rule_thickness,angle(z4-z0)); z5l=z0; + pos6(rule_thickness,angle(z3-z0)); z6l=z0; + @z + @x in CALU, Calligraphic F + top y1=top y6=h; z2=.5[z3,z1]+bend; + bot y3=-o; y4=.1h; y5=y2; y7=.9h; + draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem + draw z1-flourish_change{up}...z1---z6...{down}z7; % upper bar + @y + top y1=top y6=h; z2=.5[z3,z1]+1.2bend; + bot y3=-o; y4=.1h; y5=y2; y7=.9h; + draw flex(z1,z2,z3) softjoin (z3...{x4-x3,5(y4-y3)}z4); % stem + draw z1-flourish_change{up}...(z1-(u,0))---z6...{down}z7; % upper bar + @z + @x in CALU, Calligraphic H + lft x1=lft x3=0; rt x4=rt x6=.8w; rt x9=w; + top y1=top y4=h; bot y3=-o; bot y6=bot_flourish_line; y9=y6+.1h; + z2=.6[z3,z1]+bend; z5=.4[z6,z4]-2bend; + path p[]; p1=flex(z1,z2,z3); p2=flex(z4,z5,z6); + p3=(-w,.55h)--(2w,.55h); + lft z7=p3 intersectionpoint p1; rt z8=p3 intersectionpoint p2; + draw (z1-flourish_change{up}....z1-(u,0)---z1) softjoin p1; % left stem + @y + lft x1=lft x3=.5u; rt x4=rt x6=.8w-.6u; rt x9=w; + top y1=top y4=h; bot y3=-.06h; bot y6=bot_flourish_line; y9=y6+.1h; + z2=.6[z3,z1]+bend; z5=.4[z6,z4]-bend; + path p[]; p1=flex(z1,z2,z3); p2=flex(z4,z5,z6); + p3=(-w,.45h)--(2w,.45h); + rt z7+2bend=p3 intersectionpoint p1; rt z8=p3 intersectionpoint p2; + draw (z1-flourish_change-bend{curl2}....z1-(u,0)---z1) softjoin p1; % left stem + @z + @x in CALU, Calligraphic I + lft x0=0; x1=.9w; x2=x4=.5w; x5=.2w; x6=.75w; rt x7=w; + @y + lft x0=0; x1=.9w; x2=x4=.5w; x5=.2w; x6=.8w; rt x7=1.05w; + @z + @x in CALU, Calligraphic T + x1=x3=.5w; lft x4=0; x5=w-x6=.25w; rt x7=w; + x1=.47w; x3=.5w; lft x4=0; x5=w-x6=.25w; rt x7=1.05w; + z2=.5[z3,z1]+bend; + x1-x8=x9-x1=2u; y8=y9=y3; + z0=1/3[z1,z6]; + draw z0{left}...z2{down}...{left}z8; % stem + draw z8--z9; % foot + draw z4{up}...z5{right}...z6{right}...{up}z7; % arms + math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7,8,9); endchar; + @y + x1=.47w; x3=.5w; lft x4=0; x5=.25w; x6=.85w; rt x7=1.05w; + top y1=h; bot y3=-.1h; y4=3/4h; top y5=top y6=h; top y7=1.05h; + z2=.3[z3,z1]+bend; + top y0=y1; x0=x2; + z8=(2u,.2h); + draw z0---z2...z3; % stem + draw z4{curl 2}...z5{right}...z6{right}...{up}z7; % arms + math_fit(.5u#-5/7h#*slant,-u#); labels(1,2,3,4,5,6,7); endchar; + @z + @x in GREEKL, lowercase delta + pos1(hair,-180); pos2(vair,-90); + numeric theta; theta=angle(18u,-h); + pos3(stem,theta+90); pos4(stem,theta+90); pos5(1/4[hair,stem],20); + pos6(vair,-90); pos7(curve,-180); pos8(vair,-270); + rt x1l=hround(w-2u+.5hair); x2=.5w; x3r=3u; rt x5r=hround(w-u); + x4=x6=x8=.5w+.5u; lft x7r=hround(1.5u-.5curve); + top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8; + z4-z3=whatever*(18u,-h); y5=y7=.5[y6,y8]; bot y6=-oo; + filldraw stroke z1e{x2-x1,3(y2-y1)}...z2e{left}...z3e---z4e + ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl + math_fit(-.3x_height#*slant+.5curve#-u#,.7x_height#*slant-.5u#); + penlabels(1,2,3,4,5,6,7,8); endchar; + @y + x0=-u; y0=1.1h; + numeric light_flare; light_flare=2/3[vair,flare]; + x1=w-2u-.5light_flare; y1=h-.5light_flare; + numeric theta; theta=angle (z1-z0); + pos1(light_flare,theta-90); pos2(.2[vair,light_flare],-90); pos3(vair,theta); + x2=x3+u; y2=h; + x4=x6=.5w+.5u; top y8r=x_height+oo; z4=z8; + pos6(vair,-90); pos7(stem,-180); pos8(vair,-270); + pos4(stem,angle(z4-z0)+90); pos5(stem,30); + z3=.5[.5[z1,z4],z0]; + y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; + lft x7r=hround(1.4u-.5stem); rt x5r=hround(w-u); + filldraw stroke z1e{z0-z1e}....z2e....z3e{(z0-z1)rotated 90} + ...z4e{z4e-.8[z4,z0]} + ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl + filldraw z1r{z1r-z0}...z1l{z0-z1l}--cycle; % bulb + math_fit(-.3x_height#*slant+.5curve#-u#,.7x_height#*slant-.5u#); + penlabels(0,1,2,3,4,5,6,7,8); endchar; + @z + @x in TSETSL, lowercase delta for extended ASCII + pos1(hair,-180); pos2(vair,-90); + numeric theta; theta=angle(18u,-h); + pos3(stem,theta+90); pos4(stem,theta+90); pos5(1/4[hair,stem],20); + pos6(vair,-90); pos7(curve,-180); pos8(vair,-270); + rt x1l=hround(w-2u+.5hair); x2=.5w; x3r=3u; rt x5r=hround(w-u); + x4=x6=x8=.5w+.5u; lft x7r=hround(1.5u-.5curve); + top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8; + z4-z3=whatever*(18u,-h); y5=y7=.5[y6,y8]; bot y6=-oo; + filldraw stroke z1e{x2-x1,3(y2-y1)}...z2e{left}...z3e---z4e + ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl + penlabels(1,2,3,4,5,6,7,8); endchar; + @y this next line differs from GREEKL, but the other lines agree + x0=-u; y0=1.05h; + numeric light_flare; light_flare=2/3[vair,flare]; + x1=w-2u-.5light_flare; y1=h-.5light_flare; + numeric theta; theta=angle (z1-z0); + pos1(light_flare,theta-90); pos2(.2[vair,light_flare],-90); pos3(vair,theta); + x2=x3+u; y2=h; + x4=x6=.5w+.5u; top y8r=x_height+oo; z4=z8; + pos6(vair,-90); pos7(stem,-180); pos8(vair,-270); + pos4(stem,angle(z4-z0)+90); pos5(stem,30); + z3=.5[.5[z1,z4],z0]; + y5+.1x_height=y7=.5[y6,y8]; bot y6=-oo; + lft x7r=hround(1.4u-.5stem); rt x5r=hround(w-u); + filldraw stroke z1e{z0-z1e}....z2e....z3e{(z0-z1)rotated 90} + ...z4e{z4e-.8[z4,z0]} + ....z5e{down}...pulled_arc.e(6,7) & pulled_arc.e(7,8); % hook and bowl + filldraw z1r{z1r-z0}...z1l{z0-z1l}--cycle; % bulb + penlabels(0,1,2,3,4,5,6,7,8); endchar; + @z + -----------Here I draw the line with respect to further changes diff -r -c2 oldtex/dist/errata/errata.five newtex/dist/errata/errata.five *** oldtex/dist/errata/errata.five Mon Mar 16 11:05:57 1992 --- newtex/dist/errata/errata.five Sun Mar 15 16:46:58 1992 *************** *** 868,872 **** \bugonpage C282, the three lines following the chart (9/39/89) ! \ninepoint\noindent \MF\ can also be configured to accept any or all of the character codes 128--255. --- 868,872 ---- \bugonpage C282, the three lines following the chart (9/39/89) ! \tenpoint\noindent \MF\ can also be configured to accept any or all of the character codes 128--255. Only in newtex/dist/errata: errata.seven diff -r -c2 oldtex/dist/errata/errata.tex newtex/dist/errata/errata.tex *** oldtex/dist/errata/errata.tex Mon Mar 16 11:06:00 1992 --- newtex/dist/errata/errata.tex Sun Mar 15 21:27:25 1992 *************** *** 34,38 **** \tenpoint \noindent This is a list of all corrections made to {\sl Computers \& ! Typesetting}, Volumes A,~C, and E\null, since 1 January 1991. Corrections made to the softcover version of {\sl The \TeX book\/} are the same as corrections to Volume~A\null. Corrections to the softcover --- 34,38 ---- \tenpoint \noindent This is a list of all corrections made to {\sl Computers \& ! Typesetting} since 15 March 1992. Corrections made to the softcover version of {\sl The \TeX book\/} are the same as corrections to Volume~A\null. Corrections to the softcover *************** *** 39,91 **** version of {\sl The \slMF\kern1ptbook\/} are the same as corrections to Volume~C\null. Some of the corrections below have already been made in ! reprintings of the books. Hundreds of changes, too many to list here, ! have been made to Volumes B~and~D because of the upgrades to \TeX\ and ! \MF\null. Readers who need up-to-date information on the \TeX\ and ! \MF\ programs should refer to the |WEB| source files until new ! printings of Volumes B~and~D are issued. \looseness=-1 % volume A - \bugonpage A377, the bottom 14 lines (3/26/91) - - \eightpoint\indent - ASCII \; the macro - also decides whether a space token is explicit or implicit. - \begintt - \newif\ifspace \newif\iffunny \newif\ifexplicit - \def\stest#1{\expandafter\s\the#1! \stest} - \def\s{\funnyfalse \global\explicitfalse \futurelet\next\ss} - \def\ss{\ifcat\noexpand\next\stoken \spacetrue - \ifx\next\stoken \let\next=\sss \else\let\next=\ssss \fi - \else \let\next=\sssss \fi \next} - \long\def\sss#1 #2\stest{\def\next{#1}% - \ifx\next\empty \global\explicittrue \fi} - \long\def\ssss#1#2\stest{\funnytrue {\uccode`#1=`~ - \uppercase{\ifcat\noexpand#1}\noexpand~% active funny space - \else \escapechar=\if*#1`?\else`*\fi - \if#1\string#1\global\explicittrue\fi \fi}} - \long\def\sssss#1\stest{\spacefalse} - \endtt - - \bugonpage A444, lines 15--26 (3/26/91) - - \ninepoint - \textindent{\bf14.}If the current item is an Ord atom, - go directly to Rule~17 unless - all of the following are true: The nucleus is a symbol; the subscript - and superscript are both empty; the very next item in the math list is an - atom of type Ord, Op, Bin, Rel, Open, Close, or Punct; and the nucleus of the - next item is a symbol whose family is the same as the family in the present - Ord atom. In such cases the present symbol is marked as a text symbol. - If the font information shows a ligature between this symbol and the - following one, using the specified family and the current size, then - insert the ligature character and continue as specified by the font; - in this process, two characters may collapse into a single Ord - text symbol, and/or new Ord text characters may appear. If the font information - shows a kern between the current symbol and the next, insert a kern item - following the current atom. - As soon as an Ord atom has been fully processed for ligatures and kerns, - go to Rule~17. - % volume B \hsize=35pc --- 39,53 ---- version of {\sl The \slMF\kern1ptbook\/} are the same as corrections to Volume~C\null. Some of the corrections below have already been made in ! reprintings of the books. Changes to Volume~B refer to the fourth printing ! (1991), which differs markedly from earlier printings because it includes ! all the revisions for \TeX3.0. Changes to Volume~D refer to the third ! printing (1991), which differs markedly from earlier printings because ! it includes all the revisions for \MF\kern1pt2.0. Changes to the mini-indexes ! and master indexes of Volumes B and~D are not shown here unless they are ! not obviously derivable from what has been shown. ! \looseness=-1 % volume A % volume B \hsize=35pc *************** *** 97,116 **** \hsize=29pc \def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers - - \bugonpage C262, line 15 (3/26/91) - - \ninepoint\noindent - |string base_name, base_version; base_name="plain"; base_version="2.7";| - - \bugonpage C271, line 17 from the bottom (3/26/91) - - \ninepoint\noindent - | currentpen_path shifted (z.t_) withpen penspeck enddef;| - - \bugonpage C347, Bront''e entry (1/29/91) - - \eightpoint\noindent - [The accent was clobbered; her name should, of course, be Bront\"e. - Fix the entries for D\"urer, M\"obius, and Stravinsky in the same way.] --- 59,62 ---- diff -r -c2 oldtex/dist/errata/errorlog.tex newtex/dist/errata/errorlog.tex *** oldtex/dist/errata/errorlog.tex Mon Mar 16 11:06:05 1992 --- newtex/dist/errata/errorlog.tex Sun Mar 15 21:20:37 1992 *************** *** 1,3 **** --- 1,5 ---- % Appendix to the Errors of TeX paper (updated) + % Section numbers now adjusted to TeX 3.0 equivalents + % NB: tab marks are significant in this file, they signal continuation lines %\magnification=\magstephalf %\pageno=35 *************** *** 37,41 **** a macro definition or call. [System dependent.] @336 # Unintended bugs in my test routine [a format intended eventually to typeset ! {\it The Art of Computer Programming\/}] helped check out the error recovery mechanisms. For example, I had `|\lft{#}|' instead of `|\lft{##}|' inside a macro, --- 39,43 ---- a macro definition or call. [System dependent.] @336 # Unintended bugs in my test routine [a format intended eventually to typeset ! {\sl The Art of Computer Programming\/}] helped check out the error recovery mechanisms. For example, I had `|\lft{#}|' instead of `|\lft{##}|' inside a macro, *************** *** 118,122 **** when I meant to say \\{llink}. @127 # Now the |\corners| macro of |acphdr| works! [See |\setcornerrules| ! in {\it The \TeX book}, page 417.] D47. Reset \\{contrib_tail} properly in \\{build_page}. @995 T48. Fix typo (|-| for |+|) in computation of \\{page_total}. @1004 --- 120,124 ---- when I meant to say \\{llink}. @127 # Now the |\corners| macro of |acphdr| works! [See |\setcornerrules| ! in {\sl The \TeX book}, page 417.] D47. Reset \\{contrib_tail} properly in \\{build_page}. @995 T48. Fix typo (|-| for |+|) in computation of \\{page_total}. @1004 *************** *** 258,262 **** L98. Give a warning message if there's an |\hfill| in the middle of a paragraph; fillglue upsets the line breaker, ! because floating-point calculations don't have sufficient accuracy. @869 # I spent an hour looking for another bug in \TeX, but the following one was in \MF: The \\{xgp_height} data in fonts had been supplied wrong. --- 260,264 ---- L98. Give a warning message if there's an |\hfill| in the middle of a paragraph; fillglue upsets the line breaker, ! because floating-point calculations don't have sufficient accuracy. @868 # I spent an hour looking for another bug in \TeX, but the following one was in \MF: The \\{xgp_height} data in fonts had been supplied wrong. *************** *** 328,332 **** [In the original program, this was an instance of a bad {\bf goto}.] @1091 # I had undesired spaces coming thru the scanner in my macro definitions ! of\/ |\tenpoint| [see {\it The \TeX book}, page 414]. # 4am. \TeX\ now knows enough to typeset page 1 of Volume 2! # Also it did its first ``math formula'' (namely `|$X$|') without crucial error. --- 330,334 ---- [In the original program, this was an instance of a bad {\bf goto}.] @1091 # I had undesired spaces coming thru the scanner in my macro definitions ! of\/ |\tenpoint| [see {\sl The \TeX book}, page 414]. # 4am. \TeX\ now knows enough to typeset page 1 of Volume 2! # Also it did its first ``math formula'' (namely `|$X$|') without crucial error. *************** *** 514,518 **** [This restrictive rule will be ``overruled'' later.] @463 B194. Fix ridiculous bug in the leaders routine of \\{vlist_out}: ! I had the initialization {\bf inside\/} the loop! @635 L195. Eliminate confusion between the two temp variables named $h$; one is \\{real} and the other is \\{integer}. @629 --- 516,520 ---- [This restrictive rule will be ``overruled'' later.] @463 B194. Fix ridiculous bug in the leaders routine of \\{vlist_out}: ! I had the initialization {\sl inside\/} the loop! @635 L195. Eliminate confusion between the two temp variables named $h$; one is \\{real} and the other is \\{integer}. @629 *************** *** 1187,1191 **** (These major changes are introduced as Michael Plass and I write our article.) @813 ! G462. Add a new parameter |\exhyf| [later |\exhyphenpenalty|]. @870 * 16 Jun 1980 S463\>444. Change conventions in \\{eqtb} so that glue is distinguishable --- 1189,1193 ---- (These major changes are introduced as Michael Plass and I write our article.) @813 ! G462. Add a new parameter |\exhyf| [later |\exhyphenpenalty|]. @869 * 16 Jun 1980 S463\>444. Change conventions in \\{eqtb} so that glue is distinguishable *************** *** 1259,1263 **** S493\>422. Fix a still more serious |\gdef| bug: The generality of\/ |\gdef| almost makes it a crime to ! forget {\bf any\/} control sequence names, ever! (The previous bug was only the tip of an iceberg.) @259 I494. Issue warning message at the end of a file page if nesting level isn't zero. --- 1261,1265 ---- S493\>422. Fix a still more serious |\gdef| bug: The generality of\/ |\gdef| almost makes it a crime to ! forget {\sl any\/} control sequence names, ever! (The previous bug was only the tip of an iceberg.) @259 I494. Issue warning message at the end of a file page if nesting level isn't zero. *************** *** 1325,1328 **** --- 1327,1790 ---- # [That was the historic final change to \TeX78. All subsequent entries in this log refer to \TeX82.] + * 15 Jul 1982 + # Finished draft of test program and began debugging about 1430 + [2:30\thinspace pm]. Taking my time. + BX1. Change \\{eqtb}[\\{cur_font}] to \\{eqtb}[\\{cur_font_loc}]. @232 + # Not logging changes to the exposition. + # Compile time is about 2 minutes CPU, times 5 for time-sharing; + add another half minute for linking and loading. + # Hash table and \\{get_next} seem to be working, with no changes needed! + # Time out 1630--1815 for Jill's birthday party. + LX2. Insert {\bf begin} \dots~{\bf end} around \\{dump_int} macro. @1305 + IX3. Print two blank spaces before date in \\{open_log_file}. @536 + AX4. Update $x$ and \\{var_used} outside the {\bf for} loop. @1311 + BX5. Change {\bf if} $=$ to {\bf if} $\ne$ as loop exit condition. @1315,1316 + # The |TRIP| test should preload more fonts. + LX6. Insert {\bf begin} \dots~{\bf end} around statistics output. @1334 + FX7. Must \\{get_x_token} when scanning a number. @445 + IX8. Interactive \\{debug_help} needs to print a newline. @1338 + FX9. Include \\{ignore_spaces} and \\{math_accent} in \\{print_cmd_char} cases. @266 + IX10. Don't call \\{confusion} when \\{print_cmd_char} sees unknown code. @298 + # Compiler bug causes stack overflow. Retiring for the night at 2145. + * 16 Jul 1982 + # Starting at 0700; DRF has fixed the compiler. + RX11. Allow arbitrary integer parameters in diagnostic print routines. @237,699 + TX12. Say \\{cur_tok}, not \\{cur_val}, when you mean \\{cur_tok}. @440 + FX13. Make |\pause| effective also on first line of a file. @538 + FX14. Show context after online deletion. @88 + IX15. Bypass reference count when \\{debug_help} shows a token list. @1339 + BX16. Change `{\bf case} $p$' to `{\bf case} \\{type}($p$)'. @1000 + FX17. Fix timing of \\{print_ln} when scrolling help messages. @90 + PX18. Make \\{other_char} the default category for ASCII control codes too. @232 + AX19. Use special scanning method for font number in \\{new_font}. @1257 + # Eating lunch, 1020--1035, while the machine slowly recompiles everything. + FX20. Don't forget to increase $k$ in the {\bf while} loop. @355 + DX21. Adjust \\{limit} properly after line changed when pausing. @363 + FX22. Remember to return a value in \\{new_spec} and \\{new_penalty}. @151,158 + # Now stepping through \\{line_break} in simple case. + AX23. Don't prune unwanted nodes if $\\{cur_p}=\\{null}$. @877 + FX24. Print a closing parenthesis when displaying glue nodes. @189 + SX25. Use \\{last}, not \\{limit}, in \\{term_input}; else error prompt causes + trouble when $\\{state}=\\{token_list}$. @71,87 + DX26. Set $\\{first}\gets\\{limit}+1$ after \\{init_terminal}. @331 + DX27. Make sure \\{set_trick_count} is always performed. @317 + * 17 Jul 1982 + IX28. Add new diagnostic feature |\tracingcommands|. @299,1031 + # Debugging of system-dependent code not shown in this log. + # Tangling \TeX\ now takes 1.75 minutes; about 75K bytes, 108K tokens. + # Redundant semicolon sends Pascal compiler into infinite loop! + FX29. Initialize $\\{passive}\gets\\{null}$. @864 + AX30. Fix pseudoprinting when the line is empty. @318 + EX31. Merge adjacent free areas of dynamic memory before dumping. @131 + FX32. Print the word |mode| in \\{print_mode}. @211 + IX33. Improve message and help in case of weird error. @415 + GX34. Allow optional space after |\def| and similar constructions. @473 + MX35. Declare \\{alpha} to be integer in \\{read_font_info}. @560 + AX36. Fix timing of \\{back_input} in \\{scan_dimen}. @448 + IX37. Back up after missing number error. @446 + IX38. Show the `|at|' size that is considered improper. @1259 + IX39. Streamline the dialog in \\{debug_help}. @1338 + MX40. Take output of \\{the_toks} from the advertised place. @467,1297 + TX41. Say \\{trie_fix}($q$), not \\{trie_fix}($p$). @959 + SX42. Decrease low limit of \\{error_count} to $-1$. @76 + * 18 Jul 1982 + FX43. Clear initial reference count of macro definitions. @473 + AX44. Fix timing of \\{back_input} in \\{scan_glue}. @461 + BX45. Use \\{cur_val_level}, not \\{cur_val}, when checking levels. @461 + BX46. Multiply |fil| units by $2^{16}$ for correct scaling. @454 + BX47. Don't confuse \\{glue_base} with \\{skip_base}. @1237 + AX48. Fix \\{print_scaled} so that 0.01 doesn't come out |0.1|. @103 + IX49\>X28. Show mode changes when tracing commands. @299 + LX50. Don't say {\bf if} $(n=0)\lor(\,\ldots\;\hbox{\bf div}\;n)$ in Pascal. @105 + BX51. Don't confuse \\{box_flag} with \\{box_code}. @1075 + SX52. Reset \\{offset} on \\{print_ln} even in \\{no_print} mode. @57 + SX53. Fix restarting of interrupts after \\{big_switch}. @1031 + LX54. Don't loop {\bf for} $k\gets a$ {\bf to} $b-1$ when $b=0$ if $k$ is + declared nonnegative. + IX55. Put `|=|' sign into the \\{format_ident}. @1328 + SX56. Allow $r$ to be any integer in \\{get_node}. @125 + IX57. Don't put the output of \\{print_file_name} in quotes. @518 + IX58. Say `|dumped|' after dumping. @1311 + EX59. Eliminate unnecessary initialization code. @1332 + LX60. Get the file reading started right when beginning to undump. @1308 + IX61. Give forlorn message if format file can't be loaded. @1303 + FX62. Assign value to \\{cur_val} after glue arithmetic. @1239,1240 + * 19 Jul 1982 + LX63. Don't say {\bf if} $p>\\{max}\lor\\{free}[p]$ in Pascal. @169 + AX64. Fix memory-undump logic; loops are out of phase with input. @1312 + BX65. Undump \\{hyph_word}[$j$], not \\{hyph_word}[$k$]. @1325 + # At last |trip.fmt| loads without bombing out. + PX66. Remove assignment of array to array, not allowed by IBM Pascal + (Susan Plass). @167 + PX67. Simplify an expression that's too big for IBM Pascal (Susan Plass). @1009 + AX68. Go to \\{contribute}, not \\{done}, after insertions. @1000 + IX69. Decrease \\{depth_threshold} if there's not enough string space. @198 + IX70. Show rules as `{\tt\char`\|}' in short displays. @175 + IX71. Don't show null glue in short displays. @175 + SX72. Set $\\{job_name}\gets0$ as part of output initialization. @528 + SX73. Don't complain of infinite shrinkage on |0pt minus 0fil|. @825,976,1009 + IX74. Use different prompt at beginning when accepting a file name. @37 + FX75. Reset \\{last_glue} on nonglue nodes. @996 + BX76. Remember to call \\{error} after printing |OK|. @1293 + LX77. Insert {\bf begin} \dots{ \bf end} around program text of section. @1025 + FX78. Define the |\shipout| primitive. @1071,1073 + AX79. Introduce \\{write_loc} analogous to \\{par_loc}. @1344,1371 + FX80. Dump and undump \\{par_loc} and \\{write_loc}. @1313,1314 + FX81. Allow \\{the} in \\{scan_the} [later \\{scan_something_internal}]. @413 + EX82. Interchange command codes $\\{the}:=:\\{number}$ [later \\{convert}]. @210 + BX83. Don't confuse \\{breadth} with \\{depth}. @236 + IX84. Add string printing feature to \\{debug_help}. @1339 + FX85. Set $\\{state}\gets\\{mid_line}$ in \\{begin_file_reading}. @328 + # Time out 2105--2200 to pick up Jenny from driving lesson. + LX86. Keep $c\le127$ when deleting 99 tokens. @88 + SX87. Don't check for \\{str_room} error when $\\{selector}=\\{new_string}$. @1328 + * 21 Jul 1982 + IX88. Gather more statistics: String usage, font info, hyphen exceptions, stacks. @1334 + DX89\>X79. Initialize \\{write_loc} from \\{cur_val}, not from \\{cs_ptr}. @1344 + FX90. Remember to pack file name for |\open|. @1374 + SX91\>X34. Defuse |\outer| test before scanning optional space after `|}|'. @473 + SX92. Don't allow \\{prepare_mag} to cause errors after \\{jump_out}. @84 + # The first page of |DVI| output is {\sl perfect\/}! Pause to play piano. + BX93. Don't confuse \\{dimen_base} with \\{scaled_base}. @1237 + DX94. Initialize $\\{link}(\\{page_head})\gets\\{null}$ when beginning a page. @991 + SX95. Correct \\{cur_height} more often, since \\{max_depth} might be negative. @972,973 + AX96. Calculate page dimensions properly after vertical kerns. @973 + SX97. Install new \\{page_contents} logic to handle interaction between + insertions and |\topskip|. @987,1008 + SX98. Allow \\{top_skip} glue to be a valid breakpoint. @1001 + FX99. Don't forget to count \\{dyn_used} in inner loop [erroneous analysis + retracted later]. @1034 + FX100. Set $p\gets q$ after migration step. @655 + FX101. Clear \\{prev_graf} to zero at start of paragraph. @1091 + LX102. Put parens into negated \\{leader_flag} macro. 1078 + # Time out 1720--1920 for John's birthday dinner. + DX103. Scale \\{best_height} when adjusting \\{page_goal}. @1010 + AX104. Simplify logic of split insertions; three states become two. @981,1019,1020 + MX105. Don't omit first character when shawing a macro argument. @400 + RX106. Prevent clobberage if macros have too many parameters. @390 + * 22 Jul 1982 + IX107. Tell how many |DVI| bytes were output. @642 + IX108\>X88. Adjust for singular or plural statistics. @1320,1334 + SX109\>X98. Consider \\{page_head} a glue node, to inhibit unwanted break. @988 + DX110. Introduce \\{new_skip_param} to keep reference counts updated. @679,969,1001 + DX111. Record the correct size of new insertion after it's split. @1010 + DX112. Use \\{free_node}, not \\{flush_node_list}, when recycling insertion + nodes. @1022 + SX113. Make online insertions work after \\{get_next} is interrupted. @87,324,343 + BX114. Print newline on interruption stop. @98 + SX115\>X34. Put space before \\{end_write_token}. @1371 + BX116. Don't confuse \\{glue_order} with \\{stretch_order}. @838 + TX117. Set $\\{max_dimen}\gets\hbox{\it'7777777777\/}$, not {\it'777777777}. @421 + MX118. Make |\global\textfont| legal. @1211 + BX119. Fetch |\the\textfont| with \\{equiv}, not \\{fam_font}. @415 + BX120. Call $\\{new_ligature}(f,l,\ldots)$ not $(f,c,\ldots)$. @1035 + RX121. Make \\{show_box} work on random garbage. @174,177 + DX122. Count reference to \\{zero_glue} from \\{cond_math_glue}. @1171 + * 23 Jul 1982 + RX123. Allow $\\{avail}=\\{null}$ when undumping. @1312 + BX124\>X110. Set $\\{width}(\\{glue_ptr}(p))$, not $\\{width}(p)$. @679 + AX125. Put \\{begin_file_reading} inside the \\{start_input} loop. @537 + BX126\>X116. Don't confuse \\{glue_stretch} with \\{stretch_order} [the previous + fix went only half\-way]. @838 + BX127. Negate $x$ when calculating badness of shrinkage. @667,678 + LX128\>X121. Remove dangling {\bf else} that parses wrong. @174 + IX129\>X28. Print newline before |{|, not after |}|, when tracing commands. @299 + IX130. Remove colon from overfull box messages. @663,675 + DX131\>X97. Compute \\{page_goal} properly when the first box arrives after + inserts. @1001 + BX132. Don't confuse \\{page_size} [now \\{page_goal}] with \\{best_size}. @1017 + AX133. Put heldover insertions at front of contribution list. @1023 + SX134\>X88. Output stats before closing |DVI| file, since the latter + decreases \\{font_ptr}. @1333 + TX135. Don't call a |\vbox| an |\hbox|. @674 + TX136. Fix misplaced {\bf end} caused by editing error. @675 + * 24 Jul 1982 + DX137. Don't \\{eq_destroy} any paragraph shape when \\{par_shape} is null. @275 + IX138. Omit blank before |\message| at the beginning of a line. @1280 + AX139\>X104. Don't try to split an insertion when \\{best_node} isn't the + split one. @1021 + LX140. Correct another case of `{\bf if} $x\land y$' misunderstood by Pascal. + @1021 + IX141. Provide diagnostic info about insertions via |\showlists|. @986 + IX142. Add `|inside a group|' to clarify a warning message. @1335 + IX143. Report \\{prev_depth} on a separate line in |\showlists|. @219 + SX144. Back up input to avoid unexpected clobberage of \\{cur_tok}. @1090 + # Wow what a bug: \\{new_graf} calls \\{build_page}, which invokes the + output routine, after which `\/{\bf goto} \\{reswitch}' is a {\sl disaster}. + DX145. Add insertion glue to \\{page_so_far} instead of subtracting it from + the goal. @1009 + IX146. Put extra blank line before overfull box warning. @660 + CX147. Define break at kern consistently between horizontal and vertical lists. @973,1000 + DX148. Renumber so that math nodes are nondiscardable. @147 + TX149. Correct the \\{char_kern} macro: |#|, not $f$. @557 + FX150. Decrease $l$ after reconstituting discretionary break. @916 + EX151. Simplify the hyphen routine, knowing that $\\{link}(s)=\\{null}$. @918 + FX152. Initialize $r\gets q$ in discretionary destruction routine. @883 + * 25 Jul 1982 + AX153. Don't add interline penalty after last line of paragraph. @890 + IX154. Adjust spacing in diagnostic messages. @245 + DX155. Avoid simultaneous use of \\{temp_head} by \\{prune_page_top} and the + page builder. @1017 + FX156. Clear the \\{post_break} field of simple discretionaries. @916 + AX157. Split \\{offset} into independent variables \\{term_offset}, + \\{file_offset}. @54,57,58 + # Am freezing current program as version $-0.25$; a week of TUG lectures + begins tomorrow. + * 5 Aug 1982 + IX158. The `|.err|' file should be `|.log|' instead. @534 + GX159. Allow |\special| strings to contain more than 256 bytes. @585,1368 + MX160\>X99. Undo ``correction'' to a non-bug. @1034 + IX161. Suggest |\&| in help message for unexpected |&|. @1128 + GX162. Make `|E|' a standard option for exiting. @84 + GX163. Restore the use of dead cycles \`a la \TeX78. @1024,1054 + # The previous six changes were suggested during discussions with \TeX82 class. + SX164. Fix global variable conflict between \\{open_log_file} and \\{new_font}. @1257 + CX165. Allow optional `|=|' when assign to font parameter. @1253 + FX166. Set \\{cur_val} after increasing the number of font parameters. @580 + DX167. Set \\{hash_brace} when matching `|{|'. @476 + IX168\>X88. Clarify meaning of statistics printed. @1334 + GX169. Change |DVI| format to include design size. @602,1260 + DX170. Introduce \\{def_ref} for \\{runaway} messages. @306 + MX171. Restore \\{cur_cs} before calling \\{scan_toks}. @1226 + AX172\>X157. Update \\{print_nl} to dual offset conventions. @62 + AX173\>X163. Move endgame logic inside \\{main_control}, because the output + routine becomes active. @1054 + * 6 Aug 1982 + CX174. Allow |INITEX| to load format files. @1337 + EX175. Conserve input stack space by deleting finished token lists. @325 + IX176\>X74. Print the opening `|**|' in the transcript file. @534 + # Now ready to try breaking new ground in |TRIP|. + SX177. Preserve \\{align_state} from tokens deleted online. @88 + DX178. Set $t$ in all branches of \\{scan_toks}. @473 + SX179. Change `$\\{cur_cmd}\le\\{right_brace}$' to `$\\{cur_tok}\le + \\{right_brace_limit}$'; otherwise |\relax| gets through. @477 + CX180. Allow optional |=| when setting |\spacefactor|; disallow zero. @1243 + BX181. Change \\{vpackage}(\\{head}) to \\{vpackage}(\\{link}(\\{head})). @796 + # Shades of 1978! + LX182. Insert missing {\bf begin} \dots{ \bf end}. @798 + * 7 Aug 1982 + LX183. Keep \\{trie_max} declared in non-|INITEX| [later rescinded]. @950 + DX184. Watch out for empty token list when copying. @466 + DX185. Free unused reference count slot when defining |\everypar|. @1226 + GX186\>X163. Introduce |\maxdeadcycles|. @1012 + # I believe the \\{line_break} routine has passed its test perfectly. + SX187. Don't put discretionary after |-| inside a discretionary. @1039 + CX188. Change `|\minus|' to `|\minusthe|' [this feature retracted later]. @413 + BX189. Change \\{cur_p} to $r$ (three places). @875 + AX190. Increase range of \\{hc} to \\{halfword}; otherwise end-of-word mark + might match a vacant entry in the trie. @892 + FX191. Initialize $b$ in \\{shift_case} routine. @1288 + EX192. Don't back up if a space follows a decimal fraction. @452 + BX193. Don't confuse \\{glue_base} with \\{dimen_base}. @1145 + LX194. Guard against anomalous floating-point values in glue display. @186 + * 8 Aug 1982 + SX195. Avoid infinite loop when |\outer| leads to runaways. @339 + # I worked on that problem about two hours before fixing it. + IX196. Move final \\{debug_help} to \\{succumb}, except in batch mode. @93 + RX197. Insert kern after spanned box, to defeat access to floating point. @808 + * 9 Aug 1982 + CX198. Include |\leftskip| and |\rightskip| in displayed equations [rescinded + later]. @1199 + IX199. Trace line-break computations if $\\{tracing_stats}>2$. @846,856 + DX200. Keep \\{prev_p} up to date when passing a string. @867 + # Now stepping through math stuff; a lot is working. + DX201. Set $\\{link}(p)\gets z$ when making a fraction. @747 + CX202. Don't reset space factor when beginning |\valign|. @775 + IX203. Don't show glue setting if $\\{glue_sign}=\\{normal}$. @186 + DX204. Clear \\{glue_stretch} and \\{glue_shrink} when creating an unset box. @801 + BX205. Do \\{vpack} in hmode and vice versa when aligning. @804 + AX206. Remove fallacious call to \\{confusion} after alignment in display. @1206 + AX207. Don't test $\\{mode}=\\{vmode}$ in display, test $\\{nest_ptr}=1$. @1145 + FX208. Show an \\{inner_noad} as well as the other types. @690,696 + DX209. Renumber \\{mu_glue} and \\{cond_math_glue} so that the glue display logic + works. @149 + BX210. Don't confuse \\{cur_size} with \\{cur_style}. @703 + FX211. Advance $p\gets q$ during second pass over mlist. @761 + IX212. Add helpful hint about |\tracingonline=1|. @1293 + TX213. Delete spurious statement left from sloppy editing. @710 + DX214. Change the subtype when \\{mskip} becomes \\{hskip}. @732 + FX215. Don't forget to use the remainder when computing math glue. @716 + IX216\>X199. Improve paragraph diagnostics using \\{short_display}. @857 + IX217\>X199. Introduce \\{artificial_badness} for better diagnostics. @854,856 + * 11 Aug 1982 + AX218. Introduce \\{char_box} subroutine so that \\{var_delimiter} adds italic + correction. @709 + SX219. Save font and char in local variables of \\{make_math_accent}, since + it can be recursive. @738 + FX220. Call \\{error} after decrying an invalid character. @346 + * 12 Aug 1982 + IX221\>X199. Install new format for showing break nodes. @846 + # I have been testing \\{line_break} and I think it's working fine. + BX222. Change $q$ to $p$, in order to catch empty alignments. @812,1206 + SX223. Disallow third part of discretionary in math mode. @1120 + DX224. Don't change \\{tail} if discretionary third part is empty. @1120 + IX225. Say |nonscript|, not |non_script|. @189 + SX226. Inhibit math if |\scriptfont3| is improper. @1195 + IX227\>X199. Introduce {\tt\@}|firstpass| and {\tt\@}|secondpass| comments. @863 + TX228. Change $p$ to $r$ when you mean $r$. @1204 + IX229\>X108. Say |page|, not |pages|, if there's only |1|. @642 + IX230. Insert space before |[]| on truncated |\showlists|. @182 + * 28 Aug 1982 + # Back from vacation after having looked at hardcopy listing of |TRIP| test. + GX231. Allow |dm| as a unit [later |.5dm1| will be |.5\dimen1|]. @455 + IX232\>X108. Singularize |prevgraf 1 lines|. @219 + IX233. Omit trailing zero count registers when showing completed page numbers. @638 + LX234. Avoid clobbering $a$ by introducing a new local variable $t$. @986 + DX235\>X216. Fix diagnostic printing of discretionaries. @858 + IX236. Don't show unset stretch/shrink that's zero. @185 + CX237\>X198. Make |\halign| in displays consistent with other displays. (Namely, + ignore |\leftskip| and |\rightskip| in nonaligned displays; + respect the paragraph shape in aligned displays.) @800,1199 + IX238. Parenthesize `|If you're confused ...|'. @403 + IX239. Say `|\fraction|', not `|\xabovex|'. @697 + FX240. Remember to {\bf return} when you should. @1153 + PX241. Use absolute value to make sure {\bf div} is unambiguous. @737 + BX242\>X218. Don't confuse depth with height. @709 + BX243. Use $\\{delta}-\\{height}$, not $\\{height}-\\{delta}$. @736 + BX244. Increase \\{shift_down} to increase the clearance. @745 + IX245. Don't back up after improper use of |\the|. @428 + IX246. Don't give |0pt| as the default result when looking for \\{tok_val}. @428 + FX247. Initialize \\{second_indent} in the easy case. @848 + FX248. Package the equation number. @1204 + QX249. Don't resort to $v\gets\\{max_dimen}$ when glue doesn't stretch or + shrink. @1148 + IX250. Insert newline before showing current |\botmark|. + FX251. Call \\{error} after giving error message. @784 + AX252. Change implementation of |\number|; it should \\{scan_int}, not + something internal. @471 + PX253. Introduce symbolic constants like \\{format_area_length}. @524 + PX254. Change \\{quit} to \\{jump_out}, since some compilers treat \\{quit} + as a reserved word. @81 + LX255. Add more parentheses to get proper parsing. @1260 + IX256. Say |please| in order to be friendly (or at least polite). @360 + BX257. Don't confuse \\{cur_vcmd} with \\{cur_chr}. @508 + IX258. Use |&| instead of |!| to specify a preloaded format. @1337 + TX259\>X177. Correct |s3| to |s4|. @88 + GX260. Introduce new primitive |\mathchardef|, to save space and time. @1224 + CX261. Use the |[]| convention for noads as well as nodes. @692 + TX262. Correct spelling in call to \\{primitive}: |\xatopx| should be |\xoverx| + [later renamed, thank goodness]. @1178 + * 30 Aug 1982 + RX263. Don't fetch \\{link}(\\{null}) in malformed list. @175 + SX264. Initialize \\{align_state} at a better time so that \\{align_peek} + doesn't see |&| or |\span|. @785,791 + SX265. Outlaw preamble interfering with $\\{align_state}=0$. @789 + CX266. Add level of grouping to alignment to tabskip locality. @774 + FX267. Check \\{align_state} when scanning $\langle u_j\rangle$. @783 + AX268. Move `\\{unsave}; \\{new_save_level}' from \\{main_control} into + \\{fin_col}. @791,1131 + SX269\>X180. Remember \\{cur_chr} when you're looking for optional `|=|'. @1243 + TX270. Change $q$ to $r$ [in code now obsolete]. @804 + IX271. Disable interrupts during \\{back_error} so that help messages aren't + clobbered. @327 + SX272. Introduce \\{slow_print} for printing control sequences. @60 + IX273. Initialize \\{del_code}(|"."|$)\gets0$ for error recovery. @240 + SX274. Call \\{end_file_reading} before calling \\{check_outer_validity}. @362 + IX275. Don't delete an extra `|}|' when |\par| will help find a runaway. @395 + * 31 Aug 1982 + BX276. Don't confuse \\{thin_muskip} with \\{thin_muskip_code}. @413 + FX277\>X266. Recover from error if new \\{align_group} ends abnormally. @1132 + IX278. Recover from error if |\par| occurs when $\\{align_state}<0$. @1094 + CX279. Make |\hskip\the\thinmuskip| and |\mskip\the\baselineskip| erroneous. @413 + GX280. Add |\muskip| and |\setmuskip| analogs to |skip| and |\setskip|. @413,1228 + EX281. Don't output |pop| right after |push|. @601 + # The |TRIP| test looks right; now to test for wasted memory. + # When memory should be empty I find $\\{dyn_used}=18$, $\\{var_used}=267$. + * 1 Sep 1982 + # Made special |MEMTEX| program, designed to track all memory allocation. + DX282. Delete reference to \\{last_glue} when a page is packaged. @1017 + IX283. Include \\{save_stack} in the \\{search_mem} debugging routine. @285 + CX284. Disallow |\vfill| in restricted horizontal mode. @1095 + # Most of the memory locations I thought were wasted were actually in good use. + # Total 192 hours (approx) debugging time so far since July 15. + * 2 Sep 1982 + # Now looking at all zero counts in profile and extending |TRIP|. + EX285. Simplify the creation of |vtop| boxes. @1087 + CX286. Set $\\{space_factor}\gets1000$ after |\hbox|. @1076 + PX287. Introduce preamble into |DVI| format. @617 + SX288. Give special \\{chr_code} to |\relax|. @265 + IX289. Don't show `|(null)|' when token list is null, just show nothing. @295 + EX290. Delete the procedure \\{write_name_string}, which is never used. + CX291. Rename |\xabovex| to |\abovewithdelims|; do the same for + |\xatopx| and |\xoverx|. @1178 + QX292. Improve \\{clean_box} so that it recognizes cleanliness better. @720 + IX293. Report a |Missing delimiter| more meaningfully. @1161 + RX294. Give \\{endv_token} a \\{chr} code of 128 so that it will end a file name. @289 + RX295. Test present of math fonts {\sl after\/} parsing an mlist, not + before. @1138,1195 + IX296. Omit `|recent contributions|' and/or `|current page|' when they are + empty. @218,986 + IX297. Display what \TeX\ has deleted after improper discretionary list + has arisen. @1121 + IX298. Show what math character was undefined. @723 + IX299. Improve the |Incompatible magnification| error; break it into two lines. @288 + DX300. Put new cases into \\{flush_node_list}, to recycle mlist noads. @698 + * 6 Sep 1982 + FX301\>X300. Insert a necessary `{\bf goto} \\{done}' in that new material. @698 + # It took two hours to diagnose that {\bf goto} problem. + TX302\>X295. Change `|2|' to `|3|' in help message for extension fonts. @1195 + IX303. Add a special note if material is being held over for the next output. @986 + RX304. Divide before multiplying in \\{make_left_right}, to avoid overflow. @762 + IX305. Introduce the \\{box_error} routine. @992 + FX306. Clear \\{arith_error} after overflow has been reported. @460 + BX307\>X249. Don't confuse \\{stretch} with \\{glue_stretch}. @1148 + DX308. Set $\\{glue_sign}\gets\\{normal}$ when packaging with glue ratio + zero. @558,664 + AX309. Test for overflow before attaching the sign. @448 + # That all worked! Now trying |min_quarterword| negative. + LX310. Take absolute value before applying {\bf mod} in \\{new_trie_op}. @944 + LX311. Say $\\{qi}(c)$, not $c$, when testing |TFM| flags [now obsolete]. @573 + LX312. Initialize \\{token_ref_count}(\\{def_ref}) to \\{null}, not zero. @473 + LX313. Change the type of \\{vsplit} parameter $n$ from \\{quarterword} to + \\{eight_bits}. @977 + LX314. Initialize \\{null-delimiter} different form \\{null_character}. @685 + LX315. Insert \\{qi} twice in \\{scan_delimiter}. @1160 + FX316. Insert \\{qi} in \\{scan_math}. @1151 + FX317. Insert \\{qo} in \\{fetch}. @722,723 + FX318. Insert \\{qi} in \\{set_math_char}. @1155 + FX319. Insert \\{qi} in \\{math_ac}. @1165 + FX320. Insert \\{qo} in \\{mlist_to_hlist}. @755 + IX321. Use brackets around 8-bit characters in \\{print_ASCII}. @68 + IX322. Include \\{hyph_list} in the \\{search_mem} debugging routine. @933 + # Now compiling non-|INITEX| to try an industrial-strength version. + LX323. Add {\bf return} to \\{final_cleanup}, because some Pascal compilers + insist that each label be used. @1335 + DX324. Compute \\{par_token} when undumping. @1314 + * 11 Sep 1982 + IX325. Emit newline before file name, if near end of line. @537 + CX326. Define |\ifx| for arbitrary tokens. @507 + * 12 Sep 1982 + IX327. Don't ask users to type |x| twice before exiting. @84 + GX328. Install new features |\openin|, |\read|, |\ifeof|, |\closein|; rename + existing |\open|, |\send|, |\close| to be |\openout|, |\write|, + |\closeout|. @209,313,1275 + GX329. Install new feature |\expandafter|. @368 + PX330. Change the default file area from `||' to `|TeXinputs:|'. @574 + * 13 Sep 1982 + GX331. Install new feature |\string|. @472 + AX332. Remove spurious space printed by |sprint_cs|. @263 + # All tests passed now! But when I played with the system I found another bug + (undetected by |TRIP|): + FX333. Set $r\gets s$ after matching macro parameter tokens. @397 + * 16 Sep 1982 + IX334\>X199. Introduce serial numbers in line-break records, improving + readability and independence. @846 + IX335. Don't abort when \\{file_name_size} is exceeded. @519 + * 17 Sep 1982 + IX336. Remove unwanted period from font capacity message. @567 + * 18 Sep 1982 + GX337\>X329. Make |\expandafter| more powerful by moving it from semantics + to syntax [i.e., from stomach to mouth]. @368 + * 19 Sep 1982 + IX338. Improve error recovery for `|Missing number|'. @415 + * 22 Sep 1982 + QX339. Suppress italic correction between letters in math mode except in math + fonts. @752 + * 24 Sep 1982 + PX340. Define $\\{null}=\\{mem_bot}$, not \\{min_halfword}, because there's + a reference to \\{link}(\\{null}) in \\{try_break}. @115 + DX341. Initialize $\\{str_start}[0]\gets0$. @47 + IX342. Avoid blank space at beginning of line. @638 + DX343. Set type of new box in math mode to \\{ord_noad}, not \\{inner_noad}. @1076 * 28 Sep 1982 # Here are the first changes made to the preliminary listing of \TeX82 that was *************** *** 1329,1333 **** published by the \TeX\ project earlier this month. F520. Insert the missing cases \\{letter} and \\{other_char} after ! \\{x_token} looks ahead. @1036 C521. Change `|\pause|' to `|\pausing|'. @236 D522. Reset \\{overfull_rule} when determining tabskip glue. @804 --- 1791,1795 ---- published by the \TeX\ project earlier this month. F520. Insert the missing cases \\{letter} and \\{other_char} after ! \\{x_token} looks ahead. @1038 C521. Change `|\pause|' to `|\pausing|'. @236 D522. Reset \\{overfull_rule} when determining tabskip glue. @804 *************** *** 1343,1347 **** (but longer) hyphenation patterns. @11 * 6 Oct 1982 ! F528. Change the string lengths to match the new \\{\TeX_format_default}. @520 # Version 0 of \TeX\ is being released today! * 8 Oct 1982 --- 1805,1809 ---- (but longer) hyphenation patterns. @11 * 6 Oct 1982 ! F528\>X330. Change the string lengths to match the new \\{\TeX_format_default}. @520 # Version 0 of \TeX\ is being released today! * 8 Oct 1982 *************** *** 1349,1353 **** been decreased mod \\{trie_op_hash_size} (HWT). @944 * 9 Oct 1982 ! P530. Fix a typo (`|!|' not `|&|') in the |WEB| documentation. @524 F531. Remember to call \\{initialize} if a different format was preloaded (Max D{\'\i}az). @1337 --- 1811,1815 ---- been decreased mod \\{trie_op_hash_size} (HWT). @944 * 9 Oct 1982 ! P530\>X258. Fix a typo (`|!|' not `|&|') in the |WEB| documentation. @524 F531. Remember to call \\{initialize} if a different format was preloaded (Max D{\'\i}az). @1337 *************** *** 1358,1362 **** * 13 Oct 1982 P533. Introduce new |WEB| macros so that \\{glue_ratio} is more easily changed. @109 ! # I began writing {\it The \TeX book\/} today: edited the old preface and searched in the library for quotations. * 14 Oct 1982 --- 1820,1824 ---- * 13 Oct 1982 P533. Introduce new |WEB| macros so that \\{glue_ratio} is more easily changed. @109 ! # I began writing {\sl The \TeX book\/} today: edited the old preface and searched in the library for quotations. * 14 Oct 1982 *************** *** 1363,1367 **** B534. Change the type of \\{hd} to \\{eight_bits}; it's not a \\{quarterword} (HWT). @649 ! S535. Revise the optimization of\/ |DVI| commands: It's not always safe to eliminate \\{pop} when the preceding byte is \\{push}, since |DVI| commands have variable length! (Embarrassing oversight caught by DRF.) @601 --- 1825,1829 ---- B534. Change the type of \\{hd} to \\{eight_bits}; it's not a \\{quarterword} (HWT). @649 ! S535\>X281. Revise the optimization of\/ |DVI| commands: It's not always safe to eliminate \\{pop} when the preceding byte is \\{push}, since |DVI| commands have variable length! (Embarrassing oversight caught by DRF.) @601 *************** *** 1373,1382 **** I538. Inhibit error messages when packaging box 255. @1017 * 21 Oct 1982 ! A539. Subtract $\\{width}(q)$ from \\{page_goal}, don't add it to $\\{page_so_far}[1]$. @1009 - # The comment in \S982 is correct, and so was my first draft of this code; - but when desk checking the program some months after writing it, - I introduced this bug, believing that I was making the algorithm - more elegant or something. # Version 0.4 incorporates the above changes. * 22 Oct 1982 --- 1835,1840 ---- I538. Inhibit error messages when packaging box 255. @1017 * 21 Oct 1982 ! A539\>X145. Subtract $\\{width}(q)$ from \\{page_goal}, don't add it to $\\{page_so_far}[1]$. @1009 # Version 0.4 incorporates the above changes. * 22 Oct 1982 *************** *** 1401,1405 **** # Actually I began making these changes on October 26, but I needed two days to debug them and to put Humpty Dumpty together again. ! # At this time I'm also drafting macros for typesetting {\it The \TeX book}. # The above changes have been incorporated into Version 0.6. * 30 Oct 1982 --- 1859,1863 ---- # Actually I began making these changes on October 26, but I needed two days to debug them and to put Humpty Dumpty together again. ! # At this time I'm also drafting macros for typesetting {\sl The \TeX book}. # The above changes have been incorporated into Version 0.6. * 30 Oct 1982 *************** *** 1425,1429 **** * 6 Nov 1982 D550. De-update \\{align_state} when braces are in constants. @442 ! I551. Improve error recovery for bad alignments. @1127 # Today I wrapped up Chapters 4 and 5. * 8 Nov 1982 --- 1883,1887 ---- * 6 Nov 1982 D550. De-update \\{align_state} when braces are in constants. @442 ! I551\>X294. Improve error recovery for bad alignments. @1127 # Today I wrapped up Chapters 4 and 5. * 8 Nov 1982 *************** *** 1455,1459 **** G559. Introduce a new |\tokens| register; this will be useful and easy to add, since \TeX\ already can handle |\everypar| and |\output|. @1227 ! C560. Change \\{get_x_token} to \\{get_token} when scanning an optional space; then a construction like |\def\foo{...}\foo| won't complain that |\foo| is undefined. @443 --- 1913,1917 ---- G559. Introduce a new |\tokens| register; this will be useful and easy to add, since \TeX\ already can handle |\everypar| and |\output|. @1227 ! C560\>X34. Change \\{get_x_token} to \\{get_token} when scanning an optional space; then a construction like |\def\foo{...}\foo| won't complain that |\foo| is undefined. @443 *************** *** 1521,1525 **** * 25 Dec 1982 # It's 10pm after a very Merry Christmas! ! I582. Don't prompt for a new file name if\/ |\openin| doesn't find a file. @1275 G583. Add a new |\jobname| primitive. @472 I584. Give the user a way to delete the dollar sign, when \TeX\ decides --- 1979,1983 ---- * 25 Dec 1982 # It's 10pm after a very Merry Christmas! ! I582\>X328. Don't prompt for a new file name if\/ |\openin| doesn't find a file. @1275 G583. Add a new |\jobname| primitive. @472 I584. Give the user a way to delete the dollar sign, when \TeX\ decides *************** *** 1535,1539 **** G588. Give users access to |\pagetotal| and |\pagegoal|. (Analogous to \#679 and \#585, but simpler.) @1245 ! I589. Introduce |\tracingpages|, allowing users to see page-optimization calculations. Also split |\tracingparagraphs| off from |\tracingstats|. @987,1005,1011 --- 1993,1997 ---- G588. Give users access to |\pagetotal| and |\pagegoal|. (Analogous to \#679 and \#585, but simpler.) @1245 ! I589\>X199. Introduce |\tracingpages|, allowing users to see page-optimization calculations. Also split |\tracingparagraphs| off from |\tracingstats|. @987,1005,1011 *************** *** 1556,1562 **** # Today I'm beginning to write Chapter 15, and planning the |\output| routine of |plain.tex|. ! C594. Change the logic of \\{its_all_over}; use \\{max_dead_cycles} instead ! of the fixed constant~100. @1054 ! F595. Don't forget to \\{pop_nest} when an insert is empty. Also disallow optional space after |\insert|$\,n\,$|{...}|. @1100 * 4 Jan 1983 --- 2014,2020 ---- # Today I'm beginning to write Chapter 15, and planning the |\output| routine of |plain.tex|. ! C594\>X186. Change the logic of \\{its_all_over}; use \\{max_dead_cycles} ! here too, instead of the fixed constant~100. @1054 ! F595\>X34. Don't forget to \\{pop_nest} when an insert is empty. Also disallow optional space after |\insert|$\,n\,$|{...}|. @1100 * 4 Jan 1983 *************** *** 1565,1569 **** C597. Rename |\groupbegin| and |\groupend| as |\begingroup| and |\endgroup|. @265 ! G598. Make |\deadcycles| accessible to users. @1246 Q599. Base the split insertions on natural height plus depth, not on \\{delta}. @1010 --- 2023,2027 ---- C597. Rename |\groupbegin| and |\groupend| as |\begingroup| and |\endgroup|. @265 ! G598\>594. Make |\deadcycles| accessible to users. @1246 Q599. Base the split insertions on natural height plus depth, not on \\{delta}. @1010 *************** *** 1619,1624 **** * 19 Jan 1983 G617. Introduce a |\mathchoice| primitive. @1174 ! C618. Move |\input| from the stomach to the eyes. @378 ! C619. Introduce |\chardef|, analogous to |\mathchardef|. @1036,1224 G620. Change |\unbox| to |\unhbox| and |\unvbox|; also add |\unhcopy|. @1110 C621. Consider |\spacefactor|, |\pagetotal|, etc., as part of --- 2077,2082 ---- * 19 Jan 1983 G617. Introduce a |\mathchoice| primitive. @1174 ! C618. Move |\input| from the stomach to the mouth. @378 ! C619\>X260. Introduce |\chardef|, analogous to |\mathchardef|. @1038,1224 G620. Change |\unbox| to |\unhbox| and |\unvbox|; also add |\unhcopy|. @1110 C621. Consider |\spacefactor|, |\pagetotal|, etc., as part of *************** *** 1642,1646 **** Ensure that $b$ isn't a vbox. @715 C627\>545. Make |\nullfont| a primitive, so that \\{cur_font} always ! has a value. (This is a dramatic improvement to \TeX78, where a missing font was a fatal error called `|Whoa|'!) @552 * 24 Jan 1983 --- 2100,2104 ---- Ensure that $b$ isn't a vbox. @715 C627\>545. Make |\nullfont| a primitive, so that \\{cur_font} always ! has a value. (This is a dramatic improvement over \TeX78, where a missing font was a fatal error called `|Whoa|'!) @552 * 24 Jan 1983 *************** *** 1647,1651 **** I628\>586. List all incomplete |\if|'s when the job ends. @1335 * 29 Jan 1983 ! C629. Change initialization of \\{align_state} so that |\halign\bgroup| works. @777 * 30 Jan 1983 --- 2105,2109 ---- I628\>586. List all incomplete |\if|'s when the job ends. @1335 * 29 Jan 1983 ! C629\>552. Change initialization of \\{align_state} so that |\halign\bgroup| works. @777 * 30 Jan 1983 *************** *** 1655,1659 **** used font number~11 ($=\\{kern_node}$) in the second character of a list of length~2! ! I631. Improve format for stats at end of run, as suggested by DRF. @1334 # The changes above have been incorporated into Version 0.95. C632. Don't ignore the space after a control symbol (except `|\ |'). @354 --- 2113,2117 ---- used font number~11 ($=\\{kern_node}$) in the second character of a list of length~2! ! I631\>X168. Improve format for stats at end of run, as suggested by DRF. @1334 # The changes above have been incorporated into Version 0.95. C632. Don't ignore the space after a control symbol (except `|\ |'). @354 *************** *** 1666,1670 **** G635. Add new primitives |\iftrue| and |\iffalse|. @488 * 6 Feb 1983 ! A636. Improve the accuracy of fixed-point arithmetic when calculating sizes for |\left| and |\right|. (I had started by dividing \\{delimiter_factor}, not \\{delta1}, by 500.) @762 --- 2124,2128 ---- G635. Add new primitives |\iftrue| and |\iffalse|. @488 * 6 Feb 1983 ! A636\>X304. Improve the accuracy of fixed-point arithmetic when calculating sizes for |\left| and |\right|. (I had started by dividing \\{delimiter_factor}, not \\{delta1}, by 500.) @762 *************** *** 1676,1680 **** make |\fam| a normal integer parameter and allow |\mathcode| to equal $2^{15}$. @1233 ! R640. Don't let |\spacefactor| become $2^{15}$ or more. @1233,1243 # I finished drafting Chapter 17 today. * 14 Feb 1983 --- 2134,2138 ---- make |\fam| a normal integer parameter and allow |\mathcode| to equal $2^{15}$. @1233 ! R640. Don't let |\spacefactor| become more than $2^{15}$. @1233,1243 # I finished drafting Chapter 17 today. * 14 Feb 1983 *************** *** 1683,1687 **** F642\>619. Don't forget \\{char_given} in the \\{math_accent} routine. @1124 * 17 Feb 1983 ! C643. Switch modes when |\halign| occurs in horizontal mode, or |\valign| in vertical mode. @1090,1094 * 18 Feb 1983 --- 2141,2145 ---- F642\>619. Don't forget \\{char_given} in the \\{math_accent} routine. @1124 * 17 Feb 1983 ! C643\>622. Switch modes when |\halign| occurs in horizontal mode, or |\valign| in vertical mode. @1090,1094 * 18 Feb 1983 *************** *** 1703,1707 **** G649. Add new features |\everyhbox| and |\everyvbox|. @1083,1167 * 9 Mar 1983 ! R650. Avoid accessing \\{math_quad} when the symbol fonts aren't known to be present. @1199 P651\>533. Introduce \\{float} and \\{unfloat} macros to aid portability (HWT). @109 --- 2161,2165 ---- G649. Add new features |\everyhbox| and |\everyvbox|. @1083,1167 * 9 Mar 1983 ! R650\>X295. Avoid accessing \\{math_quad} when the symbol fonts aren't known to be present. @1199 P651\>533. Introduce \\{float} and \\{unfloat} macros to aid portability (HWT). @109 *************** *** 1725,1729 **** C659. Ignore blanks that would otherwise become undelimited arguments. @393 * 21 Mar 1983 ! F660. Make |\lastskip| handle \\{mu_glue} as well as ordinary glue. @424 C661\>561. Expand only one level in a preamble |\span|. @782 * 22 Mar 1983 --- 2183,2187 ---- C659. Ignore blanks that would otherwise become undelimited arguments. @393 * 21 Mar 1983 ! F660\>X280. Make |\lastskip| handle \\{mu_glue} as well as ordinary glue. @424 C661\>561. Expand only one level in a preamble |\span|. @782 * 22 Mar 1983 *************** *** 1731,1735 **** in which |##| was always required as in macros, was a loser especially in |\write| where you had to say |####|!) @477 ! C663. Require the keyword `|to|' in |\read|. (This will avoid the common error of an incomplete constant when no space appears before the |\cs|.) Also allow terminal --- 2189,2193 ---- in which |##| was always required as in macros, was a loser especially in |\write| where you had to say |####|!) @477 ! C663\>X328. Require the keyword `|to|' in |\read|. (This will avoid the common error of an incomplete constant when no space appears before the |\cs|.) Also allow terminal *************** *** 1743,1747 **** in my original implementation. * 28 Mar 1983 ! G666. Tolerate non-characters as arguments to |\if| and |\ifcat|. @506 C667. Change `|absent|' to `|void|', a better word. @487 C668. Clear the \\{shift_amount} in |\lastbox|, since I don't --- 2201,2205 ---- in my original implementation. * 28 Mar 1983 ! G666\>X326. Tolerate non-characters as arguments to |\if| and |\ifcat|. @506 C667. Change `|absent|' to `|void|', a better word. @487 C668. Clear the \\{shift_amount} in |\lastbox|, since I don't *************** *** 1772,1776 **** I678. Recover more sensibly after a runaway preamble. @339 * 12 Apr 1983 ! C679. Make |\read| span several input lines, if necessary to get balanced braces. @482 * 14 Apr 1983 --- 2230,2234 ---- I678. Recover more sensibly after a runaway preamble. @339 * 12 Apr 1983 ! C679\>X328. Make |\read| span several input lines, if necessary to get balanced braces. @482 * 14 Apr 1983 *************** *** 1799,1803 **** * 18 May 1983 I685. Restrict |\write| $n$ to the transcript file only, if $n<0$. @1350 ! C686. Unify the syntax for registers and internal quantities. (Remove primitives called `|\insthe|' and `|\minusthe|'; rename \\{scan_the} to \\{scan_something_internal}, and change its --- 2257,2261 ---- * 18 May 1983 I685. Restrict |\write| $n$ to the transcript file only, if $n<0$. @1350 ! C686\>X188. Unify the syntax for registers and internal quantities. (Remove primitives called `|\insthe|' and `|\minusthe|'; rename \\{scan_the} to \\{scan_something_internal}, and change its *************** *** 1819,1827 **** implement this one!) @358,369 G694. Introduce |\meaning|. @296 ! G695. Remove `|dm|' and `|vu|'; allow the more general `|.5\hsize|'. @455 C696. Change `|\texinfo| $f$ $n$' to `|\fontdimen| $n$ $f$'. @578 * 27 May 1983 G697. Add a new feature |\afterassignment| (suggested by ARK). @1269 ! C698. Adjust the timing so that commands like `|\chardef\xx=5\xx|' behave sensibly. @1224 * 28 May 1983 --- 2277,2285 ---- implement this one!) @358,369 G694. Introduce |\meaning|. @296 ! G695\>X231. Remove `|dm|' and `|vu|'; allow the more general `|.5\hsize|'. @455 C696. Change `|\texinfo| $f$ $n$' to `|\fontdimen| $n$ $f$'. @578 * 27 May 1983 G697. Add a new feature |\afterassignment| (suggested by ARK). @1269 ! C698\>619. Adjust the timing so that commands like `|\chardef\xx=5\xx|' behave sensibly. @1224 * 28 May 1983 *************** *** 1831,1835 **** and superscripts (suggested by HWT). @742 * 30 May 1983 ! C701\>594. Terminate a job only when $\\{dead_cycles}=0$. @1054 # The changes above constitute Version 0.98. * 3 Jun 1983 --- 2289,2293 ---- and superscripts (suggested by HWT). @742 * 30 May 1983 ! C701\>598. Terminate a job only when $\\{dead_cycles}=0$. @1054 # The changes above constitute Version 0.98. * 3 Jun 1983 *************** *** 1877,1881 **** in a |\valign|. @785 * 10 Jun 1983 ! C720. Expand the optional space after an ASCII constant. @442 * 12 Jun 1983 C721. Set $\\{space_factor}\gets1000$ after a rule or a --- 2335,2339 ---- in a |\valign|. @785 * 10 Jun 1983 ! C720\>708. Expand the optional space after an ASCII constant. @442 * 12 Jun 1983 C721. Set $\\{space_factor}\gets1000$ after a rule or a *************** *** 1883,1887 **** * 14 Jun 1983 D722. Correct a serious blunder: Set $\\{disc_width}\gets0$ before testing ! if $s$ is null (caught by JS). @870 # This is a real bug that existed since the beginning! It showed up on page~37 of the --- 2341,2345 ---- * 14 Jun 1983 D722. Correct a serious blunder: Set $\\{disc_width}\gets0$ before testing ! if $s$ is null (caught by JS). @869 # This is a real bug that existed since the beginning! It showed up on page~37 of the *************** *** 1951,1955 **** from the stomach to the throat); this cleans up several annoying glitches. @367 ! C751. Allow |\unhbox| and |\unhcopy| in math mode if the box is void. @1110 * 13 Jul 1983 # I lectured for four hours at the TUG meeting today after very little sleep! --- 2409,2413 ---- from the stomach to the throat); this cleans up several annoying glitches. @367 ! C751\>620. Allow |\unhbox| and |\unhcopy| in math mode if the box is void. @1110 * 13 Jul 1983 # I lectured for four hours at the TUG meeting today after very little sleep! *************** *** 1964,1968 **** G755. Allow boxes and rules in discretionaries (suggested by somebody from Hewlett-Packard). @1121 ! I756. Show all token expansions, not just macros, when |\tracingcommands|. @367 C757. Allow |\char| in a |\hyphenation| list. @935 --- 2422,2426 ---- G755. Allow boxes and rules in discretionaries (suggested by somebody from Hewlett-Packard). @1121 ! I756\>X28. Show all token expansions, not just macros, when |\tracingcommands|. @367 C757. Allow |\char| in a |\hyphenation| list. @935 *************** *** 1974,1978 **** R760. Zero out \\{hyf} values at the edges, so that weird pattern data cannot lead to Pascal range checks. @965 ! R761. Decrease the |hc| codes for hyphenation, so that code~127 cannot possibly be matched. @937,962 C762\>672. Allow whatsits after hyphenatable words. @899 --- 2432,2436 ---- R760. Zero out \\{hyf} values at the edges, so that weird pattern data cannot lead to Pascal range checks. @965 ! R761\>X190. Decrease the |hc| codes for hyphenation, so that code~127 cannot possibly be matched. @937,962 C762\>672. Allow whatsits after hyphenatable words. @899 *************** *** 1997,2001 **** E769. Avoid putting a control sequence in the hash table when it occurs after |\ifx|. (Requested by Math Reviews people.) @507 ! # Finished a version of {\it The \TeX book\/} lacking only Appendices D, E, and~I, for distribution to interested readers. # To bed at 10:30pm, planning to arise regularly at 6am for a change. --- 2455,2459 ---- E769. Avoid putting a control sequence in the hash table when it occurs after |\ifx|. (Requested by Math Reviews people.) @507 ! # Finished a version of {\sl The \TeX book\/} lacking only Appendices D, E, and~I, for distribution to interested readers. # To bed at 10:30pm, planning to arise regularly at 6am for a change. *************** *** 2014,2019 **** (found by FY). @627 * 20 Aug 1983 ! F775. Don't forget to apply |\/| to ligatures! @1113 ! # Today I began to read all previous issues of {\it TUGboat}, in preparation for Appendix~D. * 27 Aug 1983 --- 2472,2477 ---- (found by FY). @627 * 20 Aug 1983 ! F775. Don't forget to apply |\/| to ligatures. @1113 ! # Today I began to read all previous issues of {\sl TUGboat}, in preparation for Appendix~D. * 27 Aug 1983 *************** *** 2020,2024 **** I776. Add debugging hack number~16, to help catch subtle data structure bugs. @1339 E777. Remove redundant setting and resetting of \\{name_in_progress}. @531 ! S778. Suppress |\input| during a font size spec; otherwise \\{cur_name} is clobbered (found by MDS). @1258 G779. Introduce new conditionals |\ifhbox| and |\ifvbox|. @505 --- 2478,2482 ---- I776. Add debugging hack number~16, to help catch subtle data structure bugs. @1339 E777. Remove redundant setting and resetting of \\{name_in_progress}. @531 ! S778\>618. Suppress |\input| during a font size spec; otherwise \\{cur_name} is clobbered (found by MDS). @1258 G779. Introduce new conditionals |\ifhbox| and |\ifvbox|. @505 *************** *** 2026,2030 **** D780\>750. Test for an empty list, if emptiness will mess up the data structure. (Found by Todd Allen.) @478 ! E781. Use \\{fast_for_new_token} for efficiency. @466 I782. Say `|has only|' instead of `|has|'. @579 # These changes yield Version 0.99999, used only at Stanford. --- 2484,2488 ---- D780\>750. Test for an empty list, if emptiness will mess up the data structure. (Found by Todd Allen.) @478 ! E781\>624. Use \\{fast_store_new_token} in another place for efficiency. @466 I782. Say `|has only|' instead of `|has|'. @579 # These changes yield Version 0.99999, used only at Stanford. *************** *** 2048,2053 **** * 26 Sep 1983 I789. Change `|log|' to `|transcript|' in several messages. @535,1335 ! # The index was finished today; I mailed the entire {\it \TeX book\/} East for ! final proofreading before publication. * 1 Oct 1983 D790. Prevent uninitialized trie positions in case of overflow --- 2506,2511 ---- * 26 Sep 1983 I789. Change `|log|' to `|transcript|' in several messages. @535,1335 ! # The index was finished today; I mailed the entire {\sl \TeX book\/} to ! Massachusetts for final proofreading before publication. * 1 Oct 1983 D790. Prevent uninitialized trie positions in case of overflow *************** *** 2055,2063 **** * 7 Oct 1983 # Henceforth our weekly `\TeX\ lunch' meetings will be called `\MF\ lunch'. ! # DRF begins to produce {\it The \TeX book\/} on our APS phototypesetter. * 14 Oct 1983 P791\>633. Ignore spaces at the ends of lines also in |TEX.POOL| (found by DRF). @52 ! D792. Initialize the \\{history} variable at \\{start_here} (DRF). @1332 * 18 Oct 1983 I793. Extend \\{runaway} to catch runaway text (suggested by FY). @306 --- 2513,2521 ---- * 7 Oct 1983 # Henceforth our weekly `\TeX\ lunch' meetings will be called `\MF\ lunch'. ! # DRF begins to produce {\sl The \TeX book\/} on our APS phototypesetter. * 14 Oct 1983 P791\>633. Ignore spaces at the ends of lines also in |TEX.POOL| (found by DRF). @52 ! D792\>610. Initialize the \\{history} variable at \\{start_here} (DRF). @1332 * 18 Oct 1983 I793. Extend \\{runaway} to catch runaway text (suggested by FY). @306 *************** *** 2124,2128 **** * 21 Jun 1984 C811. Look ahead for ligature or kern after a |\chardef|'d item ! (D\'esarm\'enien). @1036 * 4 Jul 1984 R812. Make the quarterword constraint explicit with a --- 2582,2586 ---- * 21 Jun 1984 C811. Look ahead for ligature or kern after a |\chardef|'d item ! (D\'esarm\'enien). @1038 * 4 Jul 1984 R812. Make the quarterword constraint explicit with a *************** *** 2162,2166 **** I823. Convey more uncertainty in the help message at times of \\{confusion}. @95 ! I824. Improve the \\{history} logic in the \\{warning_issued} case. @245 * 18 Feb 1985 P825\>810. Stick to standard Pascal: Don't --- 2620,2624 ---- I823. Convey more uncertainty in the help message at times of \\{confusion}. @95 ! I824\>610. Improve the \\{history} logic in the \\{warning_issued} case. @245 * 18 Feb 1985 P825\>810. Stick to standard Pascal: Don't *************** *** 2264,2268 **** |\outer\def\a0{}\a\a| (Silvio Levy). @391 * 24 Apr 1988 ! S858. Avoid conflicting use of the string pool in constructions like |\def\\#1{}\input a\\\z| (Robert Messer). @260 * 10 May 1988 --- 2722,2726 ---- |\outer\def\a0{}\a\a| (Silvio Levy). @391 * 24 Apr 1988 ! S858\>618. Avoid conflicting use of the string pool in constructions like |\def\\#1{}\input a\\\z| (Robert Messer). @260 * 10 May 1988 *************** *** 2271,2277 **** * 25 May 1988 R860. Guarantee that \\{trie_pointer} cannot be out of range. @923 ! S861. Avoid additional bugs like \#858 in constructions like |\input a\romannumeral1|, etc. @464,465,470 ! R862. Prevent similar string pool confusion that could occur during the processing of |**\input\romannumeral6|. @525 * 19 Jun 1988 --- 2729,2735 ---- * 25 May 1988 R860. Guarantee that \\{trie_pointer} cannot be out of range. @923 ! S861\>618. Avoid additional bugs like \#858 in constructions like |\input a\romannumeral1|, etc. @464,465,470 ! R862\>618. Prevent similar string pool confusion that could occur during the processing of |**\input\romannumeral6|. @525 * 19 Jun 1988 *************** *** 2295,2299 **** * 17 Feb 1989 D870\>758. Avoid spurious error message for |\aftergroup\relax\dump| by avoiding ! inaccessible |\aftergroup| tokens (FM and RS). @280 * 20 Mar 1989 R871. Don't refer to \\{link}(\\{null}) even when it ``can't happen'' --- 2753,2757 ---- * 17 Feb 1989 D870\>758. Avoid spurious error message for |\aftergroup\relax\dump| by avoiding ! inaccessible |\aftergroup| tokens (FM and Rainer Sch\"opf). @280 * 20 Mar 1989 R871. Don't refer to \\{link}(\\{null}) even when it ``can't happen'' *************** *** 2311,2315 **** M875. Allow integer products to be 31 bits long (FM). @105 * 31 Aug 1989 ! C876\>441. Increase the number of tokens shown by \\{token\_show} (J. Lavagnino). @295 S877. Avoid confusion from |$$\begingroup\eqno$$| (FM). @1140 --- 2769,2773 ---- M875. Allow integer products to be 31 bits long (FM). @105 * 31 Aug 1989 ! C876\>441. Increase the number of tokens shown by \\{token_show} (J. Lavagnino). @295 S877. Avoid confusion from |$$\begingroup\eqno$$| (FM). @1140 *************** *** 2338,2346 **** R889. Avoid range check in null font with |bc=256| (PB). @565 * 22 Nov 1989 ! S890\>856. Prevent \\{save\_stack} conflicts in |{\hbox\expandafter{\csname\endcsname}}| and\kern-3pt\break ! similar constructions (WGS). @645,1117 S891\>858. System-dependent parts of file names must be addressed relatively, ! not absolutely (FM and RS). @516,517 * 3 Dec 1989 G892\>880. Allow different hyphenmins in the same paragraph (M. Ferguson). @1376 --- 2796,2804 ---- R889. Avoid range check in null font with |bc=256| (PB). @565 * 22 Nov 1989 ! S890\>856. Prevent \\{save_stack} conflicts in |{\hbox\expandafter{\csname\endcsname}}| and\kern-3pt\break ! similar constructions (WGS). @645,1117 S891\>858. System-dependent parts of file names must be addressed relatively, ! not absolutely (FM and Rainer Sch\"opf). @516,517 * 3 Dec 1989 G892\>880. Allow different hyphenmins in the same paragraph (M. Ferguson). @1376 *************** *** 2354,2359 **** D897\>879. Make an undumped trie dumpable again (PB). @1325 * 18 Dec 1989 ! G898. Allow access to page totals in |\output| routines (FM and Chris Rowley). ! @421 * 22 Jan 1990 R899\>611. Recognize more cases of unbalanced |\output| (CET). @1026 --- 2812,2817 ---- D897\>879. Make an undumped trie dumpable again (PB). @1325 * 18 Dec 1989 ! G898\>588. Allow access to page totals in |\output| routines ! (FM and Chris Rowley). @421 * 22 Jan 1990 R899\>611. Recognize more cases of unbalanced |\output| (CET). @1026 *************** *** 2362,2366 **** @1194 * 1 Feb 1990 ! S901\>878. Fix one more case of \\{end\_line\_char\_inactive} (WGS). @360 * 22 Feb 1990 R902. Don't lose the last active node when total demerits are very high (FM). --- 2820,2824 ---- @1194 * 1 Feb 1990 ! S901\>878. Fix one more case of \\{end_line_char_inactive} (WGS). @360 * 22 Feb 1990 R902. Don't lose the last active node when total demerits are very high (FM). *************** *** 2375,2393 **** I906. Balance the parentheses shown on the terminal during normal runs. @1335 E907. Optimize |\ifx\p\q| after |\let\p=\q| (MVL). @508 ! S907. Treat migration properly in displays (MVL). @1199,1205 # We're now up to Version 3.0; I sincerely hope all bugs have been found. * 11 May 1990 ! F908\>881. Initialize |\nullfont| ligature parameters (Lance Carnes). @552 * 22 July 1990 ! S909\>579. Treat |\prevgraf| as zero within |\write| (Bogus\l aw Jackowski). @422 * 26 July 1990 ! S910. Report `|l.1|' when first line of file overflows buffer (George Russell). @538 * 5 December 1990 ! S911. Translate unprintable characters in font identifiers (WGS). @63 * 28 December 1990 ! R912. Avoid range check when there are 65536 or more pages (Eberhard Mattes). @642 \relax \bye --- 2833,2869 ---- I906. Balance the parentheses shown on the terminal during normal runs. @1335 E907. Optimize |\ifx\p\q| after |\let\p=\q| (MVL). @508 ! S908. Treat migration properly in displays (MVL). @1199,1205 # We're now up to Version 3.0; I sincerely hope all bugs have been found. * 11 May 1990 ! F909\>881. Initialize |\nullfont| ligature parameters (Lance Carnes). @552 * 22 July 1990 ! S910\>579. Treat |\prevgraf| as zero within |\write| (Bogus\l aw Jackowski). @422 * 26 July 1990 ! S911. Report `|l.1|' when first line of file overflows buffer (George Russell). @538 * 5 December 1990 ! S912\>878. Translate unprintable characters in font identifiers (WGS). @63 * 28 December 1990 ! R913. Avoid range check when there are 65536 or more pages (Eberhard Mattes). @642 + * 20 September 1991 + I914\>878. Improve error message for |\mathchar| out of range. @436 + S915\>878. Retain unprintable internal strings in 8-bit form (FM). @59 + S916\>881. Retain right punctuation context for ligature reconstruction + (problem found by Brian Hamilton Kelly). @903 + * 10 January 1992 + S917\>881. Also avoid producing a double kern at boundary (CET). @897 + S918. Disallow |\setbox| where it doesn't work (Robert Hunt). @1241,1270 + S919. Robustify |\mskip| and |\mkern| in presence of negative quad (WGS). + @716,717 + S920\>679. Defend against `|}{|' in |\read| (Michael Downes). @483 + E921\>798. Save string memory if font occurs repeatedly (Bogus\l aw Jackowski). + @1260 + S922\>784. Don't let |\newlinechar| interrupt unprintable expansion (Bernd + Raichle). @59,60 + * 7 February 1992 + D923\>881. Restore |cur_l| properly when boundary character doesn't exist + (Mattes and Raichle). @1036 \relax \bye *************** *** 2400,2405 **** CET Chris Thompson FM Frank Mittelbach (added subsequent to publication of paper) - RS Rainer Sch\"opf (ditto) PB Peter Breitenlohner (ditto) WGS Wayne G. Sullivan (ditto) MVL Marc van Leeuwen (ditto) --- 2876,2881 ---- CET Chris Thompson FM Frank Mittelbach (added subsequent to publication of paper) PB Peter Breitenlohner (ditto) WGS Wayne G. Sullivan (ditto) MVL Marc van Leeuwen (ditto) + MDS Michael D. Spivak (ditto) diff -r -c2 oldtex/dist/errata/logmac.tex newtex/dist/errata/logmac.tex *** oldtex/dist/errata/logmac.tex Mon Mar 16 11:06:05 1992 --- newtex/dist/errata/logmac.tex Fri Oct 18 21:33:44 1991 *************** *** 44,48 **** {\obeylines \gdef@#1 {\global\setbox\texsec=\hbox{\S$#1$}\lookahead}} ! \def\>#1\relax{\global\setbox\predec=\hbox{$#1\mapsto{}$}} % previous bug ref \def\checkvalid#1{\expandafter\ifx\csname#1!\endcsname\okay\else\invalidcode\fi} --- 44,53 ---- {\obeylines \gdef@#1 {\global\setbox\texsec=\hbox{\S$#1$}\lookahead}} ! \chardef\@=`\@ ! {\catcode`X=\active \gdef X{\X}} ! \def\X{{\eightbf X}} ! \def\lightX{\hbox{\eightrm X}} ! \def\>#1\relax{\global\setbox\predec=\hbox{\let\X=\lightX ! $#1\mapsto{}$}} % previous bug ref \def\checkvalid#1{\expandafter\ifx\csname#1!\endcsname\okay\else\invalidcode\fi} *************** *** 77,85 **** \global\setbox\code=\hbox to\codesize{\enspace \hskip0pt plus 3fil\rm#1\hskip0pt plus1fil}% ! \begingroup\rm\itemnumber} ! \def\itemnumber#1.{\setbox0=\hbox to\itemnosize{\bf\hfil#1\relax}% \textindent{\hfil\box\predec\box0}} \def\commentline{\fin\afterassignment\begincomment\let\next} ! \def\begincomment{\begingroup\let\tt=\sltt\let\SAIL=\slSAIL \let\MF=\slMF\sl\textindent{\hfil\copy\cbox}} --- 82,91 ---- \global\setbox\code=\hbox to\codesize{\enspace \hskip0pt plus 3fil\rm#1\hskip0pt plus1fil}% ! \begingroup\rm\catcode`X=\active\itemnumber} ! \def\itemnumber#1.{\catcode`X=11\setbox0=\hbox to\itemnosize{\bf\hss#1\relax}% ! \setbox2=\hbox{\bf#1\relax}\ifdim\wd2>\wd0 \setbox0=\box2 \fi \textindent{\hfil\box\predec\box0}} \def\commentline{\fin\afterassignment\begincomment\let\next} ! \def\begincomment{\begingroup\let\tt=\sltt \let\MF=\slMF\sl\textindent{\hfil\copy\cbox}} *************** *** 96,101 **** \def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant - \def\SAIL{{\eightrm SAIL}} - \def\slSAIL{{\eightsl SAIL}} \def\slMF{{\logosl META}\-{\logosl FONT}} --- 102,105 ---- diff -r -c2 oldtex/dist/errata/mf84.bug newtex/dist/errata/mf84.bug *** oldtex/dist/errata/mf84.bug Mon Mar 16 11:06:07 1992 --- newtex/dist/errata/mf84.bug Fri Jan 24 16:47:41 1992 *************** *** 1360,1364 **** end; @z ! @x module 425 is entirely replace @y by the following code: @ @= --- 1360,1364 ---- end; @z ! @x module 425 is entirely replaced @y by the following code: @ @= *************** *** 1878,1888 **** @z ------------- ! 557. The absolutely final change (to be made after my death) @x module 2 ! @d banner=='This is METAFONT, Version 2.7' {printed when \MF\ starts} @y @d banner=='This is METAFONT, Version $e$' {printed when \MF\ starts} @z My last will and testament for METAFONT is that no further changes be made under any circumstances. Improved systems should not be called simply --- 1878,2177 ---- @z + 557. TeX82 bug 308, corrected in 1985, is also in MF! (Lutz Birkhahn, May91) + @x module 176 + var_used:=lo_mem_stat_max+1-mem_min; dyn_used:=mem_top+1-hi_mem_stat_min; + @y + var_used:=lo_mem_stat_max+1-mem_min; dyn_used:=mem_top+1-hi_mem_min; + @z + + 558. Allow unprintable file names, as in TeX change 396 (19 Sep 91) + (Much of this is redundant except for people who make nonportable + versions that allow other 8-bit codes to be in variable names---and for + those people only if they allow input of more codes than they can print! + Still, it seems best to make the programs for TeX and MF as alike as possible.) + @x module 59 + j:=str_start[s]; + while jpseudo) then print_char(s) + else begin j:=str_start[s]; + while jpseudo) then print_char(s) + else begin j:=str_start[s]; + while jnull then print(text(name)) + @y + if name<>null then slow_print(text(name)) + @z + @x module 664 + if scanner_status=op_defining then print(text(warning_info)) + @y + if scanner_status=op_defining then slow_print(text(warning_info)) + @z + @x module 664 again + loop_defining: begin print("the text of a "); print(text(warning_info)); + @y + loop_defining: begin print("the text of a "); slow_print(text(warning_info)); + @z + @x module 722 + begin if n<>null then print(text(n)) + @y + begin if n<>null then slow_print(text(n)) + @z + @x module 722 again + if p=null then print(text(info(info(link(a))))) + @y + if p=null then slow_print(text(info(info(link(a))))) + @z + @x module 725 + print_nl(" Missing `"); print(text(r_delim)); + @y + print_nl(" Missing `"); slow_print(text(r_delim)); + @z + @x module 773 + begin print(a); print(n); print(e); + @y + begin slow_print(a); slow_print(n); slow_print(e); + @z + @x module 790 + print(base_ident); print(" "); + @y + slow_print(base_ident); print(" "); + @z + @x module 793 + print_char("("); incr(open_parens); print(name); update_terminal; + @y + print_char("("); incr(open_parens); slow_print(name); update_terminal; + @z + @x module 998 + if info(lhs)>hash_end then print(int_name[info(lhs)-(hash_end)]) + @y + if info(lhs)>hash_end then slow_print(int_name[info(lhs)-(hash_end)]) + @z + @x module 999 + print(int_name[info(lhs)-(hash_end)]); + @y + slow_print(int_name[info(lhs)-(hash_end)]); + @z + @x module 1032 + else begin print_err("The token `"); print(text(r_delim)); + @y + else begin print_err("The token `"); slow_print(text(r_delim)); + @z + @x module 1034 + else print(text(cur_sym)); + @y + else slow_print(text(cur_sym)); + @z + @x module 1041 + else begin print(text(cur_sym)); print_char("="); + @y + else begin slow_print(text(cur_sym)); print_char("="); + @z + @x module 1042 + else begin print_char(""""); print(cur_mod); print_char(""""); + @y + else begin print_char(""""); slow_print(cur_mod); print_char(""""); + @z + @x module 1043 + print("t delimiter that matches "); print(text(m)); + @y + print("t delimiter that matches "); slow_print(text(m)); + @z + @x module 1043 again + internal_quantity:print(int_name[m]); + @y + internal_quantity:slow_print(int_name[m]); + @z + @x module 1134 + print_nl("Font metrics written on "); print(metric_file_name); print_char("."); + @y + print_nl("Font metrics written on "); slow_print(metric_file_name); + print_char("."); + @z + @x module 1182 + print_nl("Output written on "); print(output_file_name); + @y + print_nl("Output written on "); slow_print(output_file_name); + @z + @x module 1200 + print(w_make_name_string(base_file)); flush_string(str_ptr-1); + print_nl(base_ident) + @y + slow_print(w_make_name_string(base_file)); flush_string(str_ptr-1); + print_nl(""); slow_print(base_ident) + @z + @x module 1205 + print(log_name); print_char("."); + @y + slow_print(log_name); print_char("."); + @z + @x module 1213 + 10: print(n); + @y + 10: slow_print(n); + @z + + ------ The third printing of Volume D (October 1991) incorporated the above. + + 559. Debugging routine never used since change 528; needed update then (JDH). + @x module 617 + p:=dep_list(p); r:=hi_mem_min; + repeat if info(p)>=r then + @y + p:=dep_list(p); r:=inf_val; + repeat if value(info(p))>=value(r) then + @z + + 560. Corrections to blunders in change 550 (noted by B Jackowski, Jul 91). + @x module 415 can use more paranoia even though no problems have occurred yet + negate(left_y(qq)); negate(dest_y);@/ + @y + negate(left_y(qq)); negate(dest_y);@/ + if x_coord(r)dest_x then x_coord(r):=dest_x; + if left_x(r)>x_coord(r) then + begin left_x(r):=x_coord(r); + if right_x(pp)>x_coord(r) then right_x(pp):=x_coord(r); + end; + if right_x(r)dest_x then x_coord(s):=dest_x; + if left_x(s)>x_coord(s) then + begin left_x(s):=x_coord(s); + if right_x(r)>x_coord(s) then right_x(r):=x_coord(s); + end; + if right_x(s)dest_x+dest_y then + begin y_coord(r):=dest_x+dest_y-x_coord(p); + if left_y(r)>y_coord(r) then + begin left_y(r):=y_coord(r); + if right_y(p)>y_coord(r) then right_y(p):=y_coord(r); + end; + end; + @y + if y_coord(r)dest_y then y_coord(r):=dest_y; + if x_coord(p)+y_coord(r)>dest_x+dest_y then + y_coord(r):=dest_x+dest_y-x_coord(p); + if left_y(r)>y_coord(r) then + begin left_y(r):=y_coord(r); + if right_y(p)>y_coord(r) then right_y(p):=y_coord(r); + end; + if right_y(r)dest_y then right_y(r):=dest_y; + if left_y(q)>dest_y then left_y(q):=dest_y + else if left_y(q)left_y(q) then right_y(r):=left_y(q); + @y + if right_y(r)dest_x+dest_y then + begin y_coord(s):=dest_x+dest_y-x_coord(r); + if left_y(s)>y_coord(s) then + begin left_y(s):=y_coord(s); + if right_y(r)>y_coord(s) then right_y(r):=y_coord(s); + end; + end; + @y + if y_coord(s)dest_y then y_coord(s):=dest_y; + if x_coord(r)+y_coord(s)>dest_x+dest_y then + y_coord(s):=dest_x+dest_y-x_coord(r); + if left_y(s)>y_coord(s) then + begin left_y(s):=y_coord(s); + if right_y(r)>y_coord(s) then right_y(r):=y_coord(s); + end; + if right_y(s)dest_y then right_y(s):=dest_y; + if left_y(q)>dest_y then left_y(q):=dest_y + else if left_y(q)left_y(q) then right_y(s):=left_y(q); + @y + if right_y(s) + help2("A numeric math code must be between 0 and 32767.")@/ + @y (because a \mathcode can be 32768, but not a \mathchar) + begin print_err("Bad mathchar"); + @.Bad mathchar@> + help2("A mathchar number must be between 0 and 32767.")@/ + @z + + 396. Internal strings should not be expanded even if unprintable; + i.e., selector=new_string => print(c)==print_char(c), print(s)==slow_print(s). + This change completes what I began with number 393 (18 Sep 91). + @x modules 59 and 60 (same change to both) + else if (@) then + if selectorpseudo then + begin print_char(s); return; {internal strings are not expanded} + end + else if (@) then + if selectornull then hyf_bchar:=character(q); + @z + @x module 903 + q:=link(hb); link(hb):=null; r:=link(ha); link(ha):=null; bchar:=non_char; + @y + q:=link(hb); link(hb):=null; r:=link(ha); link(ha):=null; bchar:=hyf_bchar; + @z + + 398. Patch the previous code, which could cause double kerning (CET1, 29 Sep 91) + @x module 897 + hb:=s; incr(hn); hu[hn]:=c; hc[hn]:=lc_code(c); + end + else if type(s)=ligature_node then + @ + else if (type(s)<>kern_node)or(subtype(s)<>normal) then goto done3; + s:=link(s); hyf_bchar:=non_char; + @y + hb:=s; incr(hn); hu[hn]:=c; hc[hn]:=lc_code(c); hyf_bchar:=non_char; + end + else if type(s)=ligature_node then + @ + else if (type(s)=kern_node)and(subtype(s)=normal) then hb:=s + else goto done3; + s:=link(s); + @z + @x module 898 + hb:=s; hn:=j; + @y + hb:=s; hn:=j; + if odd(subtype(s)) then hyf_bchar:=font_bchar[hf]@+else hyf_bchar:=non_char; + @z + @x module 903 + if not is_char_node(hb) then + if type(hb)=ligature_node then if odd(subtype(hb)) then + bchar:=font_bchar[hf]; + @y + @z + + 399. Disallow \setbox in do_assignments (problem found by Robert Hunt, Nov 91) + @x module 76 + @!deletions_allowed:boolean; {is it safe for |error| to call |get_token|?} + @y + @!deletions_allowed:boolean; {is it safe for |error| to call |get_token|?} + @!set_box_allowed:boolean; {is it safe to do a \.{\\setbox} assignment?} + @z + @x module 77 + deletions_allowed:=true; error_count:=0; {|history| is initialized elsewhere} + @y + deletions_allowed:=true; set_box_allowed:=true; + error_count:=0; {|history| is initialized elsewhere} + @z + @x module 1241 + scan_optional_equals; scan_box(box_flag+n); + @y + if set_box_allowed then scan_box(box_flag+n) + else begin print_err("Improper "); print_esc("setbox"); + @.Improper \\setbox@> + help2("Sorry, \setbox is not allowed after \halign in a display,")@/ + ("or between \accent and an accented character."); error; + end; + @z + @x module 1270 + prefixed_command; + @y + set_box_allowed:=false; prefixed_command; set_box_allowed:=true; + @z + + 400. Defend against negative cur_mu (Wayne Sullivan, Nov 91) + @x module 716 + begin n:=x_over_n(m,@'200000); f:=remainder;@/ + @y + begin n:=x_over_n(m,@'200000); f:=remainder;@/ + if f<0 then + begin decr(n); f:=f+@'200000; + end; + @z + @x module 717 + begin n:=x_over_n(m,@'200000); f:=remainder;@/ + @y + begin n:=x_over_n(m,@'200000); f:=remainder;@/ + if f<0 then + begin decr(n); f:=f+@'200000; + end; + @z + + 401. Defend against `|}{|' in |\read| (Michael Downes). + @x module 483 + store_new_token(cur_tok); + @y + if align_state<1000000 then {unmatched `\.\}' aborts the line} + begin repeat get_token; until cur_tok=0; + align_state:=1000000; goto done; + end; + store_new_token(cur_tok); + @z + + 402. Economize string storage under multiple \font defs (B. Jackowski) + @x module 1257 + @!old_setting:0..max_selector; {holds |selector| setting} + @y + @!old_setting:0..max_selector; {holds |selector| setting} + @!flushable_string:str_number; {string not yet referenced} + @z + @x module 1260 + for f:=font_base+1 to font_ptr do + if str_eq_str(font_name[f],cur_name)and str_eq_str(font_area[f],cur_area) then + begin if s>0 then + @y + flushable_string:=str_ptr-1; + for f:=font_base+1 to font_ptr do + if str_eq_str(font_name[f],cur_name)and str_eq_str(font_area[f],cur_area) then + begin if cur_name=flushable_string then + begin flush_string; cur_name:=font_name[f]; + end; + if s>0 then + @z + + 403. Don't look for \newlinechar within unprintable chars (B. Raichle, Nov 91) + @x module 59 + var j:pool_pointer; {current character code position} + @y + var j:pool_pointer; {current character code position} + @!nl:integer; {new-line character to restore} + @z + @x + else if selector>pseudo then + begin print_char(s); return; {internal strings are not expanded} + end + else if (@) then + if selectorpseudo then + begin print_char(s); return; {internal strings are not expanded} + end; + if (@) then + if selector=str_ptr then s:="???" {this can't happen} + @.???@> + else if s<256 then + if s<0 then s:="???" {can't happen} + else if selector>pseudo then + begin print_char(s); return; {internal strings are not expanded} + end + else if (@) then + if selector=str_ptr then s:="???" {this can't happen} + @.???@> + else if s<256 then + if s<0 then s:="???" {can't happen} + else if selector>pseudo then + begin print_char(s); return; {internal strings are not expanded} + end + else if (@) then + if selector=str_ptr) or (s<256) then print(s) + else begin j:=str_start[s]; + while j\@ne \sp@n\repeat} \def\sp@n{\span\omit\advance\mscount\m@ne} --- 587,591 ---- \def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign \newcount\mscount ! \def\multispan#1{\omit \mscount#1\relax \loop\ifnum\mscount>\@ne \sp@n\repeat} \def\sp@n{\span\omit\advance\mscount\m@ne} *************** *** 679,683 **** \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}} \def\c#1{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1% ! \else{\ooalign{\hidewidth\char24\hidewidth\crcr\unhbox\z@}}\fi} \def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}} --- 679,683 ---- \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}} \def\c#1{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1% ! \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi} \def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}} *************** *** 939,952 **** \def\widetilde{\mathaccent"0365 } \def\widehat{\mathaccent"0362 } ! \def\overrightarrow#1{\vbox{\ialign{##\crcr \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}} ! \def\overleftarrow#1{\vbox{\ialign{##\crcr \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}} ! \def\overbrace#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3\p@} \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} ! \def\underbrace#1{\mathop{\vtop{\ialign{##\crcr $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip} \upbracefill\crcr\noalign{\kern3\p@}}}}\limits} --- 939,952 ---- \def\widetilde{\mathaccent"0365 } \def\widehat{\mathaccent"0362 } ! \def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}} ! \def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}} ! \def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@} \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip} $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} ! \def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip} \upbracefill\crcr\noalign{\kern3\p@}}}}\limits} *************** *** 953,963 **** \def\skew#1#2#3{{#2{#3\mkern#1mu}\mkern-#1mu}{}} ! \def\lmoustache{\delimiter"4000340 } % top from (, bottom from ) ! \def\rmoustache{\delimiter"5000341 } % top from ), bottom from ( ! \def\lgroup{\delimiter"400033A } % extensible ( with sharper tips ! \def\rgroup{\delimiter"500033B } % extensible ) with sharper tips ! \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 \def\Vert{\delimiter"26B30D } \let\|=\Vert \def\vert{\delimiter"26A30C } --- 953,963 ---- \def\skew#1#2#3{{#2{#3\mkern#1mu}\mkern-#1mu}{}} ! \def\lmoustache{\delimiter"437A340 } % top from (, bottom from ) ! \def\rmoustache{\delimiter"537B341 } % top from ), bottom from ( ! \def\lgroup{\delimiter"462833A } % extensible ( with sharper tips ! \def\rgroup{\delimiter"562933B } % extensible ) with sharper tips ! \def\arrowvert{\delimiter"26A33C } % arrow without arrowheads ! \def\Arrowvert{\delimiter"26B33D } % double arrow without arrowheads ! \def\bracevert{\delimiter"77C33E } % the vertical bar that extends braces \def\Vert{\delimiter"26B30D } \let\|=\Vert \def\vert{\delimiter"26A30C } *************** *** 1033,1039 **** \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} \def\notin{\mathrel{\mathpalette\c@ncel\in}} ! \def\c@ncel#1#2{\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} ! \def\rlh@#1{\vcenter{\hbox{\ooalign{\raise2pt \hbox{$#1\rightharpoonup$}\crcr $#1\leftharpoondown$}}}} --- 1033,1039 ---- \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} \def\notin{\mathrel{\mathpalette\c@ncel\in}} ! \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} \def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} ! \def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt \hbox{$#1\rightharpoonup$}\crcr $#1\leftharpoondown$}}}} *************** *** 1227,1229 **** \catcode`@=12 % at signs are no longer letters ! \def\fmtname{plain}\def\fmtversion{3.0} % identifies the current format --- 1227,1229 ---- \catcode`@=12 % at signs are no longer letters ! \def\fmtname{plain}\def\fmtversion{3.141} % identifies the current format diff -r -c2 oldtex/dist/mf/mf.web newtex/dist/mf/mf.web *** oldtex/dist/mf/mf.web Mon Mar 16 11:07:40 1992 --- newtex/dist/mf/mf.web Sun Mar 15 21:14:55 1992 *************** *** 21,24 **** --- 21,25 ---- % Version 2.0 fixed bug in addto; released with TeX version 3.0 (March 1990). % Version 2.7 made consistent with TeX version 3.1 (September 1990). + % Version 2.71 fixed bug in draw, allowed unprintable filenames (not yet released). % A few "harmless" optimizations have been made without changing versions. *************** *** 152,156 **** January 1986]. ! @d banner=='This is METAFONT, Version 2.7' {printed when \MF\ starts} @ Different \PASCAL s have slightly different conventions, and the present --- 153,157 ---- January 1986]. ! @d banner=='This is METAFONT, Version 2.71' {printed when \MF\ starts} @ Different \PASCAL s have slightly different conventions, and the present *************** *** 1459,1465 **** begin if (s<0)or(s>=str_ptr) then s:="???"; {this can't happen} @.???@> ! j:=str_start[s]; ! while j=str_ptr) then s:="???"; {this can't happen} @.???@> ! if (s<256)and(selector>pseudo) then print_char(s) ! else begin j:=str_start[s]; ! while j=str_ptr) then s:="???"; {this can't happen} @.???@> ! j:=str_start[s]; ! while j=str_ptr) then s:="???"; {this can't happen} @.???@> ! if (s<256)and(selector>pseudo) then print_char(s) ! else begin j:=str_start[s]; ! while j ! print(input_stack[file_ptr].name_field); print(" at line "); print_int(line);@/ interaction:=scroll_mode; jump_out; --- 1773,1777 ---- begin print_nl("You want to edit file "); @.You want to edit file x@> ! slow_print(input_stack[file_ptr].name_field); print(" at line "); print_int(line);@/ interaction:=scroll_mode; jump_out; *************** *** 2579,2583 **** @^Morrison, Donald Ross@> of Research and Development\/ \bf27} (1983), 577--581]. It modifies |a| and~|b| ! in such a way that their pythagorean sum remains invariant, while the smaller argument decreases. --- 2584,2588 ---- @^Morrison, Donald Ross@> of Research and Development\/ \bf27} (1983), 577--581]. It modifies |a| and~|b| ! in such a way that their Pythagorean sum remains invariant, while the smaller argument decreases. *************** *** 3517,3521 **** avail:=null; mem_end:=mem_top; hi_mem_min:=hi_mem_stat_min; {initialize the one-word memory} ! var_used:=lo_mem_stat_max+1-mem_min; dyn_used:=mem_top+1-hi_mem_stat_min; {initialize statistics} --- 3522,3526 ---- avail:=null; mem_end:=mem_top; hi_mem_min:=hi_mem_stat_min; {initialize the one-word memory} ! var_used:=lo_mem_stat_max+1-mem_min; dyn_used:=mem_top+1-hi_mem_min; {initialize statistics} *************** *** 4887,4891 **** othercases print_char(" ") endcases; ! print(r); end --- 4892,4896 ---- othercases print_char(" ") endcases; ! slow_print(r); end *************** *** 5049,5053 **** \.{x[]b} has been declared to be of \&{boolean} type. Let |h(x)|, |h(a)|, and |h(b)| be the hash addresses of \.x, \.a, and~\.b. Then ! |eq_type(h(x))=name| and |equiv(h(x))=p|, where |p|~is a two-word value node with |name_type(p)=root| and |link(p)=h(x)|. We have |type(p)=structured|, |attr_head(p)=q|, and |subscr_head(p)=r|, where |q| points to a value --- 5054,5058 ---- \.{x[]b} has been declared to be of \&{boolean} type. Let |h(x)|, |h(a)|, and |h(b)| be the hash addresses of \.x, \.a, and~\.b. Then ! |eq_type(h(x))=tag_token| and |equiv(h(x))=p|, where |p|~is a two-word value node with |name_type(p)=root| and |link(p)=h(x)|. We have |type(p)=structured|, |attr_head(p)=q|, and |subscr_head(p)=r|, where |q| points to a value *************** *** 5603,5607 **** begin if internal[tracing_restores]>0 then begin begin_diagnostic; print_nl("{restoring "); ! print(int_name[q-(hash_end)]); print_char("="); print_scaled(value(save_ptr)); print_char("}"); end_diagnostic(false); --- 5608,5612 ---- begin if internal[tracing_restores]>0 then begin begin_diagnostic; print_nl("{restoring "); ! slow_print(int_name[q-(hash_end)]); print_char("="); print_scaled(value(save_ptr)); print_char("}"); end_diagnostic(false); *************** *** 5611,5615 **** else begin if internal[tracing_restores]>0 then begin begin_diagnostic; print_nl("{restoring "); ! print(text(q)); print_char("}"); end_diagnostic(false); end; --- 5616,5620 ---- else begin if internal[tracing_restores]>0 then begin begin_diagnostic; print_nl("{restoring "); ! slow_print(text(q)); print_char("}"); end_diagnostic(false); end; *************** *** 8790,8795 **** If |0<=t<=1|, the quantity |t[a,b]| is always between |a| and~|b|, even in ! the presence of rounding errors. This property implies that a monotone ! cubic cannot split into a non-monotone one. Our subroutines incidentally also obey the identity |t[a,b]+t[b,a]=a+b|. --- 8795,8799 ---- If |0<=t<=1|, the quantity |t[a,b]| is always between |a| and~|b|, even in ! the presence of rounding errors. Our subroutines also obey the identity |t[a,b]+t[b,a]=a+b|. *************** *** 8905,8908 **** --- 8909,8922 ---- negate(y_coord(r)); right_y(r):=y_coord(r); negate(left_y(qq)); negate(dest_y);@/ + if x_coord(r)dest_x then x_coord(r):=dest_x; + if left_x(r)>x_coord(r) then + begin left_x(r):=x_coord(r); + if right_x(pp)>x_coord(r) then right_x(pp):=x_coord(r); + end; + if right_x(r)dest_x then x_coord(s):=dest_x; + if left_x(s)>x_coord(s) then + begin left_x(s):=x_coord(s); + if right_x(r)>x_coord(s) then right_x(r):=x_coord(s); + end; + if right_x(s)= begin y_coord(p):=x_coord(p)+y_coord(p); negate(x_coord(p));@/ --- 9045,9048 ---- *************** *** 9040,9049 **** if right_type(r)>switch_x_and_y then right_type(r):=right_type(r)-switch_x_and_y else right_type(r):=right_type(r)+switch_x_and_y; if x_coord(p)+y_coord(r)>dest_x+dest_y then ! begin y_coord(r):=dest_x+dest_y-x_coord(p); ! if left_y(r)>y_coord(r) then ! begin left_y(r):=y_coord(r); ! if right_y(p)>y_coord(r) then right_y(p):=y_coord(r); ! end; end; if x_coord(r)switch_x_and_y then right_type(r):=right_type(r)-switch_x_and_y else right_type(r):=right_type(r)+switch_x_and_y; + if y_coord(r)dest_y then y_coord(r):=dest_y; if x_coord(p)+y_coord(r)>dest_x+dest_y then ! y_coord(r):=dest_x+dest_y-x_coord(p); ! if left_y(r)>y_coord(r) then ! begin left_y(r):=y_coord(r); ! if right_y(p)>y_coord(r) then right_y(p):=y_coord(r); ! end; ! if right_y(r)dest_y then right_y(r):=dest_y; ! if left_y(q)>dest_y then left_y(q):=dest_y ! else if left_y(q)left_y(q) then right_y(r):=left_y(q); del2:=t_of_the_way(del2)(del3); {now |0,del2,del3| represent $x'-y'$ on the remaining interval} --- 9083,9090 ---- left_y(q):=left_y(q)+left_x(q); negate(left_x(q));@/ dest_y:=dest_y+dest_x; negate(dest_x); ! if right_y(r)= begin split_cubic(r,t,dest_x,dest_y); s:=link(r);@/ if x_coord(r)+y_coord(s)>dest_x+dest_y then ! begin y_coord(s):=dest_x+dest_y-x_coord(r); ! if left_y(s)>y_coord(s) then ! begin left_y(s):=y_coord(s); ! if right_y(r)>y_coord(s) then right_y(r):=y_coord(s); ! end; end; if x_coord(s)+y_coord(s)>dest_x+dest_y then x_coord(s):=dest_x+dest_y-y_coord(s) --- 9103,9117 ---- @ @= begin split_cubic(r,t,dest_x,dest_y); s:=link(r);@/ + if y_coord(s)dest_y then y_coord(s):=dest_y; if x_coord(r)+y_coord(s)>dest_x+dest_y then ! y_coord(s):=dest_x+dest_y-x_coord(r); ! if left_y(s)>y_coord(s) then ! begin left_y(s):=y_coord(s); ! if right_y(r)>y_coord(s) then right_y(r):=y_coord(s); ! end; ! if right_y(s)dest_x+dest_y then x_coord(s):=dest_x+dest_y-y_coord(s) *************** *** 9097,9105 **** y_coord(s):=y_coord(s)+x_coord(s); right_y(s):=right_y(s)+x_coord(s);@/ negate(x_coord(s)); right_x(s):=x_coord(s);@/ ! dest_y:=dest_y+dest_x; ! if right_y(s)>dest_y then right_y(s):=dest_y; ! if left_y(q)>dest_y then left_y(q):=dest_y ! else if left_y(q)left_y(q) then right_y(s):=left_y(q); end --- 9128,9135 ---- y_coord(s):=y_coord(s)+x_coord(s); right_y(s):=right_y(s)+x_coord(s);@/ negate(x_coord(s)); right_x(s):=x_coord(s);@/ ! if right_y(s)0|, then |value(q)= @t$\alpha_1$@>| (which is a |fraction|); |info(q)| points to the location ! of $\alpha_1$; and |link(p)| points to the dependency list $\alpha_2v_2+\cdots+\alpha_kv_k+\beta$. On the other hand if |k=0|, then |value(q)=@t$\beta$@>| (which is |scaled|) and |info(q)=null|. --- 12469,12473 ---- |q=dep_list(p)| points to this list, and if |k>0|, then |value(q)= @t$\alpha_1$@>| (which is a |fraction|); |info(q)| points to the location ! of $v_1$; and |link(p)| points to the dependency list $\alpha_2v_2+\cdots+\alpha_kv_k+\beta$. On the other hand if |k=0|, then |value(q)=@t$\beta$@>| (which is |scaled|) and |info(q)=null|. *************** *** 13032,13037 **** @.Bad PREVDEP...@> end; ! p:=dep_list(p); r:=hi_mem_min; ! repeat if info(p)>=r then begin print_nl("Out of order at "); print_int(p); @.Out of order...@> --- 13062,13067 ---- @.Bad PREVDEP...@> end; ! p:=dep_list(p); r:=inf_val; ! repeat if value(info(p))>=value(r) then begin print_nl("Out of order at "); print_int(p); @.Out of order...@> *************** *** 13462,13466 **** inserted: print_nl(" "); macro: begin print_ln; ! if name<>null then print(text(name)) else @; print("->"); --- 13492,13496 ---- inserted: print_nl(" "); macro: begin print_ln; ! if name<>null then slow_print(text(name)) else @; print("->"); *************** *** 13860,13868 **** end; var_defining, op_defining: begin print("the definition of "); ! if scanner_status=op_defining then print(text(warning_info)) else print_variable_name(warning_info); cur_sym:=frozen_end_def; end; ! loop_defining: begin print("the text of a "); print(text(warning_info)); print(" loop"); help_line[3]:="I suspect you have forgotten an `endfor',"; --- 13890,13898 ---- end; var_defining, op_defining: begin print("the definition of "); ! if scanner_status=op_defining then slow_print(text(warning_info)) else print_variable_name(warning_info); cur_sym:=frozen_end_def; end; ! loop_defining: begin print("the text of a "); slow_print(text(warning_info)); print(" loop"); help_line[3]:="I suspect you have forgotten an `endfor',"; *************** *** 14512,14516 **** |get_next|; in increasing order, they are |if_test|, |fi_or_else|, |input|, |iteration|, |repeat_loop|, ! |exit_test|, |relax|, |expand_after|, |scan_tokens|, and |defined_macro|. \MF\ usually gets the next token of input by saying |get_x_next|. This is --- 14542,14546 ---- |get_next|; in increasing order, they are |if_test|, |fi_or_else|, |input|, |iteration|, |repeat_loop|, ! |exit_test|, |relax|, |scan_tokens|, |expand_after|, and |defined_macro|. \MF\ usually gets the next token of input by saying |get_x_next|. This is *************** *** 14774,14780 **** procedure print_macro_name(@!a,@!n:pointer); var @!p,@!q:pointer; {they traverse the first part of |a|} ! begin if n<>null then print(text(n)) else begin p:=info(a); ! if p=null then print(text(info(info(link(a))))) else begin q:=p; while link(q)<>null do q:=link(q); --- 14804,14810 ---- procedure print_macro_name(@!a,@!n:pointer); var @!p,@!q:pointer; {they traverse the first part of |a|} ! begin if n<>null then slow_print(text(n)) else begin p:=info(a); ! if p=null then slow_print(text(info(info(link(a))))) else begin q:=p; while link(q)<>null do q:=link(q); *************** *** 14813,14817 **** @.Too many arguments...@> print_macro_name(arg_list,macro_name); print_char(";"); ! print_nl(" Missing `"); print(text(r_delim)); @.Missing `)'...@> print("' has been inserted"); --- 14843,14847 ---- @.Too many arguments...@> print_macro_name(arg_list,macro_name); print_char(";"); ! print_nl(" Missing `"); slow_print(text(r_delim)); @.Missing `)'...@> print("' has been inserted"); *************** *** 15573,15577 **** @= procedure print_file_name(@!n,@!a,@!e:integer); ! begin print(a); print(n); print(e); end; --- 15603,15607 ---- @= procedure print_file_name(@!n,@!a,@!e:integer); ! begin slow_print(a); slow_print(n); slow_print(e); end; *************** *** 15857,15861 **** @ @= begin wlog(banner); ! print(base_ident); print(" "); print_int(round_unscaled(internal[day])); print_char(" "); months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; --- 15887,15891 ---- @ @= begin wlog(banner); ! slow_print(base_ident); print(" "); print_int(round_unscaled(internal[day])); print_char(" "); months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; *************** *** 15909,15913 **** if term_offset+length(name)>max_print_line-2 then print_ln else if (term_offset>0)or(file_offset>0) then print_char(" "); ! print_char("("); incr(open_parens); print(name); update_terminal; if name=str_ptr-1 then {we can conserve string pool space now} begin flush_string(name); name:=cur_name; --- 15939,15943 ---- if term_offset+length(name)>max_print_line-2 then print_ln else if (term_offset>0)or(file_offset>0) then print_char(" "); ! print_char("("); incr(open_parens); slow_print(name); update_terminal; if name=str_ptr-1 then {we can conserve string pool space now} begin flush_string(name); name:=cur_name; *************** *** 18811,18815 **** procedure path_trans(@!p:pointer;@!c:quarterword); label exit; ! var @!q:pointer; {list traversor} begin set_up_known_trans(c); unstash_cur_exp(p); if cur_type=pen_type then --- 18841,18845 ---- procedure path_trans(@!p:pointer;@!c:quarterword); label exit; ! var @!q:pointer; {list traverser} begin set_up_known_trans(c); unstash_cur_exp(p); if cur_type=pen_type then *************** *** 19426,19430 **** @ @= begin begin_diagnostic; print_nl("{"); ! if info(lhs)>hash_end then print(int_name[info(lhs)-(hash_end)]) else show_token_list(lhs,null,1000,0); print(":="); print_exp(null,0); print_char("}"); end_diagnostic(false); --- 19456,19460 ---- @ @= begin begin_diagnostic; print_nl("{"); ! if info(lhs)>hash_end then slow_print(int_name[info(lhs)-(hash_end)]) else show_token_list(lhs,null,1000,0); print(":="); print_exp(null,0); print_char("}"); end_diagnostic(false); *************** *** 19435,19439 **** else begin exp_err("Internal quantity `"); @.Internal quantity...@> ! print(int_name[info(lhs)-(hash_end)]); print("' must receive a known value"); help2("I can't set an internal quantity to anything but a known")@/ --- 19465,19469 ---- else begin exp_err("Internal quantity `"); @.Internal quantity...@> ! slow_print(int_name[info(lhs)-(hash_end)]); print("' must receive a known value"); help2("I can't set an internal quantity to anything but a known")@/ *************** *** 19888,19892 **** back_error; end ! else begin print_err("The token `"); print(text(r_delim)); @.The token...delimiter@> print("' is no longer a right delimiter"); --- 19918,19922 ---- back_error; end ! else begin print_err("The token `"); slow_print(text(r_delim)); @.The token...delimiter@> print("' is no longer a right delimiter"); *************** *** 19915,19919 **** @.The token...quantity@> if cur_sym=0 then print("(%CAPSULE)") ! else print(text(cur_sym)); print("' isn't an internal quantity"); help1("Something like `tracingonline' should follow `interim'."); --- 19945,19949 ---- @.The token...quantity@> if cur_sym=0 then print("(%CAPSULE)") ! else slow_print(text(cur_sym)); print("' isn't an internal quantity"); help1("Something like `tracingonline' should follow `interim'."); *************** *** 20015,20019 **** @.>\relax@> if cur_sym=0 then @ ! else begin print(text(cur_sym)); print_char("="); if eq_type(cur_sym)>=outer_tag then print("(outer) "); print_cmd_mod(cur_cmd,cur_mod); --- 20045,20049 ---- @.>\relax@> if cur_sym=0 then @ ! else begin slow_print(text(cur_sym)); print_char("="); if eq_type(cur_sym)>=outer_tag then print("(outer) "); print_cmd_mod(cur_cmd,cur_mod); *************** *** 20030,20034 **** begin g_pointer:=cur_mod; print_capsule; end ! else begin print_char(""""); print(cur_mod); print_char(""""); delete_str_ref(cur_mod); end; --- 20060,20064 ---- begin g_pointer:=cur_mod; print_capsule; end ! else begin print_char(""""); slow_print(cur_mod); print_char(""""); delete_str_ref(cur_mod); end; *************** *** 20042,20046 **** left_delimiter,right_delimiter: begin if c=left_delimiter then print("lef") else print("righ"); ! print("t delimiter that matches "); print(text(m)); end; tag_token:if m=null then print("tag")@+else print("variable"); --- 20072,20076 ---- left_delimiter,right_delimiter: begin if c=left_delimiter then print("lef") else print("righ"); ! print("t delimiter that matches "); slow_print(text(m)); end; tag_token:if m=null then print("tag")@+else print("variable"); *************** *** 20051,20055 **** end; repeat_loop:print("[repeat the loop]"); ! internal_quantity:print(int_name[m]); @ @= --- 20081,20085 ---- end; repeat_loop:print("[repeat the loop]"); ! internal_quantity:slow_print(int_name[m]); @ @= *************** *** 21555,21559 **** @!stat if internal[tracing_stats]>0 then @;@;@+tats@/ ! print_nl("Font metrics written on "); print(metric_file_name); print_char("."); @.Font metrics written...@> b_close(tfm_file) --- 21585,21590 ---- @!stat if internal[tracing_stats]>0 then @;@;@+tats@/ ! print_nl("Font metrics written on "); slow_print(metric_file_name); ! print_char("."); @.Font metrics written...@> b_close(tfm_file) *************** *** 21599,21603 **** and/or to handle starting addresses that exceed 255. The |label_loc| and |label_char| arrays have been set up to record all the ! starting addesses; we have $-1=|label_loc|[0]<|label_loc|[1]\le\cdots \le|label_loc|[|label_ptr]|$. --- 21630,21634 ---- and/or to handle starting addresses that exceed 255. The |label_loc| and |label_char| arrays have been set up to record all the ! starting addresses; we have $-1=|label_loc|[0]<|label_loc|[1]\le\cdots \le|label_loc|[|label_ptr]|$. *************** *** 22427,22431 **** end; @; ! print_nl("Output written on "); print(output_file_name); @.Output written...@> print(" ("); print_int(total_chars); print(" character"); --- 22458,22462 ---- end; @; ! print_nl("Output written on "); slow_print(output_file_name); @.Output written...@> print(" ("); print_int(total_chars); print(" character"); *************** *** 22712,22717 **** print_nl("Beginning to dump on file "); @.Beginning to dump...@> ! print(w_make_name_string(base_file)); flush_string(str_ptr-1); ! print_nl(base_ident) @ @= --- 22743,22748 ---- print_nl("Beginning to dump on file "); @.Beginning to dump...@> ! slow_print(w_make_name_string(base_file)); flush_string(str_ptr-1); ! print_nl(""); slow_print(base_ident) @ @= *************** *** 22840,22844 **** begin print_nl("Transcript written on "); @.Transcript written...@> ! print(log_name); print_char("."); end; end; --- 22871,22875 ---- begin print_nl("Transcript written on "); @.Transcript written...@> ! slow_print(log_name); print_char("."); end; end; *************** *** 23035,23039 **** 7: do_show_dependencies; 9: show_token_list(n,null,100000,0); ! 10: print(n); 11: check_mem(n>0); {check wellformedness; print new busy locations if |n>0|} 12: search_mem(n); {look for pointers to |n|} --- 23066,23070 ---- 7: do_show_dependencies; 9: show_token_list(n,null,100000,0); ! 10: slow_print(n); 11: check_mem(n>0); {check wellformedness; print new busy locations if |n>0|} 12: search_mem(n); {look for pointers to |n|} diff -r -c2 oldtex/dist/mf/mfbook.tex newtex/dist/mf/mfbook.tex *** oldtex/dist/mf/mfbook.tex Mon Mar 16 11:08:15 1992 --- newtex/dist/mf/mfbook.tex Sun Mar 15 16:53:29 1992 *************** *** 107,112 **** \vfill \noindent ! {\sl \kern-1pt Sixth printing, revised, February 1991} % paperback ! %{\sl \kern-1pt Third printing, revised, May 1990} % hardcover \smallskip \noindent --- 107,112 ---- \vfill \noindent ! {\sl \kern-1pt Seventh printing, revised, February 1992} % paperback ! %{\sl \kern-1pt Fourth printing, revised, September 1991} % hardcover \smallskip \noindent *************** *** 126,131 **** %ISBN 0-201-13445-4\par % hardcover \noindent ! FGHIJKLM--AL--943210 % paperback ! %CDEFGHIJKLM--AL--943210 % hardcover ^^{Knuth, Donald Ervin} \eject --- 126,131 ---- %ISBN 0-201-13445-4\par % hardcover \noindent ! 7 8 9 10 11 12 13 14 15--AL--9695949392 % paperback ! %4 5 6 7 8 9 10 11 12--AL--9594939291 % hardcover ^^{Knuth, Donald Ervin} \eject *************** *** 9398,9402 **** --- 9398,9404 ---- an extreme case of the `$\ldots$' triangle, ^^{...} which might not be numerically stable in the presence of rounding errors.) + Another case, not really desirable, is $"left\_jut"="right\_jut"=0$. + \dangerexercise Should this "serif" macro be used before points $z_{\$l}$, $z_\$$, and $z_{\$r}$ have been defined, or should those *************** *** 13898,13904 **** \textindent\bull {\it ^{Starting a job}:\/} \ |\mode=|\; \ |mag=|\bb\\cr|magstep|\\ee;\\ ! |screenchars|; \ |screenstrokes|; \ |imagerules|; \ |gfboxes|; \ |nodisplays|;\\ ! |input| \. \medbreak\textindent\bull {\it ^{Conversion to pixel units}:\/} \ --- 13900,13906 ---- \textindent\bull {\it ^{Starting a job}:\/} \ |\mode=|\; \ |mag=|\bb\\cr|magstep|\\ee;\\ ! |screenchars|; \ |screenstrokes|; \ |imagerules|; \ |gfcorners|; \ |nodisplays|;\\ ! |notransforms|; \ |input| \. \medbreak\textindent\bull {\it ^{Conversion to pixel units}:\/} \ *************** *** 14580,14584 **** \subsection Drawing and filling. Now we come to the macros that provide ! an interface between the user on \MF's primitive picture commands. ^^"currentpen" ^^"currentpicture" ^^"currenttransform" First, some important program variables are introduced: --- 14582,14586 ---- \subsection Drawing and filling. Now we come to the macros that provide ! an interface between the user and \MF's primitive picture commands. ^^"currentpen" ^^"currentpicture" ^^"currenttransform" First, some important program variables are introduced: *************** *** 18945,18949 **** complex numbers, 69. \, 217. ! compound statement, 155--156. Computer Modern, 35, 103--105, 203, 206, 279, 304--313. concatenation, of paths, @70--@71, @123, 127, 129, +130, @245. --- 18947,18951 ---- complex numbers, 69. \, 217. ! compound statement, +155, 217. Computer Modern, 35, 103--105, 203, 206, 279, 304--313. concatenation, of paths, @70--@71, @123, 127, 129, +130, @245. *************** *** 19504,19508 **** *|nullpen|, +148, 214, @272. *|nullpicture|, +115, 192, 214, @272, @277. ! *|numeric|, 55--56, @65, 88. \, 72, +210. \, 72, +211. --- 19506,19510 ---- *|nullpen|, +148, 214, @272. *|nullpicture|, +115, 192, 214, @272, @277. ! *|numeric|, 55, +56, @65, 88. \, 72, +210. \, 72, +211. *************** *** 19540,19544 **** online interaction, 42--45, 61, 188--189, 191--193, 219, 223--225. |openit|, +277, 312. ! |openwindow|, +191--+193, 220, @277, @312--@313. \, 191, 220. operands, 59. --- 19542,19546 ---- online interaction, 42--45, 61, 188--189, 191--193, 219, 223--225. |openit|, +277, 312. ! *|openwindow|, +191--+193, 220, @277, @312--@313. \, 191, 220. operands, 59. *************** *** 19545,19549 **** operators, 59, 230. \, 317. ! |or|, @65, +170, 210, 237, 288--289. order of operations, 60--61, 137, 247, 289. oriental characters, 3, 106, 324. --- 19547,19551 ---- operators, 59, 230. \, 317. ! *|or|, @65, +170, 210, 237, 288--289. order of operations, 60--61, 137, 247, 289. oriental characters, 3, 106, 324. *************** *** 19561,19565 **** `P', 207. Paget, Francis Edward, 279. ! *|pair|, 55--56, 65. \, 73, +213. pair expressions, 73, 171, 258. --- 19563,19567 ---- `P', 207. Paget, Francis Edward, 279. ! *|pair|, 55, +56, 65. \, 73, +213. pair expressions, 73, 171, 258. *************** *** 19581,19585 **** parentheses, 51, 59, +60, 61, 71, 128, 210--215, 247. Pascal language, 54. ! *|path|, 55--56, 171. \, 129, +213. path expressions, 129--134, 258. --- 19583,19587 ---- parentheses, 51, 59, +60, 61, 71, 128, 210--215, 247. Pascal language, 54. ! *|path|, 55, +56, 171. \, 129, +213. path expressions, 129--134, 258. *************** *** 19592,19596 **** |pc| (pica), 92, +267, 268. pels, \see pixels. ! *|pen|, 55--56, @65, 170. \, 147, 148, +214. pen expressions, 147--148, 258, 298. --- 19594,19598 ---- |pc| (pica), 92, +267, 268. pels, \see pixels. ! *|pen|, 55, +56, @65, 170. \, 147, 148, +214. pen expressions, 147--148, 258, 298. *************** *** 19613,19617 **** perpendicular, 29, 69, 84, 235. |pickup|, @21--@23, 145, 147, +272. ! *|picture|, 55--56, @114. \, 118, 220. \, 115, 214. --- 19615,19619 ---- perpendicular, 29, 69, 84, 235. |pickup|, @21--@23, 145, 147, +272. ! *|picture|, 55, +56, @114. \, 118, 220. \, 115, 214. *************** *** 19811,19815 **** stretchability, 319. Strindberg, Johan August, 185. ! |string|, 55--56, 69. \, 73, 187, +214. string expressions, 187--189, 258, 286. --- 19813,19817 ---- stretchability, 319. Strindberg, Johan August, 185. ! *|string|, 55, +56, 69. \, 73, 187, +214. string expressions, 187--189, 258, 286. *************** *** 19915,19919 **** trajectories, \see paths. transcript file, 42, 46, 62, 230, 295--297. ! *|transform|, 55--57, 141--143, @160, 266. \, 215. transform expressions, 141--143, 170, 178, 258. --- 19917,19921 ---- trajectories, \see paths. transcript file, 42, 46, 62, 230, 295--297. ! *|transform|, 55, +56, 57, 141--143, @160, 266. \, 215. transform expressions, 141--143, 170, 178, 258. diff -r -c2 oldtex/dist/mf/trap.fot newtex/dist/mf/trap.fot *** oldtex/dist/mf/trap.fot Mon Mar 16 11:08:15 1992 --- newtex/dist/mf/trap.fot Sat Jan 25 09:02:02 1992 *************** *** 1,3 **** ! This is METAFONT, Version 2.7 (INIMF) ** &trap trap (trap.mf --- 1,3 ---- ! This is METAFONT, Version 2.71 (INIMF) ** &trap trap (trap.mf *************** *** 37,41 **** {showstats} Memory usage 1476&588 (104 still untouched) ! String usage 39&162 (821&7732 still untouched) {[repeat the loop]} ! A group begun on line 163 never ended. --- 37,41 ---- {showstats} Memory usage 1476&588 (104 still untouched) ! String usage 39&162 (821&7731 still untouched) {[repeat the loop]} ! A group begun on line 163 never ended. diff -r -c2 oldtex/dist/mf/trap.log newtex/dist/mf/trap.log *** oldtex/dist/mf/trap.log Mon Mar 16 11:08:19 1992 --- newtex/dist/mf/trap.log Sat Jan 25 09:00:54 1992 *************** *** 1,3 **** ! This is METAFONT, Version 2.7 (preloaded base=trap 90.9.6) 6 SEP 1990 23:16 ** &trap trap (trap.mf --- 1,3 ---- ! This is METAFONT, Version 2.71 (preloaded base=trap 92.1.25) 25 JAN 1992 08:58 ** &trap trap (trap.mf *************** *** 1806,1810 **** {showstats} Memory usage 1084&202 (749 still untouched) ! String usage 21&86 (866&11413 still untouched) {addto} {(path)yscaled(0.01666)} --- 1806,1810 ---- {showstats} Memory usage 1084&202 (749 still untouched) ! String usage 21&86 (866&11412 still untouched) {addto} {(path)yscaled(0.01666)} *************** *** 4224,4228 **** {showstats} Memory usage 1476&588 (104 still untouched) ! String usage 39&162 (821&7732 still untouched) {[repeat the loop]} ! A group begun on line 163 never ended. --- 4224,4228 ---- {showstats} Memory usage 1476&588 (104 still untouched) ! String usage 39&162 (821&7731 still untouched) {[repeat the loop]} ! A group begun on line 163 never ended. *************** *** 4241,4245 **** Here is how much of METAFONT's memory you used: 66 strings out of 887 ! 3753 string characters out of 11485 2897 words of memory out of 3001 289 symbolic tokens out of 2100 --- 4241,4245 ---- Here is how much of METAFONT's memory you used: 66 strings out of 887 ! 3753 string characters out of 11484 2897 words of memory out of 3001 289 symbolic tokens out of 2100 diff -r -c2 oldtex/dist/mf/trap.typ newtex/dist/mf/trap.typ *** oldtex/dist/mf/trap.typ Mon Mar 16 11:08:20 1992 --- newtex/dist/mf/trap.typ Sat Jan 25 09:01:21 1992 *************** *** 1,5 **** ! This is GFtype, Version 3 Options selected: Mnemonic output = true; pixel output = true. ! ' METAFONT output 1990.09.06:2316' 35: beginning of char 5: -4096<=m<=4094 -2<=n<=1 --- 1,5 ---- ! This is GFtype, Version 3.1 Options selected: Mnemonic output = true; pixel output = true. ! ' METAFONT output 1992.01.25:0858' 35: beginning of char 5: -4096<=m<=4094 -2<=n<=1 diff -r -c2 oldtex/dist/mf/trapin.log newtex/dist/mf/trapin.log *** oldtex/dist/mf/trapin.log Mon Mar 16 11:08:20 1992 --- newtex/dist/mf/trapin.log Sat Jan 25 09:00:34 1992 *************** *** 1,3 **** ! This is METAFONT, Version 2.7 (INIMF) 6 SEP 1990 23:16 **\input trap (trap.mf --- 1,3 ---- ! This is METAFONT, Version 2.71 (INIMF) 25 JAN 1992 08:58 **\input trap (trap.mf *************** *** 147,151 **** {for} {showstats} ! Memory usage 291&37 (1922 still untouched) String usage 26&83 (895&11534 still untouched) ! OK. --- 147,151 ---- {for} {showstats} ! Memory usage 291&41 (1922 still untouched) String usage 26&83 (895&11534 still untouched) ! OK. *************** *** 174,179 **** ) Beginning to dump on file trap.base ! (preloaded base=trap 90.9.6) ! 1113 strings of total length 20515 395 memory locations dumped; current usage is 317&67 265 symbolic tokens --- 174,179 ---- ) Beginning to dump on file trap.base ! (preloaded base=trap 92.1.25) ! 1113 strings of total length 20516 395 memory locations dumped; current usage is 317&67 265 symbolic tokens Only in newtex/dist/tex: glue.web diff -r -c2 oldtex/dist/tex/tex.web newtex/dist/tex/tex.web *** oldtex/dist/tex/tex.web Mon Mar 16 11:12:36 1992 --- newtex/dist/tex/tex.web Sun Mar 15 21:10:49 1992 *************** *** 41,44 **** --- 41,45 ---- % Version 3.1 fixed nullfont, disabled \write{\the\prevgraf} (September 1990). % Version 3.14 fixed unprintable font names and corrected typos (March 1991). + % Version 3.141 more of same; reconstituted ligatures better (September 1991). % A reward of $327.68 will be paid to the first finder of any remaining bug, *************** *** 182,186 **** November 1984]. ! @d banner=='This is TeX, Version 3.14' {printed when \TeX\ starts} @ Different \PASCAL s have slightly different conventions, and the present --- 183,187 ---- November 1984]. ! @d banner=='This is TeX, Version 3.141' {printed when \TeX\ starts} @ Different \PASCAL s have slightly different conventions, and the present *************** *** 1108,1115 **** should be printed for each of the 256 possibilities. ! Elements of the |str_pool| array must be ASCII codes that can actually be ! printed; i.e., they must have an |xchr| equivalent in the local ! character set. (However, the names of control sequences need not meet ! this restriction, when they appear in |str_pool|.) Some \PASCAL\ compilers won't pack integers into a single byte unless the --- 1109,1116 ---- should be printed for each of the 256 possibilities. ! Elements of the |str_pool| array must be ASCII codes that can actually ! be printed; i.e., they must have an |xchr| equivalent in the local ! character set. (This restriction applies only to preloaded strings, ! not to those generated dynamically by the user.) Some \PASCAL\ compilers won't pack integers into a single byte unless the *************** *** 1503,1506 **** --- 1504,1508 ---- label exit; var j:pool_pointer; {current character code position} + @!nl:integer; {new-line character to restore} begin if s>=str_ptr then s:="???" {this can't happen} @.???@> *************** *** 1507,1514 **** else if s<256 then if s<0 then s:="???" {can't happen} ! else if (@) then ! if selectorpseudo then ! begin print_char(s); return; {internal strings are not expanded} end; + if (@) then + if selector= procedure slow_print(@!s:integer); {prints string |s|} - label exit; var j:pool_pointer; {current character code position} ! begin if s>=str_ptr then s:="???" {this can't happen} ! @.???@> ! else if s<256 then ! if s<0 then s:="???" {can't happen} ! else if (@) then ! if selector= procedure slow_print(@!s:integer); {prints string |s|} var j:pool_pointer; {current character code position} ! begin if (s>=str_ptr) or (s<256) then print(s) ! else begin j:=str_start[s]; ! while j *************** *** 1768,1771 **** --- 1776,1780 ---- @= @!deletions_allowed:boolean; {is it safe for |error| to call |get_token|?} + @!set_box_allowed:boolean; {is it safe to do a \.{\\setbox} assignment?} @!history:spotless..fatal_error_stop; {has the source input been clean so far?} @!error_count:-1..100; {the number of scrolled errors since the *************** *** 1776,1780 **** @= ! deletions_allowed:=true; error_count:=0; {|history| is initialized elsewhere} @ Since errors can be detected almost anywhere in \TeX, we want to declare the --- 1785,1790 ---- @= ! deletions_allowed:=true; set_box_allowed:=true; ! error_count:=0; {|history| is initialized elsewhere} @ Since errors can be detected almost anywhere in \TeX, we want to declare the *************** *** 1892,1896 **** begin print_nl("You want to edit file "); @.You want to edit file x@> ! print(input_stack[base_ptr].name_field); print(" at line "); print_int(line); interaction:=scroll_mode; jump_out; --- 1902,1906 ---- begin print_nl("You want to edit file "); @.You want to edit file x@> ! slow_print(input_stack[base_ptr].name_field); print(" at line "); print_int(line); interaction:=scroll_mode; jump_out; *************** *** 2327,2331 **** |short_real| in some implementations of \PASCAL. Alternatively, it is possible to deal with glue ratios using nothing but fixed-point ! arithmetic; see {\sl TUGboat \bf3},1 (February 1982), 10--27. (But the routines cited there must be modified to allow negative glue ratios.) @^system dependencies@> --- 2337,2341 ---- |short_real| in some implementations of \PASCAL. Alternatively, it is possible to deal with glue ratios using nothing but fixed-point ! arithmetic; see {\sl TUGboat \bf3},1 (March 1982), 10--27. (But the routines cited there must be modified to allow negative glue ratios.) @^system dependencies@> *************** *** 2343,2347 **** In order to make efficient use of storage space, \TeX\ bases its major data structures on a |memory_word|, which contains either a (signed) integer, ! possibly scaled, or an (unsigned) |glue_ratio|, or a small number of fields that are one half or one quarter of the size used for storing integers. --- 2353,2357 ---- In order to make efficient use of storage space, \TeX\ bases its major data structures on a |memory_word|, which contains either a (signed) integer, ! possibly scaled, or a (signed) |glue_ratio|, or a small number of fields that are one half or one quarter of the size used for storing integers. *************** *** 8620,8626 **** begin scan_int; if (cur_val<0)or(cur_val>@'77777) then ! begin print_err("Bad math code"); ! @.Bad math code@> ! help2("A numeric math code must be between 0 and 32767.")@/ ("I changed this one to zero."); int_error(cur_val); cur_val:=0; end; --- 8630,8636 ---- begin scan_int; if (cur_val<0)or(cur_val>@'77777) then ! begin print_err("Bad mathchar"); ! @.Bad mathchar@> ! help2("A mathchar number must be between 0 and 32767.")@/ ("I changed this one to zero."); int_error(cur_val); cur_val:=0; end; *************** *** 9439,9442 **** --- 9449,9456 ---- if cur_tok=0 then goto done; {|cur_cmd=cur_chr=0| will occur at the end of the line} + if align_state<1000000 then {unmatched `\.\}' aborts the line} + begin repeat get_token; until cur_tok=0; + align_state:=1000000; goto done; + end; store_new_token(cur_tok); end; *************** *** 10013,10017 **** @= procedure print_file_name(@!n,@!a,@!e:integer); ! begin print(a); print(n); print(e); end; --- 10027,10031 ---- @= procedure print_file_name(@!n,@!a,@!e:integer); ! begin slow_print(a); slow_print(n); slow_print(e); end; *************** *** 10309,10313 **** @ @= begin wlog(banner); ! print(format_ident); print(" "); print_int(day); print_char(" "); months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; --- 10323,10327 ---- @ @= begin wlog(banner); ! slow_print(format_ident); print(" "); print_int(day); print_char(" "); months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; *************** *** 10341,10345 **** if term_offset+length(name)>max_print_line-2 then print_ln else if (term_offset>0)or(file_offset>0) then print_char(" "); ! 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} --- 10355,10359 ---- if term_offset+length(name)>max_print_line-2 then print_ln else if (term_offset>0)or(file_offset>0) then print_char(" "); ! print_char("("); incr(open_parens); slow_print(name); update_terminal; state:=new_line; if name=str_ptr-1 then {we can conserve string pool space now} *************** *** 11252,11256 **** @.Missing character@> print_ASCII(c); print(" in font "); ! print(font_name[f]); print_char("!"); end_diagnostic(false); end; end; --- 11266,11270 ---- @.Missing character@> print_ASCII(c); print(" in font "); ! slow_print(font_name[f]); print_char("!"); end_diagnostic(false); end; end; *************** *** 12717,12721 **** end; @; ! print_nl("Output written on "); print(output_file_name); @.Output written on x@> print(" ("); print_int(total_pages); print(" page"); --- 12731,12735 ---- end; @; ! print_nl("Output written on "); slow_print(output_file_name); @.Output written on x@> print(" ("); print_int(total_pages); print(" page"); *************** *** 14022,14025 **** --- 14036,14042 ---- @!f:scaled; {fraction part of |m|} begin n:=x_over_n(m,@'200000); f:=remainder;@/ + if f<0 then + begin decr(n); f:=f+@'200000; + end; p:=get_node(glue_spec_size); width(p):=mu_mult(width(g)); {convert \.{mu} to \.{pt}} *************** *** 14041,14044 **** --- 14058,14064 ---- begin if subtype(p)=mu_glue then begin n:=x_over_n(m,@'200000); f:=remainder;@/ + if f<0 then + begin decr(n); f:=f+@'200000; + end; width(p):=mu_mult(width(p)); subtype(p):=normal; end; *************** *** 15616,15619 **** --- 15636,15640 ---- until q=cur_align; if n>max_quarterword then confusion("256 spans"); {this can happen, but won't} + @^system dependencies@> @:this can't happen 256 spans}{\quad 256 spans@> q:=cur_span; while link(info(q))hf then goto done3; ! c:=qo(character(s)); if lc_code(c)=0 then goto done3; if hn=63 then goto done3; ! hb:=s; incr(hn); hu[hn]:=c; hc[hn]:=lc_code(c); end else if type(s)=ligature_node then --- 17524,17531 ---- loop@+ begin if is_char_node(s) then begin if font(s)<>hf then goto done3; ! hyf_bchar:=character(s); c:=qo(hyf_bchar); if lc_code(c)=0 then goto done3; if hn=63 then goto done3; ! hb:=s; incr(hn); hu[hn]:=c; hc[hn]:=lc_code(c); hyf_bchar:=non_char; end else if type(s)=ligature_node then *************** *** 17510,17514 **** @ ! else if (type(s)<>kern_node)or(subtype(s)<>normal) then goto done3; s:=link(s); end; --- 17532,17537 ---- @ ! else if (type(s)=kern_node)and(subtype(s)=normal) then hb:=s ! else goto done3; s:=link(s); end; *************** *** 17522,17526 **** @= begin if font(lig_char(s))<>hf then goto done3; ! j:=hn; q:=lig_ptr(s); while q>null do begin c:=qo(character(q)); --- 17545,17549 ---- @= begin if font(lig_char(s))<>hf then goto done3; ! j:=hn; q:=lig_ptr(s);@+if q>null then hyf_bchar:=character(q); while q>null do begin c:=qo(character(q)); *************** *** 17531,17538 **** end; hb:=s; hn:=j; end @ @= ! if hn= ! if hn=1|} loop@+ begin if not(is_char_node(s)) then case type(s) of *************** *** 17590,17597 **** @= ! q:=link(hb); link(hb):=null; r:=link(ha); link(ha):=null; bchar:=non_char; ! 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 --- 17614,17618 ---- @= ! q:=link(hb); link(hb):=null; r:=link(ha); link(ha):=null; bchar:=hyf_bchar; if is_char_node(ha) then if font(ha)<>hf then goto found2 *************** *** 19985,19989 **** appended to it. In |main_control| we have $$|cur_r|=\cases{|character(lig_stack)|,&if |lig_stack>null|;\cr ! |font_bchar[cur_font]|,&otherwise.\cr}$$ Several additional global variables are needed. --- 20006,20011 ---- appended to it. In |main_control| we have $$|cur_r|=\cases{|character(lig_stack)|,&if |lig_stack>null|;\cr ! |font_bchar[cur_font]|,&otherwise;\cr}$$ ! except when |character(lig_stack)=font_false_bchar[cur_font]|. Several additional global variables are needed. *************** *** 20089,20093 **** @ @= if lig_stack=null then goto reswitch; ! cur_q:=tail; cur_l:=cur_r; {or |character(lig_stack)|} main_loop_move+1:if not is_char_node(lig_stack) then goto main_loop_move_lig; main_loop_move+2:if(cur_chrfont_ec[main_f]) then --- 20111,20115 ---- @ @= if lig_stack=null then goto reswitch; ! cur_q:=tail; cur_l:=character(lig_stack); main_loop_move+1:if not is_char_node(lig_stack) then goto main_loop_move_lig; main_loop_move+2:if(cur_chrfont_ec[main_f]) then *************** *** 23052,23056 **** end ! @ The processing of boxes is somewhat different, because it may be necessary to scan and create an entire box before we actually change the value of the old one. --- 23074,23078 ---- end ! @ The processing of boxes is somewhat different, because we may need to scan and create an entire box before we actually change the value of the old one. *************** *** 23059,23063 **** set_box: begin scan_eight_bit_int; if global then n:=256+cur_val@+else n:=cur_val; ! scan_optional_equals; scan_box(box_flag+n); end; --- 23081,23091 ---- set_box: begin scan_eight_bit_int; if global then n:=256+cur_val@+else n:=cur_val; ! scan_optional_equals; ! if set_box_allowed then scan_box(box_flag+n) ! else begin print_err("Improper "); print_esc("setbox"); ! @.Improper \\setbox@> ! help2("Sorry, \setbox is not allowed after \halign in a display,")@/ ! ("or between \accent and an accented character."); error; ! end; end; *************** *** 23219,23222 **** --- 23247,23251 ---- @!t:str_number; {name for the frozen font identifier} @!old_setting:0..max_selector; {holds |selector| setting} + @!flushable_string:str_number; {string not yet referenced} begin if job_name=0 then open_log_file; {avoid confusing \.{texput} with the font name} *************** *** 23273,23279 **** @= for f:=font_base+1 to font_ptr do if str_eq_str(font_name[f],cur_name)and str_eq_str(font_area[f],cur_area) then ! begin if s>0 then begin if s=font_size[f] then goto common_ending; end --- 23302,23312 ---- @= + flushable_string:=str_ptr-1; for f:=font_base+1 to font_ptr do if str_eq_str(font_name[f],cur_name)and str_eq_str(font_area[f],cur_area) then ! begin if cur_name=flushable_string then ! begin flush_string; cur_name:=font_name[f]; ! end; ! if s>0 then begin if s=font_size[f] then goto common_ending; end *************** *** 23283,23287 **** @ @= ! set_font:begin print("select font "); print(font_name[chr_code]); if font_size[chr_code]<>font_dsize[chr_code] then begin print(" at "); print_scaled(font_size[chr_code]); --- 23316,23320 ---- @ @= ! set_font:begin print("select font "); slow_print(font_name[chr_code]); if font_size[chr_code]<>font_dsize[chr_code] then begin print(" at "); print_scaled(font_size[chr_code]); *************** *** 23346,23350 **** begin loop begin @; if cur_cmd<=max_non_prefixed_command then return; ! prefixed_command; end; exit:end; --- 23379,23383 ---- begin loop begin @; if cur_cmd<=max_non_prefixed_command then return; ! set_box_allowed:=false; prefixed_command; set_box_allowed:=true; end; exit:end; *************** *** 23419,23423 **** begin if term_offset+length(s)>max_print_line-2 then print_ln else if (term_offset>0)or(file_offset>0) then print_char(" "); ! print(s); update_terminal; end --- 23452,23456 ---- begin if term_offset+length(s)>max_print_line-2 then print_ln else if (term_offset>0)or(file_offset>0) then print_char(" "); ! slow_print(s); update_terminal; end *************** *** 23432,23436 **** @ @= ! begin print_err(s); if err_help<>null then use_err_help:=true else if long_help_seen then help1("(That was another \errmessage.)") --- 23465,23469 ---- @ @= ! begin print_err(""); slow_print(s); if err_help<>null then use_err_help:=true else if long_help_seen then help1("(That was another \errmessage.)") *************** *** 24074,24079 **** print_nl("Beginning to dump on file "); @.Beginning to dump...@> ! print(w_make_name_string(fmt_file)); flush_string; ! print_nl(format_ident) @ @= --- 24107,24112 ---- print_nl("Beginning to dump on file "); @.Beginning to dump...@> ! slow_print(w_make_name_string(fmt_file)); flush_string; ! print_nl(""); slow_print(format_ident) @ @= *************** *** 24192,24196 **** begin print_nl("Transcript written on "); @.Transcript written...@> ! print(log_name); print_char("."); end; end; --- 24225,24229 ---- begin print_nl("Transcript written on "); @.Transcript written...@> ! slow_print(log_name); print_char("."); end; end; *************** *** 24370,24374 **** end; 9: show_token_list(n,null,1000); ! 10: print(n); 11: check_mem(n>0); {check wellformedness; print new busy locations if |n>0|} 12: search_mem(n); {look for pointers to |n|} --- 24403,24407 ---- end; 9: show_token_list(n,null,1000); ! 10: slow_print(n); 11: check_mem(n>0); {check wellformedness; print new busy locations if |n>0|} 12: search_mem(n); {look for pointers to |n|} diff -r -c2 oldtex/dist/tex/texbook.tex newtex/dist/tex/texbook.tex *** oldtex/dist/tex/texbook.tex Mon Mar 16 11:13:08 1992 --- newtex/dist/tex/texbook.tex Mon Jan 13 15:38:37 1992 *************** *** 117,122 **** %ISBN 0-201-13447-0\par % hardcover \noindent ! TUVWXYZ--DO--97654321 % paperback ! %KLMNOPQ--DO--97654321 % hardcover ^^{Knuth, Donald Ervin} ^^|\copyright| --- 117,122 ---- %ISBN 0-201-13447-0\par % hardcover \noindent ! 20 21 22 23 24 25 26 27 28 29--DO--97969594939291 % paperback ! %11 12 13 14 15 16 17 18 19 20--DO--97969594939291 % hardcover ^^{Knuth, Donald Ervin} ^^|\copyright| *************** *** 4462,4468 **** \ddangerexercise What are the space factors after each token of the Dick-and-Jane example? ! \answer 1000, except: 999 after |B|, |S|, |D|, and |J|; 1250 after the ! comma; 3000 after the exclamation point, the double-right-quote, and the ! periods. If a period had come right after the |B| (i.e., if the text had said `|B. Sally|'), the space factor after that period would have been~1000, not~3000. --- 4462,4468 ---- \ddangerexercise What are the space factors after each token of the Dick-and-Jane example? ! \answer 1000, except: 999 after |O|, |B|, |S|, |D|, and |J|; 1250 after the ! comma; 3000 after the exclamation point, the right-quote marks, and the ! periods. If a period had come just after the |B| (i.e., if the text had said `|B. Sally|'), the space factor after that period would have been~1000, not~3000. *************** *** 5628,5640 **** method, in an emergency. ! \dangerexercise Some compound words in ^{German} text change their spelling when they are split between lines. For example, `backen' becomes `bak-ken' and `Bettuch' becomes `Bett-tuch'. How can you instruct \TeX\ to produce ! this effect? ! \answer |ba\ck en| and |Be\ttt uch|, where the macros |\ck| and |\ttt| are defined by \begintt ! \def\ck{\discretionary{k-}{k}{ck}} ! \def\ttt{tt\discretionary{-}{t}{}} \endtt The English word `eighteen' might deserve similar treatment. --- 5628,5640 ---- method, in an emergency. ! \dangerexercise Some ^{German} words traditionally change their spelling when they are split between lines. For example, `backen' becomes `bak-ken' and `Bettuch' becomes `Bett-tuch'. How can you instruct \TeX\ to produce ! such effects? ! \answer |ba\ck/en| and |Be\ttt/uch|, where the macros |\ck/| and |\ttt/| are defined by \begintt ! \def\ck/{\discretionary{k-}{k}{ck}} ! \def\ttt/{tt\discretionary{-}{t}{}} \endtt The English word `eighteen' might deserve similar treatment. *************** *** 10828,10833 **** continued fractions into different positions than usual. ! \danger If you say `^|\phantom||{|\|}|' in any formula, \TeX\ ! will do all of its spacing as if you had said simply `|{|\|}|', but the subformula itself will be invisible. Thus, for example, `|\phantom{0}2|' takes up just as much space as `|02|' in the --- 10828,10833 ---- continued fractions into different positions than usual. ! \danger If you say `^|\phantom||{|\|}|' in any formula, plain ! \TeX\ will do its spacing as if you had said simply `|{|\|}|', but the subformula itself will be invisible. Thus, for example, `|\phantom{0}2|' takes up just as much space as `|02|' in the *************** *** 17320,17324 **** performed. An assignment need not follow immediately; if another |\afterassignment| is performed before the next assignment, the second one ! overrides the first. If the next assignment is a |\setbox|, and if the assigned \ is |\hbox| or |\vbox| or |\vtop|, the \ will be inserted just after the |{| in the box construction, not after the |}|; --- 17320,17324 ---- performed. An assignment need not follow immediately; if another |\afterassignment| is performed before the next assignment, the second one ! overrides the first. If the next assignment is a ^|\setbox|, and if the assigned \ is |\hbox| or |\vbox| or |\vtop|, the \ will be inserted just after the |{| in the box construction, not after the |}|; *************** *** 17770,17774 **** \\^|\accent|\<8-bit number>\. Here ^\ stands for zero or more \ ! commands. If the assignments are not followed by a \, where \ stands for any of the commands just discussed in the previous paragraph, \TeX\ treats |\accent| as if it were |\char|, except that --- 17770,17775 ---- \\^|\accent|\<8-bit number>\. Here ^\ stands for zero or more \ ! commands other than ^|\setbox|. ! If the assignments are not followed by a \, where \ stands for any of the commands just discussed in the previous paragraph, \TeX\ treats |\accent| as if it were |\char|, except that *************** *** 18003,18007 **** the enclosing vertical mode (see Chapter~24), except that the lines are shifted right by the ^|\displayindent|. The closing `|}|' may be followed by ! optional \ commands, after which `|$$|'~must conclude the display. \TeX\ will insert the ^|\abovedisplayskip| and ^|\belowdisplayskip| glue before and after the result of the alignment. --- 18004,18009 ---- the enclosing vertical mode (see Chapter~24), except that the lines are shifted right by the ^|\displayindent|. The closing `|}|' may be followed by ! optional \ commands other than ^|\setbox|, ! after which `|$$|'~must conclude the display. \TeX\ will insert the ^|\abovedisplayskip| and ^|\belowdisplayskip| glue before and after the result of the alignment. *************** *** 18152,18156 **** level of math mode processing and ends the current group, which should have begun with either~|$| or~\. Once the math list is finished, it ! is converted into a horizontal list as explained in Appendix~G. \\None of the above: If any other primitive command of \TeX\ occurs in --- 18154,18160 ---- level of math mode processing and ends the current group, which should have begun with either~|$| or~\. Once the math list is finished, it ! is converted into a horizontal list as explained in Appendix~G\null. \TeX\ ! scans \ after completing a displayed formula; this is ! usually the implicit space at the end of a line in the input file. \\None of the above: If any other primitive command of \TeX\ occurs in *************** *** 19790,19794 **** \smallbreak |\newcount\mscount| ! |\def\multispan#1{\omit \mscount=#1 \loop\ifnum\mscount>1 \sp@n\repeat}| |\def\sp@n{\span\omit \advance\mscount by -1 }| \endlines --- 19794,19799 ---- \smallbreak |\newcount\mscount| ! |\def\multispan#1{\omit\mscount=#1\relax\loop\ifnum\mscount>1 \sp@n\repeat}|% ! \kern-10pt\null |\def\sp@n{\span\omit \advance\mscount by -1 }| \endlines *************** *** 19946,19950 **** | \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}| |\def|^|\c||#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent'30 #1%|\parbreak% ! | \else{\ooalign{\hidewidth\char'30\hidewidth\crcr\unhbox0}}\fi}| |\def|^|\copyright||{{\ooalign|\parbreak% | {\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}| --- 19951,19955 ---- | \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}}| |\def|^|\c||#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent'30 #1%|\parbreak% ! | \else{\ooalign{\unhbox0\crcr\hidewidth\char'30\hidewidth}}\fi}| |\def|^|\copyright||{{\ooalign|\parbreak% | {\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}| *************** *** 20073,20077 **** |\def|^|\longleftrightarrow||{\leftarrow\joinrel\rightarrow}|\parbreak% |\def|^|\Longleftrightarrow||{\Leftarrow\joinrel\Rightarrow}| ! |\mathchardef\mapstochar="322F \def\mapsto{\mapstochar\rightarrow}|\parbreak% |\def\longmapsto{\mapstochar\longrightarrow}| |\mathchardef\lhook="312C \def|^|\hookrightarrow||{\lhook\joinrel\rightarrow}| --- 20078,20082 ---- |\def|^|\longleftrightarrow||{\leftarrow\joinrel\rightarrow}|\parbreak% |\def|^|\Longleftrightarrow||{\Leftarrow\joinrel\Rightarrow}| ! |\mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}|\parbreak% |\def\longmapsto{\mapstochar\longrightarrow}| |\mathchardef\lhook="312C \def|^|\hookrightarrow||{\lhook\joinrel\rightarrow}| *************** *** 20104,20118 **** |\def\ddot{\mathaccent"707F }| |\def|^|\widetilde||{\mathaccent"0365 } \def|^|\widehat||{\mathaccent"0362 }| ! |\def|^|\overrightarrow||#1{\vbox{\ialign{##\crcr|\parbreak% | \rightarrowfill\crcr\noalign{\kern-1pt\nointerlineskip}|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr}}}| ! |\def|^|\overleftarrow||#1{\vbox{\ialign{##\crcr|\parbreak% | \leftarrowfill\crcr\noalign{\kern-1pt\nointerlineskip}|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr}}}| |\def|^|\overbrace|% ! |#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3pt}|\parbreak% | \downbracefill\crcr\noalign{\kern3pt\nointerlineskip}|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr}}}|^|\limits||}| ! |\def|^|\underbrace||#1{\mathop{\vtop{\ialign{##\crcr|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr|% |\noalign{\kern3pt\nointerlineskip}|\parbreak% --- 20109,20123 ---- |\def\ddot{\mathaccent"707F }| |\def|^|\widetilde||{\mathaccent"0365 } \def|^|\widehat||{\mathaccent"0362 }| ! |\def|^|\overrightarrow||#1{\vbox{\m@th\ialign{##\crcr|\parbreak% | \rightarrowfill\crcr\noalign{\kern-1pt\nointerlineskip}|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr}}}| ! |\def|^|\overleftarrow||#1{\vbox{\m@th\ialign{##\crcr|\parbreak% | \leftarrowfill\crcr\noalign{\kern-1pt\nointerlineskip}|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr}}}| |\def|^|\overbrace|% ! |#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3pt}|\parbreak% | \downbracefill\crcr\noalign{\kern3pt\nointerlineskip}|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr}}}|^|\limits||}| ! |\def|^|\underbrace||#1{\mathop{\vtop{\m@th\ialign{##\crcr|\parbreak% | $\hfil\displaystyle{#1}\hfil$\crcr|% |\noalign{\kern3pt\nointerlineskip}|\parbreak% *************** *** 20127,20139 **** |\def\lceil{\delimiter"4264306 } \def\rceil{\delimiter"5265307 }| |\def\lfloor{\delimiter"4262304 } \def\rfloor{\delimiter"5263305 }| ! |\def\lgroup{\delimiter"400033A } \def\rgroup{\delimiter"500033B }| ! |\def\lmoustache{\delimiter"4000340 } \def\rmoustache{\delimiter"5000341 }|% \kern-2pt |\def\uparrow{\delimiter"3222378 } \def\Uparrow{\delimiter"322A37E }| |\def\downarrow{\delimiter"3223379 } \def\Downarrow{\delimiter"322B37F }| ! |\def\updownarrow{\delimiter"326C33F } \def\arrowvert{\delimiter"033C000 }| ! |\def\Updownarrow{\delimiter"326D377 } \def\Arrowvert{\delimiter"033D000 } | |\def\vert{\delimiter"026A30C } \def\Vert{\delimiter"026B30D } | ! |\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"033E000 }| \endlines --- 20132,20144 ---- |\def\lceil{\delimiter"4264306 } \def\rceil{\delimiter"5265307 }| |\def\lfloor{\delimiter"4262304 } \def\rfloor{\delimiter"5263305 }| ! |\def\lgroup{\delimiter"462833A } \def\rgroup{\delimiter"562933B }| ! |\def\lmoustache{\delimiter"437A340 } \def\rmoustache{\delimiter"537B341 }|% \kern-2pt |\def\uparrow{\delimiter"3222378 } \def\Uparrow{\delimiter"322A37E }| |\def\downarrow{\delimiter"3223379 } \def\Downarrow{\delimiter"322B37F }| ! |\def\updownarrow{\delimiter"326C33F } \def\arrowvert{\delimiter"026A33C }| ! |\def\Updownarrow{\delimiter"326D377 } \def\Arrowvert{\delimiter"026B33D } | |\def\vert{\delimiter"026A30C } \def\Vert{\delimiter"026B30D } | ! |\def\backslash{\delimiter"026E30F } \def\bracevert{\delimiter"077C33E }| \endlines *************** *** 20163,20167 **** constructs a formula in all four styles; it is applied here in the implementation of\/ ^|\phantom|, ^|\smash|, ^|\root|, and other ! operations. \beginlines |\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}|\parbreak% --- 20168,20173 ---- constructs a formula in all four styles; it is applied here in the implementation of\/ ^|\phantom|, ^|\smash|, ^|\root|, and other ! operations. (Actually |\phantom| and |\smash| are not perfect: They ! assume that the current style is uncramped.) \beginlines |\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}|\parbreak% *************** *** 20170,20175 **** |\newbox\rootbox| |\def\root#1\of{\setbox\rootbox=|\parbreak% ! | \hbox{$\m@th \scriptscriptstyle{#1}$}|\parbreak% ! | \mathpalette\r@@t}| |\def\r@@t#1#2{\setbox0=\hbox{$\m@th #1\sqrt{#2}$}|\parbreak% | \dimen@=\ht0 \advance\dimen@ by-\dp0|\parbreak% --- 20176,20180 ---- |\newbox\rootbox| |\def\root#1\of{\setbox\rootbox=|\parbreak% ! | \hbox{$\m@th \scriptscriptstyle{#1}$}\mathpalette\r@@t}| |\def\r@@t#1#2{\setbox0=\hbox{$\m@th #1\sqrt{#2}$}|\parbreak% | \dimen@=\ht0 \advance\dimen@ by-\dp0|\parbreak% *************** *** 20199,20205 **** | \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}| |\def|^|\notin||{\mathrel{\mathpalette\c@ncel\in}}|\parbreak% ! |\def\c@ncel#1#2{\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}|\parbreak% |\def|^|\rightleftharpoons||{\mathrel{\mathpalette\rlh@{}}}|\parbreak% ! |\def\rlh@#1{\vcenter{\hbox{\ooalign{\raise2pt|\parbreak% | \hbox{$#1\rightharpoonup$}\crcr $#1\leftharpoondown$}}}}| |\def|^|\buildrel||#1\over#2{\mathrel{\mathop{\kern0pt #2}\limits^{#1}}}| --- 20204,20210 ---- | \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}| |\def|^|\notin||{\mathrel{\mathpalette\c@ncel\in}}|\parbreak% ! |\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}|\parbreak% |\def|^|\rightleftharpoons||{\mathrel{\mathpalette\rlh@{}}}|\parbreak% ! |\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt|\parbreak% | \hbox{$#1\rightharpoonup$}\crcr $#1\leftharpoondown$}}}}| |\def|^|\buildrel||#1\over#2{\mathrel{\mathop{\kern0pt #2}\limits^{#1}}}| *************** *** 20431,20435 **** |\catcode`@=12 % at signs are no longer letters| \nobreak\smallskip ! |\def|^|\fmtname||{plain}\def\fmtversion{3.0} % identifies the current format| \endlines The format name and version number are recorded in control sequences, --- 20436,20440 ---- |\catcode`@=12 % at signs are no longer letters| \nobreak\smallskip ! |\def|^|\fmtname||{plain}\def\fmtversion{3.14} % identifies the current format| \endlines The format name and version number are recorded in control sequences, *************** *** 20964,20989 **** following little program is for \TeX\ exegetes who insist on learning the whole story: Macro |\stest| decides whether or not ! the first token of a given token list register ! is a \ as defined in Chapter~24. If so, the macro ! decides whether or not the token is ``funny,'' i.e., whether or not ! the character code is different from an ASCII \; the macro ! also decides whether a space token is explicit or implicit. \begintt|global|displayindent=0pt|global|displaywidth=|hsize ! \newif\ifspace \newif\iffunny \newif\ifexplicit ! \def\stest#1{\expandafter\s\the#1! \stest} ! \def\s{\funnyfalse \global\explicitfalse \futurelet\next\ss} ! \def\ss{\ifcat\noexpand\next\stoken \spacetrue ! \ifx\next\stoken \let\next=\sss \else\let\next=\ssss \fi ! \else \let\next=\sssss \fi \next} \long\def\sss#1 #2\stest{\def\next{#1}% ! \ifx\next\empty \global\explicittrue \fi} ! \long\def\ssss#1#2\stest{\funnytrue {\uccode`#1=`~ ! \uppercase{\ifcat\noexpand#1}\noexpand~% active funny space ! \else \escapechar=\if*#1`?\else`*\fi ! \if#1\string#1\global\explicittrue\fi \fi}} ! \long\def\sssss#1\stest{\spacefalse} ! \endtt} ! \smallbreak The argument to ^|\write| is expanded when a |\shipout| occurs, but sometimes expansion isn't desired. Here's a macro (suggested by Todd --- 20969,20996 ---- following little program is for \TeX\ exegetes who insist on learning the whole story: Macro |\stest| decides whether or not ! a given token list register begins with ! a \ as defined in Chapter~24. If so, the macro ! decides whether the token is explicit and/or funny and/or active. ! \belowdisplayskip=-\baselineskip % cancel unwanted strut at end of footnote \begintt|global|displayindent=0pt|global|displaywidth=|hsize ! \newif\ifspace \newif\iffunny \newif\ifexplicit \newif\ifactive ! \def\stest#1{\funnyfalse \expandafter\s\the#1! \stest} ! \def\s{\global\explicitfalse \global\activefalse \futurelet\next\ss} ! \def\ss{\ifcat\noexpand\next\stoken\let\nxt\sx\else\let\nxt\ns\fi\nxt} ! \def\sx{\spacetrue\ifx\next\stoken\let\nxt\sss\else\let\nxt=\ssss\fi\nxt} \long\def\sss#1 #2\stest{\def\next{#1}% ! \ifx\next\empty \global\explicittrue \else\testactive#1\s\fi} ! \long\def\ssss#1#2\stest{\funnytrue{\escapechar=\if*#1`?\else`*\fi\relax ! \if#1\string#1\uccode`#1=`~ % we assume that ~ is an active character ! \uppercase{\ifcat\noexpand#1}\noexpand~\global\activetrue ! \else\global\explicittrue\fi ! \else\testactive#1\s\fi}} ! \long\def\ns#1\stest{\spacefalse} ! \long\def\testactive#1#2\s{\expandafter\tact\string#1\s\tact} ! \long\def\tact#1#2\tact{\def\next{#2}\ifx\next\xs\global\activetrue ! \else\ifx\next\empty \global\activetrue\fi\fi} \def\xs{\s} ! \endtt\loggingall\showlists} ! \smallbreak\loggingall The argument to ^|\write| is expanded when a |\shipout| occurs, but sometimes expansion isn't desired. Here's a macro (suggested by Todd *************** *** 25114,25118 **** styles $>S$. The list might also contain style items, which are removed during the second pass; they are used to change the current style just as ! in the the first pass, so that both passes have the same value of~$C$ when they work on any particular atom. --- 25121,25125 ---- styles $>S$. The list might also contain style items, which are removed during the second pass; they are used to change the current style just as ! in the first pass, so that both passes have the same value of~$C$ when they work on any particular atom. *************** *** 25151,25156 **** \omit\span\omit\it Parameter&\omit\it Used in\hfil\cr \noalign{\medskip\hrule\smallskip} - \sigma_2&space&17& - \sigma_{17}&sub2&18d\cr \sigma_5&x\_\\height&11, 18b, 18c, 18e& \sigma_{18}&sup\_drop&18a\cr --- 25158,25161 ---- *************** *** 25175,25181 **** \sigma_{16}&sub1&18b& \xi_{13}&big\_op\_\\spacing5&13a\cr \noalign{\smallskip\hrule\medskip}}}$$ Besides the symbol and extension fonts (families 2 and~3), the ! rules above also refer to parameters in other families: Rule~17 uses |\fontdimen| parameter~2 (space) to determine whether to insert an italic correction between adjacent letters, and Rule~12 uses parameter~5 --- 25180,25187 ---- \sigma_{16}&sub1&18b& \xi_{13}&big\_op\_\\spacing5&13a\cr + \sigma_{17}&sub2&18d\cr \noalign{\smallskip\hrule\medskip}}}$$ Besides the symbol and extension fonts (families 2 and~3), the ! rules above also refer to parameters in arbitrary families: Rule~17 uses |\fontdimen| parameter~2 (space) to determine whether to insert an italic correction between adjacent letters, and Rule~12 uses parameter~5 *************** *** 26695,26699 **** @387, @406, @407, 413, 415, @417. *|\hskip|, 71, 86, 168, 283, +285, 290, @314. ! *|\hss|, 71, @82--83, 233, 283, 285, 290, 442. *|\ht|, 120, 271, +388--+389, 417. Hungarian umlaut (\H{}), \see |\H|. --- 26701,26705 ---- @387, @406, @407, 413, 415, @417. *|\hskip|, 71, 86, 168, 283, +285, 290, @314. ! *|\hss|, 71--72, @82--83, 233, 283, 285, 290, 442. *|\ht|, 120, 271, +388--+389, 417. Hungarian umlaut (\H{}), \see |\H|. *************** *** 26701,26704 **** --- 26707,26711 ---- |hyphen.tex|, 364, +453. hyphenation, 28, 39, 96, 306, 314, 394--395, 414, 424, +449--+455. + \sub suppressing, 93, 414, 424, 454. *|\hyphenation|, 277, @419, +452--+453, 455. \, +277. *************** *** 26747,26753 **** incomplete conditionals, 206. *|\indent|, 86, 94, 101, 263, +282, +286, +291, @355. ! indentation, 86, 222, 282. \sub hanging, 79, 102--103. - indention, \see indentation. indexes, 261--263, 392--394, 423--425, 481. indices, \see subscripts. --- 26754,26759 ---- incomplete conditionals, 206. *|\indent|, 86, 94, 101, 263, +282, +286, +291, @355. ! indentation or indention, 86, 222, 282. \sub hanging, 79, 102--103. indexes, 261--263, 392--394, 423--425, 481. indices, \see subscripts. *************** *** 27544,27548 **** set macro, 379. set notation, @147, @174--175. ! *|\setbox|, 66--67, 77, 81, +120, 276, @386--392. *|\setlanguage|, 287, +455. |\setminus| ( $\setminus$ ), @436. --- 27550,27554 ---- set macro, 379. set notation, @147, @174--175. ! *|\setbox|, 66--67, 77, 81, +120, 276, 279, 286, 291, @386--392. *|\setlanguage|, 287, +455. |\setminus| ( $\setminus$ ), @436. diff -r -c2 oldtex/dist/tex/trip.fot newtex/dist/tex/trip.fot *** oldtex/dist/tex/trip.fot Mon Mar 16 11:13:09 1992 --- newtex/dist/tex/trip.fot Sat Jan 25 22:13:42 1992 *************** *** 1,3 **** ! This is TeX, Version 3.14 (INITEX) ** &trip trip (trip.tex ## --- 1,3 ---- ! This is TeX, Version 3.141 (INITEX) ** &trip trip (trip.tex ## *************** *** 15,19 **** l.106 \penalty-10000 % now we'll compute silently for awhile,... ! Memory usage before: 159&312; after: 102&278; still untouched: 1613 ! OK (see the transcript file). --- 15,19 ---- l.106 \penalty-10000 % now we'll compute silently for awhile,... ! Memory usage before: 159&313; after: 102&278; still untouched: 1613 ! OK (see the transcript file). *************** *** 73,77 **** l.442 ...lobal\escapechar256\end ! Memory usage before: 334&422; after: 292&409; still untouched: 175 ) (end occurred inside a group at level 1) --- 73,77 ---- l.442 ...lobal\escapechar256\end ! Memory usage before: 334&428; after: 292&415; still untouched: 175 ) (end occurred inside a group at level 1) diff -r -c2 oldtex/dist/tex/trip.log newtex/dist/tex/trip.log *** oldtex/dist/tex/trip.log Mon Mar 16 11:13:14 1992 --- newtex/dist/tex/trip.log Sat Jan 25 22:13:30 1992 *************** *** 1,3 **** ! This is TeX, Version 3.14 (preloaded format=trip 91.3.26) 26 MAR 1991 18:03 ** &trip trip (trip.tex ## --- 1,3 ---- ! This is TeX, Version 3.141 (preloaded format=trip 92.1.25) 25 JAN 1992 22:09 ** &trip trip (trip.tex ## *************** *** 47,51 **** .\write10{} .\write10{\uppercase {\number {\outputpenalty }}} ! .\write10{[\uppercase {\romannumeral -\the \outputpenalty }} .\glue(\topskip) 9.6 plus 1.0fil .\vbox(10.4+0.0)x-2.0, shifted -20.0 --- 47,51 ---- .\write10{} .\write10{\uppercase {\number {\outputpenalty }}} ! .\write10{[\uppercase {\romannumeral -\the \outputpenalty }[} .\glue(\topskip) 9.6 plus 1.0fil .\vbox(10.4+0.0)x-2.0, shifted -20.0 *************** *** 71,75 **** {\romannumeral} {\the} ! Memory usage before: 159&312; after: 102&278; still untouched: 1613 {vertical mode: \batchmode} --- 71,75 ---- {\romannumeral} {\the} ! Memory usage before: 159&313; after: 102&278; still untouched: 1613 {vertical mode: \batchmode} *************** *** 322,328 **** {\hfill} {\vadjust} ! {internal vertical mode: \special} {\penalty} {end-group character }} {horizontal mode: \penalty} {the letter A} --- 322,330 ---- {\hfill} {\vadjust} ! {internal vertical mode: \newlinechar} ! {\special} {\penalty} {end-group character }} + {restoring \newlinechar=0} {horizontal mode: \penalty} {the letter A} *************** *** 470,474 **** .\penalty -1000000000 .\glue(\rightskip) 0.0 ! \special{-1000.0pt} \penalty -5000 \glue(\baselineskip) 3.0 plus 41.0 --- 472,476 ---- .\penalty -1000000000 .\glue(\rightskip) 0.0 ! \special{^^80-1000.0pt} \penalty -5000 \glue(\baselineskip) 3.0 plus 41.0 *************** *** 638,642 **** ..\mark{alpha} ! Memory usage before: 747&483; after: 581&480; still untouched: 1493 {internal vertical mode: blank space } {\unvcopy} --- 640,644 ---- ..\mark{alpha} ! Memory usage before: 747&484; after: 581&481; still untouched: 1492 {internal vertical mode: blank space } {\unvcopy} *************** *** 685,689 **** .\penalty -1000000000 .\glue(\rightskip) 0.0 ! \special{-1000.0pt} prevdepth ignored ### vertical mode entered at line 0 --- 687,691 ---- .\penalty -1000000000 .\glue(\rightskip) 0.0 ! \special{^^80-1000.0pt} prevdepth ignored ### vertical mode entered at line 0 *************** *** 811,815 **** .etc. ! Memory usage before: 475&469; after: 290&465; still untouched: 1474 {internal vertical mode: blank space } {\unvcopy} --- 813,817 ---- .etc. ! Memory usage before: 475&470; after: 290&466; still untouched: 1473 {internal vertical mode: blank space } {\unvcopy} *************** *** 911,915 **** .\vbox(55.0+-1.0)x0.0 [] ! Memory usage before: 218&458; after: 149&457; still untouched: 1474 {internal vertical mode: blank space } {\unvcopy} --- 913,917 ---- .\vbox(55.0+-1.0)x0.0 [] ! Memory usage before: 218&459; after: 149&458; still untouched: 1473 {internal vertical mode: blank space } {\unvcopy} *************** *** 1066,1070 **** .\hbox(0.0+0.0)x23.0 ! Memory usage before: 118&328; after: 102&328; still untouched: 1474 {restoring \box254=void} {restoring \hoffset=0.0pt} --- 1068,1072 ---- .\hbox(0.0+0.0)x23.0 ! Memory usage before: 118&328; after: 102&328; still untouched: 1473 {restoring \box254=void} {restoring \hoffset=0.0pt} *************** *** 1507,1511 **** ..\glue(\rightskip) 0.0 ! Memory usage before: 990&376; after: 584&370; still untouched: 736 {restoring \box254=void} {restoring \hoffset=0.0pt} --- 1509,1513 ---- ..\glue(\rightskip) 0.0 ! Memory usage before: 990&376; after: 584&370; still untouched: 735 {restoring \box254=void} {restoring \hoffset=0.0pt} *************** *** 1975,1978 **** --- 1977,1981 ---- {\uppercase} {the letter A} + Missing character: There is no [ in font trip! {blank space } ) *************** *** 2482,2485 **** --- 2485,2505 ---- .etc. + ! Missing number, treated as zero. + + = + l.253 ...aysize* \global\setbox= + + A number should have been here; I inserted `0'. + (If you can't figure out why I needed to see a number, + look up `weird error' in the index to The TeXbook.) + + ! Improper \setbox. + = + + l.253 ...aysize* \global\setbox= + + Sorry, \setbox is not allowed after \halign in a display, + or between \accent and an accented character. + ! Missing $$ inserted. *************** *** 3946,3949 **** --- 3966,3971 ---- {\hangindent} {\parfillskip} + {\fontdimen} + {\the} {\the} {the character 0} *************** *** 4296,4301 **** 0. l.320 \show\botmark ! {\lineskiplimit} --- 4318,4326 ---- 0. l.320 \show\botmark ! \catcode`;13\def;{\setbox`; } + {\catcode} + {\def} + {blank space } {\lineskiplimit} *************** *** 4317,4320 **** --- 4342,4355 ---- \space -> + + ;->\setbox `; + ! Improper \setbox. + + \char + l.322 ...2 \def\^^M{\ } ; \char + '101 + Sorry, \setbox is not allowed after \halign in a display, + or between \accent and an accented character. + {the letter A} {\ } *************** *** 4467,4471 **** ..\glue 10.0 minus 10.0 ! Memory usage before: 651&426; after: 417&412; still untouched: 175 {restoring \box254=void} {restoring \hoffset=0.0pt} --- 4502,4506 ---- ..\glue 10.0 minus 10.0 ! Memory usage before: 651&432; after: 417&418; still untouched: 175 {restoring \box254=void} {restoring \hoffset=0.0pt} *************** *** 4789,4793 **** .\mark{b} ! Memory usage before: 776&452; after: 464&446; still untouched: 175 {restoring \box254=void} {restoring \hoffset=0.0pt} --- 4824,4828 ---- .\mark{b} ! Memory usage before: 776&458; after: 464&452; still untouched: 175 {restoring \box254=void} {restoring \hoffset=0.0pt} *************** *** 4798,4804 **** {vertical mode: \newlinechar} {\global} ! ! You can ! t use a prefix with `\unskip ! . \unskip --- 4833,4838 ---- {vertical mode: \newlinechar} {\global} ! ! ! ou can't use a prefix with `\unskip'. \unskip *************** *** 4805,4814 **** l.345 ...inechar` \global\unskip ! \newlinechar\lastpenalty\unpe... ! I ! ll pretend you didn ! t say \long or \outer or \global. {\unskip} {\newlinechar} {\unpenalty} --- 4839,4854 ---- l.345 ...inechar` \global\unskip ! \show^^ ! \newlinechar\lastpena... ! I'll pretend you didn't say \long or \outer or \global. {\unskip} + {\show} + > the character ^^Y. + l.345 ... + \global\unskip\show^^ + + \newlinechar\lastpenalty\unpe... + {\newlinechar} {\unpenalty} *************** *** 4815,4819 **** ! You can't use `\unpenalty' in vertical mode. l.345 ...r\lastpenalty\unpenalty ! \unkern\lastbox Sorry...I usually can't take things from the current page. Perhaps you can make the output routine do it. --- 4855,4859 ---- ! You can't use `\unpenalty' in vertical mode. l.345 ...r\lastpenalty\unpenalty ! \unkern Sorry...I usually can't take things from the current page. Perhaps you can make the output routine do it. *************** *** 4822,4826 **** ! You can't use `\unkern' in vertical mode. l.345 ...enalty\unpenalty\unkern ! \lastbox Sorry...I usually can't take things from the current page. Try `I\kern-\lastkern' instead. --- 4862,4866 ---- ! You can't use `\unkern' in vertical mode. l.345 ...enalty\unpenalty\unkern ! Sorry...I usually can't take things from the current page. Try `I\kern-\lastkern' instead. *************** *** 4828,4833 **** {\lastbox} ! You can't use `\lastbox' in vertical mode. ! l.345 ...npenalty\unkern\lastbox ! Sorry...I usually can't take things from the current page. This \lastbox will therefore be void. --- 4868,4873 ---- {\lastbox} ! You can't use `\lastbox' in vertical mode. ! l.346 \lastbox ! \penalty5\message{\the\lastpenalty\the\newlinec... Sorry...I usually can't take things from the current page. This \lastbox will therefore be void. *************** *** 6055,6060 **** Continue, and I'll forget that it ever happened. Runaway definition? ! -> }{{\outputpenalty }} [ ! Forbidden control sequence found while scanning definition of \a. --- 6095,6117 ---- Continue, and I'll forget that it ever happened. + {end-group character }} + {\show} + > \a=macro: + -> . + \loop ...\read 0to \a }\show \a + \fi \loop + l.415 ...er\def\uppercase{}\loop + }\else\fi + + {\fi} + + \loop ->\ifeof 0\let \loop =\relax \else {\global \read 0to \a }\show \a + \fi \loop + {\ifeof} + {false} + {begin-group character {} + {\global} Runaway definition? ! ->[ ! Forbidden control sequence found while scanning definition of \a. *************** *** 6061,6065 **** } [\uppercase ! {mmmmmmmmmm} \loop ... {\global \read 0to \a }\show \a \fi \loop --- 6118,6122 ---- } [\uppercase ! {mmmmmmmmmm}[ \loop ... {\global \read 0to \a }\show \a \fi \loop *************** *** 6072,6076 **** Runaway definition? ! -> }{{\outputpenalty }} [ }{mmmmmmmmmm} ! File ended within \read. --- 6129,6133 ---- Runaway definition? ! ->[ }{mmmmmmmmmm}[ ! File ended within \read. *************** *** 6085,6089 **** {\show} > \a=macro: ! -> }{{\outputpenalty }} [ }{mmmmmmmmmm} \par . \loop ...\read 0to \a }\show \a \fi \loop --- 6142,6146 ---- {\show} > \a=macro: ! ->[ }{mmmmmmmmmm}[ \par . \loop ...\read 0to \a }\show \a \fi \loop *************** *** 6533,6537 **** ] ! Memory usage before: 819&419; after: 720&417; still untouched: 175 ^^M->|relax --- 6590,6594 ---- ] ! Memory usage before: 819&425; after: 720&423; still untouched: 175 ^^M->|relax *************** *** 6928,6932 **** .|glue(|tabskip) 0.0154 minus 3.21002 |glue(|lineskip) 0.0 plus 40.0 ! |hbox(3545.60136+140.80052)x2070.27946 .|glue 6.0 plus 4.0 minus 44.0 .|mathon --- 6985,6989 ---- .|glue(|tabskip) 0.0154 minus 3.21002 |glue(|lineskip) 0.0 plus 40.0 ! |hbox(3545.60136+140.80052)x2070.00168 .|glue 6.0 plus 4.0 minus 44.0 .|mathon *************** *** 6939,6943 **** ...|kern268.80098 ...|hbox(0.0+0.0)x0.0 ! .|glue(|thinmuskip) 0.27777 plus 2.0fill minus 0.83331 .|hbox(109.40036+95.40038)x1446.60138 ..|vbox(-1.00002+26.9999)x7.0, shifted -20.99995 --- 6996,7000 ---- ...|kern268.80098 ...|hbox(0.0+0.0)x0.0 ! .|glue(|thinmuskip) -0.00002 plus 2.0fill minus -0.00005 .|hbox(109.40036+95.40038)x1446.60138 ..|vbox(-1.00002+26.9999)x7.0, shifted -20.99995 *************** *** 7035,7039 **** {|showbox} > \box9= ! |hbox(19.6+1.0)x101.26778 .|vbox(17.0+1.0)x100.0 ..|hbox(7.0+1.0)x100.0, glue set 0.85294 --- 7092,7096 ---- {|showbox} > \box9= ! |hbox(19.6+1.0)x100.98999 .|vbox(17.0+1.0)x100.0 ..|hbox(7.0+1.0)x100.0, glue set 0.85294 *************** *** 7077,7081 **** ....|glue 0.0 plus 1.0fil minus 1.0fil ...|glue 0.0 plus 1.0fil minus 1.0fil ! .|glue(|thinmuskip) 0.27777 plus 2.0fill minus 0.83331 .|hbox(0.0+0.0)x0.0 .|mathoff --- 7134,7138 ---- ....|glue 0.0 plus 1.0fil minus 1.0fil ...|glue 0.0 plus 1.0fil minus 1.0fil ! .|glue(|thinmuskip) -0.00002 plus 2.0fill minus -0.00005 .|hbox(0.0+0.0)x0.0 .|mathoff *************** *** 7094,7098 **** .0 b=0 p=-10001 c=-10001# [-2.2.-1118806.0.11.196608.327680.1572864.1073741823] ! Memory usage before: 895&430; after: 290&411; still untouched: 175 {|deadcycles} {end-group character }} --- 7151,7155 ---- .0 b=0 p=-10001 c=-10001# [-2.2.-1118806.0.11.196608.327680.1572864.1073741823] ! Memory usage before: 895&436; after: 290&417; still untouched: 175 {|deadcycles} {end-group character }} *************** *** 7227,7231 **** unbal ! Memory usage before: 334&422; after: 292&409; still untouched: 175 {vertical mode: end} ) --- 7284,7288 ---- unbal ! Memory usage before: 334&428; after: 292&415; still untouched: 175 {vertical mode: end} ) *************** *** 7235,7240 **** (end occurred when iftrue on line 413 was incomplete) Here is how much of TeX's memory you used: ! 49 strings out of 1681 ! 275 string characters out of 8567 2825 words of memory out of 3000 370 multiletter control sequences out of 2100 --- 7292,7297 ---- (end occurred when iftrue on line 413 was incomplete) Here is how much of TeX's memory you used: ! 47 strings out of 1682 ! 267 string characters out of 8480 2825 words of memory out of 3000 370 multiletter control sequences out of 2100 diff -r -c2 oldtex/dist/tex/trip.tex newtex/dist/tex/trip.tex *** oldtex/dist/tex/trip.tex Mon Mar 16 11:13:15 1992 --- newtex/dist/tex/trip.tex Sat Jan 25 21:53:47 1992 *************** *** 95,99 **** \write10{} % writing three lines on tripos.tex (the first line is empty) \write10{\uppercase{\number{\outputpenalty}}} % 0{\outputpenalty} + error ! \write10{[\uppercase{\romannumeral-\the\outputpenalty}} % "mmmmmmmmmm" (-10000) \vsize 2000pt \vbadness=1 --- 95,99 ---- \write10{} % writing three lines on tripos.tex (the first line is empty) \write10{\uppercase{\number{\outputpenalty}}} % 0{\outputpenalty} + error ! \write10{[\uppercase{\romannumeral-\the\outputpenalty}[} % "mmmmmmmmmm" (-10000) \vsize 2000pt \vbadness=1 *************** *** 143,147 **** % so the third insertion will be split \kern-50pt ! A\hfill\vadjust{\special{\the\prevdepth}\penalty-5000}% \penalty-1000000000 % forces line break in paragraph % this is not the end of paragraph --- 143,147 ---- % so the third insertion will be split \kern-50pt ! A\hfill\vadjust{\newlinechar128\special{^^80\the\prevdepth}\penalty-5000}% \penalty-1000000000 % forces line break in paragraph % this is not the end of paragraph *************** *** 251,255 **** \global\count6=\displayindent \predisplaypenalty=101 ! \global\postdisplaypenalty-\predisplaysize* \eqno % another error (actually causes two error messages and inserts $$) \looseness-2 --- 251,255 ---- \global\count6=\displayindent \predisplaypenalty=101 ! \global\postdisplaypenalty-\predisplaysize* \global\setbox= \eqno % another error (actually causes two error messages and inserts $$) \looseness-2 *************** *** 299,303 **** \hangindent1pt\par\showthe\hangindent\hangindent 254cm ! \parfillskip 0pt plus 100pt \the\fam % begins a paragraph, but there's no 0 in the font A \char'202$$\global\count8=\predisplaysize\leqno\kern1009pt$\par --- 299,303 ---- \hangindent1pt\par\showthe\hangindent\hangindent 254cm ! \parfillskip 0pt plus 100pt \fontdimen6\the\scriptfont2=-19sp \the\fam % begins a paragraph, but there's no 0 in the font A \char'202$$\global\count8=\predisplaysize\leqno\kern1009pt$\par *************** *** 318,324 **** \unskip\vskip-\lastskip\kern\lastkern\penalty\lastkern\showbox22} \showbox22\kern3pt\message{\the\lastkern}\unkern ! \show\botmark \lineskiplimit-0.9999 \space\df\space\count9 0 ! \vbox\space to 11pt{\accent\x\space\accent\space"42 \def\^^M{\ } \char'101 A\ \fontdimen 4 \trip = 88 pt\ \spaceskip 2 pt \ \vskip 10pt minus 10pt} --- 318,324 ---- \unskip\vskip-\lastskip\kern\lastkern\penalty\lastkern\showbox22} \showbox22\kern3pt\message{\the\lastkern}\unkern ! \show\botmark \catcode`;13\def;{\setbox`; } \lineskiplimit-0.9999 \space\df\space\count9 0 ! \vbox\space to 11pt{\accent\x\space\accent\space"42 \def\^^M{\ } ; \char'101 A\ \fontdimen 4 \trip = 88 pt\ \spaceskip 2 pt \ \vskip 10pt minus 10pt} *************** *** 343,348 **** \errmessage{\prevdepth=\the\prevdepth} \penalty-88888 % end alignment test, now miscellaneous error messages ! \newlinechar`'\global\unskip\newlinechar\lastpenalty\unpenalty\unkern\lastbox ! \penalty5\message{\the\lastpenalty\the\newlinechar}\textfont16=\relax \outer\def{}? \dimen5=-'7777777777sp\showthe\dimen5 % this should be OK --- 343,348 ---- \errmessage{\prevdepth=\the\prevdepth} \penalty-88888 % end alignment test, now miscellaneous error messages ! \newlinechar`Y\global\unskip\show^^Y\newlinechar\lastpenalty\unpenalty\unkern ! \lastbox\penalty5\message{\the\lastpenalty\the\newlinechar}\textfont16=\relax \outer\def{}? \dimen5=-'7777777777sp\showthe\dimen5 % this should be OK diff -r -c2 oldtex/dist/tex/trip.typ newtex/dist/tex/trip.typ *** oldtex/dist/tex/trip.typ Mon Mar 16 11:13:16 1992 --- newtex/dist/tex/trip.typ Sat Jan 25 22:16:02 1992 *************** *** 7,11 **** numerator/denominator=25400000/473628672 magnification=2000; 0.00003052 pixels per DVI unit ! ' TeX output 1991.03.26:1803' 42: beginning of page 0.0.0.0.11.0.0.0.0.0 --- 7,11 ---- numerator/denominator=25400000/473628672 magnification=2000; 0.00003052 pixels per DVI unit ! ' TeX output 1992.01.25:2209' 42: beginning of page 0.0.0.0.11.0.0.0.0.0 *************** *** 220,563 **** 516: push 517: down4 651689984 ! 522: xxx '-1000.0pt' ! 533: down3 655360 ! 537: push ! 538: fntnum0 ! 539: setchar65 ! [A] ! 540: down3 65536 ! 544: setrule height 524288, width 327680 ! 553: pop 554: pop ! 555: eop ! 556: beginning of page -333.0.0.0.11.0.0.0.0.0 ! 601: eop ! 602: beginning of page -2.0.0.0.11.0.0.0.0.0 ! 647: eop ! 648: beginning of page -2.0.0.0.11.0.0.0.0.0 ! 693: down4 1072300032 ! 698: push 699: push 700: push ! 701: down3 -1441792 ! 705: down3 1441792 ! 709: pop 710: pop ! 711: push 712: push ! 713: down3 -1441792 ! 717: down3 1310720 ! 721: pop 722: pop ! 723: push 724: push ! 725: down3 -1441792 ! 729: down3 1310720 ! 733: pop 734: pop 735: pop ! 736: y3 655360 ! 740: push ! 741: right3 393217 ! [ ] ! 745: fntnum0 ! 746: setchar65 ! 747: right3 131072 ! 751: setchar66 [A B] ! 752: pop ! 753: y0 655360 ! 754: push ! 755: right3 196609 ! 759: setchar67 [ C] ! 760: push ! 761: putrule height 26214, width 393216 ! 770: pop 771: pop ! 772: eop ! 773: beginning of page -2.0.0.0.11.0.0.0.0.0 ! 818: down4 1065418752 ! 823: push ! 824: right3 196609 ! [ ] ! 828: fntnum0 ! 829: setchar65 ! 830: right3 4653056 ! 834: setchar47 ! 835: right3 65536 ! 839: setchar65 ! 840: w3 131072 ! 844: setchar65 ! 845: w0 131072 ! 846: setchar65 [A /A A A] ! 847: set1 130 ! 849: set1 130 ! 851: setchar66 ! 852: setchar47 [B/] ! 853: pop ! 854: y3 589824 ! 858: push ! 859: right3 5898241 ! 863: setchar65 ! 864: w3 131072 ! 868: setchar65 ! 869: w0 131072 ! 870: setchar65 [ A A A] ! 871: pop ! 872: down3 524288 ! 876: push ! 877: right3 5898241 ! 881: setchar65 ! 882: w3 131072 ! 886: setchar65 ! 887: w0 131072 ! 888: setchar65 [ A A A] ! 889: pop ! 890: y0 589824 ! 891: push ! 892: right3 5701633 ! 896: setchar65 ! 897: w3 131072 ! 901: setchar65 ! 902: w0 131072 ! 903: setchar65 ! 904: setchar66 [ A A AB] ! 905: pop ! 906: y0 589824 ! 907: push ! 908: right3 5898241 ! 912: setchar65 ! 913: w3 131072 ! 917: setchar65 ! 918: w0 131072 ! 919: setchar65 [ A A A] ! 920: pop ! 921: y0 589824 ! 922: push ! 923: right1 1 ! 925: setchar65 ! 926: right3 131072 ! 930: setchar66 ! 931: right3 262144 ! 935: setchar97 ! 936: setchar66 [A B aB] ! 937: pop ! 938: down3 2031616 ! 942: push ! 943: right3 196609 ! 947: setchar65 [ A] ! 948: pop ! 949: y3 655360 ! 953: push ! 954: right3 262144 ! 958: setchar45 [ -] ! 959: pop ! 960: y0 655360 ! 961: push ! 962: right3 196609 ! 966: setchar67 [ C] ! 967: pop ! 968: y0 655360 ! 969: push ! 970: right3 196609 ! 974: setchar67 [ C] ! 975: pop ! 976: y0 655360 977: y0 655360 ! 978: push ! 979: right3 6422529 ! 983: setchar65 [ A] ! 984: pop ! 985: eop ! 986: beginning of page -2.0.0.0.11.0.327680.0.0.0 ! 1031: down4 1071448064 ! 1036: push ! 1037: right3 262145 [ ] ! 1041: fntnum0 ! 1042: setchar45 [-] ! 1043: pop ! 1044: y3 655360 ! 1048: push ! 1049: right3 327681 ! 1053: setchar45 1054: setchar45 [ --] ! 1055: pop ! 1056: y0 655360 ! 1057: push ! 1058: right3 393217 ! 1062: setchar45 1063: setchar45 ! 1064: right3 65536 ! 1068: setchar65 [ --A] ! 1069: pop ! 1070: down3 851968 ! 1074: eop ! 1075: beginning of page -2.0.0.0.11.0.327680.0.0.0 ! 1120: down4 639342208 ! 1125: push 1126: push 1127: push 1128: push ! 1129: down3 -602931 ! 1133: push ! 1134: right3 740559 ! [ ] ! 1138: fntdef1 1: trip---loaded at size 327680 DVI units ! 1158: fntnum1 ! 1159: setchar65 ! [A] ! 1160: pop ! 1161: right3 740559 ! [ ] ! 1165: down3 176947 ! 1169: putrule height 65536, width 98304 ! 1178: down3 635699 ! 1182: push ! 1183: setchar65 [A] - 1184: pop 1185: pop 1186: pop ! 1187: push ! 1188: right3 845417 ! [ ] ! 1192: down3 -262144 ! 1196: fntnum0 ! 1197: setchar98 [b] - 1198: pop 1199: pop ! 1200: right3 1078433 ! 1204: setchar47 ! 1205: right3 54612 ! 1209: setchar65 ! 1210: right2 -7280 [ /A] ! 1213: fntnum1 ! 1214: setchar45 1215: setchar45 ! 1216: right3 -72816 [--] ! 1220: fntnum0 ! 1221: setchar65 ! 1222: w3 36408 ! 1226: setchar47 ! 1227: w0 36408 ! 1228: setchar65 [A/A] ! 1229: pop ! 1230: down3 4912743 ! 1234: push 1235: push 1236: push ! 1237: right3 983045 [ ] ! 1241: fntdef1 2: trip---loaded at size 1310720 DVI units (this font is magnified 400%) ! 1261: fntnum2 ! 1262: setchar45 [-] ! 1263: pop ! 1264: push ! 1265: right3 425989 ! [ ] ! 1269: fntnum0 ! 1270: setchar65 ! [A] ! 1271: push ! 1272: down3 -530842 ! 1276: push 1277: push ! 1278: right3 65536 ! 1282: down3 -131072 ! 1286: setchar97 [a] ! 1287: pop ! 1288: right3 196608 ! 1292: setchar47 [ /] - 1293: pop 1294: pop 1295: pop 1296: pop ! 1297: push ! 1298: right3 818550 ! [ ] ! 1302: down3 -1557300 ! 1306: putrule height 65536, width 984062 ! 1315: down3 1557300 ! 1319: push 1320: push ! 1321: down3 -543949 ! 1325: fntnum1 ! 1326: setchar65 ! [A] ! 1327: pop ! 1328: right3 97649 ! [ ] ! 1332: fntnum0 ! 1333: setchar65 ! [A] ! 1334: push ! 1335: down3 268698 ! 1339: setchar45 [-] ! 1340: pop ! 1341: push ! 1342: right3 -310131 ! 1346: down3 -1098548 ! 1350: fntnum1 ! 1351: setchar65 ! 1352: right3 98304 ! 1356: setchar66 [A B] ! 1357: push ! 1358: down3 471859 ! 1362: push ! 1363: right3 140175 ! [ ] ! 1367: fntnum2 ! 1368: set1 130 ! 1370: pop ! 1371: down3 458754 ! 1375: push 1376: push ! 1377: down3 -65535 ! 1381: setchar65 ! [A] ! 1382: pop ! 1383: right3 411421 ! 1387: setchar65 [ A] ! 1388: push ! 1389: down3 -131072 ! 1393: push ! 1394: right3 -65536 ! 1398: setchar97 [a] - 1399: pop 1400: pop 1401: pop --- 220,562 ---- 516: push 517: down4 651689984 ! 522: xxx '?-1000.0pt' non-ASCII character in xxx command! ! 534: down3 655360 ! 538: push ! 539: fntnum0 ! 540: setchar65 ! [A] ! 541: down3 65536 ! 545: setrule height 524288, width 327680 554: pop ! 555: pop ! 556: eop ! 557: beginning of page -333.0.0.0.11.0.0.0.0.0 ! 602: eop ! 603: beginning of page -2.0.0.0.11.0.0.0.0.0 ! 648: eop ! 649: beginning of page -2.0.0.0.11.0.0.0.0.0 ! 694: down4 1072300032 699: push 700: push ! 701: push ! 702: down3 -1441792 ! 706: down3 1441792 710: pop ! 711: pop 712: push ! 713: push ! 714: down3 -1441792 ! 718: down3 1310720 722: pop ! 723: pop 724: push ! 725: push ! 726: down3 -1441792 ! 730: down3 1310720 734: pop 735: pop ! 736: pop ! 737: y3 655360 ! 741: push ! 742: right3 393217 ! [ ] ! 746: fntnum0 ! 747: setchar65 ! 748: right3 131072 ! 752: setchar66 [A B] ! 753: pop ! 754: y0 655360 ! 755: push ! 756: right3 196609 ! 760: setchar67 [ C] ! 761: push ! 762: putrule height 26214, width 393216 771: pop ! 772: pop ! 773: eop ! 774: beginning of page -2.0.0.0.11.0.0.0.0.0 ! 819: down4 1065418752 ! 824: push ! 825: right3 196609 ! [ ] ! 829: fntnum0 ! 830: setchar65 ! 831: right3 4653056 ! 835: setchar47 ! 836: right3 65536 ! 840: setchar65 ! 841: w3 131072 ! 845: setchar65 ! 846: w0 131072 ! 847: setchar65 [A /A A A] ! 848: set1 130 ! 850: set1 130 ! 852: setchar66 ! 853: setchar47 [B/] ! 854: pop ! 855: y3 589824 ! 859: push ! 860: right3 5898241 ! 864: setchar65 ! 865: w3 131072 ! 869: setchar65 ! 870: w0 131072 ! 871: setchar65 [ A A A] ! 872: pop ! 873: down3 524288 ! 877: push ! 878: right3 5898241 ! 882: setchar65 ! 883: w3 131072 ! 887: setchar65 ! 888: w0 131072 ! 889: setchar65 [ A A A] ! 890: pop ! 891: y0 589824 ! 892: push ! 893: right3 5701633 ! 897: setchar65 ! 898: w3 131072 ! 902: setchar65 ! 903: w0 131072 ! 904: setchar65 ! 905: setchar66 [ A A AB] ! 906: pop ! 907: y0 589824 ! 908: push ! 909: right3 5898241 ! 913: setchar65 ! 914: w3 131072 ! 918: setchar65 ! 919: w0 131072 ! 920: setchar65 [ A A A] ! 921: pop ! 922: y0 589824 ! 923: push ! 924: right1 1 ! 926: setchar65 ! 927: right3 131072 ! 931: setchar66 ! 932: right3 262144 ! 936: setchar97 ! 937: setchar66 [A B aB] ! 938: pop ! 939: down3 2031616 ! 943: push ! 944: right3 196609 ! 948: setchar65 [ A] ! 949: pop ! 950: y3 655360 ! 954: push ! 955: right3 262144 ! 959: setchar45 [ -] ! 960: pop ! 961: y0 655360 ! 962: push ! 963: right3 196609 ! 967: setchar67 [ C] ! 968: pop ! 969: y0 655360 ! 970: push ! 971: right3 196609 ! 975: setchar67 [ C] ! 976: pop 977: y0 655360 ! 978: y0 655360 ! 979: push ! 980: right3 6422529 ! 984: setchar65 [ A] ! 985: pop ! 986: eop ! 987: beginning of page -2.0.0.0.11.0.327680.0.0.0 ! 1032: down4 1071448064 ! 1037: push ! 1038: right3 262145 [ ] ! 1042: fntnum0 ! 1043: setchar45 [-] ! 1044: pop ! 1045: y3 655360 ! 1049: push ! 1050: right3 327681 1054: setchar45 + 1055: setchar45 [ --] ! 1056: pop ! 1057: y0 655360 ! 1058: push ! 1059: right3 393217 1063: setchar45 ! 1064: setchar45 ! 1065: right3 65536 ! 1069: setchar65 [ --A] ! 1070: pop ! 1071: down3 851968 ! 1075: eop ! 1076: beginning of page -2.0.0.0.11.0.327680.0.0.0 ! 1121: down4 639342208 1126: push 1127: push 1128: push ! 1129: push ! 1130: down3 -602931 ! 1134: push ! 1135: right3 740559 ! [ ] ! 1139: fntdef1 1: trip---loaded at size 327680 DVI units ! 1159: fntnum1 ! 1160: setchar65 ! [A] ! 1161: pop ! 1162: right3 740559 ! [ ] ! 1166: down3 176947 ! 1170: putrule height 65536, width 98304 ! 1179: down3 635699 ! 1183: push ! 1184: setchar65 [A] 1185: pop 1186: pop ! 1187: pop ! 1188: push ! 1189: right3 845417 ! [ ] ! 1193: down3 -262144 ! 1197: fntnum0 ! 1198: setchar98 [b] 1199: pop ! 1200: pop ! 1201: right3 1078433 ! 1205: setchar47 ! 1206: right3 54612 ! 1210: setchar65 ! 1211: right2 -7280 [ /A] ! 1214: fntnum1 1215: setchar45 ! 1216: setchar45 ! 1217: right3 -72816 [--] ! 1221: fntnum0 ! 1222: setchar65 ! 1223: w3 36408 ! 1227: setchar47 ! 1228: w0 36408 ! 1229: setchar65 [A/A] ! 1230: pop ! 1231: down3 4912743 1235: push 1236: push ! 1237: push ! 1238: right3 983045 [ ] ! 1242: fntdef1 2: trip---loaded at size 1310720 DVI units (this font is magnified 400%) ! 1262: fntnum2 ! 1263: setchar45 [-] ! 1264: pop ! 1265: push ! 1266: right3 425989 ! [ ] ! 1270: fntnum0 ! 1271: setchar65 ! [A] ! 1272: push ! 1273: down3 -530842 1277: push ! 1278: push ! 1279: right3 65536 ! 1283: down3 -131072 ! 1287: setchar97 [a] ! 1288: pop ! 1289: right3 196608 ! 1293: setchar47 [ /] 1294: pop 1295: pop 1296: pop ! 1297: pop ! 1298: push ! 1299: right3 818550 ! [ ] ! 1303: down3 -1557300 ! 1307: putrule height 65536, width 984062 ! 1316: down3 1557300 1320: push ! 1321: push ! 1322: down3 -543949 ! 1326: fntnum1 ! 1327: setchar65 ! [A] ! 1328: pop ! 1329: right3 97649 ! [ ] ! 1333: fntnum0 ! 1334: setchar65 ! [A] ! 1335: push ! 1336: down3 268698 ! 1340: setchar45 [-] ! 1341: pop ! 1342: push ! 1343: right3 -310131 ! 1347: down3 -1098548 ! 1351: fntnum1 ! 1352: setchar65 ! 1353: right3 98304 ! 1357: setchar66 [A B] ! 1358: push ! 1359: down3 471859 ! 1363: push ! 1364: right3 140175 ! [ ] ! 1368: fntnum2 ! 1369: set1 130 ! 1371: pop ! 1372: down3 458754 1376: push ! 1377: push ! 1378: down3 -65535 ! 1382: setchar65 ! [A] ! 1383: pop ! 1384: right3 411421 ! 1388: setchar65 [ A] ! 1389: push ! 1390: down3 -131072 ! 1394: push ! 1395: right3 -65536 ! 1399: setchar97 [a] 1400: pop 1401: pop *************** *** 566,626 **** 1404: pop 1405: pop ! 1406: push ! 1407: down3 -1179648 ! 1411: push ! 1412: right3 1798972 [ ] ! 1416: fntnum1 ! 1417: setchar67 [C] ! 1418: pop ! 1419: down3 1179648 ! 1423: push 1424: push ! 1425: right3 1766204 [ ] ! 1429: down3 -262144 ! 1433: fntnum0 ! 1434: setchar66 [B] - 1435: pop 1436: pop 1437: pop ! 1438: push 1439: push 1440: push ! 1441: right3 1926404 [ ] ! 1445: down3 -458752 ! 1449: setchar77 [M] - 1450: pop 1451: pop ! 1452: down3 524288 ! 1456: push ! 1457: right3 2057476 [ ] ! 1461: fntnum1 ! 1462: setchar67 [C] - 1463: pop 1464: pop ! 1465: push 1466: push 1467: push ! 1468: right3 2414284 [ ] ! 1472: down3 -3556148 ! 1476: fntnum0 ! 1477: setchar97 [a] ! 1478: pop ! 1479: push ! 1480: right3 2610892 ! [ ] ! 1484: down3 -3556148 ! 1488: putrule height 458752, width 2400948 ! 1497: down3 3556148 ! 1501: push 1502: push 1503: push --- 565,625 ---- 1404: pop 1405: pop ! 1406: pop ! 1407: push ! 1408: down3 -1179648 ! 1412: push ! 1413: right3 1798972 [ ] ! 1417: fntnum1 ! 1418: setchar67 [C] ! 1419: pop ! 1420: down3 1179648 1424: push ! 1425: push ! 1426: right3 1766204 [ ] ! 1430: down3 -262144 ! 1434: fntnum0 ! 1435: setchar66 [B] 1436: pop 1437: pop ! 1438: pop 1439: push 1440: push ! 1441: push ! 1442: right3 1926404 [ ] ! 1446: down3 -458752 ! 1450: setchar77 [M] 1451: pop ! 1452: pop ! 1453: down3 524288 ! 1457: push ! 1458: right3 2057476 [ ] ! 1462: fntnum1 ! 1463: setchar67 [C] 1464: pop ! 1465: pop 1466: push 1467: push ! 1468: push ! 1469: right3 2414284 [ ] ! 1473: down3 -3556148 ! 1477: fntnum0 ! 1478: setchar97 [a] ! 1479: pop ! 1480: push ! 1481: right3 2610892 ! [ ] ! 1485: down3 -3556148 ! 1489: putrule height 458752, width 2400948 ! 1498: down3 3556148 1502: push 1503: push *************** *** 627,709 **** 1504: push 1505: push ! 1506: down3 -1245183 ! 1510: push ! 1511: right2 6554 ! 1514: setchar0 ! 1515: pop ! 1516: y3 65535 ! 1520: push ! 1521: right2 6554 ! 1524: setchar0 ! 1525: pop ! 1526: down3 589824 ! 1530: push ! 1531: right2 6554 ! 1534: setchar65 ! [A] ! 1535: pop ! 1536: down1 -1 ! 1538: push ! 1539: right2 6554 ! 1542: setchar0 ! 1543: pop ! 1544: y0 65535 ! 1545: push ! 1546: right2 6554 ! 1549: setchar0 ! 1550: pop ! 1551: down3 655360 ! 1555: push ! 1556: right2 6554 ! 1559: setchar66 [B] - 1560: pop 1561: pop ! 1562: push 1563: push 1564: push 1565: push ! 1566: down3 -1425409 ! 1570: push ! 1571: right3 543623 ! [ ] ! 1575: fntnum2 ! 1576: setchar65 ! [A] ! 1577: pop ! 1578: down3 2451048 ! 1582: push ! 1583: right3 471860 ! [ ] ! 1587: fntnum0 ! 1588: setchar65 ! [A] ! 1589: push ! 1590: down3 -530842 ! 1594: push ! 1595: right3 65536 ! 1599: fntnum1 ! 1600: setchar45 [-] ! 1601: pop ! 1602: down3 1818625 ! 1606: push 1607: push ! 1608: down3 -638976 ! 1612: push ! 1613: right2 6554 ! 1616: fntnum2 ! 1617: setchar65 ! [A] ! 1618: pop ! 1619: right2 6554 ! 1622: down3 196608 ! 1626: putrule height 32768, width 393217 ! 1635: down3 1081344 ! 1639: push ! 1640: right1 1 ! 1642: setchar66 [B] - 1643: pop 1644: pop 1645: pop --- 626,708 ---- 1504: push 1505: push ! 1506: push ! 1507: down3 -1245183 ! 1511: push ! 1512: right2 6554 ! 1515: setchar0 ! 1516: pop ! 1517: y3 65535 ! 1521: push ! 1522: right2 6554 ! 1525: setchar0 ! 1526: pop ! 1527: down3 589824 ! 1531: push ! 1532: right2 6554 ! 1535: setchar65 ! [A] ! 1536: pop ! 1537: down1 -1 ! 1539: push ! 1540: right2 6554 ! 1543: setchar0 ! 1544: pop ! 1545: y0 65535 ! 1546: push ! 1547: right2 6554 ! 1550: setchar0 ! 1551: pop ! 1552: down3 655360 ! 1556: push ! 1557: right2 6554 ! 1560: setchar66 [B] 1561: pop ! 1562: pop 1563: push 1564: push 1565: push ! 1566: push ! 1567: down3 -1425409 ! 1571: push ! 1572: right3 543623 ! [ ] ! 1576: fntnum2 ! 1577: setchar65 ! [A] ! 1578: pop ! 1579: down3 2451048 ! 1583: push ! 1584: right3 471860 ! [ ] ! 1588: fntnum0 ! 1589: setchar65 ! [A] ! 1590: push ! 1591: down3 -530842 ! 1595: push ! 1596: right3 65536 ! 1600: fntnum1 ! 1601: setchar45 [-] ! 1602: pop ! 1603: down3 1818625 1607: push ! 1608: push ! 1609: down3 -638976 ! 1613: push ! 1614: right2 6554 ! 1617: fntnum2 ! 1618: setchar65 ! [A] ! 1619: pop ! 1620: right2 6554 ! 1623: down3 196608 ! 1627: putrule height 32768, width 393217 ! 1636: down3 1081344 ! 1640: push ! 1641: right1 1 ! 1643: setchar66 [B] 1644: pop 1645: pop *************** *** 712,768 **** 1648: pop 1649: pop ! 1650: right3 465306 [ ] ! 1654: down3 5600055 ! 1658: putrule height 596378, width 549850 ! 1667: pop 1668: pop ! 1669: push ! 1670: down3 -2323253 ! 1674: push ! 1675: right3 1015156 ! 1679: setchar98 [ b] ! 1680: pop ! 1681: down4 8545900 ! 1686: push 1687: push ! 1688: right3 1015156 [ ] ! 1692: down3 -65536 ! 1696: setchar98 [b] ! 1697: pop ! 1698: push ! 1699: down3 -786432 ! 1703: push ! 1704: right3 1590412 [ ] ! 1708: fntnum0 ! 1709: setchar66 [B] ! 1710: pop ! 1711: right3 1408372 [ ] ! 1715: down3 393216 ! 1719: putrule height 131072, width 378648 ! 1728: pop 1729: pop 1730: pop ! 1731: push ! 1732: right3 1792919 ! [ ] ! 1736: down3 -65535 ! 1740: fntnum2 ! 1741: setchar97 [a] - 1742: pop 1743: pop ! 1744: right3 2204340 [ ] ! 1748: fntnum0 ! 1749: setchar65 [A] - 1750: pop 1751: pop 1752: pop --- 711,767 ---- 1648: pop 1649: pop ! 1650: pop ! 1651: right3 465306 [ ] ! 1655: down3 5600055 ! 1659: putrule height 596378, width 549850 1668: pop ! 1669: pop ! 1670: push ! 1671: down3 -2323253 ! 1675: push ! 1676: right3 1015156 ! 1680: setchar98 [ b] ! 1681: pop ! 1682: down4 8545900 1687: push ! 1688: push ! 1689: right3 1015156 [ ] ! 1693: down3 -65536 ! 1697: setchar98 [b] ! 1698: pop ! 1699: push ! 1700: down3 -786432 ! 1704: push ! 1705: right3 1590412 [ ] ! 1709: fntnum0 ! 1710: setchar66 [B] ! 1711: pop ! 1712: right3 1408372 [ ] ! 1716: down3 393216 ! 1720: putrule height 131072, width 378648 1729: pop 1730: pop ! 1731: pop ! 1732: push ! 1733: right3 1792919 ! [ ] ! 1737: down3 -65535 ! 1741: fntnum2 ! 1742: setchar97 [a] 1743: pop ! 1744: pop ! 1745: right3 2204340 [ ] ! 1749: fntnum0 ! 1750: setchar65 [A] 1751: pop 1752: pop *************** *** 770,863 **** 1754: pop 1755: pop ! 1756: right3 5011840 [ ] ! 1760: down3 6432362 ! 1764: setrule height 10906014, width 327680 ! 1773: pop ! 1774: down3 7775850 ! 1778: push ! 1779: right3 1292440 ! 1783: setchar45 [ -] ! 1784: fntnum1 ! 1785: setchar98 [b] ! 1786: push ! 1787: setchar65 [A] ! 1788: pop ! 1789: push ! 1790: down3 -537395 ! 1794: push ! 1795: right3 98304 ! [ ] ! 1799: fntnum0 ! 1800: setchar65 ! [A] ! 1801: pop ! 1802: down3 1245184 ! 1806: push ! 1807: right3 98304 ! 1811: fntnum2 ! 1812: setchar66 [B] ! 1813: fntnum0 ! 1814: setchar45 [-] - 1815: pop 1816: pop ! 1817: push 1818: push 1819: push ! 1820: right3 235275 [ ] ! 1824: down3 -163840 ! 1828: putrule height 589824, width 530116 ! 1837: down3 1943143 ! 1841: push 1842: push 1843: push 1844: push ! 1845: right2 6554 ! 1848: down3 -160563 ! 1852: putrule height 596378, width 517008 ! 1861: down3 1382810 ! 1865: push 1866: push 1867: push ! 1868: down3 -262144 ! 1872: setchar98 [b] ! 1873: pop ! 1874: push ! 1875: down3 -720896 ! 1879: push ! 1880: w3 196608 ! 1884: setchar112 ! 1885: setchar116 ! 1886: setchar115 ! 1887: setchar113 ! 1888: setchar116 ! 1889: w0 196608 ! 1890: setchar113 ! 1891: setchar112 ! 1892: right3 -72816 ! 1896: setchar117 [ ptsqt qpu] ! 1897: pop ! 1898: down3 1048576 ! 1902: push ! 1903: right3 245397 [ ] ! 1907: setrule height 589824, width 26214 ! 1916: pop 1917: pop ! 1918: push ! 1919: right3 320400 [ ] ! 1923: down3 -262144 ! 1927: setchar98 [b] - 1928: pop 1929: pop 1930: pop --- 769,862 ---- 1754: pop 1755: pop ! 1756: pop ! 1757: right3 5011840 [ ] ! 1761: down3 6432362 ! 1765: setrule height 10906014, width 327680 ! 1774: pop ! 1775: down3 7775850 ! 1779: push ! 1780: right3 1292440 ! 1784: setchar45 [ -] ! 1785: fntnum1 ! 1786: setchar98 [b] ! 1787: push ! 1788: setchar65 [A] ! 1789: pop ! 1790: push ! 1791: down3 -537395 ! 1795: push ! 1796: right3 98304 ! [ ] ! 1800: fntnum0 ! 1801: setchar65 ! [A] ! 1802: pop ! 1803: down3 1245184 ! 1807: push ! 1808: right3 98304 ! 1812: fntnum2 ! 1813: setchar66 [B] ! 1814: fntnum0 ! 1815: setchar45 [-] 1816: pop ! 1817: pop 1818: push 1819: push ! 1820: push ! 1821: right3 235275 [ ] ! 1825: down3 -163840 ! 1829: putrule height 589824, width 530116 ! 1838: down3 1943143 1842: push 1843: push 1844: push ! 1845: push ! 1846: right2 6554 ! 1849: down3 -160563 ! 1853: putrule height 596378, width 517008 ! 1862: down3 1382810 1866: push 1867: push ! 1868: push ! 1869: down3 -262144 ! 1873: setchar98 [b] ! 1874: pop ! 1875: push ! 1876: down3 -720896 ! 1880: push ! 1881: w3 196608 ! 1885: setchar112 ! 1886: setchar116 ! 1887: setchar115 ! 1888: setchar113 ! 1889: setchar116 ! 1890: w0 196608 ! 1891: setchar113 ! 1892: setchar112 ! 1893: right3 -72816 ! 1897: setchar117 [ ptsqt qpu] ! 1898: pop ! 1899: down3 1048576 ! 1903: push ! 1904: right3 245397 [ ] ! 1908: setrule height 589824, width 26214 1917: pop ! 1918: pop ! 1919: push ! 1920: right3 320400 [ ] ! 1924: down3 -262144 ! 1928: setchar98 [b] 1929: pop 1930: pop *************** *** 870,916 **** 1937: pop 1938: pop ! 1939: eop ! 1940: beginning of page -2.0.0.0.11.0.327680.1572864.0.-1073741823 ! 1985: down4 1070596096 ! 1990: push 1991: push ! 1992: right1 1 [ ] ! 1994: down3 -65536 ! 1998: xxx '-12' ! 2003: pop 2004: pop ! 2005: y3 655360 ! 2009: y0 655360 ! 2010: down3 983040 ! 2014: push 2015: push ! 2016: right3 196609 [ ] ! 2020: fntnum0 ! 2021: setchar65 [A] - 2022: push 2023: push ! 2024: right3 83740 ! 2028: down3 -262144 ! 2032: setchar98 [b] ! 2033: pop ! 2034: push 2035: push ! 2036: right3 286902 [ ] ! 2040: down3 -425984 ! 2044: putrule height 65536, width 104858 ! 2053: down3 688128 ! 2057: push 2058: push ! 2059: down3 -360448 ! 2063: fntnum1 ! 2064: setchar98 [b] - 2065: pop 2066: pop 2067: pop --- 869,915 ---- 1937: pop 1938: pop ! 1939: pop ! 1940: eop ! 1941: beginning of page -2.0.0.0.11.0.327680.1572864.0.-1073741823 ! 1986: down4 1070596096 1991: push ! 1992: push ! 1993: right1 1 [ ] ! 1995: down3 -65536 ! 1999: xxx '-12' 2004: pop ! 2005: pop ! 2006: y3 655360 ! 2010: y0 655360 ! 2011: down3 983040 2015: push ! 2016: push ! 2017: right3 196609 [ ] ! 2021: fntnum0 ! 2022: setchar65 [A] 2023: push ! 2024: push ! 2025: right3 83740 ! 2029: down3 -262144 ! 2033: setchar98 [b] ! 2034: pop 2035: push ! 2036: push ! 2037: right3 286902 [ ] ! 2041: down3 -425984 ! 2045: putrule height 65536, width 104858 ! 2054: down3 688128 2058: push ! 2059: push ! 2060: down3 -360448 ! 2064: fntnum1 ! 2065: setchar98 [b] 2066: pop 2067: pop *************** *** 918,1058 **** 2069: pop 2070: pop ! 2071: push 2072: push ! 2073: down3 589825 ! 2077: push ! 2078: right3 4500861 [ ] ! 2082: fntnum0 ! 2083: setchar97 2084: setchar97 [aa] - 2085: pop 2086: pop 2087: pop 2088: pop ! 2089: eop ! 2090: beginning of page -2.0.0.0.11.0.327680.1572864.1073741823.-1073741823 ! 2135: down4 1072300032 ! 2140: push ! 2141: right3 196609 ! [ ] ! 2145: fntnum0 ! 2146: setchar65 ! 2147: right3 373830 [A ] ! 2151: set1 130 ! 2153: pop ! 2154: down3 655360 ! 2158: eop ! 2159: beginning of page -2.0.0.0.11.196608.327680.1572864.1073741823.0 ! 2204: down4 1071513600 ! 2209: push ! 2210: down3 -262144 ! 2214: push ! 2215: right3 196609 ! [ ] ! 2219: fntnum0 ! 2220: setchar65 ! 2221: w3 131072 ! 2225: setchar65 ! 2226: w0 131072 ! 2227: setchar65 [A A A] ! 2228: down3 65536 ! 2232: setrule height 524288, width 327680 ! 2241: pop ! 2242: y3 655360 ! 2246: push ! 2247: right3 196609 ! 2251: setchar65 ! 2252: right3 196608 ! 2256: setchar65 [ A A] ! 2257: pop ! 2258: down3 131072 ! 2262: push ! 2263: right3 196609 ! 2267: setchar65 ! 2268: w3 131072 ! 2272: setchar65 ! 2273: w0 131072 ! 2274: setchar65 [ A A A] ! 2275: pop ! 2276: y0 655360 ! 2277: push ! 2278: right3 196609 ! 2282: setchar65 ! 2283: right3 196608 ! 2287: setchar65 [ A A] - 2288: pop 2289: pop ! 2290: y3 720896 ! 2294: push ! 2295: down3 -655360 ! 2299: down3 655360 ! 2303: pop ! 2304: down3 655360 ! 2308: push ! 2309: down3 -262144 ! 2313: push ! 2314: right3 196609 ! 2318: setchar65 [ A] - 2319: pop 2320: pop ! 2321: y0 720896 ! 2322: push ! 2323: down2 -32767 ! 2326: push 2327: push ! 2328: right3 198462 [ ] ! 2332: down3 -163841 ! 2336: setchar66 [B] ! 2337: pop ! 2338: right3 558912 ! 2342: setchar65 2343: setchar65 [ AA] - 2344: pop 2345: pop ! 2346: eop ! 2347: beginning of page -2.2.-1118806.0.11.196608.327680.1572864.1073741823.0 ! 2392: down4 1072300032 ! 2397: push 2398: push ! 2399: right3 -104176 [ ] ! 2403: fntnum0 ! 2404: setchar66 [B] ! 2405: push ! 2406: down3 -1310720 ! 2410: y3 655360 ! 2414: y0 655360 ! 2415: push ! 2416: right3 196608 ! 2420: setchar65 [ A] - 2421: pop 2422: pop 2423: pop ! 2424: push 2425: push ! 2426: down3 622591 ! 2430: push ! 2431: down3 458752 ! 2435: push ! 2436: right3 6895421 ! 2440: setchar65 [ A] - 2441: pop 2442: pop 2443: pop --- 917,1057 ---- 2069: pop 2070: pop ! 2071: pop 2072: push ! 2073: push ! 2074: down3 589825 ! 2078: push ! 2079: right3 4500861 [ ] ! 2083: fntnum0 2084: setchar97 + 2085: setchar97 [aa] 2086: pop 2087: pop 2088: pop ! 2089: pop ! 2090: eop ! 2091: beginning of page -2.0.0.0.11.0.327680.1572864.1073741823.-1073741823 ! 2136: down4 1072300032 ! 2141: push ! 2142: right3 196609 ! [ ] ! 2146: fntnum0 ! 2147: setchar65 ! 2148: right3 373830 [A ] ! 2152: set1 130 ! 2154: pop ! 2155: down3 655360 ! 2159: eop ! 2160: beginning of page -2.0.0.0.11.196608.327680.1572864.1073741823.0 ! 2205: down4 1071513600 ! 2210: push ! 2211: down3 -262144 ! 2215: push ! 2216: right3 196609 ! [ ] ! 2220: fntnum0 ! 2221: setchar65 ! 2222: w3 131072 ! 2226: setchar65 ! 2227: w0 131072 ! 2228: setchar65 [A A A] ! 2229: down3 65536 ! 2233: setrule height 524288, width 327680 ! 2242: pop ! 2243: y3 655360 ! 2247: push ! 2248: right3 196609 ! 2252: setchar65 ! 2253: right3 196608 ! 2257: setchar65 [ A A] ! 2258: pop ! 2259: down3 131072 ! 2263: push ! 2264: right3 196609 ! 2268: setchar65 ! 2269: w3 131072 ! 2273: setchar65 ! 2274: w0 131072 ! 2275: setchar65 [ A A A] ! 2276: pop ! 2277: y0 655360 ! 2278: push ! 2279: right3 196609 ! 2283: setchar65 ! 2284: right3 196608 ! 2288: setchar65 [ A A] 2289: pop ! 2290: pop ! 2291: y3 720896 ! 2295: push ! 2296: down3 -655360 ! 2300: down3 655360 ! 2304: pop ! 2305: down3 655360 ! 2309: push ! 2310: down3 -262144 ! 2314: push ! 2315: right3 196609 ! 2319: setchar65 [ A] 2320: pop ! 2321: pop ! 2322: y0 720896 ! 2323: push ! 2324: down2 -32767 2327: push ! 2328: push ! 2329: right3 198462 [ ] ! 2333: down3 -163841 ! 2337: setchar66 [B] ! 2338: pop ! 2339: right3 558912 2343: setchar65 + 2344: setchar65 [ AA] 2345: pop ! 2346: pop ! 2347: eop ! 2348: beginning of page -2.2.-1118806.0.11.196608.327680.1572864.1073741823.0 ! 2393: down4 1072300032 2398: push ! 2399: push ! 2400: right3 -104176 [ ] ! 2404: fntnum0 ! 2405: setchar66 [B] ! 2406: push ! 2407: down3 -1310720 ! 2411: y3 655360 ! 2415: y0 655360 ! 2416: push ! 2417: right3 196608 ! 2421: setchar65 [ A] 2422: pop 2423: pop ! 2424: pop 2425: push ! 2426: push ! 2427: down3 622591 ! 2431: push ! 2432: down3 458752 ! 2436: push ! 2437: right3 6895421 ! 2441: setchar65 [ A] 2442: pop 2443: pop *************** *** 1059,1211 **** 2444: pop 2445: pop ! 2446: y3 655360 ! 2450: push 2451: push ! 2452: right3 420112 ! 2456: setchar98 ! 2457: right4 12176941 ! 2462: setchar98 [ b b] - 2463: pop 2464: pop ! 2465: y0 655360 ! 2466: eop ! 2467: beginning of page -2.2.-1118806.0.11.196608.327680.1572864.1073741823.0 ! 2512: down3 1179648 ! 2516: z3 655360 ! 2520: push 2521: push ! 2522: right3 196608 [ ] ! 2526: down3 -537395 ! 2530: fntnum1 ! 2531: setchar77 [M] - 2532: pop 2533: pop ! 2534: y4 203921760 ! 2539: y0 203921760 ! 2540: push 2541: push ! 2542: right3 196608 [ ] ! 2546: fntnum0 ! 2547: setchar116 2548: setchar116 [tt] - 2549: pop 2550: pop ! 2551: z0 655360 2552: z0 655360 ! 2553: down4 232364531 ! 2558: push 2559: push 2560: push ! 2561: right3 393216 [ ] ! 2565: down4 -17616141 ! 2570: fntdef1 3: trip---loaded at size 134217727 DVI units (this font is magnified 40960%) ! 2590: fntnum3 ! 2591: setchar98 [b] - 2592: pop 2593: pop ! 2594: push 2595: push ! 2596: down3 -1376253 ! 2600: push ! 2601: right4 40676759 ! [ ] ! 2606: fntnum0 ! 2607: setchar0 ! 2608: pop ! 2609: y3 65535 ! 2613: push ! 2614: right4 40676759 ! [ ] ! 2619: setchar0 ! 2620: pop ! 2621: y0 65535 ! 2622: push ! 2623: right4 40676759 ! [ ] ! 2628: setchar0 ! 2629: pop ! 2630: y0 65535 ! 2631: push ! 2632: right4 40676759 ! [ ] ! 2637: setchar0 ! 2638: pop ! 2639: down3 589824 ! 2643: push ! 2644: right4 40676759 ! 2649: setchar65 [ A] ! 2650: pop ! 2651: down1 -1 ! 2653: push ! 2654: right4 40676759 ! [ ] ! 2659: setchar0 ! 2660: pop ! 2661: y0 65535 ! 2662: push ! 2663: right4 40676759 ! [ ] ! 2668: setchar0 ! 2669: pop ! 2670: y0 65535 ! 2671: push ! 2672: right4 40676759 ! [ ] ! 2677: setchar0 ! 2678: pop ! 2679: y0 65535 ! 2680: push ! 2681: right4 40676759 ! [ ] ! 2686: setchar0 ! 2687: pop ! 2688: z0 655360 ! 2689: push ! 2690: right4 40676759 ! 2695: setchar66 [ B] - 2696: pop 2697: pop ! 2698: right4 41135511 ! 2703: setchar65 ! 2704: w3 65536 ! 2708: setchar97 [ Aa] ! 2709: push ! 2710: w0 65536 ! 2711: down4 -20591485 ! 2716: fntnum3 ! 2717: setchar0 ! 2718: pop 2719: pop ! 2720: right4 135481227 [ ] ! 2725: fntnum0 ! 2726: setchar65 [A] ! 2727: pop ! 2728: down4 9227503 ! 2733: z0 655360 2734: z0 655360 2735: z0 655360 2736: z0 655360 ! 2737: down2 26214 ! 2740: putrule height 26214, width 135677835 ! 2749: eop ! 2750: beginning of page -1.2.-1118806.0.11.196608.327680.1572864.1073741823.0 ! 2795: down3 1179648 ! 2799: eop ! Postamble starts at byte 2800. maxv=1073741823, maxh=539754497, maxstackdepth=17, totalpages=16 Font 3: trip scaled 409600 --- 1058,1211 ---- 2444: pop 2445: pop ! 2446: pop ! 2447: y3 655360 2451: push ! 2452: push ! 2453: right3 420112 ! 2457: setchar98 ! 2458: right4 12176941 ! 2463: setchar98 [ b b] 2464: pop ! 2465: pop ! 2466: y0 655360 ! 2467: eop ! 2468: beginning of page -2.2.-1118806.0.11.196608.327680.1572864.1073741823.0 ! 2513: down3 1179648 ! 2517: z3 655360 2521: push ! 2522: push ! 2523: right3 196608 [ ] ! 2527: down3 -537395 ! 2531: fntnum1 ! 2532: setchar77 [M] 2533: pop ! 2534: pop ! 2535: y4 203921760 ! 2540: y0 203921760 2541: push ! 2542: push ! 2543: right3 196608 [ ] ! 2547: fntnum0 2548: setchar116 + 2549: setchar116 [tt] 2550: pop ! 2551: pop 2552: z0 655360 ! 2553: z0 655360 ! 2554: down4 232364531 2559: push 2560: push ! 2561: push ! 2562: right3 393216 [ ] ! 2566: down4 -17616141 ! 2571: fntdef1 3: trip---loaded at size 134217727 DVI units (this font is magnified 40960%) ! 2591: fntnum3 ! 2592: setchar98 [b] 2593: pop ! 2594: pop 2595: push ! 2596: push ! 2597: down3 -1376253 ! 2601: push ! 2602: right4 40658554 ! [ ] ! 2607: fntnum0 ! 2608: setchar0 ! 2609: pop ! 2610: y3 65535 ! 2614: push ! 2615: right4 40658554 ! [ ] ! 2620: setchar0 ! 2621: pop ! 2622: y0 65535 ! 2623: push ! 2624: right4 40658554 ! [ ] ! 2629: setchar0 ! 2630: pop ! 2631: y0 65535 ! 2632: push ! 2633: right4 40658554 ! [ ] ! 2638: setchar0 ! 2639: pop ! 2640: down3 589824 ! 2644: push ! 2645: right4 40658554 ! 2650: setchar65 [ A] ! 2651: pop ! 2652: down1 -1 ! 2654: push ! 2655: right4 40658554 ! [ ] ! 2660: setchar0 ! 2661: pop ! 2662: y0 65535 ! 2663: push ! 2664: right4 40658554 ! [ ] ! 2669: setchar0 ! 2670: pop ! 2671: y0 65535 ! 2672: push ! 2673: right4 40658554 ! [ ] ! 2678: setchar0 ! 2679: pop ! 2680: y0 65535 ! 2681: push ! 2682: right4 40658554 ! [ ] ! 2687: setchar0 ! 2688: pop ! 2689: z0 655360 ! 2690: push ! 2691: right4 40658554 ! 2696: setchar66 [ B] 2697: pop ! 2698: pop ! 2699: right4 41117306 ! 2704: setchar65 ! 2705: w3 65536 ! 2709: setchar97 [ Aa] ! 2710: push ! 2711: w0 65536 ! 2712: down4 -20591485 ! 2717: fntnum3 ! 2718: setchar0 2719: pop ! 2720: pop ! 2721: right4 135463022 [ ] ! 2726: fntnum0 ! 2727: setchar65 [A] ! 2728: pop ! 2729: down4 9227503 2734: z0 655360 2735: z0 655360 2736: z0 655360 ! 2737: z0 655360 ! 2738: down2 26214 ! 2741: putrule height 26214, width 135659630 ! 2750: eop ! 2751: beginning of page -1.2.-1118806.0.11.196608.327680.1572864.1073741823.0 ! 2796: down3 1179648 ! 2800: eop ! Postamble starts at byte 2801. maxv=1073741823, maxh=539754497, maxstackdepth=17, totalpages=16 Font 3: trip scaled 409600 diff -r -c2 oldtex/dist/tex/tripin.log newtex/dist/tex/tripin.log *** oldtex/dist/tex/tripin.log Mon Mar 16 11:13:16 1992 --- newtex/dist/tex/tripin.log Sat Jan 25 22:15:46 1992 *************** *** 1,3 **** ! This is TeX, Version 3.14 (INITEX) 26 MAR 1991 18:02 **\input trip (trip.tex --- 1,3 ---- ! This is TeX, Version 3.141 (INITEX) 25 JAN 1992 22:08 **\input trip (trip.tex *************** *** 10,14 **** I changed this one to zero. ! ! Bad math code (32768). \def --- 10,14 ---- I changed this one to zero. ! ! Bad mathchar (32768). \def *************** *** 15,19 **** l.26 ...\mathchardef\a="8000\def \a{ SCALED 3~2769} ! A numeric math code must be between 0 and 32767. I changed this one to zero. --- 15,19 ---- l.26 ...\mathchardef\a="8000\def \a{ SCALED 3~2769} ! A mathchar number must be between 0 and 32767. I changed this one to zero. *************** *** 449,454 **** ) Beginning to dump on file trip.fmt ! (preloaded format=trip 91.3.26) ! 1319 strings of total length 23433 471 memory locations dumped; current usage is 96&278 341 multiletter control sequences --- 449,454 ---- ) Beginning to dump on file trip.fmt ! (preloaded format=trip 92.1.25) ! 1318 strings of total length 23520 471 memory locations dumped; current usage is 96&278 341 multiletter control sequences diff -r -c2 oldtex/dist/tex/tripman.tex newtex/dist/tex/tripman.tex *** oldtex/dist/tex/tripman.tex Mon Mar 16 11:13:17 1992 --- newtex/dist/tex/tripman.tex Mon Jan 13 15:55:40 1992 *************** *** 240,244 **** \TeX\ font metric files. ! \item{2.} Prepare a version of \.{INITEX}. (This means that your \.{WEB} change file should have {\bf init} and {\bf tini} defined to be null.) The {\bf stat} and {\bf tats} macros should also be null, so that --- 240,244 ---- \TeX\ font metric files. ! \item{2.} Prepare a special version of \.{INITEX}. (This means that your \.{WEB} change file should have {\bf init} and {\bf tini} defined to be null.) The {\bf stat} and {\bf tats} macros should also be null, so that *************** *** 252,256 **** use the ``normal'' settings of other parameters found in \.{TEX.WEB} (e.g., $\\{stack\_size}=200$, $\\{font\_max}=75$, etc.), since these show ! up in a few lines of the test output. \item{3.} Run the \.{INITEX} prepared in step 2. In response to the first --- 252,257 ---- use the ``normal'' settings of other parameters found in \.{TEX.WEB} (e.g., $\\{stack\_size}=200$, $\\{font\_max}=75$, etc.), since these show ! up in a few lines of the test output. Your test version should not ! change the default definition of unprintable characters (\S49 of the program). \item{3.} Run the \.{INITEX} prepared in step 2. In response to the first diff -r -c2 oldtex/dist/tex/tripos.tex newtex/dist/tex/tripos.tex *** oldtex/dist/tex/tripos.tex Mon Mar 16 11:13:17 1992 --- newtex/dist/tex/tripos.tex Sat Jan 25 22:09:20 1992 *************** *** 1,3 **** \uppercase {0{\outputpenalty }} ! [\uppercase {mmmmmmmmmm} --- 1,3 ---- \uppercase {0{\outputpenalty }} ! [\uppercase {mmmmmmmmmm}[ diff -r -c2 oldtex/dist/web/tangle.web newtex/dist/web/tangle.web *** oldtex/dist/web/tangle.web Mon Mar 16 11:15:43 1992 --- newtex/dist/web/tangle.web Thu Sep 19 00:11:31 1991 *************** *** 17,20 **** --- 17,21 ---- % Version 4.1 conforms to ANSI standard for-loop rules (September, 1990). % Version 4.2 fixes stat report if phase one dies (March, 1991). + % Version 4.3 fixes @@ bug in verbatim, catches extra } (September, 1991). % Here is TeX material that gets inserted after \input webmac *************** *** 35,39 **** \centerline{\titlefont The {\ttitlefont TANGLE} processor} \vskip 15pt ! \centerline{(Version 4.2)} \vfill} \pageno=\contentspagenumber \advance\pageno by 1 --- 36,40 ---- \centerline{\titlefont The {\ttitlefont TANGLE} processor} \vskip 15pt ! \centerline{(Version 4.3)} \vfill} \pageno=\contentspagenumber \advance\pageno by 1 *************** *** 64,68 **** is modified. ! @d banner=='This is TANGLE, Version 4.2' @ The program begins with a fairly normal header, made up of pieces that --- 65,69 ---- is modified. ! @d banner=='This is TANGLE, Version 4.3' @ The program begins with a fairly normal header, made up of pieces that *************** *** 2662,2665 **** --- 2663,2669 ---- "{": begin skip_comment; goto restart; end; + "}": begin err_print('! Extra }'); goto restart; + @.Extra \}@> + end; othercases if c>=128 then goto restart {ignore nonstandard characters} else do_nothing *************** *** 2942,2946 **** @ @p procedure scan_repl(@!t:eight_bits); {creates a replacement text} ! label continue, done, found; var a:sixteen_bits; {the current token} @!b:ASCII_code; {a character from the buffer} --- 2946,2950 ---- @ @p procedure scan_repl(@!t:eight_bits); {creates a replacement text} ! label continue, done, found, reswitch; var a:sixteen_bits; {the current token} @!b:ASCII_code; {a character from the buffer} *************** *** 3023,3034 **** begin app_repl(verbatim); buffer[limit+1]:="@@"; ! while buffer[loc]<>"@@" do ! begin app_repl(buffer[loc]); incr(loc); ! if loc=limit then err_print('! Verbatim string didn''t end') --- 3027,3040 ---- begin app_repl(verbatim); buffer[limit+1]:="@@"; ! reswitch: if buffer[loc]="@@" then ! begin if loc=limit then err_print('! Verbatim string didn''t end') diff -r -c2 oldtex/dist/web/weave.web newtex/dist/web/weave.web *** oldtex/dist/web/weave.web Mon Mar 16 11:15:47 1992 --- newtex/dist/web/weave.web Sun Jan 12 00:07:51 1992 *************** *** 25,28 **** --- 25,30 ---- % Version 4.1, for Breitenlohner, avoids English-only output (March, 1990). % Version 4.2 conforms to ANSI standard for-loop rules (September, 1990). + % Version 4.3 catches extra } in input (Breitenlohner, September, 1991). + % Version 4.4 corrects changed_module logic, %-overflow (January, 1992). % Here is TeX material that gets inserted after \input webmac *************** *** 45,49 **** \centerline{\titlefont The {\ttitlefont WEAVE} processor} \vskip 15pt ! \centerline{(Version 4.2)} \vfill} \pageno=\contentspagenumber \advance\pageno by 1 --- 47,51 ---- \centerline{\titlefont The {\ttitlefont WEAVE} processor} \vskip 15pt ! \centerline{(Version 4.4)} \vfill} \pageno=\contentspagenumber \advance\pageno by 1 *************** *** 72,76 **** is modified. ! @d banner=='This is WEAVE, Version 4.2' @ The program begins with a fairly normal header, made up of pieces that --- 74,78 ---- is modified. ! @d banner=='This is WEAVE, Version 4.4' @ The program begins with a fairly normal header, made up of pieces that *************** *** 1273,1276 **** --- 1275,1280 ---- @!input_has_ended: boolean; {if |true|, there is no more input} @!changing: boolean; {if |true|, the current line is from |change_file|} + @!change_pending: boolean; {if |true|, the current change is not yet + recorded in |changed_module[module_count]|} @ As we change |changing| from |true| to |false| and back again, we must *************** *** 1364,1367 **** --- 1368,1384 ---- prepares to read the next line from |change_file|. + When a match is found, the current module is marked as changed unless + the first line after the \.{@@x} and after the \.{@@y} both start with + either |'@@*'| or |'@@ '| (possibly preceded by whitespace). + + @d if_module_start_then_make_change_pending(#)== + loc:=0; buffer[limit]:="!"; + while (buffer[loc]=" ")or(buffer[loc]=tab_mark) do incr(loc); + buffer[limit]:=" "; + if buffer[loc]="@@" then + if (buffer[loc+1]="*") or + (buffer[loc+1]=" ") or (buffer[loc+1]=tab_mark) then + change_pending:=# + @p procedure check_change; {switches to |change_file| if the buffers match} label exit; *************** *** 1369,1372 **** --- 1386,1394 ---- @!k:0..buf_size; {index into the buffers} begin if lines_dont_match then return; + change_pending:=false; + if not changed_module[module_count] then + begin if_module_start_then_make_change_pending(true); + if not change_pending then changed_module[module_count]:=true; + end; n:=0; loop@+ begin change_changing; {now it's |true|} *************** *** 1425,1435 **** @p procedure get_line; {inputs the next line} label restart; ! begin restart: if changing then changed_module[module_count]:=true ! else @; ! if changing then ! begin @; ! if not changing then ! begin changed_module[module_count]:=true; goto restart; ! end; end; loc:=0; buffer[limit]:=" "; --- 1447,1455 ---- @p procedure get_line; {inputs the next line} label restart; ! begin restart:if changing then ! @; ! if not changing then ! begin @; ! if changing then goto restart; end; loc:=0; buffer[limit]:=" "; *************** *** 1451,1455 **** buffer[0]:="@@"; buffer[1]:="z"; limit:=2; end; ! if limit>1 then {check if the change has ended} if buffer[0]="@@" then begin if (buffer[1]>="X")and(buffer[1]<="Z") then --- 1471,1482 ---- buffer[0]:="@@"; buffer[1]:="z"; limit:=2; end; ! if limit>0 then {check if the change has ended} ! begin if change_pending then ! begin if_module_start_then_make_change_pending(false); ! if change_pending then ! begin changed_module[module_count]:=true; change_pending:=false; ! end; ! end; ! buffer[limit]:=" "; if buffer[0]="@@" then begin if (buffer[1]>="X")and(buffer[1]<="Z") then *************** *** 1463,1466 **** --- 1490,1494 ---- end; end; + end; end *************** *** 1735,1738 **** --- 1763,1769 ---- @t\4@>@@; " ",tab_mark: goto restart; {ignore spaces and tabs} + "}": begin err_print('! Extra }'); goto restart; + @.Extra \}@> + end; othercases if c>=128 then goto restart {ignore nonstandard characters} else do_nothing *************** *** 1932,1936 **** begin incr(module_count); if module_count=max_modules then overflow('section number'); ! changed_module[module_count]:=false; {it will become |true| if any line changes} if buffer[loc-1]="*" then begin print('*',module_count:1); --- 1963,1968 ---- begin incr(module_count); if module_count=max_modules then overflow('section number'); ! changed_module[module_count]:=changing; ! {it will become |true| if any line changes} if buffer[loc-1]="*" then begin print('*',module_count:1); *************** *** 2115,2123 **** less than |line_length|. If the |per_cent| parameter is |false|, trailing blanks are suppressed. ! The characters emptied from the buffer form a new line of output. ! @p procedure flush_buffer(@!b:eight_bits;@!per_cent:boolean); {outputs |out_buf[1..b]|, where |b<=out_ptr|} ! label done; var j,@!k:0..line_length; begin j:=b; --- 2147,2158 ---- less than |line_length|. If the |per_cent| parameter is |false|, trailing blanks are suppressed. ! The characters emptied from the buffer form a new line of output; ! if the |carryover| parameter is true, a |"%"| in that line will be ! carried over to the next line (so that \TeX\ will ignore the completion ! of commented-out text). ! @p procedure flush_buffer(@!b:eight_bits;@!per_cent,@!carryover:boolean); {outputs |out_buf[1..b]|, where |b<=out_ptr|} ! label done,found; var j,@!k:0..line_length; begin j:=b; *************** *** 2130,2134 **** if per_cent then write(tex_file,xchr["%"]); write_ln(tex_file); incr(out_line); ! if b"\") then {comment mode should be preserved} ! begin out_buf[b]:="%"; decr(b); goto found; ! end; ! found: if (b0 then flush_buffer(out_ptr,false) else begin for k:=0 to limit do if (buffer[k]<>" ")and(buffer[k]<>tab_mark) then return; ! flush_buffer(0,false); end; exit:end; --- 2187,2194 ---- label exit; var k:0..buf_size; {index into |buffer|} ! begin if out_ptr>0 then flush_buffer(out_ptr,false,false) else begin for k:=0 to limit do if (buffer[k]<>" ")and(buffer[k]<>tab_mark) then return; ! flush_buffer(0,false,false); end; exit:end; *************** *** 2202,2209 **** d:=out_buf[k]; if d=" " then ! begin flush_buffer(k,false); return; end; if (d="\")and(out_buf[k-1]<>"\") then {in this case |k>1|} ! begin flush_buffer(k-1,true); return; end; decr(k); --- 2244,2251 ---- d:=out_buf[k]; if d=" " then ! begin flush_buffer(k,false,true); return; end; if (d="\")and(out_buf[k-1]<>"\") then {in this case |k>1|} ! begin flush_buffer(k-1,true,true); return; end; decr(k); *************** *** 2222,2226 **** for k:=1 to out_ptr-1 do print(xchr[out_buf[k]]); new_line; mark_harmless; ! flush_buffer(out_ptr-1,true); return; end --- 2264,2268 ---- for k:=1 to out_ptr-1 do print(xchr[out_buf[k]]); new_line; mark_harmless; ! flush_buffer(out_ptr-1,true,true); return; end *************** *** 4185,4189 **** module_count:=0; copy_limbo; ! finish_line; flush_buffer(0,false); {insert a blank line, it looks nice} while not input_has_ended do @ --- 4227,4231 ---- module_count:=0; copy_limbo; ! finish_line; flush_buffer(0,false,false); {insert a blank line, it looks nice} while not input_has_ended do @ *************** *** 4487,4491 **** @ @= out3("\")("f")("i"); finish_line; ! flush_buffer(0,false); {insert a blank line, it looks nice} @.\\fi@> --- 4529,4533 ---- @ @= out3("\")("f")("i"); finish_line; ! flush_buffer(0,false,false); {insert a blank line, it looks nice} @.\\fi@> Only in newtex/local/cm: cmsltt9.mf diff -r -c2 oldtex/local/cm/gen.mf newtex/local/cm/gen.mf *** oldtex/local/cm/gen.mf Sat Oct 14 23:34:20 1989 --- newtex/local/cm/gen.mf Mon Apr 15 09:14:29 1991 *************** *** 48,49 **** --- 48,72 ---- cycle; % star penlabels(0,1,2,3,4); endchar; + + cmchar "Divided rings (divorce symbol)"; + beginchar("1",9u#,v_center(x_height#)); + adjust_fit(0,0); pickup tiny.nib; + numeric light_stem; light_stem=Vround .5[vair,stem]; + pos11(stem,0); pos12(.4[hair,stem],0); pos13(stem,0); + x11=x12=x13=.5w; top y11=round 1.3h; bot y13=round(-d-.3h); y12=.6[y13,y11]; + filldraw z11l...z12l{down}...z13l + --z13r...z12r{up}...z11r--cycle; % vertical stroke + pos1(light_stem,90); pos3(light_stem,-90); + pos2(light_stem,180); pos4(.3[hair,light_stem],0); + x1=x3=.5[x2,x4]; lft x2r=hround(-3u-.5light_stem); rt x4r=hround(.25w+.5stem); + top y1r=h; y2=y4=.5[y1,y3]; + bot y3r=-d; + pos5(light_stem,90); pos7(light_stem,-90); + pos6(.3[hair,light_stem],180); pos8(light_stem,0); + x5-x1=x6-x2=x7-x3=x8-x4; rt x8r=hround(w+3u+.5light_stem); + y5-y1=y6-y2=y7-y3=y8-y4=0; + filldraw stroke pulled_arc.e(1,2)&pulled_arc.e(2,3)&pulled_arc.e(3,4) + &pulled_arc.e(4,1); % left ring + filldraw stroke pulled_arc.e(5,6)&pulled_arc.e(6,7)&pulled_arc.e(7,8) + &pulled_arc.e(8,5); % right ring + penlabels(1,2,3,4,5,6,7,8,11,12,13); endchar; Only in newtex/local/cm: gen10.mf Only in oldtex/local/lib: art.mf Only in newtex/local/lib: cwebmac.tex Only in newtex/local/lib: local.mf Only in newtex/local/lib: local.tex Only in newtex/local/lib: logod10.mf Only in newtex/local/lib: logosl9.mf Only in newtex/local/lib: slantimagen4.mf Only in newtex/local/lib: wlist.tex diff -r -c2 oldtex/local/mf/Makefile newtex/local/mf/Makefile *** oldtex/local/mf/Makefile Fri Sep 21 11:57:20 1990 --- newtex/local/mf/Makefile Mon Apr 15 18:18:05 1991 *************** *** 50,55 **** mf_sunwin.o: mf_sunwin.c ! plain.base: ../../dist/lib/plain.mf ../lib/art.mf ! -inimf plain \\input art \\dump install: # doit make install --- 50,55 ---- mf_sunwin.o: mf_sunwin.c ! plain.base: ../../dist/lib/plain.mf ../lib/local.mf ! -inimf plain \\input local \\dump install: # doit make install diff -r -c2 oldtex/local/mf/ini_to_trap newtex/local/mf/ini_to_trap *** oldtex/local/mf/ini_to_trap Fri Sep 21 11:57:24 1990 --- newtex/local/mf/ini_to_trap Sat Jan 25 20:33:50 1992 *************** *** 7,10 **** --- 7,15 ---- # ed - $1 <@}//p /@!mem_max=/ // diff -r -c2 oldtex/local/mf/inimf.ch newtex/local/mf/inimf.ch *** oldtex/local/mf/inimf.ch Fri Sep 21 11:57:40 1990 --- newtex/local/mf/inimf.ch Sun Mar 15 21:14:33 1992 *************** *** 4,7 **** --- 4,8 ---- % Modification History: % + % brought up to version 2.71 on 9/20/91 --- don % brought up to version 2.7 on 9/6/90 --- don % fixed max_buf_stack logic (it was one too high) on 1/22/90 --- don *************** *** 95,101 **** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is METAFONT, Version 2.7' {printed when \MF\ starts} @y ! @d banner=='This is METAFONT, Version 2.7 for SunOS' {printed when \MF\ starts} @z --- 96,102 ---- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is METAFONT, Version 2.71' {printed when \MF\ starts} @y ! @d banner=='This is METAFONT, Version 2.71 for SunOS' {printed when \MF\ starts} @z *************** *** 828,832 **** begin print_nl("You want to edit file "); @.You want to edit file x@> ! print(input_stack[file_ptr].name_field); print(" at line "); print_int(line);@/ interaction:=scroll_mode; jump_out; --- 829,833 ---- begin print_nl("You want to edit file "); @.You want to edit file x@> ! slow_print(input_stack[file_ptr].name_field); print(" at line "); print_int(line);@/ interaction:=scroll_mode; jump_out; *************** *** 1456,1464 **** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! print(log_name); print_char("."); end; end; @y ! print(log_name); print_char("."); end; end; --- 1457,1465 ---- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! slow_print(log_name); print_char("."); end; end; @y ! slow_print(log_name); print_char("."); end; end; diff -r -c2 oldtex/local/mf/plain.log newtex/local/mf/plain.log *** oldtex/local/mf/plain.log Wed Mar 13 09:09:58 1991 --- newtex/local/mf/plain.log Sat Jan 25 09:55:07 1992 *************** *** 1,6 **** ! This is METAFONT, Version 2.7 for SunOS (INIMF) 25 OCT 1990 21:59 ! **plain \input art \dump (/home/tex/dist/lib/plain.mf ! Preloading the plain base, version 2.0: preliminaries, basic constants and mathematical macros, macros for converting from device-independent units to pixels, --- 1,6 ---- ! This is METAFONT, Version 2.7a for SunOS (INIMF) 25 JAN 1992 09:55 ! **plain \input local \dump (/home/tex/dist/lib/plain.mf ! Preloading the plain base, version 2.7: preliminaries, basic constants and mathematical macros, macros for converting from device-independent units to pixels, *************** *** 9,16 **** macros for proof labels and rules, macros for character and font administration, ! and a few last-minute items.) (/home/tex/local/lib/art.mf) Beginning to dump on file plain.base ! (preloaded base=plain 90.10.25) ! 1398 strings of total length 23040 ! 5095 memory locations dumped; current usage is 1427&3531 518 symbolic tokens --- 9,16 ---- macros for proof labels and rules, macros for character and font administration, ! and a few last-minute items.) (/home/tex/local/lib/local.mf) Beginning to dump on file plain.base ! (preloaded base=plain 92.1.25) ! 1398 strings of total length 23043 ! 5097 memory locations dumped; current usage is 1427&3533 518 symbolic tokens diff -r -c2 oldtex/local/mfpaths.h newtex/local/mfpaths.h *** oldtex/local/mfpaths.h Thu Feb 28 22:31:23 1991 --- newtex/local/mfpaths.h Sun Apr 14 21:06:07 1991 *************** *** 10,14 **** #define MAXINPATHCHARS 700 /* maximum number of chars in an input path */ ! #define defaultinputpath ".:/home/tex/local/lib:/home/tex/dist/cm:/home/tex/dist/lib:/home/src/ams" /* this should always start with "." */ --- 10,14 ---- #define MAXINPATHCHARS 700 /* maximum number of chars in an input path */ ! #define defaultinputpath ".:/home/tex/local/lib:/home/tex/dist/cm:/home/tex/dist/lib:/home/tex/local/cm:/home/src/ams" /* this should always start with "." */ diff -r -c2 oldtex/local/tex/Makefile newtex/local/tex/Makefile *** oldtex/local/tex/Makefile Fri Sep 21 11:58:59 1990 --- newtex/local/tex/Makefile Mon Apr 15 18:18:43 1991 *************** *** 51,56 **** cc ${CFLAGS} -c ext.c ! plain.fmt: ../../dist/lib/plain.tex ! -initex plain \\dump install: # doit make install --- 51,56 ---- cc ${CFLAGS} -c ext.c ! plain.fmt: ../../dist/lib/plain.tex ../lib/local.tex ! -initex plain \\input local \\dump install: # doit make install diff -r -c2 oldtex/local/tex/ini_to_trip newtex/local/tex/ini_to_trip *** oldtex/local/tex/ini_to_trip Fri Sep 21 11:59:07 1990 --- newtex/local/tex/ini_to_trip Sat Jan 25 20:28:47 1992 *************** *** 7,10 **** --- 7,15 ---- # ed - $1 <@}//p /@!mem_max=/ // diff -r -c2 oldtex/local/tex/initex.ch newtex/local/tex/initex.ch *** oldtex/local/tex/initex.ch Wed Mar 13 09:10:14 1991 --- newtex/local/tex/initex.ch Sun Mar 15 21:11:49 1992 *************** *** 75,78 **** --- 75,81 ---- % (9/6/90) don to Version 3.1 % (1/30/91) don to Version 3.14 + % (9/19/91) don to Version 3.14a + % (1/25/92) don to Version 3.14b + % (3/15/92) don to Version 3.141 % Use this file as is to make an INITEX. To get production TeX, use the *************** *** 97,103 **** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is TeX, Version 3.14' {printed when \TeX\ starts} @y ! @d banner=='This is TeX, Version 3.14 for SunOS' {printed when \TeX\ starts} @z --- 100,106 ---- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is TeX, Version 3.141' {printed when \TeX\ starts} @y ! @d banner=='This is TeX, Version 3.141 for SunOS' {printed when \TeX\ starts} @z *************** *** 887,891 **** begin print_nl("You want to edit file "); @.You want to edit file x@> ! print(input_stack[base_ptr].name_field); print(" at line "); print_int(line); interaction:=scroll_mode; jump_out; --- 890,894 ---- begin print_nl("You want to edit file "); @.You want to edit file x@> ! slow_print(input_stack[base_ptr].name_field); print(" at line "); print_int(line); interaction:=scroll_mode; jump_out; *************** *** 1356,1364 **** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! print(log_name); print_char("."); end; end; @y ! print(log_name); print_char("."); end; end; --- 1359,1367 ---- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! slow_print(log_name); print_char("."); end; end; @y ! slow_print(log_name); print_char("."); end; end; diff -r -c2 oldtex/local/tex/plain.log newtex/local/tex/plain.log *** oldtex/local/tex/plain.log Fri Sep 21 12:00:38 1990 --- newtex/local/tex/plain.log Sun Jan 26 09:38:35 1992 *************** *** 1,4 **** ! This is TeX, Version 3.1 for SunOS (INITEX) 6 SEP 1990 21:22 ! **plain \dump (/home/tex/dist/lib/plain.tex Preloading the plain format: codes, registers, \maxdimen=\dimen10 --- 1,4 ---- ! This is TeX, Version 3.14b for SunOS (INITEX) 26 JAN 1992 09:38 ! **plain \input local \dump (/home/tex/dist/lib/plain.tex Preloading the plain format: codes, registers, \maxdimen=\dimen10 *************** *** 40,49 **** \topins=\insert253 ! hyphenation (/home/tex/dist/lib/hyphen.tex)) Beginning to dump on file plain.fmt ! (preloaded format=plain 90.9.6) ! 1960 strings of total length 27677 ! 4831 memory locations dumped; current usage is 110&4718 ! 921 multiletter control sequences \font\nullfont=nullfont \font\tenrm=cmr10 --- 40,49 ---- \topins=\insert253 ! hyphenation (/home/tex/dist/lib/hyphen.tex)) (/home/tex/local/lib/local.tex) Beginning to dump on file plain.fmt ! (preloaded format=plain 92.1.26) ! 1963 strings of total length 27808 ! 4865 memory locations dumped; current usage is 110&4752 ! 923 multiletter control sequences \font\nullfont=nullfont \font\tenrm=cmr10 diff -r -c2 oldtex/local/tex/tex.pool newtex/local/tex/tex.pool *** oldtex/local/tex/tex.pool Fri Sep 21 12:00:47 1990 --- newtex/local/tex/tex.pool Sun Mar 15 21:16:16 1992 *************** *** 433,438 **** 10Bad number 51Since I expected to read a number between 0 and 15, ! 13Bad math code ! 48A numeric math code must be between 0 and 32767. 18Bad delimiter code 56A numeric delimiter code must be between 0 and 2^{27}-1. --- 433,438 ---- 10Bad number 51Since I expected to read a number between 0 and 15, ! 12Bad mathchar ! 46A mathchar number must be between 0 and 32767. 18Bad delimiter code 56A numeric delimiter code must be between 0 and 2^{27}-1. *************** *** 947,950 **** --- 947,952 ---- 33since the result is out of range. 55I'm forgetting what you said and not changing anything. + 57Sorry, \setbox is not allowed after \halign in a display, + 45or between \accent and an accented character. 16Bad space factor 47I allow only values in the range 1..32767 here. *************** *** 1034,1036 **** 04ext4 16output file name ! *498792723 --- 1036,1038 ---- 04ext4 16output file name ! *216563779 diff -r -c2 oldtex/local/web/Makefile newtex/local/web/Makefile *** oldtex/local/web/Makefile Wed Nov 8 12:00:30 1989 --- newtex/local/web/Makefile Sun Jan 12 08:57:47 1992 *************** *** 26,30 **** weavext.o: weavext.c ../h00vars.h ! install: # doit make install "PROG=tangle" mv ${PROG} /usr/local/bin/${PROG} --- 26,30 ---- weavext.o: weavext.c ../h00vars.h ! install: # doit make install PROG=tangle mv ${PROG} /usr/local/bin/${PROG} diff -r -c2 oldtex/local/web/tangle.ch newtex/local/web/tangle.ch *** oldtex/local/web/tangle.ch Mon Mar 25 21:17:05 1991 --- newtex/local/web/tangle.ch Fri Oct 11 23:59:08 1991 *************** *** 44,47 **** --- 44,48 ---- % 9/6/90 (don) To version 4.1 % 3/25/91 (don) To version 4.2 + % 9/19/91 (don) To version 4.3 % NOTE: The module numbers refer to the standard WEB manual (CS 980). *************** *** 62,68 **** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is TANGLE, Version 4.2' @y ! @d banner=='This is TANGLE, Version 4.2 for SunOS' @z --- 63,69 ---- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is TANGLE, Version 4.3' @y ! @d banner=='This is TANGLE, Version 4.3 for SunOS' @z diff -r -c2 oldtex/local/web/tangle.p newtex/local/web/tangle.p *** oldtex/local/web/tangle.p Mon Mar 25 21:17:54 1991 --- newtex/local/web/tangle.p Sat Oct 12 00:25:56 1991 *************** *** 1,16 **** ! {2:}{4:}(*$C-*){(*$C+*)}{:4}program TANGLE(input,output);label 9999; ! const{8:}bufsize=100;maxbytes=45000;maxtoks=50000;maxnames=4000; ! maxtexts=2000;hashsize=353;longestname=400;linelength=72;outbufsize=144; ! stacksize=50;maxidlength=50;unambiglength=7;{:8}type{11:} ! ASCIIcode=0..255;{:11}{12:}textfile=packed file of char;{:12}{37:} ! eightbits=0..255;sixteenbits=0..65535;{:37}{39:}namepointer=0..maxnames; ! {:39}{43:}textpointer=0..maxtexts;{:43}{78:} ! outputstate=record endfield:sixteenbits;bytefield:sixteenbits; ! namefield:namepointer;replfield:textpointer;modfield:0..12287;end;{:78} ! var{9:}history:0..3;{:9}{13:}xord:array[char]of ASCIIcode; xchr:array[ASCIIcode]of char;{:13}{23:}webfile:textfile; ! changefile:textfile;{:23}{25:}Pascalfile:textfile;pool:textfile;{:25} ! {27:}buffer:array[0..bufsize]of ASCIIcode;{:27}{29:}phaseone:boolean; ! {:29}{38:}bytemem:packed array[0..2,0..maxbytes]of ASCIIcode; tokmem:packed array[0..3,0..maxtoks]of eightbits; bytestart:array[0..maxnames]of sixteenbits; --- 1,21 ---- ! {2:}{4:}(*$C-*){(*$C+*)}{:4}program TANGLE(input,output); ! label 9999;const{8:}bufsize=100;maxbytes=45000; ! maxtoks=50000;maxnames=4000;maxtexts=2000;hashsize=353; ! longestname=400;linelength=57;outbufsize=144; ! stacksize=50;maxidlength=12;unambiglength=7;{:8}type{11:} ! ASCIIcode=0..255;{:11}{12:}textfile=packed file of char; ! {:12}{37:}eightbits=0..255;sixteenbits=0..65535;{:37} ! {39:}namepointer=0..maxnames;{:39}{43:} ! textpointer=0..maxtexts;{:43}{78:} ! outputstate=record endfield:sixteenbits; ! bytefield:sixteenbits;namefield:namepointer; ! replfield:textpointer;modfield:0..12287;end;{:78}var{9:} ! history:0..3;{:9}{13:}xord:array[char]of ASCIIcode; xchr:array[ASCIIcode]of char;{:13}{23:}webfile:textfile; ! changefile:textfile;{:23}{25:}Pascalfile:textfile; ! pool:textfile;{:25}{27:} ! buffer:array[0..bufsize]of ASCIIcode;{:27}{29:} ! phaseone:boolean;{:29}{38:} ! bytemem:packed array[0..2,0..maxbytes]of ASCIIcode; tokmem:packed array[0..3,0..maxtoks]of eightbits; bytestart:array[0..maxnames]of sixteenbits; *************** *** 19,28 **** ilk:array[0..maxnames]of sixteenbits; equiv:array[0..maxnames]of sixteenbits; ! textlink:array[0..maxtexts]of sixteenbits;{:38}{40:}nameptr:namepointer; ! stringptr:namepointer;byteptr:array[0..2]of 0..maxbytes; ! poolchecksum:integer;{:40}{44:}textptr:textpointer; tokptr:array[0..3]of 0..maxtoks;z:0..3; ! {maxtokptr:array[0..3]of 0..maxtoks;}{:44}{50:}idfirst:0..bufsize; ! idloc:0..bufsize;doublechars:0..bufsize; hash,chophash:array[0..hashsize]of sixteenbits; choppedid:array[0..unambiglength]of ASCIIcode;{:50}{65:} --- 24,35 ---- ilk:array[0..maxnames]of sixteenbits; equiv:array[0..maxnames]of sixteenbits; ! textlink:array[0..maxtexts]of sixteenbits;{:38}{40:} ! nameptr:namepointer;stringptr:namepointer; ! byteptr:array[0..2]of 0..maxbytes;poolchecksum:integer; ! {:40}{44:}textptr:textpointer; tokptr:array[0..3]of 0..maxtoks;z:0..3; ! {maxtokptr:array[0..3]of 0..maxtoks;}{:44}{50:} ! idfirst:0..bufsize;idloc:0..bufsize; ! doublechars:0..bufsize; hash,chophash:array[0..hashsize]of sixteenbits; choppedid:array[0..unambiglength]of ASCIIcode;{:50}{65:} *************** *** 29,55 **** modtext:array[0..longestname]of ASCIIcode;{:65}{70:} lastunnamed:textpointer;{:70}{79:}curstate:outputstate; ! stack:array[1..stacksize]of outputstate;stackptr:0..stacksize;{:79}{80:} ! zo:0..3;{:80}{82:}bracelevel:eightbits;{:82}{86:}curval:integer;{:86} ! {94:}outbuf:array[0..outbufsize]of ASCIIcode;outptr:0..outbufsize; ! breakptr:0..outbufsize;semiptr:0..outbufsize;{:94}{95:} ! outstate:eightbits;outval,outapp:integer;outsign:ASCIIcode; ! lastsign:-1..+1;{:95}{100:}outcontrib:array[1..linelength]of ASCIIcode; ! {:100}{124:}ii:integer;line:integer;otherline:integer;templine:integer; ! limit:0..bufsize;loc:0..bufsize;inputhasended:boolean;changing:boolean; ! {:124}{126:}changebuffer:array[0..bufsize]of ASCIIcode; changelimit:0..bufsize;{:126}{143:}curmodule:namepointer; ! scanninghex:boolean;{:143}{156:}nextcontrol:eightbits;{:156}{164:} ! currepltext:textpointer;{:164}{171:}modulecount:0..12287;{:171}{179:} ! {troubleshooting:boolean;ddt:integer;dd:integer;debugcycle:integer; ! debugskipped:integer;}{:179}{185:}{wo:0..2;}{:185}{189:} ! webname,changename,Pascalname,poolname:array[1..60]of char;{:189} #include "tangext.h" ! {30:}{procedure debughelp;forward;}{:30}{31:}procedure error; ! var j:0..outbufsize;k,l:0..bufsize;begin if phaseone then{32:} ! begin if changing then write(output,'. (change file ')else write(output, ! '. (');writeln(output,'l.',line:1,')'); if loc>=limit then l:=limit else l:=loc; ! for k:=1 to l do if buffer[k-1]=9 then write(output,' ')else write( ! output,xchr[buffer[k-1]]);writeln(output); for k:=1 to l do write(output,' '); for k:=l+1 to limit do write(output,xchr[buffer[k-1]]); --- 36,69 ---- modtext:array[0..longestname]of ASCIIcode;{:65}{70:} lastunnamed:textpointer;{:70}{79:}curstate:outputstate; ! stack:array[1..stacksize]of outputstate; ! stackptr:0..stacksize;{:79}{80:}zo:0..3;{:80}{82:} ! bracelevel:eightbits;{:82}{86:}curval:integer;{:86}{94:} ! outbuf:array[0..outbufsize]of ASCIIcode; ! outptr:0..outbufsize;breakptr:0..outbufsize; ! semiptr:0..outbufsize;{:94}{95:}outstate:eightbits; ! outval,outapp:integer;outsign:ASCIIcode;lastsign:-1..+1; ! {:95}{100:}outcontrib:array[1..linelength]of ASCIIcode; ! {:100}{124:}ii:integer;line:integer;otherline:integer; ! templine:integer;limit:0..bufsize;loc:0..bufsize; ! inputhasended:boolean;changing:boolean;{:124}{126:} ! changebuffer:array[0..bufsize]of ASCIIcode; changelimit:0..bufsize;{:126}{143:}curmodule:namepointer; ! scanninghex:boolean;{:143}{156:}nextcontrol:eightbits; ! {:156}{164:}currepltext:textpointer;{:164}{171:} ! modulecount:0..12287;{:171}{179:} ! {troubleshooting:boolean;ddt:integer;dd:integer; ! debugcycle:integer;debugskipped:integer;}{:179}{185:} ! {wo:0..2;}{:185}{189:} ! webname,changename,Pascalname,poolname:array[1..60]of ! char;{:189} #include "tangext.h" ! {30:}{procedure debughelp;forward;}{:30}{31:} ! procedure error;var j:0..outbufsize;k,l:0..bufsize; ! begin if phaseone then{32:} ! begin if changing then write(output,'. (change file ') ! else write(output,'. (');writeln(output,'l.',line:1,')'); if loc>=limit then l:=limit else l:=loc; ! for k:=1 to l do if buffer[k-1]=9 then write(output,' ') ! else write(output,xchr[buffer[k-1]]);writeln(output); for k:=1 to l do write(output,' '); for k:=l+1 to limit do write(output,xchr[buffer[k-1]]); *************** *** 57,241 **** begin writeln(output,'. (l.',line:1,')'); for j:=1 to outptr do write(output,xchr[outbuf[j-1]]); ! write(output,'... ');end{:33};flush(output);history:=2;{debughelp;}end; ! {:31}{34:}procedure jumpout;begin goto 9999;end;{:34}{190:} ! procedure scanargs;var dotpos,i,a:integer;c:char; ! fname:array[1..55]of char;foundweb,foundchange:boolean; ! begin foundweb:=false;foundchange:=false; for a:=1 to argc-1 do begin argv(a,fname); ! if fname[1]<>'-'then begin if not foundweb then{191:}begin dotpos:=-1; ! i:=1;while(fname[i]<>' ')and(i<=55)do begin webname[i]:=fname[i]; ! if fname[i]='.'then dotpos:=i;i:=i+1;end; if dotpos=-1 then begin dotpos:=i;webname[dotpos]:='.'; ! webname[dotpos+1]:='w';webname[dotpos+2]:='e';webname[dotpos+3]:='b'; ! webname[dotpos+4]:=' ';end else webname[i]:=' '; ! for i:=1 to dotpos do begin c:=webname[i];Pascalname[i]:=c; ! poolname[i]:=c;end;Pascalname[dotpos+1]:='p';Pascalname[dotpos+2]:=' '; ! poolname[dotpos+1]:='p';poolname[dotpos+2]:='o';poolname[dotpos+3]:='o'; ! poolname[dotpos+4]:='l';poolname[dotpos+5]:=' ';foundweb:=true;end{:191} else if not foundchange then{192:}begin dotpos:=-1;i:=1; ! while(fname[i]<>' ')and(i<=55)do begin changename[i]:=fname[i]; ! if fname[i]='.'then dotpos:=i;i:=i+1;end; ! if dotpos=-1 then begin dotpos:=i;changename[dotpos]:='.'; ! changename[dotpos+1]:='c';changename[dotpos+2]:='h'; ! changename[dotpos+3]:=' ';end else changename[i]:=' ';foundchange:=true; ! end{:192}else{195:}begin begin writeln(output); ! write(output,'! Usage: webfile[.web] [changefile[.ch]]');end;error; ! jumpout;end{:195};end else{194:}begin{195:}begin begin writeln(output); ! write(output,'! Usage: webfile[.web] [changefile[.ch]]');end;error; ! jumpout;end{:195};end{:194};end;if not foundweb then{195:} begin begin writeln(output); ! write(output,'! Usage: webfile[.web] [changefile[.ch]]');end;error; ! jumpout;end{:195};if not foundchange then{193:}begin changename[1]:='/'; ! changename[2]:='d';changename[3]:='e';changename[4]:='v'; ! changename[5]:='/';changename[6]:='n';changename[7]:='u'; ! changename[8]:='l';changename[9]:='l';changename[10]:=' ';end{:193};end; ! {:190}procedure initialize;var{16:}i:0..255;{:16}{41:}wi:0..2;{:41}{45:} ! zi:0..3;{:45}{51:}h:0..hashsize;{:51}begin{10:}history:=0;{:10}{14:} ! xchr[32]:=' ';xchr[33]:='!';xchr[34]:='"';xchr[35]:='#';xchr[36]:='$'; ! xchr[37]:='%';xchr[38]:='&';xchr[39]:='''';xchr[40]:='(';xchr[41]:=')'; ! xchr[42]:='*';xchr[43]:='+';xchr[44]:=',';xchr[45]:='-';xchr[46]:='.'; ! xchr[47]:='/';xchr[48]:='0';xchr[49]:='1';xchr[50]:='2';xchr[51]:='3'; ! xchr[52]:='4';xchr[53]:='5';xchr[54]:='6';xchr[55]:='7';xchr[56]:='8'; ! xchr[57]:='9';xchr[58]:=':';xchr[59]:=';';xchr[60]:='<';xchr[61]:='='; ! xchr[62]:='>';xchr[63]:='?';xchr[64]:='@';xchr[65]:='A';xchr[66]:='B'; ! xchr[67]:='C';xchr[68]:='D';xchr[69]:='E';xchr[70]:='F';xchr[71]:='G'; ! xchr[72]:='H';xchr[73]:='I';xchr[74]:='J';xchr[75]:='K';xchr[76]:='L'; ! xchr[77]:='M';xchr[78]:='N';xchr[79]:='O';xchr[80]:='P';xchr[81]:='Q'; ! xchr[82]:='R';xchr[83]:='S';xchr[84]:='T';xchr[85]:='U';xchr[86]:='V'; ! xchr[87]:='W';xchr[88]:='X';xchr[89]:='Y';xchr[90]:='Z';xchr[91]:='['; ! xchr[92]:='\';xchr[93]:=']';xchr[94]:='^';xchr[95]:='_';xchr[96]:='`'; ! xchr[97]:='a';xchr[98]:='b';xchr[99]:='c';xchr[100]:='d';xchr[101]:='e'; ! xchr[102]:='f';xchr[103]:='g';xchr[104]:='h';xchr[105]:='i'; ! xchr[106]:='j';xchr[107]:='k';xchr[108]:='l';xchr[109]:='m'; ! xchr[110]:='n';xchr[111]:='o';xchr[112]:='p';xchr[113]:='q'; ! xchr[114]:='r';xchr[115]:='s';xchr[116]:='t';xchr[117]:='u'; ! xchr[118]:='v';xchr[119]:='w';xchr[120]:='x';xchr[121]:='y'; ! xchr[122]:='z';xchr[123]:='{';xchr[124]:='|';xchr[125]:='}'; ! xchr[126]:='~';xchr[0]:=' ';xchr[127]:=' ';{:14}{17:} ! for i:=1 to 31 do xchr[i]:=chr(i);for i:=128 to 255 do xchr[i]:=chr(i); ! {:17}{18:}for i:=0 to 255 do xord[chr(i)]:=32; ! for i:=1 to 255 do xord[xchr[i]]:=i;xord[' ']:=32;{:18}{21:}{:21}{26:} ! scanargs;rewrite(Pascalfile,Pascalname);rewrite(pool,poolname);{:26} ! {42:}for wi:=0 to 2 do begin bytestart[wi]:=0;byteptr[wi]:=0;end; ! bytestart[3]:=0;nameptr:=1;stringptr:=256;poolchecksum:=271828;{:42} ! {46:}for zi:=0 to 3 do begin tokstart[zi]:=0;tokptr[zi]:=0;end; ! tokstart[4]:=0;textptr:=1;z:=1 mod 4;{:46}{48:}ilk[0]:=0;equiv[0]:=0; ! {:48}{52:}for h:=0 to hashsize-1 do begin hash[h]:=0;chophash[h]:=0;end; ! {:52}{71:}lastunnamed:=0;textlink[0]:=0;{:71}{144:}scanninghex:=false; ! {:144}{152:}modtext[0]:=32;{:152}{180:}{troubleshooting:=true; ! debugcycle:=1;debugskipped:=0;troubleshooting:=false;debugcycle:=99999;} ! {:180}end;{:2}{24:}procedure openinput;begin reset(webfile,webname); reset(changefile,changename);end;{:24}{28:} function inputln(var f:textfile):boolean;begin limit:=0; if testeof(f)then inputln:=false else begin lineread(f); ! if limit=bufsize then begin limit:=limit-1;begin writeln(output); ! write(output,'! Input line too long');end;loc:=0;error;end; ! inputln:=true;end;end;{:28}{49:}procedure printid(p:namepointer); ! var k:0..maxbytes;w:0..2; ! begin if p>=nameptr then write(output,'IMPOSSIBLE')else begin w:=p mod 3 ! ; ! for k:=bytestart[p]to bytestart[p+3]-1 do write(output,xchr[bytemem[w,k] ! ]);end;end;{:49}{53:}function idlookup(t:eightbits):namepointer; ! label 31,32;var c:eightbits;i:0..bufsize;h:0..hashsize;k:0..maxbytes; w:0..2;l:0..bufsize;p,q:namepointer;s:0..unambiglength; ! begin l:=idloc-idfirst;{54:}h:=buffer[idfirst];i:=idfirst+1; ! while i0 do begin if bytestart[p+3]-bytestart[p]=l then{56:} ! begin i:=idfirst;k:=bytestart[p];w:=p mod 3; ! while(i0)then{57:} ! begin if((p<>nameptr)and(t<>0)and(ilk[p]=0))or((p=nameptr)and(t=0)and( ! buffer[idfirst]<>34))then{58:}begin i:=idfirst;s:=0;h:=0; ! while(i95 then begin ! if buffer[i]>=97 then choppedid[s]:=buffer[i]-32 else choppedid[s]:= ! buffer[i];h:=(h+h+choppedid[s])mod hashsize;s:=s+1;end;i:=i+1;end; choppedid[s]:=0;end{:58};if p<>nameptr then{59:} ! begin if ilk[p]=0 then begin if t=1 then begin writeln(output); ! write(output,'! This identifier has already appeared');error;end;{60:} ! q:=chophash[h]; ! if q=p then chophash[h]:=equiv[p]else begin while equiv[q]<>p do q:= ! equiv[q];equiv[q]:=equiv[p];end{:60};end else begin writeln(output); ! write(output,'! This identifier was defined before');error;end; ! ilk[p]:=t;end{:59}else{61:} ! begin if(t=0)and(buffer[idfirst]<>34)then{62:}begin q:=chophash[h]; ! while q<>0 do begin{63:}begin k:=bytestart[q];s:=0;w:=q mod 3; ! while(k95 then begin if c>=97 then c:=c-32; if choppedid[s]<>c then goto 32;s:=s+1;end;k:=k+1;end; if(k=bytestart[q+3])and(choppedid[s]<>0)then goto 32; ! begin writeln(output);write(output,'! Identifier conflict with ');end; ! for k:=bytestart[q]to bytestart[q+3]-1 do write(output,xchr[bytemem[w,k] ! ]);error;q:=0;32:end{:63};q:=equiv[q];end;equiv[p]:=chophash[h]; ! chophash[h]:=p;end{:62};w:=nameptr mod 3;k:=byteptr[w]; if k+l>maxbytes then begin writeln(output); ! write(output,'! Sorry, ','byte memory',' capacity exceeded');error; ! history:=3;jumpout;end;if nameptr>maxnames-3 then begin writeln(output); ! write(output,'! Sorry, ','name',' capacity exceeded');error;history:=3; ! jumpout;end;i:=idfirst;while i34 then ilk[p]:=t else{64:} begin ilk[p]:=1; ! if l-doublechars=2 then equiv[p]:=buffer[idfirst+1]+32768 else begin ! equiv[p]:=stringptr+32768;l:=l-doublechars-1; if l>99 then begin writeln(output); ! write(output,'! Preprocessed string is too long');error;end; ! stringptr:=stringptr+1;write(pool,xchr[48+l div 10],xchr[48+l mod 10]); poolchecksum:=poolchecksum+poolchecksum+l; ! while poolchecksum>536870839 do poolchecksum:=poolchecksum-536870839; ! i:=idfirst+1;while i536870839 do poolchecksum:=poolchecksum-536870839; ! if(buffer[i]=34)or(buffer[i]=64)then i:=i+2 else i:=i+1;end; ! writeln(pool);end;end{:64};end{:61};end{:57};idlookup:=p;end;{:53}{66:} ! function modlookup(l:sixteenbits):namepointer;label 31;var c:0..4; ! j:0..longestname;k:0..maxbytes;w:0..2;p:namepointer;q:namepointer; ! begin c:=2;q:=0;p:=ilk[0];while p<>0 do begin{68:}begin k:=bytestart[p]; ! w:=p mod 3;c:=1;j:=1; ! while(kl then c:=1 else c:=4 else if j>l then c:=3 ! else if modtext[j]maxbytes then begin writeln(output); ! write(output,'! Sorry, ','byte memory',' capacity exceeded');error; ! history:=3;jumpout;end;if nameptr>maxnames-3 then begin writeln(output); ! write(output,'! Sorry, ','name',' capacity exceeded');error;history:=3; ! jumpout;end;p:=nameptr;if c=0 then link[q]:=p else ilk[q]:=p;link[p]:=0; ilk[p]:=0;c:=1;equiv[p]:=0; ! for j:=1 to l do bytemem[w,k+j-1]:=modtext[j];byteptr[w]:=k+l; ! bytestart[nameptr+3]:=k+l;nameptr:=nameptr+1;{:67}; 31:if c<>1 then begin begin writeln(output); ! write(output,'! Incompatible section names');error;end;p:=0;end; ! modlookup:=p;end;{:66}{69:} ! function prefixlookup(l:sixteenbits):namepointer;var c:0..4; ! count:0..maxnames;j:0..longestname;k:0..maxbytes;w:0..2;p:namepointer; ! q:namepointer;r:namepointer;begin q:=0;p:=ilk[0];count:=0;r:=0; ! while p<>0 do begin{68:}begin k:=bytestart[p];w:=p mod 3;c:=1;j:=1; ! while(kl then c:=1 else c:=4 else if j>l then c:=3 ! else if modtext[j]1 then if count=0 then begin writeln(output); write(output,'! Name does not match');error; ! end else begin writeln(output);write(output,'! Ambiguous prefix');error; ! end;prefixlookup:=r;end;{:69}{73:} procedure storetwobytes(x:sixteenbits); begin if tokptr[z]+2>maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=x div 256; ! tokmem[z,tokptr[z]+1]:=x mod 256;tokptr[z]:=tokptr[z]+2;end;{:73}{74:} ! {procedure printrepl(p:textpointer);var k:0..maxtoks;a:sixteenbits; ! zp:0..3; ! begin if p>=textptr then write(output,'BAD')else begin k:=tokstart[p]; ! zp:=p mod 4;while k=128 then[75:]begin k:=k+1; ! if a<168 then begin a:=(a-128)*256+tokmem[zp,k];printid(a); ! if bytemem[a mod 3,bytestart[a]]=34 then write(output,'"')else write( ! output,' ');end else if a<208 then begin write(output,'@<'); printid((a-168)*256+tokmem[zp,k]);write(output,'@>'); end else begin a:=(a-208)*256+tokmem[zp,k]; --- 71,309 ---- begin writeln(output,'. (l.',line:1,')'); for j:=1 to outptr do write(output,xchr[outbuf[j-1]]); ! write(output,'... ');end{:33};flush(output);history:=2; ! {debughelp;}end;{:31}{34:}procedure jumpout; ! begin goto 9999;end;{:34}{190:}procedure scanargs; ! var dotpos,i,a:integer;c:char;fname:array[1..55]of char; ! foundweb,foundchange:boolean;begin foundweb:=false; ! foundchange:=false; for a:=1 to argc-1 do begin argv(a,fname); ! if fname[1]<>'-'then begin if not foundweb then{191:} ! begin dotpos:=-1;i:=1; ! while(fname[i]<>' ')and(i<=55)do begin webname[i]:=fname[ ! i];if fname[i]='.'then dotpos:=i;i:=i+1;end; if dotpos=-1 then begin dotpos:=i;webname[dotpos]:='.'; ! webname[dotpos+1]:='w';webname[dotpos+2]:='e'; ! webname[dotpos+3]:='b';webname[dotpos+4]:=' '; ! end else webname[i]:=' '; ! for i:=1 to dotpos do begin c:=webname[i]; ! Pascalname[i]:=c;poolname[i]:=c;end; ! Pascalname[dotpos+1]:='p';Pascalname[dotpos+2]:=' '; ! poolname[dotpos+1]:='p';poolname[dotpos+2]:='o'; ! poolname[dotpos+3]:='o';poolname[dotpos+4]:='l'; ! poolname[dotpos+5]:=' ';foundweb:=true;end{:191} else if not foundchange then{192:}begin dotpos:=-1;i:=1; ! while(fname[i]<>' ')and(i<=55)do begin changename[i]:= ! fname[i];if fname[i]='.'then dotpos:=i;i:=i+1;end; ! if dotpos=-1 then begin dotpos:=i; ! changename[dotpos]:='.';changename[dotpos+1]:='c'; ! changename[dotpos+2]:='h';changename[dotpos+3]:=' '; ! end else changename[i]:=' ';foundchange:=true;end{:192} ! else{195:}begin begin writeln(output); ! write(output,'! Usage: webfile[.web] [changefile[.ch]]'); ! end;error;jumpout;end{:195};end else{194:}begin{195:} begin begin writeln(output); ! write(output,'! Usage: webfile[.web] [changefile[.ch]]'); ! end;error;jumpout;end{:195};end{:194};end; ! if not foundweb then{195:}begin begin writeln(output); ! write(output,'! Usage: webfile[.web] [changefile[.ch]]'); ! end;error;jumpout;end{:195};if not foundchange then{193:} ! begin changename[1]:='/';changename[2]:='d'; ! changename[3]:='e';changename[4]:='v';changename[5]:='/'; ! changename[6]:='n';changename[7]:='u';changename[8]:='l'; ! changename[9]:='l';changename[10]:=' ';end{:193};end; ! {:190}procedure initialize;var{16:}i:0..255;{:16}{41:} ! wi:0..2;{:41}{45:}zi:0..3;{:45}{51:}h:0..hashsize;{:51} ! begin{10:}history:=0;{:10}{14:}xchr[32]:=' '; ! xchr[33]:='!';xchr[34]:='"';xchr[35]:='#';xchr[36]:='$'; ! xchr[37]:='%';xchr[38]:='&';xchr[39]:='''';xchr[40]:='('; ! xchr[41]:=')';xchr[42]:='*';xchr[43]:='+';xchr[44]:=','; ! xchr[45]:='-';xchr[46]:='.';xchr[47]:='/';xchr[48]:='0'; ! xchr[49]:='1';xchr[50]:='2';xchr[51]:='3';xchr[52]:='4'; ! xchr[53]:='5';xchr[54]:='6';xchr[55]:='7';xchr[56]:='8'; ! xchr[57]:='9';xchr[58]:=':';xchr[59]:=';';xchr[60]:='<'; ! xchr[61]:='=';xchr[62]:='>';xchr[63]:='?';xchr[64]:='@'; ! xchr[65]:='A';xchr[66]:='B';xchr[67]:='C';xchr[68]:='D'; ! xchr[69]:='E';xchr[70]:='F';xchr[71]:='G';xchr[72]:='H'; ! xchr[73]:='I';xchr[74]:='J';xchr[75]:='K';xchr[76]:='L'; ! xchr[77]:='M';xchr[78]:='N';xchr[79]:='O';xchr[80]:='P'; ! xchr[81]:='Q';xchr[82]:='R';xchr[83]:='S';xchr[84]:='T'; ! xchr[85]:='U';xchr[86]:='V';xchr[87]:='W';xchr[88]:='X'; ! xchr[89]:='Y';xchr[90]:='Z';xchr[91]:='[';xchr[92]:='\'; ! xchr[93]:=']';xchr[94]:='^';xchr[95]:='_';xchr[96]:='`'; ! xchr[97]:='a';xchr[98]:='b';xchr[99]:='c';xchr[100]:='d'; ! xchr[101]:='e';xchr[102]:='f';xchr[103]:='g'; ! xchr[104]:='h';xchr[105]:='i';xchr[106]:='j'; ! xchr[107]:='k';xchr[108]:='l';xchr[109]:='m'; ! xchr[110]:='n';xchr[111]:='o';xchr[112]:='p'; ! xchr[113]:='q';xchr[114]:='r';xchr[115]:='s'; ! xchr[116]:='t';xchr[117]:='u';xchr[118]:='v'; ! xchr[119]:='w';xchr[120]:='x';xchr[121]:='y'; ! xchr[122]:='z';xchr[123]:='{';xchr[124]:='|'; ! xchr[125]:='}';xchr[126]:='~';xchr[0]:=' '; ! xchr[127]:=' ';{:14}{17:} ! for i:=1 to 31 do xchr[i]:=chr(i); ! for i:=128 to 255 do xchr[i]:=chr(i);{:17}{18:} ! for i:=0 to 255 do xord[chr(i)]:=32; ! for i:=1 to 255 do xord[xchr[i]]:=i;xord[' ']:=32;{:18} ! {21:}{:21}{26:}scanargs;rewrite(Pascalfile,Pascalname); ! rewrite(pool,poolname);{:26}{42:} ! for wi:=0 to 2 do begin bytestart[wi]:=0;byteptr[wi]:=0; ! end;bytestart[3]:=0;nameptr:=1;stringptr:=256; ! poolchecksum:=271828;{:42}{46:} ! for zi:=0 to 3 do begin tokstart[zi]:=0;tokptr[zi]:=0; ! end;tokstart[4]:=0;textptr:=1;z:=1 mod 4;{:46}{48:} ! ilk[0]:=0;equiv[0]:=0;{:48}{52:} ! for h:=0 to hashsize-1 do begin hash[h]:=0; ! chophash[h]:=0;end;{:52}{71:}lastunnamed:=0; ! textlink[0]:=0;{:71}{144:}scanninghex:=false;{:144}{152:} ! modtext[0]:=32;{:152}{180:}{troubleshooting:=true; ! debugcycle:=1;debugskipped:=0;troubleshooting:=false; ! debugcycle:=99999;}{:180}end;{:2}{24:} ! procedure openinput;begin reset(webfile,webname); reset(changefile,changename);end;{:24}{28:} function inputln(var f:textfile):boolean;begin limit:=0; if testeof(f)then inputln:=false else begin lineread(f); ! if limit=bufsize then begin limit:=limit-1; ! begin writeln(output); ! write(output,'! Input line too long');end;loc:=0;error; ! end;inputln:=true;end;end;{:28}{49:} ! procedure printid(p:namepointer);var k:0..maxbytes; ! w:0..2; ! begin if p>=nameptr then write(output,'IMPOSSIBLE')else ! begin w:=p mod 3; ! for k:=bytestart[p]to bytestart[p+3]-1 do write(output, ! xchr[bytemem[w,k]]);end;end;{:49}{53:} ! function idlookup(t:eightbits):namepointer;label 31,32; ! var c:eightbits;i:0..bufsize;h:0..hashsize;k:0..maxbytes; w:0..2;l:0..bufsize;p,q:namepointer;s:0..unambiglength; ! begin l:=idloc-idfirst;{54:}h:=buffer[idfirst]; ! i:=idfirst+1; ! while i0 do begin if bytestart[p+3]-bytestart[p]=l then ! {56:}begin i:=idfirst;k:=bytestart[p];w:=p mod 3; ! while(i0)then{57:} ! begin if((p<>nameptr)and(t<>0)and(ilk[p]=0))or((p=nameptr ! )and(t=0)and(buffer[idfirst]<>34))then{58:} ! begin i:=idfirst;s:=0;h:=0; ! while(i ! 95 then begin if buffer[i]>=97 then choppedid[s]:=buffer[ ! i]-32 else choppedid[s]:=buffer[i]; ! h:=(h+h+choppedid[s])mod hashsize;s:=s+1;end;i:=i+1;end; choppedid[s]:=0;end{:58};if p<>nameptr then{59:} ! begin if ilk[p]=0 then begin if t=1 then begin writeln( ! output); ! write(output,'! This identifier has already appeared'); ! error;end;{60:}q:=chophash[h]; ! if q=p then chophash[h]:=equiv[p]else begin while equiv[q ! ]<>p do q:=equiv[q];equiv[q]:=equiv[p];end{:60}; ! end else begin writeln(output); ! write(output,'! This identifier was defined before'); ! error;end;ilk[p]:=t;end{:59}else{61:} ! begin if(t=0)and(buffer[idfirst]<>34)then{62:} ! begin q:=chophash[h];while q<>0 do begin{63:} ! begin k:=bytestart[q];s:=0;w:=q mod 3; ! while(k95 then begin if c>=97 then c:=c-32; if choppedid[s]<>c then goto 32;s:=s+1;end;k:=k+1;end; if(k=bytestart[q+3])and(choppedid[s]<>0)then goto 32; ! begin writeln(output); ! write(output,'! Identifier conflict with ');end; ! for k:=bytestart[q]to bytestart[q+3]-1 do write(output, ! xchr[bytemem[w,k]]);error;q:=0;32:end{:63};q:=equiv[q]; ! end;equiv[p]:=chophash[h];chophash[h]:=p;end{:62}; ! w:=nameptr mod 3;k:=byteptr[w]; if k+l>maxbytes then begin writeln(output); ! write(output,'! Sorry, ','byte memory', ! ' capacity exceeded');error;history:=3;jumpout;end; ! if nameptr>maxnames-3 then begin writeln(output); ! write(output,'! Sorry, ','name',' capacity exceeded'); ! error;history:=3;jumpout;end;i:=idfirst; ! while i34 then ilk[p]:=t else{64:} begin ilk[p]:=1; ! if l-doublechars=2 then equiv[p]:=buffer[idfirst+1]+32768 ! else begin equiv[p]:=stringptr+32768;l:=l-doublechars-1; if l>99 then begin writeln(output); ! write(output,'! Preprocessed string is too long');error; ! end;stringptr:=stringptr+1; ! write(pool,xchr[48+l div 10],xchr[48+l mod 10]); poolchecksum:=poolchecksum+poolchecksum+l; ! while poolchecksum>536870839 do poolchecksum:= ! poolchecksum-536870839;i:=idfirst+1; ! while i536870839 do poolchecksum:= ! poolchecksum-536870839; ! if(buffer[i]=34)or(buffer[i]=64)then i:=i+2 else i:=i+1; ! end;writeln(pool);end;end{:64};end{:61};end{:57}; ! idlookup:=p;end;{:53}{66:} ! function modlookup(l:sixteenbits):namepointer;label 31; ! var c:0..4;j:0..longestname;k:0..maxbytes;w:0..2; ! p:namepointer;q:namepointer;begin c:=2;q:=0;p:=ilk[0]; ! while p<>0 do begin{68:}begin k:=bytestart[p];w:=p mod 3; ! c:=1;j:=1; ! while(kl then c:=1 else c:=4 else ! if j>l then c:=3 else if modtext[j]maxbytes then begin writeln(output); ! write(output,'! Sorry, ','byte memory', ! ' capacity exceeded');error;history:=3;jumpout;end; ! if nameptr>maxnames-3 then begin writeln(output); ! write(output,'! Sorry, ','name',' capacity exceeded'); ! error;history:=3;jumpout;end;p:=nameptr; ! if c=0 then link[q]:=p else ilk[q]:=p;link[p]:=0; ilk[p]:=0;c:=1;equiv[p]:=0; ! for j:=1 to l do bytemem[w,k+j-1]:=modtext[j]; ! byteptr[w]:=k+l;bytestart[nameptr+3]:=k+l; ! nameptr:=nameptr+1;{:67}; 31:if c<>1 then begin begin writeln(output); ! write(output,'! Incompatible section names');error;end; ! p:=0;end;modlookup:=p;end;{:66}{69:} ! function prefixlookup(l:sixteenbits):namepointer; ! var c:0..4;count:0..maxnames;j:0..longestname; ! k:0..maxbytes;w:0..2;p:namepointer;q:namepointer; ! r:namepointer;begin q:=0;p:=ilk[0];count:=0;r:=0; ! while p<>0 do begin{68:}begin k:=bytestart[p];w:=p mod 3; ! c:=1;j:=1; ! while(kl then c:=1 else c:=4 else ! if j>l then c:=3 else if modtext[j]1 then if count=0 then begin writeln(output); write(output,'! Name does not match');error; ! end else begin writeln(output); ! write(output,'! Ambiguous prefix');error;end; ! prefixlookup:=r;end;{:69}{73:} procedure storetwobytes(x:sixteenbits); begin if tokptr[z]+2>maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end; ! tokmem[z,tokptr[z]]:=x div 256; ! tokmem[z,tokptr[z]+1]:=x mod 256;tokptr[z]:=tokptr[z]+2; ! end;{:73}{74:}{procedure printrepl(p:textpointer); ! var k:0..maxtoks;a:sixteenbits;zp:0..3; ! begin if p>=textptr then write(output,'BAD')else begin k ! :=tokstart[p];zp:=p mod 4; ! while k=128 then[75:]begin k:=k+1; ! if a<168 then begin a:=(a-128)*256+tokmem[zp,k]; ! printid(a); ! if bytemem[a mod 3,bytestart[a]]=34 then write(output,'"' ! )else write(output,' '); ! end else if a<208 then begin write(output,'@<'); printid((a-168)*256+tokmem[zp,k]);write(output,'@>'); end else begin a:=(a-208)*256+tokmem[zp,k]; *************** *** 243,293 **** end[:75]else[76:]case a of 9:write(output,'@',xchr[123]); 10:write(output,'@',xchr[125]);12:write(output,'@'''); ! 13:write(output,'@"');125:write(output,'@$');0:write(output,'#'); ! 64:write(output,'@@');2:write(output,'@=');3:write(output,'@\'); ! otherwise write(output,xchr[a])end[:76];k:=k+1;end;end;end;}{:74}{84:} ! procedure pushlevel(p:namepointer); begin if stackptr=stacksize then begin writeln(output); ! write(output,'! Sorry, ','stack',' capacity exceeded');error;history:=3; ! jumpout;end else begin stack[stackptr]:=curstate;stackptr:=stackptr+1; ! curstate.namefield:=p;curstate.replfield:=equiv[p]; zo:=curstate.replfield mod 4; curstate.bytefield:=tokstart[curstate.replfield]; ! curstate.endfield:=tokstart[curstate.replfield+4];curstate.modfield:=0; ! end;end;{:84}{85:}procedure poplevel;label 10; ! begin if textlink[curstate.replfield]=0 then begin if ilk[curstate. ! namefield]=3 then{91:}begin nameptr:=nameptr-1;textptr:=textptr-1; ! z:=textptr mod 4;{if tokptr[z]>maxtokptr[z]then maxtokptr[z]:=tokptr[z]; ! }tokptr[z]:=tokstart[textptr]; ! {byteptr[nameptr mod 3]:=byteptr[nameptr mod 3]-1;}end{:91}; ! end else if textlink[curstate.replfield]0 then begin curstate:=stack[stackptr]; zo:=curstate.replfield mod 4;end;10:end;{:85}{87:} ! function getoutput:sixteenbits;label 20,30,31;var a:sixteenbits; ! b:eightbits;bal:sixteenbits;k:0..maxbytes;w:0..2; begin 20:if stackptr=0 then begin a:=0;goto 31;end; ! if curstate.bytefield=curstate.endfield then begin curval:=-curstate. ! modfield;poplevel;if curval=0 then goto 20;a:=129;goto 31;end; ! a:=tokmem[zo,curstate.bytefield]; ! curstate.bytefield:=curstate.bytefield+1;if a<128 then if a=0 then{92:} ! begin pushlevel(nameptr-1);goto 20;end{:92}else goto 31; a:=(a-128)*256+tokmem[zo,curstate.bytefield]; ! curstate.bytefield:=curstate.bytefield+1;if a<10240 then{89:} begin case ilk[a]of 0:begin curval:=a;a:=130;end; ! 1:begin curval:=equiv[a]-32768;a:=128;end;2:begin pushlevel(a);goto 20; ! end;3:begin{90:} ! while(curstate.bytefield=curstate.endfield)and(stackptr>0)do poplevel; ! if(stackptr=0)or(tokmem[zo,curstate.bytefield]<>40)then begin begin ! writeln(output);write(output,'! No parameter given for ');end; ! printid(a);error;goto 20;end;{93:}bal:=1; curstate.bytefield:=curstate.bytefield+1; while true do begin b:=tokmem[zo,curstate.bytefield]; curstate.bytefield:=curstate.bytefield+1; ! if b=0 then storetwobytes(nameptr+32767)else begin if b>=128 then begin ! begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=b;tokptr[z]:=tokptr[z]+1;end; b:=tokmem[zo,curstate.bytefield]; curstate.bytefield:=curstate.bytefield+1; --- 311,376 ---- end[:75]else[76:]case a of 9:write(output,'@',xchr[123]); 10:write(output,'@',xchr[125]);12:write(output,'@'''); ! 13:write(output,'@"');125:write(output,'@$'); ! 0:write(output,'#');64:write(output,'@@'); ! 2:write(output,'@=');3:write(output,'@\'); ! otherwise write(output,xchr[a])end[:76];k:=k+1;end;end; ! end;}{:74}{84:}procedure pushlevel(p:namepointer); begin if stackptr=stacksize then begin writeln(output); ! write(output,'! Sorry, ','stack',' capacity exceeded'); ! error;history:=3;jumpout; ! end else begin stack[stackptr]:=curstate; ! stackptr:=stackptr+1;curstate.namefield:=p; ! curstate.replfield:=equiv[p]; zo:=curstate.replfield mod 4; curstate.bytefield:=tokstart[curstate.replfield]; ! curstate.endfield:=tokstart[curstate.replfield+4]; ! curstate.modfield:=0;end;end;{:84}{85:} ! procedure poplevel;label 10; ! begin if textlink[curstate.replfield]=0 then begin if ilk ! [curstate.namefield]=3 then{91:}begin nameptr:=nameptr-1; ! textptr:=textptr-1;z:=textptr mod 4; ! {if tokptr[z]>maxtokptr[z]then maxtokptr[z]:=tokptr[z];} ! tokptr[z]:=tokstart[textptr]; ! {byteptr[nameptr mod 3]:=byteptr[nameptr mod 3]-1;} ! end{:91}; ! end else if textlink[curstate.replfield]0 then begin curstate:=stack[stackptr]; zo:=curstate.replfield mod 4;end;10:end;{:85}{87:} ! function getoutput:sixteenbits;label 20,30,31; ! var a:sixteenbits;b:eightbits;bal:sixteenbits; ! k:0..maxbytes;w:0..2; begin 20:if stackptr=0 then begin a:=0;goto 31;end; ! if curstate.bytefield=curstate.endfield then begin curval ! :=-curstate.modfield;poplevel;if curval=0 then goto 20; ! a:=129;goto 31;end;a:=tokmem[zo,curstate.bytefield]; ! curstate.bytefield:=curstate.bytefield+1; ! if a<128 then if a=0 then{92:}begin pushlevel(nameptr-1); ! goto 20;end{:92}else goto 31; a:=(a-128)*256+tokmem[zo,curstate.bytefield]; ! curstate.bytefield:=curstate.bytefield+1; ! if a<10240 then{89:} begin case ilk[a]of 0:begin curval:=a;a:=130;end; ! 1:begin curval:=equiv[a]-32768;a:=128;end; ! 2:begin pushlevel(a);goto 20;end;3:begin{90:} ! while(curstate.bytefield=curstate.endfield)and(stackptr>0 ! )do poplevel; ! if(stackptr=0)or(tokmem[zo,curstate.bytefield]<>40)then ! begin begin writeln(output); ! write(output,'! No parameter given for ');end;printid(a); ! error;goto 20;end;{93:}bal:=1; curstate.bytefield:=curstate.bytefield+1; while true do begin b:=tokmem[zo,curstate.bytefield]; curstate.bytefield:=curstate.bytefield+1; ! if b=0 then storetwobytes(nameptr+32767)else begin if b>= ! 128 then begin begin if tokptr[z]=maxtoks then begin ! writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=b; ! tokptr[z]:=tokptr[z]+1;end; b:=tokmem[zo,curstate.bytefield]; curstate.bytefield:=curstate.bytefield+1; *************** *** 294,536 **** end else case b of 40:bal:=bal+1;41:begin bal:=bal-1; if bal=0 then goto 30;end; ! 39:repeat begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=b;tokptr[z]:=tokptr[z]+1;end; b:=tokmem[zo,curstate.bytefield]; ! curstate.bytefield:=curstate.bytefield+1;until b=39;otherwise end; begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=b;tokptr[z]:=tokptr[z]+1;end;end;end; ! 30:{:93};equiv[nameptr]:=textptr;ilk[nameptr]:=2;w:=nameptr mod 3; k:=byteptr[w];{if k=maxbytes then begin writeln(output); ! write(output,'! Sorry, ','byte memory',' capacity exceeded');error; ! history:=3;jumpout;end;bytemem[w,k]:=35;k:=k+1;byteptr[w]:=k;} if nameptr>maxnames-3 then begin writeln(output); ! write(output,'! Sorry, ','name',' capacity exceeded');error;history:=3; ! jumpout;end;bytestart[nameptr+3]:=k;nameptr:=nameptr+1; if textptr>maxtexts-4 then begin writeln(output); ! write(output,'! Sorry, ','text',' capacity exceeded');error;history:=3; ! jumpout;end;textlink[textptr]:=0;tokstart[textptr+4]:=tokptr[z]; ! textptr:=textptr+1;z:=textptr mod 4{:90};pushlevel(a);goto 20;end; otherwise begin writeln(output); ! write(output,'! This can''t happen (','output',')');error;history:=3; ! jumpout;end end;goto 31;end{:89};if a<20480 then{88:}begin a:=a-10240; ! if equiv[a]<>0 then pushlevel(a)else if a<>0 then begin begin writeln( ! output);write(output,'! Not present: <');end;printid(a); ! write(output,'>');error;end;goto 20;end{:88};curval:=a-20480;a:=129; ! curstate.modfield:=curval;31:{if troubleshooting then debughelp;} ! getoutput:=a;end;{:87}{97:}procedure flushbuffer;var k:0..outbufsize; b:0..outbufsize;begin b:=breakptr; ! if(semiptr<>0)and(outptr-semiptr<=linelength)then breakptr:=semiptr; ! linewrite(Pascalfile,breakptr);writeln(Pascalfile);line:=line+1; if line mod 100=0 then begin write(output,'.'); ! if line mod 500=0 then write(output,line:1);flush(output);end; ! if breakptrb then b:=breakptr;end; ! for k:=breakptr to outptr-1 do outbuf[k-breakptr]:=outbuf[k];end; ! outptr:=outptr-breakptr;breakptr:=b-breakptr;semiptr:=0; if outptr>linelength then begin begin writeln(output); write(output,'! Long line must be truncated');error;end; ! outptr:=linelength;end;end;{:97}{99:}procedure appval(v:integer); ! var k:0..outbufsize;begin k:=outbufsize;repeat outbuf[k]:=v mod 10; v:=v div 10;k:=k-1;until v=0;repeat k:=k+1; begin outbuf[outptr]:=outbuf[k]+48;outptr:=outptr+1;end; ! until k=outbufsize;end;{:99}{101:}procedure sendout(t:eightbits; ! v:sixteenbits);label 20;var k:0..linelength;begin{102:} ! 20:case outstate of 1:if t<>3 then begin breakptr:=outptr; ! if t=2 then begin outbuf[outptr]:=32;outptr:=outptr+1;end;end; ! 2:begin begin outbuf[outptr]:=44-outapp;outptr:=outptr+1;end; ! if outptr>linelength then flushbuffer;breakptr:=outptr;end; ! 3,4:begin{103:} ! if(outval<0)or((outval=0)and(lastsign<0))then begin outbuf[outptr]:=45; ! outptr:=outptr+1; end else if outsign>0 then begin outbuf[outptr]:=outsign; outptr:=outptr+1;end;appval(abs(outval)); ! if outptr>linelength then flushbuffer;{:103};outstate:=outstate-2; ! goto 20;end;5:{104:}begin if(t=3)or({105:} ! ((t=2)and(v=3)and(((outcontrib[1]=68)and(outcontrib[2]=73)and(outcontrib ! [3]=86))or((outcontrib[1]=100)and(outcontrib[2]=105)and(outcontrib[3]= ! 118))or((outcontrib[1]=77)and(outcontrib[2]=79)and(outcontrib[3]=68))or( ! (outcontrib[1]=109)and(outcontrib[2]=111)and(outcontrib[3]=100))))or((t= ! 0)and((v=42)or(v=47))){:105})then begin{103:} ! if(outval<0)or((outval=0)and(lastsign<0))then begin outbuf[outptr]:=45; ! outptr:=outptr+1; end else if outsign>0 then begin outbuf[outptr]:=outsign; outptr:=outptr+1;end;appval(abs(outval)); ! if outptr>linelength then flushbuffer;{:103};outsign:=43;outval:=outapp; ! end else outval:=outval+outapp;outstate:=3;goto 20;end{:104}; 0:if t<>3 then breakptr:=outptr;otherwise end{:102}; ! if t<>0 then for k:=1 to v do begin outbuf[outptr]:=outcontrib[k]; ! outptr:=outptr+1;end else begin outbuf[outptr]:=v;outptr:=outptr+1;end; if outptr>linelength then flushbuffer; ! if(t=0)and((v=59)or(v=125))then begin semiptr:=outptr;breakptr:=outptr; ! end;if t>=2 then outstate:=1 else outstate:=0 end;{:101}{106:} ! procedure sendsign(v:integer); ! begin case outstate of 2,4:outapp:=outapp*v;3:begin outapp:=v; ! outstate:=4;end;5:begin outval:=outval+outapp;outapp:=v;outstate:=4;end; ! otherwise begin breakptr:=outptr;outapp:=v;outstate:=2;end end; ! lastsign:=outapp;end;{:106}{107:}procedure sendval(v:integer); ! label 666,10;begin case outstate of 1:begin{110:} ! if(outptr=breakptr+3)or((outptr=breakptr+4)and(outbuf[breakptr]=32))then ! if((outbuf[outptr-3]=68)and(outbuf[outptr-2]=73)and(outbuf[outptr-1]=86) ! )or((outbuf[outptr-3]=100)and(outbuf[outptr-2]=105)and(outbuf[outptr-1]= ! 118))or((outbuf[outptr-3]=77)and(outbuf[outptr-2]=79)and(outbuf[outptr-1 ! ]=68))or((outbuf[outptr-3]=109)and(outbuf[outptr-2]=111)and(outbuf[ ! outptr-1]=100))then goto 666{:110};outsign:=32;outstate:=3;outval:=v; breakptr:=outptr;lastsign:=+1;end;0:begin{109:} ! if(outptr=breakptr+1)and((outbuf[breakptr]=42)or(outbuf[breakptr]=47)) ! then goto 666{:109};outsign:=0;outstate:=3;outval:=v;breakptr:=outptr; ! lastsign:=+1;end;{108:}2:begin outsign:=43;outstate:=3;outval:=outapp*v; ! end;3:begin outstate:=5;outapp:=v;begin writeln(output); ! write(output,'! Two numbers occurred without a sign between them'); error;end;end;4:begin outstate:=5;outapp:=outapp*v;end; ! 5:begin outval:=outval+outapp;outapp:=v;begin writeln(output); ! write(output,'! Two numbers occurred without a sign between them'); ! error;end;end;{:108}otherwise goto 666 end;goto 10;666:{111:} ! if v>=0 then begin if outstate=1 then begin breakptr:=outptr; ! begin outbuf[outptr]:=32;outptr:=outptr+1;end;end;appval(v); ! if outptr>linelength then flushbuffer;outstate:=1; ! end else begin begin outbuf[outptr]:=40;outptr:=outptr+1;end; ! begin outbuf[outptr]:=45;outptr:=outptr+1;end;appval(-v); ! begin outbuf[outptr]:=41;outptr:=outptr+1;end; ! if outptr>linelength then flushbuffer;outstate:=0;end{:111};10:end; ! {:107}{113:}procedure sendtheoutput;label 2,21,22;var curchar:eightbits; ! k:0..linelength;j:0..maxbytes;w:0..2;n:integer; begin while stackptr>0 do begin curchar:=getoutput; 21:case curchar of 0:;{116:} ! 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88, ! 89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113, ! 114,115,116,117,118,119,120,121,122:begin outcontrib[1]:=curchar; ! sendout(2,1);end;130:begin k:=0;j:=bytestart[curval];w:=curval mod 3; ! while(k=214748364 then begin writeln(output); ! write(output,'! Constant too big');error;end else n:=10*n+curchar; ! curchar:=getoutput;until(curchar>57)or(curchar<48);sendval(n);k:=0; ! if curchar=101 then curchar:=69;if curchar=69 then goto 2 else goto 21; ! end;125:sendval(poolchecksum);12:begin n:=0;curchar:=48; ! repeat curchar:=curchar-48;if n>=268435456 then begin writeln(output); ! write(output,'! Constant too big');error;end else n:=8*n+curchar; ! curchar:=getoutput;until(curchar>55)or(curchar<48);sendval(n);goto 21; ! end;13:begin n:=0;curchar:=48; ! repeat if curchar>=65 then curchar:=curchar-55 else curchar:=curchar-48; if n>=134217728 then begin writeln(output); ! write(output,'! Constant too big');error;end else n:=16*n+curchar; ! curchar:=getoutput; ! until(curchar>70)or(curchar<48)or((curchar>57)and(curchar<65)); ! sendval(n);goto 21;end;128:sendval(curval);46:begin k:=1; ! outcontrib[1]:=46;curchar:=getoutput; if curchar=46 then begin outcontrib[2]:=46;sendout(1,2); ! end else if(curchar>=48)and(curchar<=57)then goto 2 else begin sendout(0 ! ,46);goto 21;end;end;{:119}43,45:sendsign(44-curchar);{114:} ! 4:begin outcontrib[1]:=97;outcontrib[2]:=110;outcontrib[3]:=100; ! sendout(2,3);end;5:begin outcontrib[1]:=110;outcontrib[2]:=111; ! outcontrib[3]:=116;sendout(2,3);end;6:begin outcontrib[1]:=105; ! outcontrib[2]:=110;sendout(2,2);end;31:begin outcontrib[1]:=111; ! outcontrib[2]:=114;sendout(2,2);end;24:begin outcontrib[1]:=58; ! outcontrib[2]:=61;sendout(1,2);end;26:begin outcontrib[1]:=60; ! outcontrib[2]:=62;sendout(1,2);end;28:begin outcontrib[1]:=60; ! outcontrib[2]:=61;sendout(1,2);end;29:begin outcontrib[1]:=62; ! outcontrib[2]:=61;sendout(1,2);end;30:begin outcontrib[1]:=61; ! outcontrib[2]:=61;sendout(1,2);end;32:begin outcontrib[1]:=46; ! outcontrib[2]:=46;sendout(1,2);end;{:114}39:{117:}begin k:=1; outcontrib[1]:=39;repeat if k0 then begin bracelevel:=bracelevel-1; if bracelevel=0 then sendout(0,125)else sendout(0,93); ! end else begin writeln(output);write(output,'! Extra @}');error;end; ! 129:begin if bracelevel=0 then sendout(0,123)else sendout(0,91); ! if curval<0 then begin sendout(0,58);sendval(-curval); ! end else begin sendval(curval);sendout(0,58);end; ! if bracelevel=0 then sendout(0,125)else sendout(0,93);end;{:121} ! 127:begin sendout(3,0);outstate:=6;end;2:{118:}begin k:=0; ! repeat if k0 do begin if outptr<=linelength then breakptr:=outptr; ! flushbuffer;end;outstate:=0;end{:122};otherwise begin writeln(output); ! write(output,'! Can''t output ASCII code ',curchar:1);error;end end; ! goto 22;2:{120:}repeat if k69)and((curchar<48)or(curchar>57)); if k=linelength then begin writeln(output); ! write(output,'! Fraction too long');error;end;sendout(3,k);goto 21{:120} ! ;22:end;end;{:113}{127:}function linesdontmatch:boolean;label 10; var k:0..bufsize;begin linesdontmatch:=true; if changelimit<>limit then goto 10; ! if limit>0 then for k:=0 to limit-1 do if changebuffer[k]<>buffer[k]then ! goto 10;linesdontmatch:=false;10:end;{:127}{128:} ! procedure primethechangebuffer;label 22,30,10;var k:0..bufsize; ! begin changelimit:=0;{129:}while true do begin line:=line+1; ! if not inputln(changefile)then goto 10;if limit<2 then goto 22; ! if buffer[0]<>64 then goto 22; ! if(buffer[1]>=88)and(buffer[1]<=90)then buffer[1]:=buffer[1]+32; ! if buffer[1]=120 then goto 30; if(buffer[1]=121)or(buffer[1]=122)then begin loc:=2; ! begin writeln(output);write(output,'! Where is the matching @x?');error; ! end;end;22:end;30:{:129};{130:}repeat line:=line+1; ! if not inputln(changefile)then begin begin writeln(output); ! write(output,'! Change file ended after @x');error;end;goto 10;end; ! until limit>0;{:130};{131:}begin changelimit:=limit; ! if limit>0 then for k:=0 to limit-1 do changebuffer[k]:=buffer[k]; ! end{:131};10:end;{:128}{132:}procedure checkchange;label 10; ! var n:integer;k:0..bufsize;begin if linesdontmatch then goto 10;n:=0; ! while true do begin changing:=not changing;templine:=otherline; ! otherline:=line;line:=templine;line:=line+1; ! if not inputln(changefile)then begin begin writeln(output); ! write(output,'! Change file ended before @y');error;end;changelimit:=0; ! changing:=not changing;templine:=otherline;otherline:=line; ! line:=templine;goto 10;end;{133:} ! if limit>1 then if buffer[0]=64 then begin if(buffer[1]>=88)and(buffer[1 ! ]<=90)then buffer[1]:=buffer[1]+32; if(buffer[1]=120)or(buffer[1]=122)then begin loc:=2; - begin writeln(output);write(output,'! Where is the matching @y?');error; - end;end else if buffer[1]=121 then begin if n>0 then begin loc:=2; begin writeln(output); ! write(output,'! Hmm... ',n:1,' of the preceding lines failed to match'); ! error;end;end;goto 10;end;end{:133};{131:}begin changelimit:=limit; ! if limit>0 then for k:=0 to limit-1 do changebuffer[k]:=buffer[k]; ! end{:131};changing:=not changing;templine:=otherline;otherline:=line; ! line:=templine;line:=line+1; if not inputln(webfile)then begin begin writeln(output); ! write(output,'! WEB file ended during a change');error;end; ! inputhasended:=true;goto 10;end;if linesdontmatch then n:=n+1;end; ! 10:end;{:132}{135:}procedure getline;label 20; begin 20:if changing then{137:}begin line:=line+1; ! if not inputln(changefile)then begin begin writeln(output); ! write(output,'! Change file ended without @z');error;end;buffer[0]:=64; ! buffer[1]:=122;limit:=2;end; ! if limit>1 then if buffer[0]=64 then begin if(buffer[1]>=88)and(buffer[1 ! ]<=90)then buffer[1]:=buffer[1]+32; if(buffer[1]=120)or(buffer[1]=121)then begin loc:=2; ! begin writeln(output);write(output,'! Where is the matching @z?');error; ! end;end else if buffer[1]=122 then begin primethechangebuffer; ! changing:=not changing;templine:=otherline;otherline:=line; ! line:=templine;end;end;end{:137};if not changing then begin{136:} ! begin line:=line+1; ! if not inputln(webfile)then inputhasended:=true else if limit= ! changelimit then if buffer[0]=changebuffer[0]then if changelimit>0 then ! checkchange;end{:136};if changing then goto 20;end;loc:=0; ! buffer[limit]:=32;end;{:135}{139:} function controlcode(c:ASCIIcode):eightbits; begin case c of 64:controlcode:=64;39:controlcode:=12; ! 34:controlcode:=13;36:controlcode:=125;32,9:controlcode:=136; 42:begin write(output,'*',modulecount+1:1);flush(output); ! controlcode:=136;end;68,100:controlcode:=133;70,102:controlcode:=132; ! 123:controlcode:=9;125:controlcode:=10;80,112:controlcode:=134; 84,116,94,46,58:controlcode:=131;38:controlcode:=127; 60:controlcode:=135;61:controlcode:=2;92:controlcode:=3; --- 377,688 ---- end else case b of 40:bal:=bal+1;41:begin bal:=bal-1; if bal=0 then goto 30;end; ! 39:repeat begin if tokptr[z]=maxtoks then begin writeln( ! output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=b; ! tokptr[z]:=tokptr[z]+1;end; b:=tokmem[zo,curstate.bytefield]; ! curstate.bytefield:=curstate.bytefield+1;until b=39; ! otherwise end; begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=b; ! tokptr[z]:=tokptr[z]+1;end;end;end;30:{:93}; ! equiv[nameptr]:=textptr;ilk[nameptr]:=2;w:=nameptr mod 3; k:=byteptr[w];{if k=maxbytes then begin writeln(output); ! write(output,'! Sorry, ','byte memory', ! ' capacity exceeded');error;history:=3;jumpout;end; ! bytemem[w,k]:=35;k:=k+1;byteptr[w]:=k;} if nameptr>maxnames-3 then begin writeln(output); ! write(output,'! Sorry, ','name',' capacity exceeded'); ! error;history:=3;jumpout;end;bytestart[nameptr+3]:=k; ! nameptr:=nameptr+1; if textptr>maxtexts-4 then begin writeln(output); ! write(output,'! Sorry, ','text',' capacity exceeded'); ! error;history:=3;jumpout;end;textlink[textptr]:=0; ! tokstart[textptr+4]:=tokptr[z];textptr:=textptr+1; ! z:=textptr mod 4{:90};pushlevel(a);goto 20;end; otherwise begin writeln(output); ! write(output,'! This can''t happen (','output',')'); ! error;history:=3;jumpout;end end;goto 31;end{:89}; ! if a<20480 then{88:}begin a:=a-10240; ! if equiv[a]<>0 then pushlevel(a)else if a<>0 then begin ! begin writeln(output);write(output,'! Not present: <'); ! end;printid(a);write(output,'>');error;end;goto 20; ! end{:88};curval:=a-20480;a:=129; ! curstate.modfield:=curval; ! 31:{if troubleshooting then debughelp;}getoutput:=a;end; ! {:87}{97:}procedure flushbuffer;var k:0..outbufsize; b:0..outbufsize;begin b:=breakptr; ! if(semiptr<>0)and(outptr-semiptr<=linelength)then ! breakptr:=semiptr;linewrite(Pascalfile,breakptr); ! writeln(Pascalfile);line:=line+1; if line mod 100=0 then begin write(output,'.'); ! if line mod 500=0 then write(output,line:1); ! flush(output);end; ! if breakptrb then b:=breakptr;end; ! for k:=breakptr to outptr-1 do outbuf[k-breakptr]:=outbuf ! [k];end;outptr:=outptr-breakptr;breakptr:=b-breakptr; ! semiptr:=0; if outptr>linelength then begin begin writeln(output); write(output,'! Long line must be truncated');error;end; ! outptr:=linelength;end;end;{:97}{99:} ! procedure appval(v:integer);var k:0..outbufsize; ! begin k:=outbufsize;repeat outbuf[k]:=v mod 10; v:=v div 10;k:=k-1;until v=0;repeat k:=k+1; begin outbuf[outptr]:=outbuf[k]+48;outptr:=outptr+1;end; ! until k=outbufsize;end;{:99}{101:} ! procedure sendout(t:eightbits;v:sixteenbits);label 20; ! var k:0..linelength;begin{102:} ! 20:case outstate of 1:if t<>3 then begin breakptr:=outptr ! ;if t=2 then begin outbuf[outptr]:=32;outptr:=outptr+1; ! end;end;2:begin begin outbuf[outptr]:=44-outapp; ! outptr:=outptr+1;end; ! if outptr>linelength then flushbuffer;breakptr:=outptr; ! end;3,4:begin{103:} ! if(outval<0)or((outval=0)and(lastsign<0))then begin ! outbuf[outptr]:=45;outptr:=outptr+1; end else if outsign>0 then begin outbuf[outptr]:=outsign; outptr:=outptr+1;end;appval(abs(outval)); ! if outptr>linelength then flushbuffer;{:103}; ! outstate:=outstate-2;goto 20;end;5:{104:} ! begin if(t=3)or({105:} ! ((t=2)and(v=3)and(((outcontrib[1]=68)and(outcontrib[2]=73 ! )and(outcontrib[3]=86))or((outcontrib[1]=100)and( ! outcontrib[2]=105)and(outcontrib[3]=118))or((outcontrib[1 ! ]=77)and(outcontrib[2]=79)and(outcontrib[3]=68))or(( ! outcontrib[1]=109)and(outcontrib[2]=111)and(outcontrib[3] ! =100))))or((t=0)and((v=42)or(v=47))){:105} ! )then begin{103:} ! if(outval<0)or((outval=0)and(lastsign<0))then begin ! outbuf[outptr]:=45;outptr:=outptr+1; end else if outsign>0 then begin outbuf[outptr]:=outsign; outptr:=outptr+1;end;appval(abs(outval)); ! if outptr>linelength then flushbuffer;{:103};outsign:=43; ! outval:=outapp;end else outval:=outval+outapp; ! outstate:=3;goto 20;end{:104}; 0:if t<>3 then breakptr:=outptr;otherwise end{:102}; ! if t<>0 then for k:=1 to v do begin outbuf[outptr]:= ! outcontrib[k];outptr:=outptr+1; ! end else begin outbuf[outptr]:=v;outptr:=outptr+1;end; if outptr>linelength then flushbuffer; ! if(t=0)and((v=59)or(v=125))then begin semiptr:=outptr; ! breakptr:=outptr;end; ! if t>=2 then outstate:=1 else outstate:=0 end;{:101} ! {106:}procedure sendsign(v:integer); ! begin case outstate of 2,4:outapp:=outapp*v; ! 3:begin outapp:=v;outstate:=4;end; ! 5:begin outval:=outval+outapp;outapp:=v;outstate:=4;end; ! otherwise begin breakptr:=outptr;outapp:=v;outstate:=2; ! end end;lastsign:=outapp;end;{:106}{107:} ! procedure sendval(v:integer);label 666,10; ! begin case outstate of 1:begin{110:} ! if(outptr=breakptr+3)or((outptr=breakptr+4)and(outbuf[ ! breakptr]=32))then if((outbuf[outptr-3]=68)and(outbuf[ ! outptr-2]=73)and(outbuf[outptr-1]=86))or((outbuf[outptr-3 ! ]=77)and(outbuf[outptr-2]=79)and(outbuf[outptr-1]=68)) ! then goto 666{:110};outsign:=32;outstate:=3;outval:=v; breakptr:=outptr;lastsign:=+1;end;0:begin{109:} ! if(outptr=breakptr+1)and((outbuf[breakptr]=42)or(outbuf[ ! breakptr]=47))then goto 666{:109};outsign:=0;outstate:=3; ! outval:=v;breakptr:=outptr;lastsign:=+1;end;{108:} ! 2:begin outsign:=43;outstate:=3;outval:=outapp*v;end; ! 3:begin outstate:=5;outapp:=v;begin writeln(output); ! write(output, ! '! Two numbers occurred without a sign between them'); error;end;end;4:begin outstate:=5;outapp:=outapp*v;end; ! 5:begin outval:=outval+outapp;outapp:=v; ! begin writeln(output);write(output, ! '! Two numbers occurred without a sign between them'); ! error;end;end;{:108}otherwise goto 666 end;goto 10; ! 666:{111:} ! if v>=0 then begin if outstate=1 then begin breakptr:= ! outptr;begin outbuf[outptr]:=32;outptr:=outptr+1;end;end; ! appval(v);if outptr>linelength then flushbuffer; ! outstate:=1;end else begin begin outbuf[outptr]:=40; ! outptr:=outptr+1;end;begin outbuf[outptr]:=45; ! outptr:=outptr+1;end;appval(-v);begin outbuf[outptr]:=41; ! outptr:=outptr+1;end; ! if outptr>linelength then flushbuffer;outstate:=0; ! end{:111};10:end;{:107}{113:}procedure sendtheoutput; ! label 2,21,22;var curchar:eightbits;k:0..linelength; ! j:0..maxbytes;w:0..2;n:integer; begin while stackptr>0 do begin curchar:=getoutput; 21:case curchar of 0:;{116:} ! 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83, ! 84,85,86,87,88,89,90:begin outcontrib[1]:=curchar; ! sendout(2,1);end; ! 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, ! 112,113,114,115,116,117,118,119,120,121,122:begin ! outcontrib[1]:=curchar-32;sendout(2,1);end; ! 130:begin k:=0;j:=bytestart[curval];w:=curval mod 3; ! while(k=97 then outcontrib[k]:=outcontrib[k]-32 ! else if outcontrib[k]=95 then k:=k-1;end;sendout(2,k); ! end;{:116}{119:}48,49,50,51,52,53,54,55,56,57:begin n:=0; ! repeat curchar:=curchar-48; ! if n>=214748364 then begin writeln(output); ! write(output,'! Constant too big');error; ! end else n:=10*n+curchar;curchar:=getoutput; ! until(curchar>57)or(curchar<48);sendval(n);k:=0; ! if curchar=101 then curchar:=69; ! if curchar=69 then goto 2 else goto 21;end; ! 125:sendval(poolchecksum);12:begin n:=0;curchar:=48; ! repeat curchar:=curchar-48; ! if n>=268435456 then begin writeln(output); ! write(output,'! Constant too big');error; ! end else n:=8*n+curchar;curchar:=getoutput; ! until(curchar>55)or(curchar<48);sendval(n);goto 21;end; ! 13:begin n:=0;curchar:=48; ! repeat if curchar>=65 then curchar:=curchar-55 else ! curchar:=curchar-48; if n>=134217728 then begin writeln(output); ! write(output,'! Constant too big');error; ! end else n:=16*n+curchar;curchar:=getoutput; ! until(curchar>70)or(curchar<48)or((curchar>57)and(curchar ! <65));sendval(n);goto 21;end;128:sendval(curval); ! 46:begin k:=1;outcontrib[1]:=46;curchar:=getoutput; if curchar=46 then begin outcontrib[2]:=46;sendout(1,2); ! end else if(curchar>=48)and(curchar<=57)then goto 2 else ! begin sendout(0,46);goto 21;end;end;{:119} ! 43,45:sendsign(44-curchar);{114:} ! 4:begin outcontrib[1]:=65;outcontrib[2]:=78; ! outcontrib[3]:=68;sendout(2,3);end; ! 5:begin outcontrib[1]:=78;outcontrib[2]:=79; ! outcontrib[3]:=84;sendout(2,3);end; ! 6:begin outcontrib[1]:=73;outcontrib[2]:=78;sendout(2,2); ! end;31:begin outcontrib[1]:=79;outcontrib[2]:=82; ! sendout(2,2);end;24:begin outcontrib[1]:=58; ! outcontrib[2]:=61;sendout(1,2);end; ! 26:begin outcontrib[1]:=60;outcontrib[2]:=62; ! sendout(1,2);end;28:begin outcontrib[1]:=60; ! outcontrib[2]:=61;sendout(1,2);end; ! 29:begin outcontrib[1]:=62;outcontrib[2]:=61; ! sendout(1,2);end;30:begin outcontrib[1]:=61; ! outcontrib[2]:=61;sendout(1,2);end; ! 32:begin outcontrib[1]:=46;outcontrib[2]:=46; ! sendout(1,2);end;{:114}39:{117:}begin k:=1; outcontrib[1]:=39;repeat if k0 then begin bracelevel:=bracelevel-1; if bracelevel=0 then sendout(0,125)else sendout(0,93); ! end else begin writeln(output); ! write(output,'! Extra @}');error;end; ! 129:begin if bracelevel=0 then sendout(0,123)else sendout ! (0,91);if curval<0 then begin sendout(0,58); ! sendval(-curval);end else begin sendval(curval); ! sendout(0,58);end; ! if bracelevel=0 then sendout(0,125)else sendout(0,93); ! end;{:121}127:begin sendout(3,0);outstate:=6;end;2:{118:} ! begin k:=0;repeat if k0 do begin if outptr<=linelength then ! breakptr:=outptr;flushbuffer;end;outstate:=0;end{:122}; ! otherwise begin writeln(output); ! write(output,'! Can''t output ASCII code ',curchar:1); ! error;end end;goto 22;2:{120:} ! repeat if k69)and((curchar<48)or(curchar>57)); if k=linelength then begin writeln(output); ! write(output,'! Fraction too long');error;end; ! sendout(3,k);goto 21{:120};22:end;end;{:113}{127:} ! function linesdontmatch:boolean;label 10; var k:0..bufsize;begin linesdontmatch:=true; if changelimit<>limit then goto 10; ! if limit>0 then for k:=0 to limit-1 do if changebuffer[k] ! <>buffer[k]then goto 10;linesdontmatch:=false;10:end; ! {:127}{128:}procedure primethechangebuffer; ! label 22,30,10;var k:0..bufsize;begin changelimit:=0; ! {129:}while true do begin line:=line+1; ! if not inputln(changefile)then goto 10; ! if limit<2 then goto 22;if buffer[0]<>64 then goto 22; ! if(buffer[1]>=88)and(buffer[1]<=90)then buffer[1]:=buffer ! [1]+32;if buffer[1]=120 then goto 30; if(buffer[1]=121)or(buffer[1]=122)then begin loc:=2; ! begin writeln(output); ! write(output,'! Where is the matching @x?');error;end; ! end;22:end;30:{:129};{130:}repeat line:=line+1; ! if not inputln(changefile)then begin begin writeln(output ! );write(output,'! Change file ended after @x');error;end; ! goto 10;end;until limit>0;{:130};{131:} ! begin changelimit:=limit; ! if limit>0 then for k:=0 to limit-1 do changebuffer[k]:= ! buffer[k];end{:131};10:end;{:128}{132:} ! procedure checkchange;label 10;var n:integer; ! k:0..bufsize;begin if linesdontmatch then goto 10;n:=0; ! while true do begin changing:=not changing; ! templine:=otherline;otherline:=line;line:=templine; ! line:=line+1; ! if not inputln(changefile)then begin begin writeln(output ! );write(output,'! Change file ended before @y');error; ! end;changelimit:=0;changing:=not changing; ! templine:=otherline;otherline:=line;line:=templine; ! goto 10;end;{133:} ! if limit>1 then if buffer[0]=64 then begin if(buffer[1]>= ! 88)and(buffer[1]<=90)then buffer[1]:=buffer[1]+32; if(buffer[1]=120)or(buffer[1]=122)then begin loc:=2; begin writeln(output); ! write(output,'! Where is the matching @y?');error;end; ! end else if buffer[1]=121 then begin if n>0 then begin ! loc:=2;begin writeln(output); ! write(output,'! Hmm... ',n:1, ! ' of the preceding lines failed to match');error;end;end; ! goto 10;end;end{:133};{131:}begin changelimit:=limit; ! if limit>0 then for k:=0 to limit-1 do changebuffer[k]:= ! buffer[k];end{:131};changing:=not changing; ! templine:=otherline;otherline:=line;line:=templine; ! line:=line+1; if not inputln(webfile)then begin begin writeln(output); ! write(output,'! WEB file ended during a change');error; ! end;inputhasended:=true;goto 10;end; ! if linesdontmatch then n:=n+1;end;10:end;{:132}{135:} ! procedure getline;label 20; begin 20:if changing then{137:}begin line:=line+1; ! if not inputln(changefile)then begin begin writeln(output ! );write(output,'! Change file ended without @z');error; ! end;buffer[0]:=64;buffer[1]:=122;limit:=2;end; ! if limit>1 then if buffer[0]=64 then begin if(buffer[1]>= ! 88)and(buffer[1]<=90)then buffer[1]:=buffer[1]+32; if(buffer[1]=120)or(buffer[1]=121)then begin loc:=2; ! begin writeln(output); ! write(output,'! Where is the matching @z?');error;end; ! end else if buffer[1]=122 then begin primethechangebuffer ! ;changing:=not changing;templine:=otherline; ! otherline:=line;line:=templine;end;end;end{:137}; ! if not changing then begin{136:}begin line:=line+1; ! if not inputln(webfile)then inputhasended:=true else if ! limit=changelimit then if buffer[0]=changebuffer[0]then ! if changelimit>0 then checkchange;end{:136}; ! if changing then goto 20;end;loc:=0;buffer[limit]:=32; ! end;{:135}{139:} function controlcode(c:ASCIIcode):eightbits; begin case c of 64:controlcode:=64;39:controlcode:=12; ! 34:controlcode:=13;36:controlcode:=125; ! 32,9:controlcode:=136; 42:begin write(output,'*',modulecount+1:1);flush(output); ! controlcode:=136;end;68,100:controlcode:=133; ! 70,102:controlcode:=132;123:controlcode:=9; ! 125:controlcode:=10;80,112:controlcode:=134; 84,116,94,46,58:controlcode:=131;38:controlcode:=127; 60:controlcode:=135;61:controlcode:=2;92:controlcode:=3; *************** *** 537,761 **** otherwise controlcode:=0 end;end;{:139}{140:} function skipahead:eightbits;label 30;var c:eightbits; ! begin while true do begin if loc>limit then begin getline; ! if inputhasended then begin c:=136;goto 30;end;end;buffer[limit+1]:=64; ! while buffer[loc]<>64 do loc:=loc+1;if loc<=limit then begin loc:=loc+2; ! c:=controlcode(buffer[loc-1]);if(c<>0)or(buffer[loc-1]=62)then goto 30; ! end;end;30:skipahead:=c;end;{:140}{141:}procedure skipcomment;label 10; ! var bal:eightbits;c:ASCIIcode;begin bal:=0; while true do begin if loc>limit then begin getline; if inputhasended then begin begin writeln(output); ! write(output,'! Input ended in mid-comment');error;end;goto 10;end;end; ! c:=buffer[loc];loc:=loc+1;{142:}if c=64 then begin c:=buffer[loc]; ! if(c<>32)and(c<>9)and(c<>42)and(c<>122)and(c<>90)then loc:=loc+1 else ! begin begin writeln(output); ! write(output,'! Section ended in mid-comment');error;end;loc:=loc-1; ! goto 10; ! end end else if(c=92)and(buffer[loc]<>64)then loc:=loc+1 else if c=123 ! then bal:=bal+1 else if c=125 then begin if bal=0 then goto 10; ! bal:=bal-1;end{:142};end;10:end;{:141}{145:}function getnext:eightbits; ! label 20,30,31;var c:eightbits;d:eightbits;j,k:0..longestname; begin 20:if loc>limit then begin getline; ! if inputhasended then begin c:=136;goto 31;end;end;c:=buffer[loc]; ! loc:=loc+1;if scanninghex then{146:} ! if((c>=48)and(c<=57))or((c>=65)and(c<=70))then goto 31 else scanninghex ! :=false{:146}; ! case c of 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85 ! ,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 ! ,112,113,114,115,116,117,118,119,120,121,122:{148:} ! begin if((c=101)or(c=69))and(loc>1)then if(buffer[loc-2]<=57)and(buffer[ ! loc-2]>=48)then c:=0;if c<>0 then begin loc:=loc-1;idfirst:=loc; repeat loc:=loc+1;d:=buffer[loc]; ! until((d<48)or((d>57)and(d<65))or((d>90)and(d<97))or(d>122))and(d<>95); ! if loc>idfirst+1 then begin c:=130;idloc:=loc;end;end else c:=69; ! end{:148};34:{149:}begin doublechars:=0;idfirst:=loc-1; repeat d:=buffer[loc];loc:=loc+1; ! if(d=34)or(d=64)then if buffer[loc]=d then begin loc:=loc+1;d:=0; ! doublechars:=doublechars+1; end else begin if d=64 then begin writeln(output); write(output,'! Double @ sign missing');error; ! end end else if loc>limit then begin begin writeln(output); ! write(output,'! String constant didn''t end');error;end;d:=34;end; ! until d=34;idloc:=loc-1;c:=130;end{:149};64:{150:} ! begin c:=controlcode(buffer[loc]);loc:=loc+1; ! if c=0 then goto 20 else if c=13 then scanninghex:=true else if c=135 ! then{151:}begin{153:}k:=0; while true do begin if loc>limit then begin getline; if inputhasended then begin begin writeln(output); ! write(output,'! Input ended in section name');error;end;goto 30;end;end; ! d:=buffer[loc];{154:}if d=64 then begin d:=buffer[loc+1]; if d=62 then begin loc:=loc+2;goto 30;end; if(d=32)or(d=9)or(d=42)then begin begin writeln(output); ! write(output,'! Section name didn''t end');error;end;goto 30;end;k:=k+1; ! modtext[k]:=64;loc:=loc+1;end{:154};loc:=loc+1; ! if k=longestname-2 then begin begin writeln(output); write(output,'! Section name too long: ');end; ! for j:=1 to 25 do write(output,xchr[modtext[j]]);write(output,'...'); ! if history=0 then history:=1;end{:155}; ! if(modtext[k]=32)and(k>0)then k:=k-1;{:153}; ! if k>3 then begin if(modtext[k]=46)and(modtext[k-1]=46)and(modtext[k-2]= ! 46)then curmodule:=prefixlookup(k-3)else curmodule:=modlookup(k); ! end else curmodule:=modlookup(k);end{:151} ! else if c=131 then begin repeat c:=skipahead;until c<>64; if buffer[loc-1]<>62 then begin writeln(output); ! write(output,'! Improper @ within control text');error;end;goto 20;end; ! end{:150};{147:} ! 46:if buffer[loc]=46 then begin if loc<=limit then begin c:=32; ! loc:=loc+1;end; ! end else if buffer[loc]=41 then begin if loc<=limit then begin c:=93; ! loc:=loc+1;end;end; ! 58:if buffer[loc]=61 then begin if loc<=limit then begin c:=24; ! loc:=loc+1;end;end; ! 61:if buffer[loc]=61 then begin if loc<=limit then begin c:=30; ! loc:=loc+1;end;end; ! 62:if buffer[loc]=61 then begin if loc<=limit then begin c:=29; ! loc:=loc+1;end;end; ! 60:if buffer[loc]=61 then begin if loc<=limit then begin c:=28; ! loc:=loc+1;end; ! end else if buffer[loc]=62 then begin if loc<=limit then begin c:=26; ! loc:=loc+1;end;end; ! 40:if buffer[loc]=42 then begin if loc<=limit then begin c:=9; ! loc:=loc+1;end; ! end else if buffer[loc]=46 then begin if loc<=limit then begin c:=91; ! loc:=loc+1;end;end; ! 42:if buffer[loc]=41 then begin if loc<=limit then begin c:=10; ! loc:=loc+1;end;end;{:147}32,9:goto 20;123:begin skipcomment;goto 20;end; otherwise if c>=128 then goto 20 else end; ! 31:{if troubleshooting then debughelp;}getnext:=c;end;{:145}{157:} ! procedure scannumeric(p:namepointer);label 21,30; ! var accumulator:integer;nextsign:-1..+1;q:namepointer;val:integer; ! begin{158:}accumulator:=0;nextsign:=+1; ! while true do begin nextcontrol:=getnext; ! 21:case nextcontrol of 48,49,50,51,52,53,54,55,56,57:begin{160:}val:=0; ! repeat val:=10*val+nextcontrol-48;nextcontrol:=getnext; until(nextcontrol>57)or(nextcontrol<48){:160}; ! begin accumulator:=accumulator+nextsign*(val);nextsign:=+1;end;goto 21; ! end;12:begin{161:}val:=0;nextcontrol:=48; ! repeat val:=8*val+nextcontrol-48;nextcontrol:=getnext; until(nextcontrol>55)or(nextcontrol<48){:161}; ! begin accumulator:=accumulator+nextsign*(val);nextsign:=+1;end;goto 21; ! end;13:begin{162:}val:=0;nextcontrol:=48; ! repeat if nextcontrol>=65 then nextcontrol:=nextcontrol-7; ! val:=16*val+nextcontrol-48;nextcontrol:=getnext; ! until(nextcontrol>70)or(nextcontrol<48)or((nextcontrol>57)and( ! nextcontrol<65)){:162};begin accumulator:=accumulator+nextsign*(val); nextsign:=+1;end;goto 21;end;130:begin q:=idlookup(0); if ilk[q]<>1 then begin nextcontrol:=42;goto 21;end; ! begin accumulator:=accumulator+nextsign*(equiv[q]-32768);nextsign:=+1; ! end;end;43:;45:nextsign:=-nextsign;132,133,135,134,136:goto 30; ! 59:begin writeln(output); ! write(output,'! Omit semicolon in numeric definition');error;end; ! otherwise{159:}begin begin writeln(output); ! write(output,'! Improper numeric definition will be flushed');error;end; ! repeat nextcontrol:=skipahead until(nextcontrol>=132); ! if nextcontrol=135 then begin loc:=loc-2;nextcontrol:=getnext;end; ! accumulator:=0;goto 30;end{:159}end;end;30:{:158}; ! if abs(accumulator)>=32768 then begin begin writeln(output); ! write(output,'! Value too big: ',accumulator:1);error;end; ! accumulator:=0;end;equiv[p]:=accumulator+32768;end;{:157}{165:} ! procedure scanrepl(t:eightbits);label 22,30,31;var a:sixteenbits; ! b:ASCIIcode;bal:eightbits;begin bal:=0; ! while true do begin 22:a:=getnext;case a of 40:bal:=bal+1; ! 41:if bal=0 then begin writeln(output);write(output,'! Extra )');error; ! end else bal:=bal-1;39:{168:}begin b:=39; ! while true do begin begin if tokptr[z]=maxtoks then begin writeln(output ! );write(output,'! Sorry, ','token',' capacity exceeded');error; ! history:=3;jumpout;end;tokmem[z,tokptr[z]]:=b;tokptr[z]:=tokptr[z]+1; end; ! if b=64 then if buffer[loc]=64 then loc:=loc+1 else begin writeln(output ! );write(output,'! You should double @ signs in strings');error;end; ! if loc=limit then begin begin writeln(output); ! write(output,'! String didn''t end');error;end;buffer[loc]:=39; ! buffer[loc+1]:=0;end;b:=buffer[loc];loc:=loc+1; ! if b=39 then begin if buffer[loc]<>39 then goto 31 else begin loc:=loc+1 ! ;begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=39;tokptr[z]:=tokptr[z]+1;end;end;end; ! end;31:end{:168};35:if t=3 then a:=0;{167:}130:begin a:=idlookup(0); begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=(a div 256)+128;tokptr[z]:=tokptr[z]+1; ! end;a:=a mod 256;end; ! 135:if t<>135 then goto 30 else begin begin if tokptr[z]=maxtoks then ! begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=(curmodule div 256)+168; ! tokptr[z]:=tokptr[z]+1;end;a:=curmodule mod 256;end;2:{169:} ! begin begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=2;tokptr[z]:=tokptr[z]+1;end; ! buffer[limit+1]:=64; ! while buffer[loc]<>64 do begin begin if tokptr[z]=maxtoks then begin ! writeln(output);write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=buffer[loc]; ! tokptr[z]:=tokptr[z]+1;end;loc:=loc+1; ! if loc=limit then begin writeln(output); write(output,'! Verbatim string didn''t end');error; end else if buffer[loc+1]<>62 then begin writeln(output); ! write(output,'! You should double @ signs in verbatim strings');error; end;loc:=loc+2;end{:169}; ! 133,132,134:if t<>135 then goto 30 else begin begin writeln(output); ! write(output,'! @',xchr[buffer[loc-1]],' is ignored in Pascal text'); ! error;end;goto 22;end;136:goto 30;{:167}otherwise end; begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded');error;history:=3; ! jumpout;end;tokmem[z,tokptr[z]]:=a;tokptr[z]:=tokptr[z]+1;end;end; ! 30:nextcontrol:=a;{166:} if bal>0 then begin if bal=1 then begin writeln(output); ! write(output,'! Missing )');error;end else begin writeln(output); write(output,'! Missing ',bal:1,' )''s');error;end; ! while bal>0 do begin begin if tokptr[z]=maxtoks then begin writeln( ! output);write(output,'! Sorry, ','token',' capacity exceeded');error; ! history:=3;jumpout;end;tokmem[z,tokptr[z]]:=41;tokptr[z]:=tokptr[z]+1; ! end;bal:=bal-1;end;end{:166}; if textptr>maxtexts-4 then begin writeln(output); ! write(output,'! Sorry, ','text',' capacity exceeded');error;history:=3; ! jumpout;end;currepltext:=textptr;tokstart[textptr+4]:=tokptr[z]; ! textptr:=textptr+1;if z=3 then z:=0 else z:=z+1;end;{:165}{170:} procedure definemacro(t:eightbits);var p:namepointer; begin p:=idlookup(t);scanrepl(t);equiv[p]:=currepltext; ! textlink[currepltext]:=0;end;{:170}{172:}procedure scanmodule; ! label 22,30,10;var p:namepointer;begin modulecount:=modulecount+1;{173:} ! nextcontrol:=0; ! while true do begin 22:while nextcontrol<=132 do begin nextcontrol:= ! skipahead;if nextcontrol=135 then begin loc:=loc-2;nextcontrol:=getnext; ! end;end;if nextcontrol<>133 then goto 30;nextcontrol:=getnext; if nextcontrol<>130 then begin begin writeln(output); write(output,'! Definition flushed, must start with ', ! 'identifier of length > 1');error;end;goto 22;end;nextcontrol:=getnext; ! if nextcontrol=61 then begin scannumeric(idlookup(1));goto 22; ! end else if nextcontrol=30 then begin definemacro(2);goto 22; ! end else{174:}if nextcontrol=40 then begin nextcontrol:=getnext; if nextcontrol=35 then begin nextcontrol:=getnext; if nextcontrol=41 then begin nextcontrol:=getnext; if nextcontrol=61 then begin begin writeln(output); ! write(output,'! Use == for macros');error;end;nextcontrol:=30;end; ! if nextcontrol=30 then begin definemacro(3);goto 22;end;end;end;end; ! {:174};begin writeln(output); ! write(output,'! Definition flushed since it starts badly');error;end; ! end;30:{:173};{175:}case nextcontrol of 134:p:=0;135:begin p:=curmodule; {176:}repeat nextcontrol:=getnext;until nextcontrol<>43; ! if(nextcontrol<>61)and(nextcontrol<>30)then begin begin writeln(output); ! write(output,'! Pascal text flushed, = sign is missing');error;end; ! repeat nextcontrol:=skipahead;until nextcontrol=136;goto 10;end{:176}; ! end;otherwise goto 10 end;{177:}storetwobytes(53248+modulecount);{:177}; ! scanrepl(135);{178:} if p=0 then begin textlink[lastunnamed]:=currepltext; lastunnamed:=currepltext; ! end else if equiv[p]=0 then equiv[p]:=currepltext else begin p:=equiv[p] ! ;while textlink[p]limit then begin getline ! ;if inputhasended then begin c:=136;goto 30;end;end; ! buffer[limit+1]:=64;while buffer[loc]<>64 do loc:=loc+1; ! if loc<=limit then begin loc:=loc+2; ! c:=controlcode(buffer[loc-1]); ! if(c<>0)or(buffer[loc-1]=62)then goto 30;end;end; ! 30:skipahead:=c;end;{:140}{141:}procedure skipcomment; ! label 10;var bal:eightbits;c:ASCIIcode;begin bal:=0; while true do begin if loc>limit then begin getline; if inputhasended then begin begin writeln(output); ! write(output,'! Input ended in mid-comment');error;end; ! goto 10;end;end;c:=buffer[loc];loc:=loc+1;{142:} ! if c=64 then begin c:=buffer[loc]; ! if(c<>32)and(c<>9)and(c<>42)and(c<>122)and(c<>90)then loc ! :=loc+1 else begin begin writeln(output); ! write(output,'! Section ended in mid-comment');error;end; ! loc:=loc-1;goto 10; ! end end else if(c=92)and(buffer[loc]<>64)then loc:=loc+1 ! else if c=123 then bal:=bal+1 else if c=125 then begin if ! bal=0 then goto 10;bal:=bal-1;end{:142};end;10:end;{:141} ! {145:}function getnext:eightbits;label 20,30,31; ! var c:eightbits;d:eightbits;j,k:0..longestname; begin 20:if loc>limit then begin getline; ! if inputhasended then begin c:=136;goto 31;end;end; ! c:=buffer[loc];loc:=loc+1;if scanninghex then{146:} ! if((c>=48)and(c<=57))or((c>=65)and(c<=70))then goto 31 ! else scanninghex:=false{:146}; ! case c of 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80 ! ,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103, ! 104,105,106,107,108,109,110,111,112,113,114,115,116,117, ! 118,119,120,121,122:{148:} ! begin if((c=101)or(c=69))and(loc>1)then if(buffer[loc-2] ! <=57)and(buffer[loc-2]>=48)then c:=0; ! if c<>0 then begin loc:=loc-1;idfirst:=loc; repeat loc:=loc+1;d:=buffer[loc]; ! until((d<48)or((d>57)and(d<65))or((d>90)and(d<97))or(d> ! 122))and(d<>95);if loc>idfirst+1 then begin c:=130; ! idloc:=loc;end;end else c:=69;end{:148};34:{149:} ! begin doublechars:=0;idfirst:=loc-1; repeat d:=buffer[loc];loc:=loc+1; ! if(d=34)or(d=64)then if buffer[loc]=d then begin loc:=loc ! +1;d:=0;doublechars:=doublechars+1; end else begin if d=64 then begin writeln(output); write(output,'! Double @ sign missing');error; ! end end else if loc>limit then begin begin writeln(output ! );write(output,'! String constant didn''t end');error; ! end;d:=34;end;until d=34;idloc:=loc-1;c:=130;end{:149}; ! 64:{150:}begin c:=controlcode(buffer[loc]);loc:=loc+1; ! if c=0 then goto 20 else if c=13 then scanninghex:=true ! else if c=135 then{151:}begin{153:}k:=0; while true do begin if loc>limit then begin getline; if inputhasended then begin begin writeln(output); ! write(output,'! Input ended in section name');error;end; ! goto 30;end;end;d:=buffer[loc];{154:} ! if d=64 then begin d:=buffer[loc+1]; if d=62 then begin loc:=loc+2;goto 30;end; if(d=32)or(d=9)or(d=42)then begin begin writeln(output); ! write(output,'! Section name didn''t end');error;end; ! goto 30;end;k:=k+1;modtext[k]:=64;loc:=loc+1;end{:154}; ! loc:=loc+1;if k=longestname-2 then begin begin writeln(output); write(output,'! Section name too long: ');end; ! for j:=1 to 25 do write(output,xchr[modtext[j]]); ! write(output,'...');if history=0 then history:=1; ! end{:155};if(modtext[k]=32)and(k>0)then k:=k-1;{:153}; ! if k>3 then begin if(modtext[k]=46)and(modtext[k-1]=46) ! and(modtext[k-2]=46)then curmodule:=prefixlookup(k-3)else ! curmodule:=modlookup(k);end else curmodule:=modlookup(k); ! end{:151}else if c=131 then begin repeat c:=skipahead; ! until c<>64; if buffer[loc-1]<>62 then begin writeln(output); ! write(output,'! Improper @ within control text');error; ! end;goto 20;end;end{:150};{147:} ! 46:if buffer[loc]=46 then begin if loc<=limit then begin ! c:=32;loc:=loc+1;end; ! end else if buffer[loc]=41 then begin if loc<=limit then ! begin c:=93;loc:=loc+1;end;end; ! 58:if buffer[loc]=61 then begin if loc<=limit then begin ! c:=24;loc:=loc+1;end;end; ! 61:if buffer[loc]=61 then begin if loc<=limit then begin ! c:=30;loc:=loc+1;end;end; ! 62:if buffer[loc]=61 then begin if loc<=limit then begin ! c:=29;loc:=loc+1;end;end; ! 60:if buffer[loc]=61 then begin if loc<=limit then begin ! c:=28;loc:=loc+1;end; ! end else if buffer[loc]=62 then begin if loc<=limit then ! begin c:=26;loc:=loc+1;end;end; ! 40:if buffer[loc]=42 then begin if loc<=limit then begin ! c:=9;loc:=loc+1;end; ! end else if buffer[loc]=46 then begin if loc<=limit then ! begin c:=91;loc:=loc+1;end;end; ! 42:if buffer[loc]=41 then begin if loc<=limit then begin ! c:=10;loc:=loc+1;end;end;{:147}32,9:goto 20; ! 123:begin skipcomment;goto 20;end; ! 125:begin begin writeln(output); ! write(output,'! Extra }');error;end;goto 20;end; otherwise if c>=128 then goto 20 else end; ! 31:{if troubleshooting then debughelp;}getnext:=c;end; ! {:145}{157:}procedure scannumeric(p:namepointer); ! label 21,30;var accumulator:integer;nextsign:-1..+1; ! q:namepointer;val:integer;begin{158:}accumulator:=0; ! nextsign:=+1;while true do begin nextcontrol:=getnext; ! 21:case nextcontrol of 48,49,50,51,52,53,54,55,56,57: ! begin{160:}val:=0;repeat val:=10*val+nextcontrol-48; ! nextcontrol:=getnext; until(nextcontrol>57)or(nextcontrol<48){:160}; ! begin accumulator:=accumulator+nextsign*(val); ! nextsign:=+1;end;goto 21;end;12:begin{161:}val:=0; ! nextcontrol:=48;repeat val:=8*val+nextcontrol-48; ! nextcontrol:=getnext; until(nextcontrol>55)or(nextcontrol<48){:161}; ! begin accumulator:=accumulator+nextsign*(val); ! nextsign:=+1;end;goto 21;end;13:begin{162:}val:=0; ! nextcontrol:=48; ! repeat if nextcontrol>=65 then nextcontrol:=nextcontrol-7 ! ;val:=16*val+nextcontrol-48;nextcontrol:=getnext; ! until(nextcontrol>70)or(nextcontrol<48)or((nextcontrol>57 ! )and(nextcontrol<65)){:162}; ! begin accumulator:=accumulator+nextsign*(val); nextsign:=+1;end;goto 21;end;130:begin q:=idlookup(0); if ilk[q]<>1 then begin nextcontrol:=42;goto 21;end; ! begin accumulator:=accumulator+nextsign*(equiv[q]-32768); ! nextsign:=+1;end;end;43:;45:nextsign:=-nextsign; ! 132,133,135,134,136:goto 30;59:begin writeln(output); ! write(output,'! Omit semicolon in numeric definition'); ! error;end;otherwise{159:}begin begin writeln(output); ! write(output, ! '! Improper numeric definition will be flushed');error; end; ! repeat nextcontrol:=skipahead until(nextcontrol>=132); ! if nextcontrol=135 then begin loc:=loc-2; ! nextcontrol:=getnext;end;accumulator:=0;goto 30;end{:159} ! end;end;30:{:158}; ! if abs(accumulator)>=32768 then begin begin writeln( ! output);write(output,'! Value too big: ',accumulator:1); ! error;end;accumulator:=0;end;equiv[p]:=accumulator+32768; ! end;{:157}{165:}procedure scanrepl(t:eightbits); ! label 22,30,31,21;var a:sixteenbits;b:ASCIIcode; ! bal:eightbits;begin bal:=0; ! while true do begin 22:a:=getnext; ! case a of 40:bal:=bal+1; ! 41:if bal=0 then begin writeln(output); ! write(output,'! Extra )');error;end else bal:=bal-1; ! 39:{168:}begin b:=39; ! while true do begin begin if tokptr[z]=maxtoks then begin ! writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=b; ! tokptr[z]:=tokptr[z]+1;end; ! if b=64 then if buffer[loc]=64 then loc:=loc+1 else begin ! writeln(output); ! write(output,'! You should double @ signs in strings'); ! error;end;if loc=limit then begin begin writeln(output); ! write(output,'! String didn''t end');error;end; ! buffer[loc]:=39;buffer[loc+1]:=0;end;b:=buffer[loc]; ! loc:=loc+1; ! if b=39 then begin if buffer[loc]<>39 then goto 31 else ! begin loc:=loc+1; begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=39; ! tokptr[z]:=tokptr[z]+1;end;end;end;end;31:end{:168}; ! 35:if t=3 then a:=0;{167:}130:begin a:=idlookup(0); begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end; ! tokmem[z,tokptr[z]]:=(a div 256)+128; ! tokptr[z]:=tokptr[z]+1;end;a:=a mod 256;end; ! 135:if t<>135 then goto 30 else begin begin if tokptr[z]= ! maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end; ! tokmem[z,tokptr[z]]:=(curmodule div 256)+168; ! tokptr[z]:=tokptr[z]+1;end;a:=curmodule mod 256;end; ! 2:{169:} ! begin begin if tokptr[z]=maxtoks then begin writeln( ! output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=2; ! tokptr[z]:=tokptr[z]+1;end;buffer[limit+1]:=64; ! 21:if buffer[loc]=64 then begin if loc=limit then begin writeln(output); write(output,'! Verbatim string didn''t end');error; end else if buffer[loc+1]<>62 then begin writeln(output); ! write(output, ! '! You should double @ signs in verbatim strings');error; end;loc:=loc+2;end{:169}; ! 133,132,134:if t<>135 then goto 30 else begin begin ! writeln(output);write(output,'! @',xchr[buffer[loc-1]], ! ' is ignored in Pascal text');error;end;goto 22;end; ! 136:goto 30;{:167}otherwise end; begin if tokptr[z]=maxtoks then begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=a; ! tokptr[z]:=tokptr[z]+1;end;end;30:nextcontrol:=a;{166:} if bal>0 then begin if bal=1 then begin writeln(output); ! write(output,'! Missing )');error; ! end else begin writeln(output); write(output,'! Missing ',bal:1,' )''s');error;end; ! while bal>0 do begin begin if tokptr[z]=maxtoks then ! begin writeln(output); ! write(output,'! Sorry, ','token',' capacity exceeded'); ! error;history:=3;jumpout;end;tokmem[z,tokptr[z]]:=41; ! tokptr[z]:=tokptr[z]+1;end;bal:=bal-1;end;end{:166}; if textptr>maxtexts-4 then begin writeln(output); ! write(output,'! Sorry, ','text',' capacity exceeded'); ! error;history:=3;jumpout;end;currepltext:=textptr; ! tokstart[textptr+4]:=tokptr[z];textptr:=textptr+1; ! if z=3 then z:=0 else z:=z+1;end;{:165}{170:} procedure definemacro(t:eightbits);var p:namepointer; begin p:=idlookup(t);scanrepl(t);equiv[p]:=currepltext; ! textlink[currepltext]:=0;end;{:170}{172:} ! procedure scanmodule;label 22,30,10;var p:namepointer; ! begin modulecount:=modulecount+1;{173:}nextcontrol:=0; ! while true do begin 22:while nextcontrol<=132 do begin ! nextcontrol:=skipahead; ! if nextcontrol=135 then begin loc:=loc-2; ! nextcontrol:=getnext;end;end; ! if nextcontrol<>133 then goto 30;nextcontrol:=getnext; if nextcontrol<>130 then begin begin writeln(output); write(output,'! Definition flushed, must start with ', ! 'identifier of length > 1');error;end;goto 22;end; ! nextcontrol:=getnext; ! if nextcontrol=61 then begin scannumeric(idlookup(1)); ! goto 22; ! end else if nextcontrol=30 then begin definemacro(2); ! goto 22;end else{174:} ! if nextcontrol=40 then begin nextcontrol:=getnext; if nextcontrol=35 then begin nextcontrol:=getnext; if nextcontrol=41 then begin nextcontrol:=getnext; if nextcontrol=61 then begin begin writeln(output); ! write(output,'! Use == for macros');error;end; ! nextcontrol:=30;end; ! if nextcontrol=30 then begin definemacro(3);goto 22;end; ! end;end;end;{:174};begin writeln(output); ! write(output,'! Definition flushed since it starts badly' ! );error;end;end;30:{:173};{175:} ! case nextcontrol of 134:p:=0;135:begin p:=curmodule; {176:}repeat nextcontrol:=getnext;until nextcontrol<>43; ! if(nextcontrol<>61)and(nextcontrol<>30)then begin begin ! writeln(output); ! write(output,'! Pascal text flushed, = sign is missing'); ! error;end;repeat nextcontrol:=skipahead; ! until nextcontrol=136;goto 10;end{:176};end; ! otherwise goto 10 end;{177:} ! storetwobytes(53248+modulecount);{:177};scanrepl(135); ! {178:} if p=0 then begin textlink[lastunnamed]:=currepltext; lastunnamed:=currepltext; ! end else if equiv[p]=0 then equiv[p]:=currepltext else ! begin p:=equiv[p]; ! while textlink[p]0 then begin for ii:=0 to changelimit do buffer[ii]:= ! changebuffer[ii];limit:=changelimit;changing:=true;line:=otherline; ! loc:=changelimit;begin writeln(output); ! write(output,'! Change file entry did not match');error;end;end{:138}; ! phaseone:=false;{:183};{for ii:=0 to 3 do maxtokptr[ii]:=tokptr[ii];} ! {112:}if textlink[0]=0 then begin begin writeln(output); write(output,'! No output was specified.');end; ! if history=0 then history:=1;end else begin begin writeln(output); ! write(output,'Writing the output file');end;flush(output);{83:} ! stackptr:=1;bracelevel:=0;curstate.namefield:=0; ! curstate.replfield:=textlink[0];zo:=curstate.replfield mod 4; curstate.bytefield:=tokstart[curstate.replfield]; ! curstate.endfield:=tokstart[curstate.replfield+4];curstate.modfield:=0; ! {:83};{96:}outstate:=0;outptr:=0;breakptr:=0;semiptr:=0;outbuf[0]:=0; ! line:=1;{:96};sendtheoutput;{98:}breakptr:=outptr;semiptr:=0; flushbuffer;if bracelevel<>0 then begin writeln(output); ! write(output,'! Program ended at brace level ',bracelevel:1);error;end; ! {:98};begin writeln(output);write(output,'Done.');end;end{:112}; ! 9999:if stringptr>256 then{184:}begin begin writeln(output); ! write(output,stringptr-256:1,' strings written to string pool file.'); ! end;write(pool,'*'); for ii:=1 to 9 do begin outbuf[ii]:=poolchecksum mod 10; poolchecksum:=poolchecksum div 10;end; ! for ii:=9 downto 1 do write(pool,xchr[48+outbuf[ii]]);writeln(pool); ! end{:184};{[186:]begin writeln(output); ! write(output,'Memory usage statistics:');end;begin writeln(output); ! write(output,nameptr:1,' names, ',textptr:1,' replacement texts;');end; ! begin writeln(output);write(output,byteptr[0]:1);end; for wo:=1 to 2 do write(output,'+',byteptr[wo]:1); ! if phaseone then for ii:=0 to 3 do maxtokptr[ii]:=tokptr[ii]; ! write(output,' bytes, ',maxtokptr[0]:1); for ii:=1 to 3 do write(output,'+',maxtokptr[ii]:1); write(output,' tokens.');[:186];}{187:} case history of 0:begin writeln(output); ! write(output,'(No errors were found.)');end;1:begin writeln(output); ! write(output,'(Did you see the warning message above?)');end; ! 2:begin writeln(output); ! write(output,'(Pardon me, but I think I spotted something wrong.)');end; ! 3:begin writeln(output); ! write(output,'(That was a fatal error, my friend.)');end;end{:187}; ! writeln(output);if(history<>0)and(history<>1)then exit(1)else exit(0); end.{:182} --- 970,1034 ---- 5:for k:=1 to outptr do write(output,xchr[outbuf[k]]); 6:for k:=1 to dd do write(output,xchr[outcontrib[k]]); ! otherwise write(output,'?')end;end;end;10:end;}{:181} ! {182:}begin initialize;{134:}openinput;line:=0; ! otherline:=0;changing:=true;primethechangebuffer; ! changing:=not changing;templine:=otherline; ! otherline:=line;line:=templine;limit:=0;loc:=1; ! buffer[0]:=32;inputhasended:=false;{:134}; ! writeln(output,'This is TANGLE, Version 4.3 for SunOS'); ! {183:}phaseone:=true;modulecount:=0; ! repeat nextcontrol:=skipahead;until nextcontrol=136; ! while not inputhasended do scanmodule;{138:} ! if changelimit<>0 then begin for ii:=0 to changelimit do ! buffer[ii]:=changebuffer[ii];limit:=changelimit; ! changing:=true;line:=otherline;loc:=changelimit; ! begin writeln(output); ! write(output,'! Change file entry did not match');error; ! end;end{:138};phaseone:=false;{:183}; ! {for ii:=0 to 3 do maxtokptr[ii]:=tokptr[ii];}{112:} ! if textlink[0]=0 then begin begin writeln(output); write(output,'! No output was specified.');end; ! if history=0 then history:=1; ! end else begin begin writeln(output); ! write(output,'Writing the output file');end; ! flush(output);{83:}stackptr:=1;bracelevel:=0; ! curstate.namefield:=0;curstate.replfield:=textlink[0]; ! zo:=curstate.replfield mod 4; curstate.bytefield:=tokstart[curstate.replfield]; ! curstate.endfield:=tokstart[curstate.replfield+4]; ! curstate.modfield:=0;{:83};{96:}outstate:=0;outptr:=0; ! breakptr:=0;semiptr:=0;outbuf[0]:=0;line:=1;{:96}; ! sendtheoutput;{98:}breakptr:=outptr;semiptr:=0; flushbuffer;if bracelevel<>0 then begin writeln(output); ! write(output,'! Program ended at brace level ',bracelevel ! :1);error;end;{:98};begin writeln(output); ! write(output,'Done.');end;end{:112}; ! 9999:if stringptr>256 then{184:} ! begin begin writeln(output);write(output,stringptr-256:1, ! ' strings written to string pool file.');end; ! write(pool,'*'); for ii:=1 to 9 do begin outbuf[ii]:=poolchecksum mod 10; poolchecksum:=poolchecksum div 10;end; ! for ii:=9 downto 1 do write(pool,xchr[48+outbuf[ii]]); ! writeln(pool);end{:184};{[186:]begin writeln(output); ! write(output,'Memory usage statistics:');end; ! begin writeln(output); ! write(output,nameptr:1,' names, ',textptr:1, ! ' replacement texts;');end;begin writeln(output); ! write(output,byteptr[0]:1);end; for wo:=1 to 2 do write(output,'+',byteptr[wo]:1); ! if phaseone then for ii:=0 to 3 do maxtokptr[ii]:=tokptr[ ! ii];write(output,' bytes, ',maxtokptr[0]:1); for ii:=1 to 3 do write(output,'+',maxtokptr[ii]:1); write(output,' tokens.');[:186];}{187:} case history of 0:begin writeln(output); ! write(output,'(No errors were found.)');end; ! 1:begin writeln(output); ! write(output,'(Did you see the warning message above?)'); ! end;2:begin writeln(output);write(output, ! '(Pardon me, but I think I spotted something wrong.)'); ! end;3:begin writeln(output); ! write(output,'(That was a fatal error, my friend.)');end; ! end{:187};writeln(output); ! if(history<>0)and(history<>1)then exit(1)else exit(0); end.{:182} diff -r -c2 oldtex/local/web/weave.ch newtex/local/web/weave.ch *** oldtex/local/web/weave.ch Thu Sep 6 17:04:24 1990 --- newtex/local/web/weave.ch Sun Jan 12 00:26:10 1992 *************** *** 56,59 **** --- 56,61 ---- % 3/25/90 don changed version number to 4.1 % 9/6/90 don changed version number to 4.2 + % 9/19/91 don changed version number to 4.3 + % 1/12/92 don changed version number to 4.4 % NOTE: The module numbers refer to the standard WEB manual (CS 980). *************** *** 74,80 **** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is WEAVE, Version 4.2' @y ! @d banner=='This is WEAVE, Version 4.2 for SunOS' @z --- 76,82 ---- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @x ! @d banner=='This is WEAVE, Version 4.4' @y ! @d banner=='This is WEAVE, Version 4.4 for SunOS' @z