chiark / gitweb /
Merge branch 'arkkra' into shiny
[mup] / mup / mup / prolog.c
diff --git a/mup/mup/prolog.c b/mup/mup/prolog.c
new file mode 100644 (file)
index 0000000..605b782
--- /dev/null
@@ -0,0 +1,1769 @@
+/* Copyright 1995, 1996, 1997, 1998 by Arkkra Enterprises */
+
+#include <stdio.h>
+#include "globals.h"
+
+char *prolog_text[] = {
+       "% Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2003, 2004 by Arkkra Enterprises",
+       "% All rights reserved",
+       "",
+       "% Mup PostScript Prolog 5.3 for use with Mup 5.3",
+       "",
+       "% lwid is used as the width of a standard (thin) line in the music",
+       "% character definitions.",
+       "/lwid 70 def",
+       "/halflwid lwid 2 div def",
+       "",
+       "% Define the following for use in do_upshortnote, do_dnshortnote, and",
+       "% do_shortrest; it has to be done outside of the music font definition.",
+       "/utildict 10 dict def",
+       "utildict begin",
+       "       /setnumflags    {       /numflags       exch def } def",
+       "       /sethooksm1     {       /hooksm1        exch def } def",
+       "       /setoffsets     {       /offsets        exch def } def",
+       "       /setx           {       /x              exch def } def",
+       "       /sety           {       /y              exch def } def",
+       "end",
+       "",
+       "% Define a music character font.  Each music character is defined as if it",
+       "% were a normal ASCII character in a strange font where \"A\" looks like a",
+       "% treble clef, \"B\" looks like a bass clef, etc.",
+       "",
+       "/mfont0 100 dict def",
+       "mfont0 begin",
+       "       /FontType 3 def",
+       "       /FontMatrix [ .001 0 0 0.001 0 0 ] def",
+       "       /FontBBox [ -2000 -4030 2000 4030 ] def",
+       "       /FontName (Mfont0) def",
+       "",
+       "       % set up Encoding vector with standard names",
+       "       /Encoding 256 array def",
+       "       StandardEncoding Encoding copy",
+       "       pop",
+       "",
+       "       % the following definitions are used for quarter rests",
+       "       /topx -170 def /topy 950 def",
+       "       /cor1x 250 def /cor1y 450 def",
+       "       /cor2x -300 def /cor2y 200 def",
+       "       /cor3x 250 def /cor3y -400 def",
+       "",
+       "       % the following definitions are used for double sharps",
+       "       /limit 300 halflwid add def",
+       "       /off 70 def",
+       "       /inbendsmall limit 200 sub def",
+       "       /inbendbig limit 20 sub def",
+       "       /outbendsmall 100 def",
+       "       /outbendbig outbendsmall off add def",
+       "",
+       "       %%%%% define routines that will be used by multiple characters %%%%%",
+       "       /do_1n {",
+       "               gsave",
+       "               newpath -10 rotate 1.6 1 scale",
+       "               0 0 325 0 360 arc               %outer ellipse",
+       "               1 1.6 div 1 scale 10 rotate     %back to original",
+       "               35 rotate 0.85 1.1 scale",
+       "               0 0 275 0 360 arc               %inner ellipse",
+       "               eofill",
+       "               grestore",
+       "       } def",
+       "       /do_upflag {",
+       "               -315 0 moveto",
+       "               -300 100 -100 480 0 600 curveto",
+       "               300 960 350 1500 200 1700 curveto",
+       "               130 1700 lineto",
+       "               350 1200 50 650 -315 600 curveto",
+       "               fill",
+       "       } def",
+       "       /do_flat {",
+       "               -250 -400 moveto        %outer edge of loop",
+       "               500 0 350 650 -250 160 curveto",
+       "               -250 160 lwid sub lineto %inner edge of loop",
+       "               100 400 300 0 -250 -400 lwid add curveto",
+       "               fill",
+       "",
+       "               lwid setlinewidth       %stem",
+       "               -250 1100 moveto -250 -400 lineto stroke",
+       "       } def",
+       "       /do_diamond {",
+       "               newpath",
+       "               420 0 moveto 0 300 lineto -420 0 lineto",
+       "               0 -300 lineto closepath",
+       "               259 -29 moveto -41 185 lineto -259 29 lineto",
+       "               41 -185 lineto closepath",
+       "               eofill",
+       "       } def",
+       "       /do_2n {",
+       "               gsave",
+       "               newpath 25 rotate 1.4 1 scale",
+       "               0 0 315 0 360 arc               %outer ellipse",
+       "               1 1.4 div 1 scale               %back to original",
+       "               1.3 0.5 scale",
+       "               0 0 310 0 360 arc               %inner ellipse",
+       "               eofill",
+       "               grestore",
+       "       } def",
+       "       /do_4n {",
+       "               gsave",
+       "               newpath 25 rotate 1.35 1 scale",
+       "               0 0 310 0 360 arc fill",
+       "               grestore",
+       "       } def",
+       "       /do_com {",
+       "               newpath",
+       "               330 250 150 0 360 arc fill      %knob at upper right",
+       "               465 300 moveto                  %outer boundary",
+       "               410 500 200 635 0 635 curveto",
+       "               -750 635 -750 -635 0 -635 curveto",
+       "               350 -635 480 -300 500 -100 curveto",
+       "               430 -100 lineto                 %inner boundary",
+       "               380 -300 250 -565 0 -565 curveto",
+       "               -450 -565 -450 565 0 565 curveto",
+       "               200 565 370 350 395 300 curveto",
+       "               fill",
+       "       } def",
+       "       /do_ferm {",
+       "               0 0 800 lwid sub 0 180 arc      %inner arc",
+       "               -800 0 lineto",
+       "               0 270 lwid sub 800 180 0 arcn   %outer arc",
+       "               800 0 lineto fill",
+       "               0 120 120 0 360 arc fill        %the dot",
+       "       } def",
+       "       /do_mor {",
+       "               gsave",
+       "               0.7 1 scale     %scrunch the following horizontally",
+       "               45 rotate       %to pretend all lines horz or vertical",
+       "               0 1 1 {",
+       "                       pop     %we don't need the loop variable",
+       "                       %one half of the mordent",
+       "                       0 40 moveto 350 40 lineto 350 -460 lineto",
+       "                       750 -460 lineto 750 -540 lineto",
+       "                       150 -540 lineto 150 -40 lineto",
+       "                       0 -40 lineto fill",
+       "                       180 rotate      %to do the other half",
+       "               } for",
+       "               grestore",
+       "       } def",
+       "       /do_turn {",
+       "               gsave",
+       "               0 1 1 {",
+       "                       pop     %we don't need the loop variable",
+       "                       0 -100 moveto   %outer boundary",
+       "                       200 -400 625 -400 625 0 curveto",
+       "                       625 200 500 325 300 325 curveto",
+       "                       300 185 lineto  %inner boundary",
+       "                       450 255 555 150 555 0 curveto",
+       "                       555 -350 250 -250 0 100 curveto",
+       "                       fill",
+       "                       300 255 70 0 360 arc fill %knob on end",
+       "                       180 rotate      %to do the other half",
+       "               } for",
+       "               grestore",
+       "       } def",
+       "",
+       "       /do_upshortnote {",
+       "               utildict begin",
+       "               setnumflags             %set numflags from the stack",
+       "               gsave",
+       "               -330 0 translate        %half a flag width",
+       "               do_4n                   %do a quarter note head",
+       "               lwid setlinewidth",
+       "               370 0 moveto",
+       "               370 2100 numflags 2 sub flagsep mul add lineto stroke",
+       "               670 2100 numflags 2 sub flagsep mul add translate",
+       "               1 -1 scale              %reflect across X axis",
+       "               0 1 numflags 1 sub {",
+       "                       do_upflag       %do an upflag",
+       "                       pop             %we don't need the loop variable",
+       "                       0 flagsep translate",
+       "               } for",
+       "               grestore",
+       "               end",
+       "       } def",
+       "",
+       "       /do_dnshortnote {",
+       "               utildict begin",
+       "               setnumflags             %set numflags from the stack",
+       "               do_4n                   %do a quarter note head",
+       "               lwid setlinewidth",
+       "               -370 0 moveto",
+       "               -370 -2100 numflags 2 sub flagsep mul sub lineto stroke",
+       "               gsave",
+       "               -70 -2100 numflags 2 sub flagsep mul sub translate",
+       "               0 1 numflags 1 sub {",
+       "                       do_upflag       %do an upflag",
+       "                       pop             %we don't need the loop variable",
+       "                       0 flagsep translate",
+       "               } for",
+       "               grestore",
+       "               end",
+       "       } def",
+       "",
+       "       /do_shortrest {",
+       "               utildict begin",
+       "               sety setx setoffsets sethooksm1 %set variable from the stack",
+       "               gsave",
+       "               -105.8 offsets mul -600 offsets mul translate",
+       "               0 1 hooksm1 {           %loop once per hook",
+       "                       newpath",
+       "                       1 setlinewidth",
+       "                       gsave",
+       "                       1 1.2 scale",
+       "                       -150 300 1.2 div 140 0 360 arc fill     %the dot",
+       "                       grestore",
+       "                       lwid setlinewidth",
+       "                       -50 700 550 255 315 arc         %rest of the hook",
+       "                       hooksm1 lt { stroke 105.8 600 translate } if",
+       "               } for",
+       "               x y lineto stroke",
+       "               grestore",
+       "               end",
+       "       } def",
+       "",
+       "",
+       "       % subsidiary dictionary of character definitions",
+       "       /CharStrings 128 dict def",
+       "       CharStrings begin",
+       "",
+       "               /.notdef {} def",
+       "",
+       "               % Here are the definitions of the characters.  A stepsize here",
+       "               % is 300 units (assuming the character is drawn at its default",
+       "               % size).",
+       "",
+       "               % gclef",
+       "               /A {",
+       "                       newpath",
+       "                       %start with inner curl, inside boundary",
+       "                       -50 -300 moveto",
+       "                       -450 600 700 700 750 0 curveto",
+       "                       750 -800 -700 -800 -700 200 curveto",
+       "                       -700 900 500 1400 520 2250 curveto",
+       "                       520 2900 300 3000 200 3000 curveto",
+       "                       100 3000 -400 2500 -200 1800 curveto",
+       "                       350 -600 lineto",
+       "                       720 -1600 0 -1650 -400 -1400 curveto",
+       "",
+       "                       %go back to start, drawing the other boundary",
+       "                       -400 -1480 lineto",
+       "                       0 -1700 800 -1700 430 -600 curveto",
+       "                       -120 1800 lineto",
+       "                       -300 2400 200 2800 250 2800 curveto",
+       "                       400 2800 430 2700 430 2450 curveto",
+       "                       430 1800 -900 1200 -900 300 curveto",
+       "                       -750 -900 800 -900 850 0 curveto",
+       "                       900 1100 -750 900 -120 -300 curveto fill",
+       "",
+       "                       %circle at the bottom",
+       "                       -300 -1250 250 0 360 arc fill",
+       "               } def",
+       "",
+       "               % fclef",
+       "               /B {",
+       "                       newpath",
+       "                       %start with outside boundary, at bottom",
+       "                       -1000 -1700 moveto",
+       "                       100 -1100 500 -600 450 0 curveto",
+       "                       450 850 -1100 850 -950 0 curveto",
+       "",
+       "                       %go back to start, drawing the other boundary",
+       "                       -880 0 lineto",
+       "                       -920 400 -600 560 -300 560 curveto",
+       "                       0 560 150 400 150 0 curveto",
+       "                       150 -400 100 -900 -1000 -1620 curveto fill",
+       "",
+       "                       %circle at the left",
+       "                       newpath",
+       "                       -700 0 250 0 360 arc fill",
+       "",
+       "                       %do the two dots after the main curve",
+       "                       700 -300 100 0 360 arc fill",
+       "                       700 300 100 0 360 arc fill",
+       "               } def",
+       "",
+       "               % cclef",
+       "               /C {",
+       "                       gsave",
+       "                       %do upper curved part, then scale to do mirror image",
+       "                       0 1 1 {",
+       "                               pop     %we don't need the loop variable",
+       "                               %outer boundary of curve",
+       "                               -170 0 moveto 100 300 lineto",
+       "                               400 -200 750 300 750 650 curveto",
+       "                               750 1100 450 1235 250 1235 curveto",
+       "                               0 1235 -143 1100 -143 950 curveto",
+       "",
+       "                               %inner boundary of curve",
+       "                               0 950 lineto",
+       "                               0 1100 30 1165 250 1165 curveto",
+       "                               300 1165 450 1100 450 650 curveto",
+       "                               450 400 400 -100 100 400 curveto",
+       "                               -270 0 lineto fill",
+       "                               %stroke",
+       "                               %-270 0 moveto 100 400 lineto",
+       "                               %400 -100 450 400 450 650 curveto",
+       "                               %450 1100 300 1165 250 1165 curveto",
+       "                               %30 1165 0 1100 0 950 curveto",
+       "                               %stroke",
+       "",
+       "                               %elliptical ball at end of curve",
+       "                               gsave",
+       "                               1.3 1 scale",
+       "                               10 950 120 0 360 arc fill",
+       "                               grestore",
+       "                               1 -1 scale      %reflect across X axis",
+       "                       } for",
+       "                       grestore",
+       "",
+       "                       % two vertical lines on the left",
+       "                       300 setlinewidth -600 -1200 halflwid sub moveto",
+       "                       -600 1200 halflwid add lineto stroke",
+       "                       lwid setlinewidth -300 -1200 halflwid sub moveto",
+       "                       -300 1200 halflwid add lineto stroke",
+       "               } def",
+       "",
+       "               % dblwhole",
+       "               /D {",
+       "                       do_1n           %do a whole note",
+       "                       lwid setlinewidth",
+       "                       -490 -600 moveto -490 600 lineto stroke",
+       "                       490 -600 moveto 490 600 lineto stroke",
+       "               } def",
+       "",
+       "               % 1n",
+       "               /E {",
+       "                       do_1n           %do a whole note",
+       "               } def",
+       "",
+       "               % 2n",
+       "               /F {",
+       "                       do_2n           %do a half note",
+       "               } def",
+       "",
+       "               % 4n",
+       "               /G {",
+       "                       do_4n           %do a quarter note head",
+       "               } def",
+       "",
+       "               % upflag",
+       "               /H {",
+       "                       do_upflag               %do an upflag",
+       "               } def",
+       "",
+       "               % dnflag",
+       "               /I {",
+       "                       gsave",
+       "                       1 -1 scale      %reflect across X axis",
+       "                       do_upflag               %do an upflag",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % dwhrest",
+       "               /J {",
+       "                       300 setlinewidth",
+       "                       0 0 moveto 0 600 lineto stroke",
+       "               } def",
+       "",
+       "               % 1rest",
+       "               /K {",
+       "                       lwid setlinewidth",
+       "                       -750 600 moveto 750 600 lineto stroke",
+       "                       300 setlinewidth",
+       "                       -400 450 moveto 400 450 lineto stroke",
+       "               } def",
+       "",
+       "               % 2rest",
+       "               /L {",
+       "                       lwid setlinewidth",
+       "                       -750 0 moveto 750 0 lineto stroke",
+       "                       300 setlinewidth",
+       "                       -400 150 moveto 400 150 lineto stroke",
+       "               } def",
+       "",
+       "               % 4rest",
+       "               /M {",
+       "                       newpath",
+       "                       cor3x cor3y halflwid add moveto",
+       "                       %-400 -200 -450 -650 50 -950 lwid add curveto",
+       "                       -450 -50 -450 -650 50 -950 lwid add curveto",
+       "                       -150 -650 -100 -250 cor3x cor3y halflwid sub curveto",
+       "                       fill",
+       "",
+       "                       cor1x cor1y moveto cor1x 200 sub cor1y 200 add lineto",
+       "                       cor2x cor2y lineto cor2x 200 add cor2y 200 sub lineto",
+       "                       fill",
+       "",
+       "                       lwid setlinewidth",
+       "                       topx topy moveto cor1x cor1y lineto stroke",
+       "                       cor2x cor2y moveto cor3x cor3y lineto stroke",
+       "               } def",
+       "",
+       "               % 8rest",
+       "               /N {",
+       "                       0 0 0 -600 do_shortrest",
+       "               } def",
+       "",
+       "               % 16rest",
+       "               /O {",
+       "                       1 1 100 -1200 do_shortrest",
+       "               } def",
+       "",
+       "               % 32rest",
+       "               /P {",
+       "                       2 1 0 -1800 do_shortrest",
+       "               } def",
+       "",
+       "               % 64rest",
+       "               /Q {",
+       "                       3 2 -80 -2100 do_shortrest",
+       "               } def",
+       "",
+       "               % 128rest",
+       "               /R {",
+       "                       4 2 -150 -2700 do_shortrest",
+       "               } def",
+       "",
+       "               % 256rest",
+       "               /S {",
+       "                       5 3 -280 -3300 do_shortrest",
+       "               } def",
+       "",
+       "               % dot",
+       "               /T {",
+       "                       newpath",
+       "                       0 0 120 0 360 arc fill",
+       "               } def",
+       "",
+       "               % nat",
+       "               /U {",
+       "                       % fill crossbars so that we can do parallelograms",
+       "                       -235 -470 moveto -235 -270 lineto",
+       "                       235 -130 lineto 235 -330 lineto fill",
+       "                       -235 130 moveto -235 330 lineto",
+       "                       235 470 lineto 235 270 lineto fill",
+       "",
+       "                       % vertical strokes",
+       "                       lwid setlinewidth",
+       "                       -200 -380 moveto -200 850 lineto stroke",
+       "                       200 -850 moveto 200 380 lineto stroke",
+       "               } def",
+       "",
+       "               % sharp",
+       "               /V {",
+       "                       % fill crossbars so that we can do parallelograms",
+       "                       -325 -480 moveto -325 -280 lineto",
+       "                       325 -120 lineto 325 -320 lineto fill",
+       "                       -325 120 moveto -325 320 lineto",
+       "                       325 480 lineto 325 280 lineto fill",
+       "",
+       "                       % vertical strokes",
+       "                       lwid setlinewidth",
+       "                       -150 -930 moveto -150 880 lineto stroke",
+       "                       150 -880 moveto 150 930 lineto stroke",
+       "               } def",
+       "",
+       "               % flat",
+       "               /W {",
+       "                       do_flat         %do a flat",
+       "               } def",
+       "",
+       "               % dblsharp",
+       "               /X {",
+       "                       gsave",
+       "                       0 1 3 {         %loop once for each of 4 sticks",
+       "                               pop     %we don't need the loop variable",
+       "                               0 off neg moveto",
+       "                               outbendbig outbendsmall lineto",
+       "                               inbendbig inbendsmall lineto",
+       "                               limit limit lineto",
+       "                               inbendsmall inbendbig lineto",
+       "                               outbendsmall outbendbig lineto",
+       "                               off neg 0 lineto",
+       "                               fill",
+       "                               -90 rotate",
+       "                       } for",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % dblflat",
+       "               /Y {",
+       "                       -290 580 290 {  %loop once for each flat",
+       "",
+       "                               gsave",
+       "                               1 setlinewidth",
+       "                               0 translate     %translate left/right (loop var)",
+       "                               do_flat         %do a flat",
+       "                               grestore",
+       "",
+       "                       } for",
+       "               } def",
+       "",
+       "               % xnote",
+       "               /Z {",
+       "                       gsave",
+       "                       1.15 1 scale 120 setlinewidth 1 setlinecap      %round",
+       "                       -300 -300 moveto 300 300 lineto stroke",
+       "                       -300 300 moveto 300 -300 lineto stroke",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % dwhdiamond",
+       "               /a {",
+       "                       do_diamond      %do a diamond",
+       "                       lwid setlinewidth",
+       "                       -420 -600 moveto -420 600 lineto stroke",
+       "                       420 -600 moveto 420 600 lineto stroke",
+       "               } def",
+       "",
+       "               % diamond",
+       "               /b {",
+       "                       do_diamond      %do a diamond",
+       "               } def",
+       "",
+       "               % filldiamond",
+       "               /c {",
+       "                       420 0 moveto 0 300 lineto",
+       "                       -420 0 lineto 0 -300 lineto fill",
+       "               } def",
+       "",
+       "               % up2n",
+       "               /d {",
+       "                       lwid setlinewidth",
+       "                       380 0 moveto 380 2100 lineto stroke",
+       "                       do_2n           %do a half note",
+       "               } def",
+       "",
+       "               % dn2n",
+       "               /e {",
+       "                       lwid setlinewidth",
+       "                       -380 0 moveto -380 -2100 lineto stroke",
+       "                       do_2n           %do a half note",
+       "               } def",
+       "",
+       "               % up4n",
+       "               /f {",
+       "                       do_4n           %do a quarter note head",
+       "                       lwid setlinewidth",
+       "                       370 0 moveto 370 2100 lineto stroke",
+       "               } def",
+       "",
+       "               % dn4n",
+       "               /g {",
+       "                       do_4n           %do a quarter note head",
+       "                       lwid setlinewidth",
+       "                       -370 0 moveto -370 -2100 lineto stroke",
+       "               } def",
+       "",
+       "               % up8n",
+       "               /h {",
+       "                       gsave",
+       "                       -330 0 translate        % half a flag width",
+       "                       do_4n           %do a quarter note head",
+       "                       lwid setlinewidth",
+       "                       370 0 moveto 370 2100 lineto stroke",
+       "                       670 2100 translate",
+       "                       1 -1 scale      %reflect across X axis",
+       "                       do_upflag               %do an upflag",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % dn8n",
+       "               /i {",
+       "                       do_4n           %do a quarter note head",
+       "                       lwid setlinewidth",
+       "                       -370 0 moveto -370 -2100 lineto stroke",
+       "                       gsave",
+       "                       -70 -2100 translate",
+       "                       do_upflag               %do an upflag",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % up16n",
+       "               /j {",
+       "                       2 do_upshortnote",
+       "               } def",
+       "",
+       "               % dn16n",
+       "               /k {",
+       "                       2 do_dnshortnote",
+       "               } def",
+       "",
+       "               % up32n",
+       "               /l {",
+       "                       3 do_upshortnote",
+       "               } def",
+       "",
+       "               % dn32n",
+       "               /m {",
+       "                       3 do_dnshortnote",
+       "               } def",
+       "",
+       "               % up64n",
+       "               /n {",
+       "                       4 do_upshortnote",
+       "               } def",
+       "",
+       "               % dn64n",
+       "               /o {",
+       "                       4 do_dnshortnote",
+       "               } def",
+       "",
+       "               % up128n",
+       "               /p {",
+       "                       5 do_upshortnote",
+       "               } def",
+       "",
+       "               % dn128n",
+       "               /q {",
+       "                       5 do_dnshortnote",
+       "               } def",
+       "",
+       "               % up256n",
+       "               /r {",
+       "                       6 do_upshortnote",
+       "               } def",
+       "",
+       "               % dn256n",
+       "               /s {",
+       "                       6 do_dnshortnote",
+       "               } def",
+       "",
+       "               % com",
+       "               /t {",
+       "                       do_com          %do a common time symbol",
+       "               } def",
+       "",
+       "               % cut",
+       "               /u {",
+       "                       do_com          %do a common time symbol",
+       "                       lwid setlinewidth",
+       "                       0 -900 moveto 0 900 lineto stroke",
+       "               } def",
+       "",
+       "               % begped",
+       "               /v {",
+       "                       lwid setlinewidth",
+       "                       -200 600 moveto -200 0 lineto 200 0 lineto stroke",
+       "               } def",
+       "",
+       "               % pedal",
+       "               /w {",
+       "                       lwid setlinewidth",
+       "                       -500 0 moveto -450 0 lineto 0 600 lineto",
+       "                       450 0 lineto 500 0 lineto stroke",
+       "               } def",
+       "",
+       "               % endped",
+       "               /x {",
+       "                       lwid setlinewidth",
+       "                       200 600 moveto 200 0 lineto -200 0 lineto stroke",
+       "               } def",
+       "",
+       "               % dnbow",
+       "               /y {",
+       "                       lwid setlinewidth",
+       "                       -350 0 moveto -350 900 lineto stroke",
+       "                       350 0 moveto 350 900 lineto stroke",
+       "                       200 setlinewidth",
+       "                       -350 800 moveto 350 800 lineto stroke",
+       "               } def",
+       "",
+       "               % upbow",
+       "               /z {",
+       "                       lwid setlinewidth",
+       "                       -300 900 moveto 0 0 lineto 300 900 lineto stroke",
+       "               } def",
+       "",
+       "               % wedge",
+       "               /one {",
+       "                       0 0 moveto -150 500 lineto 150 500 lineto fill",
+       "               } def",
+       "",
+       "               % uwedge",
+       "               /two {",
+       "                       -150 0 moveto 150 0 lineto 0 500 lineto fill",
+       "               } def",
+       "",
+       "               % ferm",
+       "               /three {",
+       "                       newpath",
+       "                       do_ferm         %do a right side up fermata",
+       "               } def",
+       "",
+       "               % uferm",
+       "               /four {",
+       "                       newpath",
+       "                       gsave",
+       "                       0 270 lwid sub 800 add translate %baseline at bottom",
+       "                       180 rotate                      %upside down",
+       "                       do_ferm         %do a right side up fermata",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % sign",
+       "               /five {",
+       "                       gsave",
+       "                       %do upper left curved part, upper right dot;",
+       "                       %then rotate 180 to do other half",
+       "                       0 1 1 {",
+       "                               pop     %we don't need the loop variable",
+       "                               0 100 moveto            %inner boundary",
+       "                               -1000 300 -400 750 -200 700 curveto",
+       "                               -200 800 lineto         %outer boundary",
+       "                               -550 900 -1100 100 0 -100 curveto",
+       "                               fill",
+       "                               %dot at end of curve",
+       "                               -200 700 100 0 360 arc fill",
+       "                               %dot in upper right quadrant",
+       "                               500 200 70 0 360 arc fill",
+       "                               180 rotate",
+       "                       } for",
+       "                       grestore",
+       "",
+       "                       %slash through middle",
+       "                       lwid setlinewidth",
+       "                       -400 -800 moveto 400 800 lineto stroke",
+       "               } def",
+       "",
+       "               % coda",
+       "               /six {",
+       "                       newpath",
+       "                       gsave",
+       "                       0.6 1 scale",
+       "                       0 0 550 0 360 arc       %outside boundary",
+       "                       1 0.6 div 1 scale       %back to original",
+       "                       0.9 1 scale",
+       "                       0 0 650 0 360 arc       %inside boundary",
+       "                       eofill",
+       "                       grestore",
+       "                       lwid setlinewidth",
+       "                       0 -850 moveto 0 850 lineto stroke",
+       "                       -800 0 moveto 800 0 lineto stroke",
+       "               } def",
+       "",
+       "               % mor",
+       "               /seven {",
+       "                       do_mor          %do a mordent",
+       "               } def",
+       "",
+       "               % invmor",
+       "               /eight {",
+       "                       do_mor          %do a mordent",
+       "                       lwid setlinewidth",
+       "                       0 -450 moveto 0 450 lineto stroke",
+       "               } def",
+       "",
+       "               % turn",
+       "               /nine {",
+       "                       do_turn         %do a turn",
+       "               } def",
+       "",
+       "               % invturn",
+       "               /zero {",
+       "                       gsave",
+       "                       1 -1 scale      %reflect across X axis",
+       "                       do_turn         %do a turn",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % acc_gt",
+       "               /numbersign {",
+       "                       lwid setlinewidth",
+       "                       -500 300 moveto 500 0 lineto -500 -300 lineto stroke",
+       "               } def",
+       "",
+       "               % acc_hat",
+       "               /dollar {",
+       "                       newpath",
+       "                       -365 0 moveto 0 860 lineto 365 0 lineto",
+       "                       150 0 lineto -75 530 lineto -300 0 lineto fill",
+       "               } def",
+       "",
+       "               % acc_uhat",
+       "               /quotedbl {",
+       "                       newpath",
+       "                       365 860 moveto 0 0 lineto -365 860 lineto",
+       "                       -150 860 lineto 75 330 lineto 300 860 lineto fill",
+       "               } def",
+       "",
+       "               % tr",
+       "               /asterisk {",
+       "                       %vertical bar of t",
+       "                       -350 1000 moveto -550 200 lineto",
+       "                       -612.5 -50 -212.5 -50 -160 200 curveto",
+       "                       -230 200 lineto",
+       "                       -300 50 -420 50 -400 200 curveto",
+       "                       -200 1000 lineto fill",
+       "",
+       "                       %crossbar of t and vertical bar of r",
+       "                       -700 600 moveto -160 600 lineto",
+       "                       20 600 30 520 60 440 curveto",
+       "                       -50 0 lineto 70 0 lineto 180 440 lineto",
+       "                       190 480 100 670 -150 670 curveto",
+       "                       -690 670 lineto fill",
+       "",
+       "                       %horizontal curve of r",
+       "                       100 480 moveto",
+       "                       300 630 450 700 650 550 curveto",
+       "                       560 480 lineto",
+       "                       450 630 300 560 100 390 curveto",
+       "                       fill",
+       "",
+       "                       %knob at end of r",
+       "                       600 460 100 0 360 arc fill",
+       "               } def",
+       "",
+       "               % leg",
+       "               /comma {",
+       "                       100 setlinewidth",
+       "                       -400 0 moveto 400 0 lineto stroke",
+       "               } def",
+       "",
+       "               % rr",
+       "               /hyphen {",
+       "                       100 setlinewidth",
+       "                       -400 0 moveto 0 1000 lineto stroke",
+       "                       0 0 moveto 400 1000 lineto stroke",
+       "               } def",
+       "",
+       "               % measrpt",
+       "               /period {",
+       "                       newpath -450 400 150 0 360 arc fill",
+       "                       newpath 450 -400 150 0 360 arc fill",
+       "                       200 setlinewidth",
+       "                       -550 -600 moveto 550 600 lineto stroke",
+       "               } def",
+       "",
+       "               % copyright",
+       "               /slash {",
+       "                       lwid setlinewidth",
+       "                       newpath 0 400 400 0 360 arc stroke",
+       "                       newpath 0 400 200 45 315 arc stroke",
+       "               } def",
+       "",
+       "               % dim",
+       "               /quoteleft {",
+       "                       50 setlinewidth",
+       "                       newpath 0 640 220 0 360 arc stroke",
+       "               } def",
+       "",
+       "               % halfdim",
+       "               /quoteright {",
+       "                       50 setlinewidth",
+       "                       newpath 0 640 220 0 360 arc stroke",
+       "                       newpath -340 300 moveto 340 980 lineto stroke",
+       "               } def",
+       "",
+       "               % triangle",
+       "               /asciicircum {",
+       "                       50 setlinewidth",
+       "                       newpath -340 -10 moveto 0 710 lineto",
+       "                       340 -10 lineto closepath stroke",
+       "               } def",
+       "",
+       "               % qwhrest",
+       "               /ampersand {",
+       "                       300 setlinewidth",
+       "                       0 -600 moveto 0 600 lineto stroke",
+       "               } def",
+       "",
+       "               % ll1rest",
+       "               /exclam {",
+       "                       310 setlinewidth",
+       "                       -400 455 moveto 400 450 lineto stroke",
+       "               } def",
+       "",
+       "               % ll2rest",
+       "               /at {",
+       "                       310 setlinewidth",
+       "                       -400 145 moveto 400 150 lineto stroke",
+       "               } def",
+       "       end",
+       "",
+       "       /BuildChar {",
+       "",
+       "               exch begin",
+       "               Encoding exch get",
+       "",
+       "               dup",
+       "               Mcbbox0 exch get",
+       "               aload pop setcachedevice",
+       "",
+       "               CharStrings exch get",
+       "               exec",
+       "               end",
+       "       } def",
+       "end",
+       "",
+       "",
+       "% Define another music character font, since there are too many to fit in one",
+       "% font.  It works the same way as the first one.",
+       "",
+       "/mfont1 100 dict def",
+       "mfont1 begin",
+       "       /FontType 3 def",
+       "       /FontMatrix [ .001 0 0 0.001 0 0 ] def",
+       "       /FontBBox [ -2000 -4030 2000 4030 ] def",
+       "       /FontName (Mfont1) def",
+       "",
+       "       % set up Encoding vector with standard names",
+       "       /Encoding 256 array def",
+       "       StandardEncoding Encoding copy",
+       "       pop",
+       "",
+       "       %%%%% define routines that will be used by multiple characters %%%%%",
+       "",
+       "       /do_dwh_bars {",
+       "               % the two bars surrounding a double whole note",
+       "               lwid setlinewidth",
+       "               -420 -600 moveto -420 600 lineto stroke",
+       "               420 -600 moveto 420 600 lineto stroke",
+       "       } def",
+       "       /do_righttriangle {",
+       "               newpath",
+       "               420 270 moveto -420 270 lineto 350 -300 lineto 420 -300 lineto",
+       "               350 150 moveto -140 150 lineto 350 -213 lineto",
+       "               eofill",
+       "       } def",
+       "       /do_fillrighttriangle {",
+       "               newpath",
+       "               420 270 moveto -420 270 lineto 350 -300 lineto 420 -300 lineto",
+       "               fill",
+       "       } def",
+       "       /do_rectangle {",
+       "               newpath",
+       "               420 270 moveto -420 270 lineto -420 -270 lineto 420 -270 lineto",
+       "               350 150 moveto -350 150 lineto -350 -150 lineto 350 -150 lineto",
+       "               eofill",
+       "       } def",
+       "       /do_isostriangle {",
+       "               newpath",
+       "               0 300 moveto -420 -270 lineto 420 -270 lineto",
+       "               0 182 moveto -245 -150 lineto 245 -150 lineto",
+       "               eofill",
+       "       } def",
+       "       /do_piewedge {",
+       "               newpath",
+       "               0 -300 moveto 0 -244 514 35 145 arc",
+       "               0 -209 moveto 0 -244 394 43 137 arc",
+       "               eofill",
+       "       } def",
+       "       /do_semicircle {",
+       "               newpath",
+       "               gsave",
+       "               1 1.357 scale 420 199 moveto 0 199 420 180 360 arc",
+       "               1 1.09 scale 350 111 moveto 0 199 350 194.1 345.9 arc",
+       "               eofill",
+       "               grestore",
+       "       } def",
+       "       /do_slashhead {",
+       "               newpath",
+       "               lwid setlinewidth",
+       "               -620 -530 moveto -480 -670 lineto 620 530 lineto 480 670 lineto",
+       "               closepath stroke",
+       "       } def",
+       "",
+       "       % subsidiary dictionary of character definitions",
+       "       /CharStrings 128 dict def",
+       "       CharStrings begin",
+       "",
+       "               /.notdef {} def",
+       "",
+       "               % Here are the definitions of the characters.  A stepsize here",
+       "               % is 300 units (assuming the character is drawn at its default",
+       "               % size).",
+       "",
+       "               % dwhrighttriangle",
+       "               /A {",
+       "                       do_righttriangle",
+       "                       do_dwh_bars",
+       "               } def",
+       "",
+       "               % righttriangle",
+       "               /B {",
+       "                       do_righttriangle",
+       "               } def",
+       "",
+       "               % fillrighttriangle",
+       "               /C {",
+       "                       newpath",
+       "                       420 270 moveto -420 270 lineto 350 -300 lineto",
+       "                       420 -300 lineto",
+       "                       fill",
+       "               } def",
+       "",
+       "               % udwhrighttriangle",
+       "               /D {",
+       "                       gsave",
+       "                       180 rotate",
+       "                       do_righttriangle",
+       "                       do_dwh_bars",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % urighttriangle",
+       "               /E {",
+       "                       gsave",
+       "                       180 rotate",
+       "                       do_righttriangle",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % ufillrighttriangle",
+       "               /F {",
+       "                       gsave",
+       "                       180 rotate",
+       "                       do_fillrighttriangle",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % dwhrectangle",
+       "               /G {",
+       "                       do_rectangle",
+       "                       do_dwh_bars",
+       "               } def",
+       "",
+       "               % rectangle",
+       "               /H {",
+       "                       do_rectangle",
+       "               } def",
+       "",
+       "               % fillrectangle",
+       "               /I {",
+       "                       newpath",
+       "                       420 270 moveto -420 270 lineto -420 -270 lineto",
+       "                       420 -270 lineto",
+       "                       fill",
+       "               } def",
+       "",
+       "               % dwhisostriangle",
+       "               /J {",
+       "                       do_isostriangle",
+       "                       do_dwh_bars",
+       "               } def",
+       "",
+       "               % isostriangle",
+       "               /K {",
+       "                       do_isostriangle",
+       "               } def",
+       "",
+       "               % fillisostriangle",
+       "               /L {",
+       "                       newpath",
+       "                       0 300 moveto -420 -270 lineto 420 -270 lineto",
+       "                       fill",
+       "               } def",
+       "",
+       "               % dwhpiewedge",
+       "               /M {",
+       "                       do_piewedge",
+       "                       do_dwh_bars",
+       "               } def",
+       "",
+       "               % piewedge",
+       "               /N {",
+       "                       do_piewedge",
+       "               } def",
+       "",
+       "               % fillpiewedge",
+       "               /O {",
+       "                       newpath",
+       "                       0 -300 moveto 0 -244 514 35 145 arc",
+       "                       fill",
+       "               } def",
+       "",
+       "               % dwhsemicircle",
+       "               /P {",
+       "                       do_semicircle",
+       "                       do_dwh_bars",
+       "               } def",
+       "",
+       "               % semicircle",
+       "               /Q {",
+       "                       do_semicircle",
+       "               } def",
+       "",
+       "               % fillsemicircle",
+       "               /R {",
+       "                       newpath",
+       "                       gsave",
+       "                       1 570 420 div scale",
+       "                       420 199 moveto 0 199 420 180 360 arc",
+       "                       fill",
+       "                       grestore",
+       "               } def",
+       "",
+       "               % dwhslashhead",
+       "               /S {",
+       "                       do_slashhead",
+       "                       lwid setlinewidth",
+       "                       -650 -600 moveto -650 600 lineto stroke",
+       "                       650 -600 moveto 650 600 lineto stroke",
+       "               } def",
+       "",
+       "               % slashhead",
+       "               /T {",
+       "                       do_slashhead",
+       "               } def",
+       "",
+       "               % fillslashhead",
+       "               /U {",
+       "                       newpath",
+       "                       200 setlinewidth",
+       "                       -550 -600 moveto 550 600 lineto stroke",
+       "               } def",
+       "",
+       "               % blankhead",
+       "               /V {",
+       "                       %print nothing",
+       "               } def",
+       "       end",
+       "",
+       "       /BuildChar {",
+       "",
+       "               exch begin",
+       "               Encoding exch get",
+       "",
+       "               dup",
+       "               Mcbbox1 exch get",
+       "               aload pop setcachedevice",
+       "",
+       "               CharStrings exch get",
+       "               exec",
+       "               end",
+       "       } def",
+       "end",
+       "",
+       "",
+       "% General routines for printing any music character, invoked by each music",
+       "% character's specific routine below.  The scaling factor (default 1) needs",
+       "% to be multiplied by 10 to get the actual size.  These routines restore the",
+       "% preexisting current font when they are done.",
+       "",
+       "/printmchar0 {",
+       "       gsave",
+       "       /musicchar exch def",
+       "       /Mfont0 findfont exch 10 mul scalefont setfont moveto ",
+       "       musicchar show",
+       "       grestore",
+       "} def",
+       "/printmchar1 {",
+       "       gsave",
+       "       /musicchar exch def",
+       "       /Mfont1 findfont exch 10 mul scalefont setfont moveto ",
+       "       musicchar show",
+       "       grestore",
+       "} def",
+       "",
+       "% Define each music character name to be a routine that prints the character.",
+       "% Each character is to be invoked as in this example:",
+       "%      100 200 1 gclef         % at (100, 200), scale to default size & print",
+       "",
+       "/gclef                 { (A) printmchar0 } def",
+       "/fclef                 { (B) printmchar0 } def",
+       "/cclef                 { (C) printmchar0 } def",
+       "/dblwhole              { (D) printmchar0 } def",
+       "/1n                    { (E) printmchar0 } def",
+       "/2n                    { (F) printmchar0 } def",
+       "/4n                    { (G) printmchar0 } def",
+       "/upflag                        { (H) printmchar0 } def",
+       "/dnflag                        { (I) printmchar0 } def",
+       "/dwhrest               { (J) printmchar0 } def",
+       "/1rest                 { (K) printmchar0 } def",
+       "/2rest                 { (L) printmchar0 } def",
+       "/4rest                 { (M) printmchar0 } def",
+       "/8rest                 { (N) printmchar0 } def",
+       "/16rest                        { (O) printmchar0 } def",
+       "/32rest                        { (P) printmchar0 } def",
+       "/64rest                        { (Q) printmchar0 } def",
+       "/128rest               { (R) printmchar0 } def",
+       "/256rest               { (S) printmchar0 } def",
+       "/dot                   { (T) printmchar0 } def",
+       "/nat                   { (U) printmchar0 } def",
+       "/sharp                 { (V) printmchar0 } def",
+       "/flat                  { (W) printmchar0 } def",
+       "/dblsharp              { (X) printmchar0 } def",
+       "/dblflat               { (Y) printmchar0 } def",
+       "/xnote                 { (Z) printmchar0 } def",
+       "/dwhdiamond            { (a) printmchar0 } def",
+       "/diamond               { (b) printmchar0 } def",
+       "/filldiamond           { (c) printmchar0 } def",
+       "/up2n                  { (d) printmchar0 } def",
+       "/dn2n                  { (e) printmchar0 } def",
+       "/up4n                  { (f) printmchar0 } def",
+       "/dn4n                  { (g) printmchar0 } def",
+       "/up8n                  { (h) printmchar0 } def",
+       "/dn8n                  { (i) printmchar0 } def",
+       "/up16n                 { (j) printmchar0 } def",
+       "/dn16n                 { (k) printmchar0 } def",
+       "/up32n                 { (l) printmchar0 } def",
+       "/dn32n                 { (m) printmchar0 } def",
+       "/up64n                 { (n) printmchar0 } def",
+       "/dn64n                 { (o) printmchar0 } def",
+       "/up128n                        { (p) printmchar0 } def",
+       "/dn128n                        { (q) printmchar0 } def",
+       "/up256n                        { (r) printmchar0 } def",
+       "/dn256n                        { (s) printmchar0 } def",
+       "/com                   { (t) printmchar0 } def",
+       "/cut                   { (u) printmchar0 } def",
+       "/begped                        { (v) printmchar0 } def",
+       "/pedal                 { (w) printmchar0 } def",
+       "/endped                        { (x) printmchar0 } def",
+       "/dnbow                 { (y) printmchar0 } def",
+       "/upbow                 { (z) printmchar0 } def",
+       "/wedge                 { (1) printmchar0 } def",
+       "/uwedge                        { (2) printmchar0 } def",
+       "/ferm                  { (3) printmchar0 } def",
+       "/uferm                 { (4) printmchar0 } def",
+       "/sign                  { (5) printmchar0 } def",
+       "/coda                  { (6) printmchar0 } def",
+       "/mor                   { (7) printmchar0 } def",
+       "/invmor                        { (8) printmchar0 } def",
+       "/turn                  { (9) printmchar0 } def",
+       "/invturn               { (0) printmchar0 } def",
+       "/acc_gt                        { (#) printmchar0 } def",
+       "/acc_hat               { ($) printmchar0 } def",
+       "/acc_uhat              { (\") printmchar0 } def",
+       "/tr                    { (*) printmchar0 } def",
+       "/leg                   { (,) printmchar0 } def",
+       "/rr                    { (-) printmchar0 } def",
+       "/measrpt               { (.) printmchar0 } def",
+       "/copyright             { (/) printmchar0 } def",
+       "/dim                   { (`) printmchar0 } def",
+       "/halfdim               { (') printmchar0 } def",
+       "/triangle              { (^) printmchar0 } def",
+       "/qwhrest               { (&) printmchar0 } def",
+       "/ll1rest               { (!) printmchar0 } def",
+       "/ll2rest               { (@) printmchar0 } def",
+       "/dwhrighttriangle      { (A) printmchar1 } def",
+       "/righttriangle         { (B) printmchar1 } def",
+       "/fillrighttriangle     { (C) printmchar1 } def",
+       "/udwhrighttriangle     { (D) printmchar1 } def",
+       "/urighttriangle                { (E) printmchar1 } def",
+       "/ufillrighttriangle    { (F) printmchar1 } def",
+       "/dwhrectangle          { (G) printmchar1 } def",
+       "/rectangle             { (H) printmchar1 } def",
+       "/fillrectangle         { (I) printmchar1 } def",
+       "/dwhisostriangle       { (J) printmchar1 } def",
+       "/isostriangle          { (K) printmchar1 } def",
+       "/fillisostriangle      { (L) printmchar1 } def",
+       "/dwhpiewedge           { (M) printmchar1 } def",
+       "/piewedge              { (N) printmchar1 } def",
+       "/fillpiewedge          { (O) printmchar1 } def",
+       "/dwhsemicircle         { (P) printmchar1 } def",
+       "/semicircle            { (Q) printmchar1 } def",
+       "/fillsemicircle                { (R) printmchar1 } def",
+       "/dwhslashhead          { (S) printmchar1 } def",
+       "/slashhead             { (T) printmchar1 } def",
+       "/fillslashhead         { (U) printmchar1 } def",
+       "/blankhead             { (V) printmchar1 } def",
+       "",
+       "",
+       "% Define routines for Mup output other than music characters.",
+       "",
+       "/stepsize 3 def           % define a step size as 3 points (at default magnification)",
+       "",
+       "% x1 y1 x2 lines dist staffscale staff",
+       "%              draw a staff starting at x1, y1 and extending to x2 with \"lines\"",
+       "%              lines, 2*dist*stepsize apart, scaled by staffscale",
+       "/staff {",
+       "       /staffscale exch def",
+       "       /dist exch def",
+       "       /lines exch def",
+       "       /x2 exch def",
+       "       /y1 exch def",
+       "       /x1 exch def",
+       "       0.7 staffscale mul sb setlinewidth",
+       "       1 lines sub  2  lines 1 sub {   % loop from bottom line to top line",
+       "               dup stepsize mul staffscale mul dist mul y1 add x1 exch moveto",
+       "               stepsize mul staffscale mul dist mul y1 add x2 exch lineto stroke",
+       "       } for",
+       "} def",
+       "",
+       "% x y1 y2 bracket      draw a bracket; y1 is the top",
+       "/bracket {",
+       "       /y2 exch def",
+       "       /y1 exch def",
+       "       /x exch def",
+       "       gsave",
+       "       3 setlinewidth",
+       "       x 2 sub y1 1 add moveto",
+       "       x 2 sub y2 1 sub lineto",
+       "       stroke",
+       "       x 2 sub y1 1 add moveto",
+       "       x 1 sub y1 1 add   x 3 add y1 1 add   x 5 add y1 6 add   curveto",
+       "       x 6 add y1 5 add lineto",
+       "       x 5 add y1 2 add   x 1 add y1 2 sub   x 2 sub y1 2 sub   curveto",
+       "       fill",
+       "       x 2 sub y2 1 sub moveto",
+       "       x 1 sub y2 1 sub   x 3 add y2 1 sub   x 5 add y2 6 sub   curveto",
+       "       x 6 add y2 5 sub lineto",
+       "       x 5 add y2 2 sub   x 1 add y2 2 add   x 2 sub y2 2 add   curveto",
+       "       fill",
+       "       grestore",
+       "} def",
+       "",
+       "% x y1 y2 brace                draw a brace; y1 is the top",
+       "/brace {",
+       "       /y2 exch def",
+       "       /y1 exch def",
+       "       /x exch def",
+       "       gsave",
+       "       x 9 sub y1 y2 add 2 div translate",
+       "       /topy y1 y2 sub 2 div 1 sub def",
+       "       0 1 1 {",
+       "               pop",
+       "               %0 topy moveto 0 0 lineto stroke",
+       "               0 0 moveto",
+       "               16 topy 0.2 mul   -11 topy 0.6 mul   8 topy   curveto",
+       "               8.7 topy lineto",
+       "               -7 topy 0.7 mul   20 topy 0.3 mul   1 0   curveto",
+       "               fill",
+       "               1 -1 scale      % flip to do bottom half",
+       "       } for",
+       "       grestore",
+       "} def",
+       "",
+       "% endx endy wavy staffscale    draw a wavy line from current point to here,",
+       "%                              scaled by staffscale",
+       "/wavy {",
+       "       /staffscale exch def",
+       "       /endy exch def          % define the end point of the line",
+       "       /endx exch def",
+       "       currentpoint            % line starts at current point",
+       "       /begy exch def          % define the beginning point of the line",
+       "       /begx exch def",
+       "       gsave",
+       "       /dx endx begx sub def   % find delta x and delta y",
+       "       /dy endy begy sub def",
+       "       /r dx dx mul dy dy mul add sqrt def     % hypotenuse",
+       "       /theta dy dx atan def                   % angle with positive x axis",
+       "       begx begy translate     % change axes so that we can draw the line",
+       "       theta rotate            %   from (0, 0) to (r, 0)",
+       "       staffscale staffscale scale     % scale everything by staffscale",
+       "       /scaledr r staffscale div def   % but scale r in reverse to keep length",
+       "",
+       "       % Each outer loop draws one cycle of the squiggle.  It continues until",
+       "       % we are at or beyond the desired end point.",
+       "       0 0 moveto",
+       "       0 6 scaledr {",
+       "               gsave",
+       "               % first loop draws left half of squiggle; second draws right",
+       "               0 1 1 {",
+       "                       0.0 0.4 moveto",
+       "                       2.0 1.9 3.4 2.3 3.9 0.0 curveto",
+       "                       2.1 0.0 lineto",
+       "                       1.9 0.8 1.4 0.7 0.0 -0.4 curveto",
+       "                       fill",
+       "                       pop 180 rotate -6 0 translate",
+       "               } for",
+       "               grestore",
+       "",
+       "               pop 6 0 translate       % shift axes right one squiggle",
+       "       } for",
+       "",
+       "       grestore",
+       "} def",
+       "",
+       "% x y space frets fretno numvert curvel curver [ f1 f2 f3 ... ] grid",
+       "%                              print a guitar grid diagram",
+       "/grid {",
+       "       /grid_positions exch def % 0=\"o\", -1=\"x\", -2=nothing, positive=dot",
+       "       /curver exch def        % right string for curve, 0 if none",
+       "       /curvel exch def        % left string for curve, 0 if none",
+       "       /numvert exch def       % vertical position to print fretno, 0 if none",
+       "       /fretno exch def        % fret no. to print at right, 0 if none",
+       "       /frets exch def         % number of fret lines",
+       "       /space exch def         % points between two neighboring lines",
+       "       /y exch def             % y coord of top fret line",
+       "       /x exch def             % x coord of left strings",
+       "",
+       "       gsave",
+       "       /strings grid_positions length def      % number of strings",
+       "       /lmarky 0.4 space mul y add def         % lowest Y of a \"o\" or \"x\"",
+       "       space 10 div setlinewidth",
+       "       2 setlinecap",
+       "",
+       "       % draw the lines of the grid",
+       "       0  1  strings 1 sub {   % loop from left string to right string",
+       "               dup space mul x add y moveto",
+       "               space mul x add frets 1 sub space mul y exch sub lineto stroke",
+       "       } for",
+       "       0  -1  1 frets sub {    % loop from top fret (nut) to bottom fret",
+       "               dup space mul y add x exch moveto",
+       "               space mul y add strings 1 sub space mul x add exch lineto stroke",
+       "       } for",
+       "",
+       "       % draw the curved line if there is one",
+       "       curvel 0 gt {",
+       "               % within strings curvel to curver, find smallest positive fret",
+       "               /minfret 1000 def",
+       "               curvel 1 curver {",
+       "                       /strno exch def",
+       "                       /grid_p grid_positions strno 1 sub get def",
+       "                       grid_p 0 gt grid_p minfret lt and {",
+       "                               /minfret grid_p def",
+       "                       } if",
+       "               } for",
+       "",
+       "               % if curve goes above top fret, other marks must be higher",
+       "               minfret 1 eq {",
+       "                       /hmarky 1.2 space mul y add def",
+       "               } {",
+       "                       /hmarky lmarky def",
+       "               } ifelse",
+       "",
+       "               /strdiff curver curvel sub def",
+       "               space 8 div setlinewidth",
+       "",
+       "               % set endpoint coords of curve; higher if curve is short",
+       "               /curvex1 curvel 1 sub space mul x add def",
+       "               /curvex2 curver 1 sub space mul x add def",
+       "               /curvey 1 minfret sub space mul y add def",
+       "               strdiff 3 lt {",
+       "                       /curvey 0.2 strdiff div space mul curvey add def",
+       "               } if",
+       "",
+       "               % move to left end, set other points, draw curve",
+       "               curvex1 curvey moveto",
+       "",
+       "               curvex1 curvex2 curvex1 sub 3 div add",
+       "               curvey space 0.4 strdiff sqrt mul mul add",
+       "",
+       "               curvex2 curvex2 curvex1 sub 3 div sub",
+       "               curvey space 0.4 strdiff sqrt mul mul add",
+       "",
+       "               curvex2 curvey curveto stroke",
+       "       } if",
+       "",
+       "       space 10 div setlinewidth",
+       "",
+       "       % draw dots and x and o marks",
+       "       0  1  strings 1 sub {   % loop from left string to right string",
+       "               /strno exch def % first string is 0",
+       "               /grid_p grid_positions strno get def",
+       "               /strx strno space mul x add def",
+       "",
+       "               % set Y of mark higher if curved line covers this string",
+       "               strno 1 add curvel ge  strno 1 add curver le  and {",
+       "                       /marky hmarky def",
+       "               } {",
+       "                       /marky lmarky def",
+       "               } ifelse",
+       "",
+       "               grid_p -1 eq {          % draw an X above the string",
+       "                       /xhwid space 3 div def",
+       "                       strx xhwid sub marky xhwid sub moveto",
+       "                       strx xhwid add marky xhwid add lineto stroke",
+       "                       strx xhwid sub marky xhwid add moveto",
+       "                       strx xhwid add marky xhwid sub lineto stroke",
+       "               } if",
+       "               grid_p 0 eq {           % draw a circle above the string",
+       "                       strx marky space 0.3 mul 0 360 arc stroke",
+       "               } if",
+       "               grid_p 1 ge {           % draw a dot by the proper fret",
+       "                       strx y grid_p space mul sub space 3 div add",
+       "                       space 3 div 0 360 arc fill",
+       "               } if",
+       "       } for",
+       "",
+       "       % print \"X fr\" if requested",
+       "       fretno 0 gt {",
+       "               /Palatino-Roman findfont space 1.9 mul scalefont setfont",
+       "               x strings 0.5 sub space mul add",
+       "               y space numvert 0.3 add mul sub moveto",
+       "               fretno 2 string cvs show ( fr) show",
+       "       } if",
+       "       grestore",
+       "} def",
+       "",
+       "% x1 y1 x2 y2 whitebox         draw a white rectangle with opposite",
+       "%                              corners of (x1,y1) and (x2,y2)",
+       "/whitebox {",
+       "       /y2 exch def",
+       "       /x2 exch def",
+       "       /y1 exch def",
+       "       /x1 exch def",
+       "       1.0 setgray",
+       "       newpath",
+       "       x1 y1 moveto",
+       "       x1 y2 lineto",
+       "       x2 y2 lineto",
+       "       x2 y1 lineto",
+       "       closepath",
+       "       fill",
+       "       stroke",
+       "       0.0 setgray",
+       "} def",
+       "",
+       "",
+       "/LineNum 0 def",
+       "/InputFile (unknown) def",
+       "",
+       "% n linenum",
+       "/linenum {",
+       "       /LineNum exch def",
+       "} def",
+       "",
+       "% (inputfilename) inputfile",
+       "/inputfile {",
+       "       /InputFile exch def",
+       "} def",
+       "",
+       "% find size of Encoding and make a dictionary",
+       "% that size for bounding box information",
+       "mfont0 begin",
+       "/dictsize Encoding length def",
+       "mfont0 /Mcbbox0 dictsize dict put",
+       "",
+       "% temporarily redefine printmchar0 to get code",
+       "5 dict begin",
+       "/printmchar0 { {} forall } def",
+       "",
+       "Mcbbox0 Encoding 128rest get [ 1140.0 0 -515.0 -1515.0 615.0 1685.0 ] put",
+       "Mcbbox0 Encoding 16rest get [ 830.0 0 -415.0 -1215.0 405.0 485.0 ] put",
+       "Mcbbox0 Encoding 1n get [ 1080.0 0 -535.0 -335.0 535.0 345.0 ] put",
+       "Mcbbox0 Encoding 1rest get [ 1540.0 0 -765.0 -5.0 765.0 645.0 ] put",
+       "Mcbbox0 Encoding 256rest get [ 1250.0 0 -625.0 -2115.0 615.0 1685.0 ] put",
+       "Mcbbox0 Encoding 2n get [ 880.0 0 -435.0 -345.0 435.0 355.0 ] put",
+       "Mcbbox0 Encoding 2rest get [ 1540.0 0 -765.0 -45.0 765.0 315.0 ] put",
+       "Mcbbox0 Encoding 32rest get [ 940.0 0 -415.0 -1215.0 515.0 1085.0 ] put",
+       "Mcbbox0 Encoding 4n get [ 840.0 0 -415.0 -335.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding 4rest get [ 650.0 0 -345.0 -885.0 295.0 985.0 ] put",
+       "Mcbbox0 Encoding 64rest get [ 1040.0 0 -515.0 -1515.0 515.0 1085.0 ] put",
+       "Mcbbox0 Encoding 8rest get [ 750.0 0 -305.0 -615.0 435.0 485.0 ] put",
+       "Mcbbox0 Encoding acc_gt get [ 1170.0 0 -525.0 -335.0 635.0 345.0 ] put",
+       "Mcbbox0 Encoding acc_hat get [ 780.0 0 -385.0 -5.0 385.0 875.0 ] put",
+       "Mcbbox0 Encoding acc_uhat get [ 780.0 0 -385.0 -5.0 385.0 875.0 ] put",
+       "Mcbbox0 Encoding begped get [ 470.0 0 -245.0 -45.0 215.0 615.0 ] put",
+       "Mcbbox0 Encoding cclef get [ 1540.0 0 -765.0 -1245.0 765.0 1255.0 ] put",
+       "Mcbbox0 Encoding coda get [ 1640.0 0 -815.0 -855.0 815.0 865.0 ] put",
+       "Mcbbox0 Encoding com get [ 1100.0 0 -575.0 -635.0 515.0 655.0 ] put",
+       "Mcbbox0 Encoding copyright get [ 920.0 0 -455.0 -45.0 455.0 855.0 ] put",
+       "Mcbbox0 Encoding cut get [ 1100.0 0 -575.0 -905.0 515.0 915.0 ] put",
+       "Mcbbox0 Encoding dblflat get [ 1170.0 0 -595.0 -405.0 565.0 1115.0 ] put",
+       "Mcbbox0 Encoding dblsharp get [ 720.0 0 -355.0 -345.0 355.0 355.0 ] put",
+       "Mcbbox0 Encoding dblwhole get [ 1090.0 0 -535.0 -605.0 545.0 615.0 ] put",
+       "Mcbbox0 Encoding diamond get [ 880.0 0 -435.0 -305.0 435.0 315.0 ] put",
+       "Mcbbox0 Encoding dim get [ 540.0 0 -265.0 -5.0 265.0 905.0 ] put",
+       "Mcbbox0 Encoding dn128n get [ 840.0 0 -415.0 -3545.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding dn16n get [ 840.0 0 -415.0 -2105.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding dn256n get [ 840.0 0 -415.0 -3965.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding dn2n get [ 880.0 0 -435.0 -2105.0 435.0 355.0 ] put",
+       "Mcbbox0 Encoding dn32n get [ 840.0 0 -415.0 -2585.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding dn4n get [ 840.0 0 -415.0 -2105.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding dn64n get [ 840.0 0 -415.0 -3065.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding dn8n get [ 840.0 0 -415.0 -2105.0 415.0 345.0 ] put",
+       "Mcbbox0 Encoding dnbow get [ 810.0 0 -395.0 -5.0 405.0 915.0 ] put",
+       "Mcbbox0 Encoding dnflag get [ 640.0 0 -335.0 -1705.0 295.0 15.0 ] put",
+       "Mcbbox0 Encoding dot get [ 280.0 0 -135.0 -125.0 135.0 135.0 ] put",
+       "Mcbbox0 Encoding dwhdiamond get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
+       "Mcbbox0 Encoding dwhrest get [ 340.0 0 -165.0 -5.0 165.0 615.0 ] put",
+       "Mcbbox0 Encoding endped get [ 480.0 0 -215.0 -45.0 255.0 615.0 ] put",
+       "Mcbbox0 Encoding fclef get [ 1840.0 0 -1015.0 -1705.0 815.0 655.0 ] put",
+       "Mcbbox0 Encoding ferm get [ 1640.0 0 -815.0 -5.0 815.0 1015.0 ] put",
+       "Mcbbox0 Encoding filldiamond get [ 880.0 0 -435.0 -305.0 435.0 315.0 ] put",
+       "Mcbbox0 Encoding flat get [ 580.0 0 -295.0 -405.0 275.0 1115.0 ] put",
+       "Mcbbox0 Encoding gclef get [ 1790.0 0 -915.0 -1605.0 865.0 3015.0 ] put",
+       "Mcbbox0 Encoding halfdim get [ 760.0 0 -375.0 -5.0 375.0 1015.0 ] put",
+       "Mcbbox0 Encoding invmor get [ 1320.0 0 -655.0 -455.0 655.0 465.0 ] put",
+       "Mcbbox0 Encoding invturn get [ 1300.0 0 -645.0 -335.0 645.0 345.0 ] put",
+       "Mcbbox0 Encoding leg get [ 840.0 0 -415.0 -55.0 415.0 65.0 ] put",
+       "Mcbbox0 Encoding ll1rest get [ 840.0 0 -415.0 -5.0 415.0 625.0 ] put",
+       "Mcbbox0 Encoding ll2rest get [ 840.0 0 -415.0 -15.0 415.0 315.0 ] put",
+       "Mcbbox0 Encoding measrpt get [ 1300.0 0 -645.0 -675.0 645.0 685.0 ] put",
+       "Mcbbox0 Encoding mor get [ 1320.0 0 -655.0 -285.0 655.0 295.0 ] put",
+       "Mcbbox0 Encoding nat get [ 520.0 0 -255.0 -855.0 255.0 865.0 ] put",
+       "Mcbbox0 Encoding pedal get [ 1040.0 0 -515.0 -45.0 515.0 675.0 ] put",
+       "Mcbbox0 Encoding qwhrest get [ 340.0 0 -165.0 -605.0 165.0 615.0 ] put",
+       "Mcbbox0 Encoding rr get [ 940.0 0 -465.0 -25.0 465.0 1035.0 ] put",
+       "Mcbbox0 Encoding sharp get [ 700.0 0 -345.0 -935.0 345.0 945.0 ] put",
+       "Mcbbox0 Encoding sign get [ 1340.0 0 -665.0 -825.0 665.0 835.0 ] put",
+       "Mcbbox0 Encoding tr get [ 1440.0 0 -715.0 -5.0 715.0 1015.0 ] put",
+       "Mcbbox0 Encoding triangle get [ 800.0 0 -395.0 -45.0 395.0 785.0 ] put",
+       "Mcbbox0 Encoding turn get [ 1300.0 0 -645.0 -325.0 645.0 345.0 ] put",
+       "Mcbbox0 Encoding uferm get [ 1640.0 0 -815.0 -5.0 815.0 1015.0 ] put",
+       "Mcbbox0 Encoding up128n get [ 1390.0 0 -745.0 -335.0 635.0 3555.0 ] put",
+       "Mcbbox0 Encoding up16n get [ 1390.0 0 -745.0 -335.0 635.0 2115.0 ] put",
+       "Mcbbox0 Encoding up256n get [ 1390.0 0 -745.0 -335.0 635.0 3975.0 ] put",
+       "Mcbbox0 Encoding up2n get [ 880.0 0 -435.0 -345.0 435.0 2115.0 ] put",
+       "Mcbbox0 Encoding up32n get [ 1390.0 0 -745.0 -335.0 635.0 2595.0 ] put",
+       "Mcbbox0 Encoding up4n get [ 850.0 0 -415.0 -335.0 425.0 2115.0 ] put",
+       "Mcbbox0 Encoding up64n get [ 1390.0 0 -745.0 -335.0 635.0 3075.0 ] put",
+       "Mcbbox0 Encoding up8n get [ 1390.0 0 -745.0 -335.0 635.0 2115.0 ] put",
+       "Mcbbox0 Encoding upbow get [ 720.0 0 -355.0 -115.0 355.0 925.0 ] put",
+       "Mcbbox0 Encoding upflag get [ 640.0 0 -335.0 -5.0 295.0 1715.0 ] put",
+       "Mcbbox0 Encoding uwedge get [ 340.0 0 -165.0 -5.0 165.0 505.0 ] put",
+       "Mcbbox0 Encoding wedge get [ 340.0 0 -165.0 5.0 165.0 515.0 ] put",
+       "Mcbbox0 Encoding xnote get [ 880.0 0 -435.0 -365.0 435.0 375.0 ] put",
+       "",
+       "end",
+       "end",
+       "",
+       "/Mfont0 mfont0 definefont",
+       "",
+       "",
+       "% find size of Encoding and make a dictionary",
+       "% that size for bounding box information",
+       "mfont1 begin",
+       "/dictsize Encoding length def",
+       "mfont1 /Mcbbox1 dictsize dict put",
+       "",
+       "% temporarily redefine printmchar1 to get code",
+       "5 dict begin",
+       "/printmchar1 { {} forall } def",
+       "",
+       "Mcbbox1 Encoding blankhead get [ 880.0 0 -435.0 -275.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding dwhisostriangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
+       "Mcbbox1 Encoding dwhpiewedge get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
+       "Mcbbox1 Encoding dwhrectangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
+       "Mcbbox1 Encoding dwhrighttriangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
+       "Mcbbox1 Encoding dwhsemicircle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
+       "Mcbbox1 Encoding dwhslashhead get [ 1410.0 0 -695.0 -725.0 705.0 735.0 ] put",
+       "Mcbbox1 Encoding fillisostriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
+       "Mcbbox1 Encoding fillpiewedge get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding fillrectangle get [ 880.0 0 -435.0 -275.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding fillrighttriangle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding fillsemicircle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding fillslashhead get [ 1300.0 0 -645.0 -675.0 645.0 685.0 ] put",
+       "Mcbbox1 Encoding isostriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
+       "Mcbbox1 Encoding piewedge get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding rectangle get [ 880.0 0 -435.0 -275.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding righttriangle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding semicircle get [ 880.0 0 -435.0 -305.0 435.0 285.0 ] put",
+       "Mcbbox1 Encoding slashhead get [ 1380.0 0 -685.0 -725.0 685.0 735.0 ] put",
+       "Mcbbox1 Encoding udwhrighttriangle get [ 950.0 0 -465.0 -605.0 475.0 615.0 ] put",
+       "Mcbbox1 Encoding ufillrighttriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
+       "Mcbbox1 Encoding urighttriangle get [ 880.0 0 -435.0 -275.0 435.0 315.0 ] put",
+       "",
+       "end",
+       "end",
+       "",
+       "/Mfont1 mfont1 definefont",
+       "",
+       "/makeExtEncoding {",
+       "       /extendedencoding 256 array def",
+       "       StandardEncoding extendedencoding copy",
+       "       extendedencoding 32 /exclamdown put",
+       "       extendedencoding 33 /cent put",
+       "       extendedencoding 34 /sterling put",
+       "       extendedencoding 35 /yen put",
+       "       extendedencoding 36 /quotedblleft put",
+       "       extendedencoding 37 /guillemotleft put",
+       "       extendedencoding 38 /guillemotright put",
+       "       extendedencoding 39 /guilsinglleft put",
+       "       extendedencoding 40 /guilsinglright put",
+       "       extendedencoding 41 /dagger put",
+       "       extendedencoding 42 /daggerdbl put",
+       "       extendedencoding 43 /bullet put",
+       "       extendedencoding 44 /quotedblbase put",
+       "       extendedencoding 45 /quotedblright put",
+       "       extendedencoding 46 /questiondown put",
+       "       extendedencoding 47 /grave put",
+       "       extendedencoding 48 /acute put",
+       "       extendedencoding 49 /macron put",
+       "       extendedencoding 50 /breve put",
+       "       extendedencoding 51 /dotaccent put",
+       "       extendedencoding 52 /dieresis put",
+       "       extendedencoding 53 /ring put",
+       "       extendedencoding 54 /cedilla put",
+       "       extendedencoding 55 /hungarumlaut put",
+       "       extendedencoding 56 /ogonek put",
+       "       extendedencoding 57 /caron put",
+       "       extendedencoding 58 /emdash put",
+       "       extendedencoding 59 /AE put",
+       "       extendedencoding 60 /ae put",
+       "       extendedencoding 61 /ordfeminine put",
+       "       extendedencoding 62 /ordmasculine put",
+       "       extendedencoding 63 /Lslash put",
+       "       extendedencoding 64 /lslash put",
+       "       extendedencoding 65 /Oslash put",
+       "       extendedencoding 66 /oslash put",
+       "       extendedencoding 67 /OE put",
+       "       extendedencoding 68 /oe put",
+       "       extendedencoding 69 /dotlessi put",
+       "       extendedencoding 70 /germandbls put",
+       "       extendedencoding 71 /Aacute put",
+       "       extendedencoding 72 /aacute put",
+       "       extendedencoding 73 /Acircumflex put",
+       "       extendedencoding 74 /acircumflex put",
+       "       extendedencoding 75 /Adieresis put",
+       "       extendedencoding 76 /adieresis put",
+       "       extendedencoding 77 /Agrave put",
+       "       extendedencoding 78 /agrave put",
+       "       extendedencoding 79 /Aring put",
+       "       extendedencoding 80 /aring put",
+       "       extendedencoding 81 /Atilde put",
+       "       extendedencoding 82 /atilde put",
+       "       extendedencoding 83 /Ccedilla put",
+       "       extendedencoding 84 /ccedilla put",
+       "       extendedencoding 85 /Eacute put",
+       "       extendedencoding 86 /eacute put",
+       "       extendedencoding 87 /Ecircumflex put",
+       "       extendedencoding 88 /ecircumflex put",
+       "       extendedencoding 89 /Edieresis put",
+       "       extendedencoding 90 /edieresis put",
+       "       extendedencoding 91 /Egrave put",
+       "       extendedencoding 92 /egrave put",
+       "       extendedencoding 93 /Iacute put",
+       "       extendedencoding 94 /iacute put",
+       "       extendedencoding 95 /Icircumflex put",
+       "       extendedencoding 96 /icircumflex put",
+       "       extendedencoding 97 /Idieresis put",
+       "       extendedencoding 98 /idieresis put",
+       "       extendedencoding 99 /Igrave put",
+       "       extendedencoding 100 /igrave put",
+       "       extendedencoding 101 /Ntilde put",
+       "       extendedencoding 102 /ntilde put",
+       "       extendedencoding 103 /Oacute put",
+       "       extendedencoding 104 /oacute put",
+       "       extendedencoding 105 /Ocircumflex put",
+       "       extendedencoding 106 /ocircumflex put",
+       "       extendedencoding 107 /Odieresis put",
+       "       extendedencoding 108 /odieresis put",
+       "       extendedencoding 109 /Ograve put",
+       "       extendedencoding 110 /ograve put",
+       "       extendedencoding 111 /Otilde put",
+       "       extendedencoding 112 /otilde put",
+       "       extendedencoding 113 /Scaron put",
+       "       extendedencoding 114 /scaron put",
+       "       extendedencoding 115 /Uacute put",
+       "       extendedencoding 116 /uacute put",
+       "       extendedencoding 117 /Ucircumflex put",
+       "       extendedencoding 118 /ucircumflex put",
+       "       extendedencoding 119 /Udieresis put",
+       "       extendedencoding 120 /udieresis put",
+       "       extendedencoding 121 /Ugrave put",
+       "       extendedencoding 122 /ugrave put",
+       "       extendedencoding 123 /Ydieresis put",
+       "       extendedencoding 124 /ydieresis put",
+       "       extendedencoding 125 /Zcaron put",
+       "       extendedencoding 126 /zcaron put",
+       "       extendedencoding 127 /space put",
+       "} def",
+       "",
+       "/makeExtendedFont {",
+       "       findfont",
+       "       dup length dict /newdict exch def",
+       "       { 1 index /FID ne",
+       "               { newdict 3 1 roll put }",
+       "               { pop pop }",
+       "               ifelse",
+       "       } forall",
+       "       newdict /Encoding extendedencoding put",
+       "       newdict /UniqueID newdict /UniqueID get 1 add put",
+       "       newdict definefont pop",
+       "} def",
+(char *) 0
+};
+
+/* generate the PostScript prolog */
+
+void
+ps_prolog()
+{
+       int line;
+
+       for (line = 0; prolog_text[line] != (char *) 0; line++) {
+               (void) printf("%s\n", prolog_text[line]);
+       }
+}