<> <> <> <<% construct the font>> /AllegroDict 10 dict def AllegroDict begin /CharDefinitions 30 dict def CharDefinitions begin /.notdef [ { } [ 0 0 0 0 ] 0 ] def % undefined char /GClef [ % G clef { -100 -1600 translate 262.7747 1438.864 moveto 271.5875 1363.962 227.7778 1326.25 186.1111 1326.25 curveto 147.9167 1326.25 115.9689 1357.5 115.9689 1398.472 curveto 115.9689 1442.917 141.6667 1459.583 159.7222 1459.583 curveto 184.0278 1459.583 201.3889 1435.972 201.3889 1407.5 curveto 201.3889 1381.111 189.5833 1358.889 168.0556 1358.889 curveto 162.5 1358.889 162.5 1345.694 181.9444 1345.694 curveto 233.3333 1345.694 254.0792 1388.821 248.4426 1436.728 curveto 219.4444 1683.194 lineto 210.7171 1757.372 197.2222 1841.528 197.2222 1953.333 curveto 197.2222 2013.75 232.528 2065.244 252.7061 2085.342 curveto 264.1897 2096.778 265.2429 2094.689 269.6917 2086.724 curveto 279.264 2069.585 295.1389 2031.111 295.1389 1962.361 curveto 295.1389 1880.417 253.5783 1826.717 213.1944 1776.25 curveto 182.634 1738.06 128.4722 1688.75 128.4722 1624.861 curveto 128.4722 1554.028 156.9444 1508.194 220.1389 1508.194 curveto 263.8889 1508.194 293.0556 1547.083 293.0556 1583.889 curveto 293.0556 1624.167 273.1801 1647.083 243.0556 1647.083 curveto 206.2366 1647.083 178.4722 1614.444 193.0556 1553.333 curveto 185.4167 1550.556 lineto 145.8333 1642.917 195.1389 1703.333 245.8333 1703.333 curveto 291.6667 1703.333 321.5278 1657.5 321.5278 1603.333 curveto 321.5278 1555.417 285.4167 1492.222 215.9722 1492.222 curveto 149.3056 1492.222 100 1564.444 100 1642.917 curveto 100 1730.417 154.3366 1801.815 190.2798 1839.542 curveto 212.86 1863.243 281.25 1925.556 281.25 1991.528 curveto 281.25 2045.694 268.5608 2037.591 263.265 2032.326 curveto 253.1139 2022.233 211.8056 1982.5 211.8056 1930.417 curveto 211.8056 1856.111 225.2814 1757.533 234.0278 1683.194 curveto } [ 0 -273.75 221.528 493.308 ] 222 ] def /CClef [ % C clef { -700 -1600 translate 761.6667 1615.139 moveto 783.3333 1615.139 806.25 1672.778 806.25 1713.056 curveto 813.1944 1713.056 lineto 815.2778 1680.417 818.75 1644.306 856.25 1644.306 curveto 895.1389 1644.306 893.75 1834.583 831.25 1785.278 curveto 856.25 1732.5 790.2778 1729.722 790.2778 1765.833 curveto 790.2778 1819.306 915.9722 1838.056 915.9722 1716.667 curveto 915.9722 1629.722 859.0278 1615.833 827.7778 1638.75 curveto 821.5277 1622.083 792.3611 1603.333 776.3889 1600 curveto 792.3611 1596.667 821.5277 1577.917 827.7778 1561.25 curveto 859.0278 1584.167 915.9722 1570.278 915.9722 1483.333 curveto 915.9722 1361.944 790.2778 1380.694 790.2778 1434.167 curveto 790.2778 1470.278 856.25 1467.5 831.25 1414.722 curveto 893.75 1365.417 895.1389 1555.694 856.25 1555.694 curveto 818.75 1555.694 815.2778 1519.583 813.1944 1486.944 curveto 806.25 1486.944 lineto 806.25 1527.222 783.3333 1584.861 761.6667 1584.861 curveto closepath 761.6667 1395 moveto 761.6667 1805 lineto 754.1667 1805 lineto 754.1667 1395 lineto closepath 735 1395 moveto 735 1805 lineto 700 1805 lineto 700 1395 lineto closepath } [ 0 -207.283 215.972 207.283 ] 216 % 215.9722 ] def /FClef [ % F clef { -394 -1600 translate 401.9904 1390.37 moveto 509.0278 1445.694 574.3055 1526.25 574.3055 1606.111 curveto 574.3055 1663.056 537.5 1709.583 482.6389 1709.583 curveto 431.25 1709.583 400 1667.917 400 1620 curveto 400 1579.722 419.4444 1558.882 442.3611 1558.882 curveto 460.4167 1558.882 476.7418 1577.639 476.7418 1597.083 curveto 476.7418 1617.222 463.1945 1635.283 442.3611 1635.283 curveto 430.5556 1635.283 419.386 1628.868 414.5181 1619.493 curveto 414.5181 1664.444 446.5278 1695 475 1695 curveto 507.6389 1695 530.5556 1673.472 530.5556 1617.222 curveto 530.5556 1537.361 486.8055 1460.278 394.4444 1403.333 curveto % 391.7355 1393.079 401.9904 1390.37 arcto 622.2222 1646.389 moveto 605.5555 1646.389 16.66666 0 360 arc 622.2222 1553.611 moveto 605.5555 1553.611 16.66666 0 360 arc } [ 0 -209.63 227.7776 109.583 ] 228 ] def /C [ % C { -700 -1100 translate 852.0833 1081.111 moveto 832.4291 976.2889 752.0833 988.0556 752.0833 1062.639 curveto 752.0833 1137.361 lineto 752.0833 1207.5 802.7778 1208.889 813.8889 1180.417 curveto 777.7778 1171.389 785.4167 1113.75 818.75 1113.75 curveto 870.1389 1113.75 857.6389 1207.5 786.1111 1207.5 curveto 672.9167 1207.5 672.9167 992.5 786.1111 992.5 curveto 847.9167 992.5 856.6695 1044.226 863.1944 1079.028 curveto closepath } [ 1.21521 -107.5 163.194 107.5 ] 163.1944 ] def /wholeNote [ % whole note { -500 -100 translate 660 94.99994 moveto 660 22.08331 500 24.16663 500 105 curveto 500 177.9167 660 175.8333 660 94.99994 curveto 555.7439 93.94765 moveto 561.9361 69.13023 570.2778 49.99994 593.8649 49.99994 curveto 607.7778 49.99994 615.4179 61.32039 604.2564 106.0523 curveto 598.0639 130.8698 589.7222 150 566.1351 150 curveto 552.2222 150 544.5821 138.6797 555.7439 93.94765 curveto } [ 0 -58 160 58 ] 160 ] def /halfNote [ % half note head { -300 -100 translate 420 115.5555 moveto 420 43.05556 300 9.444397 300 85.55556 curveto 300 158.0556 420 191.6667 420 115.5555 curveto 312.5 80.55556 moveto 312.5 42.36108 348.6977 67.70593 370.7391 81.10135 curveto 374.7181 83.51938 407.5 100.6944 407.5 120.5556 curveto 407.5 158.75 371.3023 133.4051 349.261 120.0096 curveto 345.282 117.5916 312.5 100.4167 312.5 80.55556 curveto } [ 0.0 -57.6287 120.0 58.7398 ] 120 ] def /quarterNote [ % quarter note head { -100 -100 translate 215 115 moveto 215 40.4 100 12 100 85 curveto 100 159.6 215 188 215 115 curveto } [ 0 -57.5 115 57.5 ] 115 ] def /eighthFlagUp [ % eighth flag (stem up) { -100 -600 translate 197.2222 250.2778 moveto 254.2043 437.3497 112.5 500 112.5 600 curveto 112.5 608.3333 100 608.3333 100 600 curveto 100 479.0278 lineto 112.5 479.0278 lineto 135.4167 479.0278 228.8972 397.1654 185.2647 253.92 curveto 182.8365 245.9483 194.7941 242.306 197.2222 250.2778 curveto } [ 0 -354.175 110.679 6.25 ] 115 ] def /eighthFlagDn [ % eighth flag (stem down) { 1 -1 scale -100 -600 translate 197.2222 250.2778 moveto 254.2043 437.3497 112.5 500 112.5 600 curveto 112.5 608.3333 100 608.3333 100 600 curveto 100 479.0278 lineto 112.5 479.0278 lineto 135.4167 479.0278 228.8972 397.1654 185.2647 253.92 curveto 182.8365 245.9483 194.7941 242.306 197.2222 250.2778 curveto } [ 0 -6.25 110.679 354.175 ] 115 ] def /sixteenthFlagUp [ % sixteenth flags (stem up) { -300 -600 translate 406.9444 229.4444 moveto 449.0612 367.7134 312.5 400 312.5 500 curveto 332.6389 500 437.4605 443.6207 393.6028 331.493 curveto 405.2439 326.9397 lineto 463.1119 474.8873 312.5 493.3333 312.5 600 curveto 312.5 608.3333 300 608.3333 300 600 curveto 300 400 lineto 312.5 400 lineto 335.4167 400 425.4792 333.1938 394.9868 233.0867 curveto 392.5586 225.115 404.5161 221.4727 406.9444 229.4444 curveto } [ 0.0 -375.008 118.47 6.25 ] 120 ] def /sixteenthFlagDn [ % sixteenth flags (stem down) { 1 -1 scale -300 -600 translate 406.9444 229.4444 moveto 449.0612 367.7134 312.5 400 312.5 500 curveto 332.6389 500 437.4605 443.6207 393.6028 331.493 curveto 405.2439 326.9397 lineto 463.1119 474.8873 312.5 493.3333 312.5 600 curveto 312.5 608.3333 300 608.3333 300 600 curveto 300 400 lineto 312.5 400 lineto 335.4167 400 425.4792 333.1938 394.9868 233.0867 curveto 392.5586 225.115 404.5161 221.4727 406.9444 229.4444 curveto } [ 0.0 -6.25 118.47 375.008 ] 120 ] def /extraFlagUp [ % additional flag (stem up) { -500 -600 translate 500 600 moveto 500 500 lineto 512.5 500 lineto 532.6389 500 637.4604 443.6207 593.6031 331.493 curveto 605.2436 326.9397 lineto 663.1118 474.8873 512.5 493.3333 512.5 600 curveto 512.5 608.3333 500 608.3333 500 600 curveto } [ 0 -273.06 118.47 6.25 ] 120 ] def /extraFlagDn [ % additional flag (stem down) { 1 -1 scale -500 -600 translate 500 600 moveto 500 500 lineto 512.5 500 lineto 532.6389 500 637.4604 443.6207 593.6031 331.493 curveto 605.2436 326.9397 lineto 663.1118 474.8873 512.5 493.3333 512.5 600 curveto 512.5 608.3333 500 608.3333 500 600 curveto } [ 0 -6.25 118.47 273.06 ] 120 ] def /wholeRest [ % whole rest { -100 -800 translate 100 850 moveto 100 900 lineto 230 900 lineto 230 850 lineto closepath } [ 0 50 130 100 ] 130 ] def /halfRest [ % half rest { -300 -800 translate 300 800 moveto 300 850 lineto 430 850 lineto 430 800 lineto closepath } [ 0 0 130 50 ] 130 ] def /quarterRest [ % quarter rest { -500 -800 translate 595.9077 702.5172 moveto 565.4009 745.6066 lineto 539.2315 782.5679 541.4912 803.2264 557.2356 843.3208 curveto 570.8536 878 570.1064 882.3023 548.0303 913.4828 curveto 513.187 962.6945 lineto 508.3351 969.4694 498.1724 962.1915 503.0244 955.4167 curveto 515.6177 937.6296 lineto 531.8953 914.64 529.4133 892.9167 511.027 846.0968 curveto 500.3884 819.0028 502.33 813.0556 509.5217 803.0132 curveto 550.9298 745.1896 lineto 505.1077 767.2222 475.2466 713.75 528.0244 656.1111 curveto 533.3261 650.322 542.0175 656.5263 539.8302 660.9722 curveto 518.3023 704.7222 560.4536 730.9623 585.7064 695.2941 curveto 590.522 688.4932 600.7234 695.7167 595.9077 702.5172 curveto } [ 0 -146.197 97.0496 165.368 ] 100 ] def /eighthRest [ % eighth rest { -700 -800 translate 754.6707 700.6111 moveto 799.2969 879.1163 lineto 801.3182 887.201 789.1915 890.2333 787.1702 882.1486 curveto 781.1334 857.7414 755.8333 830.4167 755.8333 855.4167 curveto 755.8333 872.0833 745.9722 889.4445 728.6111 889.4445 curveto 692.5 889.4445 692.5 821.3889 728.6111 821.3889 curveto 753.6111 821.3889 766.8904 831.4426 777.3125 842.717 curveto 742.5435 703.6429 lineto 740.5227 695.5581 752.6493 692.5263 754.6707 700.6111 curveto } [ 1.52777 -104.114 99.4391 89.4445 ] 100 ] def /sixteenthRest [ % sixteenth rest { -900 -800 translate 1024.297 879.1163 moveto 1026.318 887.201 1014.191 890.2333 1012.17 882.1486 curveto 1006.133 857.7414 980.8333 830.4167 980.8333 855.4167 curveto 980.8333 872.0833 970.9722 889.4445 953.6111 889.4445 curveto 917.5 889.4445 917.5 821.3889 953.6111 821.3889 curveto 978.6111 821.3889 991.8904 831.4426 1002.312 842.717 curveto 987.1702 782.1486 lineto 981.1334 757.7414 955.8333 730.4167 955.8333 755.4167 curveto 955.8333 772.0833 945.9722 789.4445 928.6111 789.4445 curveto 892.5 789.4445 892.5 721.3889 928.6111 721.3889 curveto 953.6111 721.3889 966.8904 731.4426 977.3125 742.717 curveto 942.5435 603.6429 lineto 940.5227 595.5581 952.6493 592.5263 954.6707 600.6111 curveto 1024.297 879.1163 lineto } [ 1.52771 -204.114 124.439 89.4445 ] 125 ] def /doubleSharp [ % double sharp { -100 -1100 translate 100 1153.997 moveto 102.9486 1112.361 lineto 130.3931 1109.999 lineto 138.782 1100 lineto 130.3931 1090.001 lineto 102.9486 1087.639 lineto 100 1046.004 lineto 133.5041 1050 lineto 138.0778 1083.603 lineto 145.3097 1092.221 lineto 152.5417 1083.603 lineto 157.1152 1050 lineto 190.6196 1046.004 lineto 187.6707 1087.639 lineto 160.2263 1090.001 lineto 151.8374 1100 lineto 160.2263 1109.999 lineto 187.6707 1112.361 lineto 190.6196 1153.997 lineto 157.1152 1150 lineto 152.5417 1116.397 lineto 145.3097 1107.779 lineto 138.0778 1116.397 lineto 133.5041 1150 lineto closepath } [ 0 -54 90.6196 54 ] 90.6196 ] def /sharp [ % sharp { -200 -1100 translate 262.5 1143.412 moveto 275 1149.246 lineto 275 1187.87 lineto 262.5 1182.036 lineto 262.5 1250 lineto 250 1250 lineto 250 1176.203 lineto 225 1164.536 lineto 225 1230 lineto 212.5 1230 lineto 212.5 1158.704 lineto 200 1152.871 lineto 200 1114.247 lineto 212.5 1120.081 lineto 212.5 1056.587 lineto 200 1050.754 lineto 200 1012.13 lineto 212.5 1017.964 lineto 212.5 950 lineto 225 950 lineto 225 1023.797 lineto 250 1035.463 lineto 250 970 lineto 262.5 970 lineto 262.5 1041.297 lineto 275 1047.13 lineto 275 1085.753 lineto 262.5 1079.919 lineto closepath 225 1125.914 moveto 250 1137.579 lineto 250 1074.088 lineto 225 1062.421 lineto closepath } [ 0 -150 75 150 ] 75 ] def /flat [ % flat { -400 -1100 translate 400 1020.972 moveto 400 1300 lineto 412.5 1300 lineto 412.5 1144.444 lineto 431.9444 1180.417 475 1176.25 475 1131.806 curveto 475 1111.667 475.6945 1090.417 400 1020.972 curveto closepath 412.5 1050 moveto 501.3889 1140.833 412.5 1185.972 412.5 1100 curveto closepath } [ 0 -79.0281 75.0 200.0 ] 75 ] def /natural [ % natural { -300 -1100 translate 300 1021.684 moveto 350 1045 lineto 350 950 lineto 362.5 950 lineto 362.5 1178.315 lineto 312.5 1155 lineto 312.5 1250 lineto 300 1250 lineto closepath 312.5 1121.899 moveto 350 1139.385 lineto 350 1078.101 lineto 312.5 1060.615 lineto closepath } [ 0.0 -150.0 62.5 150.0 ] 62.5 ] def /doubleFlat [ % double flat { -500 -1100 translate 500 1020.972 moveto 500 1300 lineto 512.5 1300 lineto 512.5 1144.444 lineto 531.9444 1180.417 575 1176.25 575 1131.806 curveto 575 1111.667 575.6945 1090.417 500 1020.972 curveto closepath 512.5 1050 moveto 601.3889 1140.833 512.5 1185.972 512.5 1100 curveto closepath 561.1111 1020.972 moveto 561.1111 1300 lineto 573.6111 1300 lineto 573.6111 1144.444 lineto 593.0556 1180.417 636.1111 1176.25 636.1111 1131.806 curveto 636.1111 1111.667 636.8056 1090.417 561.1111 1020.972 curveto closepath 573.6111 1050 moveto 662.5 1140.833 573.6111 1185.972 573.6111 1100 curveto closepath } [ 0 -79.0281 136.111 200.0 ] 136.1111 ] def end /FontType 3 def /FontMatrix 0.01 dup 6 array scale def /FontBBox [ 0 -375.008 227.778 493.308 ] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for Encoding 8#101 /GClef put % (A) Encoding 8#102 /CClef put % (B) Encoding 8#103 /FClef put % (C) Encoding 8#104 /C put % (D) Encoding 8#111 /wholeNote put % (I) Encoding 8#112 /halfNote put % (J) Encoding 8#113 /quarterNote put % (K) Encoding 8#120 /eighthFlagUp put % (P) Encoding 8#121 /sixteenthFlagUp put % (Q) Encoding 8#122 /extraFlagUp put % (R) Encoding 8#124 /eighthFlagDn put % (T) Encoding 8#125 /sixteenthFlagDn put % (U) Encoding 8#126 /extraFlagDn put % (V) Encoding 8#143 /doubleSharp put % (c) Encoding 8#144 /sharp put % (d) Encoding 8#145 /natural put % (e) Encoding 8#146 /flat put % (f) Encoding 8#147 /doubleFlat put % (g) Encoding 8#151 /wholeRest put % (i) Encoding 8#152 /halfRest put % (j) Encoding 8#153 /quarterRest put % (k) Encoding 8#154 /eighthRest put % (l) Encoding 8#155 /sixteenthRest put % (m) /BuildChar { 0 begin /char exch def /fontdict exch def /info fontdict /CharDefinitions get fontdict /Encoding get char get get def info 2 get 0 info 1 get aload pop setcachedevice newpath info 0 get exec fill end } def /BuildChar load 0 3 dict put /UniqueID 870720 def end /Allegro AllegroDict definefont pop <<% testing and examples>> /examplepage { gsave 72 dup scale gsave 1 2 translate 2 3 div dup scale example grestore gsave 1 5 translate 3 2 div dup scale example grestore gsave 1 8 translate example grestore grestore showpage } def /examplepage2 { gsave 72 dup scale gsave 1 2 translate 2 3 div dup scale example2 grestore gsave 1 5 translate 3 2 div dup scale example2 grestore gsave 1 8 translate example2 grestore grestore showpage } def /example { exampledict begin gsave 1 25.4 div dup scale % assume units were inches, scale to millimeters setparams musicfont setfont /xmin 0 def /xmax 100 def /ybot 10 def /ytop ybot 16.5 add def xmin xmax ytop ybot staves /xl exch def /x xl def /sp 6 def -5 1 -1 { d ytop add x exch moveto (K) show currentpoint dup 8 d add stemup (Q) show /x x sp add def } for 0 1 5 { d ytop add x exch 2 copy moveto (K) show dup 8 d sub stemdn (U) show /x x sp add def } for /x xl def -5 1 5 { d ybot add x exch moveto (I) show /x x sp add def } for grestore end } def /example2 { exampledict begin gsave 1 25.4 div dup scale % assume units were inches, scale to millimeters setparams musicfont setfont /xmin 0 def /xmax 100 def /ybot 10 def /ytop ybot 16.5 add def xmin xmax ytop ybot staves /xl exch def /x xl def /sp 6 def -5 1 -1 { d ytop add x exch moveto (K) show currentpoint dup 7 d add stemup (P) show /x x sp add def } for 0 1 5 { d ytop add x exch 2 copy moveto (K) show dup 7 d sub stemdn (T) show /x x sp add def } for /x xl def -5 1 -1 { d ybot add x exch moveto (J) show currentpoint dup 7 d add stemup /x x sp add def } for 0 1 5 { d ybot add x exch 2 copy moveto (J) show dup 7 d sub stemdn /x x sp add def } for grestore end } def /exampledict 50 dict def /unitmusicfont /Allegro findfont def /unitdigitfont /NewCenturySchlbk-Bold findfont 0 -0.345 6 array translate 1000 740 div dup 6 array scale 6 array concatmatrix makefont def exampledict begin /xround { 0 dtransform exch round exch round idtransform pop } def /yround { 0 exch dtransform exch round exch round idtransform exch pop } def /setparams { /degree 7 8 div yround def % make degree a whole number of pixels /d [ degree /mul load ] cvx def /lineThickness 0.2 d yround def /lineOffset 0.1 d yround def /stemThickness 0.25 d xround def /stemOffset 0.3 d yround def /barThickness 0.3 d xround def /musicfont unitmusicfont 2 d scalefont def /digitfont unitdigitfont 4 d scalefont def } def /staffdict dup where { pop pop } { 8 dict def } ifelse /staff { staffdict begin % yc x0 x1 /x1 exch def /x0 exch def /yc exch def -4 2 +4 { degree mul yc add lineOffset sub /y0 exch def /y1 y0 lineThickness add def x0 y0 moveto x1 y0 lineto x1 y1 lineto x0 y1 lineto fill } for end } def /bardict dup where { pop pop } { 5 dict def } ifelse /bar { bardict begin % x y0 y1 /y1 exch def /y0 exch def /x0 exch xround def /x1 x0 barThickness xround add def x0 y0 moveto x1 y0 lineto x1 y1 lineto x0 y1 lineto fill end } def /staves { % xmin xmax ytop ybot staves -> xl /ybot exch def /ytop exch def /xmax exch def /xmin exch def ytop xmin xmax staff ybot xmin xmax staff 0 ytop 4 d add ybot 4 d sub bar 1 ytop 2 d sub moveto (A) show 1 ybot 2 d add moveto (C) show /x currentpoint pop 1 add def x ytop 4 d add moveto (d) show x ybot 2 d add moveto (d) show /x currentpoint pop 0.5 add def x ytop 1 d add moveto (d) show x ybot 1 d sub moveto (d) show /x currentpoint pop 0.5 add def x ytop 5 d add moveto (d) show x ybot 3 d add moveto (d) show /x currentpoint pop 4 add def (3)(16) x ytop time (4)(2) x ybot time x 4 add } def /stemdict dup where { pop pop } { 5 dict def } ifelse /stemup { stemdict begin % x y0 y1 stemup -> xf yf /y1 exch def /y0 exch stemOffset add def /x1 exch xround def /x0 x1 stemThickness xround sub def x0 y0 moveto x1 y0 lineto x1 y1 lineto x0 y1 lineto fill x0 y1 moveto end } def /stemdn { stemdict begin % x y0 y1 stemdn -> xf yf /y1 exch def /y0 exch stemOffset sub def /x0 exch xround def /x1 x0 stemThickness xround add def x0 y0 moveto x1 y0 lineto x1 y1 lineto x0 y1 lineto fill x0 y1 moveto end } def /timedict dup where { pop pop } { 8 dict def } ifelse /time { timedict begin % sn sd xc yc time /yc exch def /xc exch def /sd exch def /sn exch def gsave digitfont setfont xc sn stringwidth pop 2 div sub yc 2 d add moveto sn show xc sd stringwidth pop 2 div sub yc 2 d sub moveto sd show grestore end } def end /charCodes (ABC DIJK PQR TUV cdefgijklm) def /showFontChars { /f /Allegro findfont 20 scalefont def /n 0 def /s 1 string def f setfont charCodes { s exch 0 exch put 72 n 5 idiv 72 mul add 648 n 5 mod 108 mul sub moveto s show /n n 1 add def } forall 0.5 setlinewidth 648 -108 200 { dup 36 exch moveto 504 exch lineto stroke } for } def /ch { gsave translate CharDefinitions exch get /cha exch def 0.2 dup scale cha 1 get aload aload pop 4 2 roll 5 -1 roll exch 5 1 roll gsave 0.9 setgray newpath moveto lineto lineto lineto fill grestore cha 0 get exec fill grestore } def /charNames [ /GClef /CClef /FClef null /C /wholeNote /halfNote /quarterNote null null /eighthFlagUp /sixteenthFlagUp /extraFlagUp null null /eighthFlagDn /sixteenthFlagDn /extraFlagDn null null /wholeRest /halfRest /quarterRest /eighthRest /sixteenthRest /doubleSharp /sharp /natural /flat /doubleFlat ] def /showChars { /n 0 def charNames { dup type /nametype eq { 72 n 5 idiv 72 mul add 648 n 5 mod 108 mul sub ch } if /n n 1 add def } forall 0.5 setlinewidth 648 -108 200 { dup 36 exch moveto 504 exch lineto stroke } for } def /fontBoundingBox { /xmin 0 def /ymin 0 def /xmax 0 def /ymax 0 def CharDefinitions { exch pop 1 get aload pop ymax 2 copy gt { exch } if /ymax exch def pop xmax 2 copy gt { exch } if /xmax exch def pop ymin 2 copy lt { exch } if /ymin exch def pop xmin 2 copy lt { exch } if /xmin exch def pop } forall ([ ) print ymax xmax ymin xmin 4 { =print ( ) print } repeat (]\n) print } def <> <> <> <> <<([ ) print 4 2 roll >> <<2 { exch cha 1 get sub =print ( ) print cha 2 get sub =print ( ) print } repeat>> <<(]\n) print>> <> <<} def>> <<>> /nonTextFonts 4 dict def nonTextFonts /Symbol 0 put nonTextFonts /ZapfDingbats 1 put nonTextFonts /Allegro 2 put /fontSamples { gsave /Helvetica-Narrow-Oblique findfont 10 scalefont setfont 72 720 translate FontDirectory { pop dup nonTextFonts exch known { pop } { dup =string cvs 0 0 moveto show (:) show gsave findfont 12 scalefont setfont 120 0 moveto (0123456789 abcdefg) show grestore 0 -18 translate } ifelse } forall grestore } def /NewCenturySchlbk-Bold findfont 0 -0.345 6 array translate 1000 740 div dup 6 array scale 6 array concatmatrix makefont 1000 scalefont setfont /stringBounds { gsave newpath 0 0 moveto false charpath flattenpath pathbbox 4 2 roll ([ ) print 2 { exch =print ( ) print =print ( ) print } repeat (]\n) print grestore } def