+ pickup pencircle scaled dot_diam;
+ draw (-staff_space/2, staff_space/2);
+ draw (staff_space/2, -staff_space/2);
+fet_endchar;
+
+fet_beginchar("Segno", "segno", "segno")
+ save thin, thick, ball_diam, darkness, pointheight;
+ save wd, ht, thick_nibangle, ball_nib_thick;
+ save turndir;
+ pair turndir;
+
+ ht# = 3 staff_space#;
+ wd# = 2 staff_space#;
+ darkness = 1.20 stafflinethickness;
+
+ set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);
+
+ thick_nibangle = 30;
+ thick = 3 darkness;
+ thin = darkness;
+ ball_nib_thick = 2.7 darkness;
+ ball_diam = ball_nib_thick + (w - ball_nib_thick) / 10;
+ pointheight = 2 stafflinethickness;
+
+ y3l = h;
+ 2 x3 = x2 + x4;
+ x4 = 0;
+ y4 = y2;
+ y2l = .6 h;
+ x2l = -b;
+ z1 = (0,0);
+
+ penpos1(thick, 2 thick_nibangle);
+ penpos2(thick, thick_nibangle);
+ penpos3(thin, -90);
+ penpos4(ball_nib_thick, 180-thick_nibangle);
+
+ path swoosh, ploop;
+ swoosh := z1l{curl 0} .. z2l .. z3l{right} .. {down}z4l
+ -- z4r .. z3r{left} .. z2r{down} ;
+ fill swoosh .. (swoosh scaled -1) .. cycle;
+ penlabels(1,2,3,4);
+
+ y5r = y4;
+ x5r = x4l - ball_diam /2;
+ z6r = z5r;
+
+ penpos5(1.6 ball_diam/2, 100);
+ penpos6(ball_diam/2, 240);
+
+ ploop := z4l{down} .. z5l .. z6l -- cycle;
+ fill ploop;
+ fill ploop scaled -1;
+ penlabels(4,5,6);
+
+ penpos7(2 thin,0);
+ z7l=(-b,-d);
+ penpos8(2 thin,0);
+ z8r=(w,h);
+ filldraw z7l--z8l{right}--z8r{down}--z7r{right}--cycle;
+ pickup pencircle scaled 2 thin;
+ draw (-x2r,pointheight);
+ draw (x2r,-pointheight);
+fet_endchar;
+
+fet_beginchar("Coda", "coda", "coda")
+ save thin, thick, codawidth, codaheight;
+ thin# = 1.2 stafflinethickness#;
+ thick# = 3.5 stafflinethickness#;
+ codawidth# = 2/3 staff_space#;
+ codaheight# = 1 staff_space#;
+ define_pixels(thin, thick, codawidth, codaheight);
+
+ set_char_box(codawidth#+thick#, codawidth#+thick#,
+ codaheight#+thick#, codaheight#+thick#);
+
+ penpos1(thick,0);
+ penpos2(thin,-90);
+ penpos3(thick,180);
+ x1l=-codawidth;
+ y2l=codaheight;
+ y1=0;
+ x2=0;
+ z3 = - z1;
+ penlabels(1,2,3);
+
+ path halfcoda;
+ halfcoda := z1l{up} .. z2l{right} .. z3l{down} --
+ z3r{up} .. z2r{left} .. z1r{down} .. cycle;
+ fill halfcoda;
+ fill (halfcoda scaled -1);
+
+ pickup pencircle scaled thin;
+ draw (0,-h) -- (0,h);
+ draw (-w,0) -- (w,0);
+
+fet_endchar;
+
+thick#:=1/24designsize;
+define_blacker_pixels(thick);
+
+rthin:=1/8*staff_space;
+rthick:=2thick+rthin;
+
+def draw_arpeggio =
+ save alpha;
+ alpha:=-40;
+ save ne,nw,se,sw; pair ne,nw,se,sw;
+ save x,y;
+
+ se=dir alpha; nw=dir (alpha+180);
+ ne=dir (alpha+90); sw=dir (alpha-90);
+ penpos1(rthin,alpha+90);
+ penpos2(5/4rthick,alpha);
+ penpos4(5/4rthick,alpha);
+ penpos5(rthin,alpha+90);
+ penpos3(3/4rthick,alpha);
+
+ z1=(width/2, height) - overshoot*se;
+ z2=2[z4,(width/2,height/2)];
+ z3=1/2[z2,z4];
+ x4=2/8staff_space;
+ y4=rthin;
+
+ z5=2[z1,(width/2,height/2)];
+ z6=z2l+1/2rthin*sw;
+ z7=z4l+1/2rthin*sw+1/2rthin*se;
+ z8=2[z6,(width/2,height/2)];
+ z9=2[z7,(width/2,height/2)];
+
+ fill z1l{se}..{se}z6..z3l..z7{se}..{se}z5l..z5r{nw}..{nw}z8..z3r..z9{nw}..{nw}z1r.. cycle;
+ penlabels(1,2,3,4,5,6,7,8,9);
+ enddef;
+
+fet_beginchar("Arpeggio","arpeggio","arpeggio");
+ %draw_staff (-2, 2, 0.0);
+ save height, overshoot, width;
+ height# = staff_space#;
+ width# = 0.8height#;
+ overshoot# = 0.25 staff_space#;
+ define_pixels (height,overshoot,width);
+ set_char_box(0, width#, 0, height#);
+ draw_arpeggio;
+ fet_endchar;
+
+% Extendable Trill symbol.
+% Not yet used
+% Rename me to Trill, rename Trill to Tr?
+fet_beginchar("Trill-element","trill-element","trill-element");
+ save height, overshoot;
+ height# = staff_space#;
+ width# = 0.8height#;
+ overshoot# = 0.25 staff_space#;
+ define_pixels (height,overshoot,width);
+ set_char_box(0, height#, 0, width#);
+ draw_arpeggio;
+ currentpicture := currentpicture shifted -(width/2, height/2);
+ currentpicture := currentpicture rotated 90;
+ currentpicture := currentpicture shifted (height/2, width/2);
+ fet_endchar;
+
+% Hmm
+input feta-slag;