MusicFont.ps
Copyright Ó 1987 by Xerox Corporation. All rights reserved.
Doug Wyatt, July 21, 1987 5:31:38 pm PDT
% 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
/boundingBoxes {
CharDefinitions { gsave
/cha exch def =print (: ) print
newpath cha 0 get exec flattenpath pathbbox
([ ) print 4 2 roll
2 { exch cha 1 get sub =print ( ) print cha 2 get sub =print ( ) print } repeat
(]\n) print
grestore } forall
} 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