+ rt x0 = hround (accreg_dot_size / 2);
+ top y0 = vround (accreg_dot_size / 2);
+
+ drawdot z0;
+fet_endchar;
+
+
+fet_beginchar ("accordion register freebass", "freebass")
+ save r, lh, lt;
+
+ r# = accreg_lh#;
+ define_pixels (r);
+
+ set_char_box (r# + accreg_linethickness# / 2,
+ r# + accreg_linethickness# / 2,
+ 0.7 accreg_linethickness# / 2,
+ 2 r# + 0.7 accreg_linethickness# / 2);
+
+ lh = vround r;
+ lt = vround (0.7 accreg_linethickness);
+ d := vround (0.7 accreg_linethickness / 2);
+ h := 2 lh + lt - d;
+ b := w := (2 lh + hround accreg_linethickness) / 2;
+
+ penpos1 (hround accreg_linethickness, 0);
+ penpos2 (lt, 90);
+ penpos3 (accreg_linethickness, 180);
+ penpos4 (lt, 270);
+
+ z1r = (w, 0.5 [-d, h]);
+ z2r = (0, h);
+ z3r = (-b, 0.5 [-d, h]);
+ z4r = (0, -d);
+
+ penlabels (1, 2, 3, 4);
+
+ % mf doesn't handle pixel dropouts in outline objects, so we use
+ % `draw' if not called by mpost
+ if known miterlimit:
+ fill z1r
+ .. z2r
+ .. z3r
+ .. z4r
+ .. cycle;
+ unfill z1l
+ .. z2l
+ .. z3l
+ .. z4l
+ .. cycle;
+ else:
+ pickup pencircle xscaled accreg_linethickness yscaled lt;
+ draw z1
+ .. z2
+ .. z3
+ .. z4
+ .. cycle;
+ fi;
+
+ pickup penrazor scaled lt rotated 90;
+
+ draw z1
+ -- z3;
+fet_endchar;
+
+
+fet_beginchar ("accordion register stdbass", "stdbass")
+ save r, p, lh, lt;
+ path pat;
+
+ r# = 2 accreg_lh#;
+ define_pixels (r);
+
+ set_char_box (r# + accreg_linethickness# / 2,
+ r# + accreg_linethickness# / 2,
+ 0.7 accreg_linethickness# / 2,
+ 2 r# + 0.7 accreg_linethickness# / 2);
+
+ lh = vround (1/2 r);
+ lt = vround (0.7 accreg_linethickness);
+ d := vround (0.7 accreg_linethickness / 2);
+ h := 4 lh + lt - d;
+ b := w := (4 lh + hround accreg_linethickness) / 2;
+
+ penpos1 (hround accreg_linethickness, 0);
+ penpos2 (lt, 90);
+ penpos3 (hround accreg_linethickness, 180);
+ penpos4 (lt, 270);
+
+ z1r = (w, 0.5 [-d, h]);
+ z2r = (0, h);
+ z3r = (-b, 0.5 [-d, h]);
+ z4r = (0, -d);
+
+ penlabels (1, 2, 3, 4);
+
+ % mf doesn't handle pixel dropouts in outline objects, so we use
+ % `draw' if not called by mpost
+ if known miterlimit:
+ fill z1r
+ .. z2r
+ .. z3r
+ .. z4r
+ .. cycle;
+ unfill z1l
+ .. z2l
+ .. z3l
+ .. z4l
+ .. cycle;
+ else:
+ pickup pencircle xscaled accreg_linethickness yscaled lt;
+ draw z1
+ .. z2
+ .. z3
+ .. z4
+ .. cycle;
+ fi;
+
+ pat := z4{right}
+ .. z1{up}
+ .. {left}z2;
+
+ pickup penrazor scaled lt rotated 90;
+
+ top z5 = pat intersectionpoint ((0, lh + lt - d) -- (w, lh + lt - d));
+ z6 = z5 xscaled -1;
+ bot z7 = pat intersectionpoint ((0, 3 lh - d) -- (w, 3 lh - d));
+ z8 = z7 xscaled -1;
+
+ labels (5, 6, 7, 8);
+
+ draw z1
+ -- z3;
+ draw z5
+ -- z6;
+ draw z7
+ -- z8;
+fet_endchar;
+
+
+fet_beginchar ("accordion register bayanbass", "bayanbass")
+ save lh, lt;
+
+ lh = vround accreg_lh;
+ lt = vround accreg_linethickness;
+
+ set_char_box (accreg_lh# + accreg_linethickness# / 2,
+ accreg_lh# + accreg_linethickness# / 2,
+ accreg_linethickness# / 2,
+ 3 accreg_lh# + accreg_linethickness# / 2);
+
+ d := vround (accreg_linethickness# / 2);
+ h := 3 lh + lt - d;
+
+ draw_rounded_block ((-w, -d), (-w + lt, h), lt);
+ draw_rounded_block ((w - lt, -d), (w, h), lt);