chiark / gitweb /
Import upstream version 5.3.
[mup] / mup / mup / prolog.c
CommitLineData
69695f33
MW
1/* Copyright 1995, 1996, 1997, 1998 by Arkkra Enterprises */
2
3#include <stdio.h>
4#include "globals.h"
5
6char *prolog_text[] = {
7 "% Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2003, 2004 by Arkkra Enterprises",
8 "% All rights reserved",
9 "",
10 "% Mup PostScript Prolog 5.3 for use with Mup 5.3",
11 "",
12 "% lwid is used as the width of a standard (thin) line in the music",
13 "% character definitions.",
14 "/lwid 70 def",
15 "/halflwid lwid 2 div def",
16 "",
17 "% Define the following for use in do_upshortnote, do_dnshortnote, and",
18 "% do_shortrest; it has to be done outside of the music font definition.",
19 "/utildict 10 dict def",
20 "utildict begin",
21 " /setnumflags { /numflags exch def } def",
22 " /sethooksm1 { /hooksm1 exch def } def",
23 " /setoffsets { /offsets exch def } def",
24 " /setx { /x exch def } def",
25 " /sety { /y exch def } def",
26 "end",
27 "",
28 "% Define a music character font. Each music character is defined as if it",
29 "% were a normal ASCII character in a strange font where \"A\" looks like a",
30 "% treble clef, \"B\" looks like a bass clef, etc.",
31 "",
32 "/mfont0 100 dict def",
33 "mfont0 begin",
34 " /FontType 3 def",
35 " /FontMatrix [ .001 0 0 0.001 0 0 ] def",
36 " /FontBBox [ -2000 -4030 2000 4030 ] def",
37 " /FontName (Mfont0) def",
38 "",
39 " % set up Encoding vector with standard names",
40 " /Encoding 256 array def",
41 " StandardEncoding Encoding copy",
42 " pop",
43 "",
44 " % the following definitions are used for quarter rests",
45 " /topx -170 def /topy 950 def",
46 " /cor1x 250 def /cor1y 450 def",
47 " /cor2x -300 def /cor2y 200 def",
48 " /cor3x 250 def /cor3y -400 def",
49 "",
50 " % the following definitions are used for double sharps",
51 " /limit 300 halflwid add def",
52 " /off 70 def",
53 " /inbendsmall limit 200 sub def",
54 " /inbendbig limit 20 sub def",
55 " /outbendsmall 100 def",
56 " /outbendbig outbendsmall off add def",
57 "",
58 " %%%%% define routines that will be used by multiple characters %%%%%",
59 " /do_1n {",
60 " gsave",
61 " newpath -10 rotate 1.6 1 scale",
62 " 0 0 325 0 360 arc %outer ellipse",
63 " 1 1.6 div 1 scale 10 rotate %back to original",
64 " 35 rotate 0.85 1.1 scale",
65 " 0 0 275 0 360 arc %inner ellipse",
66 " eofill",
67 " grestore",
68 " } def",
69 " /do_upflag {",
70 " -315 0 moveto",
71 " -300 100 -100 480 0 600 curveto",
72 " 300 960 350 1500 200 1700 curveto",
73 " 130 1700 lineto",
74 " 350 1200 50 650 -315 600 curveto",
75 " fill",
76 " } def",
77 " /do_flat {",
78 " -250 -400 moveto %outer edge of loop",
79 " 500 0 350 650 -250 160 curveto",
80 " -250 160 lwid sub lineto %inner edge of loop",
81 " 100 400 300 0 -250 -400 lwid add curveto",
82 " fill",
83 "",
84 " lwid setlinewidth %stem",
85 " -250 1100 moveto -250 -400 lineto stroke",
86 " } def",
87 " /do_diamond {",
88 " newpath",
89 " 420 0 moveto 0 300 lineto -420 0 lineto",
90 " 0 -300 lineto closepath",
91 " 259 -29 moveto -41 185 lineto -259 29 lineto",
92 " 41 -185 lineto closepath",
93 " eofill",
94 " } def",
95 " /do_2n {",
96 " gsave",
97 " newpath 25 rotate 1.4 1 scale",
98 " 0 0 315 0 360 arc %outer ellipse",
99 " 1 1.4 div 1 scale %back to original",
100 " 1.3 0.5 scale",
101 " 0 0 310 0 360 arc %inner ellipse",
102 " eofill",
103 " grestore",
104 " } def",
105 " /do_4n {",
106 " gsave",
107 " newpath 25 rotate 1.35 1 scale",
108 " 0 0 310 0 360 arc fill",
109 " grestore",
110 " } def",
111 " /do_com {",
112 " newpath",
113 " 330 250 150 0 360 arc fill %knob at upper right",
114 " 465 300 moveto %outer boundary",
115 " 410 500 200 635 0 635 curveto",
116 " -750 635 -750 -635 0 -635 curveto",
117 " 350 -635 480 -300 500 -100 curveto",
118 " 430 -100 lineto %inner boundary",
119 " 380 -300 250 -565 0 -565 curveto",
120 " -450 -565 -450 565 0 565 curveto",
121 " 200 565 370 350 395 300 curveto",
122 " fill",
123 " } def",
124 " /do_ferm {",
125 " 0 0 800 lwid sub 0 180 arc %inner arc",
126 " -800 0 lineto",
127 " 0 270 lwid sub 800 180 0 arcn %outer arc",
128 " 800 0 lineto fill",
129 " 0 120 120 0 360 arc fill %the dot",
130 " } def",
131 " /do_mor {",
132 " gsave",
133 " 0.7 1 scale %scrunch the following horizontally",
134 " 45 rotate %to pretend all lines horz or vertical",
135 " 0 1 1 {",
136 " pop %we don't need the loop variable",
137 " %one half of the mordent",
138 " 0 40 moveto 350 40 lineto 350 -460 lineto",
139 " 750 -460 lineto 750 -540 lineto",
140 " 150 -540 lineto 150 -40 lineto",
141 " 0 -40 lineto fill",
142 " 180 rotate %to do the other half",
143 " } for",
144 " grestore",
145 " } def",
146 " /do_turn {",
147 " gsave",
148 " 0 1 1 {",
149 " pop %we don't need the loop variable",
150 " 0 -100 moveto %outer boundary",
151 " 200 -400 625 -400 625 0 curveto",
152 " 625 200 500 325 300 325 curveto",
153 " 300 185 lineto %inner boundary",
154 " 450 255 555 150 555 0 curveto",
155 " 555 -350 250 -250 0 100 curveto",
156 " fill",
157 " 300 255 70 0 360 arc fill %knob on end",
158 " 180 rotate %to do the other half",
159 " } for",
160 " grestore",
161 " } def",
162 "",
163 " /do_upshortnote {",
164 " utildict begin",
165 " setnumflags %set numflags from the stack",
166 " gsave",
167 " -330 0 translate %half a flag width",
168 " do_4n %do a quarter note head",
169 " lwid setlinewidth",
170 " 370 0 moveto",
171 " 370 2100 numflags 2 sub flagsep mul add lineto stroke",
172 " 670 2100 numflags 2 sub flagsep mul add translate",
173 " 1 -1 scale %reflect across X axis",
174 " 0 1 numflags 1 sub {",
175 " do_upflag %do an upflag",
176 " pop %we don't need the loop variable",
177 " 0 flagsep translate",
178 " } for",
179 " grestore",
180 " end",
181 " } def",
182 "",
183 " /do_dnshortnote {",
184 " utildict begin",
185 " setnumflags %set numflags from the stack",
186 " do_4n %do a quarter note head",
187 " lwid setlinewidth",
188 " -370 0 moveto",
189 " -370 -2100 numflags 2 sub flagsep mul sub lineto stroke",
190 " gsave",
191 " -70 -2100 numflags 2 sub flagsep mul sub translate",
192 " 0 1 numflags 1 sub {",
193 " do_upflag %do an upflag",
194 " pop %we don't need the loop variable",
195 " 0 flagsep translate",
196 " } for",
197 " grestore",
198 " end",
199 " } def",
200 "",
201 " /do_shortrest {",
202 " utildict begin",
203 " sety setx setoffsets sethooksm1 %set variable from the stack",
204 " gsave",
205 " -105.8 offsets mul -600 offsets mul translate",
206 " 0 1 hooksm1 { %loop once per hook",
207 " newpath",
208 " 1 setlinewidth",
209 " gsave",
210 " 1 1.2 scale",
211 " -150 300 1.2 div 140 0 360 arc fill %the dot",
212 " grestore",
213 " lwid setlinewidth",
214 " -50 700 550 255 315 arc %rest of the hook",
215 " hooksm1 lt { stroke 105.8 600 translate } if",
216 " } for",
217 " x y lineto stroke",
218 " grestore",
219 " end",
220 " } def",
221 "",
222 "",
223 " % subsidiary dictionary of character definitions",
224 " /CharStrings 128 dict def",
225 " CharStrings begin",
226 "",
227 " /.notdef {} def",
228 "",
229 " % Here are the definitions of the characters. A stepsize here",
230 " % is 300 units (assuming the character is drawn at its default",
231 " % size).",
232 "",
233 " % gclef",
234 " /A {",
235 " newpath",
236 " %start with inner curl, inside boundary",
237 " -50 -300 moveto",
238 " -450 600 700 700 750 0 curveto",
239 " 750 -800 -700 -800 -700 200 curveto",
240 " -700 900 500 1400 520 2250 curveto",
241 " 520 2900 300 3000 200 3000 curveto",
242 " 100 3000 -400 2500 -200 1800 curveto",
243 " 350 -600 lineto",
244 " 720 -1600 0 -1650 -400 -1400 curveto",
245 "",
246 " %go back to start, drawing the other boundary",
247 " -400 -1480 lineto",
248 " 0 -1700 800 -1700 430 -600 curveto",
249 " -120 1800 lineto",
250 " -300 2400 200 2800 250 2800 curveto",
251 " 400 2800 430 2700 430 2450 curveto",
252 " 430 1800 -900 1200 -900 300 curveto",
253 " -750 -900 800 -900 850 0 curveto",
254 " 900 1100 -750 900 -120 -300 curveto fill",
255 "",
256 " %circle at the bottom",
257 " -300 -1250 250 0 360 arc fill",
258 " } def",
259 "",
260 " % fclef",
261 " /B {",
262 " newpath",
263 " %start with outside boundary, at bottom",
264 " -1000 -1700 moveto",
265 " 100 -1100 500 -600 450 0 curveto",
266 " 450 850 -1100 850 -950 0 curveto",
267 "",
268 " %go back to start, drawing the other boundary",
269 " -880 0 lineto",
270 " -920 400 -600 560 -300 560 curveto",
271 " 0 560 150 400 150 0 curveto",
272 " 150 -400 100 -900 -1000 -1620 curveto fill",
273 "",
274 " %circle at the left",
275 " newpath",
276 " -700 0 250 0 360 arc fill",
277 "",
278 " %do the two dots after the main curve",
279 " 700 -300 100 0 360 arc fill",
280 " 700 300 100 0 360 arc fill",
281 " } def",
282 "",
283 " % cclef",
284 " /C {",
285 " gsave",
286 " %do upper curved part, then scale to do mirror image",
287 " 0 1 1 {",
288 " pop %we don't need the loop variable",
289 " %outer boundary of curve",
290 " -170 0 moveto 100 300 lineto",
291 " 400 -200 750 300 750 650 curveto",
292 " 750 1100 450 1235 250 1235 curveto",
293 " 0 1235 -143 1100 -143 950 curveto",
294 "",
295 " %inner boundary of curve",
296 " 0 950 lineto",
297 " 0 1100 30 1165 250 1165 curveto",
298 " 300 1165 450 1100 450 650 curveto",
299 " 450 400 400 -100 100 400 curveto",
300 " -270 0 lineto fill",
301 " %stroke",
302 " %-270 0 moveto 100 400 lineto",
303 " %400 -100 450 400 450 650 curveto",
304 " %450 1100 300 1165 250 1165 curveto",
305 " %30 1165 0 1100 0 950 curveto",
306 " %stroke",
307 "",
308 " %elliptical ball at end of curve",
309 " gsave",
310 " 1.3 1 scale",
311 " 10 950 120 0 360 arc fill",
312 " grestore",
313 " 1 -1 scale %reflect across X axis",
314 " } for",
315 " grestore",
316 "",
317 " % two vertical lines on the left",
318 " 300 setlinewidth -600 -1200 halflwid sub moveto",
319 " -600 1200 halflwid add lineto stroke",
320 " lwid setlinewidth -300 -1200 halflwid sub moveto",
321 " -300 1200 halflwid add lineto stroke",
322 " } def",
323 "",
324 " % dblwhole",
325 " /D {",
326 " do_1n %do a whole note",
327 " lwid setlinewidth",
328 " -490 -600 moveto -490 600 lineto stroke",
329 " 490 -600 moveto 490 600 lineto stroke",
330 " } def",
331 "",
332 " % 1n",
333 " /E {",
334 " do_1n %do a whole note",
335 " } def",
336 "",
337 " % 2n",
338 " /F {",
339 " do_2n %do a half note",
340 " } def",
341 "",
342 " % 4n",
343 " /G {",
344 " do_4n %do a quarter note head",
345 " } def",
346 "",
347 " % upflag",
348 " /H {",
349 " do_upflag %do an upflag",
350 " } def",
351 "",
352 " % dnflag",
353 " /I {",
354 " gsave",
355 " 1 -1 scale %reflect across X axis",
356 " do_upflag %do an upflag",
357 " grestore",
358 " } def",
359 "",
360 " % dwhrest",
361 " /J {",
362 " 300 setlinewidth",
363 " 0 0 moveto 0 600 lineto stroke",
364 " } def",
365 "",
366 " % 1rest",
367 " /K {",
368 " lwid setlinewidth",
369 " -750 600 moveto 750 600 lineto stroke",
370 " 300 setlinewidth",
371 " -400 450 moveto 400 450 lineto stroke",
372 " } def",
373 "",
374 " % 2rest",
375 " /L {",
376 " lwid setlinewidth",
377 " -750 0 moveto 750 0 lineto stroke",
378 " 300 setlinewidth",
379 " -400 150 moveto 400 150 lineto stroke",
380 " } def",
381 "",
382 " % 4rest",
383 " /M {",
384 " newpath",
385 " cor3x cor3y halflwid add moveto",
386 " %-400 -200 -450 -650 50 -950 lwid add curveto",
387 " -450 -50 -450 -650 50 -950 lwid add curveto",
388 " -150 -650 -100 -250 cor3x cor3y halflwid sub curveto",
389 " fill",
390 "",
391 " cor1x cor1y moveto cor1x 200 sub cor1y 200 add lineto",
392 " cor2x cor2y lineto cor2x 200 add cor2y 200 sub lineto",
393 " fill",
394 "",
395 " lwid setlinewidth",
396 " topx topy moveto cor1x cor1y lineto stroke",
397 " cor2x cor2y moveto cor3x cor3y lineto stroke",
398 " } def",
399 "",
400 " % 8rest",
401 " /N {",
402 " 0 0 0 -600 do_shortrest",
403 " } def",
404 "",
405 " % 16rest",
406 " /O {",
407 " 1 1 100 -1200 do_shortrest",
408 " } def",
409 "",
410 " % 32rest",
411 " /P {",
412 " 2 1 0 -1800 do_shortrest",
413 " } def",
414 "",
415 " % 64rest",
416 " /Q {",
417 " 3 2 -80 -2100 do_shortrest",
418 " } def",
419 "",
420 " % 128rest",
421 " /R {",
422 " 4 2 -150 -2700 do_shortrest",
423 " } def",
424 "",
425 " % 256rest",
426 " /S {",
427 " 5 3 -280 -3300 do_shortrest",
428 " } def",
429 "",
430 " % dot",
431 " /T {",
432 " newpath",
433 " 0 0 120 0 360 arc fill",
434 " } def",
435 "",
436 " % nat",
437 " /U {",
438 " % fill crossbars so that we can do parallelograms",
439 " -235 -470 moveto -235 -270 lineto",
440 " 235 -130 lineto 235 -330 lineto fill",
441 " -235 130 moveto -235 330 lineto",
442 " 235 470 lineto 235 270 lineto fill",
443 "",
444 " % vertical strokes",
445 " lwid setlinewidth",
446 " -200 -380 moveto -200 850 lineto stroke",
447 " 200 -850 moveto 200 380 lineto stroke",
448 " } def",
449 "",
450 " % sharp",
451 " /V {",
452 " % fill crossbars so that we can do parallelograms",
453 " -325 -480 moveto -325 -280 lineto",
454 " 325 -120 lineto 325 -320 lineto fill",
455 " -325 120 moveto -325 320 lineto",
456 " 325 480 lineto 325 280 lineto fill",
457 "",
458 " % vertical strokes",
459 " lwid setlinewidth",
460 " -150 -930 moveto -150 880 lineto stroke",
461 " 150 -880 moveto 150 930 lineto stroke",
462 " } def",
463 "",
464 " % flat",
465 " /W {",
466 " do_flat %do a flat",
467 " } def",
468 "",
469 " % dblsharp",
470 " /X {",
471 " gsave",
472 " 0 1 3 { %loop once for each of 4 sticks",
473 " pop %we don't need the loop variable",
474 " 0 off neg moveto",
475 " outbendbig outbendsmall lineto",
476 " inbendbig inbendsmall lineto",
477 " limit limit lineto",
478 " inbendsmall inbendbig lineto",
479 " outbendsmall outbendbig lineto",
480 " off neg 0 lineto",
481 " fill",
482 " -90 rotate",
483 " } for",
484 " grestore",
485 " } def",
486 "",
487 " % dblflat",
488 " /Y {",
489 " -290 580 290 { %loop once for each flat",
490 "",
491 " gsave",
492 " 1 setlinewidth",
493 " 0 translate %translate left/right (loop var)",
494 " do_flat %do a flat",
495 " grestore",
496 "",
497 " } for",
498 " } def",
499 "",
500 " % xnote",
501 " /Z {",
502 " gsave",
503 " 1.15 1 scale 120 setlinewidth 1 setlinecap %round",
504 " -300 -300 moveto 300 300 lineto stroke",
505 " -300 300 moveto 300 -300 lineto stroke",
506 " grestore",
507 " } def",
508 "",
509 " % dwhdiamond",
510 " /a {",
511 " do_diamond %do a diamond",
512 " lwid setlinewidth",
513 " -420 -600 moveto -420 600 lineto stroke",
514 " 420 -600 moveto 420 600 lineto stroke",
515 " } def",
516 "",
517 " % diamond",
518 " /b {",
519 " do_diamond %do a diamond",
520 " } def",
521 "",
522 " % filldiamond",
523 " /c {",
524 " 420 0 moveto 0 300 lineto",
525 " -420 0 lineto 0 -300 lineto fill",
526 " } def",
527 "",
528 " % up2n",
529 " /d {",
530 " lwid setlinewidth",
531 " 380 0 moveto 380 2100 lineto stroke",
532 " do_2n %do a half note",
533 " } def",
534 "",
535 " % dn2n",
536 " /e {",
537 " lwid setlinewidth",
538 " -380 0 moveto -380 -2100 lineto stroke",
539 " do_2n %do a half note",
540 " } def",
541 "",
542 " % up4n",
543 " /f {",
544 " do_4n %do a quarter note head",
545 " lwid setlinewidth",
546 " 370 0 moveto 370 2100 lineto stroke",
547 " } def",
548 "",
549 " % dn4n",
550 " /g {",
551 " do_4n %do a quarter note head",
552 " lwid setlinewidth",
553 " -370 0 moveto -370 -2100 lineto stroke",
554 " } def",
555 "",
556 " % up8n",
557 " /h {",
558 " gsave",
559 " -330 0 translate % half a flag width",
560 " do_4n %do a quarter note head",
561 " lwid setlinewidth",
562 " 370 0 moveto 370 2100 lineto stroke",
563 " 670 2100 translate",
564 " 1 -1 scale %reflect across X axis",
565 " do_upflag %do an upflag",
566 " grestore",
567 " } def",
568 "",
569 " % dn8n",
570 " /i {",
571 " do_4n %do a quarter note head",
572 " lwid setlinewidth",
573 " -370 0 moveto -370 -2100 lineto stroke",
574 " gsave",
575 " -70 -2100 translate",
576 " do_upflag %do an upflag",
577 " grestore",
578 " } def",
579 "",
580 " % up16n",
581 " /j {",
582 " 2 do_upshortnote",
583 " } def",
584 "",
585 " % dn16n",
586 " /k {",
587 " 2 do_dnshortnote",
588 " } def",
589 "",
590 " % up32n",
591 " /l {",
592 " 3 do_upshortnote",
593 " } def",
594 "",
595 " % dn32n",
596 " /m {",
597 " 3 do_dnshortnote",
598 " } def",
599 "",
600 " % up64n",
601 " /n {",
602 " 4 do_upshortnote",
603 " } def",
604 "",
605 " % dn64n",
606 " /o {",
607 " 4 do_dnshortnote",
608 " } def",
609 "",
610 " % up128n",
611 " /p {",
612 " 5 do_upshortnote",
613 " } def",
614 "",
615 " % dn128n",
616 " /q {",
617 " 5 do_dnshortnote",
618 " } def",
619 "",
620 " % up256n",
621 " /r {",
622 " 6 do_upshortnote",
623 " } def",
624 "",
625 " % dn256n",
626 " /s {",
627 " 6 do_dnshortnote",
628 " } def",
629 "",
630 " % com",
631 " /t {",
632 " do_com %do a common time symbol",
633 " } def",
634 "",
635 " % cut",
636 " /u {",
637 " do_com %do a common time symbol",
638 " lwid setlinewidth",
639 " 0 -900 moveto 0 900 lineto stroke",
640 " } def",
641 "",
642 " % begped",
643 " /v {",
644 " lwid setlinewidth",
645 " -200 600 moveto -200 0 lineto 200 0 lineto stroke",
646 " } def",
647 "",
648 " % pedal",
649 " /w {",
650 " lwid setlinewidth",
651 " -500 0 moveto -450 0 lineto 0 600 lineto",
652 " 450 0 lineto 500 0 lineto stroke",
653 " } def",
654 "",
655 " % endped",
656 " /x {",
657 " lwid setlinewidth",
658 " 200 600 moveto 200 0 lineto -200 0 lineto stroke",
659 " } def",
660 "",
661 " % dnbow",
662 " /y {",
663 " lwid setlinewidth",
664 " -350 0 moveto -350 900 lineto stroke",
665 " 350 0 moveto 350 900 lineto stroke",
666 " 200 setlinewidth",
667 " -350 800 moveto 350 800 lineto stroke",
668 " } def",
669 "",
670 " % upbow",
671 " /z {",
672 " lwid setlinewidth",
673 " -300 900 moveto 0 0 lineto 300 900 lineto stroke",
674 " } def",
675 "",
676 " % wedge",
677 " /one {",
678 " 0 0 moveto -150 500 lineto 150 500 lineto fill",
679 " } def",
680 "",
681 " % uwedge",
682 " /two {",
683 " -150 0 moveto 150 0 lineto 0 500 lineto fill",
684 " } def",
685 "",
686 " % ferm",
687 " /three {",
688 " newpath",
689 " do_ferm %do a right side up fermata",
690 " } def",
691 "",
692 " % uferm",
693 " /four {",
694 " newpath",
695 " gsave",
696 " 0 270 lwid sub 800 add translate %baseline at bottom",
697 " 180 rotate %upside down",
698 " do_ferm %do a right side up fermata",
699 " grestore",
700 " } def",
701 "",
702 " % sign",
703 " /five {",
704 " gsave",
705 " %do upper left curved part, upper right dot;",
706 " %then rotate 180 to do other half",
707 " 0 1 1 {",
708 " pop %we don't need the loop variable",
709 " 0 100 moveto %inner boundary",
710 " -1000 300 -400 750 -200 700 curveto",
711 " -200 800 lineto %outer boundary",
712 " -550 900 -1100 100 0 -100 curveto",
713 " fill",
714 " %dot at end of curve",
715 " -200 700 100 0 360 arc fill",
716 " %dot in upper right quadrant",
717 " 500 200 70 0 360 arc fill",
718 " 180 rotate",
719 " } for",
720 " grestore",
721 "",
722 " %slash through middle",
723 " lwid setlinewidth",
724 " -400 -800 moveto 400 800 lineto stroke",
725 " } def",
726 "",
727 " % coda",
728 " /six {",
729 " newpath",
730 " gsave",
731 " 0.6 1 scale",
732 " 0 0 550 0 360 arc %outside boundary",
733 " 1 0.6 div 1 scale %back to original",
734 " 0.9 1 scale",
735 " 0 0 650 0 360 arc %inside boundary",
736 " eofill",
737 " grestore",
738 " lwid setlinewidth",
739 " 0 -850 moveto 0 850 lineto stroke",
740 " -800 0 moveto 800 0 lineto stroke",
741 " } def",
742 "",
743 " % mor",
744 " /seven {",
745 " do_mor %do a mordent",
746 " } def",
747 "",
748 " % invmor",
749 " /eight {",
750 " do_mor %do a mordent",
751 " lwid setlinewidth",
752 " 0 -450 moveto 0 450 lineto stroke",
753 " } def",
754 "",
755 " % turn",
756 " /nine {",
757 " do_turn %do a turn",
758 " } def",
759 "",
760 " % invturn",
761 " /zero {",
762 " gsave",
763 " 1 -1 scale %reflect across X axis",
764 " do_turn %do a turn",
765 " grestore",
766 " } def",
767 "",
768 " % acc_gt",
769 " /numbersign {",
770 " lwid setlinewidth",
771 " -500 300 moveto 500 0 lineto -500 -300 lineto stroke",
772 " } def",
773 "",
774 " % acc_hat",
775 " /dollar {",
776 " newpath",
777 " -365 0 moveto 0 860 lineto 365 0 lineto",
778 " 150 0 lineto -75 530 lineto -300 0 lineto fill",
779 " } def",
780 "",
781 " % acc_uhat",
782 " /quotedbl {",
783 " newpath",
784 " 365 860 moveto 0 0 lineto -365 860 lineto",
785 " -150 860 lineto 75 330 lineto 300 860 lineto fill",
786 " } def",
787 "",
788 " % tr",
789 " /asterisk {",
790 " %vertical bar of t",
791 " -350 1000 moveto -550 200 lineto",
792 " -612.5 -50 -212.5 -50 -160 200 curveto",
793 " -230 200 lineto",
794 " -300 50 -420 50 -400 200 curveto",
795 " -200 1000 lineto fill",
796 "",
797 " %crossbar of t and vertical bar of r",
798 " -700 600 moveto -160 600 lineto",
799 " 20 600 30 520 60 440 curveto",
800 " -50 0 lineto 70 0 lineto 180 440 lineto",
801 " 190 480 100 670 -150 670 curveto",
802 " -690 670 lineto fill",
803 "",
804 " %horizontal curve of r",
805 " 100 480 moveto",
806 " 300 630 450 700 650 550 curveto",
807 " 560 480 lineto",
808 " 450 630 300 560 100 390 curveto",
809 " fill",
810 "",
811 " %knob at end of r",
812 " 600 460 100 0 360 arc fill",
813 " } def",
814 "",
815 " % leg",
816 " /comma {",
817 " 100 setlinewidth",
818 " -400 0 moveto 400 0 lineto stroke",
819 " } def",
820 "",
821 " % rr",
822 " /hyphen {",
823 " 100 setlinewidth",
824 " -400 0 moveto 0 1000 lineto stroke",
825 " 0 0 moveto 400 1000 lineto stroke",
826 " } def",
827 "",
828 " % measrpt",
829 " /period {",
830 " newpath -450 400 150 0 360 arc fill",
831 " newpath 450 -400 150 0 360 arc fill",
832 " 200 setlinewidth",
833 " -550 -600 moveto 550 600 lineto stroke",
834 " } def",
835 "",
836 " % copyright",
837 " /slash {",
838 " lwid setlinewidth",
839 " newpath 0 400 400 0 360 arc stroke",
840 " newpath 0 400 200 45 315 arc stroke",
841 " } def",
842 "",
843 " % dim",
844 " /quoteleft {",
845 " 50 setlinewidth",
846 " newpath 0 640 220 0 360 arc stroke",
847 " } def",
848 "",
849 " % halfdim",
850 " /quoteright {",
851 " 50 setlinewidth",
852 " newpath 0 640 220 0 360 arc stroke",
853 " newpath -340 300 moveto 340 980 lineto stroke",
854 " } def",
855 "",
856 " % triangle",
857 " /asciicircum {",
858 " 50 setlinewidth",
859 " newpath -340 -10 moveto 0 710 lineto",
860 " 340 -10 lineto closepath stroke",
861 " } def",
862 "",
863 " % qwhrest",
864 " /ampersand {",
865 " 300 setlinewidth",
866 " 0 -600 moveto 0 600 lineto stroke",
867 " } def",
868 "",
869 " % ll1rest",
870 " /exclam {",
871 " 310 setlinewidth",
872 " -400 455 moveto 400 450 lineto stroke",
873 " } def",
874 "",
875 " % ll2rest",
876 " /at {",
877 " 310 setlinewidth",
878 " -400 145 moveto 400 150 lineto stroke",
879 " } def",
880 " end",
881 "",
882 " /BuildChar {",
883 "",
884 " exch begin",
885 " Encoding exch get",
886 "",
887 " dup",
888 " Mcbbox0 exch get",
889 " aload pop setcachedevice",
890 "",
891 " CharStrings exch get",
892 " exec",
893 " end",
894 " } def",
895 "end",
896 "",
897 "",
898 "% Define another music character font, since there are too many to fit in one",
899 "% font. It works the same way as the first one.",
900 "",
901 "/mfont1 100 dict def",
902 "mfont1 begin",
903 " /FontType 3 def",
904 " /FontMatrix [ .001 0 0 0.001 0 0 ] def",
905 " /FontBBox [ -2000 -4030 2000 4030 ] def",
906 " /FontName (Mfont1) def",
907 "",
908 " % set up Encoding vector with standard names",
909 " /Encoding 256 array def",
910 " StandardEncoding Encoding copy",
911 " pop",
912 "",
913 " %%%%% define routines that will be used by multiple characters %%%%%",
914 "",
915 " /do_dwh_bars {",
916 " % the two bars surrounding a double whole note",
917 " lwid setlinewidth",
918 " -420 -600 moveto -420 600 lineto stroke",
919 " 420 -600 moveto 420 600 lineto stroke",
920 " } def",
921 " /do_righttriangle {",
922 " newpath",
923 " 420 270 moveto -420 270 lineto 350 -300 lineto 420 -300 lineto",
924 " 350 150 moveto -140 150 lineto 350 -213 lineto",
925 " eofill",
926 " } def",
927 " /do_fillrighttriangle {",
928 " newpath",
929 " 420 270 moveto -420 270 lineto 350 -300 lineto 420 -300 lineto",
930 " fill",
931 " } def",
932 " /do_rectangle {",
933 " newpath",
934 " 420 270 moveto -420 270 lineto -420 -270 lineto 420 -270 lineto",
935 " 350 150 moveto -350 150 lineto -350 -150 lineto 350 -150 lineto",
936 " eofill",
937 " } def",
938 " /do_isostriangle {",
939 " newpath",
940 " 0 300 moveto -420 -270 lineto 420 -270 lineto",
941 " 0 182 moveto -245 -150 lineto 245 -150 lineto",
942 " eofill",
943 " } def",
944 " /do_piewedge {",
945 " newpath",
946 " 0 -300 moveto 0 -244 514 35 145 arc",
947 " 0 -209 moveto 0 -244 394 43 137 arc",
948 " eofill",
949 " } def",
950 " /do_semicircle {",
951 " newpath",
952 " gsave",
953 " 1 1.357 scale 420 199 moveto 0 199 420 180 360 arc",
954 " 1 1.09 scale 350 111 moveto 0 199 350 194.1 345.9 arc",
955 " eofill",
956 " grestore",
957 " } def",
958 " /do_slashhead {",
959 " newpath",
960 " lwid setlinewidth",
961 " -620 -530 moveto -480 -670 lineto 620 530 lineto 480 670 lineto",
962 " closepath stroke",
963 " } def",
964 "",
965 " % subsidiary dictionary of character definitions",
966 " /CharStrings 128 dict def",
967 " CharStrings begin",
968 "",
969 " /.notdef {} def",
970 "",
971 " % Here are the definitions of the characters. A stepsize here",
972 " % is 300 units (assuming the character is drawn at its default",
973 " % size).",
974 "",
975 " % dwhrighttriangle",
976 " /A {",
977 " do_righttriangle",
978 " do_dwh_bars",
979 " } def",
980 "",
981 " % righttriangle",
982 " /B {",
983 " do_righttriangle",
984 " } def",
985 "",
986 " % fillrighttriangle",
987 " /C {",
988 " newpath",
989 " 420 270 moveto -420 270 lineto 350 -300 lineto",
990 " 420 -300 lineto",
991 " fill",
992 " } def",
993 "",
994 " % udwhrighttriangle",
995 " /D {",
996 " gsave",
997 " 180 rotate",
998 " do_righttriangle",
999 " do_dwh_bars",
1000 " grestore",
1001 " } def",
1002 "",
1003 " % urighttriangle",
1004 " /E {",
1005 " gsave",
1006 " 180 rotate",
1007 " do_righttriangle",
1008 " grestore",
1009 " } def",
1010 "",
1011 " % ufillrighttriangle",
1012 " /F {",
1013 " gsave",
1014 " 180 rotate",
1015 " do_fillrighttriangle",
1016 " grestore",
1017 " } def",
1018 "",
1019 " % dwhrectangle",
1020 " /G {",
1021 " do_rectangle",
1022 " do_dwh_bars",
1023 " } def",
1024 "",
1025 " % rectangle",
1026 " /H {",
1027 " do_rectangle",
1028 " } def",
1029 "",
1030 " % fillrectangle",
1031 " /I {",
1032 " newpath",
1033 " 420 270 moveto -420 270 lineto -420 -270 lineto",
1034 " 420 -270 lineto",
1035 " fill",
1036 " } def",
1037 "",
1038 " % dwhisostriangle",
1039 " /J {",
1040 " do_isostriangle",
1041 " do_dwh_bars",
1042 " } def",
1043 "",
1044 " % isostriangle",
1045 " /K {",
1046 " do_isostriangle",
1047 " } def",
1048 "",
1049 " % fillisostriangle",
1050 " /L {",
1051 " newpath",
1052 " 0 300 moveto -420 -270 lineto 420 -270 lineto",
1053 " fill",
1054 " } def",
1055 "",
1056 " % dwhpiewedge",
1057 " /M {",
1058 " do_piewedge",
1059 " do_dwh_bars",
1060 " } def",
1061 "",
1062 " % piewedge",
1063 " /N {",
1064 " do_piewedge",
1065 " } def",
1066 "",
1067 " % fillpiewedge",
1068 " /O {",
1069 " newpath",
1070 " 0 -300 moveto 0 -244 514 35 145 arc",
1071 " fill",
1072 " } def",
1073 "",
1074 " % dwhsemicircle",
1075 " /P {",
1076 " do_semicircle",
1077 " do_dwh_bars",
1078 " } def",
1079 "",
1080 " % semicircle",
1081 " /Q {",
1082 " do_semicircle",
1083 " } def",
1084 "",
1085 " % fillsemicircle",
1086 " /R {",
1087 " newpath",
1088 " gsave",
1089 " 1 570 420 div scale",
1090 " 420 199 moveto 0 199 420 180 360 arc",
1091 " fill",
1092 " grestore",
1093 " } def",
1094 "",
1095 " % dwhslashhead",
1096 " /S {",
1097 " do_slashhead",
1098 " lwid setlinewidth",
1099 " -650 -600 moveto -650 600 lineto stroke",
1100 " 650 -600 moveto 650 600 lineto stroke",
1101 " } def",
1102 "",
1103 " % slashhead",
1104 " /T {",
1105 " do_slashhead",
1106 " } def",
1107 "",
1108 " % fillslashhead",
1109 " /U {",
1110 " newpath",
1111 " 200 setlinewidth",
1112 " -550 -600 moveto 550 600 lineto stroke",
1113 " } def",
1114 "",
1115 " % blankhead",
1116 " /V {",
1117 " %print nothing",
1118 " } def",
1119 " end",
1120 "",
1121 " /BuildChar {",
1122 "",
1123 " exch begin",
1124 " Encoding exch get",
1125 "",
1126 " dup",
1127 " Mcbbox1 exch get",
1128 " aload pop setcachedevice",
1129 "",
1130 " CharStrings exch get",
1131 " exec",
1132 " end",
1133 " } def",
1134 "end",
1135 "",
1136 "",
1137 "% General routines for printing any music character, invoked by each music",
1138 "% character's specific routine below. The scaling factor (default 1) needs",
1139 "% to be multiplied by 10 to get the actual size. These routines restore the",
1140 "% preexisting current font when they are done.",
1141 "",
1142 "/printmchar0 {",
1143 " gsave",
1144 " /musicchar exch def",
1145 " /Mfont0 findfont exch 10 mul scalefont setfont moveto ",
1146 " musicchar show",
1147 " grestore",
1148 "} def",
1149 "/printmchar1 {",
1150 " gsave",
1151 " /musicchar exch def",
1152 " /Mfont1 findfont exch 10 mul scalefont setfont moveto ",
1153 " musicchar show",
1154 " grestore",
1155 "} def",
1156 "",
1157 "% Define each music character name to be a routine that prints the character.",
1158 "% Each character is to be invoked as in this example:",
1159 "% 100 200 1 gclef % at (100, 200), scale to default size & print",
1160 "",
1161 "/gclef { (A) printmchar0 } def",
1162 "/fclef { (B) printmchar0 } def",
1163 "/cclef { (C) printmchar0 } def",
1164 "/dblwhole { (D) printmchar0 } def",
1165 "/1n { (E) printmchar0 } def",
1166 "/2n { (F) printmchar0 } def",
1167 "/4n { (G) printmchar0 } def",
1168 "/upflag { (H) printmchar0 } def",
1169 "/dnflag { (I) printmchar0 } def",
1170 "/dwhrest { (J) printmchar0 } def",
1171 "/1rest { (K) printmchar0 } def",
1172 "/2rest { (L) printmchar0 } def",
1173 "/4rest { (M) printmchar0 } def",
1174 "/8rest { (N) printmchar0 } def",
1175 "/16rest { (O) printmchar0 } def",
1176 "/32rest { (P) printmchar0 } def",
1177 "/64rest { (Q) printmchar0 } def",
1178 "/128rest { (R) printmchar0 } def",
1179 "/256rest { (S) printmchar0 } def",
1180 "/dot { (T) printmchar0 } def",
1181 "/nat { (U) printmchar0 } def",
1182 "/sharp { (V) printmchar0 } def",
1183 "/flat { (W) printmchar0 } def",
1184 "/dblsharp { (X) printmchar0 } def",
1185 "/dblflat { (Y) printmchar0 } def",
1186 "/xnote { (Z) printmchar0 } def",
1187 "/dwhdiamond { (a) printmchar0 } def",
1188 "/diamond { (b) printmchar0 } def",
1189 "/filldiamond { (c) printmchar0 } def",
1190 "/up2n { (d) printmchar0 } def",
1191 "/dn2n { (e) printmchar0 } def",
1192 "/up4n { (f) printmchar0 } def",
1193 "/dn4n { (g) printmchar0 } def",
1194 "/up8n { (h) printmchar0 } def",
1195 "/dn8n { (i) printmchar0 } def",
1196 "/up16n { (j) printmchar0 } def",
1197 "/dn16n { (k) printmchar0 } def",
1198 "/up32n { (l) printmchar0 } def",
1199 "/dn32n { (m) printmchar0 } def",
1200 "/up64n { (n) printmchar0 } def",
1201 "/dn64n { (o) printmchar0 } def",
1202 "/up128n { (p) printmchar0 } def",
1203 "/dn128n { (q) printmchar0 } def",
1204 "/up256n { (r) printmchar0 } def",
1205 "/dn256n { (s) printmchar0 } def",
1206 "/com { (t) printmchar0 } def",
1207 "/cut { (u) printmchar0 } def",
1208 "/begped { (v) printmchar0 } def",
1209 "/pedal { (w) printmchar0 } def",
1210 "/endped { (x) printmchar0 } def",
1211 "/dnbow { (y) printmchar0 } def",
1212 "/upbow { (z) printmchar0 } def",
1213 "/wedge { (1) printmchar0 } def",
1214 "/uwedge { (2) printmchar0 } def",
1215 "/ferm { (3) printmchar0 } def",
1216 "/uferm { (4) printmchar0 } def",
1217 "/sign { (5) printmchar0 } def",
1218 "/coda { (6) printmchar0 } def",
1219 "/mor { (7) printmchar0 } def",
1220 "/invmor { (8) printmchar0 } def",
1221 "/turn { (9) printmchar0 } def",
1222 "/invturn { (0) printmchar0 } def",
1223 "/acc_gt { (#) printmchar0 } def",
1224 "/acc_hat { ($) printmchar0 } def",
1225 "/acc_uhat { (\") printmchar0 } def",
1226 "/tr { (*) printmchar0 } def",
1227 "/leg { (,) printmchar0 } def",
1228 "/rr { (-) printmchar0 } def",
1229 "/measrpt { (.) printmchar0 } def",
1230 "/copyright { (/) printmchar0 } def",
1231 "/dim { (`) printmchar0 } def",
1232 "/halfdim { (') printmchar0 } def",
1233 "/triangle { (^) printmchar0 } def",
1234 "/qwhrest { (&) printmchar0 } def",
1235 "/ll1rest { (!) printmchar0 } def",
1236 "/ll2rest { (@) printmchar0 } def",
1237 "/dwhrighttriangle { (A) printmchar1 } def",
1238 "/righttriangle { (B) printmchar1 } def",
1239 "/fillrighttriangle { (C) printmchar1 } def",
1240 "/udwhrighttriangle { (D) printmchar1 } def",
1241 "/urighttriangle { (E) printmchar1 } def",
1242 "/ufillrighttriangle { (F) printmchar1 } def",
1243 "/dwhrectangle { (G) printmchar1 } def",
1244 "/rectangle { (H) printmchar1 } def",
1245 "/fillrectangle { (I) printmchar1 } def",
1246 "/dwhisostriangle { (J) printmchar1 } def",
1247 "/isostriangle { (K) printmchar1 } def",
1248 "/fillisostriangle { (L) printmchar1 } def",
1249 "/dwhpiewedge { (M) printmchar1 } def",
1250 "/piewedge { (N) printmchar1 } def",
1251 "/fillpiewedge { (O) printmchar1 } def",
1252 "/dwhsemicircle { (P) printmchar1 } def",
1253 "/semicircle { (Q) printmchar1 } def",
1254 "/fillsemicircle { (R) printmchar1 } def",
1255 "/dwhslashhead { (S) printmchar1 } def",
1256 "/slashhead { (T) printmchar1 } def",
1257 "/fillslashhead { (U) printmchar1 } def",
1258 "/blankhead { (V) printmchar1 } def",
1259 "",
1260 "",
1261 "% Define routines for Mup output other than music characters.",
1262 "",
1263 "/stepsize 3 def % define a step size as 3 points (at default magnification)",
1264 "",
1265 "% x1 y1 x2 lines dist staffscale staff",
1266 "% draw a staff starting at x1, y1 and extending to x2 with \"lines\"",
1267 "% lines, 2*dist*stepsize apart, scaled by staffscale",
1268 "/staff {",
1269 " /staffscale exch def",
1270 " /dist exch def",
1271 " /lines exch def",
1272 " /x2 exch def",
1273 " /y1 exch def",
1274 " /x1 exch def",
1275 " 0.7 staffscale mul sb setlinewidth",
1276 " 1 lines sub 2 lines 1 sub { % loop from bottom line to top line",
1277 " dup stepsize mul staffscale mul dist mul y1 add x1 exch moveto",
1278 " stepsize mul staffscale mul dist mul y1 add x2 exch lineto stroke",
1279 " } for",
1280 "} def",
1281 "",
1282 "% x y1 y2 bracket draw a bracket; y1 is the top",
1283 "/bracket {",
1284 " /y2 exch def",
1285 " /y1 exch def",
1286 " /x exch def",
1287 " gsave",
1288 " 3 setlinewidth",
1289 " x 2 sub y1 1 add moveto",
1290 " x 2 sub y2 1 sub lineto",
1291 " stroke",
1292 " x 2 sub y1 1 add moveto",
1293 " x 1 sub y1 1 add x 3 add y1 1 add x 5 add y1 6 add curveto",
1294 " x 6 add y1 5 add lineto",
1295 " x 5 add y1 2 add x 1 add y1 2 sub x 2 sub y1 2 sub curveto",
1296 " fill",
1297 " x 2 sub y2 1 sub moveto",
1298 " x 1 sub y2 1 sub x 3 add y2 1 sub x 5 add y2 6 sub curveto",
1299 " x 6 add y2 5 sub lineto",
1300 " x 5 add y2 2 sub x 1 add y2 2 add x 2 sub y2 2 add curveto",
1301 " fill",
1302 " grestore",
1303 "} def",
1304 "",
1305 "% x y1 y2 brace draw a brace; y1 is the top",
1306 "/brace {",
1307 " /y2 exch def",
1308 " /y1 exch def",
1309 " /x exch def",
1310 " gsave",
1311 " x 9 sub y1 y2 add 2 div translate",
1312 " /topy y1 y2 sub 2 div 1 sub def",
1313 " 0 1 1 {",
1314 " pop",
1315 " %0 topy moveto 0 0 lineto stroke",
1316 " 0 0 moveto",
1317 " 16 topy 0.2 mul -11 topy 0.6 mul 8 topy curveto",
1318 " 8.7 topy lineto",
1319 " -7 topy 0.7 mul 20 topy 0.3 mul 1 0 curveto",
1320 " fill",
1321 " 1 -1 scale % flip to do bottom half",
1322 " } for",
1323 " grestore",
1324 "} def",
1325 "",
1326 "% endx endy wavy staffscale draw a wavy line from current point to here,",
1327 "% scaled by staffscale",
1328 "/wavy {",
1329 " /staffscale exch def",
1330 " /endy exch def % define the end point of the line",
1331 " /endx exch def",
1332 " currentpoint % line starts at current point",
1333 " /begy exch def % define the beginning point of the line",
1334 " /begx exch def",
1335 " gsave",
1336 " /dx endx begx sub def % find delta x and delta y",
1337 " /dy endy begy sub def",
1338 " /r dx dx mul dy dy mul add sqrt def % hypotenuse",
1339 " /theta dy dx atan def % angle with positive x axis",
1340 " begx begy translate % change axes so that we can draw the line",
1341 " theta rotate % from (0, 0) to (r, 0)",
1342 " staffscale staffscale scale % scale everything by staffscale",
1343 " /scaledr r staffscale div def % but scale r in reverse to keep length",
1344 "",
1345 " % Each outer loop draws one cycle of the squiggle. It continues until",
1346 " % we are at or beyond the desired end point.",
1347 " 0 0 moveto",
1348 " 0 6 scaledr {",
1349 " gsave",
1350 " % first loop draws left half of squiggle; second draws right",
1351 " 0 1 1 {",
1352 " 0.0 0.4 moveto",
1353 " 2.0 1.9 3.4 2.3 3.9 0.0 curveto",
1354 " 2.1 0.0 lineto",
1355 " 1.9 0.8 1.4 0.7 0.0 -0.4 curveto",
1356 " fill",
1357 " pop 180 rotate -6 0 translate",
1358 " } for",
1359 " grestore",
1360 "",
1361 " pop 6 0 translate % shift axes right one squiggle",
1362 " } for",
1363 "",
1364 " grestore",
1365 "} def",
1366 "",
1367 "% x y space frets fretno numvert curvel curver [ f1 f2 f3 ... ] grid",
1368 "% print a guitar grid diagram",
1369 "/grid {",
1370 " /grid_positions exch def % 0=\"o\", -1=\"x\", -2=nothing, positive=dot",
1371 " /curver exch def % right string for curve, 0 if none",
1372 " /curvel exch def % left string for curve, 0 if none",
1373 " /numvert exch def % vertical position to print fretno, 0 if none",
1374 " /fretno exch def % fret no. to print at right, 0 if none",
1375 " /frets exch def % number of fret lines",
1376 " /space exch def % points between two neighboring lines",
1377 " /y exch def % y coord of top fret line",
1378 " /x exch def % x coord of left strings",
1379 "",
1380 " gsave",
1381 " /strings grid_positions length def % number of strings",
1382 " /lmarky 0.4 space mul y add def % lowest Y of a \"o\" or \"x\"",
1383 " space 10 div setlinewidth",
1384 " 2 setlinecap",
1385 "",
1386 " % draw the lines of the grid",
1387 " 0 1 strings 1 sub { % loop from left string to right string",
1388 " dup space mul x add y moveto",
1389 " space mul x add frets 1 sub space mul y exch sub lineto stroke",
1390 " } for",
1391 " 0 -1 1 frets sub { % loop from top fret (nut) to bottom fret",
1392 " dup space mul y add x exch moveto",
1393 " space mul y add strings 1 sub space mul x add exch lineto stroke",
1394 " } for",
1395 "",
1396 " % draw the curved line if there is one",
1397 " curvel 0 gt {",
1398 " % within strings curvel to curver, find smallest positive fret",
1399 " /minfret 1000 def",
1400 " curvel 1 curver {",
1401 " /strno exch def",
1402 " /grid_p grid_positions strno 1 sub get def",
1403 " grid_p 0 gt grid_p minfret lt and {",
1404 " /minfret grid_p def",
1405 " } if",
1406 " } for",
1407 "",
1408 " % if curve goes above top fret, other marks must be higher",
1409 " minfret 1 eq {",
1410 " /hmarky 1.2 space mul y add def",
1411 " } {",
1412 " /hmarky lmarky def",
1413 " } ifelse",
1414 "",
1415 " /strdiff curver curvel sub def",
1416 " space 8 div setlinewidth",
1417 "",
1418 " % set endpoint coords of curve; higher if curve is short",
1419 " /curvex1 curvel 1 sub space mul x add def",
1420 " /curvex2 curver 1 sub space mul x add def",
1421 " /curvey 1 minfret sub space mul y add def",
1422 " strdiff 3 lt {",
1423 " /curvey 0.2 strdiff div space mul curvey add def",
1424 " } if",
1425 "",
1426 " % move to left end, set other points, draw curve",
1427 " curvex1 curvey moveto",
1428 "",
1429 " curvex1 curvex2 curvex1 sub 3 div add",
1430 " curvey space 0.4 strdiff sqrt mul mul add",
1431 "",
1432 " curvex2 curvex2 curvex1 sub 3 div sub",
1433 " curvey space 0.4 strdiff sqrt mul mul add",
1434 "",
1435 " curvex2 curvey curveto stroke",
1436 " } if",
1437 "",
1438 " space 10 div setlinewidth",
1439 "",
1440 " % draw dots and x and o marks",
1441 " 0 1 strings 1 sub { % loop from left string to right string",
1442 " /strno exch def % first string is 0",
1443 " /grid_p grid_positions strno get def",
1444 " /strx strno space mul x add def",
1445 "",
1446 " % set Y of mark higher if curved line covers this string",
1447 " strno 1 add curvel ge strno 1 add curver le and {",
1448 " /marky hmarky def",
1449 " } {",
1450 " /marky lmarky def",
1451 " } ifelse",
1452 "",
1453 " grid_p -1 eq { % draw an X above the string",
1454 " /xhwid space 3 div def",
1455 " strx xhwid sub marky xhwid sub moveto",
1456 " strx xhwid add marky xhwid add lineto stroke",
1457 " strx xhwid sub marky xhwid add moveto",
1458 " strx xhwid add marky xhwid sub lineto stroke",
1459 " } if",
1460 " grid_p 0 eq { % draw a circle above the string",
1461 " strx marky space 0.3 mul 0 360 arc stroke",
1462 " } if",
1463 " grid_p 1 ge { % draw a dot by the proper fret",
1464 " strx y grid_p space mul sub space 3 div add",
1465 " space 3 div 0 360 arc fill",
1466 " } if",
1467 " } for",
1468 "",
1469 " % print \"X fr\" if requested",
1470 " fretno 0 gt {",
1471 " /Palatino-Roman findfont space 1.9 mul scalefont setfont",
1472 " x strings 0.5 sub space mul add",
1473 " y space numvert 0.3 add mul sub moveto",
1474 " fretno 2 string cvs show ( fr) show",
1475 " } if",
1476 " grestore",
1477 "} def",
1478 "",
1479 "% x1 y1 x2 y2 whitebox draw a white rectangle with opposite",
1480 "% corners of (x1,y1) and (x2,y2)",
1481 "/whitebox {",
1482 " /y2 exch def",
1483 " /x2 exch def",
1484 " /y1 exch def",
1485 " /x1 exch def",
1486 " 1.0 setgray",
1487 " newpath",
1488 " x1 y1 moveto",
1489 " x1 y2 lineto",
1490 " x2 y2 lineto",
1491 " x2 y1 lineto",
1492 " closepath",
1493 " fill",
1494 " stroke",
1495 " 0.0 setgray",
1496 "} def",
1497 "",
1498 "",
1499 "/LineNum 0 def",
1500 "/InputFile (unknown) def",
1501 "",
1502 "% n linenum",
1503 "/linenum {",
1504 " /LineNum exch def",
1505 "} def",
1506 "",
1507 "% (inputfilename) inputfile",
1508 "/inputfile {",
1509 " /InputFile exch def",
1510 "} def",
1511 "",
1512 "% find size of Encoding and make a dictionary",
1513 "% that size for bounding box information",
1514 "mfont0 begin",
1515 "/dictsize Encoding length def",
1516 "mfont0 /Mcbbox0 dictsize dict put",
1517 "",
1518 "% temporarily redefine printmchar0 to get code",
1519 "5 dict begin",
1520 "/printmchar0 { {} forall } def",
1521 "",
1522 "Mcbbox0 Encoding 128rest get [ 1140.0 0 -515.0 -1515.0 615.0 1685.0 ] put",
1523 "Mcbbox0 Encoding 16rest get [ 830.0 0 -415.0 -1215.0 405.0 485.0 ] put",
1524 "Mcbbox0 Encoding 1n get [ 1080.0 0 -535.0 -335.0 535.0 345.0 ] put",
1525 "Mcbbox0 Encoding 1rest get [ 1540.0 0 -765.0 -5.0 765.0 645.0 ] put",
1526 "Mcbbox0 Encoding 256rest get [ 1250.0 0 -625.0 -2115.0 615.0 1685.0 ] put",
1527 "Mcbbox0 Encoding 2n get [ 880.0 0 -435.0 -345.0 435.0 355.0 ] put",
1528 "Mcbbox0 Encoding 2rest get [ 1540.0 0 -765.0 -45.0 765.0 315.0 ] put",
1529 "Mcbbox0 Encoding 32rest get [ 940.0 0 -415.0 -1215.0 515.0 1085.0 ] put",
1530 "Mcbbox0 Encoding 4n get [ 840.0 0 -415.0 -335.0 415.0 345.0 ] put",
1531 "Mcbbox0 Encoding 4rest get [ 650.0 0 -345.0 -885.0 295.0 985.0 ] put",
1532 "Mcbbox0 Encoding 64rest get [ 1040.0 0 -515.0 -1515.0 515.0 1085.0 ] put",
1533 "Mcbbox0 Encoding 8rest get [ 750.0 0 -305.0 -615.0 435.0 485.0 ] put",
1534 "Mcbbox0 Encoding acc_gt get [ 1170.0 0 -525.0 -335.0 635.0 345.0 ] put",
1535 "Mcbbox0 Encoding acc_hat get [ 780.0 0 -385.0 -5.0 385.0 875.0 ] put",
1536 "Mcbbox0 Encoding acc_uhat get [ 780.0 0 -385.0 -5.0 385.0 875.0 ] put",
1537 "Mcbbox0 Encoding begped get [ 470.0 0 -245.0 -45.0 215.0 615.0 ] put",
1538 "Mcbbox0 Encoding cclef get [ 1540.0 0 -765.0 -1245.0 765.0 1255.0 ] put",
1539 "Mcbbox0 Encoding coda get [ 1640.0 0 -815.0 -855.0 815.0 865.0 ] put",
1540 "Mcbbox0 Encoding com get [ 1100.0 0 -575.0 -635.0 515.0 655.0 ] put",
1541 "Mcbbox0 Encoding copyright get [ 920.0 0 -455.0 -45.0 455.0 855.0 ] put",
1542 "Mcbbox0 Encoding cut get [ 1100.0 0 -575.0 -905.0 515.0 915.0 ] put",
1543 "Mcbbox0 Encoding dblflat get [ 1170.0 0 -595.0 -405.0 565.0 1115.0 ] put",
1544 "Mcbbox0 Encoding dblsharp get [ 720.0 0 -355.0 -345.0 355.0 355.0 ] put",
1545 "Mcbbox0 Encoding dblwhole get [ 1090.0 0 -535.0 -605.0 545.0 615.0 ] put",
1546 "Mcbbox0 Encoding diamond get [ 880.0 0 -435.0 -305.0 435.0 315.0 ] put",
1547 "Mcbbox0 Encoding dim get [ 540.0 0 -265.0 -5.0 265.0 905.0 ] put",
1548 "Mcbbox0 Encoding dn128n get [ 840.0 0 -415.0 -3545.0 415.0 345.0 ] put",
1549 "Mcbbox0 Encoding dn16n get [ 840.0 0 -415.0 -2105.0 415.0 345.0 ] put",
1550 "Mcbbox0 Encoding dn256n get [ 840.0 0 -415.0 -3965.0 415.0 345.0 ] put",
1551 "Mcbbox0 Encoding dn2n get [ 880.0 0 -435.0 -2105.0 435.0 355.0 ] put",
1552 "Mcbbox0 Encoding dn32n get [ 840.0 0 -415.0 -2585.0 415.0 345.0 ] put",
1553 "Mcbbox0 Encoding dn4n get [ 840.0 0 -415.0 -2105.0 415.0 345.0 ] put",
1554 "Mcbbox0 Encoding dn64n get [ 840.0 0 -415.0 -3065.0 415.0 345.0 ] put",
1555 "Mcbbox0 Encoding dn8n get [ 840.0 0 -415.0 -2105.0 415.0 345.0 ] put",
1556 "Mcbbox0 Encoding dnbow get [ 810.0 0 -395.0 -5.0 405.0 915.0 ] put",
1557 "Mcbbox0 Encoding dnflag get [ 640.0 0 -335.0 -1705.0 295.0 15.0 ] put",
1558 "Mcbbox0 Encoding dot get [ 280.0 0 -135.0 -125.0 135.0 135.0 ] put",
1559 "Mcbbox0 Encoding dwhdiamond get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
1560 "Mcbbox0 Encoding dwhrest get [ 340.0 0 -165.0 -5.0 165.0 615.0 ] put",
1561 "Mcbbox0 Encoding endped get [ 480.0 0 -215.0 -45.0 255.0 615.0 ] put",
1562 "Mcbbox0 Encoding fclef get [ 1840.0 0 -1015.0 -1705.0 815.0 655.0 ] put",
1563 "Mcbbox0 Encoding ferm get [ 1640.0 0 -815.0 -5.0 815.0 1015.0 ] put",
1564 "Mcbbox0 Encoding filldiamond get [ 880.0 0 -435.0 -305.0 435.0 315.0 ] put",
1565 "Mcbbox0 Encoding flat get [ 580.0 0 -295.0 -405.0 275.0 1115.0 ] put",
1566 "Mcbbox0 Encoding gclef get [ 1790.0 0 -915.0 -1605.0 865.0 3015.0 ] put",
1567 "Mcbbox0 Encoding halfdim get [ 760.0 0 -375.0 -5.0 375.0 1015.0 ] put",
1568 "Mcbbox0 Encoding invmor get [ 1320.0 0 -655.0 -455.0 655.0 465.0 ] put",
1569 "Mcbbox0 Encoding invturn get [ 1300.0 0 -645.0 -335.0 645.0 345.0 ] put",
1570 "Mcbbox0 Encoding leg get [ 840.0 0 -415.0 -55.0 415.0 65.0 ] put",
1571 "Mcbbox0 Encoding ll1rest get [ 840.0 0 -415.0 -5.0 415.0 625.0 ] put",
1572 "Mcbbox0 Encoding ll2rest get [ 840.0 0 -415.0 -15.0 415.0 315.0 ] put",
1573 "Mcbbox0 Encoding measrpt get [ 1300.0 0 -645.0 -675.0 645.0 685.0 ] put",
1574 "Mcbbox0 Encoding mor get [ 1320.0 0 -655.0 -285.0 655.0 295.0 ] put",
1575 "Mcbbox0 Encoding nat get [ 520.0 0 -255.0 -855.0 255.0 865.0 ] put",
1576 "Mcbbox0 Encoding pedal get [ 1040.0 0 -515.0 -45.0 515.0 675.0 ] put",
1577 "Mcbbox0 Encoding qwhrest get [ 340.0 0 -165.0 -605.0 165.0 615.0 ] put",
1578 "Mcbbox0 Encoding rr get [ 940.0 0 -465.0 -25.0 465.0 1035.0 ] put",
1579 "Mcbbox0 Encoding sharp get [ 700.0 0 -345.0 -935.0 345.0 945.0 ] put",
1580 "Mcbbox0 Encoding sign get [ 1340.0 0 -665.0 -825.0 665.0 835.0 ] put",
1581 "Mcbbox0 Encoding tr get [ 1440.0 0 -715.0 -5.0 715.0 1015.0 ] put",
1582 "Mcbbox0 Encoding triangle get [ 800.0 0 -395.0 -45.0 395.0 785.0 ] put",
1583 "Mcbbox0 Encoding turn get [ 1300.0 0 -645.0 -325.0 645.0 345.0 ] put",
1584 "Mcbbox0 Encoding uferm get [ 1640.0 0 -815.0 -5.0 815.0 1015.0 ] put",
1585 "Mcbbox0 Encoding up128n get [ 1390.0 0 -745.0 -335.0 635.0 3555.0 ] put",
1586 "Mcbbox0 Encoding up16n get [ 1390.0 0 -745.0 -335.0 635.0 2115.0 ] put",
1587 "Mcbbox0 Encoding up256n get [ 1390.0 0 -745.0 -335.0 635.0 3975.0 ] put",
1588 "Mcbbox0 Encoding up2n get [ 880.0 0 -435.0 -345.0 435.0 2115.0 ] put",
1589 "Mcbbox0 Encoding up32n get [ 1390.0 0 -745.0 -335.0 635.0 2595.0 ] put",
1590 "Mcbbox0 Encoding up4n get [ 850.0 0 -415.0 -335.0 425.0 2115.0 ] put",
1591 "Mcbbox0 Encoding up64n get [ 1390.0 0 -745.0 -335.0 635.0 3075.0 ] put",
1592 "Mcbbox0 Encoding up8n get [ 1390.0 0 -745.0 -335.0 635.0 2115.0 ] put",
1593 "Mcbbox0 Encoding upbow get [ 720.0 0 -355.0 -115.0 355.0 925.0 ] put",
1594 "Mcbbox0 Encoding upflag get [ 640.0 0 -335.0 -5.0 295.0 1715.0 ] put",
1595 "Mcbbox0 Encoding uwedge get [ 340.0 0 -165.0 -5.0 165.0 505.0 ] put",
1596 "Mcbbox0 Encoding wedge get [ 340.0 0 -165.0 5.0 165.0 515.0 ] put",
1597 "Mcbbox0 Encoding xnote get [ 880.0 0 -435.0 -365.0 435.0 375.0 ] put",
1598 "",
1599 "end",
1600 "end",
1601 "",
1602 "/Mfont0 mfont0 definefont",
1603 "",
1604 "",
1605 "% find size of Encoding and make a dictionary",
1606 "% that size for bounding box information",
1607 "mfont1 begin",
1608 "/dictsize Encoding length def",
1609 "mfont1 /Mcbbox1 dictsize dict put",
1610 "",
1611 "% temporarily redefine printmchar1 to get code",
1612 "5 dict begin",
1613 "/printmchar1 { {} forall } def",
1614 "",
1615 "Mcbbox1 Encoding blankhead get [ 880.0 0 -435.0 -275.0 435.0 285.0 ] put",
1616 "Mcbbox1 Encoding dwhisostriangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
1617 "Mcbbox1 Encoding dwhpiewedge get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
1618 "Mcbbox1 Encoding dwhrectangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
1619 "Mcbbox1 Encoding dwhrighttriangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
1620 "Mcbbox1 Encoding dwhsemicircle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
1621 "Mcbbox1 Encoding dwhslashhead get [ 1410.0 0 -695.0 -725.0 705.0 735.0 ] put",
1622 "Mcbbox1 Encoding fillisostriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
1623 "Mcbbox1 Encoding fillpiewedge get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
1624 "Mcbbox1 Encoding fillrectangle get [ 880.0 0 -435.0 -275.0 435.0 285.0 ] put",
1625 "Mcbbox1 Encoding fillrighttriangle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
1626 "Mcbbox1 Encoding fillsemicircle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
1627 "Mcbbox1 Encoding fillslashhead get [ 1300.0 0 -645.0 -675.0 645.0 685.0 ] put",
1628 "Mcbbox1 Encoding isostriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
1629 "Mcbbox1 Encoding piewedge get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
1630 "Mcbbox1 Encoding rectangle get [ 880.0 0 -435.0 -275.0 435.0 285.0 ] put",
1631 "Mcbbox1 Encoding righttriangle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
1632 "Mcbbox1 Encoding semicircle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
1633 "Mcbbox1 Encoding slashhead get [ 1380.0 0 -685.0 -725.0 685.0 735.0 ] put",
1634 "Mcbbox1 Encoding udwhrighttriangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
1635 "Mcbbox1 Encoding ufillrighttriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
1636 "Mcbbox1 Encoding urighttriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
1637 "",
1638 "end",
1639 "end",
1640 "",
1641 "/Mfont1 mfont1 definefont",
1642 "",
1643 "/makeExtEncoding {",
1644 " /extendedencoding 256 array def",
1645 " StandardEncoding extendedencoding copy",
1646 " extendedencoding 32 /exclamdown put",
1647 " extendedencoding 33 /cent put",
1648 " extendedencoding 34 /sterling put",
1649 " extendedencoding 35 /yen put",
1650 " extendedencoding 36 /quotedblleft put",
1651 " extendedencoding 37 /guillemotleft put",
1652 " extendedencoding 38 /guillemotright put",
1653 " extendedencoding 39 /guilsinglleft put",
1654 " extendedencoding 40 /guilsinglright put",
1655 " extendedencoding 41 /dagger put",
1656 " extendedencoding 42 /daggerdbl put",
1657 " extendedencoding 43 /bullet put",
1658 " extendedencoding 44 /quotedblbase put",
1659 " extendedencoding 45 /quotedblright put",
1660 " extendedencoding 46 /questiondown put",
1661 " extendedencoding 47 /grave put",
1662 " extendedencoding 48 /acute put",
1663 " extendedencoding 49 /macron put",
1664 " extendedencoding 50 /breve put",
1665 " extendedencoding 51 /dotaccent put",
1666 " extendedencoding 52 /dieresis put",
1667 " extendedencoding 53 /ring put",
1668 " extendedencoding 54 /cedilla put",
1669 " extendedencoding 55 /hungarumlaut put",
1670 " extendedencoding 56 /ogonek put",
1671 " extendedencoding 57 /caron put",
1672 " extendedencoding 58 /emdash put",
1673 " extendedencoding 59 /AE put",
1674 " extendedencoding 60 /ae put",
1675 " extendedencoding 61 /ordfeminine put",
1676 " extendedencoding 62 /ordmasculine put",
1677 " extendedencoding 63 /Lslash put",
1678 " extendedencoding 64 /lslash put",
1679 " extendedencoding 65 /Oslash put",
1680 " extendedencoding 66 /oslash put",
1681 " extendedencoding 67 /OE put",
1682 " extendedencoding 68 /oe put",
1683 " extendedencoding 69 /dotlessi put",
1684 " extendedencoding 70 /germandbls put",
1685 " extendedencoding 71 /Aacute put",
1686 " extendedencoding 72 /aacute put",
1687 " extendedencoding 73 /Acircumflex put",
1688 " extendedencoding 74 /acircumflex put",
1689 " extendedencoding 75 /Adieresis put",
1690 " extendedencoding 76 /adieresis put",
1691 " extendedencoding 77 /Agrave put",
1692 " extendedencoding 78 /agrave put",
1693 " extendedencoding 79 /Aring put",
1694 " extendedencoding 80 /aring put",
1695 " extendedencoding 81 /Atilde put",
1696 " extendedencoding 82 /atilde put",
1697 " extendedencoding 83 /Ccedilla put",
1698 " extendedencoding 84 /ccedilla put",
1699 " extendedencoding 85 /Eacute put",
1700 " extendedencoding 86 /eacute put",
1701 " extendedencoding 87 /Ecircumflex put",
1702 " extendedencoding 88 /ecircumflex put",
1703 " extendedencoding 89 /Edieresis put",
1704 " extendedencoding 90 /edieresis put",
1705 " extendedencoding 91 /Egrave put",
1706 " extendedencoding 92 /egrave put",
1707 " extendedencoding 93 /Iacute put",
1708 " extendedencoding 94 /iacute put",
1709 " extendedencoding 95 /Icircumflex put",
1710 " extendedencoding 96 /icircumflex put",
1711 " extendedencoding 97 /Idieresis put",
1712 " extendedencoding 98 /idieresis put",
1713 " extendedencoding 99 /Igrave put",
1714 " extendedencoding 100 /igrave put",
1715 " extendedencoding 101 /Ntilde put",
1716 " extendedencoding 102 /ntilde put",
1717 " extendedencoding 103 /Oacute put",
1718 " extendedencoding 104 /oacute put",
1719 " extendedencoding 105 /Ocircumflex put",
1720 " extendedencoding 106 /ocircumflex put",
1721 " extendedencoding 107 /Odieresis put",
1722 " extendedencoding 108 /odieresis put",
1723 " extendedencoding 109 /Ograve put",
1724 " extendedencoding 110 /ograve put",
1725 " extendedencoding 111 /Otilde put",
1726 " extendedencoding 112 /otilde put",
1727 " extendedencoding 113 /Scaron put",
1728 " extendedencoding 114 /scaron put",
1729 " extendedencoding 115 /Uacute put",
1730 " extendedencoding 116 /uacute put",
1731 " extendedencoding 117 /Ucircumflex put",
1732 " extendedencoding 118 /ucircumflex put",
1733 " extendedencoding 119 /Udieresis put",
1734 " extendedencoding 120 /udieresis put",
1735 " extendedencoding 121 /Ugrave put",
1736 " extendedencoding 122 /ugrave put",
1737 " extendedencoding 123 /Ydieresis put",
1738 " extendedencoding 124 /ydieresis put",
1739 " extendedencoding 125 /Zcaron put",
1740 " extendedencoding 126 /zcaron put",
1741 " extendedencoding 127 /space put",
1742 "} def",
1743 "",
1744 "/makeExtendedFont {",
1745 " findfont",
1746 " dup length dict /newdict exch def",
1747 " { 1 index /FID ne",
1748 " { newdict 3 1 roll put }",
1749 " { pop pop }",
1750 " ifelse",
1751 " } forall",
1752 " newdict /Encoding extendedencoding put",
1753 " newdict /UniqueID newdict /UniqueID get 1 add put",
1754 " newdict definefont pop",
1755 "} def",
1756(char *) 0
1757};
1758
1759/* generate the PostScript prolog */
1760
1761void
1762ps_prolog()
1763{
1764 int line;
1765
1766 for (line = 0; prolog_text[line] != (char *) 0; line++) {
1767 (void) printf("%s\n", prolog_text[line]);
1768 }
1769}