perm filename SYMB.MF[1,3]2 blob sn#520991 filedate 1980-07-07 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00063 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00005 00002	"Minus sign"
C00006 00003	"Period raised to axis height"
C00007 00004	"Times operator"
C00008 00005	"Asterisk at the axis"
C00010 00006	"Reverse slash"
C00011 00007	"Circle operator"
C00012 00008	"Plus or minus sign"
C00013 00009	"Minus or plus sign"
C00014 00010	"Circle-plus operator"
C00015 00011	"Circle-minus operator"
C00016 00012	"Circle-times operator"
C00017 00013	"Circle-divide operator"
C00018 00014	"Circle-dot operator"
C00019 00015	"Elementary division operator"
C00020 00016	"Intercalation product operator"
C00021 00017	"Bullet"
C00022 00018	"Perpendicular sign or lattice bottom"
C00023 00019	"Equivalence or congruence sign"
C00024 00020	"Reflexive subset sign"
C00025 00021	"Reflexive superset sign"
C00026 00022	"Less than or equal to sign"
C00027 00023	"Greater than or equal to sign"
C00028 00024	"Precedes or equals sign"
C00029 00025	"Follows or equals sign"
C00030 00026	"Similarity sign"
C00031 00027	"Approximate equality sign"
C00032 00028	"Proper subset sign"
C00033 00029	"Proper superset sign"
C00034 00030	"Unequal sign"
C00035 00031	"Dot over equal sign"
C00036 00032	"Precedes sign"
C00037 00033	"Follows sign"
C00038 00034	"Leftward arrow"
C00039 00035	"Rightward arrow"
C00040 00036	"Upward arrow"
C00041 00037	"Downward arrow"
C00042 00038	"Left-and-right arrow"
C00044 00039	"Much less sign"
C00045 00040	"Much greater sign"
C00046 00041	"Similar or equal sign"
C00047 00042	"Double leftward arrow"
C00048 00043	"Double rightward arrow"
C00049 00044	"Double upward arrow"
C00050 00045	"Double downward arrow"
C00051 00046	"Double left-and-right arrow"
C00053 00047	"Left shift sign"
C00054 00048	"Right shift sign"
C00055 00049	"Maps-to relation"
C00056 00050	"Prime symbol (intended as superscript only)"
C00057 00051	"Infinity"
C00058 00052	"Element sign"
C00059 00053	"Nonelement sign"
C00060 00054	"Empty set symbol"
C00061 00055	"Underline"
C00062 00056	"Angle sign"
C00063 00057	"Universal quantifier"
C00064 00058	"Existential quantifier"
C00065 00059	"Logical NOT"
C00066 00060	"Hebrew letter aleph"
C00068 00061	"Upper case Fraktur R"
C00071 00062	"Upper case Fraktur I"
C00073 00063	"Lattice top"
C00074 ENDMK
CāŠ—;
"Minus sign";
cpen; call charbegin('000,fixwidth[18,9],0,0,3.5pu+pa,0,0);
lft10x1=round u; x2=r-x1; y1=y2=a;
w10 draw 1..2.	% bar
"Period raised to axis height";
call charbegin('001,5,0,0,3.5pu+pa,0,0);
cpen; new w99; w99=round 1.1w3;
x1=good99 .5r; y1=a; w99 draw 1.	% dot
"Times operator";
call charbegin('002,18,0,0,1/sqrttwo[pa,ph],1/sqrttwo[pa,ph-2pa],0);
cpen; x7=1/sqrttwo[.5r,u]; y7=1/sqrttwo[a,h];
x5=x7; x1=x3=r-x7; y1=y7; y3=y5; .5[y1,y3]=a;
w10 draw 7..3;	% upper left to lower right diagonal
draw 5..1.	% lower left to upper right diagonal
"Asterisk at the axis";
call charbegin('003,9,0,0,.5px+pa,.5px-pa,0);
new w99; w99=round(.6pixels.pw+blacker);	% thinner than hairline
new w98; w98=round .7[w99,w1];
cpen; top1y1=round(a+.5m); top1y1-bot1y2=m;
y0=.5[y1,y2]; x0=r-x0; x1=x2=x0;
x3=r-x4; x5=r-x6; x3=x5;	% left-right symmetry
y3=y4; y5=y6; y3-y5=y1-y0; .5[y3,y5]=y0;
x4-x0=(.5sqrt3)lft1 3.75u;	% asterisk will have 60-degree angles if $m=7.5u$
call `a cdraw(1,0,98,99);	% upper arm
call `b cdraw(2,0,98,99);	% lower arm
call `c cdraw(3,0,98,99);	% upper left arm
call `d cdraw(4,0,98,99);	% upper right arm
call `e cdraw(5,0,98,99);	% lower left arm
call `f cdraw(6,0,98,99).	% lower right arm
"Reverse slash";
call charbegin('004,9,0,0,ph+pb,ph+pb-2pa,0);
cpen; lft10x2=round u; x2=r-x1;
top10y2=h+b; .5[y1,y2]=a;
w10 draw 1..2.	% diagonal
"Circle operator";
call charbegin('005,9,0,0,3.5pu+pa,3.5pu-pa,0);
cpen; x8=.5r; lft10x6=round u; top10y8=round(a+3.5u); y6=a;
call circle(1,2,3,4,5,6,7,8,w10).	% bowl
"Plus or minus sign";
cpen;
if fixwidth=0: if pa+8pu>ph:
		call charbegin('006,18,0,0,ph,ph-2pa,0); top10y1=h;
	else: call charbegin('006,18,0,0,8pu+pa,8pu-pa,0); top10y1=a+8u;
	fi;
else: call charbegin('006,9,0,0,3.5pu+pa,3.5pu-pa,0); top10y1=a+3.5u;
fi;
.5[y1,y2]=a; x1=x2=.5r;
lft10x3=round u; x4=r-x3; y3=y4=a;
w10 draw 1..2;	% stem
draw 3..4;	% plus bar
x5=x3; x6=x4; y5=y6=y2; draw 5..6.	% minus bar
"Minus or plus sign";
cpen;
if fixwidth=0: if pa+8pu>ph:
		call charbegin('007,18,0,0,ph,ph-2pa,0); top10y1=h;
	else: call charbegin('007,18,0,0,8pu+pa,8pu-pa,0); top10y1=a+8u;
	fi;
else: call charbegin('007,9,0,0,3.5pu+pa,3.5pu-pa,0); top10y1=a+3.5u;
fi;
.5[y1,y2]=a; x1=x2=.5r;
lft10x3=round u; x4=r-x3; y3=y4=a;
w10 draw 1..2;	% stem
draw 3..4;	% plus bar
x5=x3; x6=x4; y5=y6=y1; draw 5..6.	% minus bar
"Circle-plus operator";
call charbegin('010,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
w0 draw 6..2;	% bar
draw 4..8.	% stem
"Circle-minus operator";
call charbegin('011,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
w0 draw 6..2.	% bar
"Circle-times operator";
call charbegin('012,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
w0 draw 7..3;	% upper left to lower right diagonal
draw 5..1.	% lower left to upper right diagonal
"Circle-divide operator";
call charbegin('013,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
w0 draw 5..1.	% lower left to upper right diagonal
"Circle-dot operator";
call charbegin('014,18,0,0,ph,ph-2pa,pa.slant-.5pu);
cpen; lft0x6=round u; y6=a; x8=r-x8; top0y8=h+oo;
call circle(1,2,3,4,5,6,7,8,w0);	% bowl
x0=x8; y0=y2;
cpen; new w99; w99=w3sqrt2; w99 draw 0.	% dot
"Elementary division operator";
call charbegin('015,18,0,0,.5[px,ph],.5[px,ph]-2pa,0);
cpen; lft10x1=round u; x2=r-x1; y1=y2=a;
w10 draw 1..2;	% bar
new w99; w99=w3sqrt2;
top99y3=.5[m,h]; .5[y3,y4]=a;
x3=x4=.5r;
w99 draw 3; draw 4.	% dots
"Intercalation product operator";
call charbegin('016,9,0,0,px,pd+pb,0);
vpen; lft3x1=u; rt3x2=r-u; x3=x4=.5r;
top3y1=m; y1=y2=y3; bot6y4=-d-b;
w3 draw 1..2;	% bar
hpen; w3 draw 3..4.	% stem
"Bullet";
call charbegin('017,9,0,0,3.5pu+pa,3.5pu-pa,0);
cpen; x8=.5r; lft10x6=round u; top10y8=round(a+3.5u); y6=a;
call circle(1,2,3,4,5,6,7,8,w10);	% outer boundary
x0=x8; y0=y2;
cpen; w10 ddraw 1{x2-x8,y2-y8}..2{0,-1}..3{x4-x2,y4-y2}..4{-1,0}..
	5{x6-x4,y6-y4}..6{0,1}..7{x8-x6,y8-y6}..8{1,0}..1{x2-x8,y2-y8},
	0..0..0..0..0..0..0..0..0.	% fill it in
"Perpendicular sign or lattice bottom";
cpen;
if fixwidth=0: if pa+8pu>ph:
		call charbegin('020,18,0,0,ph,ph-2pa,0); top10y1=h;
	else: call charbegin('020,18,0,0,8pu+pa,8pu-pa,0); top10y1=a+8u;
	fi;
else: call charbegin('020,9,0,0,3.5pu+pa,3.5pu-pa,0); top10y1=a+3.5u;
fi;
.5[y1,y2]=a; x1=x2=.5r;
lft10x3=round u; x4=r-x3; y3=y4=y2;
w10 draw 1..2;	% stem
draw 3..4.	% bar
"Equivalence or congruence sign";
call charbegin('021,18,0,0,px-pe+prt/2+pa,px-pe+prt/2-pa,0);
cpen; lft10x1=round u; x3=x5=x1; x2=x4=x6=r-x1;
y1=y2; y3=y4=a; y5=y6; y1-y3=y3-y5=round(m-e);
w10 draw 1..2;	% upper bar
draw 3..4;	% middle bar
draw 5..6.	% lower bar
"Reflexive subset sign";
call charbegin('022,18,0,0,ph,ph-2pa,0);
cpen; lft10x1=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=.5r; y4=y2; y5=y3;
w10 draw 2..4{-1,0}..1{0,-1}..5{1,0}..3;	% stroke
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Reflexive superset sign";
call charbegin('023,18,0,0,ph,ph-2pa,0);
cpen; lft10x2=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=.5r; y4=y2; y5=y3;
w10 draw 2..4{1,0}..1{0,-1}..5{-1,0}..3;	% stroke
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Less than or equal to sign";
call charbegin('024,18,0,0,ph,ph-2pa,0);
cpen; lft10x1=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
w10 draw 2..1..1..3;	% diagonals
x4=x1; x5=x2; y4=y5; bot10y4=2a-h;
draw 4..5.	% bar
"Greater than or equal to sign";
call charbegin('025,18,0,0,ph,ph-2pa,0);
cpen; lft10x2=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
w10 draw 2..1..1..3;	% diagonals
x4=x1; x5=x2; y4=y5; bot10y4=2a-h;
draw 4..5.	% bar
"Precedes or equals sign";
call charbegin('026,18,0,0,ph,ph-2pa,0);
vpen; lft10x1=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{-1,0}..1{1,0}..3(..5);	% diagonals
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Follows or equals sign";
call charbegin('027,18,0,0,ph,ph-2pa,0);
vpen; lft10x2=round 2.5u; x2=x3=r-x1;
top10y2=h; .5[y2,y3]=y1; y2-y1=(good10 .5[m,h])-(good10 a);
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{1,0}..1{-1,0}..3(..5);	% diagonals
x6=x1; x7=x2; y6=y7; bot10y6=2a-h;
draw 6..7.	% bar
"Similarity sign";
call charbegin('030,18,0,0,.5(px-pe)+pa,0,0);
vpen; top10y1=round(a+.5(m-e)+eps); top10y1-bot10y2=round(m-e);
lft10x3=round u; y5=.5[y1,y2]; y3=y2; y4=y1; x4=r-x3; x5=r-x5;
call `a zdraw(3,1,5,2,4,w10,w10+deltaw,7.5u/(e-m)).	% stroke
"Approximate equality sign";
call charbegin('031,18,0,0,1.1(px-pe)+pa,1.1(px-pe)-pa,0);
vpen; top10y1=round(a+1.1(m-e)+eps); top10y1-bot10y2=round(m-e);
lft10x3=round u; y5=.5[y1,y2]; y3=y2; y4=y1; x4=r-x3; x5=r-x5;
x8=x3; x9=x4; x10=x5;
y1-y6=y2-y7=y3-y8=y4-y9=y5-y10=round 1.2(m-e);
call `a zdraw(3,1,5,2,4,w10,w10+deltaw,7.5u/(e-m));	% upper stroke
call `b zdraw(8,6,10,7,9,w10,w10+deltaw,7.5u/(e-m)).	% lower stroke
"Proper subset sign";
call charbegin('032,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
cpen; lft10x1=round 2.5u; x2=x3=r-x1;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
x4=x5=.5r; y4=y2; y5=y3;
w10 draw 2..4{-1,0}..1{0,-1}..5{1,0}..3.	% stroke
"Proper superset sign";
call charbegin('033,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
cpen; lft10x2=round 2.5u; x2=x3=r-x1;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
x4=x5=.5r; y4=y2; y5=y3;
w10 draw 2..4{1,0}..1{0,-1}..5{-1,0}..3.	% stroke
"Unequal sign";
call charbegin('034,18,0,0,ph+pb,ph+pb-2pa,0);
cpen; lft10x1=round u; x3=x1; x2=x4=r-x1;
y1=y2; y3=y4; y1-y3=round(m-e); .5[y1,y3]=a;
w10 draw 1..2;	% upper bar
draw 3..4;	% lower bar
rt10x5=round(r-2u); lft10x6=round 2u;
top10y5=h+b; bot10y6=-d-b;
draw 5..6.	% diagonal
"Dot over equal sign";
call charbegin('035,18,0,0,ph,0,0);
cpen; lft10x1=round u; x3=x1; x2=x4=r-x1;
y1=y2; y3=y4; y1-y3=round(m-e); .5[y1,y3]=a;
w10 draw 1..2;	% upper bar
draw 3..4;	% lower bar
new w99;
if w3<w0sqrt2: w99=round w0 sqrt 2;
else: w99=w3;
fi;
x5=.5r; y5=.5[m,h]; w99 draw 5.	% dot
"Precedes sign";
call charbegin('036,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
vpen; lft10x1=round 2.5u; x2=x3=r-x1;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{-1,0}..1{1,0}..3(..5).	% diagonals
"Follows sign";
call charbegin('037,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
vpen; lft10x2=round 2.5u; x2=x3=r-x1;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
x4=x5=x2; y4=y2+b; y5=y3-b;
w10 draw (4..)2..1{1,0}..1{-1,0}..3(..5).	% diagonals
"Leftward arrow";
call charbegin('040,18,0,0,.24ph+.5prt+pa,.24ph+.5prt-pa,0);
cpen; lft10x1=x0=round u; rt10x2=round(r-u);
y1=y2=y5=y8=good10 a;
w10 draw 1..2;	% bar
hpen; lft1x8=x0;
x5-x8=x8-x3=-fixwidth[3u,6u]-eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
lpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower left
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
lpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper left
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Rightward arrow";
call charbegin('041,18,0,0,.24ph+.5prt+pa,.24ph+.5prt-pa,0);
cpen; lft10x2=round u; rt10x1=x0=round(r-u);
y1=y2=y5=y8=good10 a;
w10 draw 1..2;	% bar
hpen; rt1x8=x0;
x5-x8=x8-x3=fixwidth[3u,6u]+eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
rpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Upward arrow";
call charbegin('042,9,0,0,ph,ph-2pa,0);
cpen; top10y1=y0=h; .5[y1,y2]=a;
x0=x1=x2=x5=x8=good10 .5r;
w10 draw 1..2;	% stem
vpen; top7y8=y0;
lpen#; w10 draw 0..8; rpen#; w10 draw 0..8;	% clean the top
y5-y8=y8-y3=.24h+eps; y3=y4=y6=y7;
x3-x6=x1-x3=x4-x1=x7-x4=3u+eps;
lpen#; w10 draw (5..)8..3(..6);	% erase excess at left
vpen; draw (|w7|5..)8..|w6|3(..6);	% left point
rpen#; w10 draw (5..)8..4(..7);	% erase excess at right
vpen; draw (|w7|5..)8..|w6|4(..7).	% right point
"Downward arrow";
call charbegin('043,9,0,0,ph,ph-2pa,0);
cpen; top10y2=h; .5[y1,y2]=a; y0=bot10y1;
x0=x1=x2=x5=x8=good10 .5r;
w10 draw 1..2;	% stem
vpen; bot7y8=y0;
lpen#; w10 draw 0..8; rpen#; w10 draw 0..8;	% clean the top
y5-y8=y8-y3=-.24h-eps; y3=y4=y6=y7;
x3-x6=x1-x3=x4-x1=x7-x4=3u+eps;
lpen#; w10 draw (5..)8..3(..6);	% erase excess at left
vpen; draw (|w7|5..)8..|w6|3(..6);	% left point
rpen#; w10 draw (5..)8..4(..7);	% erase excess at right
vpen; draw (|w7|5..)8..|w6|4(..7).	% right point
"Left-and-right arrow";
call charbegin('044,18,0,0,.24ph+.5prt+pa,.24ph+.5prt-pa,0);
cpen; lft10x2=x10=round u; rt10x1=x0=round(r-u);
y1=y2=y5=y8=good10 a;
w10 draw 1..2;	% bar
hpen; rt1x8=x0; lft1x18=x10;
x5-x8=x8-x3=x13-x18=x18-x15=fixwidth[3u,6u]+eps;
x3=x4=x6=x7; x13=x14=x16=x17;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
y13=y3; y14=y4; y15=y5; y16=y6; y17=y7; y18=y8;
rpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower right point
rpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7);	% upper right point
lpen#; w10+w1 draw (15..)18..13(..16);	% erase excess at lower left
hpen; draw (|w1|15..)18..|w0|13(..16);	% lower left point
lpen#; w10+w1 draw (15..)18..14(..17);	% erase excess at upper left
hpen; draw (|w1|15..)18..|w0|14(..17).	% upper left point
"Much less sign";
call charbegin('045,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
cpen; lft10x1=round u; rt10x2=round 11.5u; x3=x2;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
w10 draw 2..1..1..3;	% left diagonals
rt10x5=round(r-u); x6=x5; x4-x1=x5-x2; y4=y1; y5=y2; y6=y3;
draw 5..4..4..6.	% right diagonals
"Much greater sign";
call charbegin('046,18,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
cpen; lft10x2=round u; rt10x1=round 11.5u; x3=x2;
y2=good10 .5[m,h]; .5[y2,y3]=y1=good10 a;
w10 draw 2..1..1..3;	% left diagonals
rt10x4=round(r-u); x6=x5; x4-x1=x5-x2; y4=y1; y5=y2; y6=y3;
draw 5..4..4..6.	% right diagonals
"Similar or equal sign";
call charbegin('047,18,0,0,px-pe+prt/2+pa,px-pe+prt/2-pa,0);
vpen; top10y1=round(a+(m-e)+eps); top10y1-bot10y2=round(m-e);
lft10x3=round u; y5=.5[y1,y2]; y3=y2; y4=y1; x4=r-x3; x5=r-x5;
call `a zdraw(3,1,5,2,4,w10,w10+deltaw,7.5u/(e-m));	% stroke
cpen; y6=y7; a-y6=round(m-e); lft10x6=round u; x7=r-x6;
w10 draw 6..7.	% bar
"Double leftward arrow";
call charbegin('050,18,0,0,.24ph+.5prt+.5(px-pe)+pa,
				.24ph+.5prt+.5(px-pe)-pa,0);
cpen; lft10x1=x0=round u; rt10x2=round(r-u); x11=x1; x12=x2;
y5=y8=good10 a; y1=y2; y11=y12; .5[y1,y11]=y5; y1-y11=round(m-e);
w10 draw 1..2; draw 11..12;	% bars
hpen; lft1x8=x0;
x5-x8=x8-x3=-fixwidth[3u,6u]-eps; x3=x4=x6=x7;
y3-y6=y11-y3=y4-y1=y7-y4=.24h+eps;
lpen#; w10+w1 ddraw (5..)8..3(..6), 11..11;	% erase excess at lower left
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
lpen#; w10+w1 ddraw (5..)8..4(..7), 1..1;	% erase excess at upper left
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Double rightward arrow";
call charbegin('051,18,0,0,.24ph+.5prt+.5(px-pe)+pa,
				.24ph+.5prt+.5(px-pe)-pa,0);
cpen; lft10x2=round u; rt10x1=x0=round(r-u); x11=x1; x12=x2;
y5=y8=good10 a; y1=y2; y11=y12; .5[y1,y11]=y5; y1-y11=round(m-e);
w10 draw 1..2; draw 11..12;	% bars
hpen; rt1x8=x0;
x5-x8=x8-x3=fixwidth[3u,6u]+eps; x3=x4=x6=x7;
y3-y6=y11-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w10+w1 ddraw (5..)8..3(..6), 11..11;	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
rpen#; w10+w1 ddraw (5..)8..4(..7), 1..1;	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Double upward arrow";
call charbegin('052,9,0,0,ph,ph-2pa,0);
cpen; top10y1=y0=h; .5[y1,y2]=a; y11=y1; y12=y2;
x0=x5=x8=good10 .5r; x1=x2; x11=x12;
.5[x1,x11]=x5; x1-x11=round 3.5u;
w10 draw 1..2; draw 11..12;	% stems
vpen; top7y8=y0;
lpen#; 2u+w10 draw 0..8; rpen#; 2u+w10 draw 0..8;	% clean the top
y5-y8=y8-y3=.24h+eps; y3=y4=y6=y7;
x3-x6=x12-x3=x4-x1=x7-x4=3u+eps;
lpen#; 2u+w10 draw (5..)8..3(..6);	% erase excess at left
vpen; draw (|w7|5..)8..|w6|3(..6);	% left point
rpen#; 2u+w10 draw (5..)8..4(..7);	% erase excess at right
vpen; draw (|w7|5..)8..|w6|4(..7).	% right point
"Double downward arrow";
call charbegin('053,9,0,0,ph,ph-2pa,0);
cpen; top10y2=h; .5[y1,y2]=a; y0=bot10y1; y11=y1; y12=y2;
x0=x5=x8=good10 .5r; x1=x2; x11=x12;
.5[x1,x11]=x5; x1-x11=round 3.5u;
w10 draw 1..2; draw 11..12;	% stems
vpen; bot7y8=y0;
lpen#; 2u+w10 draw 0..8; rpen#; 2u+w10 draw 0..8;	% clean the top
y5-y8=y8-y3=-.24h-eps; y3=y4=y6=y7;
x3-x6=x12-x3=x4-x1=x7-x4=3u+eps;
lpen#; 2u+w10 draw (5..)8..3(..6);	% erase excess at left
vpen; draw (|w7|5..)8..|w6|3(..6);	% left point
rpen#; 2u+w10 draw (5..)8..4(..7);	% erase excess at right
vpen; draw (|w7|5..)8..|w6|4(..7).	% right point
"Double left-and-right arrow";
call charbegin('054,18,0,0,.24ph+.5prt+.5(px-pe)+pa,
				.24ph+.5prt+.5(px-pe)-pa,0);
cpen; lft10x2=x10=round u; rt10x1=x0=round(r-u); x11=x1; x12=x2;
y5=y8=good10 a; y1=y2; y11=y12; .5[y1,y11]=y5; y1-y11=round(m-e);
w10 draw 1..2; draw 11..12;	% bars
hpen; rt1x8=x0; lft1x18=x10;
x5-x8=x8-x3=x13-x18=x18-x15=fixwidth[3u,6u]+eps;
x3=x4=x6=x7; x13=x14=x16=x17;
y3-y6=y11-y3=y4-y1=y7-y4=.24h+eps;
y13=y3; y14=y4; y15=y5; y16=y6; y17=y7; y18=y8;
rpen#; w10+w1 ddraw (5..)8..3(..6), 11..11;	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower right point
rpen#; w10+w1 ddraw (5..)8..4(..7), 1..1;	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7);	% upper right point
lpen#; w10+w1 ddraw (15..)18..13(..16), 12..12;	% erase excess at lower left
hpen; draw (|w1|15..)18..|w0|13(..16);	% lower left point
lpen#; w10+w1 ddraw (15..)18..14(..17), 2..2;	% erase excess at upper left
hpen; draw (|w1|15..)18..|w0|14(..17).	% upper left point
"Left shift sign";
call charbegin('055,9,0,0,ph,.5pd,0);
cpen; lft10x1=x0=round u; rt10x2=round(r-u);
y1=y2=y5=y8=good10 .75h;
w10 draw 1..2;	% bar
x9=x2; bot10y9=-.5d; draw 2..9;	% stem
hpen; lft1x8=x0;
x5-x8=x8-x3=-3u-eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
lpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower left
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
lpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper left
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Right shift sign";
call charbegin('056,9,0,0,ph,.5pd,0);
cpen; lft10x2=round u; rt10x1=x0=round(r-u);
y1=y2=y5=y8=good10 .75h;
w10 draw 1..2;	% bar
x9=x2; bot10y9=-.5d; draw 2..9;	% stem
hpen; rt1x8=x0;
x5-x8=x8-x3=3u+eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
rpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7).	% upper point
"Maps-to relation";
call charbegin('057,18,0,0,.24ph+.5prt+pa,.24ph+.5prt-pa,0);
cpen; lft10x2=round u; rt10x1=x0=round(r-u);
y0=y1=y2=y5=y8=good10 a;
w10 draw 1..2;	% bar
hpen; rt1x8=x0;
x5-x8=x8-x3=fixwidth[3u,6u]+eps; x3=x4=x6=x7;
y3-y6=y1-y3=y4-y1=y7-y4=.24h+eps;
rpen#; w10+w1 draw (5..)8..3(..6);	% erase excess at lower right
hpen; draw (|w1|5..)8..|w0|3(..6);	% lower point
rpen#; w10+w1 draw (5..)8..4(..7);	% erase excess at upper right
hpen; draw (|w1|5..)8..|w0|4(..7);	% upper point
x9=x10=x2; y9=y4; y10=y3;
cpen; w10 draw 9..10.	% stem
"Prime symbol (intended as superscript only)";
call charbegin('060,4.5,0,0,.8ph,0,0);
new w98,w99; w98=round .5[w0,w1]; w99=round(bold+2deltaw);
cpen; top99y1=round .8h; rt99x1=r; bot98y2=0; lft98x2=0;
call cdraw(1,2,99,98).	% diagonal
"Infinity";
call charbegin('061,18,0,0,px,0,.5px.slant-.5pu);
new w98,w99; w99=round .25[w6,w7]; w98=2[w1,w2];
vpen; top99y2=m+oo; bot99y1=-oo; y2=y4; y1=y3;
x1=x2; x3=x4; y5=y6=y7=.5[y1,y2];
lft0x7=round u; rt0x5=round(r-u); x6=.5[x7,x5];
new ss,mss;		% reciprocal slope at center
if w0=w98: mss=ss; ss=-u/m;
else: mss=.75ss; ss=-6u/m;
fi;
call `a zdraw(7,4,6,1,5,w99,w98,ss);	% lower right and upper left strokes
w99 draw 5{0,1}..2{-1,0}..6{mss,-1}..3{-1,0}..
	7{0,1}.	% upper right and lower left strokes
"Element sign";
call charbegin('062,12,0,0,.5[px,ph]+prt/2,.5[px,ph]+prt/2-2pa,0);
cpen; rt10x1=round(r-u); lft10x3=round u;
x5=x6=x1; x2=x4=.5(r+2u);
y1=y2=good10(.5[m,h]); y3=y6=a; y4=y5; .5[y5,y1]=y6;
w10 draw 1..2{-1,0}..3{0,-1}..4{1,0}..5;	% bowl
draw 3..6.	% bar
"Nonelement sign";
call charbegin('063,12,0,0,ph,ph-2pa,0);
cpen; rt10x1=round(r-u); lft10x3=round u;
x5=x6=x1; x2=x4=.5(r+2u);
y1=y2=good10(.5[m,h]); y3=y6=a; y4=y5; .5[y5,y1]=y6;
w10 draw 1..2{-1,0}..3{0,-1}..4{1,0}..5;	% bowl
draw 3..6;	% bar
rt10x7=round(r-2u); lft10x8=round 2u; top10y7=h; .5[y7,y8]=a;
draw 7..8.	% diagonal
"Empty set symbol";
call charbegin('064,9,0,0,ph+pb,pb,0);
if fixwidth=0: new save; save=sqrttwo; new sqrttwo;
	sqrttwo=sqrt(1.23114413save);	% the constant is $2ā†‘{3/10}$
fi;
hpen;
if w1>1.5u: lft1x2=round .75u;
else: x2=good1 1.5u;
fi;
x1=r-x1;	% axis of left-right symmetry
x3=r-x2; top0y1=h+oo; bot0y2=-oo; y3=y2;
call `a darc(1,2,w1); call `b darc(1,3,w1);	% bowl
if fixwidth=0: new sqrttwo; sqrttwo=save;
fi;
cpen; rt10x7=round(r-2u); lft10x8=round 2u; top10y7=h+b; bot10y8=-b;
w10 draw 7..8.	% diagonal
"Underline";
call charbegin('065,9,0,0,0,0,0);
cpen; lft10x1=round u; x2=r-x1; y1=y2=0;
w10 draw 1..2.	% bar
"Angle sign";
call charbegin('066,12,0,0,ph,0,0);
cpen; lft10x2=round u; x1=x3=r-x2; top10y1=h; bot10y2=0; y3=y2;
w10 draw 1..2..2..3.	% diagonal and bar
"Universal quantifier";
call charbegin('070,10,0,0,ph,0,0);
cpen; lft10x1=0; x2=good10 .5r=.5[x1,x3];
top10y1=h; y3=y1; bot10y2=-o; y4=y5=good10m;
new aa,bb; x4=aa[x1,x2]; y4=aa[y1,y2]; x5=bb[x3,x2]; y5=bb[y3,y2];
w10 draw 1..2..2..3;	% diagonals
draw 4..5.	% bar
"Existential quantifier";
call charbegin('071,10,0,0,ph,0,0);
cpen; lft10x1=round u; rt10x2=round(r-u); x3=x5=x2; x4=x6-.25u=x1;
top10y1=h; bot10y4=0; y2=y1; y5=y6=.5[y1,y3]; y3=y4;
w10 draw 1..2..2..3..3..4;	% upper bar, stem, lower bar
draw 5..6.	% middle bar
"Logical NOT";
call charbegin('072,12,0,0,px,0,0);
cpen; lft10x1=round u; x2=x3=r-x1;
y1=y2=good10 .5[e,m]; y2-y3=1.2(m-e);
w10 draw 1..2..2..3.	% bar and stem
"Hebrew letter aleph";
call charbegin('073,11,0,0,ph,0,0);
vpen; lft6x1=round u; y1=2/3[m,h];
x4+x5=x3+x6=x2+x7=x0+x9=x1+x8=r; x2=x3=2.5u;
new aa; x2=aa[x1,x8]; y50=aa[y1,y8];
top5y50=top6y2; bot5y50=bot6y3;
x0=1.5u; top6y0=h; y4=y0; x4=5u;
y4+y5=y3+y6=y2+y7=y1+y8=y0+y9=h;
w6 ddraw 0..0{0,-1}..2{x8-x1,y8-y1}..6{x8-x1,y8-y1}..8{0,-1}..9(..5),
	(4..)0..1{0,-1}..3{x8-x1,y8-y1}..7{x8-x1,y8-y1}..
		9{0,-1}..9;	% long diagonal
hpen; x10=3.5u; new aa; x10=aa[x1,x8]; y10=aa[y1,y8];
x11=good1 2u; y11=e;
x12=.5[x11,x13]; y12=.5[y11,y13];
x13=good5 3.5u; y13=.2e;
x14=good5 2u; bot5y14=0;
draw |w0#|10{y8-y1,x1-x8}..|w1|11{0,-1}..
	|.5[w1,w5]|12{1.5(x13-x11),y13-y11}..
	|w5#|13{0,-1}..14{-1,0};	% lower left stroke
x15=7.75u; new aa; x15=aa[x1,x8]; y15=aa[y1,y8];
x16=.5[x21,x28]; y16=.5[y21,y28];
vpen; lft6x21=round 7u; y21=y1;
x20+x29=x21+x28=x22+x27=x24+x25; x28=x8;
y20+y29=y21+y28=y22+y27=y24+y25; y28=.25[m,h];
top5y16=top6y22; x22=x27;
x20=7.5u; x24=9.5u; y20=y24=y0;
w6 ddraw 20..20{0,-1}..22{x28-x21,y28-y21}..28{0,-1}..29(..25),
	(24..)20..21{0,-1}..27{x28-x21,y28-y21}..
		29{0,-1}..29;	% short diagonal
draw 15{0,1}..16{0,1}.	% link
"Upper case Fraktur R";
call charbegin('074,13,0,0,ph,0,0);
new w99; w99=round .25[w0,w1];
hpen; lft0x1=round u; y1=1/3[e,m]; x2=2u; y2=e;
w0 draw 1{0,-1}..2{1,0};	% point of upper left flourish
x3=3u; top0y3=h+oo; lft99x4=round u;
x5=2u; y5=1/3[m,h]; rt99x6=round 3.5u;
call `a sdraw(3,4,5,6,2,w99,w8,-(h-e)/(8u));	% flourish
x7=x8=good4 6u; y7=m; y8=e;
call `b arc(3,7,w4);	% upper link
w4 draw 7..8;	% stem
x9=3.5u; bot0y9=-oo; call `c arc(9,8,w4);	% lower link
x10=5/3u; y10=.3e; x11=4/3u;
x12=u; y12=.35e; x13=2u; y13=.45e;
new aa; x11=x10+aa(y12-y13);
y11=y10+aa(x13-x12);	% perpendicular to $12\to13$
w0 draw 9{-1,0}..10{x11-x10,y11-y10}..11;	% tail
draw 12..13;	% cross
x14=x7; y14=.75h; x15=9.5u; top99y15=h+o;
draw 14{0,1}..15{1,0};	% top of bowl
lft4x16=11.5u; y16=.6h;
w4 draw 15..16;	% diagonal of bowl
lft99x17=lft4x16; y17=y16;
rt99x26=rt4x15; y26=y15;
new aa,bb; rt99x18=aa[rt4x15,rt4x16]; y18=aa[y15,y16];
x18=x17+bb(y15-y16); y18=y17+bb(x16-x15);	% perpendicular to $15\to16$
rpen#; w4 draw 17..18;	% erase excess
hpen; w99 draw 15..26..26..18;	% reinforcements
x20=x7; y20=y21=.52h; x21=9u;
w99 draw 20..21{1,0}..17{x18-x17,y18-y17}..18;	% bottom of bowl
x22=9.25u; y22=.5e; lft99x24=lft4x23; bot4y23=-o;
x24=10.5u; y24=y23; rt99x25=12.5u; y25=e/4;
w4 draw 21..22{x22-x21,y22-y21}..23{1,0};	% lower diagonal
rpen#; w4 draw 24..25;	% erase excess at lower right
hpen; w99 draw 24..25.	% point of lower right diagonal
"Upper case Fraktur I";
call charbegin('075,13,0,0,ph,0,0);
% (this letter extended to be same width as the R)
new w99; w99=round .25[w0,w1];
hpen; x1=5u; y1=good6 .5h; lft99x2=round u; y2=.75h;
x3=x1; top99y3=h+oo;
w99 draw 1{-1,0}..2{0,1}..3{1,0};	% shoulder
x4=9u; y4=.75h; x5=10.5u; bot99y5=2/3h+1;
rt99x6=12.5u; bot99y6=.75h+1;
draw |w99#|3{1,0}..|w4#|4{6u,-h}..|w99#|5{1,0}..6{0,1};	% upper stroke
lft4x7=round u; y7=good6 .25h;
x8=7u; bot4y8=-oo;
x9=good4 10.5u; y9=h/6;
x10=good4 8.5u; y10=.45h;
x11=1/sqrttwo[x12,x10]; y11=1/sqrttwo[y10,y12];
x12=x9; top99y12=.625h;
rt99x13=round 12.5u; y13=.5h;
draw |w4|7{1,0}..8{1,0}..9{0,1}..|w4#|10{0,1}..
	|2/3[w99,w4]|11{x12-x10,y12-y10}..|w99#|12..13{0,-1}.	% lower stroke
"Lattice top";
cpen;
if fixwidth=0: if pa+8pu>ph:
		call charbegin('076,18,0,0,ph,ph-2pa,0); top10y1=h;
	else: call charbegin('076,18,0,0,8pu+pa,8pu-pa,0); top10y1=a+8u;
	fi;
else: call charbegin('076,9,0,0,3.5pu+pa,3.5pu-pa,0); top10y1=a+3.5u;
fi;
.5[y1,y2]=a; x1=x2=.5r;
lft10x3=round u; x4=r-x3; y3=y4=y1;
w10 draw 1..2;	% stem
draw 3..4.	% bar