perm filename MATHOP.MF[1,3] blob sn#549049 filedate 1980-12-08 generic text, type C, neo UTF8
```COMMENT ⊗   VALID 00015 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	% Square union signs
C00003 00003	% Contour integral signs
C00005 00004	% Circle-dot operators
C00006 00005	% Circle-plus operators
C00007 00006	% Circle-times operators
C00008 00007	% Summation signs
C00011 00008	% Product signs
C00013 00009	% Integral signs
C00015 00010	% Set union signs
C00016 00011	% Set intersection signs
C00017 00012	% Multiset union signs
C00019 00013	% Lattice infimum (logical AND) signs
C00020 00014	% Lattice supremum (logical OR) signs
C00021 00015	% Square root signs
C00026 ENDMK
C⊗;
% Square union signs
charlist '106,'107;
subroutine bigsqun(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x1=round u; x2=x1; x4=x5=r-x1;
top49y1=0; bot49y2=1-round depth.pixels;
y2=y4; y5=y1;
size draw 2..4;	% bar
draw 1..2; draw 4..5.	% stems
"12 point square union sign";
call bigsqun('106,15,w1,10pt).
"18 point square union sign";
call bigsqun('107,20,w3+deltaw,14pt);
call eighteen.
subroutine bigsqun:.	% free up \MF's memory
% Contour integral signs
charlist '110,'111;
% When \TEX\ positions a large operator, the height above the axis will exceed
% the depth below the axis by the \&{charht} of that operator.
subroutine bigoint(var code, var units, var keyps, var maxps,
var dotps, var height, var depth, var kerncorr):
call charbegin(code,units,0,0,height,depth,kerncorr);
new w48,w49; w48=round maxps; w49=round dotps;
hpen; rt49x1=rt0x2=round(r-u); y1=y2=y3-.75w49;
lft49x9=lft0x8=round u; y8=y9=y7+.75w49;
x3=r-3u; x7=3u;
top0y3=round pixels.height; bot0y7=1-round pixels.depth;
x5=good48 .5r; y5=.5[y3,y7];
x4=x5+.3(r-10u); y4=y5+.3(y3-y7);
x6=x5-.3(r-10u); y6=y5-.3(y3-y7);
cpen; w49 draw 1;	% upper bulb
draw 9;	% lower bulb
hpen; draw |w0|2{0,1}..|w0#|3{-1,0}..|keyps|4{x6-x4,y6-y4}..|w48#|5..
|keyps|6{x6-x4,y6-y4}..|w0#|7{-1,0}..8{0,1};	% stem
x10=good0 .75r; x5=.5[x10,x11]; y10=y11=y5;
w0 draw 10{0,1}..11{0,-1}..10{0,1}.	% bowl
"12 point contour integral sign";
call bigoint('110,12,w1,w2,bold,10pt/9,10pt,3.5pu).
"24 point contour integral sign";
call bigoint('111,18,w2,bold+2deltaw,w3,25/9pt,175/9pt,8pu);
crsbreak .5[25/9pt,-175/9pt]cf.
subroutine bigoint:.	% free up \MF's memory
% Circle-dot operators
charlist '112,'113;
subroutine bigodot(var code, var units, var size, var dotsize, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x6=round u; top49y8=0; x2=r-x6; bot49y4=1-round depth.pixels;
call circle(1,2,3,4,5,6,7,8,size);	% circle
x9=.5[x6,x2]; y9=.5[y8,y4]; dotsize draw 9.	% dot
"12 point circle-dot operator";
call bigodot('112,20,w1,bold+4deltaw,10pt).
"18 point circle-dot operator";
call bigodot('113,27.2,w3+deltaw,bold+6deltaw,14pt);
call eighteen.
subroutine bigodot:.	% free \MF's memory
% Circle-plus operators
charlist '114,'115;
subroutine bigoplus(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x6=round u; top49y8=0; x2=r-x6; bot49y4=1-round depth.pixels;
call circle(1,2,3,4,5,6,7,8,size);	% circle
w49 draw 2..6; draw 4..8.	% plus
"12 point circle-plus operator";
call bigoplus('114,20,w1,10pt).
"18 point circle-plus operator";
call bigoplus('115,27.2,w3+deltaw,14pt);
call eighteen.
subroutine bigoplus:.	% free up \MF's memory
% Circle-times operators
charlist '116,'117;
subroutine bigotimes(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x6=round u; top49y8=0; x2=r-x6; bot49y4=1-round depth.pixels;
call circle(1,2,3,4,5,6,7,8,size);	% circle
w49 draw 1..5; draw 3..7.	% times
"12 point circle-times operator";
call bigotimes('116,20,w1,10pt).
"18 point circle-times operator";
call bigotimes('117,27.2,w3+deltaw,14pt);
call eighteen.
subroutine bigotimes:.	% free up \MF's memory
% Summation signs
charlist '120,'130;
subroutine bigsum(var code, var units, var minps, var maxps, var serif, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w48,w49; w48=round minps.aspect; w49=round .5[minps,maxps].aspect;
hpen; lft0x26=round u; rt0x28=r-u; x27=good0(x28-(r-2u)/11);
new ss; ss=serif+eps;
if ss+w6>.25depth.pixels: new ss; ss=.25depth.pixels-w6+eps;
fi;
vpen; top48y24=top6y1=0; y25=y24; bot6y26=bot48y24;
y27=y26; y28=y27-ss;
bot49y4=bot6y9=1-round(depth.pixels); y5=y4;
top6y6=top49y4; y7=y6; y8=y7+ss;
x24=x26=x4=x6; x25=x27=x5=x7; x8=x28;
call `a arm(26,27,28);	% upper arm and serif
call `b arm(6,7,8);	% lower arm and serif
w48 draw 24..25; w49 draw 4..5;	% thicken bars of arms
if ucs=0: draw 5..8; w48 draw 25..28;	% thicken bars of arms
else: if w0≠w4: draw |w49|5..|w6|8;	% thicken lower serif
draw |w48|25..|w6|28;	% thicken upper serif
else: draw 5..8; w48 draw 25..28;	% thicken bars of arms
fi;
fi;
new w48,w49; w48=round minps; w49=round maxps;
hpen; lft48x1=lft49x13=lft0x24; x9=x1; x10=.5[x9,x11];
x16=round(u+4/11(r-2u)); lft49x12=lft0x15;
lft49x99=x16; rt49x99=rt48x11; rt49x13=rt48x14;
y10=.5[y9,y11]; y11=y16=.5[y1,y9]; y12=y15; y13=y14=y1;
new aa,bb; lft48x15=aa[lft48x1,x16]; y15=aa[y1,y16];
lft48x15=bb[x9,x11]; y15=bb[y9,y11];
w49 draw 13..12;	% upper diagonal
lpen#; w49 draw 1..15;	% erase excess at upper left corner
hpen; w48 draw 1..15;	% sharpen upper left corner
rpen#; w49 draw 10..11;	% erase excess at right
lpen#; w49 draw 9..10;	% erase excess at left
hpen; w48 draw 9..11;	% lower diagonal
draw 14..11.	% sharpen middle corner
"12 point summation sign";
call bigsum('120,19,w10,w2,as,10pt).
"18 point summation sign";
call bigsum('130,26,w10+deltaw,bold+4deltaw,1.2*as,14pt);
call eighteen.
subroutine bigsum:.	% free up \MF's memory
% Product signs
charlist '121,'131;
subroutine bigprod(var code, var units, var minps, var maxps,
var serif, var ss, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w48,w49; w48=round minps; w49=round maxps;
cpen; lft48x1=round u; x3-x1=round(serif.u+eps);
lft48x3=lft49x99; rt49x99=rt48x10;
top48y1=0; y3=y1-ss; y10=y1;
x2=.5[x3,.5[x1,x3]]; y2=.5[y1,.5[y1,y3]];
bot48y6=1-round(depth.pixels);
y6+y1=y5+y2=y4+y3; x6=x1; x5=x2; x4=x3;
x9=x10; x4+x9=x5+x8=x6+x7; y4=y9; y5=y8; y6=y7;
y11=y1; y12=y2; y13=y3; y14=y4; y15=y5;
y16=y6; y17=y7; y18=y8; y19=y9; y20=y10;
r=x11+x1=x12+x2=x13+x3=x14+x4=x15+x5=
x16+x6=x17+x7=x18+x8=x19+x9=x20+x10;
w48 ddraw 1{1,0}..2..3{0,-1}..4{0,-1}..5..6{-1,0},
10..10..10{0,-1}..9{0,-1}..8..7{1,0};	% left stem and serifs
ddraw 11{-1,0}..12..13{0,-1}..14{0,-1}..15..16{1,0},
20..20..20{0,-1}..19{0,-1}..18..17{-1,0};	% right stem and serifs
draw 10..20.	% bar
"12 point product sign";
call bigprod('121,17,w10,bold+deltaw,ucs,1.2s,10pt).
"18 point product sign";
call bigprod('131,23,w10+deltaw,bold+5deltaw,1.8*ucs,1.8s,14pt);
call eighteen.
subroutine bigprod:.	% free up \MF's memory
% Integral signs
charlist '122,'132;
% When \TEX\ positions a large operator, the height above the axis will exceed
% the depth below the axis by the \&{charht} of that operator.
subroutine bigint(var code, var units, var keyps, var maxps,
var dotps, var height, var depth, var kerncorr):
call charbegin(code,units,0,0,height,depth,kerncorr);
new w48,w49; w48=round maxps; w49=round dotps;
hpen; rt49x1=rt0x2=round(r-u); y1=y2=y3-.75w49;
lft49x9=lft0x8=round u; y8=y9=y7+.75w49;
x3=r-3u; x7=3u;
top0y3=round pixels.height; bot0y7=1-round pixels.depth;
x5=good48 .5r; y5=.5[y3,y7];
x4=x5+.3(r-10u); y4=y5+.3(y3-y7);
x6=x5-.3(r-10u); y6=y5-.3(y3-y7);
cpen; w49 draw 1;	% upper bulb
draw 9;	% lower bulb
hpen; draw |w0|2{0,1}..|w0#|3{-1,0}..|keyps|4{x6-x4,y6-y4}..|w48#|5..
|keyps|6{x6-x4,y6-y4}..|w0#|7{-1,0}..8{0,1}.	% stem
"12 point integral sign";
call bigint('122,12,w1,w2,bold,10pt/9,10pt,3.5pu).
"24 point integral sign";
call bigint('132,18,w2,bold+2deltaw,w3,25/9pt,175/9pt,8pu);
crsbreak .5[25/9pt,-175/9pt]cf.
subroutine bigint:.	% free up \MF's memory
% Set union signs
charlist '123,'133;
subroutine bigun(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x1=round u; x2=x1; x3=r-x3; x4=x5=r-x1;
top49y1=0; bot49y3=1-round depth.pixels;
y2=y4=2/3[y1,y3]; y5=y1;
call qcirc(3,6,2,size); call qcirc(3,7,4,size);	% cup
size draw 1..2; draw 4..5.	% stems
"12 point set union sign";
call bigun('123,15,w1,10pt).
"18 point set union sign";
call bigun('133,20,w3+deltaw,14pt);
call eighteen.
subroutine bigun:.	% free up \MF's memory
% Set intersection signs
charlist '124,'134;
subroutine bigin(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x1=round u; x2=x1; x3=r-x3; x4=x5=r-x1;
top49y3=0; bot49y1=1-round depth.pixels;
y2=y4=2/3[y1,y3]; y5=y1;
call qcirc(3,6,2,size); call qcirc(3,7,4,size);	% cap
size draw 1..2; draw 4..5.	% stems
"12 point set intersection sign";
call bigin('124,15,w1,10pt).
"18 point set intersection sign";
call bigin('134,20,w3+deltaw,14pt);
call eighteen.
subroutine bigin:.	% free up \MF's memory
% Multiset union signs
charlist '125,'135;
subroutine bigmun(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x1=round u; x2=x1; x3=r-x3; x4=x5=r-x1;
top49y1=0; bot49y3=1-round depth.pixels;
y2=y4=2/3[y1,y3]; y5=y1;
call qcirc(3,6,2,size); call qcirc(3,7,4,size);	% cup
size draw 1..2; draw 4..5;	% stems
y8=y9=.47[y1,y3]; x8=r-x9=x1+1.75size-eps;
x10=x11=x3; .5[y10,y11]=y8; y11-y10=x9-x8;
draw 8..9; draw 10..11.	% enclosed plus sign
"12 point multiset union sign";
call bigmun('125,15,w1,10pt).
"18 point multiset union sign";
call bigmun('135,20,w3+deltaw,14pt);
call eighteen.
subroutine bigmun:.	% free up \MF's memory
% Lattice infimum (logical AND) signs
charlist '126,'136;
subroutine bigmeet(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x1=round u; x3=r-x3; x5=r-x1;
top49y3=o; bot49y1=1-round depth.pixels;
y5=y1;
size draw 1..3; draw 3..5.	% diagonals
"12 point lattice meet sign";
call bigmeet('126,15,w1,10pt).
"18 point lattice meet sign";
call bigmeet('136,20,w3+deltaw,14pt);
call eighteen.
subroutine bigmeet:.	% free up \MF's memory
% Lattice supremum (logical OR) signs
charlist '127,'137;
subroutine bigjoin(var code, var units, var size, var depth):
call charbegin(code,units,0,0,0,depth,0);
new w49; w49=round size;
cpen; lft49x1=round u; x3=r-x3; x5=r-x1;
top49y1=0; bot49y3=1-round depth.pixels-o;
y5=y1;
size draw 1..3; draw 3..5.	% diagonals
"12 point lattice join sign";
call bigjoin('127,15,w1,10pt).
"18 point lattice join sign";
call bigjoin('137,20,w3+deltaw,14pt);
call eighteen.
subroutine bigjoin:.	% free up \MF's memory
% Square root signs
charlist '160,'161,'162,'163,'164;
subroutine bigroot(var code, var units, var height, var depth):
call charbegin(code,units,0,0,height,depth,0);
hpen; x1=good10(8/18 r); x2=r+1; bot10y1=1-round depth.pixels;
top10y2=round pixels.height;
y3=y5=y7=good6(.5[y1,y2]); y4=y6=y1;
x7=1.5[x2,x1]; lft10x7=lft2x3; rt2x3=rt0x5;
lft10x1=lft2x4; rt2x4=rt0x6;
x8=x7-u; new aa; x8=aa[x5,x2]; y8=aa[y5,y2];
hpen; w2 draw 3..4;	% left diagonal
w10 draw 7..4; w0 draw 5..6;	% sharpen the corners
lpen#; w2 draw 8..5;	% erase excess at upper left
hpen; w0 draw 8..5;	% serif
rpen#; w2 draw 1..2;	% erase excess at lower right
hpen; w10 draw 1..2.	% right diagonal
call bigroot('160,18,0,12pt).
call bigroot('161,18,0,18pt);
call eighteen.
call bigroot('162,18,ph+pb,24pt-ph-pb);
call twentyfour.
call bigroot('163,18,ph+pb,30pt-ph-pb);
call thirty.
subroutine bigroot:.	% free up \MF's memory
call charbegin('164,19,0,0,0,18pt,0); crsbreak -12pt.cf;
varchar '166,0,'164,'165;	% extensible radical sign
crsbreak 1000000;	% a built-up character will be aligned on CRS
hpen; x1=x2=good10(r-6u); y2=0; bot10y1=round(.5-18pt.pixels);
y3=y5=y7=good6(.1[y2,y1]); y4=y6=y1;
x7=3u; lft10x7=lft2x3; rt2x3=rt0x5;
lft10x1=lft2x4; rt2x4=rt0x6;
x8=x7-u; new aa; x8=aa[x5,x2]; y8=aa[y5,h+b];
hpen; w2 draw 3..4;	% left diagonal
w10 draw 7..4; w0 draw 5..6;	% sharpen the corners
lpen#; w2 draw 8..5;	% erase excess at upper left
hpen; w0 draw 8..5;	% serif
rpen#; w2 draw 1..2;	% erase excess at lower right
hpen; w10 draw 1..2.	% right diagonal