% $Header: tmathit.mf,v 1.1 88/01/15 13:15:08 simpson Rel $
% $Log:	tmathit.mf,v $
%Revision 1.1  88/01/15  13:15:08  simpson
%initial release
%
%Revision 0.1  87/12/11  19:01:36  simpson
%beta test
%
% The Computer Modern Math Italic family (by D. E. Knuth, 1979--1985)

font_coding_scheme:="TeX math italic";
mode_setup; font_setup;

input tgreekl;  % lower case Greek letters

% From file italms.mf, font cmmi10 (output with slant)
cmchar "Lowercase italic script l";
beginchar(oct"044",4.5u#+max(1.5u#,stem#),asc_height#,0);
italcorr .8asc_height#*slant-u#;
adjust_fit(if monospace:u#,u# else: 0,0 fi); pickup fine.nib;
pos1(hair,-45); pos2(hair,0); pos3(vair,90);
pos4(stem,180); pos5(vair,270); pos6(hair,315);
lft x1l=hround(lft x1l-x1); rt x2r=hround(w-1.5u); x3=.5w;
lft x4r=hround .5u; x5=x3+.75u; x6=x1+w+1;
y1=y6=.125h; y2=.8h; top y3r=h+oo; y4=.5[y3,y5]; bot y5=-oo;
filldraw stroke z1e{10u,asc_height}...z2e{up}...pulled_arc.e(3,4)
 & pulled_arc.e(4,5)...z6e{10u,asc_height};  % bowl and hook
math_fit(0,ic#); penlabels(1,2,3,4,5,6); endchar;

font_slant slant;  
font_x_height x_height#;
font_quad 18u#+4letter_fit#;

slant:=mono_charic#:=0;  % the remaining characters will not be slanted
currenttransform:=identity yscaled aspect_ratio scaled granularity;

input titalms;  % special symbols for math italic
input tgreeku;  % upper case greek letters
input tromms;  % roman math specials

% The following characters come from a hodge-podge of files.

% My own creation (created in just 1 hour!)
cmchar "Right hand";
beginchar(oct"004", 2.1body_height#, body_height#, 0);
adjust_fit(0,0);
picture hand;
% On the graph I drew this on, the hand is 40 units tall and 84 (2.1*40) units
% wide.
handunit# := body_height#/40;
define_pixels(handunit);
z1=(4handunit,0); z2=(handunit,handunit); z3=(0,4handunit);
z4=(0,34handunit); z5=(handunit,36handunit); z6=(4handunit,37handunit);
z7=(9handunit,35handunit); z8=(16handunit,36handunit); 
z9=(30handunit,38handunit); z10=(50handunit,40handunit);
z11=(70handunit,40handunit); z12=(78handunit,40handunit);
z13=(84handunit,38handunit); z14=(83handunit,34handunit);
z15=(80handunit,33handunit); z16=(56handunit,30handunit);
z17=(52handunit,29handunit); z18=(51handunit,24handunit);
z19=(46handunit,18handunit); z20=(45handunit,14handunit);
z21=(40handunit,8handunit); z22=(37handunit,handunit);
z23=(35handunit,0); z24=(27handunit,handunit); z25=(13handunit,2handunit);
fill z1{dir 180}..z2{z3-z1}..{dir 90}z3--z4{dir 90}..z5{z6-z4}..z6{dir 0}
..z7{dir 0}..z8..z9..z10..z11{dir 0}--z12{dir 0}..z13{dir -80}..z14{dir 225}
..z15{dir 190}--z16..{dir 200}z17 & flex(z17,z18,z19) & flex(z19,z20,z21)
..z22{dir 225}..z23{dir 180}..z24{z25-z23}..z25..cycle;
hand:=currentpicture;
endchar;

% My own creation
cmchar "Left hand";
beginchar(oct"036", 2.1body_height#, body_height#, 0);
adjust_fit(0,0);
currentpicture:=hand reflectedabout ((.5w,0),(.5w,h));
endchar;

% From font cmsy10, file symbol.mf
cmchar "Subset or equal to sign";
compute_spread(.45x_height#,.55x_height#);
spread#':=spread#; spread':=spread; % the spread of `$=$'
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"133",14u#,v_center(spread#'+spread#+rule_thickness#));
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x2=hround 1.5u-eps; x1=x3=w-x2;
y1-y3=spread; y2=.5[y1,y3]; top y1=h;
x4=x5=.5w; y4=y1; y5=y3;
draw z1---z4...z2{down}...z5---z3;  % arc and bars
x8=x1; lft x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
labels(1,2,3,4,5,8,9); endchar;

% From font cmsy10, file symbol.mf
cmchar "Superset or equal to sign";
compute_spread(.45x_height#,.55x_height#);
spread#':=spread#; spread':=spread; % the spread of `$=$'
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"002",14u#,v_center(spread#'+spread#+rule_thickness#));
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
y1-y3=spread; y2=.5[y1,y3]; top y1=h;
x4=x5=.5w; y4=y1; y5=y3;
draw z1---z4...z2{down}...z5---z3;  % arc and bars
x8=x1; rt x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % lower bar
labels(1,2,3,4,5,8,9); endchar;

% From font cmsy10, file symbol.mf
cmchar "Times operator";
beginarithchar(oct"052"); pickup rule.nib;
x1=good.x(1/sqrt2)[.5w,rt u]; y1=good.y(1/sqrt2)[math_axis,bot h];
x2=x3=w-x1; x4=x1; .5[y1,y2]=.5[y3,y4]=math_axis; y2=y4;
draw z1--z2; draw z3--z4;  % diagonals
labels(1,2,3,4); endchar;

% From font cmsy10, file symbol.mf
cmchar "Asterisk at the axis";
beginchar(oct"071",9u#,v_center(x_height#));
adjust_fit(0,0);
numeric ast_flare; ast_flare=hround .7[thin_join,stem];
x0=.5w; y0=h-.5x_height;
for d=-150 step 60 until 150: z[d]=z0+.5dir d xscaled 7.5u yscaled x_height;
 numeric theta; theta=angle(z[d]-z0);
 fill z0+.5(0,-thin_join)rotated theta
  ---z[d]+.5(-ast_flare,-ast_flare)rotated theta
  ..z[d]..z[d]+.5(-ast_flare,ast_flare)rotated theta
  ---z0+.5(0,thin_join)rotated theta--cycle; endfor  % diagonal at angle |d|
labels(0,[-150],[-90],[-30],30,90,150); endchar;

% From font cmsy10, file symbol.mf
cmchar "Elementary division operator";
beginarithchar(oct"057"); pickup rule.nib;
x3-.5dot_size=hround(.5w-.5dot_size); w:=r:=2x3;
y3+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]+.5dot_size);
lft x1=hround u-eps; x2=w-x1; y1=y2=math_axis;
draw z1--z2;  % bar
pos3(dot_size,0); pos4(dot_size,90); z3=z4;
pos5(dot_size,0); pos6(dot_size,90); z5=z6; x5=x3; .5[y3,y5]=math_axis;
dot(3,4); dot(5,6);  % dots
penlabels(1,2,3,4,5,6); endchar;

% From font cmsy10, file symbol.mf
cmchar "Similarity sign";
compute_spread(.45x_height#,.55x_height#);
beginchar(oct"062",14u#,v_center(spread#+rule_thickness#));
adjust_fit(0,0);
pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
bot y1=bot y3=-d; top y2=top y4=h;
draw z1{up}...z2{right}..{right}z3...{up}z4;  % stroke
labels(1,2,3,4); endchar;

% From font cmsy10, file symbol.mf
cmchar "Similar or equal sign";
compute_spread(.45x_height#,.55x_height#);
beginchar(oct"061",14u#,v_center(2spread#+rule_thickness#));
adjust_fit(0,0);
pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
lft x1=hround u; x2=4u; x3=w-x2; x4=w-x1;
bot y1=bot y3=floor math_axis; top y2=top y4=h;
draw z1{up}...z2{right}..{right}z3...{up}z4;  % stroke
pickup rule.nib; lft x5=hround u-eps; x6=w-x5; y5=y6=math_axis-spread;
draw z5--z6;  % bar
labels(1,2,3,4,5,6); endchar;

% From font cmsy10, file symbol.mf
cmchar "Proportionality sign";
beginchar(oct"003",16.5u#,x_height#,0);
italcorr x_height#*slant-.5u#;
adjust_fit(0,-2.5u#); pickup fine.nib;
numeric theta,phi; phi=angle(3u,h); theta=angle(5u,-h);
pos1(vair,180); pos2(.5[vair,stem],90+.5theta); pos3(stem,90+theta);
pos4(stem,90+theta); pos5(.5[vair,stem],90+.5theta);
pos6(vair,180); pos7(.2[vair,stem],270+.5phi);
pos8(.3[vair,stem],270+phi); pos9(.2[vair,stem],270+.5phi);
lft x1r=w-rt x6l=hround u; x2=x9=.4[x1,x8]; x5=x7=.6[x8,x6];
if monospace: x2l:=x2r; x5r:=x5l; x7r:=x7l; x9l:=x9r; fi
y1=y6=.5h; top y2r=top y7l=h+oo; bot y5l=bot y9r=-oo;
x8=.5[x3,x4]=.5w; y8=.5[y3,y4]=.5h;
y3-y4=h/3; z3-z4=whatever*dir theta;
filldraw stroke z1e{up}...z2e{right}...z3e---z4e...z5e{right}...z6e{up}
 ...z7e{left}...{-dir phi}z8e...{left}z9e...z1e{up}; % `infinity' bowls
erase fill (w-3.5u,h+o)--(w,h+o)
 --(w,-o)--(w-3.5u,-o)--cycle; % erase excess
penlabels(1,2,3,4,5,6,7,8,9); endchar;

% From font cmsy10, file symbol.mf
cmchar "Empty set symbol";
beginchar(oct"172",9u#,body_height#,body_height#-asc_height#);
adjust_fit(0,0);
penpos1(vair,90); penpos3(vair,-90); penpos2(stem,180); penpos4(stem,0);
if not monospace: interim superness:=sqrt(more_super*hein_super); fi
x2r=hround max(.7u,1.45u-.5stem);
x4r=w-x2r; x1=x3=.5w; y1r=asc_height+o; y3r=-o;
y2=y4=.5asc_height-vair_corr; y2l:=y4l:=.52asc_height;
penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
 & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
pickup rule.nib; lft x6=hround 2u-eps; x5=w-x6; top y5=h+o; bot y6=-d-o;
draw z5--z6;  % diagonal
penlabels(1,2,3,4,5,6); endchar;

% From font cmsy10, file symbol.mf
cmchar "Nabla or backwards-difference operator";
beginchar(oct"050",15u#,cap_height#,0);
adjust_fit(0,0);
numeric right_stem,alpha;
right_stem=cap_hair if hefty: -3stem_corr fi;
x1l=w-x4r=.75u; y1=y4=h;
x2-x1=x4-x3; x3l=x2l+apex_corr; y2=y3=-apex_o-apex_oo;
alpha=diag_ratio(2,right_stem,y1-y2,x4r-x1l-apex_corr);
penpos1(alpha*cap_stem,0); penpos2(alpha*cap_stem,0);
penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0);
fill diag_end(2l,1l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l)--cycle;  % triangle
z0=whatever[z1r,z2r]=whatever[z3l,z4l];
y5=y6=h-cap_vstem; z5=whatever[z1r,z2r]; z6=whatever[z3l,z4l];
if y0>cap_notch_cut: y0:=cap_notch_cut;
 unfill z0+.5right{up}...{z4-z3}z6--z5{z2-z1}
  ...{down}z0+.5left--cycle; % counter
else: unfill z0--z5--z6--cycle; fi  % counter
penlabels(0,1,2,3,4,5,6); endchar;

% From font cmsy10, file symbol.mf
cmchar "Section sign";
beginchar(oct"070",6.5u#+max(1.5u#,stem#),asc_height#,desc_depth#);
adjust_fit(0,0); pickup fine.nib;
numeric sstem; sstem=hround .75[hair,stem];
pos0(stem,0); pos1(hair,0); pos2(vair,90); pos3(sstem,180); pos4(vair,270);
pos5'(sstem,0); pos5(sstem,180);
pos6(vair,90); pos7(sstem,0); pos8(vair,-90); pos9(hair,-180); pos10(stem,-180);
top y2r=h+oo; bot y8r=-d-oo; y2-y1=y9-y8=(y2-y8)/8;
y3=.52[y4,y2]; y5=.52[y4,y6]; y7=.52[y6,y8]; y5'=.52[y6,y4];
y2-y4=y4-y6=y6-y8;
rt x1r=hround(w-1.5u); lft x3r=hround 1.25u;
x2=x4=x6=x8=.5w; x5=x7=w-x3; x5'=x3; x9=w-x1;
bulb(2,1,0); bulb(8,9,10);  % bulbs
filldraw stroke z2e{left}...z3e{down}...z4e{3(x5-x3),y5-y3}
 ...z5e{down}...{left}z6e;  % upper stroke
filldraw stroke z4e{left}...z5'e{down}...z6e{3(x7-x5'),y7-y5'}
 ...z7e{down}...{left}z8e;  % upper stroke
penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;

% From font cmsy10, file symbol.mf
cmchar "Double dagger mark";
beginchar(oct"131",8u#,asc_height#,desc_depth#);
adjust_fit(0,0); pickup fine.nib;
pos1(stem,0); pos2(thin_join,0); pos3(stem,0);
pos4(stem,90); pos2'(thin_join,90); pos5(stem,90); z2'=z2;
x1=x2=x3; x1-.5stem=hround(.5w-.5stem); w:=r:=2x1;
x4-.5stem=hround u; x5=w-x4;
y1+.5stem=h+oo; y2=y4=y5=.5[y1,y3]; y3-.5stem=ceiling(.5[-d,h]);
filldraw circ_stroke z1e{down}..{down}z2e;  % top stem
filldraw circ_stroke z3e{up}..{up}z2e;    % upper middle stem
filldraw circ_stroke z4e{right}..{right}z2'e;  % top left bulb
filldraw circ_stroke z5e{left}..{left}z2'e;  % top right bulb
pos6(stem,0); pos7(thin_join,0); pos8(stem,0);
pos9(stem,90); pos7'(thin_join,90); pos0(stem,90); z7'=z7;
x6=x7=x8=x1; x9=x4; x0=x5;
y6=y3-stem-1; y7=y9=y0=.5[y6,y8]; y8-.5stem=-d-oo;
filldraw circ_stroke z6e{down}..{down}z7e;  % lower middle stem
filldraw circ_stroke z8e{up}..{up}z7e;    % bottom stem
filldraw circ_stroke z9e{right}..{right}z7'e;  % bottom left bulb
filldraw circ_stroke z0e{left}..{left}z7'e;  % bottom right bulb
penlabels(1,2,3,4,5,6,7,8,9,0); endchar;

% From font cmsy10, file sym.mf
cmchar "Minus";
beginarithchar(oct"055"); pickup rule.nib;
lft x1=hround 1.5u-eps; x2=w-x1; y1=y2=math_axis;
draw z1--z2;  % bar
labels(1,2); endchar;

% From font cmsy10, file sym.mf
cmchar "Plus-or-minus sign";
beginarithchar(oct"010"); pickup rule.nib;
numeric shiftup; shiftup=vround 1.5u;
x1=x2=.5w; lft x3=lft=x5=hround u-eps; x4=x6=w-x3;
.5[y1,y2]=y3=y4=math_axis+shiftup; top y1=h+shiftup; y5=y6=y2;
draw z1--z2;  % stem
draw z3--z4;  % plus bar
draw z5--z6;  % minus bar
labels(1,2,3,4,5,6); endchar;

% From font cmsy10, file sym.mf
cmchar "Downward arrow";
beginchar(oct"067",9u#,asc_height#,asc_depth#);
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;
filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
 --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r)
 --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem
penlabels(0,1,2,3,4,5,6,9); endchar;

% From font cmsy10, file sym.mf
cmchar "Upward arrow";
beginchar(oct"066",9u#,asc_height#,asc_depth#);
italcorr .76asc_height#*slant+.5crisp#-u#;
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;
filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
 --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3l{z9-z3}..z5r)
 --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem
penlabels(0,1,2,3,4,5,6,9); endchar;

% From font cmsy10, file sym.mf
cmchar "Leftward arrow";
compute_spread(.45x_height#,.55x_height#);
beginchar(oct"064",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;
filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
 --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
 --z3l{z9-z3}..z0 & cycle;  % arrowhead and stem
penlabels(0,1,2,3,4,5,6,9); endchar;

% From font cmsy10, file sym.mf
cmchar "Rightward arrow";
compute_spread(.45x_height#,.55x_height#);
beginchar(oct"065",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;
filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
 --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
 --z3r{z9-z3}..z0 & cycle;  % arrowhead and stem
penlabels(0,1,2,3,4,5,6,9); endchar;

% From font cmsy10, file sym.mf
cmchar "Proper subset sign";
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"032",14u#,v_center(spread#+rule_thickness#));
italcorr h#*slant-u#;
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x2=hround 1.5u-eps; x1=x3=w-x2;
y1-y3=spread; y2=.5[y1,y3]=math_axis;
x4=x5=.5w; y4=y1; y5=y3;
draw z1---z4...z2{down}...z5---z3;  % arc and bars
labels(1,2,3,4,5); endchar;

% From font cmsy10, file sym.mf
cmchar "Proper superset sign";
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"033",14u#,v_center(spread#+rule_thickness#));
italcorr h#*slant-u#;
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
y1-y3=spread; y2=.5[y1,y3]=math_axis;
x4=x5=.5w; y4=y1; y5=y3;
draw z1---z4...z2{down}...z5---z3;  % arc and bars
labels(1,2,3,4,5); endchar;

% From font cmsy10, file sym.mf
cmchar "Element sign";
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"037",12u#,v_center(spread#+rule_thickness#));
italcorr h#*slant-u#;
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x2=hround 1.5u-eps; x1=x3=x6=w-x2;
y1-y3=spread; y2=y6=.5[y1,y3]=math_axis;
x4=x5=.5w+u; y4=y1; y5=y3;
draw z1---z4...z2{down}...z5---z3;  % arc and bars
draw z2--z6;  % middle bar
labels(1,2,3,4,5,6); endchar;

% From font cmsy10, file sym.mf
cmchar "Logical not sign";
beginchar(oct"035",12u#,x_height#,0);
italcorr x_height#*slant-.5u#;
adjust_fit(0,0); pickup rule.nib;
lft x1=hround u-eps; x2=x3=w-x1;
y1=y2=good.y .5[bar_height,h]; y2-y3=1.2(h-bar_height);
draw z1--z2--z3;  % bar and stem
labels(1,2,3); endchar;

% From font cmsy10, file sym.mf
cmchar "Less than sign";
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"074",14u#,v_center(spread#+rule_thickness#));
italcorr h#*slant-u#;
adjust_fit(0,0); pickup rule.nib;
lft x2=hround 1.5u-eps; x1=x3=w-x2;
y1-y3=spread; y2=.5[y1,y3]=math_axis;
draw z1--z2--z3;  % diagonals
labels(1,2,3); endchar;

% From font cmsy10, file sym.mf
cmchar "Greater than sign";
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"076",14u#,v_center(spread#+rule_thickness#));
italcorr math_axis#*slant-u#;
adjust_fit(0,0); pickup rule.nib;
rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
y1-y3=spread; y2=.5[y1,y3]=math_axis;
draw z1--z2--z3;  % diagonals
labels(1,2,3); endchar;

% From font cmsy10, file sym.mf
cmchar "Unequals sign";
compute_spread(.45x_height#,.55x_height#);
beginchar(oct"063",14u#,v_center(4spread#+rule_thickness#));
italcorr h#*slant-.5u#;
adjust_fit(0,0); pickup rule.nib;
lft x1=hround u-eps; x3=x1; x2=x4=w-x1;
y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
draw z1--z2; draw z3--z4;  % bars
lft x6=hround 3.5u-eps; x5=w-x6; top y5=h+o; bot y6=-d-o;
draw z5--z6;  % diagonal
labels(1,2,3,4,5,6); endchar;

% From font cmsy10, file sym.mf
cmchar "Less than or equal to sign";
compute_spread(.45x_height#,.55x_height#);
spread#':=spread#; spread':=spread; % the spread of `$=$'
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"011",14u#,v_center(spread#'+spread#+rule_thickness#));
italcorr h#*slant-u#;
adjust_fit(0,0); pickup rule.nib;
lft x2=hround 1.5u-eps; x1=x3=w-x2;
y1-y3=spread; y2=.5[y1,y3]; top y1=h;
draw z1--z2--z3;  % diagonals
x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % bar
labels(1,2,3,8,9); endchar;

% From font cmsy10, file sym.mf
cmchar "Greater than or equal to sign";
compute_spread(.45x_height#,.55x_height#);
spread#':=spread#; spread':=spread; % the spread of `$=$'
compute_spread(5/4x_height#,3/2x_height#);
beginchar(oct"012",14u#,v_center(spread#'+spread#+rule_thickness#));
italcorr h#*slant-u#;
adjust_fit(0,0); pickup rule.nib;
lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
y1-y3=spread; y2=.5[y1,y3]; top y1=h;
draw z1--z2--z3;  % diagonals
x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9;  % bar
labels(1,2,3,8,9); endchar;

% From font cmsy10, file sym.mf
cmchar "Equivalence or congruence sign";
compute_spread(.45x_height#,.55x_height#);
beginchar(oct"060",14u#,v_center(2spread#+rule_thickness#));
italcorr h#*slant-.5u#;
adjust_fit(0,0); pickup rule.nib;
lft x1=hround u-eps; x3=x5=x1; x2=x4=x6=w-x1;
y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=spread;
draw z1--z2;  % upper bar
draw z3--z4;  % middle bar
draw z5--z6;  % lower bar
labels(1,2,3,4,5,6); endchar;

% From font cmsy10, file sym.mf
cmchar "Reverse slash (backslash)";
beginchar(oct"134",9u#,body_height#,paren_depth#);
adjust_fit(0,0); pickup rule.nib;
lft x1=hround u-eps; top y1=h+eps;
rt x2=hround(w-u)+eps; bot y2=-d-eps;
draw z1--z2;  % diagonal
labels(1,2); endchar;

% From font cmsy10, file sym.mf 
cmchar "Vertical line";
beginchar(oct"174",5u#,body_height#,paren_depth#);
italcorr body_height#*slant+.5rule_thickness#-2u#;
adjust_fit(0,0); pickup rule.nib;
x1=x2=good.x .5w; top y1=h+eps; bot y2=-d-eps;
draw z1--z2;  % stem
labels(1,2); endchar;

% From font cmsy10, file sym.mf
cmchar "Left curly brace";
beginchar(oct"173",9u#,body_height#,paren_depth#);
italcorr body_height#*slant+.5vair#-u#;
adjust_fit(0,0); pickup fine.nib;
forsuffixes $=1,1',4,4',7,7': pos$(vair,0); endfor
forsuffixes $=2,3,5,6: pos$(stem,0); endfor
x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4';
lft x4l=hround(1.5u-.5vair); lft x2l=hround(.5w-.5stem);
top y1=h; bot y7=-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5];
y1-y2=y3-y4=(y1-y4)/4; y1-y1'=y4-y4'=y7'-y7=vair-fine;
filldraw z1l{left}...z2l---z3l...{left}z4l
 --z4'l{right}...z5l---z6l...{right}z7l
 --z7r--z7'r{left}...z6r---z5r...{left}.5[z4r,z4'r]{right}
 ...z3r---z2r...{right}z1'r--z1r--cycle;  % stroke
penlabels(1,2,3,4,5,6,7); endchar;

% From font cmsy10, file sym.mf
cmchar "Right curly brace";
beginchar(oct"175",9u#,body_height#,paren_depth#);
italcorr math_axis#*slant+.5vair#-u#;
adjust_fit(0,0); pickup fine.nib;
forsuffixes $=1,1',4,4',7,7': pos$(vair,0); endfor
forsuffixes $=2,3,5,6: pos$(stem,0); endfor
x2=x3=x5=x6; x1=x1'=x7=x7'=w-x4=w-x4';
rt x4r=hround(w-1.5u+.5vair); rt x2r=hround(.5w+.5stem);
top y1=h; bot y7=-d; .5[y4,y4']=.5[y1,y7]=.5[y2,y6]=.5[y3,y5];
y1-y2=y3-y4=(y1-y4)/4; y1-y1'=y4-y4'=y7'-y7=vair-fine;
filldraw z1r{right}...z2r---z3r...{right}z4r
 --z4'r{left}...z5r---z6r...{left}z7r
 --z7l--z7'l{right}...z6l---z5l...{right}.5[z4l,z4'l]{left}
 ...z3l---z2l...{left}z1'l--z1l--cycle;  % stroke
penlabels(1,2,3,4,5,6,7); endchar;

% From font cmsy10, file sym.mf
cmchar "Straight double quotes";
beginchar(oct"042",9u#,asc_height#,0);
numeric top_width#,spread#; top_width#=if serifs: flare# else: stem# fi;
spread#=max(3u#,top_width#+.5u#); define_pixels(spread);
italcorr asc_height#*slant+.5top_width#+.5spread#-4u#;
adjust_fit(0,0);
x1=x2; x3=x4=w-x1; x3-x1=spread+2; y1=y3;
y2=y4=max(.5[bar_height,x_height]+.5vair,h-x_height);
if serifs: pickup crisp.nib; pos1(flare,0); pos2(vair,0);
 pos3(flare,0); pos4(vair,0);
 y1+.5stem=h; filldraw circ_stroke z1e--z2e;  % left stem and bulb
 filldraw circ_stroke z3e--z4e;  % right stem and bulb
else: pickup fine.nib; pos1(stem,0); pos2(vair,0);
 pos3(stem,0); pos4(vair,0);
 top y1=h; filldraw stroke z1e--z2e;  % left stem
 filldraw stroke z3e--z4e; fi  % right stem
penlabels(1,2,3,4); endchar;

% From font cmsy10, file sym.mf
cmchar "Infinity";
beginchar(oct"001",18u#,x_height#,0);
italcorr .7x_height#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
numeric theta,phi;
if monospace: phi=-theta=90;
else: phi=angle(4u,h); theta=angle(6u,-h); fi
pos1(vair,180); pos2(.5[vair,curve],90+.5theta); pos3(curve,90+theta);
pos4(curve,90+theta); pos5(.5[vair,curve],90+.5theta);
pos6(vair,180); pos7(.2[vair,curve],270+.5phi);
pos8(.3[vair,curve],270+phi); pos9(.2[vair,curve],270+.5phi);
lft x1r=w-rt x6l=hround u; x2=x9=.4[x1,x8]; x5=x7=.6[x8,x6];
if monospace: x2l:=x2r; x5r:=x5l; x7r:=x7l; x9l:=x9r; fi
y1=y6=.5h; top y2r=top y7l=h+oo; bot y5l=bot y9r=-oo;
x8=.5[x3,x4]=.5w; y8=.5[y3,y4]=.5h;
y3-y4=h/3; z3-z4=whatever*dir theta;
filldraw stroke z1e{up}...z2e{right}...z3e---z4e...z5e{right}
 ...z6e{up}...z7e{left}...{-dir phi}z8e...{left}z9e...z1e{up}; % bowls
penlabels(1,2,3,4,5,6,7,8,9); endchar;

% From font cmsy10, file sym.mf
cmchar "Set union sign";
beginchar(oct"005",12u#,.8asc_height#,0);
italcorr .8asc_height#*slant-.5u#;
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
y1=good.y h+o; bot y3=-o; y2=y4=2/3[y1,y3]; y5=y1;
draw z1---z2...z3...z4---z5;  % stems and cup
labels(1,2,3,4,5); endchar;

% From font cmsy10, file sym.mf
cmchar "Set intersection sign";
beginchar(oct"034",12u#,.8asc_height#,0);
italcorr .8asc_height#*slant-.5u#;
adjust_fit(0,0); pickup rule.nib; autorounded;
lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
y3=good.y h+o; bot y1=-o; y2=y4=2/3[y1,y3]; y5=y1;
draw z1---z2...z3...z4---z5;  % stems and cap
labels(1,2,3,4,5); endchar;

% My own creation
cmchar "Square root extender";
beginchar(oct"006",12u#,14u#,0);
 adjust_fit(0,0); pickup rule.nib;
 bot lft z1=(0,h); bot rt z2=(w+2u,h); draw z1--z2;
 penlabels(1,2);
endchar;

% From font cmsy10, file symbol.mf (hacked up to be above baseline)
cmchar "Radical sign";
beginchar(oct"013",15u#,14u#,2u#);
 adjust_fit(0,-letter_fit#); pickup rule.nib;
 x1=good.x 4/9w; x2=good.x(w+.5); bot y1=-2u; bot y2=14u;
 draw z1--z2;  % diagonal
 pickup crisp.nib; pos3(max(curve,rule_thickness),0);
 x3l=1.5[x2,x1]; y3=.5[y1,y2];
 pos4(rule_thickness,0); x4=x1; bot y4=-2u;
 pos5(vair,-45); x5l=good.x(x3l-u); z5l=whatever[z3r,z2];
 z6=z5r+whatever*(z2-z3r)=whatever[z3l,z4l];
 z7=whatever[z1,z2]=z3r+whatever*(z4l-z3l);
 filldraw z5r--z6--z4l--z4--z7--z3r--z5l--cycle;  % left diagonal and serif
 penlabels(1,2,3,4,5,6,7);
endchar;

% The following TRW logo is designed by Mike Urban and put in the Bell
% System logo position.  The Bell System logo is not even used by AT&T
% anymore and I work for TRW---so there.  There is some perverse 
% appropriateness in having the escape sequence \(bs.
def fixpt(expr pta,ptb,theta)=
    if known xpart pta:
        ((ypart pta)-(ypart ptb))/((xpart pta)-(xpart ptb))=
            (sind theta)/(cosd theta);
    else:
        ((xpart pta)-(xpart ptb))/((ypart pta)-(ypart ptb))=
            (cosd theta)/(sind theta);
    fi;
enddef;

def over(expr pta,ptb,delta)=
    xpart pta = (xpart ptb)+(delta/cosd 20);
enddef;

input logodesign;

a#:=cap_height#/3.91;
define_pixels(a);
beginchar(oct"007", 12.82a#, 3.91a#, 0);
LOGO;
endchar;

% From the font cmsy10, file sym.mf
cmchar "Integral sign";
beginchar(oct"015",5.25u#+max(1.25u#,stem#)+2max(1.5u#,curve#),
 asc_height#,desc_depth#);
italcorr asc_height#*slant-.5u#;
adjust_fit(0,0); pickup fine.nib;
pos1(curve,0); pos2(hair,0); pos3(vair,90); pos4(.6[hair,stem],180);
pos5(stem,180); pos5'(stem,0); z5'=z5; pos6(.6[hair,stem],0);
pos7(vair,-90); pos8(hair,-180); pos9(curve,-180);
x7=w-x3=2.4u; rt x1r=max(rt x3+eps,hround(w-u)); x9=w-x1;
x5=.5[x4,x6]; x4-x6=1.5u; lft x5r=hround(.5w-.5stem);
y9-.5curve=vround(-.9d-o+vair); y3-y1=y9-y7;
top y3r=h+o; bot y7r=-d-o; y5=.5[y3,y7]=.5[y4,y6]; y4-y6=2/3(y3-y7);
bulb(3,2,1); bulb(7,8,9);  % bulbs
filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1}
 ..tension atleast 1 and atleast .8..{z5-z4}z5e;  % upper stem
filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1
 ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e;  % lower stem
math_fit(0,-2u#); 
% It looks better with troff if we move it over 1 unit to the left
currentpicture:=currentpicture shifted (-1u,0);
penlabels(1,2,3,4,5,6,7,8,9); endchar;

% From the font cmr10, file punct.mf
cmchar "Hash mark (number sign)";
if monospace: compute_spread(.6x_height#,.7x_height#);
else: compute_spread(.45x_height#,.55x_height#); fi
beginchar("#",15u#,asc_height#,asc_depth#);
italcorr (math_axis#+.5(spread#+rule_thickness#))*slant-.5u#;
adjust_fit(0,0);
pickup rule.nib; lft x1=hround u-eps; x3=x1; x2=x4=w-x1;
y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
draw z1--z2;  % upper bar
draw z3--z4;  % lower bar
lft x6=hround 3u; rt x7=hround(w-3u); x5-x6=x7-x8;
x8=good.x if monospace: .6 else: .5 fi\\w;
top y5=top y7=h+eps; bot y6=bot y8=-d-eps;
y15=y1; z15=whatever[z5,z6]; y36=y3; z36=whatever[z5,z6];
y27=y2; z27=whatever[z7,z8]; y48=y4; z48=whatever[z7,z8];
draw z5--if x5>x6+1:(good.x(x15+.5),y1)--(good.x(x15-.5),y1)
 --(good.x(x36+.5),y3)--(good.x(x36-.5),y3)--fi\\z6;  % left diagonal
draw z7--if x7>x8+1:(good.x(x27+.5),y2)--(good.x(x27-.5),y2)
 --(good.x(x48+.5),y4)--(good.x(x48-.5),y4)--fi\\z8;  % right diagonal
labels(1,2,3,4,5,6,7,8,15,27,36,48); endchar;

% From font cmr10, file punct.mf
cmchar "Plus sign";
beginarithchar("+"); pickup rule.nib;
x1=x2=good.x .5w; top y1=h+eps; .5[y1,y2]=math_axis;
lft x3=hround u-eps; x4=w-x3; y3=y4=math_axis;
draw z1--z2;  % stem
draw z3--z4;  % crossbar
labels(1,2,3,4); endchar;

% From font cmr10, file accent.mf
cmchar "Grave accent";
beginchar(oct"140",9u#,min(asc_height#,2x_height#),0);
adjust_fit(0,0);
if serifs: pickup crisp.nib; x1-.5stem=hround 2u; x2=2/3[x1,w-x1];
 y1+.5stem=h+eps; y2=max(2/3[h,x_height],x_height+o+hair);
 numeric theta; theta=angle(z2-z1)+90;
 pos1(stem,theta); pos2(hair,theta);
 filldraw circ_stroke z1e--z2e;  % diagonal
else: pickup fine.nib; pos1(stem,0); pos2(vair,0);
 lft x1l=hround 1.5u; rt x2r=hround(.5w+.25u+.5vair);
 top y1=h; bot y2=vround 2/3[h,x_height];
 filldraw stroke z1e--z2e; fi  % diagonal
penlabels(1,2); endchar;

% From font cmr10, file accent.mf
cmchar "Acute accent";
beginchar(oct"047",9u#,min(asc_height#,2x_height#),0);
italcorr h#*slant-if serifs: 1.5 fi u#;
adjust_fit(0,0);
if serifs: pickup crisp.nib; x1+.5stem=hround(w-2u); x2=2/3[x1,w-x1];
 y1+.5stem=h+eps; y2=max(2/3[h,x_height],x_height+o+hair);
 numeric theta; theta=angle(z2-z1)+90;
 pos1(stem,theta); pos2(hair,theta);
 filldraw circ_stroke z1e--z2e;  % diagonal
else: pickup fine.nib; pos1(stem,0); pos2(vair,0);
 rt x1r=hround(w-1.5u); lft x2l=hround(.5w-.25u-.5vair);
 top y1=h; bot y2=vround 2/3[h,x_height];
 filldraw stroke z1e--z2e; fi  % diagonal
penlabels(1,2); endchar;

% From font cmr10, file punct.mf
cmchar "Equals sign";
compute_spread(.45x_height#,.55x_height#);
beginchar("=",14u#,v_center(spread#+rule_thickness#));
italcorr h#*slant-.5u#;
adjust_fit(0,0); pickup rule.nib;
lft x1=hround u-eps; x3=x1; x2=x4=w-x1;
y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
draw z1--z2;  % upper bar
draw z3--z4;  % lower bar
labels(1,2,3,4); endchar;

% From font cmr10, file punct.mf
cmchar "At sign";
beginchar("@",14u#,asc_height#,0);
italcorr .7asc_height#*slant-.5u#;
adjust_fit(0,if hefty or monospace:-2u# else: 0 fi);
pickup fine.nib; pos0(fudged.hair,0); pos1(vair,90);
pos2(fudged.stem,180); pos3(vair,270);
pos4(fudged.stem,-180); pos5(fudged.stem,-180);
pos6(vair,-90); pos7(fudged.hair,0);
pos8(vair,90); pos9(fudged.hair,180);
pos10(vair,270); pos11(.5[vair,flare],360);
x1=x3=.5[x0,x2]; y0=y2=.5[y1,y3];
x8=x10=.5w; y7=y9=.5[y8,y10];
lft x9r=hround u; x7=w-x9; top y8r=h+oo; bot y10r=-oo;
top y1r=vround(.8[y10,y8]+.5vair); bot y3r=vround(.2[y10,y8]-.5vair);
x6l=1/3[x5l,x7l]; y6=y3; y11=good.y(.1[y10,y8]-.5);
x0=x4=x5; y4=.8[y3,y1]; y5=2/3[y7,y6];
if hefty or monospace: lft x2r=hround(5u-.5fudged.stem);
 rt x0r=hround(w-3u); x11r=x0r;
else: lft x2r=hround 3.4u; x0=w-x2; x11r=x7r; fi
filldraw stroke super_arc.e(1,2) & super_arc.e(2,3);  % left inner bowl
filldraw stroke super_arc.e(3,0) & super_arc.e(0,1);  % right inner bowl
filldraw stroke super_arc.e(8,9) & super_arc.e(9,10)
 & term.e(10,11,right,1,4);  % left outer bowl and terminal
if hefty or monospace: {{interim superness:=hein_super;
  filldraw stroke super_arc.e(0,8)}};  % link
else: (x,y6r)=whatever[z6l,z7l]; x6r:=x;
 filldraw stroke z4e---z5e...z6e{right}...{up}z7e
  & super_arc.e(7,8); fi % stem and link
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;

% From font cmr10, file accent.mf
cmchar "Tilde (squiggle) accent";
beginchar(oct"176",9u#,min(asc_height#,10/7x_height#+.5dot_size#),0);
italcorr h#*slant-u#;
adjust_fit(0,0);
if serifs: numeric theta; theta=angle(1/6(6u-vair),1/4(h-x_height));
 pickup crisp.nib; numeric mid_width; mid_width=.4[vair,stem];
 pos1(vair,theta+90); pos2(vair,theta+90);
 pos3(vair,theta+90); pos4(vair,theta+90);
 z2-z1=z4-z3=(mid_width-crisp)*dir theta;
 lft x1r=w-rt x4l=hround 1.5u; top y4r=h;
 bot y1l=vround(bot y1l+min(2/3[x_height,h],y3l-.25vair)-top y1r);
 pair delta; ypart delta=3(y3l-y1l); delta=whatever*dir theta;
 filldraw z1l..controls(z1l+delta)and(z3l-delta)..z3l..z4l
  --z4r..controls(z4r-delta)and(z2r+delta)..z2r..z1r--cycle;  % stroke
else: pickup fine.nib; pos1(vair,180); pos2(vair,90);
 pos3(.5[vair,slab],90); pos4(vair,90); pos5(vair,180);
 lft x1r=w-rt x5l=hround 1.5u; x2-x1=x3-x2=x4-x3=x5-x4;
 bot y1=bot y4l=vround(.75[x_height,h]-vair);
 top y2r=top y5=h; y3=.5[y2,y4];
 filldraw stroke z1e{up}...z2e{right}..z3e..{right}z4e...{up}z5e; fi % stroke
penlabels(1,2,3,4,5); endchar;

% From font cmsy10, file symbol.mf
cmchar "Circle for copyright, etc.";
beginchar(oct"135",18u#,asc_height#,desc_depth#); autorounded;
adjust_fit(if monospace:-3u#,-3u# else: 0,0 fi); pickup rule.nib;
lft x6=hround u; x2=w-x6; top y8=h+o; bot y4=-d-o;
circle_points; draw_circle;  % circle
labels(1,2,3,4,5,6,7,8); endchar;

% From font cmr10, file accent.mf
cmchar "Circumflex (hat) accent";
beginchar(oct"041",9u#,min(asc_height#,2x_height#),0);
if serifs: italcorr .5[x_height#,h#]*slant+.5hair#-1.75u#;
 adjust_fit(0,0);
 pickup crisp.nib; pos2(.5[vair,curve],90); top y2r=h; x2=.5w;
 x1=w-x3=good.x 2.25u; y1=y3=.5[x_height,y2];
 pos1(hair,angle(z2-z1)+90); pos3(hair,angle(z3-z2)+90);
 filldraw stroke z1e--z2e--z3e;  % diagonals
else: italcorr 2/3[x_height#,h#]*slant-.5stem#+.5vair#-.75u#;
 adjust_fit(0,0);
 pickup fine.nib; pos1(vair,0); pos3(vair,0); x1=w-x3;
 pos2(stem,0); top y2=h; x2=.5w; bot y1=bot y3=vround 2/3[h,x_height]-eps;
 lft x1l=hround(rt x2r-3.25u-.5vair); % same slope as in the acute accent
 z0=whatever[z1r,z2r]=whatever[z2l,z3l];
 y4l=y4r=y2; x4l=good.x .2[x2l,x2]; x4r=w-x4l;
 filldraw z4l--z1l--z1r--z0--z3l--z3r--z4r--cycle; fi  % diagonals
penlabels(0,1,2,3,4); endchar;

% From font cmr10, file accent.mf
cmchar "Circumflex (hat) accent";
beginchar(oct"136",9u#,min(asc_height#,2x_height#),0);
if serifs: italcorr .5[x_height#,h#]*slant+.5hair#-1.75u#;
 adjust_fit(0,0);
 pickup crisp.nib; pos2(.5[vair,curve],90); top y2r=h; x2=.5w;
 x1=w-x3=good.x 2.25u; y1=y3=.5[x_height,y2];
 pos1(hair,angle(z2-z1)+90); pos3(hair,angle(z3-z2)+90);
 filldraw stroke z1e--z2e--z3e;  % diagonals
else: italcorr 2/3[x_height#,h#]*slant-.5stem#+.5vair#-.75u#;
 adjust_fit(0,0);
 pickup fine.nib; pos1(vair,0); pos3(vair,0); x1=w-x3;
 pos2(stem,0); top y2=h; x2=.5w; bot y1=bot y3=vround 2/3[h,x_height]-eps;
 lft x1l=hround(rt x2r-3.25u-.5vair); % same slope as in the acute accent
 z0=whatever[z1r,z2r]=whatever[z2l,z3l];
 y4l=y4r=y2; x4l=good.x .2[x2l,x2]; x4r=w-x4l;
 filldraw z4l--z1l--z1r--z0--z3l--z3r--z4r--cycle; fi  % diagonals
penlabels(0,1,2,3,4); endchar;

% My own creation
cmchar "Box rule";
beginchar(oct"132",1u#,cap_height#+2u#,4.3u#);
italcorr body_height#*slant+.5rule_thickness#-2u#;
adjust_fit(0,0); pickup crisp.nib;
pos1(vair,0); pos2(vair,0);
x1=x2=hround 0; y1=h; y2=-d;
filldraw stroke z1e--z2e; % stem
penlabels(1,2); endchar;

% My own creation.  Only used by otroff.  See note below.
cmchar "Underscore";
beginchar("_",9.4u#,x_height#,.7u#);
italcorr .5x_height#*slant-.5u#;
adjust_fit(0,0);
numeric below_baseline; below_baseline#:=4u#;
define_pixels(below_baseline);
pickup crisp.nib; pos1(vair,90); pos2(vair,90);
top y1r=top y2r=vround(-below_baseline); x2=hround(w);
x1=0;
filldraw stroke z1e--z2e;  % bar
penlabels(1,2); endchar;

% My own creation (This is only used by ditroff.  Ditroff's underscore
% needs to be a frog's hair longer than otroff's.)
cmchar "Underscore";
beginchar(oct"041",9.4u#,x_height#,.7u#);
italcorr .5x_height#*slant-.5u#;
adjust_fit(0,0);
numeric below_baseline; below_baseline#:=4u#;
define_pixels(below_baseline);
pickup crisp.nib; pos1(vair,90); pos2(vair,90);
top y1r=top y2r=vround(-below_baseline); x2=hround(w+1u);
x1=0;
filldraw stroke z1e--z2e;  % bar
penlabels(1,2); endchar;

% The delimiters are from the font cmex10, file bigdel.mf.  I had to hack
% them up extensively though to get them to work with troff.  Troff wants
% everything lined up in the center and the widths of the floor and ceiling
% characters are the same as the parentheses.
cmchar "Extensible left bracket---top";
beginchar(oct"022",8u#,cap_height#+2u#,4u#);
adjust_fit(0,0); pickup fine.nib;
pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0);
top y1=h; y2=-d; x1=x2=hround(.5w);
filldraw stroke z1e--z2e;  % stem
pos3(heavy_rule_thickness,90); pos4(heavy_rule_thickness,90);
x3=x1l; rt x4=hround(w-.75u+.5heavy_rule_thickness); y3r=y4r=y1;
filldraw stroke z3e--z4e;  % upper bar
penlabels(1,2,3,4); endchar;

cmchar "Extensible left bracket---bottom";
beginchar(oct"020",8u#,cap_height#+4u#,2u#);
adjust_fit(0,0); pickup fine.nib;
pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0);
y1=h; bot y2=-d; x1=x2=hround(.5w);
filldraw stroke z1e--z2e;  % stem
pos5(heavy_rule_thickness,90); pos6(heavy_rule_thickness,90);
x5=x1l; rt x6=hround(w-.75u+.5heavy_rule_thickness); y5l=y6l=y2;
filldraw stroke z5e--z6e;  % lower bar
penlabels(1,2,5,6); endchar;

cmchar "Extensible right bracket---top";
beginchar(oct"023",8u#,cap_height#+2u#,4u#);
adjust_fit(0,0); pickup fine.nib;
pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0);
top y1=h; y2=-d; x1=x2=hround(.5w);
filldraw stroke z1e--z2e;  % stem
pos3(heavy_rule_thickness,90); pos4(heavy_rule_thickness,90);
x3=x1r; lft x4=hround(.75u-.5heavy_rule_thickness); y3r=y4r=y1;
filldraw stroke z3e--z4e;  % upper bar
penlabels(1,2,3,4); endchar;

cmchar "Extensible right bracket---bottom";
beginchar(oct"021",8u#,cap_height#+4u#,2u#);
adjust_fit(0,0); pickup fine.nib;
pos1(heavy_rule_thickness,0); pos2(heavy_rule_thickness,0);
y1=h; bot y2=-d; x1=x2=hround(.5w);
filldraw stroke z1e--z2e;  % stem
pos5(stem,90); pos6(stem,90);
x5=x1r; lft x6=hround(.75u-.5heavy_rule_thickness); y5l=y6l=y2;
filldraw stroke z5e--z6e;  % lower bar
penlabels(1,2,5,6); endchar;

cmchar "Extensible left curly brace---middle";
beginchar(oct"030",8u#,cap_height#+4u#,4u#);
adjust_fit(0,0); pickup fine.nib;
numeric min_breadth; min_breadth=hround(rule_thickness+.6dw);
pos4(min_breadth,0); pos4'(min_breadth,0);
forsuffixes $=2,3,5,6: pos$(heavy_rule_thickness,0); endfor
lft x4l=lft x4'l=hround(1.5u-.5min_breadth);
x2=x3=x5=x6; x2=hround(.5w);
y2=h; y6=-d; .5[y4,y4']=.5[y2,y6]=.5[y3,y5];
y3-y4=(y2-y6)/4; y4-y4'=min_breadth-fine;
filldraw z2l---z3l...{3(x4l-x3l),y4-y3}z4l
 --z4'l{3(x5l-x4l),y5-y4'}...z5l---z6l--z6r---z5r
 ...{3(x4r-x5r),.5[y4,y4']-y5}.5[z4r,z4'r]{3(x3r-x4r),y3-.5[y4,y4']}
 ...z3r---z2r--cycle;  % stroke
penlabels(2,3,4,5,6); endchar;

cmchar "Extensible right curly brace---middle";
beginchar(oct"031",8u#,cap_height#+4u#,4u#);
adjust_fit(0,0); pickup fine.nib;
numeric min_breadth; min_breadth=hround(rule_thickness+.6dw);
pos4(min_breadth,0); pos4'(min_breadth,0);
forsuffixes $=2,3,5,6: pos$(heavy_rule_thickness,0); endfor
rt x4r=rt x4'r=hround(w-1.5u+.5min_breadth);
x2=x3=x5=x6; x2=hround(.5w);
y2=h; y6=-d; .5[y4,y4']=.5[y2,y6]=.5[y3,y5];
y3-y4=(y2-y6)/4; y4-y4'=min_breadth-fine;
filldraw z2r---z3r...{3(x4r-x3r),y4-y3}z4r
 --z4'r{3(x5r-x4r),y5-y4'}...z5r---z6r--z6l---z5l
 ...{3(x4l-x5l),.5[y4,y4']-y5}.5[z4l,z4'l]{3(x3l-x4l),y3-.5[y4,y4']}
 ...z3l---z2l--cycle;  % stroke
penlabels(2,3,4,5,6); endchar;

cmchar "Extension module";
beginchar(oct"017",8u#,cap_height#+4u#,4u#);
adjust_fit(0,0); pickup fine.nib;
numeric max_breadth; max_breadth=bold+2dw;
pos2(heavy_rule_thickness,0); pos2'(heavy_rule_thickness,0);
x2=x2'=hround(.5w); y2=h; y2'=-d;
filldraw stroke z2e--z2'e;  % link
penlabels(2,2'); endchar;

cmchar "Extensible left curly brace---top";
beginchar(oct"024",8u#,cap_height#+2u#,4u#);
adjust_fit(0,0); pickup fine.nib;
numeric min_breadth; min_breadth=hround(rule_thickness+.6dw);
pos1(min_breadth,0); pos1'(min_breadth,0);
pos2(heavy_rule_thickness,0); pos3(heavy_rule_thickness,0);
rt x1r=rt x1'r=hround(w-1.5u+.5min_breadth);
x2=x3=hround(.5w);
top y1=h; y3=-d; y2=.5[y1,y3]; y1-y1'=min_breadth-fine;
filldraw z1l{3(x2l-x1l),y2-y1}...z2l---z3l
 --z3r---z2r...{3(x1r-x2r),y1'-y2}z1'r--z1r--cycle;  % stroke
penlabels(1,2,3); endchar;

cmchar "Extensible left curly brace---bottom";
beginchar(oct"025",8u#,cap_height#+4u#,2u#);
adjust_fit(0,0); pickup fine.nib;
numeric min_breadth; min_breadth=hround(rule_thickness+.6dw);
pos7(min_breadth,0); pos7'(min_breadth,0);
pos5(heavy_rule_thickness,0); pos6(heavy_rule_thickness,0);
rt x7r=rt x7'r=hround(w-1.5u+.5min_breadth);
x5=x6=hround(.5w);
y5=h; y7=-d; y6=.5[y5,y7]; y7'-y7=min_breadth-fine;
filldraw z5l---z6l...{3(x7l-x6l),y7-y6}z7l
 --z7r--z7'r{3(x6r-x7r),y6-y7'}...z6r---z5r--cycle;  % stroke
penlabels(5,6,7); endchar;

cmchar "Extensible right curly brace---top";
beginchar(oct"026",8u#,cap_height#+2u#,4u#);
adjust_fit(0,0); pickup fine.nib;
numeric min_breadth; min_breadth=hround(rule_thickness+.6dw);
pos1(min_breadth,0); pos1'(min_breadth,0);
pos2(heavy_rule_thickness,0); pos3(heavy_rule_thickness,0);
lft x1l=lft x1'l=hround(1.5u-.5min_breadth);
x2=x3=hround(.5w);
top y1=h; y3=-d; y2=.5[y1,y3]; y1-y1'=min_breadth-fine;
filldraw z1r{3(x2r-x1r),y2-y1}...z2r---z3r
 --z3l---z2l...{3(x1l-x2l),y1'-y2}z1'l--z1l--cycle;  % stroke
penlabels(1,2,3); endchar;

cmchar "Extensible right curly brace---bottom";
beginchar(oct"027",8u#,cap_height#+4u#,2u#);
adjust_fit(0,0); pickup fine.nib;
numeric min_breadth; min_breadth=hround(rule_thickness+.6dw);
pos7(min_breadth,0); pos7'(min_breadth,0);
pos5(heavy_rule_thickness,0); pos6(heavy_rule_thickness,0);
lft x7l=lft x7'l=hround(1.5u-.5min_breadth);
x5=x6=hround(.5w);
top y5=h; bot y7=-d; y6=.5[y5,y7]; y7'-y7=min_breadth-fine;
filldraw z5r---z6r...{3(x7r-x6r),y7-y6}z7r
 --z7l--z7'l{3(x6l-x7l),y6-y7'}...z6l---z5l--cycle;  % stroke
penlabels(5,6,7); endchar;

bye.