chiark / gitweb /
Import upstream version 5.3.
[mup] / mup / mup / prolog.c
1 /* Copyright 1995, 1996, 1997, 1998 by Arkkra Enterprises */
2
3 #include <stdio.h>
4 #include "globals.h"
5
6 char *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
1761 void
1762 ps_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 }