%------------------------------------------------------------- % This is ETHIOPMAC.MF as of Dec, 1995 by Jochen Metzinger % originally distributed by Abass B. Alamnehe [February, 1993] %------------------------------------------------------------- %%% THUMB %%% def t_thumb(suffix @)= pickup fine.nib; x@a=x@s=x@-3.25u; x@b=x@a+.75u; x@c=x@a; x@d=x@a+2u; x@e=x@a+3.25u; x@f=x@a+3.25u; x@g=x@a+1.75u; y@a=y@-.1h+oo; y@b=y@; y@c=y@+.1h-oo; y@d=y@c+oo; y@e=y@c-.025h; y@f=y@a+.05h; y@g=y@a-oo; fill flex(z@a,z@b,z@c) & flex(z@c,z@d,z@e)...flex(z@f,z@g,z@a) & cycle; penlabels(@,@a,@b,@c,@d,@e,@f,@g); enddef; def left_up_thumb(suffix @)= pickup tiny.nib; x@a=x@; y@a=y@; x@b=x@-1.9u; x@c=x@-1.7u; x@d=x@-2.2u; x@e=x@-.5u; x@f=x@-.5u; y@b=y@; y@c=y@+.07h; y@d=y@+.15h; y@e=y@+.14h; y@f=y@; pickup fine.nib; filldraw flex(z@b,z@c,z@d) & flex(z@d,z@e,z@a) & flex(z@a,z@f,z@b) & cycle; pickup fine.nib; labels(x@,@a,@b,@c,@d,@e,@f,@g,@i); enddef; %%% WING %%% def upper_left_wing(suffix @)= pickup fine.nib; pos@g(vair,90); pos@i(vair,90); x@g=x@; x@i=x@-1.5u; y@g=y@i=y@; filldraw stroke z@g.e--z@i.e; x@a=x@-1.52u; y@a=y@; x@b=x@-3.9u; x@c=x@-3.7u; x@d=x@-4.2u; x@e=x@-2.5u; x@f=x@-2.5u; y@b=y@-oo; y@c=y@+.07h; y@d=y@+.15h; y@e=y@+.14h; y@f=y@-oo; filldraw flex(z@b,z@c,z@d) & flex(z@d,z@e,z@a) & flex(z@a,z@f,z@b) & cycle; labels(x@,@a,@b,@c,@d,@e,@f,@g,@i); enddef; def upper_right_wing(suffix $)= pickup fine.nib; pos$a(vair,90); pos$b(vair,90); x$a=x$; x$b=x$+1.5u; y$a=y$b=y$; filldraw stroke z$a.e--z$b.e; x$g=x$+1.52u; y$g=y$; x$i=x$+3.9u; x$j=x$+3.7u; x$k=x$+4.2u; x$l=x$+2.5u; x$m=x$+2.5u; y$i=y$-oo; y$j=y$+.07h; y$k=y$+.15h; y$l=y$+.14h; y$m=y$-oo; filldraw flex(z$i,z$j,z$k) & flex(z$k,z$l,z$g) & flex(z$g,z$m,z$i) & cycle; labels(x$,$g,$i,$j,$k,$l,$m,$a,$b); enddef; def upside_down_left_wing(suffix @)= pickup tiny.nib; pos@g(bar,90); pos@i(bar,90); x@g=x@; x@i=x@-2u-eps; y@g=y@i=y@; draw z@g--z@i; x@a=x@-2u; y@a=y@; x@b=x@-3.9u; x@c=x@-3.7u; x@d=x@-4.2u; x@e=x@-2.5u; x@f=x@-2.5u; y@b=y@; y@c=y@+.07h; y@d=y@+.15h; y@e=y@+.14h; y@f=y@; pickup fine.nib; filldraw flex(z@b,z@c,z@d) & flex(z@d,z@e,z@a) & flex(z@a,z@f,z@b) & cycle; pickup fine.nib; labels(x@,@a,@b,@c,@d,@e,@f,@g,@i); enddef; def rt_wing(suffix $)(expr x_bar, slope)= pickup fine.nib; x$g=x$; x$:=x$+x_bar; x$a=x$; x$b=x$+2u; x$c=x$+2u; x$d=x$+2u; x$e=x$+2.5u; x$f=x$+.75u; x$h=x$a; y$a=y$+slope; y$b=y$+o+slope; y$c=y$b-.025h; y$d=y$b-.075h; y$e=y$b-.135h-o; y$f=y$b-.15h-o; y$g=y$; y$h=y$a; if x_bar > 0: pos$g(vair,90); pos$h(vair,90); filldraw stroke z$g--z$h; fi filldraw flex(z$a,z$b,z$c) & flex(z$c,z$d,z$e) & flex(z$e,z$f,z$a) & cycle; labels(x$,$a,$b,$c,$d,$e,$f,$g); enddef; def lft_wing(suffix $)(expr x_bar, slope)= pickup fine.nib; x$g=x$; x$:=x$-x_bar; x$a=x$; x$b=x$-2u; x$c=x$-2u; x$d=x$-2u; x$e=x$-2.5u; x$f=x$-.75u; x$h=x$a; y$a=y$-slope; y$b=y$-2slope; y$c=y$b-.025h; y$d=y$b-.075h; y$e=y$b-.135h-o; y$f=y$b-.15h-o; y$g=y$; y$h=y$a; if x_bar > 0: pos$g(vair,90); pos$h(vair,90); filldraw stroke z$g--z$h; fi filldraw flex(z$a,z$b,z$c) & flex(z$c,z$d,z$e) & flex(z$e,z$f,z$a) & cycle; labels(x$,$a,$b,$c,$d,$e,$f,$g); enddef; def right_wing_no_bar(suffix @)= x@a=x@; y@a=y@; x@b=x@-1.9u; x@c=x@-1.7u; x@d=x@-2.2u; x@e=x@-.5u; x@f=x@-.5u; y@b=y@; y@c=y@-.07h; y@d=y@-.15h; y@e=y@-.14h; y@f=y@; pickup fine.nib; filldraw flex(z@b,z@c,z@d) & flex(z@d,z@e,z@a) & flex(z@a,z@f,z@b) & cycle; pickup fine.nib; labels(x@,@a,@b,@c,@d,@e,@f,@g,@i); enddef; def r_wing(suffix $)= pickup fine.nib; x$g=x$; y$g=y$; x$i=x$+2u; x$j=x$+1.75u; x$k=x$+2.5u; x$l=x$+.5u; x$m=x$+.5u; y$i=y$; y$j=y$-.07h; y$k=y$-.15h; y$l=y$-.14h; y$m=y$; filldraw flex(z$i,z$j,z$k) & flex(z$k,z$l,z$g) & flex(z$g,z$m,z$i) & cycle; labels(x$,$g,$i,$j,$k,$l,$m,$a,$b); enddef; def p_wing(suffix $)= pickup fine.nib; x$g=x$; y$g=y$; x$i=x$-1.9u; x$j=x$-1.7u; x$k=x$-2.2u; x$l=x$-.5u; x$m=x$-.5u; y$i=y$; y$j=y$-.07h; y$k=y$-.15h; y$l=y$-.14h; y$m=y$; filldraw flex(z$i,z$j,z$k) & flex(z$k,z$l,z$g) & flex(z$g,z$m,z$i) & cycle; pickup fine.nib; labels(x$,$g,$i,$j,$k,$l,$m,$a,$b); enddef; def t_wing(suffix $)= pickup fine.nib; x$a=x$; x$b=x$c=x$d=x$-2u; x$e=x$-2.5u; x$f=x$-.75u; y$a=y$c=y$; y$b=y$+.025h; y$d=y$-.05h; y$e=y$-.11h-o; y$f=y$-.125h-o; filldraw flex(z$a,z$b,z$c) & flex(z$c,z$d,z$e) & flex(z$e,z$f,z$a) & cycle; labels($,$a,$b,$c,$d,$e,$f); enddef; %%% RING %%% def half_ring(suffix @) = pickup fine.nib; pos@1(vair,270); penpos@2(stem,360); pos@3(vair,90); pos@4(vair,90); pos@5(vair,270); x@5=x@4=x@+fine; x@1=x@3=x@5+1u; x@2=x@1+2u; y@5=y@1=y@+.5o; y@3=y@4=y@5+.225h; y@2=.5[y@5,y@3]; filldraw stroke z@5e..pulled_super_arc.e(@1,@2)(superpull) .. pulled_super_arc.e(@2,@3)(superpull)..z@4e; penlabels(@,@1,@2,@3); enddef; def jj_ring(suffix @) = pickup fine.nib; pos@1(vair,270); pos@2(stem,0); pos@3(vair,90); pos@4(vair,90); pos@5(vair,270); x@5=x@4=x@+fine; x@1=x@3=x@5+.75u; x@2=x@1+1.72u; y@5=y@1=y@+o; y@3=y@4=y@5+.225h; y@2=.5[y@5,y@3]; filldraw stroke z@5e...pulled_arc.e(@1,@2) .. pulled_arc.e(@2,@3)...z@4e; penlabels(@,@1,@2,@3); enddef; def large_ring(suffix $)(expr theta) = pickup tiny.nib; transform t; t=identity rotatedaround((.5w,.5h),theta); x$a=x$c=x$+1.75u; x$b=x$b'=x$; x$d=x$d'=x$a+2u; x$e=x$f=x$+1.75u; y$a=y$b=y$d'=y$+.25h; y$b'=y$d=y$c=y$-.05h; y$e=y$+.2h; y$f=y$; path p, q; p=z$a..z$b..z$b'..z$c..z$d..z$d'..cycle; q=z$e..z$f..cycle; fill p transformed t; unfill q transformed t; penlabels($,$a,$b,$b',$c,$d,$d',$e,$f); enddef; def rfive_ring(suffix $)(expr theta)= pickup tiny.nib; transform t; t=identity rotatedaround((.5w,.5h),theta); x$a=x$c=x$+1.75u; x$b=x$b'=x$; x$d=x$d'=x$a+2u; x$e=x$f=x$+1.75u; y$a=y$b=y$d'=y$+.25h; y$b'=y$d=y$c=y$-.05h; y$e=y$+.2h; y$f=y$; path p, q; p=z$a..z$b..z$b'..z$c..z$d..z$d'..cycle; q=z$e..z$f..cycle; fill p transformed t; unfill q transformed t; penlabels(z$a,z$b,z$b',z$c,z$d,z$d',z$e,z$f); enddef; def rseven_ring(suffix $)= pickup fine.nib; pos$a(vair,90); penpos$b(stem,180); pos$b'(stem,205); pos$c(vair,270); penpos$d(stem,0); pos$d'(stem,0); x$a=x$+3u; x$b.l=x$+2.25u; x$b'.l=x$+2.5u; x$c=x$+3u; x$d.l=x$+4u; x$d'.l=x$+4u; y$a=y$+.05h; y$b=y$-.05h; y$b'=y$-.25h; y$c=y$-.225h; y$d=y$-.1h; y$d'=y$; filldraw stroke z$a.e{left}...z$b.e..z$b'.e{right}...z$c.e{right} .. z$d.e..z$d'.e..{left}z$a.e; labels(z$a,z$b,z$b',z$c,z$d,z$d'); enddef; def dfive_ring(suffix $)(expr theta)= pickup fine.nib; transform t; t=identity rotatedaround((.5w,.5h),theta); x$:=x$+.4u; y$:=y$-.125h; x$a=x$c=x$+1.5u; x$b=x$b'=x$; x$d=x$d'=x$a+1.75u; x$e=x$f=x$+1.5u; y$b=y$d'=y$+.175h; y$a=y$b+o; y$b'=y$d=y$c=y$-.075h; y$e=y$+.15h; y$f=y$-.025h; path p, q; p=z$a..z$b..z$b'..z$c..z$d..z$d'..cycle; q=z$e...z$f...cycle; fill p transformed t; unfill q transformed t; penlabels(z$a,z$b,z$b',z$c,z$d,z$d',z$e,z$f); enddef; def gfive_ring(suffix $)(expr theta,s)= pickup fine.nib; transform t; t=identity slanted (s) rotatedaround((.5w,.5h),theta); x$:=x$+.4u; y$:=y$-.125h; x$a=x$c=x$+1.5u; x$b=x$b'=x$; x$d=x$d'=x$a+1.75u; x$e=x$f=x$+1.5u; y$b=y$d'=y$+.195h; y$a=y$b+o; y$b'=y$d=y$c=y$-.095h; y$e=y$+.15h; y$f=y$-.025h; path p, q; p=z$a..z$b..z$b'..z$c..z$d..z$d'..cycle; q=z$e...z$f...cycle; fill p transformed t; unfill q transformed t; penlabels(z$a,z$b,z$b',z$c,z$d,z$d',z$e,z$f); enddef; def nfour_ring(suffix $)(expr theta,s)= pickup fine.nib; transform t; t=identity slanted (s) rotatedaround((.5w,.5h),theta); x$:=x$+.4u; y$:=y$-.125h; x$a=x$c=x$+1.75u; x$b=x$b'=x$; x$d=x$d'=x$a+2u; x$e=x$f=x$+1.75u; y$b=y$+.175h; y$a=y$b+.025h; y$b'=y$c=y$-.075h; y$e=y$+.15h; y$f=y$-.035h; y$d'=y$+.175h; y$d=y$-.075h; path p, q; p=z$a...z$b..z$b'..z$c..z$d..z$d'...cycle; q=z$e...z$f...cycle; fill p transformed t; unfill q transformed t; penlabels(z$a,z$b,z$b',z$c,z$d,z$d',z$e,z$f); enddef; def lsix_ring(suffix $)(expr theta) = pickup tiny.nib; transform t; t=identity rotatedaround((.5w,.5h),theta); x$a=x$c=x$+1.75u; x$b=x$b'=x$; x$d=x$d'=x$a+2u; x$e=x$f=x$+1.75u; y$a=y$b=y$d'=y$+.25h; y$b'=y$d=y$c=y$-.05h; y$e=y$+.2h; y$f=y$; path p, q; p=z$a..z$b..z$b'..z$c..z$d..z$d'..cycle; q=z$e..z$f..cycle; fill p transformed t; unfill q transformed t; penlabels(z$a,z$b,z$b',z$c,z$d,z$d',z$e,z$f); enddef; def ynseven_ring(suffix $)(expr theta,s)= pickup fine.nib; transform t; t=identity slanted (s) rotatedaround((.5w,.5h),theta); x$:=x$+.4u; y$:=y$-.125h; x$a=x$c=x$+1.75u; x$b=x$b'=x$; x$d=x$d'=x$a+2u; x$e=x$f=x$+1.75u; y$b=y$d'=y$a=y$+.195h; y$b'=y$d=y$c=y$-.05h; y$e=y$+.15h; y$f=y$-.025h; path p, q; p=z$a...z$b..z$b'..z$c..z$d..z$d'...cycle; q=z$e...z$f...cycle; fill p transformed t; unfill q transformed t; penlabels(z$a,z$b,z$b',z$c,z$d,z$d',z$e,z$f); enddef; def yfive_ring(suffix $)(expr theta)= pickup tiny.nib; transform t; t=identity rotatedaround((.5w,.5h),theta); x$:=x$+.4u; y$:=y$-.125h; x$a=x$c=x$+1.75u; x$b=x$b'=x$; x$d=x$d'=x$a+2u; x$e=x$f=x$+1.75u; y$a=y$b=y$d'=y$+.15h; y$b'=y$d=y$c=y$-.05h; y$e=y$+.125h; y$f=y$-.025h; path p, q; p=z$a..z$b..z$b'..z$c..z$d..z$d'..cycle; q=z$e..z$f..cycle; fill p transformed t; unfill q transformed t; penlabels(z$a,z$b,z$b',z$c,z$d,z$d',z$e,z$f); enddef; %%% ELLIPSE %%% def rt_half_ellipse(suffix @)(expr x_bar)= pickup fine.nib; x@g=x@; y@:=y@+.015h; x@:=x@+x_bar; x@h=x@; x@a=x@+3.25u; x@b=x@a-u; x@c=x@a-.5u; x@d=x@a-2.5u; x@e=x@; x@f=x@a-2.25u; y@a=y@-.065h; y@b=y@+.05h; y@c=y@+.125h; y@d=y@+.1h; y@e=y@; y@f=y@-.1h; y@g=y@-.015h; y@h=y@; pos@g(vair,90); pos@h(vair,90); if x_bar>0 : filldraw stroke z@g.e--z@h.e; fi fill flex(z@a,z@b,z@c) & flex(z@c,z@d,z@e)...flex(z@e,z@f,z@a) & cycle; penlabels(@,@a,@b,@c,@d,@e,@f,z@g,z@h); enddef; def lft_half_ellipse(suffix @)(expr x_bar)= pickup fine.nib; x@g=x@; y@:=y@-.03h; x@:=x@-x_bar; x@h=x@; x@a=x@-3.25u; x@b=x@a+u; x@c=x@a+.5u; x@d=x@a+2.5u; x@e=x@; x@f=x@a+2.25u; y@a=y@-.125h; y@b=y@-.05h; y@c=y@+.065h; y@d=y@+.1h; y@e=y@; y@f=y@-.1h; y@g=y@+.015h; y@h=y@; pos@g(vair,90); pos@h(vair,90); if x_bar>0 : filldraw stroke z@g.e--z@h.e; fi fill flex(z@a,z@b,z@c) & flex(z@c,z@d,z@e)...flex(z@e,z@f,z@a) & cycle; penlabels(@,@a,@b,@c,@d,@e,@f,z@g,z@h); enddef; %%% DIAGONALS %%% def top_diagonals(suffix @)= penpos@a(vair,45); penpos@b(vair,-45); penpos@c(vair,45); penpos@d(vair,-45); penpos@e(2stem,45); penpos@f(2stem,-45); z@a.l=z@.l; z@b.r=z@.r; x@c=x@a-1u; y@c=y@a+1u; x@d=x@b+1u; y@d=y@b+1u; x@e=x@c-1.2stem; y@e=y@c+1.2stem; x@f=x@d+1.2stem; y@f=y@d+1.2stem; z@g=.5[z@c,z@e]; z@h=.5[z@d,z@f]; z@i=whatever[z@a.r,z@c.r]=whatever[z@b.r,z@d.r]; filldraw z@a.l--z@c.l--z@c.r--z@i--z@b.l-- z@d.l--z@d.r--z@b.r--z@a.l & cycle; fill z@e.l..controls z@g..z@e.r & z@e.r..{down}z@c.r--z@c.l{left}..z@e.l & cycle; fill z@f.l..controls z@h..z@f.r & z@f.r..{left}z@d.r--z@d.l{up}..z@f.l & cycle; enddef; %%% NO_CHAR %%% def no_char(expr code) = "undefined character"; beginchar(code,9u#,body_height#,paren_depth#); italcorr fig_height#*slant-.5u#; % same as for digits adjust_fit(0,0); fill (0,h)--(w,h)--(w,-d)--(0,-d)--cycle; endchar; enddef;