]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 0.0.54 release/0.0.54
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 22 Apr 1997 15:06:31 +0000 (17:06 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 22 Apr 1997 15:06:31 +0000 (17:06 +0200)
92 files changed:
.dstreamrc
.version
ANNOUNCE
AUTHORS.text [new file with mode: 0644]
COPYING
Documentation/INSTALL.pod
Documentation/Makefile
INSTALL.text
NEWS
TODO
bin/Makefile
bin/release
bin/show-latest [new file with mode: 0644]
configure
configure.in
flower/Makefile
input/maartje.ly
input/wohltemperirt.ly
lily/.version
lily/Stable.make
lily/break.cc
lily/lexer.l
lily/linespace.cc
lily/lyric-register.cc
lily/note-column.cc
lily/p-col.cc
lily/p-score.cc
make/Configure_variables.make.in
make/Makefile
make/Targets.make
make/Toplevel.make.in
make/Variables.make
make/lilypond.lsm
make/lilypond.spec
make/lilypond.spec.in
mf/Makefile [new file with mode: 0644]
mf/README [new file with mode: 0644]
mf/musexgen.mf [new file with mode: 0644]
mf/musix11.mf [new file with mode: 0644]
mf/musix13.mf [new file with mode: 0644]
mf/musix16.mf [new file with mode: 0644]
mf/musix20.mf [new file with mode: 0644]
mf/musix24.mf [new file with mode: 0644]
mf/musix25.mf [new file with mode: 0644]
mf/musix29.mf [new file with mode: 0644]
mf/musixgen.mf [new file with mode: 0644]
mf/musixsps.mf [new file with mode: 0644]
mf/musixspx.mf [new file with mode: 0644]
mf/xdrawsl.mf [new file with mode: 0644]
mf/xdrawzl.mf [new file with mode: 0644]
mf/xgreg11.mf [new file with mode: 0644]
mf/xgreg13.mf [new file with mode: 0644]
mf/xgreg16.mf [new file with mode: 0644]
mf/xgreg20.mf [new file with mode: 0644]
mf/xgreg24.mf [new file with mode: 0644]
mf/xgreg25.mf [new file with mode: 0644]
mf/xgreg29.mf [new file with mode: 0644]
mf/xgreggen.mf [new file with mode: 0644]
mf/xhsld16.mf [new file with mode: 0644]
mf/xhsld20.mf [new file with mode: 0644]
mf/xhslu16.mf [new file with mode: 0644]
mf/xhslu20.mf [new file with mode: 0644]
mf/xsld11.mf [new file with mode: 0644]
mf/xsld13.mf [new file with mode: 0644]
mf/xsld16.mf [new file with mode: 0644]
mf/xsld20.mf [new file with mode: 0644]
mf/xsld24.mf [new file with mode: 0644]
mf/xsld29.mf [new file with mode: 0644]
mf/xslgen.mf [new file with mode: 0644]
mf/xslhd.mf [new file with mode: 0644]
mf/xslhd11.mf [new file with mode: 0644]
mf/xslhd13.mf [new file with mode: 0644]
mf/xslhd16.mf [new file with mode: 0644]
mf/xslhd20.mf [new file with mode: 0644]
mf/xslhd24.mf [new file with mode: 0644]
mf/xslhd29.mf [new file with mode: 0644]
mf/xslhu.mf [new file with mode: 0644]
mf/xslhu11.mf [new file with mode: 0644]
mf/xslhu13.mf [new file with mode: 0644]
mf/xslhu16.mf [new file with mode: 0644]
mf/xslhu20.mf [new file with mode: 0644]
mf/xslhu24.mf [new file with mode: 0644]
mf/xslhu29.mf [new file with mode: 0644]
mf/xslhz20.mf [new file with mode: 0644]
mf/xslu11.mf [new file with mode: 0644]
mf/xslu13.mf [new file with mode: 0644]
mf/xslu16.mf [new file with mode: 0644]
mf/xslu20.mf [new file with mode: 0644]
mf/xslu24.mf [new file with mode: 0644]
mf/xslu29.mf [new file with mode: 0644]
mf/xslz20.mf [new file with mode: 0644]
mf/xtie20.mf [new file with mode: 0644]

index c992908ec43a1c50b96cd66fd5c80ee8de7330da..7fd7b97e0a5054e9ab96769883fd89e9d72860ad 100644 (file)
@@ -3,13 +3,13 @@ Dstream                       1
 
 File_path              1
 My_lily_lexer          1
-PCol                   1
+PCol                   0
 Score_column           1
 Ineq_constrained_qp    1
 Spacing_problem        1
 Colinfo                        1
 Mixed_qp               1
-PScore                 1
+PScore                 0
 Idealspacing           1
 
 # yydebug
index 09683a7054e49fd381abc29eb49728936bdd1f92..187deb764c6dcbb67425240646152ea88d86fa66 100644 (file)
--- a/.version
+++ b/.version
@@ -1,6 +1,6 @@
 TOPLEVEL_MAJOR_VERSION = 0
 TOPLEVEL_MINOR_VERSION = 0
-TOPLEVEL_PATCH_LEVEL = 53
+TOPLEVEL_PATCH_LEVEL = 54
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
 
index b4aa95f949635e3a1c25f4d56479c2b52d4b059b..5e446d8f0ff517f41d83514a4c355ddc77e06b26 100644 (file)
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -49,12 +49,11 @@ for compilation you need
        GNU C++ v2.7 or better, with libg++ installed.
        GNU make. 
        Flex (2.5.1 or better). 
-       Bison.
+       Bison. (1.25 or better)
 
 for running you need
 
        TeX
-       The MusixTeX fonts. (I use those  in MusixTeX T.59)
 
 FEATURES
 
@@ -69,7 +68,7 @@ Multiple voices within one staff; beams optionally shared between
 voices.  Multiple scores within one input file. Each score is output
 to a different file.
 
-Beams, slurs, chords, super/subscripts (accents and text), triplets,
+Beams, slurs, chords, super/subscripts (accents and text), 
 general n-plet (triplet, quadruplets, etc.), lyrics, transposition
 dynamics (both absolute and hairpin style) clef changes, meter
 changes, cadenza-mode, key changes, repeat bars
diff --git a/AUTHORS.text b/AUTHORS.text
new file mode 100644 (file)
index 0000000..0e38986
--- /dev/null
@@ -0,0 +1,66 @@
+
+
+
+AUTHORS(1)            LilyPond documentation           AUTHORS(1)
+
+
+N\bN\bN\bNA\bA\bA\bAM\bM\bM\bME\bE\bE\bE
+       AUTHORS - who did what on LilyPond?
+
+D\bD\bD\bDE\bE\bE\bES\bS\bS\bSC\bC\bC\bCR\bR\bR\bRI\bI\bI\bIP\bP\bP\bPT\bT\bT\bTI\bI\bI\bIO\bO\bO\bON\bN\bN\bN
+       This file lists authors of LilyPond, and what they wrote.
+
+       +\bo   Han-Wen Nienhuys <hanwen@stack.nl>
+
+           Main author, all files files except mentioned below
+
+       +\bo   Jan Nieuwenhuizen <jan@digicash.com>
+
+           lily/midi-*, mi2mu/*, flower/string.cc, make/*.make,
+           Documentation/mudela.pod lib/*source-file*,
+           lib/duration.cc, lib/source, flower/*list*
+
+           and corresponding header files.
+
+       +\bo   Mats Bengtsson <matsb@s3.kth.se>, parts of clef-
+           reg.cc, clef-item.cc testing, general comments.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+21/Apr/97                LilyPond 0.0.54                        1
+
+
diff --git a/COPYING b/COPYING
index 6bf77451b9ae2e054e92d3f9b751b2029c556d9a..54b93e6973e7ff749dbf4e46a5d115e9eba90009 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,6 +1,10 @@
+This license applies to all files except:
 
-This license applies to all files except the included input files
-which explicitly state a different copyright
+       - the included input files which explicitly state a different
+copyright
+
+       - the MetaFont sources, found in the subdirectory mf/. See
+mf/README.
 
 
                    GNU GENERAL PUBLIC LICENSE
index d5920a70ab02a09e353c4934a4c01944234e2de1..86eea36f1f7c0f29281c140408f272b1edb92323 100644 (file)
@@ -45,7 +45,7 @@ Flex (2.5.1 or better).
 
 =item *
 
-Bison.
+Bison. (Version 1.25 or better)
 
 =back
 
@@ -97,6 +97,8 @@ B<--help>. If you are not root, you will probably have to make it with
 
        configure --prefix=/home/me_myself_and_I/
 
+In this case, you will have to set MFINPUTS, and TEINPUTS accordingly.
+
 If you want to install GNU LilyPond in F</usr/local>, and your TeX has
 no default hooks for local stuff (mine is broken too), you can do:
 
@@ -104,7 +106,7 @@ no default hooks for local stuff (mine is broken too), you can do:
 
 Since GNU LilyPond currently is beta, you are advised to also use
 
-       --enable-debug
+       --enable-debugging
        --enable-checking
 
 other options include:
@@ -116,6 +118,7 @@ other options include:
        --enable-tex-prefix
        --enable-tex-dir
 
+All options are documented in the F<configure> help
 The option B<--enable-optimise> is recommended for Real Life usage.
 
 If you do
@@ -132,8 +135,32 @@ If you have done a successful C<make>, then a simple
 
        make install
 
-should do the trick. Install the musixtex fonts in a directory which
-TeX and MF knows. Do not forget to rehash TeX (if applicable)
+should do the trick. 
+
+[todo]
+
+Install the musixtex fonts in a directory which TeX and MF knows (if
+you are root, look for a directory which contains the directories with
+AMS and CM source (*.mf) files. Create a subdir lilypond or musixtex
+and copy the fonts into that). Do not forget to rehash TeX (if
+applicable)
+
+Example: my fonts are in F</usr/local/lib/texfonts/musixtex/>, and I
+have a symlink pointing to that in
+F</usr/lib/texmf/texmf/fonts/source/public/>
+
+=head1 CAVEATS
+
+
+
+=over 5
+
+=item *
+
+The -O2 option to gcc triggers a gcc bug on DEC Alpha in dstream.cc. You
+should turn off this flag for this file.
+
+=back
 
 =head1 RUNNING
 
index b9df4425218fe337cc2ff0d222e3d700c1fe2680..85248070ff67acb5fbf8762b49d98deaa000f4a0 100644 (file)
@@ -49,13 +49,21 @@ include ./$(depth)/make/Rules.make
 
 localclean:
        rm -f out/*
-       rm -f $(TEXTFILES) $(HTMLFILES) $(GROFFFILES) $(HTMLFILES)
+       rm -f $(TEXTFILES) $(HTMLFILES) $(GROFFFILES)
+
+MAN1FILES = lilypond convert-mudela
+MAN1GROFF = $(addprefix $(outdir)/, $(addsuffix .1,$(MAN1FILES)))
+
+bla:
+       echo $(MANGROFF)
+       echo $(MANFILES)
 
 localinstall: $(outdir)/lilypond.1 $(outdir)/mudela.5
        $(INSTALL) -d $(mandir)/man5
        $(INSTALL) -d $(mandir)/man1
-       $(INSTALL) -m 755 $(outdir)/lilypond.1 $(mandir)/man1
+       $(INSTALL) -m 755 $(MAN1GROFF) $(mandir)/man1
        $(INSTALL) -m 755 $(outdir)/mudela.5 $(mandir)/man5
 
 localuninstall:
        rm -f $(mandir)/man1/lilypond.1
+       rm -f $(mandir)/man1/convert-mudela.1
index 46c552aeb59bfbc25fb0f05d065a2496d5f4317f..17819376c67594aa9871278465230a03160d644f 100644 (file)
@@ -38,7 +38,7 @@ P\bP\bP\bPR\bR\bR\bRE\bE\bE\bER\bR\bR\bRE\bE\bE\bEQ\bQ\bQ\bQU\bU\bU\bUI\bI\bI\bIS\bS\bS\bSI\bI\bI\bIT\bT\bT\bTE\bE
 
        +\bo    Flex (2.5.1 or better).
 
-       +\bo    Bison.
+       +\bo    Bison. (Version 1.25 or better)
 
 R\bR\bR\bRE\bE\bE\bEC\bC\bC\bCO\bO\bO\bOM\bM\bM\bMM\bM\bM\bME\bE\bE\bEN\bN\bN\bND\bD\bD\bDE\bE\bE\bED\bD\bD\bD
        +\bo    Perl.  Most scripts are written in Perl. The
@@ -61,7 +61,7 @@ C\bC\bC\bCO\bO\bO\bON\bN\bN\bNF\bF\bF\bFI\bI\bI\bIG\bG\bG\bGU\bU\bU\bUR\bR\bR\bRI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG a\b
 
 
 
-21/Apr/97                LilyPond 0.0.53                        1
+22/Apr/97                LilyPond 0.0.54                        1
 
 
 
@@ -95,6 +95,9 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
 
                configure --prefix=/home/me_myself_and_I/
 
+       In this case, you will have to set MFINPUTS, and TEINPUTS
+       accordingly.
+
        If you want to install GNU LilyPond in _\b/_\bu_\bs_\br_\b/_\bl_\bo_\bc_\ba_\bl, and
        your TeX has no default hooks for local stuff (mine is
        broken too), you can do:
@@ -104,7 +107,7 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
        Since GNU LilyPond currently is beta, you are advised to
        also use
 
-               --enable-debug
+               --enable-debugging
                --enable-checking
 
        other options include:
@@ -116,18 +119,15 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
                --enable-tex-prefix
                --enable-tex-dir
 
-       The option -\b-\b-\b--\b-\b-\b-e\be\be\ben\bn\bn\bna\ba\ba\bab\bb\bb\bbl\bl\bl\ble\be\be\be-\b-\b-\b-o\bo\bo\bop\bp\bp\bpt\bt\bt\bti\bi\bi\bim\bm\bm\bmi\bi\bi\bis\bs\bs\bse\be\be\be is recommended for Real Life
+       All options are documented in the _\bc_\bo_\bn_\bf_\bi_\bg_\bu_\br_\be help The
+       option -\b-\b-\b--\b-\b-\b-e\be\be\ben\bn\bn\bna\ba\ba\bab\bb\bb\bbl\bl\bl\ble\be\be\be-\b-\b-\b-o\bo\bo\bop\bp\bp\bpt\bt\bt\bti\bi\bi\bim\bm\bm\bmi\bi\bi\bis\bs\bs\bse\be\be\be is recommended for Real Life
        usage.
 
        If you do
 
-               make all
-
-       everything will be compiled, but nothing will be
 
 
-
-21/Apr/97                LilyPond 0.0.53                        2
+22/Apr/97                LilyPond 0.0.54                        2
 
 
 
@@ -136,6 +136,9 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
 INSTALL(1)            LilyPond documentation           INSTALL(1)
 
 
+               make all
+
+       everything will be compiled, but nothing will be
        installed.  The resulting binaries can be found in the
        subdirectory _\bb_\bi_\bn_\b/.
 
@@ -144,9 +147,26 @@ I\bI\bI\bIN\bN\bN\bNS\bS\bS\bST\bT\bT\bTA\bA\bA\bAL\bL\bL\bLL\bL\bL\bLI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG
 
                make install
 
-       should do the trick. Install the musixtex fonts in a
-       directory which TeX and MF knows. Do not forget to rehash
-       TeX (if applicable)
+       should do the trick.
+
+       [todo]
+
+       Install the musixtex fonts in a directory which TeX and MF
+       knows (if you are root, look for a directory which
+       contains the directories with AMS and CM source (*.mf)
+       files. Create a subdir lilypond or musixtex and copy the
+       fonts into that). Do not forget to rehash TeX (if
+       applicable)
+
+       Example: my fonts are in
+       _\b/_\bu_\bs_\br_\b/_\bl_\bo_\bc_\ba_\bl_\b/_\bl_\bi_\bb_\b/_\bt_\be_\bx_\bf_\bo_\bn_\bt_\bs_\b/_\bm_\bu_\bs_\bi_\bx_\bt_\be_\bx_\b/, and I have a symlink
+       pointing to that in
+       _\b/_\bu_\bs_\br_\b/_\bl_\bi_\bb_\b/_\bt_\be_\bx_\bm_\bf_\b/_\bt_\be_\bx_\bm_\bf_\b/_\bf_\bo_\bn_\bt_\bs_\b/_\bs_\bo_\bu_\br_\bc_\be_\b/_\bp_\bu_\bb_\bl_\bi_\bc_\b/
+
+C\bC\bC\bCA\bA\bA\bAV\bV\bV\bVE\bE\bE\bEA\bA\bA\bAT\bT\bT\bTS\bS\bS\bS
+       +\bo    The -O2 option to gcc triggers a gcc bug on DEC Alpha
+            in dstream.cc. You should turn off this flag for this
+            file.
 
 R\bR\bR\bRU\bU\bU\bUN\bN\bN\bNN\bN\bN\bNI\bI\bI\bIN\bN\bN\bNG\bG\bG\bG
        GNU LilyPond does use a lot of resources. For operation
@@ -171,6 +191,17 @@ R\bR\bR\bRE\bE\bE\bED\bD\bD\bDH\bH\bH\bHA\bA\bA\bAT\bT\bT\bT L\bL\bL\bLI\bI\bI\bIN\bN\bN\bNU\bU\bU\bUX\bX\bX\bX
        create an rpm as a normal user. Be sure you have a
        ~/.rpmrc, and edit the RPM-dir in _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\b._\bm_\ba_\bk_\be
 
+
+
+22/Apr/97                LilyPond 0.0.54                        3
+
+
+
+
+
+INSTALL(1)            LilyPond documentation           INSTALL(1)
+
+
 W\bW\bW\bWI\bI\bI\bIN\bN\bN\bND\bD\bD\bDO\bO\bO\bOZ\bZ\bZ\bZE\bE\bE\bE
        Windows NT:
 
@@ -187,21 +218,6 @@ P\bP\bP\bPL\bL\bL\bLA\bA\bA\bAT\bT\bT\bTF\bF\bF\bFO\bO\bO\bOR\bR\bR\bRM\bM\bM\bMS\bS\bS\bS
        GNU LilyPond (pl 0.0.39) is known to compile on the
        following platforms:
 
-
-
-
-
-
-
-21/Apr/97                LilyPond 0.0.53                        3
-
-
-
-
-
-INSTALL(1)            LilyPond documentation           INSTALL(1)
-
-
                * linux 2.0.x, g++ 2.7.2[.1]
                * aix 4.1, g++ 2.7.2
                * windows-nt 4.0, cygnus gnu-win32 beta17.1 (~=g++ 2.7.2)
@@ -243,22 +259,6 @@ A\bA\bA\bAU\bU\bU\bUT\bT\bT\bTH\bH\bH\bHO\bO\bO\bOR\bR\bR\bRS\bS\bS\bS
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-21/Apr/97                LilyPond 0.0.53                        4
+22/Apr/97                LilyPond 0.0.54                        4
 
 
diff --git a/NEWS b/NEWS
index c59f0320f34324886267e274520496eea410bf89..657fe561bcea5c69821724f07d05cb589fc83235 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+pl 54
+       - bugfix Colhpos.cc::OK assert fail.
+       - Inclusion of MusixTeX MF files, 
+       - detection of MF dir
+pl 53.hwn
+       - stacked lyrics 
+       - configure/make buglets.
+******
 pl 53
        - spurious accidental bug.
        - simultaneity check.
diff --git a/TODO b/TODO
index cf48d74f4c8c6f0d7c27a5f6c2fcc887a9aaab68..53c2457685a7e32525ecbdab45555790930ebf94 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,8 @@
 IMPORTANT
 
        * update 20 pt table
+       
+       * rename mf fonts to avoid conflicts with musixtex
 
        * decent TeX page layout
 
@@ -14,6 +16,8 @@ IMPORTANT
 
        * check return status in make_website
 
+       * tutorial
+
 This is an assorted collection of stuff that will be done, might be
 done, or is an idea that I want to think about
 
@@ -22,6 +26,10 @@ PARSER
 
 BUGS
 
+       * detect -pipe
+       
+       * redo timing stuff <-> pulk to allow \meter 2/4; e2. to work out correctly
+
        * hairpin width
 
        * help-lines for rests
@@ -32,6 +40,8 @@ BUGS
 
        * lilypond - -> crash
 
+       * wohltemperirt.ly
+
 SEVERELY LACKING:
 
        * SPEED!
@@ -98,6 +108,8 @@ SMALLISH PROJECTS
        * do conventional keys (C G A, F B E, a e fis, d as des, etc ), 
          besides lists of flats/sharps
 
+       * update for T70 fonts or newer
+
        * midi esp.: use I32 iso int where 32 bits are needed (or assumed...)
 
        * fix Staff_elem::width() derivs to use offset_
index 05214b0b58f80967618673c290ed94630dbbbb87..ed0e8522aea77c1591ca8b787de1bc72636b4732 100644 (file)
@@ -7,7 +7,7 @@ include $(depth)/make/Include.make
 # list of distribution files:
 
 SCRIPTS = clearlily cpgento genheader make_patch \
-       make_version make_website release convert-mudela
+       make_version make_website release convert-mudela show-latest
 EXTRA_DISTFILES = $(SCRIPTS)
 #
 
index 7fb658c7cb852474f3bf003dc5893efbaa7e493f..a9a70bbe73d7cea745bc3bde95a7d0eea23dae2f 100755 (executable)
@@ -1,10 +1,14 @@
 #!/bin/sh
+
+# script to automate releases
+
 grep -q  '^TOP' .version
     res=$?
 if test ! -f .version  || test $res != 0; then
     echo not in topleveldir
     exit 1
 fi    
+
 function setversion() {
 eval `sed -n 's/^\([A-Z_]*\) *= *\(.*\)$/\1=\2/p' .version`
 MJ=$TOPLEVEL_MAJOR_VERSION
@@ -23,18 +27,28 @@ echo
 echo "Current  version ("`pwd`") is $NEWVER, Last version:  $LASTVER"
 echo
 }
+
 heredir=`pwd`
-    make dist; 
-    setversion
-    LILYVER=$NEWVER
-    cp lilypond-$LILYVER.tar.gz ../releases
-    $heredir/bin/make_patch $LASTVER $NEWVER lilypond
-    gzip -f9 patch-$NEWVER
-    mv {lilypond-,patch-}*.gz ../
-cd ..
-tar cf updeet {lily,patch-}*.gz
+make dist; 
+setversion
+LILYVER=$NEWVER
+mv lilypond-$LILYVER.tar.gz ../releases
+
+cd ../test
+$heredir/bin/make_patch $LASTVER $NEWVER lilypond
+gzip -f9 patch-$NEWVER
+mv patch-$NEWVER.gz ../patches/
+
+RPMS=`find ~/rpms/ -name lilypond-$NEWVER'*'rpm`
+rm *.rpm {lilypond,patch}-*.gz
+
+if [ ! -z $RPMS ]; then
+    ln $RPMS . 
+fi
+ln ../releases/lilypond-$NEWVER.tar.gz .
+ln ../patches/patch-$NEWVER.gz .    
+
+RPMS=`echo *.rpm`
+tar cf updeet {lily,patch-}*.gz $RPMS
 tar tfv updeet
-mv patch-*gz patches/
-mv lilypond*tar.gz releases/
 
-#time make 
diff --git a/bin/show-latest b/bin/show-latest
new file mode 100644 (file)
index 0000000..7aacb57
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+$reldir="~/musix/releases";
+
+sub  cmpver 
+{      
+
+       my(@a)= split /\./,$a;
+       my(@b)= split /\./,$b;
+       
+       for $i (0,1,2) {
+           return $a[$i] <=> $b[$i] if ($a[$i] != $b[$i]);
+       }
+       return $a cmp $b;
+}
+
+my @versions;
+open LS, "ls -1 $reldir|";
+
+
+while (<LS>) {
+       
+    $_ =~ /lilypond-([^.]+\.[^.]+\.[^.]+).tar.gz/;
+    push @versions, $1;
+}
+
+
+@versions = sort cmpver @versions;
+my $last= (pop @versions);
+print $last;
+
+system "rm $reldir/zZ*";
+
+system  "> $reldir/zZ_LATEST_IS_$last";
index ee977f051b22bf1e18882563cc16aded61b1a3a4..7bb6edf9d14bf5eda63f7772d90baef5cc6bace1 100755 (executable)
--- a/configure
+++ b/configure
@@ -16,7 +16,7 @@ ac_help="$ac_help
 ac_help="$ac_help
   disable-checking       set runtime checks"
 ac_help="$ac_help
-  disable-debug          set debug info"
+  disable-debugging         set debug info"
 ac_help="$ac_help
   enable-optimise       use maximal speed optimisations"
 ac_help="$ac_help
@@ -25,6 +25,8 @@ ac_help="$ac_help
   tex-prefix=DIR  set the tex-directory to find TeX subdirectories."
 ac_help="$ac_help
   tex-dir=DIR  set the directory to put LilyPond  TeX files in."
+ac_help="$ac_help
+  mf-dir=DIR  set the directory to put LilyPond MetaFont files in."
 
 # Initialize some variables set by options.
 # The variables have the same names as the options, with
@@ -563,11 +565,9 @@ if test "${enable_checking+set}" = set; then
 fi
 
 
-
-
-# Check whether --enable-debug or --disable-debug was given.
-if test "${enable_debug+set}" = set; then
-  enableval="$enable_debug"
+# Check whether --enable-debugging or --disable-debugging was given.
+if test "${enable_debugging+set}" = set; then
+  enableval="$enable_debugging"
   debug_b=$enableval
 fi
 
@@ -604,6 +604,14 @@ else
   TEXDIR=auto 
 fi
 
+# Check whether --enable-mf-dir or --disable-mf-dir was given.
+if test "${enable_mf_dir+set}" = set; then
+  enableval="$enable_mf_dir"
+  MFDIR=$enableval
+else
+  MFDIR=auto 
+fi
+
 
 if test $profile_b = yes; then
     EXTRA_LIBES="-pg"
@@ -632,7 +640,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:636: checking for $ac_word" >&5
+echo "configure:644: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -663,7 +671,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:667: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:675: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -673,11 +681,11 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L
 cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext <<EOF
-#line 677 "configure"
+#line 685 "configure"
 #include "confdefs.h"
 main(){return(0);}
 EOF
-if { (eval echo configure:681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -697,12 +705,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:701: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:709: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:706: checking whether we are using GNU C++" >&5
+echo "configure:714: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -711,7 +719,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:723: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -726,7 +734,7 @@ if test $ac_cv_prog_gxx = yes; then
   ac_save_CXXFLAGS="$CXXFLAGS"
   CXXFLAGS=
   echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:730: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:738: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -756,7 +764,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:760: checking for $ac_word" >&5
+echo "configure:768: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -812,7 +820,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:816: checking for a BSD compatible install" >&5
+echo "configure:824: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -866,7 +874,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:870: checking for $ac_word" >&5
+echo "configure:878: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FIND'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -910,12 +918,13 @@ fi
 
 
 
+
 for ac_prog in bison
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:919: checking for $ac_word" >&5
+echo "configure:928: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -949,7 +958,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:953: checking for $ac_word" >&5
+echo "configure:962: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -983,7 +992,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:987: checking for $ac_word" >&5
+echo "configure:996: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1017,7 +1026,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1021: checking for $ac_word" >&5
+echo "configure:1030: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_PODMAN'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1053,7 +1062,7 @@ if test "x$TEXPREFIX" = xauto ; then
     
 
     echo $ac_n "checking TeX/MF root dir directory""... $ac_c" 1>&6
-echo "configure:1057: checking TeX/MF root dir directory" >&5    
+echo "configure:1066: checking TeX/MF root dir directory" >&5    
 
     find_root_prefix="$prefix"
     
@@ -1074,8 +1083,11 @@ echo "configure:1057: checking TeX/MF root dir directory" >&5
     fi
 
     find_texprefix="$find_root_prefix/$find_texpostfix"
-    TEXPREFIX='${prefix}'/"$find_texpostfix"
 
+    # only assign if variablename not empty
+    if test x != "xTEXPREFIX"; then
+       TEXPREFIX='${prefix}'/"$find_texpostfix"
+    fi
     echo "$ac_t""$find_texprefix" 1>&6
 
 
@@ -1083,29 +1095,48 @@ fi
     
 if test "x$TEXDIR" = xauto ; then
     
-
-    # do something sensible if root hasn't specced dir yet attempts install
-     test "x$find_texprefix" != x || find_texprefix="$TEXPREFIX"
-
-    echo $ac_n "checking TeX tex input directory""... $ac_c" 1>&6
-echo "configure:1092: checking TeX tex input directory" >&5    
-    find_texdir=`(cd $find_texprefix; 
-      $FIND -type d -a -name tex -print |sort|head -1|sed 's#^\./##')`
+    
+    
+    echo $ac_n "checking TeX input directory""... $ac_c" 1>&6
+echo "configure:1102: checking TeX input directory" >&5    
+    find_dirdir=`(cd $find_texprefix; 
+      $FIND ./ -type d -a -name tex -print |sort|head -1|sed 's#^\./##')`
     
 
-    if test "x$find_texdir" = x; then
-       find_texdir="/tex";
-       echo "configure: warning: Cannot determine the TeX-subdirectory. Please use --enable-tex-dir" 1>&2
+    if test "x$find_dirdir" = x; then
+       find_dirdir="/tex";
+       echo "configure: warning: Cannot determine TeX input subdirectory. Please set from command-line" 1>&2
        true
     fi
+    TEXDIR=$find_dirdir
+    echo "$ac_t""$find_texprefix/$find_dirdir" 1>&6
+
+    TEXDIR="$TEXPREFIX/$TEXDIR"
+
+fi
+
+if test "x$MFDIR" = xauto; then
+    
     
-    TEXDIR="$TEXPREFIX/$find_texdir"
     
-    echo "$ac_t""$find_texprefix/$find_texdir" 1>&6
+    echo $ac_n "checking MF input directory""... $ac_c" 1>&6
+echo "configure:1124: checking MF input directory" >&5    
+    find_dirdir=`(cd $find_texprefix; 
+      $FIND ./ -type d -a -name source -print |sort|head -1|sed 's#^\./##')`
+    
 
+    if test "x$find_dirdir" = x; then
+       find_dirdir="/source";
+       echo "configure: warning: Cannot determine MF input subdirectory. Please set from command-line" 1>&2
+       true
+    fi
+    MFDIR=$find_dirdir
+    echo "$ac_t""$find_texprefix/$find_dirdir" 1>&6
 
-fi
+    MFDIR="$TEXPREFIX/$MFDIR"
 
+fi
+    
 if test $MAKE = "error" 
 then
        { echo "configure: error: Please install GNU make" 1>&2; exit 1; }
@@ -1140,7 +1171,7 @@ else
 fi
 
 echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:1144: checking how to run the C++ preprocessor" >&5
+echo "configure:1175: checking how to run the C++ preprocessor" >&5
 if test -z "$CXXCPP"; then
 if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1153,12 +1184,12 @@ ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $L
 cross_compiling=$ac_cv_prog_cxx_cross
   CXXCPP="${CXX-g++} -E"
   cat > conftest.$ac_ext <<EOF
-#line 1157 "configure"
+#line 1188 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1178,17 +1209,17 @@ echo "$ac_t""$CXXCPP" 1>&6
 
 ac_safe=`echo "FlexLexer.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for FlexLexer.h""... $ac_c" 1>&6
-echo "configure:1182: checking for FlexLexer.h" >&5
+echo "configure:1213: checking for FlexLexer.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1187 "configure"
+#line 1218 "configure"
 #include "confdefs.h"
 #include <FlexLexer.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1192: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -1369,6 +1400,7 @@ s%@BISON@%$BISON%g
 s%@FLEX@%$FLEX%g
 s%@TEXPREFIX@%$TEXPREFIX%g
 s%@TEXDIR@%$TEXDIR%g
+s%@MFDIR@%$MFDIR%g
 s%@EXTRA_LIBES@%$EXTRA_LIBES%g
 s%@MAKE@%$MAKE%g
 s%@PODMAN@%$PODMAN%g
@@ -1591,7 +1623,7 @@ fi
 eval "DIR_DATADIR=$datadir"
 DIR_DATADIR="$DIR_DATADIR/lilypond"
 echo $ac_n "checking ""... $ac_c" 1>&6
-echo "configure:1595: checking " >&5
+echo "configure:1627: checking " >&5
 
 cat << EOF > lib/out/config.hh
 
@@ -1623,10 +1655,11 @@ If you only want help on the make targets, do a
 
        make help
 
+assuming that \`make' is GNU make, of course.
 
-END
+If you want to make site-wide extensions to the makefiles, please use
 
+    make/out/Site.make
     
-#if test $shared_b = yes; then
-#    echo "NOTE: you are building the *shared* library. You should 
-#fi    
+END
+
index a2e61c23790e0eb6550adff310d4966505ad15d4..d0519149fb5731a7cba9625d6aa8a1ce229e244c 100644 (file)
@@ -28,34 +28,49 @@ AC_DEFUN(AC_TEX_PREFIX, [
     fi
 
     find_texprefix="$find_root_prefix/$find_texpostfix"
-    $1='${prefix}'/"$find_texpostfix"
 
+    # only assign if variablename not empty
+    if test x != "x$1"; then
+       $1='${prefix}'/"$find_texpostfix"
+    fi
     AC_MSG_RESULT($find_texprefix)
 
 ])
-
-AC_DEFUN(AC_TEX_SUBDIR, [
-
-    # do something sensible if root hasn't specced dir yet attempts install
-     test "x$find_texprefix" != x || find_texprefix="$TEXPREFIX"
-
-    AC_MSG_CHECKING(TeX tex input directory)    
-    find_texdir=`(cd $find_texprefix; 
-      $FIND -type d -a -name tex -print |sort|head -1|sed 's#^\./##')`
+
+# find a directory inside a prefix, 
+# $1 the prefix (expanded version)
+# $2 variable to assign
+# $3 the directory name 
+# $4 description
+AC_DEFUN(AC_FIND_DIR_IN_PREFIX, [
+    
+    AC_MSG_CHECKING($4 directory)    
+    find_dirdir=`(cd $1; 
+      $FIND ./ -type d -a -name $3 -print |sort|head -1|sed 's#^\./##')`
     
 
-    if test "x$find_texdir" = x; then
-       find_texdir="/tex";
-       AC_MSG_WARN(Cannot determine the TeX-subdirectory. Please use --enable-tex-dir)
+    if test "x$find_dirdir" = x; then
+       find_dirdir="/$3";
+       AC_MSG_WARN(Cannot determine $4 subdirectory. Please set from command-line)
        true
     fi
-    
-    $1="$TEXPREFIX/$find_texdir"
-    
-    AC_MSG_RESULT($find_texprefix/$find_texdir)
+    $2=$find_dirdir
+    AC_MSG_RESULT($1/$find_dirdir)
+])
 
+AC_DEFUN(AC_TEX_SUBDIR, [
+dnl    AC_REQUIRE([AC_TEX_PREFIX])
+    AC_FIND_DIR_IN_PREFIX($find_texprefix, $1, tex,TeX input)
+    $1="$TEXPREFIX/$$1"
 ])
 
+AC_DEFUN(AC_MF_SUBDIR, [
+dnl     AC_REQUIRE([AC_TEX_PREFIX])
+    AC_FIND_DIR_IN_PREFIX($find_texprefix, $1, source, MF input)
+    $1="$TEXPREFIX/$$1"
+])
+   
 AC_INIT(flower/choleski.cc)
 
 
@@ -76,10 +91,8 @@ AC_ARG_ENABLE(checking,
     [  disable-checking       set runtime checks],
     [checking_b=$enableval] )
 
-
-
-AC_ARG_ENABLE(debug,
-    [  disable-debug          set debug info],
+AC_ARG_ENABLE(debugging,
+    [  disable-debugging         set debug info],
     [debug_b=$enableval])
 
 AC_ARG_ENABLE(optimise,
@@ -100,6 +113,10 @@ AC_ARG_ENABLE(tex-dir,
     [  tex-dir=DIR  set the directory to put LilyPond  TeX files in.],
     [TEXDIR=$enableval],
     [TEXDIR=auto] )
+AC_ARG_ENABLE(mf-dir,
+    [  mf-dir=DIR  set the directory to put LilyPond MetaFont files in.],
+    [MFDIR=$enableval],
+    [MFDIR=auto] )
 
 if test $profile_b = yes; then
     EXTRA_LIBES="-pg"
@@ -142,6 +159,7 @@ AC_SUBST(BISON)
 AC_SUBST(FLEX)
 AC_SUBST(TEXPREFIX)
 AC_SUBST(TEXDIR)
+AC_SUBST(MFDIR)
 AC_SUBST(EXTRA_LIBES)
 
 AC_CHECK_PROGS(BISON, bison, error)
@@ -158,6 +176,10 @@ if test "x$TEXDIR" = xauto ; then
     AC_TEX_SUBDIR(TEXDIR)
 fi
 
+if test "x$MFDIR" = xauto; then
+    AC_MF_SUBDIR(MFDIR)
+fi
+    
 if test $MAKE = "error" 
 then
        AC_MSG_ERROR(Please install GNU make)
@@ -236,10 +258,11 @@ If you only want help on the make targets, do a
 
        make help
 
+assuming that \`make' is GNU make, of course.
 
-END
+If you want to make site-wide extensions to the makefiles, please use
 
+    make/out/Site.make
     
-#if test $shared_b = yes; then
-#    echo "NOTE: you are building the *shared* library. You should 
-#fi    
+END
+
index 0a6d806a21793a4113279d5a6f992b9fa0d301da..f68ca1c5a8584dda94cc907ccba039cc9f97af75 100644 (file)
@@ -66,9 +66,10 @@ localdistclean:
        rm -f config.cache config.status
 
 localinstall: $(LIBFLOWER)
+ifeq ($(LIB_SUFFIX),.so)
        $(INSTALL) -d $(libdir)
        $(INSTALL) $(LIBFLOWER) $(libdir)
-#      ln -s $(libdir)/libflower.so.$(VERSION) $(libdir
+endif
 
 localuninstall:
        rm -f $(libdir)/libflower.{so,a}
index ddce8ee770d4ecb228a1a921673f92b54af46bbf..bebe65d14fc0c2ea9f565d41cf1abaaa72b25604 100644 (file)
@@ -3,13 +3,15 @@
 % COPYRIGHT: GPL
 %
 %
+\version "0.0.53";
+
 globals=\melodic{
                \meter 4/ 4;
                \partial 8;
                \skip 8*1;
                \skip 2*3 ;
-               \bar ":|:"
-               \skip 2*1;
+               \bar ":|:";
+               \skip 1*2;
                \meter 2/4;
 }
 
@@ -33,7 +35,8 @@ globals=\melodic{
 
 melody= \staff{melodicregs
        globals
-       \melodic \octave  {c;
+       \melodic {
+       \octave  c;
        c8\key fis cis gis;
        |r4 r4 r4 r4
        |cis'2..        r8
@@ -47,14 +50,14 @@ melody= \staff{melodicregs
                 {  a  () bes eis8 eis8 }
                 { fis () g gis8 gis8 }
        >
-       \clef\tenor
+       \clef\tenor;
        < c4 c'4 >
 
        [d8 e8 f'8 g8]  d8 e8 f8 g8
        |fis''2
        | a8 b8 c'8 d'8 |c''8 '''c8 c4 |c4  c4 |c4
        \duration  16 ; 'b 'a 'g 'f \duration  4;
-       \clef\bass      
+       \clef\bass      ;
 
        |c 'b 'a 'g 'f 'e 'd 'c ''b ''a ''g ''f ''e ''d ''c
        }
index 7b464e4ee5ff399779f62a98ea0d22d23213f5b2..82659d38002a775583cc456b52dd4bd38568b4bd 100644 (file)
@@ -90,7 +90,7 @@ comes = \melodic  {
        [G F16 Es] [F8 D] [As G] r A |
        [B c] [F16 Es D C] [C8 c16 B] [c8  G]|
        [As c16 B] [c8 d] [G8 c16 B] [c8 d] |
-       [F16 G] As4 [G16 F] E2 |
+       [F16 G] As4 [G16 F] E2. |
        
 }
 
index b311b7eb036b454fc14e87518cdc8280e9547a53..99892df436c194914d6a48039787a6b4dfdf908c 100644 (file)
@@ -1,6 +1,6 @@
 MAJOR_VERSION = 0
 MINOR_VERSION = 0
-PATCH_LEVEL = 53
+PATCH_LEVEL = 54
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
 
index 276b320e1444a4cd3ff38694e35b3dad381b986a..e7eee4cd6b09e8e6f1e86e976787c7bb8af64216 100644 (file)
@@ -1,7 +1,7 @@
 # kept in dist bo stripping stable stuff, still to copy...
 
 # a bit of a hack to keep exec size under control.
-stablecc=command-request.cc musical-request.cc bar.cc boxes.cc break.cc  \
+stablecc=command-request.cc musical-request.cc bar.cc boxes.cc \
        item.cc keyword.cc leastsquares.cc \
        lookup.cc molecule.cc meter.cc\
        paper-def.cc parser.cc lexer.cc p-staff.cc qlp.cc qlpsolve.cc\
index cc588e6b0f640c7127116c2b928ba42b8f7a0030..8a07b02344b469bc0e64cb8303396ab590bfc0e9 100644 (file)
@@ -1,6 +1,12 @@
 /*
-    do calculations for breaking problem    
-    */
+  break.cc -- implement Break_algorithm
+
+  source file of the LilyPond music typesetter
+
+  (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
 #include "break.hh"
 #include "paper-def.hh"
 #include "linespace.hh"
@@ -9,9 +15,7 @@
 #include "p-score.hh"
 
 
-/*
-  return all breakable columns
- */
+///  return all breakable columns
 Line_of_cols
 Break_algorithm::find_breaks() const
 {
@@ -23,7 +27,7 @@ Break_algorithm::find_breaks() const
     return retval;
 }
 
-// construct an appropriate Spacing_problem and solve it. 
+/// construct an appropriate Spacing_problem and solve it. 
 Col_hpositions
 Break_algorithm::solve_line(Line_of_cols curline) const
 {
index 3a5631770ca3c8a3bfa3ce2a114b78d8aa0e19bd..5e82c5a31d35453f6ece0c52888b579e5f69360d 100644 (file)
@@ -79,7 +79,9 @@ COMMENT               %.*\n
        new_input(s,source_l_g);
        yy_pop_state();
 }
-
+<*>{WHITE}+    {
+       
+}
 <notes>{RESTNAME}      {
        const char *s = YYText();
        yylval.string = new String (s); 
@@ -187,7 +189,7 @@ COMMENT             %.*\n
 <lyrics>[{}]   {
        return YYText()[0];
 }
-<lyrics>[()\[\]|/.^>;_-] {
+<lyrics>. {
        return yylval.c = YYText()[0];
 }
 
@@ -223,9 +225,7 @@ COMMENT             %.*\n
        mtor << "misc char" <<c<<"\n";
        return c;
 }
-<*>{WHITE}+    {
-       
-}
+
 <INITIAL,notes>.       {
        return yylval.c = YYText()[0];
 }
index 4f3f69a62ecc1dc77366bf0df1068efdd256045c..aed6c407eb3b9c490b1013aab30e3a781af8e647 100644 (file)
@@ -152,9 +152,9 @@ Spacing_problem::make_constraints(Mixed_qp& lp) const
 {    
     int dim=cols.size();
     for (int j=0; j < dim; j++) {
-       Colinfo *c=&(cols[j]);
-       if (c->fixed()) {
-           lp.add_fixed_var(j,c->fixed_position());        
+       Colinfo c=cols[j];
+       if (c.fixed()) {
+           lp.add_fixed_var(j,c.fixed_position());         
        }
        if (j > 0){
            Vector c1(dim);
@@ -174,7 +174,6 @@ Spacing_problem::solve() const
     OK();
     assert(check_feasible());
 
-    /* optimalisatiefunctie */        
     Mixed_qp lp(cols.size());
     make_matrices(lp.quad,lp.lin, lp.const_term);
     make_constraints(lp);    
@@ -196,8 +195,6 @@ Spacing_problem::solve() const
 void
 Spacing_problem::add_column(PCol const *col, bool fixed, Real fixpos)
 {
-    if (!col->used_b() )
-       return;
     Colinfo c(col,(fixed)? &fixpos :  0);
     cols.push(c);
 }
index 73f0def7b0c4cc7358a3224ae248e7969430bff7..db86760cb4a73d7a2543fe3f3e196a538f258b91 100644 (file)
@@ -30,8 +30,12 @@ Lyric_register::try_request(Request*r)
 void
 Lyric_register::process_requests()
 {
+    Lyric_item * last_item_l =0;
     for (int i=0; i < lreq_arr_.size(); i++) {
-       Item *lp = new Lyric_item(lreq_arr_[i],i);
+       Lyric_item *lp = new Lyric_item(lreq_arr_[i],i);
+       if (last_item_l)
+           lp->add_support(last_item_l);
+       last_item_l = lp;
        typeset_element(lp);
     }
     get_staff_info().walk_l_->allow_break();
index dbeeba4a91c3f52723601e2d8c60fe12adccb41f..075e61d1ab79567738c9330753f0d1c89e28823e 100644 (file)
@@ -26,9 +26,9 @@ Note_column::add(Stem*stem_l)
 void
 Note_column::add(Notehead* n_l)
 {
-    if (head_l_arr_.size())
-       assert(n_l->rest_b_ == rest_b_);
-    else
+    if (head_l_arr_.size()){
+       if (n_l->rest_b_ != rest_b_) return; // ugly fix. Should think about integrating rests into colunms.
+    else
        rest_b_ = n_l->rest_b_;
     
     head_l_arr_.push(n_l);
index c47a4b2d275d446374b28e4883a28aeef3295594..e1c286da70cb3e83ae0a094084684952a2b32c6a 100644 (file)
@@ -107,6 +107,7 @@ PCol::PCol(PCol *parent)
     line_l_=0;
     hpos = -1.0;
     pscore_l_ = 0;
+    rank_i_ = -1;
 }
 
 PCol::~PCol()
index d31762e54ae94c317a1ea91b1580abe43336044c..6f1b3627658bc51e7092858c954d0d1ba64e79c5 100644 (file)
@@ -252,7 +252,7 @@ void
 PScore::process()
 {
     clean_cols();
-    
+    print();
     *mlog << "Preprocessing ... " <<flush;
     preprocess();
     *mlog << "\nCalculating column positions ... " <<flush;
index 573d50b476e9b6636a8e1da271744f5d013f346d..1eb674778820c75168fe95f3bed8941743fcb124 100644 (file)
@@ -10,6 +10,7 @@ libdir = @libdir@
 prefix = @prefix@
 TEXPREFIX = @TEXPREFIX@
 TEXDIR = @TEXDIR@
+MFDIR = @MFDIR@
 mandir  =  @mandir@
 exec_prefix = @exec_prefix@
 bindir = @bindir@
index d02cd493bbd141d5e2eff686b2e00e3ada2457a6..95dd3acafee72ac4474dc5bc3526b0d6fafe680f 100644 (file)
@@ -41,12 +41,16 @@ include ./$(depth)/make/Rules.make
 spec: $(outdir)/lilypond.spec
 
 rpmdocs=$(addprefix Documentation/out/, $(notdir $(shell ls $(depth)/Documentation/$(outdir)/*.text)))
+rpmexamples= $(addprefix input/, $(notdir $(shell ls $(depth)/input/*.{ly,tex})))
+
+
 sed-version= sed 's!@TOPLEVEL_VERSION@!${TOPLEVEL_VERSION}!g'
 sed-date=sed 's!@DATE@!${date}!g'
+sed-examples = sed 's!@EXAMPLE_LYS@!${rpmexamples}!g'
 sed-docs=sed 's!@TEXT_DOCS@!${rpmdocs}!g'
 
 $(outdir)/lilypond.spec: lilypond.spec.in $(depth)/.version
-       cat $< | $(sed-version) | $(sed-docs) > $@
+       cat $< | $(sed-version) | $(sed-docs) | $(sed-examples) > $@
 
 $(outdir)/lilypond.lsm: lilypond.lsm.in $(depth)/.version
        cat $< | $(sed-version) | $(sed-date) > $@
index 5d161c5be74425f9d443d207a352516cb391780d..bd04277f73ab6623d5a9bde878ca1eafb377efed 100644 (file)
@@ -7,7 +7,8 @@
 #      Jan Nieuwenhuizen <jan@digicash.com>
 #      Han-Wen Nienhuys <hanwen@stack.nl>
 
-.PHONY : all clean config default dist doc doc++ dummy exe help lib TAGS html
+.PHONY : all clean config default dist doc doc++ dummy exe help lib TAGS html\
+       check-flower-deps check-lily-deps check-doc-deps
 
 # target all:
 #
@@ -29,7 +30,8 @@ include ./$(depth)/make/out/Site.make
 # dependency list of executable:
 #
 EXECUTABLE = $(lily_bindir)/$(NAME)
-$(EXECUTABLE): $(build) $(OFILES) $(MODULE_LIBDEPS) 
+$(EXECUTABLE): $(build) $(OFILES)
+       $(MAKE) $(MODULE_LIBDEPS) 
        $(INCREASE_BUILD)
        $(MAKE) -S $(OFILES)  $(SILENT_LOG)
 ifdef STABLEOBS
@@ -46,7 +48,7 @@ $(build): $(depth)/.version
 # dependency list of library:
 #
 LIBRARY = $(outdir)/$(LIB_PREFIX)$(NAME).a
-$(LIBRARY): $(build) $(OFILES) $(MODULE_LIBDEPS)
+$(LIBRARY): $(build) $(OFILES)
        $(INCREASE_BUILD)
        $(MAKE) $(OFILES)  $(SILENT_LOG)
        $(AR_COMMAND) $(OFILES)
@@ -126,7 +128,8 @@ dist:
        chmod -Rf a+rX $(distdir)
 
        (cd ./$(depth); tar cfz $(DIST_NAME).tar.gz $(DIST_NAME))
-       rm -rf $(distdir)/  # should be trapped
+# should be trapped
+       rm -rf $(distdir)/
 
 localdist: $(DISTFILES)
        if [ -d out ]; then mkdir $(distdir)/$(localdir)/out; fi
@@ -140,7 +143,7 @@ moduledist:
        -mkdir $(module-distdir)
        $(MAKE) localmoduledist
        (cd ./$(depth); tar cfz $(MODULE_DIST_NAME).tar.gz $(MODULE_DIST_NAME))
-       rm -rf $(module-distdir)/  # should be trapped
+       rm -rf $(module-distdir)/ 
 
 localmoduledist:
        ln $(DISTFILES) $(module-distdir)/$(localdir)
index ae4e131c1a58e56a33cd20b9661075370f9a4d19..b7ba88ce979ae2b88ed670858b98d8ea5b149623 100644 (file)
@@ -1,7 +1,13 @@
 # -*-Makefile-*-
+########################################################
+#
+# WARNING!WARNING!WARNING!WARNING!WARNING!WARNING!
+#      
+#      DO NOT EDIT!    
 #
-# @configure_input@
 #
+# @configure_input@
+########################################################
 # project  LilyPond -- the musical typesetter
 # title           top level makefile for LilyPond  
 # file    Makefile 
@@ -9,7 +15,6 @@
 # Copyright (c) 1997 by    
 #      Jan Nieuwenhuizen <jan@digicash.com>
 #      Han-Wen Nienhuys <hanwen@stack.nl>
-#              ...your sort order here, or how to comment-out a comment
 
 # subdir level:
 #
@@ -29,14 +34,14 @@ include ./$(depth)/make/Variables.make
 
 # descent order into subdirectories:
 #
-SUBDIRS = flower lib lily mi2mu \
+SUBDIRS = mf flower lib lily mi2mu \
        Documentation bin init input tex make
 #
 
 # list of distribution files:
 #
 SCRIPTS = configure configure.in install-sh
-README_FILES = ANNOUNCE COPYING NEWS README TODO INSTALL.text
+README_FILES = ANNOUNCE COPYING NEWS README TODO INSTALL.text AUTHORS.text
 EXTRA_DISTFILES=  .dstreamrc .version $(README_FILES) $(SCRIPTS) $(SYMLINKS)
 
 # do not dist ./Makefile (is copied from make/Toplevel.make)
index 87656c81b159a8e218f50f0697ef3b6b3be2b465..4cc56e118bd815cef6be4a6fc9a51d756ce57941 100644 (file)
@@ -24,7 +24,7 @@ endif
 
 # directory names:
 #
-outdir = out# "objects" won-t do, used for libs and deps as well
+outdir = out
 lily_bindir = ./$(depth)/bin
 distdir = ./$(depth)/$(DIST_NAME)
 module-distdir = ./$(depth)/$(MODULE_DIST_NAME)
@@ -94,14 +94,14 @@ DUMMYDEPS=\
 # clean file lists:
 #
 ERROR_LOG = 2> /dev/null
-SILENT_LOG = >& /dev/null
+SILENT_LOG = 2>&1 >  /dev/null
 allexe = $(lily_bindir)/lilypond $(lily_bindir)/mi2mu
 date = $(shell date +%x)
-allhh := $(shell $(FIND) -name "*.hh" $(ERROR_LOG))
-allcc := $(shell $(FIND) -name "*.cc" $(ERROR_LOG))
-allobs := $(shell $(FIND) $(outdir) -name "*.o" $(ERROR_LOG))
+allhh := $(shell $(FIND) ./ -name "*.hh" $(ERROR_LOG))
+allcc := $(shell $(FIND)  ./ -name "*.cc" $(ERROR_LOG))
+allobs := $(shell $(FIND) ./  $(outdir) -name "*.o" $(ERROR_LOG))
 
-alldeps := $(shell $(FIND) $(outdir) -name "*.dep" $(ERROR_LOG))
+alldeps := $(shell $(FIND)  ./ $(outdir) -name "*.dep" $(ERROR_LOG))
 
 # version stuff:
 #
@@ -123,13 +123,15 @@ CFLAGS = $(DEFINES) $(INCLUDES) $(USER_CFLAGS) $(EXTRA_CFLAGS)
 
 # added two warnings that are treated by cygwin32's gcc 2.7.2 as errors.
 # huh, but still, no warnings even provoced with linux's gcc 2.7.2.1?
-EXTRA_CXXFLAGS=-pipe -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wconversion
+
+# -pipe makes it go faster, but is not supported on all platforms. 
+EXTRA_CXXFLAGS= -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wconversion
 
 
 CXXFLAGS = $(CFLAGS) $(USER_CXXFLAGS) $(EXTRA_CXXFLAGS) $(MODULE_CXXFLAGS)
 INCLUDES = -Iinclude -I$(outdir) -I$(include-lib) -I$(libout) -I$(include-flower) -I$(flowerout) 
 CXX_OUTPUT_OPTION = $< -o $@
-LDFLAGS = $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) -L $(depth)/lib/out -L $(depth)/flower/out
+LDFLAGS = $(EXTRA_LDFLAGS) $(MODULE_LDFLAGS) -L$(depth)/lib/out -L$(depth)/flower/out
 LOADLIBES = $(EXTRA_LIBES) $(MODULE_LIBES) -lg++ # need lg++ for win32, really!
 #
 
@@ -178,14 +180,15 @@ endif
 LIBRARY = $(LIB_PREFIX)$(NAME)$(LIB_SUFFIX)
 #
 
-STRIPDEBUG=true #replace to do stripping of certain objects
+#replace to do stripping of certain objects
+STRIPDEBUG=true 
 
 DISTFILES=$(EXTRA_DISTFILES) Makefile $(ALL_SOURCES)
 DOCDIR=$(depth)/$(outdir)
 
 # .hh should be first. Don't know why
-# take some trouble to auto sources and obsolete stuff.
-progdocs=$(shell find -name '*.hh' |egrep -v 'obsolete/|out/') $(shell find -name '*.cc'|egrep -v 'out/|obsolete/')
+# take some trouble to vauto ignore sources and obsolete stuff.
+progdocs=$(shell find ./ -name '*.hh' |egrep -v 'obsolete/|out/') $(shell find -name '*.cc'|egrep -v 'out/|obsolete/')
 
 
 pod2html=pod2html
index 5e09dc7878c2f5a219c29276b012341be63c107b..0600cc065d902124177164d10e3230dbaa93c8a3 100644 (file)
@@ -2,8 +2,8 @@
 
 Begin3
 Title: LilyPond
-Version: 0.0.53
-Entered-date: 04/21/97
+Version: 0.0.54
+Entered-date: 04/22/97
 Description: LilyPond is a program which converts a music-script (mudela) into
 TeX output, or MIDI to produce multi-staff scores. Features include multiple
 meters, clefs, keys, lyrics, versatile input-language, cadenzas
@@ -13,7 +13,7 @@ Author: hanwen@stack.nl (Han-Wen Nienhuys)
        jan@digicash.com (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: pcnov095.win.tue.nl /pub/lilypond/  
-       300k lilypond-0.0.53.tar.gz
+       300k lilypond-0.0.54.tar.gz
 Alternate-site: 
 Original-site: 
 Platform: unix/win32, GNU C++
index bd7f88d2f714f186aeed8081cc9ccca7017a6218..cc8fa318fb621be1892855f1b8d578dbf8a03fae 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 0.0.53
+Version: 0.0.54
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.53.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.54.tar.gz
 Summary: A preprocessor to make TeX typeset music.
 URL: http://www.stack.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@stack.nl>
@@ -14,23 +14,27 @@ Buildroot: /tmp/lilypond_build
 LilyPond is a program which converts a music-script (mudela) into
 TeX output, or MIDI to produce multi-staff scores. Features include multiple
 meters, clefs, keys, lyrics, versatile input-language, cadenzas
-beams, slurs, triplets, multi voices.
+beams, slurs, triplets, multiple voices.
 
 %prep
 %setup
 %build
-configure --enable-checking --enable-printing --prefix=/usr --enable-optimise
+configure --enable-checking --disable-debugging --enable-printing --prefix=/usr --enable-optimise --enable-shared
 make all
 %install
 strip bin/lilypond bin/mi2mu
 make prefix="$RPM_BUILD_ROOT/usr" install
 %files
-%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mudela.text Documentation/lelie_logo.gif
+%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mudela.text input/cadenza.ly input/collisions.ly input/coriolan-alto.ly input/error.ly input/fugue1.midi.ly input/kortjakje.ly input/maartje.ly input/martien.ly input/martien.tex input/mlalt.ly input/mlcello.ly input/mlvio1.ly input/mlvio2.ly input/plet.ly input/pre1.midi.ly input/rhythm.ly input/scales.ly input/scsii-menuetto.ly input/scsii-menuetto.tex input/standchen.ly input/standchen.tex input/twinkle.ly input/wohltemperirt.ly Documentation/lelie_logo.gif
+/usr/bin/convert-mudela
 /usr/bin/lilypond
+/usr/lib/libflower.so
 /usr/bin/mi2mu
 /usr/man/man1/lilypond.1
 /usr/man/man5/mudela.5
+/usr/man/man1/convert-mudela.1
 /usr/lib/texmf/texmf/tex/lilypond/
+/usr/lib/texmf/texmf/fonts/source/lilypond/
 /usr/share/lilypond/
 
 %post
index c3010433662a28bdeaa2b17b0fb182bd9cf1d58c..a30e634fbd89d59323a72c588e27ba91e57612cf 100644 (file)
@@ -14,23 +14,27 @@ Buildroot: /tmp/lilypond_build
 LilyPond is a program which converts a music-script (mudela) into
 TeX output, or MIDI to produce multi-staff scores. Features include multiple
 meters, clefs, keys, lyrics, versatile input-language, cadenzas
-beams, slurs, triplets, multi voices.
+beams, slurs, triplets, multiple voices.
 
 %prep
 %setup
 %build
-configure --enable-checking --enable-printing --prefix=/usr --enable-optimise
+configure --enable-checking --disable-debugging --enable-printing --prefix=/usr --enable-optimise --enable-shared
 make all
 %install
 strip bin/lilypond bin/mi2mu
 make prefix="$RPM_BUILD_ROOT/usr" install
 %files
-%doc @TEXT_DOCS@ Documentation/lelie_logo.gif
+%doc @TEXT_DOCS@ @EXAMPLE_LYS@ Documentation/lelie_logo.gif
+/usr/bin/convert-mudela
 /usr/bin/lilypond
+/usr/lib/libflower.so
 /usr/bin/mi2mu
 /usr/man/man1/lilypond.1
 /usr/man/man5/mudela.5
+/usr/man/man1/convert-mudela.1
 /usr/lib/texmf/texmf/tex/lilypond/
+/usr/lib/texmf/texmf/fonts/source/lilypond/
 /usr/share/lilypond/
 
 %post
diff --git a/mf/Makefile b/mf/Makefile
new file mode 100644 (file)
index 0000000..3a2fb59
--- /dev/null
@@ -0,0 +1,62 @@
+#
+# project  LilyPond -- the musical typesetter
+# title           makefile for yet to add in MF files
+# file    ../Makefile 
+#
+# Copyright (c) 1997 by
+#      Jan Nieuwenhuizen <jan@digicash.com>
+#      Han-Wen Nienhuys <hanwen@stack.nl>
+#
+
+# subdir level:
+#
+depth = ..
+#
+
+# generic variables:
+#
+include ./$(depth)/make/Variables.make 
+
+include ./$(depth)/.version
+
+# descent order into subdirectories:
+#
+SUBDIRS =
+#
+
+#
+include ./$(depth)/make/Files.make
+MFFILES:=$(wildcard *.mf)
+
+EXTRA_DISTFILES = $(MFFILES) README
+
+
+# list of custom libraries:
+#
+CUSTOMLIBES = \
+
+LOADLIBES +=
+#
+
+# main target of this module:
+#
+MAINTARGET = $(EXECUTABLE)
+
+default: $(MAINTARGET)
+#
+
+# generic targets and rules:
+#
+include ./$(depth)/make/Targets.make
+include ./$(depth)/make/Rules.make
+#
+
+lily-mfdir = $(MFDIR)/lilypond
+
+localinstall:
+       $(INSTALL) -d $(lily-mfdir)
+       $(INSTALL) -m 755 $(MFFILES) $(lily-mfdir)
+
+localuninstall:
+       for i in $(MFFILES); do rm -f $(lily-mfdir)/$$i; done
+       -rmdir $(lily-mfdir)
diff --git a/mf/README b/mf/README
new file mode 100644 (file)
index 0000000..f6878bc
--- /dev/null
+++ b/mf/README
@@ -0,0 +1,44 @@
+This is from the package MusixTeX, version T.59 or T.64 (Taupin
+version.)
+
+The documentation states:
+
+       \begin{center}
+
+       Although one of the authors contested that point once the
+       common work had begun, \musixtex{} may be freely copied,
+       duplicated and used. However, since it is intended to be a
+       \ital{freeware} you are not allowed to sell it, and the fee
+       you may ask for distributing it must be limited to
+       maintenance, support and duplication costs. You may take parts
+       of it to include in other packages, but no packages called
+       \musixtex{} may be distributed under this name if different
+       from the original distribution (except obvious bug corrections
+       or text font adaptations for specific implementations).
+
+       \musixtex{} may be included in further commercial packages,
+       provided that no fee is charged for \musixtex{} itself.
+
+       \end{center}
+
+
+A part (the fonts) are included in this package, which is not called
+\musixtex, so this not a copyright infringement.
+
+
+MusixTeX is copyright 19?? by:
+
+       Daniel Taupin, 
+
+       Laboratoire de Physique des Solides (associ\'e au CNRS),
+       b\^atiment 510, Centre Universitaire, F-91405 ORSAY Cedex
+       <taupin@lps.u-psud.fr>
+
+       Ross Mitchell 
+
+       CSIRO Division of Atmospheric Research, Private Bag No.1,
+       Mordialloc, Victoria 3195, Australia
+
+       Andreas Egler
+
+       (Ruhr--Uni--Bochum) Ursulastr. 32 D-44793 Bochum
diff --git a/mf/musexgen.mf b/mf/musexgen.mf
new file mode 100644 (file)
index 0000000..1b73e01
--- /dev/null
@@ -0,0 +1,194 @@
+%  this is musexgen.mf
+
+% Here are two types of pianobrackets available, they are absolute compatible,
+% so choose this one you prefer (search for '%!!!')
+
+path p;
+picture save_pic;
+
+pen thin_pen, med_pen;
+thin_pen:= pencircle scaled max(1,.2pt+blacker);
+med_pen:= pencircle scaled med;
+
+%%%%%%%
+message ("<big braces>");
+%%%%%%%
+
+firstbrace:=20;  % smallest brace is 2*20 pt (\simeq 14mm)
+lastbrace:=67;   % largest brace is 2*67 pt (\simeq 47mm)
+
+%%% from Stanislav Kneifl
+
+def drawpianobracket (expr height) =
+  u# := 1nhh#/5pt# * 1pt#;
+  v# := (height/40) * 1pt#;
+  define_pixels (u, v);
+%  beginchar (height-firstbrace, 1.25nhh#, 0, 0);
+  beginchar (height-firstbrace, 0, 0, 0);
+    z1 = origin;
+    z2 = (4.7u, 7v);
+    z3 = (3.6u, 16.5v);
+    z4 = (1.9u, 25v);
+    z5 = (2.28u, 32v);
+    z6 = (w, 40v);
+    penpos1 (max(1,0.1u), 125);
+    penpos2 (1.2u, 180);
+    penpos3 (3.2u, 195);
+    penpos4 (2.5u, 180);
+    penpos5 (1.14u, 180);
+    penpos6 (max(2,0.3u), 150);
+    penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e;
+    currenttransform := identity reflectedabout ((0,0),(1,0));
+    penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e;
+    currenttransform := identity;
+% inserted
+    currentpicture:=currentpicture shifted (round(-1.75nhh), 0);
+%
+  endchar;
+enddef;
+
+def bigbrace(expr v) =
+  beginchar (v-firstbrace, 0, 0, 0);
+  " brace vsize "&decimal round(2v*pt#)&"pt";
+    vwidth:=v*pt;
+    hwidth:=max(.1vwidth,3.25pt);
+    hwidth:=min(hwidth,6.5pt);
+    actwidth:=.035vwidth;
+    x1=.25nhw;  y1=vwidth;
+    x2l=-.8hwidth; y2=2/3vwidth;
+    x3r=.2hwidth; y3=1/3vwidth;
+    x4=-hwidth; y4=0;
+    penpos1(max(1,.25pt),-35);
+    penpos2(1.5med+actwidth,40);
+    penpos3(1.75med+actwidth,45);
+    penpos4(max(1,.2pt),-90);
+    penstroke z1e..z2e..z3e..{left+sw}z4e;
+    currentpen:= pencircle; draw z1..z2..z3..{left+sw}z4;
+    addto currentpicture also currentpicture reflectedabout (origin, right);
+    penlabels(1,2,3,4);
+    currentpicture:= currentpicture shifted (round(-.75nhh), 0);
+  endchar;
+enddef;
+
+%!!! comment the line 'bigbrace' and uncomment the line 'drawpianobracket'
+%    or leave it like it is !!!
+
+for v=firstbrace upto lastbrace :
+    bigbrace (v);
+%    drawpianobracket (v);
+endfor;
+
+%%%%%%%
+message ("<glissandi-elements>");
+%%%%%%%
+%  glissando{slide} (slope [degree])
+
+def glissando (expr theta)=
+  x1=-1; y1=0; z2=z1+(.5nhw,0); z3=z1+(nhw+1,0);
+  p:= z1{1.25up+right}..{1.25down+right}z2{1.25down+right}..{1.25up+right}z3;
+  pickup penrazor scaled (.075nhw+thick) rotated (theta+65);
+  draw p rotated theta;
+  labels (1,2,3);
+enddef;
+
+for slope=1 upto 8:
+
+  beginchar(56+slope-1, (cosd(10slope))*nhw#,(sind(10slope))*nhw#, 0);
+  " glissando element slope "&decimal (10slope)&" degree";
+    glissando (10slope);
+    save_pic:= currentpicture;
+  endchar;
+
+  beginchar(64+slope-1, (cosd(10slope))*nhw#, (sind(10slope))*nhw#, 0);
+  " glissando element slope "&decimal (-10slope)&" degree";
+    currentpicture:= save_pic reflectedabout (origin, right);
+  endchar;
+
+endfor;
+
+%%%%%%%
+message ("<guitar chords>");
+%%%%%%%
+def tabulatur (expr nd)=
+  hwidth:=1/5w;
+  x1=x2=y2=y3=0; x3=w; y1=-nd;
+  fill unitsquare xscaled (w+2thinwidth) yscaled (med+.2pt)
+       shifted(-thinwidth,0);
+  pickup thin_pen;
+  for v=1 upto 5 :
+    draw (z2--z3) shifted (0,v*-hwidth);
+  endfor;
+
+  for v=0 upto 5 :
+    draw (z1--z2) shifted (v*hwidth,0);
+  endfor;
+  labels (1,2,3);
+enddef;
+
+%beginchar(72, 15/4nhw#, 0, 0);" grid";
+%  tabulatur (54/10nhh);
+%endchar;
+
+%beginchar(73, 15/8nhw#, 0, 0); " dot";
+%  fill fullcircle scaled .675nhh shifted (w,-.45nhh);
+%endchar;
+
+%beginchar(74, 15/4nhw#, 0, 0); " bar";
+%  fill unitsquare xscaled w yscaled .3nhh shifted (0,-.6nhh);
+%endchar;
+
+shift:=.15nhh;
+def Circle (expr nh)=
+  x1l=.1w; x2=x4=.5w; x3l=.9w;
+  y1=y3=.5nh+shift; y2=.1nh+shift; y4=.9nh+shift;
+  penpos1(med, 0);
+  penpos2(thinwidth,90);
+  penpos3(med,180);
+  penpos4(thinwidth, 270);
+  penstroke z1e..z2e..z3e..z4e..cycle;
+  pickup pencircle; draw z1..z2..z3..z4..cycle;
+enddef;
+
+%beginchar(75, 3/4nhw#, 0, 0); " circle";
+%  Circle (.9nhh);
+%endchar;
+
+def Cross (expr nh)=
+  x1=x3=.2w; x2=x4=.8w;
+  y1=y4=.2nh+shift; y2=y3=nh-.2nh+shift;
+  pickup med_pen;
+  draw z1--z2; draw z3--z4;
+% labels (1,2,3,4);
+enddef;
+
+%beginchar(76, 3/4nhw#, 0, 0); " cross";
+%  Cross (.9nhh);
+%endchar;
+
+%beginchar(77, 3/4nhw#, 0, 0); " blank";
+%endchar;
+
+beginchar(72, 3nhw#, 0, 0);" small grid";
+  tabulatur (108/25nhh);
+endchar;
+
+beginchar(73, 3/2nhw#, 0, 0); " small dot";
+  fill fullcircle scaled .54nhh shifted (w,-.36nhh);
+endchar;
+
+beginchar(74, 3nhw#, 0, 0); " small bar";
+  fill unitsquare xscaled w yscaled .24nhh shifted (0,-.48nhh);
+endchar;
+
+beginchar(75, 3/5nhw#, 0, 0); " small circle";
+  Circle (.72nhh);
+endchar;
+
+beginchar(76, 3/5nhw#, 0, 0); " small cross";
+  Cross (.72nhh);
+endchar;
+
+% the next seems to be senseless, but it isn't
+
+beginchar(77, 3/5nhw#, 0, 0); " small blank";
+endchar;
diff --git a/mf/musix11.mf b/mf/musix11.mf
new file mode 100644 (file)
index 0000000..fd70f02
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix11";
+
+mode_setup;
+
+font_size 10.24pt#;
+
+nhh#:=2.56pt#;
+nhw#:=3.072pt#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.064pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/musix13.mf b/mf/musix13.mf
new file mode 100644 (file)
index 0000000..918db5f
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix13";
+
+mode_setup;
+
+font_size 12.8pt#;
+
+nhh#:=3.2pt#;
+nhw#:=3.84pt#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.08pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/musix16.mf b/mf/musix16.mf
new file mode 100644 (file)
index 0000000..32dbddd
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix16";
+
+mode_setup;
+
+font_size 16pt#;
+
+nhh#:=4pt#;
+nhw#:=4.8pt#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.1pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/musix20.mf b/mf/musix20.mf
new file mode 100644 (file)
index 0000000..0bdebdf
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix20";
+
+mode_setup;
+
+font_size 20pt#;
+
+nhh#:=5pt#;
+nhw#:=1.2*nhh#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.125pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/musix24.mf b/mf/musix24.mf
new file mode 100644 (file)
index 0000000..0b2dc46
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix24";
+
+mode_setup;
+
+font_size 24pt#;
+
+nhh#:=6pt#;
+nhw#:=1.2nhh#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.15pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/musix25.mf b/mf/musix25.mf
new file mode 100644 (file)
index 0000000..529c7ec
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix25";
+
+mode_setup;
+
+font_size 25pt#;
+
+nhh#:=6.25pt#;
+nhw#:=7.5pt#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.15pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/musix29.mf b/mf/musix29.mf
new file mode 100644 (file)
index 0000000..622aeae
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix29";
+
+mode_setup;
+
+font_size 29pt#;
+
+nhh#:=7.2pt#;
+nhw#:=1.2*nhh#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.15pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/musixgen.mf b/mf/musixgen.mf
new file mode 100644 (file)
index 0000000..e408f8a
--- /dev/null
@@ -0,0 +1,1518 @@
+% next changes: - redesigning accidentals
+%               - new accents
+%               - new gregorian symbols
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  this is musixgen.mf (c)
+%
+%  Version T.59 [September 96]
+%               - added one more gregorian symbol (126)
+%
+%  Version T.40 [September 95]
+%               - corrected gregorianFclef (123)
+%
+%  Version 0.37 [March 95]
+%               - introduced reverseAllabreve (122)
+%
+%  Version 0.25 [December 94]
+%               - some new chars
+%               - added the beamfonts at pos x+128 to save memory
+%               - changed coda to be centered
+%               - changed the flags
+%               - changed the position of some chars to save time
+%
+%      ...      - trouble shooting, minor changes
+%
+%  Version 0.99b[April 94]
+%               - added the new signs from Daniel Taupin
+%
+%  Version 0.99 [February 94]
+%               -'bravely' changed the tfm informations to save memory
+%               - redesigned chars 14, 15, 35, 36, 53, 71, 72, 80, 81, 86, 93
+%               - removed * 'never used' chars 37-39, 55-57, 69-70,
+%                                              77-79, 91-99, 101-119
+%                         * (de)crescendi 16-23 -> now in musixlin
+%               - introduced some new chars 0-11, 16-23, 37-39, 57, 77-79,
+%                                           99-117
+%               - changed the position of some chars to save memory
+%%%%%%%%%%
+%  this was musicgen.mf
+%
+%  Version 4.89 [September 93] Andreas Egler
+%               - blacker influence now
+%               - redesigned chars 71, 72, 53, 123
+%
+%  Version 4.88 [January 93] Ross Mitchell
+%               - redesigned chars 63, 64, 65, 66
+%
+%  Version 4.87 [] Daniel Taupin
+%
+%  Version 2.00 [] Daniel Taupin
+%
+%  Version 1.00 [August 86] Angelika Schofer/Andrea Steinbach
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% free positions: 125-127, 188-191, 252-255
+% heights : 0, 0.5, 1, 1.5, 2.25, 3.25, 4, 4.75, 5.25
+% depths  : 0, 0.5, 1, 1.5, 2.25
+
+%{{{ This always indicates a lowres fix to avoid seperated points
+%}}} and/or 'invisible' lines. It doesn't affect higher resolutions !!
+
+pair pone, ptwo;
+transform t;
+path p;
+
+hlthick=.2pt;
+lthick=.4pt;
+
+pen line_pen, med_pen, coda_pen, thin_pen;
+med_pen:= pencircle scaled med;
+line_pen:= pencircle scaled lthick;
+coda_pen:= pencircle xscaled 1.25thick yscaled max(1,.75med);
+thin_pen:= pencircle scaled max(1,.25pt);
+
+apog_fact=.75;
+apog_nhw#=apog_fact*nhw#;
+
+picture save_pic, elem_pic;
+
+%%%%%%%%%%%%%%%
+% basic def's %
+%%%%%%%%%%%%%%%
+
+def savepic = save_pic:= currentpicture enddef;
+def save_elempic = elem_pic:= currentpicture enddef;
+def callpic = currentpicture:= save_pic enddef;
+
+def mirror (expr pone, ptwo) =
+  currentpicture:=currentpicture reflectedabout(round(pone),round(ptwo))
+enddef;
+
+def add_mirror (expr pone, ptwo) =
+  addto currentpicture also currentpicture
+        reflectedabout (round(pone), round(ptwo))
+enddef;
+
+def call_mirror (expr pone, ptwo) = callpic; mirror (pone, ptwo) enddef;
+
+def add_shift (expr pone, ptwo) =
+  addto currentpicture also currentpicture shifted (pone, ptwo)
+enddef;
+
+def call_add_shift (expr pone, ptwo) =
+  callpic; add_shift (pone, ptwo)
+enddef;
+
+def add_elempic (expr pone, ptwo) =
+  addto currentpicture also elem_pic shifted (pone, ptwo)
+enddef;
+
+def call_add_save_elempic (expr pone, ptwo) =
+  callpic; add_elempic(pone, ptwo); savepic
+enddef;
+
+def shift_pic (expr pone, ptwo) =
+  currentpicture:=currentpicture shifted (round(pone),round(ptwo))
+enddef;
+
+def fill_circle (expr diameter, zshift) =
+  fill fullcircle scaled diameter shifted zshift
+enddef;
+
+def fill_square (expr xwidth, ywidth, zshift) =
+  fill unitsquare xscaled xwidth yscaled ywidth shifted zshift
+enddef;
+
+%
+
+def staff=
+  for i=0 upto 4:
+    pickup pencircle yscaled lthick;
+    draw (-5nhw,i*nhh)--(5nhw,i*nhh);
+  endfor
+enddef;
+
+def Staff=
+  for i=0 upto 4:
+    pickup pencircle yscaled lthick;
+    draw (-5nhw,(i*nhh-.5nhh))--(5nhw,(i*nhh-.5nhh));
+  endfor
+enddef;
+
+def upstem=
+  fill_square (lthick, 5nhh, (0,-5nhh))
+enddef;
+
+def downstem=
+  fill_square (lthick, 5nhh, (nhw-hlthick,0))
+enddef;
+
+% eobasicdefs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+%%%%%%%
+message ("<dots & par's>");
+%%%%%%%
+
+beginchar(0, 0, 0, 0); "duration dot"; % correct 3=>0 DT
+  fill_circle (1/3nhh+blacker, (1.5nhw, 0));
+  save_elempic;
+  savepic;
+endchar;
+
+beginchar(1, 0, 0, 0); "double duration dot";
+  call_add_shift (.5nhw, 0);
+  savepic;
+endchar;
+
+beginchar(2, 0, 0, 0); "triple duration dot";
+  callpic;
+  add_elempic (nhw, 0);
+endchar;
+
+beginchar(3, 0, nhh#, nhh#); "left parenthesis"; % correct 0=>3 DT
+  x11=x13=-.1nhw; y12=0; x12=-.3nhw; y11=-y13=-.75nhh;
+  pickup med_pen;
+  draw z11..z12..z13;
+  savepic;
+endchar;
+
+beginchar(4, 0, nhh#, nhh#); "right parenthesis";
+  call_mirror ((.5nhw,0),(.5nhw,1));
+endchar;
+
+beginchar(5, 0, nhh#, nhh#); "cautionary parentheses";
+  callpic;
+  add_mirror ((.3nhw, 0),(.3nhw, 1));
+endchar;
+
+beginchar(6, 0, nhh#, nhh#); "cautionary wide parentheses";% -> bb
+  callpic;
+  add_mirror ((.55nhw, 0),(.55nhw, 1));
+endchar;
+
+%%%%%%%
+message("<accents>");
+%%%%%%%
+
+beginchar(120, 0, 1.5nhh#, 0); "harmonics";
+  pickup thin_pen;
+  draw fullcircle scaled .5nhw shifted (.5nhw, nhh);
+endchar;
+
+%beginchar(XX, 0, 1.5nhh#, 0); "???";
+%  x1=0; x2=.5nhw; x3=nhw-x1; x3=x4+.25nhw; x6=x1+med;
+%  y1=y6=y4=y3=nhh; y2=y1+nhh;
+%  z5-z6=whatever*(z2-z1);
+%  z5-z4=whatever*(z2-z3);
+%  fill z1--z2--z3--z4--z5--z6--cycle;
+%  fill_circle (thick, ((x5,y1+.5thick)));
+%  savepic;
+%endchar;
+
+beginchar(20, 0, 2.25nhh#, 0); "upper sforzato";
+  x1=1/12nhw; x2=.5nhw; x3=nhw-x1; x3=x4+.25nhw; x6=x1+med;
+  y1=y6=y4=y3=nhh; y2=y1+nhh;
+  z5-z6=whatever*(z2-z1);
+  z5-z4=whatever*(z2-z3);
+  fill z1--z2--z3--z4--z5--z6--cycle;
+  savepic;
+endchar;
+
+beginchar(21, 0, 0, 2.25nhh#); "lower sforzato";
+  call_mirror (origin, right);
+endchar;
+
+beginchar(22, 0, nhh#, 0); "downbow";
+  fill_square (thin, nhh, (-thin, .4nhh));
+  fill_square (.5nhw+thin+1, .8beamht+thin, (-thin, nhh));
+  add_mirror ((.5nhw,0),(.5nhw,1));
+endchar;
+
+beginchar(23, 0, 1.5nhh#, 0); "upbow";
+  pickup med_pen;
+  draw (.15nhw, 1.7nhh)--(.5nhw, .2nhh);
+  add_mirror ((.5nhw,0),(.5nhw,1));
+endchar;
+
+beginchar(24, 0, nhh#, 0); "upper staccato";
+  fill_circle (.275nhw+blacker, (.5nhw, nhh));
+  savepic;
+endchar;
+
+beginchar(25, 0, 0, nhh#); "lower staccato";
+  call_mirror (origin, right);
+endchar;
+
+beginchar(18, 0, nhh#, 0); "upper tenuto/staccato";
+  fill_square (nhw, 1.25med, (0, 1.2nhh-.625med));
+  fill_circle (.275nhw+blacker, (.5nhw, .9nhh));
+  savepic;
+endchar;
+
+beginchar(19, 0, 0, nhh#); "lower tenuto/staccato";
+  call_mirror (origin, right);
+endchar;
+
+beginchar(26, 0, nhh#, 0); "upper portato (tenuto)";
+  fill_square (nhw, 1.25med, (0, nhh-.625med));
+  savepic;
+endchar;
+
+beginchar(27, 0, 0, nhh#); "lower portato (tenuto)";
+  call_mirror (origin, right);
+endchar;
+
+beginchar(28, 0, 1.5nhh#, 0); "upper staccatissimo";
+  rayon:= thin+.125nhh;
+  x1=x3=x2+rayon=x4-rayon=.5nhw;
+  y2=y4=y1-rayon=y3+.5nhh=1.15nhh;
+  fill z3--z4{up}..z1..{down}z2--cycle;
+  savepic;
+endchar;
+
+beginchar(29, 0, 0, 1.5nhh#); "lower staccatissimo";
+  call_mirror (origin, right);
+endchar;
+
+beginchar(30, 0, 2.25nhh#, 0); "upper marcato";
+  pickup med_pen;
+  draw (-.2nhw, 1.9nhh)--(1.2nhw, 1.5nhh)--(-.2nhw, 1.1nhh);
+  savepic;
+endchar;
+
+beginchar(31, 0, 0, 2.25nhh#); "lower marcato";
+  call_mirror (origin, right);
+endchar;
+
+%%%%%%%
+message ("<noteheads>");
+%%%%%%%
+
+NHW=nhw+hlthick;
+
+beginchar(7, 0, .5nhh#, .5nhh#); "quarter note";
+% makeshift, expedience
+if pixels_per_inch=600:
+  if NHW>50: corNHW=1.04*NHW; else: corNHW=1.04*NHW+1; fi
+    fill fullcircle xscaled corNHW yscaled 1.85h
+         rotated 20 shifted (.5NHW-.5, 0);
+else:
+  corNHW=1.065*NHW;
+    fill fullcircle xscaled corNHW yscaled 1.85h
+         rotated 20 shifted (.5NHW, 0);
+fi
+endchar;
+
+beginchar(8, 0, .5nhh#, .5nhh#); "half note";
+  penpos1(max(1,2hlthick), 0);
+  penpos3(max(1,2hlthick), 180);
+  penpos2(thick,-90);
+  penpos4(thick, 90);
+  -x1l = .53NHW;
+  x3l = .5NHW;
+  x2 = x4 = y1 = y3 = 0;
+  y2l =-y4l = h;
+  penstroke (z1e{up}..z2e{right}..z3e{down}..z4e{left}..cycle)
+             rotated 20 shifted (.5NHW, 0);
+endchar;
+
+beginchar(9, 0, .5nhh#, .5nhh#); "whole note";
+  x1= y1 = y3 = y5 = y7 = 0;
+  x3= 2x2 = 2x4 = 2x6 = 2x8 = 5/4nhw;
+  y2=-y4 = h;
+  x5= x3-x7 = x1+.375nhw-blacker;
+  y6=-y8 = y2-.1thin;
+  fill z1{curl3}..z2..{curl3}z3{curl3}..z4..{curl3}cycle;
+  unfill (z5..z6..z7..z8..cycle) rotatedaround ((x2,0), 45) shifted (.5,.5);
+%{{{
+  currentpen:= pencircle;
+  draw rt z1{curl3}..bot z2..{curl3}lft z3{curl3}..top z4..{curl3}cycle;
+%}}}
+  labels(range 1 thru 8);
+  savepic;
+endchar;
+
+beginchar(56, 0, .5nhh#, .5nhh#); "whole note with | --> |O|";
+  callpic;
+  fill_square (.6thick, nhh, (-.55thick,-.5nhh));
+  fill_square (.6thick, nhh, (5/4nhw-.05thick,-.5nhh));
+endchar;
+
+beginchar(32, 0, .5nhh#, .5nhh#); "brevis";% 2 whole notes
+  fill_square (5/4nhw, .25nhh, (0,.25nhh));
+  add_mirror (origin, right);
+  x1=x2=0; x3=x4=5/4nhw; y1=-y2=y3=-y4=.7nhh;
+  pickup line_pen;
+  draw z1--z2; draw z3--z4;
+  savepic;
+endchar;
+
+beginchar(39, 0, .5nhh#, .5nhh#); "longa";% 4 whole notes
+  callpic;
+  pickup line_pen;
+  draw (5/4nhw,-.7nhh)--(5/4nhw,-1.7nhh);
+endchar;
+
+beginchar(36, 0, .5nhh#, .5nhh#); "maxima";% 8 whole notes
+  fill_square (5/2nhw, .3nhh, (0,.2nhh));
+  add_mirror (origin, right);
+  pickup line_pen;
+  draw (0,.7nhh)--(0,-.7nhh); draw (5/2nhw,.7nhh)--(5/2nhw,-1.7nhh);
+endchar;
+
+beginchar(37, 0, .5nhh#, .5nhh#); "filled diamond";% -> triangle
+  fill unitsquare scaled (.5*sqrt(2)*NHW) rotated -45;
+endchar;
+
+def square (expr mw)=
+  fill_square (sqrt(2)*.5mw, max(1,thin), origin) rotated -45;
+  fill_square (sqrt(2)*.5mw, .15nhw, (0,-.15nhw)) rotated 45;
+  save_elempic;
+  mirror (origin,up);
+  mirror (origin,left);
+  shift_pic (mw+.5,0);
+  add_elempic(0,0);
+%  mirror (origin,right);% I've seen this too, somewhere ...
+enddef;
+
+beginchar(38, 0, .5nhh#, .5nhh#); "unfilled diamond";% -> rimshot
+  square (NHW);
+endchar;
+
+beginchar(99, 0, .5nhh#, .5nhh#); "oldstyle quarter notehead up";
+  x1=x4=0; x2=x3=NHW; y1=y2=-y3=-y4=h-hlthick;
+  fill z1{dir-10}..z2--z3{dir-170}..z4--cycle;
+  savepic;
+endchar;
+
+beginchar(100, 0, .5nhh#, .5nhh#); "oldstyle quarter notehead down";
+  call_mirror(origin, right);
+endchar;
+
+beginchar(101, 0, .5nhh#, .5nhh#); "oldstyle half notehead up";
+  pthick:=.2nhh;
+  x1=0; x2=NHW; y1=y2=h-.5pthick+hlthick;
+  pickup penrazor scaled pthick rotated 90;
+  draw z1{dir-10}..z2;
+  add_shift (0, -nhh+pthick);
+  fill_square (lthick, nhh-hlthick, (0, -h+hlthick));
+  fill_square (lthick, nhh-hlthick, (nhw-hlthick, -h+hlthick));
+  savepic;
+endchar;
+
+beginchar(102, 0, .5nhh#, .5nhh#); "oldstyle half notehead down";
+  call_mirror(origin, right);
+endchar;
+
+beginchar(111, 0, .5nhh#, .5nhh#); "cross"; % -> closed hihat
+  x1=0; x2=nhw; y1=-.5nhw; y2=-y1;
+  pickup med_pen;
+  draw top rt z1--bot lft z2;
+  add_mirror((.5nhw,0),(.5nhw,1));
+  savepic;
+endchar;
+
+beginchar(112, 0, .5nhh#, .5nhh#); "halfcircled cross";% -> halfclosed hihat
+  callpic;
+  pickup thin_pen;
+  draw halfcircle scaled nhw shifted (.5nhw,0);
+endchar;
+
+beginchar(113, 0, .5nhh#, .5nhh#); "circled cross";% -> open hihat
+  callpic;
+  pickup thin_pen;
+  draw fullcircle scaled nhw shifted (.5nhw,0);
+endchar;
+
+def doublesharp (expr mw, xshift)=
+  x1=y2=x3=0; y1=x2=y4=.5mw; y3=.5mw-x4=.1mw;
+  z4'=.925[z3,z4]; z3'=.925[z4,z3];                        % ***
+  penpos2(max(1,thin),45);
+%%% a 'nicer' look for 'high'res-printers gives
+if pixels_per_inch > 500:
+  fill z1..{dir-125}z3'{dir35}..{se}z2l--z2r--z1--cycle;
+  fill z1..{dir35}z4'{dir-125}..{se}z2r--z2l--z1--cycle;   % ***
+else :
+%%% but this causes 'strange path' on lower resolutions
+  fill z1..{dir-110}z3'{dir30}..{se}z2l--z2r--z1--cycle;
+  fill z1..{dir20}z4'{dir-120}..{se}z2r--z2l--z1--cycle;   % ***
+fi
+%{{{
+  currentpen:= pencircle; draw z1--(x2+1,y2-1);% draw (x3'+1,y3'+1)--z5';
+%}}}
+% add_mirror ((0,.5mw),(.5mw,0));                          % ***
+  add_mirror ((.5mw,-.5mw),(.5mw,.5mw));
+  add_mirror (origin, right);
+  shift_pic (xshift, 0);
+enddef;
+
+beginchar(114, 0, .5nhh#, .5nhh#); "doublesharp notehead";% -> ride cymbal
+  doublesharp (.95nhw,0.025nhw);
+  savepic;
+endchar;
+
+beginchar(115,0, .5nhh#, .5nhh#);"circled doublesharp notehead";%->crash cymbal
+  callpic;
+  pickup thin_pen;
+  draw fullcircle scaled nhw shifted (.5nhw,0);
+endchar;
+
+beginchar(116, 0, .5nhh#, .5nhh#); "triangle";% -> rattle
+  x1=y1=y2=0; x2=2x3=nhw; y3=.8h;
+  pickup med_pen;
+  draw z1--z2--z3--z1;
+endchar;
+
+beginchar(117, 0, .5nhh#, .5nhh#); "bongo cross";
+  pickup med_pen;
+  draw (0,0)--(nhw,0);
+  draw (0.5nhw,-0.5nhw) -- (0.5nhw,0.5nhw);
+endchar;
+
+beginchar(118, 0, .5nhh#, .5nhh#); "rhombus";% -> shaker
+  x1=x4=y2=y4=0; y1=-y3=-h; x2=x3=NHW;
+  fill z1--z2--z3--z4--cycle;
+endchar;
+
+beginchar(95, 0, .5nhh#, .5nhh#); "gregorian square";
+  x1=x4=0; x2=x3=gregwidth; y1=y2=-y3=-y4=.5gregwidth-lthick;
+  fill z1{dir 15}..z2--z3{dir 165}..z4--cycle;
+  shift_pic(0,-hlthick);
+  savepic;
+endchar;
+
+beginchar(96, 0, .5nhh#, .5nhh#); "gregorian square left";
+  callpic;
+  fill_square (med, 1.5nhh,(0, -1.5nhh));
+endchar;
+
+beginchar(97, 0, .5nhh#, .5nhh#); "gregorian square right";
+  callpic;
+  fill_square (med, 1.5nhh,(gregwidth-med, -1.5nhh));
+  savepic;
+endchar;
+
+beginchar(124, 0, .5nhh#, .5nhh#); "porrectus";
+  x1=x4=0; x2=x3=2.5*gregwidth; y1=-y4=.5gregwidth-lthick; y2=y1-nhh; y3=y4-nhh;
+  fill z1..{right}z2--z3{left}..z4--cycle; shift_pic(0,hlthick);
+  fill_square (med, 1.5nhh,(0, -1.5nhh));
+endchar;
+
+beginchar(125, 0, .5nhh#, .5nhh#); "quilisma";
+  qdecalage:=.12*gregwidth;
+  x1=x4=-0.2*gregwidth; x2=x3=1.2*gregwidth;
+  y1+qdecalage=y2-qdecalage=.5gregwidth-lthick;y1=-y3; y2=-y4;
+  fill z1--z2--z3--z4--cycle;
+  pickup med_pen;
+  
+  draw z4--(z1+0.4*(z1-z4));
+  draw (0.667z4+0.333z3)--((0.667z1+0.333z2)+0.4*(z1-z4));
+  draw (0.333z4+0.667z3)--((0.333z1+0.667z2)+0.4*(z1-z4));
+  draw z3--(z2+0.4*(z1-z4));
+  shift_pic(0,-hlthick);
+endchar;
+
+beginchar(126, 0, .5nhh#, .5nhh#); "mirrored gregorian square";
+  x1=x4=0; x2=x3=gregwidth; y1=y2=-y3=-y4=-.5gregwidth+lthick;
+  fill z1{dir -15}..z2--z3{dir -165}..z4--cycle;
+  shift_pic(0,+hlthick);
+endchar;
+
+
+
+%%%%%%%
+message ("<flags>");
+%%%%%%%
+
+flagw:=.8nhw;
+flagthick:=nhh;
+flagthin:=5thinwidth;
+
+def flagshape
+(expr contflag, width, height, flgthick, flgthin, shifty, flagsense) =
+  penpos1(flgthick+blacker, 90);   % .1
+  penpos2(3.25flgthin+blacker, 70);%
+  x1 = 0;                          %     .2
+  y1 = height+shifty-.5flgthick;   %
+  x2 = 3/8width;                   %         .3
+  y2 = y1-.45flgthick;             %
+  x3 = width-flgthin/2;            %      .4(.4)
+  y3 = y1-1.5flgthick;
+
+  if contflag=1:  x4 = x3-.4width; y4 = shifty;
+  else:           x4 = x3; y4 = 2.5flagthick-2flgthick; fi
+  if flagsense>0: penpos3(1.15flgthin, 35);
+  else:           penpos3(.8flgthin, 0); fi
+
+  penstroke z1e..z2e..z3e{down}..z4;
+%{{{
+  currentpen:= pencircle; draw lft z1..z2..z3{down}..z4;
+%}}}
+  penlabels(1,2,3,4)
+enddef;
+
+def mirror_flag(expr sense)= if sense<0: mirror((0,h/2),(1,h/2));fi enddef;
+
+def cflag (expr sense) =
+  flagshape(1, flagw, 3nhh, flagthick, flagthin, 0, sense);
+  mirror_flag(sense);
+  savepic;
+enddef;
+
+def ccflag (expr sense) =
+  flagshape(5, flagw, 2.25nhh, 2/3flagthick, flagthin, flagthick, sense);
+  save_elempic;
+  clearxy;
+  flagshape(1, flagw, 2.5nhh, 2/3flagthick, flagthin, 0, sense);
+  savepic;
+  mirror_flag(sense);
+enddef;
+
+def addflag (expr sense, shifty) =
+  call_add_save_elempic (0, shifty*.75flagthick);
+  mirror_flag(sense);
+enddef;
+
+def cccflag (expr sense) = addflag(sense, 1) enddef;
+def ccccflag (expr sense) = addflag(sense, 2) enddef;
+def cccccflag (expr sense) = addflag(sense, 3) enddef;
+
+beginchar(40, 0, 3.25nhh#, 0); "8th flag up";
+  cflag(1);
+  shift_pic (0, .5nhh+.5);
+endchar;
+
+beginchar(12, 0, 3.25nhh#, 0); "acciacaturra stem up";
+  callpic;
+  pickup med_pen;
+  x1=-.25nhw; y1=.2h; x2=1.1nhw; y2=y1+.6(x2-x1);
+  draw z1--z2;
+  shift_pic (0, .5nhh+.5);
+endchar;
+
+beginchar(41, 0, 3.25nhh#, 0); "16th flag up";
+  ccflag(1);
+  shift_pic (0, .25nhh);
+endchar;
+
+beginchar(42, 0, 4nhh#, 0); "32th flag up";
+  cccflag(1);
+  shift_pic (0, .25nhh);
+endchar;
+
+beginchar(43, 0, 4.75nhh#, 0); "64th flag up";
+  ccccflag(1);
+  shift_pic (0, .25nhh);
+endchar;
+
+beginchar(44, 0, 5.5nhh#, 0); "128th flag up";
+  cccccflag(1);
+  shift_pic (0, .25nhh);
+endchar;
+
+%%%
+% flags up should be wider
+%%%
+flagw:=nhw;
+
+beginchar(45, 0, 3.25nhh#, 0); "8th flag down";
+  cflag(-1);
+  shift_pic (0,-.5nhh-.5);
+endchar;
+
+beginchar(13, 0, 3.25nhh#, 0); "acciacaturra stem down";
+  callpic;
+  pickup med_pen;
+  x1=-.25nhw; y1=1.6nhh; x2=1.2nhw; y2=y1+.6(x2-x1);
+  draw z1--z2;
+  shift_pic (0,-.5nhh-.5);
+endchar;
+
+beginchar(46, 0, 3.25nhh#, 0); "16th flag down";
+  ccflag(-1);
+  shift_pic (0,-.25nhh);
+endchar;
+
+beginchar(47, 0, 4nhh#, 0); "32th flag down";
+  cccflag(-1);
+  shift_pic (0,-.25nhh);
+endchar;
+
+beginchar(48, 0, 4.75nhh#, 0); "64th flag down";
+  ccccflag(-1);
+  shift_pic (0,-.25nhh);
+endchar;
+
+beginchar(49, 0, 5.5nhh#, 0); "128th flag down";
+  cccccflag(-1);
+  shift_pic (0,-.25nhh);
+endchar;
+
+%%%%%%%
+message("<accidentals>");
+%%%%%%%
+
+def flat (expr reduction, shiftx, flatsense) =
+  fthick:= reduction*thick;
+  penpos4(4/3fthick,0);   % 1
+  penpos3(1/2fthick,-90); %
+  penpos6(4/7fthick,90);  %   6
+  x1 = x2 = x3 = x5 = fthick;     %  / \
+  y1 = 6fthick; y2 = .5y4;        % 2   4
+  y3l=-2fthick; y5 = y3r;         %    /
+  x4 = 3.6fthick; y4 = .1fthick;  % 3,5
+  y6r= 2fthick; x6 = .5(x2+x4);
+  t:= identity shifted (round(shiftx),0);
+  p:= (z1--z5) transformed t;
+  pickup penrazor scaled max(1,(2sind40*thin)) rotated 40;
+  draw p;
+  penstroke (z2..{right}z6e..z4e{sw+down}..{sw}z3e) transformed t;
+  if flatsense<0: mirror (z5 transformed t, z1 transformed t); fi
+  penlabels (1,2,3,4,5,6)
+enddef;
+
+beginchar(50, nhw#, 1.5nhh#, .5nhh#); "flat";
+  flat (1, 0, 1);
+  savepic;
+endchar;
+
+beginchar(51, 1.7nhw#, 1.5nhh#, .5nhh#); "doubleflat";
+  call_add_shift (.7nhw, 0);
+endchar;
+
+def sharp (expr reduction, zshift) =
+  sthick:= .5reduction*thick;
+  nx:= reduction*1.5nhh;
+  ny:= reduction*.8nhw;
+  y1 =-y7= nx-1.5sthick; y2 =-y8 = .5sthick-nx;
+  x1 = x2 = y3 = -y6 = ny-x7 = ny-x8 = 2sthick;
+  y4 =-y5 = y3 + 3sthick;
+  x3 = x5 = 0; x4 = x6 = ny;
+  pickup penrazor scaled max(1,thin) rotated angle(z4-z3);
+  draw z1--z2; draw z8--z7;
+  pickup penrazor scaled 3sthick rotated 90;
+  draw z3--z4; draw z5--z6;
+  shift_pic (zshift, 0);
+  labels (range 1 thru 8)
+enddef;
+
+beginchar(52, nhw#, 1.5nhh#, 1.5nhh#); "sharp";
+  sharp (1, 0);
+endchar;
+
+beginchar(53, nhw#, .5nhh#, .5nhh#); "doublesharp";
+  doublesharp (w, -.1nhw);
+endchar;
+
+def natural (expr reduction, zshift) =
+  ny:= .8nhw*reduction;
+  nthick:= 3/4reduction*thick;
+  x1 = x2 = x3 = nthick+.5thin;
+  x5 = x6 = x4 = ny-x1;
+  y1 = -y6 = 1.5nhh*reduction;
+  y2 = -y5 = 1.6nthick;
+  y4 = -y3 = y2+4/3nthick;
+  pickup penrazor scaled max(1,thin) rotated angle(z4-z2);
+  draw lft z1--bot lft(x3,y3-nthick);
+  draw top rt(x4,y4+nthick)--rt z6;
+  pickup penrazor scaled 2nthick rotated 90;
+  draw (x2-.5,y2)--(x4+.5,y4);
+  draw (x3-.5,y3)--(x5+.5,y5);
+  shift_pic (zshift, 0);
+  labels(1,2,3,4,5,6)
+enddef;
+
+beginchar(54, nhw#, 1.5nhh#, 1.5nhh#); "natural";
+  natural (1, 0);
+endchar;
+
+beginchar(90, apog_nhw#, nhh#, .5nhh#); "small flat";
+  flat (apog_fact, -.05nhw, 1);
+  savepic;
+endchar;
+
+beginchar(91, 1.65apog_nhw#, nhh#, .5nhh#); "small doubleflat";
+  call_add_shift (.7apog_fact*nhw,0);
+endchar;
+
+beginchar(92, apog_nhw#, nhh#, nhh#); "small sharp";
+  sharp (apog_fact, 0);
+endchar;
+
+beginchar(93, apog_nhw#, .5nhh#, .5nhh#); "small doublesharp";
+  doublesharp (w, -.075nhw);
+endchar;
+
+beginchar(94, apog_nhw#, nhh#, nhh#); "small natural";
+  natural (apog_fact, 0);
+endchar;
+
+%%%%%%%
+message ("<rests>");
+%%%%%%%
+
+beginchar(59, .5nhw#, 0, 0); "ddp";% doubledouble (4) pause
+  fill_square (.5nhw, 2nhh, (0, nhh));
+endchar;
+
+beginchar(58, .5nhw#, 0, 0); "dp";% double (2) pause
+  fill_square (.5nhw, nhh, (0, 2nhh));
+  savepic;
+endchar;
+
+beginchar(60, 5/4nhw#, .5nhh#, 0); "half rest";
+  fill_square (5/4nhw, .5nhh, (0, 0));
+  savepic;
+endchar;
+
+beginchar(10, 0, .5nhh#, 0); "half rest outside a staff";
+  callpic;
+  fill_square (2nhw, lthick, (-.375nhw, -hlthick));
+  savepic;
+endchar;
+
+beginchar(11, 0, 0, .5nhh#); "full rest outside a staff";
+  call_mirror(origin,right);
+endchar;
+
+beginchar(61, 5/4nhw#, 0, .5nhh#); "full rest";
+  fill_square (5/4nhw, .5nhh, (0, -.5nhh));
+endchar;
+
+beginchar(62, 0, 4nhh#, 0); "quarter rest";
+  rthin:= 1/8 nhh;           % .1
+  rthick:= 2 thick+rthin;    %       .2
+  alpha:= -50;               %    .3
+  penpos1(rthin, 90+alpha);  % .4
+  penpos5(rthin, alpha);     %       .5,10
+  penpos2(rthick, alpha);    %   .6
+  penpos4(rthick, alpha);    %
+  penpos3(3/4rthick, alpha); %       .7
+  penpos6(4/3thick, alpha);
+  penpos7(rthin, 45);
+  y1l = 4nhh - 1/2nhh;
+  x1l = 1/2nhh;
+  z2r = z1 +(nhh* right) rotated alpha;
+  z3  = 1/2[z2,z4];
+  z4  = (nhw,4nhh) scaled .55;
+  z5  = z4l+(nhh* right) rotated alpha;
+  x6l = x4l; y6r = 1.45nhh;
+  x7  = .9nhw; y7= nhh-1/8nhh;
+  z10 = z5r shifted (sqrt(2)*rthin/4,sqrt(2)*rthin/4);
+
+  pickup penrazor scaled rthin rotated 45;
+  draw z1--z2r; draw z4l--z10;
+  penstroke z2e..z3e..z4e;
+  penstroke z5e..z6e..z7e;
+  penlabels(1,2,3,4,5,6,7,10);
+  shift_pic (-.2nhw, 0);
+endchar;
+
+%%%
+%   Draw the crook needed for quaver rests and shorter.
+%   The crook extends left from the point z.i on the stem.
+%%%
+def crook(text i)=
+  forsuffixes $=i:
+  x3:=x.$-6.5fact; y3:=top y.$- 3fact;
+  x4:=x.$-6fact;   y4:=    y.$+.5fact;
+  draw z.${dir 240}..{dir 160}z3;
+  filldraw z3{dir 160}..z4{dir-20}..{dir 160}z3..cycle;
+  endfor
+enddef;
+
+beginchar(63, 0, 3.25nhh#, 0); "8th rest";
+  z1=(nhh,nhh);
+  z2-z1=whatever*dir 70;  %  Angle the stem at 70 degrees.
+%%%
+%   Define the scaling factor `fact' implicitly.
+%   This value will be used for the shorter rests as well.
+%%%
+  z2-z1=(5fact,1.7nhh);
+  pickup med_pen;
+  draw z1..z2;
+  crook(2);
+  shift_pic (-.35nhw, 0);
+  penlabels (1,2,3,4);
+endchar;
+
+beginchar(64, 0, 3.25nhh#, 0); "16th rest";
+  z1=(nhh,0);
+  z2-z1=whatever*dir 75;  %  Angle the stem at 75 degrees.
+  y2-y1=2.7nhh;
+  z5-z2=whatever*(z1-z2); y5=y2-nhh;
+  pickup med_pen;
+  draw z1..z2;
+  crook(2,5);
+  shift_pic (-.35nhw, 0);
+  penlabels (1,2,3,4,5);
+endchar;
+
+beginchar(65, 0, 4nhh#, 0); "32th rest";
+  z1=(nhh,0);
+  z2-z1=whatever*dir 80;  %  Angle the stem at 80 degrees.
+  y2-y1=3.7nhh;
+  z5-z2=whatever*(z1-z2); y5=y2-nhh;
+  z6-z2=whatever*(z1-z2); y6=y5-nhh;
+  pickup med_pen;
+  draw z1..z2;
+  crook(2,5,6);
+  shift_pic (-.35nhw, 0);
+  penlabels (1,2,3,4,5,6);
+endchar;
+
+beginchar(66, 0, 4.75nhh#, 0); "64th rest";
+  z1=(nhh,0);
+  z2-z1=whatever*dir 82;  %  Angle the stem at 82 degrees.
+  y2-y1=4.7nhh;
+  z5-z2=whatever*(z1-z2); y5=y2-nhh;
+  z6-z2=whatever*(z1-z2); y6=y5-nhh;
+  z7-z2=whatever*(z1-z2); y7=y6-nhh;
+  pickup med_pen;
+  draw z1..z2;
+  crook(2,5,6,7);
+  shift_pic (-.35nhw, 0);
+  penlabels (1,2,3,4,5,6,7);
+endchar;
+
+%%%%%%%
+message ("<clefs>");
+%%%%%%%
+
+def violin(expr reduction) =
+  gx:=reduction*-nhw;
+  gy:=reduction*nhh;
+  gthick:=1.5reduction*thick;
+  gthin:=.75reduction*med;
+
+  x1=31/24gx+w; x4=23/24gx+w;  x2=x10=3/4gx+w;  x3r=w; x8l=15/16gx+w;
+  x5=x11r=15/8gx+w;  x6=gx+w;  x7=5/8gx+w;  x9=5/4gx+w;
+  y1=5/8gy;  y2r=y5r=2gy;  y3=gy;  y4r=0;  y6=27/8gy;
+  y7l=5gy;  y8l=11/2gy;  y9=17/4gy;  y10=y11=-7/8gy;
+  penpos1(gthin,160);
+  penpos2(gthick,90);
+  penpos3(gthick,0);
+  penpos4(5/4gthin,-90);
+  penpos5(3/2gthick,110);
+  penpos6(17/16gthick,130);
+  penpos7(gthin,-140);
+  penpos8(5/4gthick,-80);
+  penpos9(3/8gthick,0);
+  penpos10(gthin,0);
+  penpos11(1/2gthick,180);
+  penstroke z1e{nw}..z2e..z3e..z4e..z5e{up+ne}..z6e..{up+nw}z7e
+            ..z8e{sw}..{down}z9e{down}..{down}z10e..z11e;
+%{{{
+  currentpen:= pencircle;
+  draw z1{nw}..z2..z3..z4..z5{up+ne}..z6..{up+nw}z7
+       ..z8{sw}..{down}z9{down}..{down}z10..z11;
+%}}}
+  fill_circle ((3(x2-x4)), (x11+11/40gy, y11));
+  penlabels(range 1 thru 11)
+enddef;
+
+%beginchar(71, 8/3nhw#, 5.5nhh#, 1.5nhh#); "G-clef";
+beginchar(71, 8/3nhw#, 4.5nhh#, 2.5nhh#); "G-clef";
+  violin(1);
+% shift_pic (-.2nhw, 0);    % T.59
+  shift_pic (-.2nhw, -nhh); % T.60
+endchar;
+
+%beginchar(72, 7/3nhw#, 3nhh#, 2nhh#); "small G-clef";
+beginchar(72, 7/3nhw#, 3nhh#, 3nhh#); "small G-clef";
+  violin(.8);
+% shift_pic (-.3nhw, 0);    %T.59
+  shift_pic (-.3nhw, -nhh); %T.60
+endchar;
+
+def bass (expr reduction) =
+  fx:=reduction*nhw;
+  fy:=reduction*nhh;
+  fthick:=reduction*thick;
+
+  x2=.8fx; y2=3nhh;
+  x1=x2r+.26fx; y1=y2;
+  x3=x2+.71fx; y3r=y2+1fy;
+  x4=x3+.71fx; y4=y2-.2fy;
+  x6=x2-6reduction*thinwidth; y6=y2-2.2fy;
+  x7=x4+.50fx; y7=y2+.38fy;
+
+  penpos2(.6fthick,180);
+  penpos3(.6fthick, 90);
+  penpos4(2fthick,0);
+  penpos6(.4fthick,-10);
+
+  fill_circle (.35fx, z7);
+  add_mirror ((0,y2), (1,y2));
+  fill_circle ((2(x2r-x1)), z1);
+
+  penstroke z2e{up}..{right}z3e{right}..{down}z4e{down}..{left+.1down}z6e;
+%{{{
+  currentpen:= pencircle;
+  draw z2{up}..{right}z3{right}..{down}z4{down}..{left+.1down}z6;
+%}}}
+  penlabels(1,2,3,4,6)
+enddef;
+
+beginchar(73, 8/3nhw#, 4nhh#, 0); "F-clef";
+  bass(1);
+% shift_pic (-.35nhw, 0);       % T.59
+  shift_pic (-.35nhw, -3nhh);   % T.60
+endchar;
+
+beginchar(74, 7/3nhw#, 4nhh#, 0); "small F-clef";
+  bass(.8);
+% shift_pic (-4/15nhw, 0);      % T.59
+  shift_pic (-4/15nhw, -3nhh);  % T.59
+endchar;
+
+def alt(expr reduction, yshift) =
+  nh:=h*reduction;
+  athick:=1/10nh;
+  ahigh:=1/2nh;
+  radius:=5/4thick*reduction;
+
+  x4=13/16nh+3thinwidth; x5=9/16nh;
+  x6=1/2nh; x9=x10=2/3nh; x11=17/32nh;
+  y4=yshift+31/50ahigh; y5=yshift+1/2ahigh;
+  y6=yshift; y9=yshift+1/9ahigh;
+  y10=yshift+ahigh; y11=yshift+11/14ahigh;
+  penpos4(athick,180);
+  penpos5(1/8athick,0);
+  penpos6(athick,0);
+  penpos9(1/3athick,90);
+  penpos10(1/3athick,-90);
+  penpos11(1/2athick,0);
+
+  penstroke z5e..{sw+down}z6e;
+  penstroke z5e{se+3down}..{right}z9e{right}..{up}z4e{up}
+            ..{left}z10e{left}..{sw+3down}z11e;
+  fill_circle (2radius, (z11l+(radius, -.05nhh)));
+  fill_square (athick, ahigh, (5/16nh-1/2athick,yshift));
+  fill_square (.25athick, ahigh, (x6l-.25athick,yshift));
+  add_mirror ((0,yshift),(1,yshift));
+  penlabels(4,5,6,9,10,11)
+enddef;
+
+beginchar(75, 8/3nhw#, 4nhh#, 0); "Alto clef";
+  alt(1, 2nhh);
+% shift_pic (-.45nhw, 0);     % T.59
+  shift_pic (-.45nhw, -2nhh); % T.60
+endchar;
+
+beginchar(76, 7/3nhw#, 4nhh#, 0); "small Alto clef";
+  alt(.8 ,2nhh);
+% shift_pic (-.3nhw, 0);      % T.59
+  shift_pic (-.3nhw, -2nhh);      % T.60
+endchar;
+
+beginchar(77, 8/3nhw#, 4nhh#, 0); "drum clef";
+  fill_square (.3nhw, .5h, (.85nhw,1nhh));
+  add_mirror ((w/2,0),(w/2,1));
+% shift_pic (.2nhw, 0);    % T.59
+  shift_pic (.2nhw, -2nhh); % T.60
+endchar;
+
+beginchar(103, 8/3nhw#, 4nhh#, nhh#); "oldstyle G-clef";
+  def penslopeI= (.35nhh/cosd45)+blacker,45 enddef;
+  def penslopeII= (.35nhh/cosd32.5)+blacker,32.5 enddef;
+  def penslopeIII= (.4nhh/cosd32.5)+blacker,32.5 enddef;
+  def penslopeIV= (max(1,lthick/cosd32.5)),122.5 enddef;
+
+  x1l=1.5nhw; x2l=x3l=x4r=x1l+2/5nhw;
+  x1l-x5l=x3r-x1l; x6l=x15r=x5l; x7r=x1=x14r; x8=x2;
+  y1l=y2l=1.45nhh; y3l=y4r;
+  y4l=0; y5=y3r; y6l=y15r; y7l=y8r=3nhh; y14r=y7r;
+  z15r-z14r=whatever*dir(180+32.5);
+  penpos1(penslopeI);
+  penpos2(penslopeI);   %   /7\    6(15)
+  penpos3(penslopeII);  %  6   8   7(14)
+  penpos4(penslopeIII); %  |
+  penpos5(penslopeII);  %  | 1-2
+  penpos6(penslopeII);  %  |   |
+  penpos7(penslopeII);  %  5   3
+  penpos8(.35nhh,90);   %   \4/
+  penpos14(penslopeIV);
+  penpos15(penslopeIV);
+  penstroke z1e--z2e--z3e;
+  fill unitsquare xscaled (x3r-x4l) yscaled lthick
+       shifted z4l rotatedaround (z4l,32.5);
+  penstroke z4e--z5e{dir85}..z6e;
+  penstroke z7e--z8e; penstroke z14e--z15e;
+
+  x9=x5l=x16-.25nhw; x10l=x1l; x11=x10-.1nhw; x12=x8;
+  x17l=x2r+.05nhw; x13r=x2l-.1nhw;
+  y9r=-nhh; y16l=y9l-.01nhh; y10=0;
+  y11=3.5nhh; y12r=y8r; y17r=y8r+.2nhh; y13r=4nhh;
+                                 %        13
+  penpos12(2lthick,90);          %       /  \
+  penpos17(3hlthick,180);        %     11    17
+  penpos13(.35nhh+blacker,-90);  %      |  12
+  penpos11(max(lthick,1),0);     %      |
+  penpos10(max(lthick,1),0);     %     10
+  penpos16(.475nhh+blacker,-90); %     /
+  penpos9(.5nhh+blacker,-90);    % 9-16
+
+  penstroke z12e..z17e{dir80}..z13e..{down}z11e..{down}z10e{down}..
+            {left}z16e..z9e;
+  shift_pic (-.25nhw,0);
+  penlabels (range 1 thru 12);
+  shift_pic (0, -nhh); % T.60
+endchar;
+
+beginchar(98, 8/3nhw#, 3.25nhh#, 0); "gregorian C clef";
+  x1=x4=0; x2=x3=gregwidth; y1=y2=-y3=-y4=.5gregwidth-lthick;
+  fill z1{dir 15}..z2--z3{dir 165}..z4--cycle;
+  save_elempic;
+  pickup med_pen; draw bot rt z1..{down}(-.01nhw,-.5nhh);
+  shift_pic(nhw,2.5nhh);
+  add_mirror ((0,2nhh),(1,2nhh));
+  savepic;
+  shift_pic (0,-2nhh);
+endchar;
+
+beginchar(122, 8/3nhw#, 4.25nhh#, 0); "gregorian F clef";
+  callpic;
+  add_elempic (.1nhw,2nhh);
+  fill_square (med, 1.5nhh, (.75nhw,.8nhh));
+  shift_pic (1/3nhw,-2nhh);
+endchar;
+
+%%%%%%%
+message ("<special signs>");
+%%%%%%%
+
+beginchar(14, 0, nhh#, 0); "song system limit up";
+  x1=y1=0; x2=1.5nhw; y2=nhh;
+  penpos1(thick, 90); penpos2(thin, 90);
+  penstroke z1e{right}..{dir80}z2e;
+%{{{
+  currentpen:=pencircle; draw z1{right}..{dir80}z2;
+%}}}
+  savepic;
+endchar;
+
+beginchar(15, 0, 0, nhh#); "song system limit down";
+  call_mirror (origin, right);
+endchar;
+
+beginchar(16, 0, 0, 0); "used for volta";
+  fill_square (lthick, 2.5nhh, (0,-.5nhh));
+endchar;
+
+beginchar(17, 0, 0, 0); "used for volta";
+  fill_square (lthick, 2.5nhh, (0,-2.5nhh));
+endchar;
+
+% 'polyrhythmik' {\meterfrac{3+2+3}8}, e.g. Bart\'ok
+beginchar(57, 2nhh#, 1.5nhh#, 0); "big plus sign";
+  pickup pencircle scaled .3nhh;
+  draw lft(.5nhh,.9nhh)..rt(1.5nhh,.9nhh);
+  draw bot(nhh,.4nhh)..top(nhh,1.4nhh);
+endchar;
+
+beginchar(79, 0, 4nhh#, 0); "caesura";% other breathmark
+  pickup penrazor scaled thick;
+  draw (.3nhw+thick, 3.4nhh)--(.7nhw+thick, 4.6nhh);
+endchar;
+
+beginchar(80, 0, 2.25nhh#, 0); "fermata up";
+  x1 = -.5nhw;  x2=.5(x1+x3); x3 = 1.5nhw;
+  y1 = y3 = nhh; y2 = 2.3nhh;
+  penpos1(thinwidth,165);
+  penpos2(.9beamht+thin,90);
+  penpos3(thinwidth,15);
+  penstroke z1e{dir75}..z2e..{dir-75}z3e;
+  fill_circle (beamht, (x2, y1+.5beamht));
+%{{{
+  currentpen:= pencircle; draw z1{dir 75}..z2..{dir-75}z3;
+  add_mirror ((x2, 0),(x2, 1));
+%}}}
+  savepic;
+  penlabels(1,2,3);
+endchar;
+
+beginchar(81, 0, 0, 2.25nhh#); "fermata down";
+  call_mirror (origin, right);
+endchar;
+
+beginchar(82, 5/3nhw#, 4nhh#, 0); "allabreve";
+  fit:= .025nhw;
+  2x2 = 2x4 = x1 + 1/2nhh = w;
+  x3r = 0; 2y1 = 3y2 = y4r = 3nhh;
+  y3r = 2nhh; x5 = w -1/2nhh; y5 = 3nhh -1/2nhh;
+  z6r = z5r + (-1/40nhh, 1/20nhh);
+  penpos1(max(1,med), 0);
+  penpos2(max(1,med), -90);
+  penpos3(1/4nhh+thick,180);
+  penpos4(max(1,med), 90);
+  penpos5(max(1,med), 0);
+  penpos6(1/4nhh+med,45);
+  penstroke z1e..z2e..z3e..z4e..z5e;
+  fill rt z1r..lft z1l..cycle;
+  fill_circle (.35nhw+blacker, (z6 + (-2fit, fit)));
+  shift_pic (.5nhh,0);
+  savepic;
+
+  pickup med_pen;
+  draw (4/5nhw+.5nhh, y2r-3/8nhh)--(4/5nhw+.5nhh, y4r+3/8nhh);
+  penlabels(1,2,3,4,5,6);
+  save_elempic;
+  shift_pic (0,-2nhh);
+endchar;
+
+beginchar(83, 5/3nhw#, 3.25nhh#, 0); "C";
+  callpic;
+  shift_pic (0,-2nhh);
+endchar;
+
+beginchar(84, 10/3nhw#, 3.25nhh#, 0); "reverseC";
+  callpic;
+  add_mirror ((11/6nhw,0),(11/6nhw,1));
+  shift_pic (0,-2nhh);
+endchar;
+
+beginchar(123, 5/3nhw#, 3.25nhh#, 0); "reverseallabreve";
+  add_elempic (0,0);
+  mirror ((13/12nhw,0),(13/12nhw,1));
+  shift_pic (0,-2nhh);
+endchar;
+
+beginchar(121, 0, 0, 0); "double thumb bracket";
+  mh:=0.625nhh;
+  fill_square (lthick, mh, origin);
+  fill_square (.55nhw, lthick, origin);
+  add_mirror ((0,mh),(1,mh));
+  shift_pic (-.75nhw, -mh);
+endchar;
+
+%%%%%%%
+message ("<repeat symbols>");
+%%%%%%%
+
+beginchar(55, 0, 4nhh#, 0); "repeat colons";
+  fill_circle (1/3nhw+blacker, (0, 3/2nhh));
+  add_mirror ((0, 2nhh),(1, 2nhh));
+  shift_pic(0,-2nhh);
+endchar;
+
+beginchar(78, 0, 4nhh#, 0); "due volte";
+  fill_circle ((1/3nhw+blacker),(-.75nhh,2.5nhh));
+  addto currentpicture also currentpicture rotatedaround ((0,2nhh), 180);
+  pickup penrazor scaled (1/3nhw+blacker);
+  draw (-nhh, nhh)--(nhh, 3nhh);
+endchar;
+
+beginchar(85, 0, 3.25nhh#, 0); "coda";
+  mh:=3nhh;
+  x2 = 2nhw-x4 = 1/6mh; y2 = y4 = 1/2mh;
+  x3 = x5 = nhw; y3 = mh-y5 = 5/6mh;
+  pickup thin_pen;
+  draw (0,mh/2)--(2nhw,mh/2); draw (nhw,0)--(nhw,mh);
+  savepic;
+  pickup coda_pen;
+  draw z2..z3..z4..z5..cycle;
+  shift_pic (-nhw, 0);
+  labels (1,2,3,4);
+endchar;
+
+beginchar(105, 0, 3.25nhh#, 0); "coda II";
+  mh:=3nhh;
+  callpic;
+  x2 = x5 = 1/6mh; y2 = y3 = 5/6mh;
+  x3 = x4 = 2nhw-x2; y4 = y5 = 1/6mh;
+  pickup coda_pen;
+  draw z2--z3--z4--z5--cycle;
+  shift_pic (-nhw, 0);
+  labels (1,2,3,4);
+endchar;
+
+beginchar(86, 0, 3.25nhh#, 0); "segno";
+  x1= .5nhw; y1 = 1.75nhh; x4=-.5x1; y4=.4nhh;
+  x5=.7x1; y5=y6=3.05nhh; x6=x5-x1;
+  z1'= (x1+1,y1);
+  penpos1'(.5nhh+blacker, 80);
+  penpos5(max(1,thin), -110);
+  penpos6(max(1,1.2thin), -70);
+  fill_circle (.5nhh, (x5-.2nhh,y5l-.13nhh));
+  fill_circle (thick+.1nhh, (x4, y4+.9nhh));
+  penstroke z1'e{dir170}..{ne}z6e..z5e;
+  pickup penrazor scaled max(1,thin);
+  draw z4--z1;
+  penlabels (1,5,6);
+  addto currentpicture also currentpicture rotatedaround (z1, 180);
+endchar;
+
+beginchar(110, 0, 5.5nhh#, 2nhh#); "segno II";
+  mw:=2.5nhh;
+  gamma:=36.9;
+  dist:=1nhh+.75beamht;
+  gthick:=beamht+blacker;
+
+  x1'=x3'=x7=x16=2x1=2x10=2x13=.5mw; x9=x14=x2; x3r=mw-.2nhh;
+  x11=x5; x15=x3; mw-x8=x12=1/3nhh;
+  y1'=dist; y3'=y1'-.5dist; y4'+dist=y9-2dist=y2; y10-2dist=y13+dist=y1;
+  y11=y5+2dist; y14=y2-dist; y8=y6-.1dist+2dist; y12=y3+.1dist-dist;
+  y15=y3-dist; y16r=-d; y7l=3.25nhh+2dist;
+  z1-z1'=z1'-z2=whatever*dir-gamma;
+  z3-z3'=whatever*dir-gamma; z2-z4=whatever*dir(-90-gamma);
+  z2-z4'=whatever*dir-90; z4-z4'=whatever*dir-gamma;
+  z5=z3 rotatedaround (z1',180); z6=z4 rotatedaround (z1',180);
+
+  penpos1(gthick, gamma); penpos2(gthick, gamma);
+  penpos3(max(1,thin),-90+gamma); penpos4(.9gthick,-180+gamma);
+  penpos5(max(1,thin),-90+gamma); penpos6(.9gthick,-180+gamma);
+  penpos7(.3gthick,-90-gamma); penpos8(.5gthick,-180+gamma);
+  penpos9(gthick, gamma); penpos10(gthick, gamma);
+  penpos11(.5gthick,-90+gamma); penpos12(.5gthick,-180+gamma);
+  penpos13(gthick, gamma); penpos14(gthick, gamma);
+  penpos15(.5gthick,-90+gamma); penpos16(.3gthick+1,-90-gamma);
+
+  penstroke z6e{dir(180-gamma)}..z5e..z1e---z2e..z3e..{dir(180-gamma)}z4e;
+  add_shift (0,2dist);
+  add_shift (0,-dist);
+  unfill (0,-nhh)--(mw,-nhh)--(mw,-d)--(0,-d)--cycle;
+  unfill (0,5nhh)--(mw,5nhh)--(mw,6nhh)--(0,6nhh)--cycle; cullit;
+
+  penstroke z9e---z10e..z11e..z7e..z8e;
+  penstroke z13e---z14e..z15e..z16e..z12e;
+
+  dotthick:=.65nhh+blacker; fit:=.15nhh;
+  fill_circle(dotthick,(x8-fit,y8-.5dotthick+fit+.02nhh));
+  fill_circle(dotthick,(x12+fit,y12+.5dotthick-fit-.02nhh));
+
+  pickup thin_pen;
+  draw (3/8mw,1/3nhh)--(3/8mw,4nhh+1/3nhh);
+  draw (5/8mw,-1/3nhh)--(5/8mw,4nhh-1/3nhh);
+  penlabels (range 1 thru 16);
+  shift_pic(-mw,0);
+endchar;
+
+%%%%%%%
+message ("<trills>");
+%%%%%%%
+
+beginchar (67, 0, nhh#, 0); "turn";
+  x1=2nhw-x6=.4nhw; y1r=h; y6=h-y1;
+  x2r=0; y2=.5h; x5=2nhw-x2; y5=h-y2;
+  x3=.44nhw; y3r=0; x4=2nhw-x3; y4=h-y3;
+  penpos1(med, 90);
+  penpos2(med, 180);
+  penpos3(thick,-40);
+  penpos4(thick,-40);
+  penpos5(med, 180);
+  penpos6(med, 90);
+  penstroke z1e..{down}z2e{down}..{right}z3e{right}
+            ..{right}z4e{right}..{down}z5e{down}..z6e;
+  fill_circle ((1/4nhh+thick), (x1,y1r-thick));
+  fill_circle ((1/4nhh+thick), (x6,y6l+thick));
+  shift_pic (-.5nhw, 0);
+  penlabels(1,2,3,4,5,6);
+  savepic;
+endchar;
+
+beginchar (68, 0, nhh#, 0); "backturn";
+  call_mirror ((.5nhw,0), (.5nhw,1));
+endchar;
+
+def setpar =
+  off:= .3nhw; x2=x1+off; x3=x2+off; x4=x3+off;
+  y1= y3=.75nhh-y2=.75nhh-y4=.15nhh;
+enddef;
+
+beginchar(87, 0, nhh#, 0); "shake";
+  x1=-.15nhw; setpar;
+  pickup pensquare xscaled (thick+.15nhh) yscaled med rotated 52;
+  draw z1--z2--z3--z4;
+  save_elempic;
+  add_elempic (2off,0);
+  savepic;
+endchar;
+
+beginchar(88, 0, nhh#, 0); "(long or double) shake";
+  callpic;
+  add_elempic (2*2off,0);
+  shift_pic (-.3nhw, 0);
+  save_elempic;
+endchar;
+
+beginchar(89, 0, nhh#, 0); "mordent";
+  callpic;
+  fill_square (med, 1.5nhh, (.5nhw,-.375nhh));
+endchar;
+
+beginchar(119, 0, nhh#, 0); "(long or double) mordent";
+  currentpicture:= elem_pic; savepic;
+  fill_square (med, 1.5nhh, (.5nhw,-.375nhh));
+endchar;
+
+beginchar(106, 0, 1.5nhh#, 0); "Pince with line";
+  callpic;
+  pickup med_pen;
+  draw (-.55nhw, 0)--(-.55nhw, h);
+endchar;
+
+beginchar(107, 0, 1.5nhh#, 0); "Pince with hook nw";
+  callpic;
+  x1=-.45nhw; setpar;
+  pickup med_pen;
+  z5=1.75[z3,z2]-(x3-x1,0); z6=z1 rotatedaround (z5,90);
+  draw (z1..z5{z2-z3}..{z3-z2}z6) shifted -(.5thick, .15nhh);
+endchar;
+
+beginchar(108, 0, nhh#, 0); "Pince with hook sw";
+  callpic;
+  x1=-.45nhw; setpar;
+  pickup med_pen;
+  z5=1.5[z2,z1]-.75(.5thick,.15nhh); z6=z2 rotatedaround (z5,-90);
+  draw (z1..z5{z1-z2}..{z2-z1}z6);
+endchar;
+
+beginchar(109, 0, 1.5nhh#, 0); "Pince with hook ne";
+  callpic;
+  x1=1.35nhw; setpar;
+  pickup med_pen;
+  z5=1.5[z1,z2]; z6=z1 rotatedaround (z5,-90);
+  draw (z1..z5{z2-z1}..{z1-z2}z6);
+endchar;
+
+beginchar(69, nhw#, .5nhh#, 0); "trille-element";
+  x1=-1; y1=y2=y3=.5h; x3=2x2=nhw;
+  pickup penrazor scaled 1.5thick rotated 50;
+  draw z1{ne}..{se}z2{se}..{ne}z3;
+endchar;
+
+beginchar(70, 0, nhh#, 0); "arpeggio-element";
+  x1=x2=x3=.2nhw-1; y1=0; y3=2y2=nhh+1;
+  pickup penrazor scaled (thick+.16nhh) rotated 45;
+  draw z1{ne}..{nw}z2{nw}..{ne}z3;
+  shift_pic (-nhw, 0);
+endchar;
+
+%%%%%%%
+message ("<pedal signs>");
+%%%%%%%
+
+def pedalstar (text rot)=
+  x4=-x1=min(.05nhh,0.35pt); y1=y4=0; x3=-x2=.14nhh;
+  y3=y2=2y5=2y6=.4nhh; x6=-x5=1.1x4;
+  p:=(z1..z5..z2..z3..z6..z4--cycle) shifted (0, .2nhh);
+  forsuffixes $=rot: fill p rotated $; endfor
+  pickup med_pen;
+  draw quartercircle scaled .4nhh;
+  add_mirror (origin, up);
+  add_mirror (origin, right);
+  labels (1,2,3,4);
+  shift_pic (.5nhw, .8nhh);
+enddef;
+
+beginchar(33, 0, 1.5nhh#, 0); "pedal (release) star I";
+  pedalstar (0,60);
+endchar;
+
+beginchar(104, 0, 1.5nhh#, 0); "pedal star II";
+  pedalstar (0,45,90);
+endchar;
+
+beginchar(34, 0, 1.5nhh#, 0); "pedal I";
+  mw:= 1.25nhw; mh:=1.7nhh;
+
+  x1=.425mw; y1=4/18mh;
+  x2=.2mw;   y2=4/18mh;
+  x3=x1;     y3r=0;
+  x4=.65mw;  y4=.35mh;
+  x5=.475mw; y5=.83mh;
+  penpos1(.75thin,0);       penpos4(.275nhh+thin,60);
+  penpos2(.15nhh+thin,135); penpos5(.025nhh+med,0);
+  penpos3(.025nhh+med,-90);
+
+  penstroke z1e{up}..z2e..z3e..z4e..{up+.5right}z5e;
+
+  fill lft z1l{up+ne}..{down+se}rt z1r{down+sw}..{up+nw}cycle;
+  fill rt z5l{up+ne}..{down+se}lft z5r{down+sw}..{up+nw}cycle;
+%{{{
+  currentpen:= pencircle; draw z1{up}..z2..z3..z4..{up+.5right}z5;
+%}}}
+
+  x6=mw-x12;        y6=.75mh;
+  x7=mw-x11;        y7=.65mh;
+  x8=.25mw;         y8=y10;
+  x9=x8+(x10-x8)/2; y9r=mh;
+  x10=.8mw;         y10=.9mh;
+  x11=.88mw;        y11=y7;
+  x12=.7mw;         y12=.7mh;
+  penpos6(thin,-80); penpos10(1.2med,90);
+  penpos7(.25nhh+thin,-110);     penpos11(.25nhh+thin,-70);
+  penpos8(med,90);          penpos12(thin,-100);
+  penpos9(.9med,90);
+
+  penstroke z6e..z7e..z8e..z9e..z10e..z11e..z12e;
+%{{{
+  currentpen:=pencircle; draw z6..z7..z8..z9..z10..z11..z12;
+%}}}
+  penlabels (range 1 thru 12);
+  savepic;
+  shift_pic (-.125nhw, 0);
+endchar;
+
+beginchar(35, 0, 1.5nhh#, 0); "pedal II";
+  callpic; %%% ->P
+  mw:=3nhw; mh:=1.7nhh;
+  fill_circle (.15mh, (.945mw-.15mh/2, .15mh/2));%%% ->.
+
+  x1=.5mw;   y1=.9mh;
+  x2=.77mw;  y2=.58mh;
+  x3=.815mw; y3=.2mh;
+  x4= x2;    y4r=0;
+  x5=.63mw;  y5=.22mh;
+  x6= x2;    y6=y2;
+  penpos1(.75med,90);       penpos4(.025nhh+med,-90);
+  penpos2(.1125nhh+med,30); penpos5(.1125nhh+thin,-135);
+  penpos3(.05nhh+med,0);    penpos6(med,100);
+
+  penstroke (z1e{right}..z2e..z3e..z4e..z5e{dir 110}..z6e);%%% ->d
+  fill lft z1l{ne}..{nw}rt z1r{sw}..{se}cycle;
+
+  x7=x5;        y7=y5;
+  x8=.55mw;     y8r=0;
+  x9=x1;        y9=.56mh;
+  x10=x11+.1mw; y10=y11+.1mh;
+  x11=.375mw;   y11r=0;
+  x12=.28mw;    y12=.25mh;
+  penpos7(thin,-75);         penpos10(1.2thin,-45);
+  penpos8(.05nhh+med,-90);   penpos11(.225nhh,-100);
+  penpos9(.0625nhh+thin,80); penpos12(thin,-125);
+
+  penstroke z7e..z8e..z9e & z9e{dir-30}..{dir-150}z10e..z11e;%%% ->e
+  penstroke z12e..z11e;
+  penlabels (range 1 thru 12);
+  shift_pic (-(.125nhw+.25nhw), 0);
+endchar;
+
+%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+%%%%%%%
+message ("<beam elements>");
+%%%%%%%
+
+pen beam_pen;
+beam_pen:= penrazor scaled beamht rotated 90;
+
+for LOOP=0 upto 9:
+  longueur:= 2;
+  for loop=0 upto 5:
+    beginchar(LOOP*6+loop+128, longueur, 0, 0);
+      pickup beam_pen;
+      draw origin--(lft w, w*(.05*(LOOP+1)));
+      savepic;
+    endchar;
+
+    beginchar(LOOP*6+loop+64+128, longueur, 0, 0);
+      call_mirror (origin,right);
+    endchar;
+
+    longueur:= 2*longueur;
+  endfor
+endfor;
+end
diff --git a/mf/musixsps.mf b/mf/musixsps.mf
new file mode 100644 (file)
index 0000000..26e350f
--- /dev/null
@@ -0,0 +1,295 @@
+font_identifier := "music_special_symbols";
+
+% Here are two types of pianobrackets available, they are absolute compatible,
+% so choose this one you prefer (search for '%!!!')
+
+% free pos: 196-255
+
+mode_setup;
+
+font_size 20pt#;
+
+nhh#:=5pt#;
+nhw#:=6pt#;
+
+qqs#=.4pt#; %width of lines
+qqw#=10pt#; %length of horizontal stroke.
+
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth:=0.125pt;
+
+define_pixels(qqw,nhh,nhw);
+define_blacker_pixels(med,thick);
+
+qqs:=ceiling(qqs#*hppp); % the way rule widths are calculated
+
+pair sw;
+sw = down+left;
+
+path p;
+picture save_pic;
+
+pen line_pen;
+line_pen:= pencircle scaled qqs;
+
+%%%%%%%
+message ("<glissandi-elements>");
+%%%%%%%
+
+def glissando (expr theta)=
+  x1=-1; y1=0; z2=z1+(.5nhw,0); z3=z1+(nhw+1,0);
+  p:= z1{1.25up+right}..{1.25down+right}z2{1.25down+right}..{1.25up+right}z3;
+  pickup penrazor scaled (.075nhw+thick) rotated (theta+65);
+  draw p rotated theta;
+  labels (1,2,3);
+enddef;
+
+for slope=1 upto 8:
+
+  beginchar(slope-1, (cosd(10slope))*nhw#,(sind(10slope))*nhw#, 0);
+  " glissando element slope "&decimal (10slope)&" degree";
+    glissando (10slope);
+    save_pic:= currentpicture;
+  endchar;
+
+  beginchar(8+slope-1, (cosd(10slope))*nhw#, (sind(10slope))*nhw#, 0);
+  " glissando element slope "&decimal (-10slope)&" degree";
+    currentpicture:= save_pic reflectedabout (origin, right);
+  endchar;
+
+endfor;
+
+%%%%%%%
+message ("<guitar chords>");
+%%%%%%%
+
+def tabulatur (expr nd)=
+  hwidth:=1/5w;
+  x1=x2=y2=y3=0; x3=w; y1=-nd;
+  fill unitsquare xscaled (w+2thinwidth) yscaled (med+.2pt)
+       shifted(-thinwidth,0);
+  pickup pencircle scaled max(1,.2pt+blacker);
+  for v=1 upto 5 :
+    draw (z2--z3) shifted (0,v*-hwidth);
+  endfor;
+
+  for v=0 upto 5 :
+    draw (z1--z2) shifted (v*hwidth,0);
+  endfor;
+  labels (1,2,3);
+enddef;
+
+shift:=.15nhh;
+def Circle (expr nh)=
+  x1l=.1w; x2=x4=.5w; x3l=.9w;
+  y1=y3=.5nh+shift; y2=.1nh+shift; y4=.9nh+shift;
+  penpos1(med, 0);
+  penpos2(thinwidth,90);
+  penpos3(med,180);
+  penpos4(thinwidth, 270);
+  penstroke z1e..z2e..z3e..z4e..cycle;
+  pickup pencircle; draw z1..z2..z3..z4..cycle;
+enddef;
+
+def Cross (expr nh)=
+  x1=x3=.2w; x2=x4=.8w;
+  y1=y4=.2nh+shift; y2=y3=nh-.2nh+shift;
+  pickup pencircle scaled med;
+  draw z1--z2; draw z3--z4;
+  labels (1,2,3,4);
+enddef;
+
+beginchar(16, 3nhw#, 0, 0);" small grid";
+  tabulatur (108/25nhh);
+endchar;
+
+beginchar(17, 3/2nhw#, 0, 0); " small dot";
+  fill fullcircle scaled .54nhh shifted (w,-.36nhh);
+endchar;
+
+beginchar(18, 3nhw#, 0, 0); " small bar";
+  fill unitsquare xscaled w yscaled .24nhh shifted (0,-.48nhh);
+endchar;
+
+beginchar(19, 3/5nhw#, 0, 0); " small circle";
+  Circle (.72nhh);
+endchar;
+
+beginchar(20, 3/5nhw#, 0, 0); " small cross";
+  Cross (.72nhh);
+endchar;
+
+% the next seems to be senseless, but it isn't
+
+beginchar(28, 3/5nhw#, 0, 0); " small blank";
+endchar;
+
+%%%%%%%
+message ("<several lines>");
+%%%%%%%
+
+hooklength:=4.5pt;
+
+beginchar(21, 0, 0, 0);" bracket hook up";
+  pickup line_pen;
+  draw origin--(0, hooklength);
+endchar;
+
+beginchar(22, 0, 0, 0);" bracket hook down";
+  pickup line_pen;
+  draw origin--(0, -hooklength);
+endchar;
+
+beginchar(23, nhw#, 0, 0);" upper octaveline";
+  pickup line_pen;
+  draw (.33w, 1.1nhw)--(.66w, 1.1nhw);
+endchar;
+
+beginchar(24, 0, 0, 0);" final hook for upper octaveline";
+  pickup line_pen;
+  draw (1.1nhw,0)--(1.1nhw, 1.1nhw);
+  draw (.33nhw, 1.1nhw)--(1.1nhw, 1.1nhw);
+endchar;
+
+beginchar(25, nhw#, 0, 0);" lower octaveline";
+  pickup line_pen;
+  draw (.33w, 0)--(.66w, 0);
+endchar;
+
+beginchar(26, 0, 0, 0);" final hook for lower octaveline";
+  pickup line_pen;
+  draw (1.1nhw,0)--(1.1nhw, 1.1nhw);
+  draw (.33nhw,0)--(1.1nhw, 0);
+endchar;
+
+beginchar(27, .75nhw#, 0, 0);" used for \bracket";
+  pickup line_pen;
+  draw origin--(.5nhw, 0);
+endchar;
+
+beginchar(29, qqw#, 0, 0);" line ydim 0pt";
+  pickup line_pen;
+  draw origin--(w,0);
+endchar;
+
+% lines length xdim 10pt, ydim (-).25 to (-)5pt
+
+for j=1 upto 20:
+  beginchar(29+j, qqw#, 0, 0); " line ydim "&decimal .25j&"pt";
+    pickup line_pen;
+    draw origin--(w, .25pt*j);
+    save_pic:= currentpicture;
+  endchar;
+
+  beginchar(49+j, qqw#, 0, 0); " line ydim -"&decimal .25j&"pt";
+    currentpicture:= save_pic reflectedabout (origin, right);
+  endchar;
+endfor;
+
+%%%%%%%
+message ("<circles>");
+%%%%%%%
+
+for n:=1 upto 14:
+  beginchar(70+n-1, 0, 0, 0);
+  " fullcircle diameter "&decimal ((n+2)*2)&" pt";
+    diameter:=(n+2)*2pt;
+    pickup line_pen;
+    draw fullcircle scaled diameter;
+  endchar;
+endfor;
+
+%%%%%%%
+message ("<(de-)crescendi>");
+%%%%%%%
+
+widthstep:=nhw;
+crescendowidth:=.5nhh; % \Internote
+
+for n:=1 upto 32:
+  beginchar(84+n-1, 0, 3pt#, 3pt#);
+  " crescendo length "&decimal n&" noteheadwidths";
+    pickup line_pen;
+    draw (n*widthstep, crescendowidth+.0075n*crescendowidth)--(0,0);
+    addto currentpicture also currentpicture reflectedabout (origin,right);
+    save_pic:= currentpicture;
+  endchar;
+
+  beginchar(116+n-1, 0, 3pt#, 3pt#);
+  " decrescendo length "&decimal n&" noteheadwidths";
+    currentpicture:= save_pic reflectedabout(origin, up) shifted (n*widthstep,0);
+  endchar;
+endfor;
+
+%%%%%%%
+message ("<piano brackets>");
+%%%%%%%
+
+% lastbrace is adjustable (originally 99)
+
+firstbrace:=20;  % smallest brace is 2*20 pt (\simeq 14mm)
+lastbrace:=67;   % largest brace is 2*67 pt (\simeq 47mm)
+
+%%% from Stanislav Kneifl
+
+def drawpianobracket (expr height) =
+  u# := 1nhh#/5pt# * 1pt#;
+  v# := (height/40) * 1pt#;
+  define_pixels (u, v);
+%  beginchar (height-firstbrace, 1.25nhh#, 0, 0);
+  beginchar (height-firstbrace+148, 0, 0, 0);
+    z1 = origin;
+    z2 = (4.7u, 7v);
+    z3 = (3.6u, 16.5v);
+    z4 = (1.9u, 25v);
+    z5 = (2.28u, 32v);
+    z6 = (w, 40v);
+    penpos1 (max(1,0.1u), 125);
+    penpos2 (1.2u, 180);
+    penpos3 (3.2u, 195);
+    penpos4 (2.5u, 180);
+    penpos5 (1.14u, 180);
+    penpos6 (max(2,0.3u), 150);
+    penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e;
+    currenttransform := identity reflectedabout ((0,0),(1,0));
+    penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e;
+    currenttransform := identity;
+% inserted
+    currentpicture:=currentpicture shifted (round(-1.75nhh), 0);
+%
+  endchar;
+enddef;
+
+def bigbrace(expr v) =
+  beginchar (v-firstbrace+148, 0, 0, 0);
+  " brace vsize "&decimal round(2v*pt#)&"pt";
+    vwidth:=v*pt;
+    hwidth:=max(.1vwidth,3.25pt);
+    hwidth:=min(hwidth,6.5pt);
+    actwidth:=.035vwidth;
+    x1=.25nhw;  y1=vwidth;
+    x2l=-.8hwidth; y2=2/3vwidth;
+    x3r=.2hwidth; y3=1/3vwidth;
+    x4=-hwidth; y4=0;
+    penpos1(max(1,.25pt),-35);
+    penpos2(1.5med+actwidth,40);
+    penpos3(1.75med+actwidth,45);
+    penpos4(max(1,.2pt),-90);
+    penstroke z1e..z2e..z3e..{left+sw}z4e;
+    currentpen:= pencircle; draw z1..z2..z3..{left+sw}z4;
+    addto currentpicture also currentpicture reflectedabout (origin, right);
+    penlabels(1,2,3,4);
+    currentpicture:= currentpicture shifted (round(-.75nhh), 0);
+  endchar;
+enddef;
+
+%!!! comment the line 'bigbrace' and uncomment the line 'drawpianobracket'
+
+for v=firstbrace upto lastbrace :
+  bigbrace (v);
+%  drawpianobracket (v);
+endfor;
+
+end
diff --git a/mf/musixspx.mf b/mf/musixspx.mf
new file mode 100644 (file)
index 0000000..3b3f432
--- /dev/null
@@ -0,0 +1,295 @@
+font_identifier := "music_special_symbols";
+
+% Here are two types of pianobrackets available, they are absolute compatible,
+% so choose this one you prefer (search for '%!!!')
+
+% free pos: 196-255
+
+mode_setup;
+
+font_size 20pt#;
+
+nhh#:=5pt#;
+nhw#:=6pt#;
+
+qqs#=.4pt#; %width of lines
+qqw#=10pt#; %length of horizontal stroke.
+
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth:=0.125pt;
+
+define_pixels(qqw,nhh,nhw);
+define_blacker_pixels(med,thick);
+
+qqs:=ceiling(qqs#*hppp); % the way rule widths are calculated
+
+pair sw;
+sw = down+left;
+
+path p;
+picture save_pic;
+
+pen line_pen;
+line_pen:= pencircle scaled qqs;
+
+%%%%%%%
+message ("<glissandi-elements>");
+%%%%%%%
+
+def glissando (expr theta)=
+  x1=-1; y1=0; z2=z1+(.5nhw,0); z3=z1+(nhw+1,0);
+  p:= z1{1.25up+right}..{1.25down+right}z2{1.25down+right}..{1.25up+right}z3;
+  pickup penrazor scaled (.075nhw+thick) rotated (theta+65);
+  draw p rotated theta;
+  labels (1,2,3);
+enddef;
+
+for slope=1 upto 8:
+
+  beginchar(slope-1, (cosd(10slope))*nhw#,(sind(10slope))*nhw#, 0);
+  " glissando element slope "&decimal (10slope)&" degree";
+    glissando (10slope);
+    save_pic:= currentpicture;
+  endchar;
+
+  beginchar(8+slope-1, (cosd(10slope))*nhw#, (sind(10slope))*nhw#, 0);
+  " glissando element slope "&decimal (-10slope)&" degree";
+    currentpicture:= save_pic reflectedabout (origin, right);
+  endchar;
+
+endfor;
+
+%%%%%%%
+message ("<guitar chords>");
+%%%%%%%
+
+def tabulatur (expr nd)=
+  hwidth:=1/5w;
+  x1=x2=y2=y3=0; x3=w; y1=-nd;
+  fill unitsquare xscaled (w+2thinwidth) yscaled (med+.2pt)
+       shifted(-thinwidth,0);
+  pickup pencircle scaled max(1,.2pt+blacker);
+  for v=1 upto 5 :
+    draw (z2--z3) shifted (0,v*-hwidth);
+  endfor;
+
+  for v=0 upto 5 :
+    draw (z1--z2) shifted (v*hwidth,0);
+  endfor;
+  labels (1,2,3);
+enddef;
+
+shift:=.15nhh;
+def Circle (expr nh)=
+  x1l=.1w; x2=x4=.5w; x3l=.9w;
+  y1=y3=.5nh+shift; y2=.1nh+shift; y4=.9nh+shift;
+  penpos1(med, 0);
+  penpos2(thinwidth,90);
+  penpos3(med,180);
+  penpos4(thinwidth, 270);
+  penstroke z1e..z2e..z3e..z4e..cycle;
+  pickup pencircle; draw z1..z2..z3..z4..cycle;
+enddef;
+
+def Cross (expr nh)=
+  x1=x3=.2w; x2=x4=.8w;
+  y1=y4=.2nh+shift; y2=y3=nh-.2nh+shift;
+  pickup pencircle scaled med;
+  draw z1--z2; draw z3--z4;
+  labels (1,2,3,4);
+enddef;
+
+beginchar(16, 3nhw#, 0, 0);" small grid";
+  tabulatur (108/25nhh);
+endchar;
+
+beginchar(17, 3/2nhw#, 0, 0); " small dot";
+  fill fullcircle scaled .54nhh shifted (w,-.36nhh);
+endchar;
+
+beginchar(18, 3nhw#, 0, 0); " small bar";
+  fill unitsquare xscaled w yscaled .24nhh shifted (0,-.48nhh);
+endchar;
+
+beginchar(19, 3/5nhw#, 0, 0); " small circle";
+  Circle (.72nhh);
+endchar;
+
+beginchar(20, 3/5nhw#, 0, 0); " small cross";
+  Cross (.72nhh);
+endchar;
+
+% the next seems to be senseless, but it isn't
+
+beginchar(28, 3/5nhw#, 0, 0); " small blank";
+endchar;
+
+%%%%%%%
+message ("<several lines>");
+%%%%%%%
+
+hooklength:=4.5pt;
+
+beginchar(21, 0, 0, 0);" bracket hook up";
+  pickup line_pen;
+  draw origin--(0, hooklength);
+endchar;
+
+beginchar(22, 0, 0, 0);" bracket hook down";
+  pickup line_pen;
+  draw origin--(0, -hooklength);
+endchar;
+
+beginchar(23, nhw#, 0, 0);" upper octaveline";
+  pickup line_pen;
+  draw (.33w, 1.1nhw)--(.66w, 1.1nhw);
+endchar;
+
+beginchar(24, 0, 0, 0);" final hook for upper octaveline";
+  pickup line_pen;
+  draw (1.1nhw,0)--(1.1nhw, 1.1nhw);
+  draw (.33nhw, 1.1nhw)--(1.1nhw, 1.1nhw);
+endchar;
+
+beginchar(25, nhw#, 0, 0);" lower octaveline";
+  pickup line_pen;
+  draw (.33w, 0)--(.66w, 0);
+endchar;
+
+beginchar(26, 0, 0, 0);" final hook for lower octaveline";
+  pickup line_pen;
+  draw (1.1nhw,0)--(1.1nhw, 1.1nhw);
+  draw (.33nhw,0)--(1.1nhw, 0);
+endchar;
+
+beginchar(27, .75nhw#, 0, 0);" used for \bracket";
+  pickup line_pen;
+  draw origin--(.5nhw, 0);
+endchar;
+
+beginchar(29, qqw#, 0, 0);" line ydim 0pt";
+  pickup line_pen;
+  draw origin--(w,0);
+endchar;
+
+% lines length xdim 10pt, ydim (-).25 to (-)5pt
+
+for j=1 upto 20:
+  beginchar(29+j, qqw#, 0, 0); " line ydim "&decimal .25j&"pt";
+    pickup line_pen;
+    draw origin--(w, .25pt*j);
+    save_pic:= currentpicture;
+  endchar;
+
+  beginchar(49+j, qqw#, 0, 0); " line ydim -"&decimal .25j&"pt";
+    currentpicture:= save_pic reflectedabout (origin, right);
+  endchar;
+endfor;
+
+%%%%%%%
+message ("<circles>");
+%%%%%%%
+
+for n:=1 upto 14:
+  beginchar(70+n-1, 0, 0, 0);
+  " fullcircle diameter "&decimal ((n+2)*2)&" pt";
+    diameter:=(n+2)*2pt;
+    pickup line_pen;
+    draw fullcircle scaled diameter;
+  endchar;
+endfor;
+
+%%%%%%%
+message ("<(de-)crescendi>");
+%%%%%%%
+
+widthstep:=nhw;
+crescendowidth:=.5nhh; % \Internote
+
+for n:=1 upto 32:
+  beginchar(84+n-1, 0, 3pt#, 3pt#);
+  " crescendo length "&decimal n&" noteheadwidths";
+    pickup line_pen;
+    draw (n*widthstep, crescendowidth+.0075n*crescendowidth)--(0,0);
+    addto currentpicture also currentpicture reflectedabout (origin,right);
+    save_pic:= currentpicture;
+  endchar;
+
+  beginchar(116+n-1, 0, 3pt#, 3pt#);
+  " decrescendo length "&decimal n&" noteheadwidths";
+    currentpicture:= save_pic reflectedabout(origin, up) shifted (n*widthstep,0);
+  endchar;
+endfor;
+
+%%%%%%%
+message ("<piano brackets>");
+%%%%%%%
+
+% lastbrace is adjustable (originally 99)
+
+firstbrace:=20;  % smallest brace is 2*20 pt (\simeq 14mm)
+lastbrace:=67+48;   % largest brace is 2*67 pt (\simeq 47mm)
+
+%%% from Stanislav Kneifl
+
+def drawpianobracket (expr height) =
+  u# := 1nhh#/5pt# * 1pt#;
+  v# := (height/40) * 1pt#;
+  define_pixels (u, v);
+%  beginchar (height-firstbrace, 1.25nhh#, 0, 0);
+  beginchar (height-firstbrace+148, 0, 0, 0);
+    z1 = origin;
+    z2 = (4.7u, 7v);
+    z3 = (3.6u, 16.5v);
+    z4 = (1.9u, 25v);
+    z5 = (2.28u, 32v);
+    z6 = (w, 40v);
+    penpos1 (max(1,0.1u), 125);
+    penpos2 (1.2u, 180);
+    penpos3 (3.2u, 195);
+    penpos4 (2.5u, 180);
+    penpos5 (1.14u, 180);
+    penpos6 (max(2,0.3u), 150);
+    penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e;
+    currenttransform := identity reflectedabout ((0,0),(1,0));
+    penstroke z1e{dir 35}..z2e..z3e..z4e..z5e..{dir 60}z6e;
+    currenttransform := identity;
+% inserted
+    currentpicture:=currentpicture shifted (round(-1.75nhh), 0);
+%
+  endchar;
+enddef;
+
+def bigbrace(expr v) =
+  beginchar (v-firstbrace+148, 0, 0, 0);
+  " brace vsize "&decimal round(2v*pt#)&"pt";
+    vwidth:=v*pt;
+    hwidth:=max(.1vwidth,3.25pt);
+    hwidth:=min(hwidth,6.5pt);
+    actwidth:=.035vwidth;
+    x1=.25nhw;  y1=vwidth;
+    x2l=-.8hwidth; y2=2/3vwidth;
+    x3r=.2hwidth; y3=1/3vwidth;
+    x4=-hwidth; y4=0;
+    penpos1(max(1,.25pt),-35);
+    penpos2(1.5med+actwidth,40);
+    penpos3(1.75med+actwidth,45);
+    penpos4(max(1,.2pt),-90);
+    penstroke z1e..z2e..z3e..{left+sw}z4e;
+    currentpen:= pencircle; draw z1..z2..z3..{left+sw}z4;
+    addto currentpicture also currentpicture reflectedabout (origin, right);
+    penlabels(1,2,3,4);
+    currentpicture:= currentpicture shifted (round(-.75nhh), 0);
+  endchar;
+enddef;
+
+%!!! comment the line 'bigbrace' and uncomment the line 'drawpianobracket'
+
+for v=firstbrace upto lastbrace :
+  bigbrace (v);
+%  drawpianobracket (v);
+endfor;
+
+end
diff --git a/mf/xdrawsl.mf b/mf/xdrawsl.mf
new file mode 100644 (file)
index 0000000..fe8c5ec
--- /dev/null
@@ -0,0 +1,39 @@
+%(c)
+
+min_bow:=  .5nhh;
+max_bow:= 1.5nhh;
+slope:=17.5/100;
+
+code=-1;
+
+for iht=1 upto 8:
+  for iwd=0 upto 15:
+    beginchar(incr code, 0, 0, 0);
+      mw#:=(minwidth+iwd*delwidth)*pt#;
+      define_pixels(mw);
+      x1 = y1= 0; x3= mw; y3= 2y2'= iht*delheight; x2'= .5x3;
+      mheight:=y3;
+      z2-z2'= whatever*dir(angle(z3-z1)+90);
+      my_bow:=min(max_bow, slope*mw);
+      my_bow:=max(my_bow, min_bow);
+      z1'=(z1-(0,my_bow)) rotated angle(z3-z1);
+      (z1'-z2)=whatever*(z1-z2');
+      penpos1(.15thick,(angle(z3-z1)+90));
+      penpos2(thick,(angle(z3-z1)+90));
+      penpos3(.15thick,(angle(z3-z1)+90));
+      penstroke (flex(z1e,z2e,z3e));
+%{{{
+      currentpen:= pencircle;
+      draw (flex(z1,z2,z3));% draw z1--z3; draw z2'--z2--z1'--z1;
+%}}}
+      currentpicture:=currentpicture t;
+      p:=currentpicture;
+    endchar;
+
+    beginchar(code+128, 0, 0, 0);
+      currentpicture:=p T;
+    endchar;
+
+  endfor
+endfor
+end
diff --git a/mf/xdrawzl.mf b/mf/xdrawzl.mf
new file mode 100644 (file)
index 0000000..50ef6cf
--- /dev/null
@@ -0,0 +1,25 @@
+%(c)
+
+min_bow:=  .4nhh;
+max_bow:= 1.75nhh;
+slope:= 10/100;
+
+code=-1;
+
+for i=1 upto numslurs:
+  beginchar(incr code, 0, 0, 0);
+    mw:=(minwidth+code*delwidth)*pt;
+    x3= -x1= .5mw; x2= y1= y3 = 0;
+    y2= max(min_bow, slope*mw);
+    y2:= min(y2, max_bow);
+    penpos1(.15thick,90); penpos2(thick,90); penpos3(.15thick,90);
+    penstroke (flex(z1e,z2e,z3e));
+    currentpen:= pencircle; draw (flex(z1,z2,z3));
+    p:=currentpicture;
+  endchar;
+
+  beginchar(code+54, 0, 0, 0);
+    currentpicture:=p reflectedabout (origin, right);
+  endchar;
+endfor
+end
diff --git a/mf/xgreg11.mf b/mf/xgreg11.mf
new file mode 100644 (file)
index 0000000..e5f3dc4
--- /dev/null
@@ -0,0 +1,10 @@
+
+font_identifier:="xgreg11";
+
+mode_setup;
+
+font_size 10.24pt#;
+
+nhh#:=2.56pt#;
+
+input xgreggen
diff --git a/mf/xgreg13.mf b/mf/xgreg13.mf
new file mode 100644 (file)
index 0000000..49a78be
--- /dev/null
@@ -0,0 +1,10 @@
+
+font_identifier:="xgreg13";
+
+mode_setup;
+
+font_size 12.8pt#;
+
+nhh#:=3.2pt#;
+
+input xgreggen
diff --git a/mf/xgreg16.mf b/mf/xgreg16.mf
new file mode 100644 (file)
index 0000000..bc5d554
--- /dev/null
@@ -0,0 +1,10 @@
+
+font_identifier:="xgreg16";
+
+mode_setup;
+
+font_size 16pt#;
+
+nhh#:=4pt#;
+
+input xgreggen
diff --git a/mf/xgreg20.mf b/mf/xgreg20.mf
new file mode 100644 (file)
index 0000000..f0ba509
--- /dev/null
@@ -0,0 +1,10 @@
+
+font_identifier:="xgreg20";
+
+mode_setup;
+
+font_size 20pt#;
+nhh#:=5pt#;
+
+
+input xgreggen
diff --git a/mf/xgreg24.mf b/mf/xgreg24.mf
new file mode 100644 (file)
index 0000000..9f4dbfb
--- /dev/null
@@ -0,0 +1,10 @@
+
+font_identifier:="xgreg24";
+
+mode_setup;
+
+font_size 24pt#;
+
+nhh#:=6pt#;
+
+input xgreggen
diff --git a/mf/xgreg25.mf b/mf/xgreg25.mf
new file mode 100644 (file)
index 0000000..529c7ec
--- /dev/null
@@ -0,0 +1,28 @@
+
+font_identifier:="musix25";
+
+mode_setup;
+
+font_size 25pt#;
+
+nhh#:=6.25pt#;
+nhw#:=7.5pt#;
+gregwidth#:=0.5*sqrt(2)*nhw#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.15pt;
+beamht#:=0.48nhh#;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+input musixgen
diff --git a/mf/xgreg29.mf b/mf/xgreg29.mf
new file mode 100644 (file)
index 0000000..3a2293e
--- /dev/null
@@ -0,0 +1,10 @@
+
+font_identifier:="xgreg29";
+
+mode_setup;
+
+font_size 29pt#;
+
+nhh#:=7.2pt#;
+
+input xgreggen
diff --git a/mf/xgreggen.mf b/mf/xgreggen.mf
new file mode 100644 (file)
index 0000000..6b2f4b5
--- /dev/null
@@ -0,0 +1,351 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%  this is xgreggen.mf (c)
+%
+%  Version T.63 [October 96]
+%
+
+nhw#:=1.2*nhh#;
+
+thin#:=1/50designsize;
+med#:=1/33designsize;
+thick#:=1/16designsize;
+
+thinwidth := 0.125pt;
+beamht#:=0.48nhh#;
+%gregwidth#:=0.5*sqrt(2)*nhh#;
+gregwidth#:=0.6*nhh#;
+smallgreg:=0.5;
+
+define_pixels(nhh,nhw,beamht,gregwidth);
+define_blacker_pixels(thin,med,thick);
+
+pair ne,se,sw,nw; %northeast,southeast,southwest,northwest
+ne = up+right; se = down+right; sw = down+left; nw = up+left;
+
+font_x_height nhh#;
+font_quad nhw#;
+
+pair pone, ptwo;
+transform t;
+path p;
+
+hlthick=.2pt;
+lthick=.4pt;
+
+greglangle:=18; gregrlangle:=180+greglangle;
+greguangle:=26; gregruangle:=180+greguangle;
+orisuangle:=40; orisruangle:=180+orisuangle;
+
+diamwidth:=.96 gregwidth; greg_min_diam:=gregwidth-diamwidth;
+diamheight:=1.33 gregwidth;
+deminutae:=0.6; gregwidth_dem:=gregwidth*deminutae;
+aucta_fact:=0.33gregwidth;
+shave:=.3gregwidth;
+
+pen line_pen, med_pen, coda_pen, thin_pen;
+med_pen:= pencircle scaled med;
+line_pen:= pencircle scaled lthick;
+coda_pen:= pencircle xscaled 1.25thick yscaled max(1,.75med);
+thin_pen:= pencircle scaled max(1,.25pt);
+
+picture save_pic, elem_pic;
+
+%%%%%%%%%%%%%%%
+% basic def's %
+%%%%%%%%%%%%%%%
+
+def savepic = save_pic:= currentpicture enddef;
+def save_elempic = elem_pic:= currentpicture enddef;
+def callpic = currentpicture:= save_pic enddef;
+
+def mirror (expr pone, ptwo) =
+  currentpicture:=currentpicture reflectedabout(round(pone),round(ptwo))
+enddef;
+
+def add_mirror (expr pone, ptwo) =
+  addto currentpicture also currentpicture
+        reflectedabout (round(pone), round(ptwo))
+enddef;
+
+def call_mirror (expr pone, ptwo) = callpic; mirror (pone, ptwo) enddef;
+
+def add_shift (expr pone, ptwo) =
+  addto currentpicture also currentpicture shifted (pone, ptwo)
+enddef;
+
+def call_add_shift (expr pone, ptwo) =
+  callpic; add_shift (pone, ptwo)
+enddef;
+
+def add_elempic (expr pone, ptwo) =
+  addto currentpicture also elem_pic shifted (pone, ptwo)
+enddef;
+
+def call_add_save_elempic (expr pone, ptwo) =
+  callpic; add_elempic(pone, ptwo); savepic
+enddef;
+
+def shift_pic (expr pone, ptwo) =
+  currentpicture:=currentpicture shifted (round(pone),round(ptwo))
+enddef;
+
+def fill_circle (expr diameter, zshift) =
+  fill fullcircle scaled diameter shifted zshift
+enddef;
+
+def fill_square (expr xwidth, ywidth, zshift) =
+  fill unitsquare xscaled xwidth yscaled ywidth shifted zshift
+enddef;
+
+%
+
+% eobasicdefs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+%%%%%%%
+message ("<noteheads>");
+%%%%%%%
+
+NHW=nhw+hlthick;
+
+beginchar(0, gregwidth#, .5nhh#, .5nhh#); "dummy square";
+endchar;
+beginchar(18, smallgreg*gregwidth#, .5nhh#, .5nhh#); "small dummy square";
+endchar;
+
+beginchar(1, 0, .5nhh#, .5nhh#); "filled diamond";
+ x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4=0.5gregwidth;
+ y1=y3=0; y2=-y4=0.5diamheight;
+ pickup pencircle scaled lthick;
+ fill z1--z2--z3--z4--cycle;
+ draw z1--z2--z3--z4--cycle;
+ penlabels (1,2,3,4);
+endchar;
+
+beginchar(2, 0, .5nhh#, .5nhh#); "filled diamond aucta";
+ x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4=0.5gregwidth;
+ y1=y3=0; y2=-y4=0.5diamheight;
+ x5=x1+hlthick; y5=1.5y4;
+ pickup pencircle scaled lthick;
+ fill z1--z2--z3{sw+down}..{left+0.3up}z5--z5{right}..z4--cycle;
+ draw z1--z2--z3{sw+down}..{left+0.3up}z5--z5{right}..z4--cycle;
+ penlabels (1,2,3,4,5);
+endchar;
+
+beginchar(3, 0, .5nhh#, .5nhh#); "apostropha";
+ x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4+0.1gregwidth=0.5gregwidth;
+ y1=y3=0; y2=0.5gregwidth+0.5greg_min_diam-hlthick;
+ y4=-y2-0.2gregwidth;
+ pickup pencircle scaled lthick;
+ fill z1--z2--z3{left+1.5down}..{left+0.6down}z4--z4{right+2up}..{left+0.1up}cycle;
+ draw z1--z2--z3{left+1.5down}..{left+0.6down}z4--z4{right+2up}..{left+0.1up}cycle;
+ penlabels (1,2,3,4);
+endchar;
+
+beginchar(4, 0, .5nhh#, .5nhh#); "filled diamond deminutae";
+ x1:=0.5greg_min_diam*deminutae+hlthick;
+ x3=gregwidth_dem-x1; x2=x4=0.5gregwidth_dem;
+ y1=y3=0; y2=-y4=0.5diamheight*deminutae;
+ pickup pencircle scaled lthick;
+ fill z1--z2--z3--z4--cycle;
+ draw z1--z2--z3--z4--cycle;
+ penlabels (1,2,3,4);
+endchar;
+
+beginchar(5, 0, .5nhh#, .5nhh#); "gregorian punctum";
+  x1=x4=hlthick; x2=x3=gregwidth+hlthick; y1=y2=-y3=-y4=.5gregwidth-hlthick;
+  pickup pencircle scaled lthick;
+  fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  shift_pic(0,-hlthick);
+  savepic;
+ penlabels (1,2,3,4);
+endchar;
+
+beginchar(13, 0, .5nhh#, .5nhh#); "mirrored gregorian punctum";
+  callpic;
+  mirror(origin, right);
+endchar;
+
+beginchar(6, 0, .5nhh#, .5nhh#); "gregorian virga left";
+  callpic;
+  fill_square (lthick, 1.5nhh,(0, -1.5nhh));
+endchar;
+
+beginchar(7, 0, .5nhh#, .5nhh#); "gregorian virga right";
+  callpic;
+  fill_square (lthick, 1.5nhh,(gregwidth, -1.5nhh));
+endchar;
+
+beginchar(8, 0, .5nhh#, .5nhh#); "gregorian punctum aucta down";
+  x1=x4=hlthick; x2=x3=gregwidth+hlthick;
+  y1=y2+aucta_fact=-y3-aucta_fact=-y4=.5gregwidth-hlthick;
+  pickup pencircle scaled lthick;
+  fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  shift_pic(0,-hlthick);
+  savepic;
+ penlabels (1,2,3,4);
+endchar;
+
+beginchar(9, 0, .5nhh#, .5nhh#); "gregorian punctum aucta up";
+callpic;
+mirror(origin,right);
+endchar;
+
+beginchar(10, 0, .5nhh#, .5nhh#); "oriscus";
+  x1=x4=hlthick; x2=x3=gregwidth+hlthick; y1=y2=-y3=-y4=.5gregwidth-hlthick;
+  pickup pencircle scaled lthick;
+  fill z1{dir orisuangle}..{dir orisuangle}z2--z3{dir orisruangle}..{dir orisruangle}z4--cycle;
+  draw z1{dir orisuangle}..{dir orisuangle}z2--z3{dir orisruangle}..{dir orisruangle}z4--cycle;
+ penlabels (1,2,3,4);
+endchar;
+
+beginchar(11, 0, .5nhh#, .5nhh#); "apostropha aucta";
+ x1:=0.5greg_min_diam+hlthick; x3=gregwidth-x1; x2=x4=0.5gregwidth;
+ y1=y3=0; y2=0.5gregwidth+0.5greg_min_diam-hlthick;
+ y4=-y2-0.2gregwidth; y5=y4; x5=x1;
+ pickup pencircle scaled lthick;
+ fill z1--z2--z3{left+1.5down}..{left+0.6down}z4..z5--z5{right}..{left+0.1up}cycle;
+ draw z1--z2--z3{left+1.5down}..{left+0.6down}z4..z5--z5{right}..{left+0.1up}cycle;
+ penlabels (1,2,3,4,5);
+endchar;
+
+beginchar(12, 0, .5nhh#, .5nhh#); "small gregorian punctum";
+  x1=x4=hlthick; x2=x3=smallgreg*gregwidth+hlthick;
+  y1=y2=-y3=-y4=.5smallgreg*gregwidth-hlthick;
+  pickup pencircle scaled lthick;
+  fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  shift_pic(0,-hlthick);
+  savepic;
+endchar;
+
+beginchar(14, 0, .5nhh#, .5nhh#); "mirrored small gregorian punctum";
+  callpic;
+  mirror(origin, right);
+endchar;
+
+beginchar(15, gregwidth#, .5nhh#, .5nhh#); "podatus bottom";
+  fill_square(gregwidth+lthick, gregwidth, (0, -0.5gregwidth));
+endchar;
+
+beginchar(16, gregwidth#, .5nhh#, .5nhh#); "small podatus bottom";
+  fill_square(gregwidth+lthick, gregwidth-shave, (0, -0.5gregwidth));
+endchar;
+
+beginchar(17, 0, .5nhh#, .5nhh#); "gregorian punctum shaved bottom";
+  x1=x4=hlthick; x2=x3=gregwidth+hlthick; y1=y2=-y3+shave=-y4+shave=.5gregwidth-hlthick;
+  pickup pencircle scaled lthick;
+  fill z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  draw z1{dir greguangle}..z2--z3..{dir gregrlangle}z4--cycle;
+  shift_pic(0,-hlthick);
+  savepic;
+ penlabels (1,2,3,4);
+endchar;
+
+def square (expr mw)=
+  fill_square (sqrt(2)*.5mw, max(1,thin), origin) rotated -45;
+  fill_square (sqrt(2)*.5mw, .15nhw, (0,-.15nhw)) rotated 45;
+  save_elempic;
+  mirror (origin,up);
+  mirror (origin,left);
+  shift_pic (mw+.5,0);
+  add_elempic(0,0);
+%  mirror (origin,right);% I've seen this too, somewhere ...
+enddef;
+
+beginchar(118, 0, .5nhh#, .5nhh#); "deep porrectus";
+  x1=x4=0; x2=x3=3*gregwidth+lthick;
+  y1=-y4=.5gregwidth-lthick; y2=y1-2nhh; y3=y4-2nhh;
+  z5=z1+(0,0.3gregwidth);
+  fill z5..{right+0.4down}z2--z3{left+0.4up}..z4--cycle; shift_pic(0,hlthick);
+  fill_square (med, 1.5nhh,(0, -2nhh));
+ penlabels (1,2,3,4,5);
+endchar;
+
+beginchar(119, 0, .5nhh#, .5nhh#); "low porrectus";
+  x1=x4=0; x2=x3=3*gregwidth+lthick;
+  y1=-y4=.5gregwidth-lthick; y2=y1-1.5nhh; y3=y4-1.5nhh;
+  z5=z1+(0,0.2gregwidth);
+  fill z1..{right+0.4down}z2--z3{left+0.4up}..z4--cycle; shift_pic(0,hlthick);
+  fill_square (med, 1.5nhh,(0, -2nhh));
+ penlabels (1,2,3,4,5);
+endchar;
+
+beginchar(120, 0, .5nhh#, .5nhh#); "porrectus";
+  x1=x4=0; x2=x3=3*gregwidth+lthick;
+  y1=-y4=.5gregwidth-lthick; y2=y1-nhh; y3=y4-nhh;
+  z5=z1+(0,0.1gregwidth);
+  fill z5..{right}z2--z3{left}..z4--cycle; shift_pic(0,hlthick);
+  fill_square (med, 1.5nhh,(0, -1.5nhh));
+ penlabels (1,2,3,4,5);
+endchar;
+
+beginchar(121, 0, .5nhh#, .5nhh#); "soft porrectus";
+  x1=x4=0; x2=x3=3*gregwidth+lthick;
+  y1=-y4=.5gregwidth-lthick; y2=y1-0.5nhh; y3=y4-0.5nhh;
+  z5=z1+(0,0.1gregwidth);
+  fill z5..{right}z2--z3{left}..z4--cycle; shift_pic(0,hlthick);
+  fill_square (med, 1.5nhh,(0, -1.5nhh));
+ penlabels (1,2,3,4,5);
+endchar;
+
+def quilisma(expr ymidtop, ymidbot) =
+  ydiff:=0.15gregwidth;
+  qdecalage:=.2*gregwidth;
+  ydepth:=0.25gregwidth;
+  x1=x14=-qdecalage+hlthick;
+  x7=x8=gregwidth+hlthick;
+  y1+ydiff-0.5ydepth=ymidtop=y7-ydiff-0.5ydepth;
+  y14+ydiff-0.5ydepth=ymidbot=y8-ydiff-0.5ydepth;
+  3x3=2x1+x7; 3x5=x1+2x7;
+  3y3=2y1+y7; 3y5=y1+2y7;
+  2x2=x1+x3; 2x4=x3+x5; 2x6=x5+x7;
+  2y2=y1+y3-2ydepth; 2y4=y3+y5-2ydepth; 2y6=y5+y7-2ydepth;
+  3x12=2x14+x8; 3x10=x14+2x8;
+  3y12=2y14+y8; 3y10=y14+2y8;
+  2x13=x14+x12; 2x11=x12+x10; 2x9=x10+x8;
+  2y13=y14+y12-2ydepth; 2y11=y12+y10-2ydepth; 2y9=y10+y8-2ydepth;
+
+  pickup line_pen;
+
+  draw z1{down+0.1right}..z2..z3..z4..z5..z6..{up+0.1right}z7--z8{down}..z9..z10..z11..z12..z13..{up+0.1left}z14--cycle;
+  fill z1{down+0.1right}..z2..z3..z4..z5..z6..{up+0.1right}z7--z8{down}..z9..z10..z11..z12..z13..{up+0.1left}z14--cycle;
+  shift_pic(0,-hlthick);
+enddef;
+
+beginchar(125, 0, .5nhh#, .5nhh#); "quilisma";
+  quilisma(0.5gregwidth-hlthick, -0.5gregwidth+hlthick);
+endchar;
+
+beginchar(126, 0, .5nhh#, .5nhh#); "bottom quilisma";
+  quilisma(0.5gregwidth-hlthick-0.8shave, -0.5gregwidth+hlthick);
+endchar;
+
+%%%%%%%
+message ("<clefs>");
+%%%%%%%
+keygregwidth:=0.5*sqrt(2)*nhw;
+
+beginchar(98, 8/3nhw#, 3.25nhh#, 0); "gregorian C clef";
+  x1=x4=0; x2=x3=keygregwidth; y1=y2=-y3=-y4=.5keygregwidth-lthick;
+  fill z1{dir 15}..z2--z3{dir 165}..z4--cycle;
+  save_elempic;
+  pickup med_pen; draw bot rt z1..{down}(-.01nhw,-.5nhh);
+  shift_pic(nhw,2.5nhh);
+  add_mirror ((0,2nhh),(1,2nhh));
+  savepic;
+  shift_pic (0,-2nhh);
+endchar;
+
+beginchar(122, 8/3nhw#, 4.25nhh#, 0); "gregorian F clef";
+  callpic;
+  add_elempic (.1nhw+0.5med,2nhh);
+  fill_square (med, 1.5nhh, (.75nhw,.8nhh));
+  shift_pic (1/3nhw,-2nhh);
+endchar;
+
+end
diff --git a/mf/xhsld16.mf b/mf/xhsld16.mf
new file mode 100644 (file)
index 0000000..5c71998
--- /dev/null
@@ -0,0 +1,37 @@
+font_identifier:="xhsld16";
+mode_setup;
+font_size 16pt#;
+thick#:=1pt#;
+stepwidth#:=1/8designsize;% -> \internote
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture save_pic;
+numheights:=16;
+numlengths:=8;%(20-90pt)
+
+code=-1;
+for j=1 upto numlengths:
+  slength#:=(j+1)*10pt#;
+  define_pixels(slength);
+
+  for i=1 upto numheights:
+    beginchar(incr code, slength#, 0, 0);
+      x1=y1=0;x3=slength;y3=2y1'= i*stepwidth;
+      x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90);
+      if x3> y3:y3'=0;else:x3'=slength;fi
+      z2=.5[z3',z1'];
+      penpos1(thick,90);
+      penpos2(2/3thick,(angle(z3-z1)+90));
+      penpos3(.15thick,(angle(z3-z1)+90));
+      penstroke z1e..z2e..z3e;
+      pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3';
+      save_pic:=currentpicture;
+    endchar;
+
+    beginchar(128+code, slength#, 0, 0);
+      currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1));
+    endchar;
+  endfor
+
+endfor
+end
diff --git a/mf/xhsld20.mf b/mf/xhsld20.mf
new file mode 100644 (file)
index 0000000..e91a790
--- /dev/null
@@ -0,0 +1,37 @@
+font_identifier:="xhsld20";
+mode_setup;
+font_size 20pt#;
+thick#:=1pt#;
+stepwidth#:=1/8designsize;% -> \internote
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture save_pic;
+numheights:=16;
+numlengths:=8;%(20-90pt)
+
+code=-1;
+for j=1 upto numlengths:
+  slength#:=(j+1)*10pt#;
+  define_pixels(slength);
+
+  for i=1 upto numheights:
+    beginchar(incr code, slength#, 0, 0);
+      x1=y1=0;x3=slength;y3=2y1'= i*stepwidth;
+      x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90);
+      if x3> y3:y3'=0;else:x3'=slength;fi
+      z2=.5[z3',z1'];
+      penpos1(thick,90);
+      penpos2(2/3thick,(angle(z3-z1)+90));
+      penpos3(.15thick,(angle(z3-z1)+90));
+      penstroke z1e..z2e..z3e;
+      pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3';
+      save_pic:=currentpicture;
+    endchar;
+
+    beginchar(128+code, slength#, 0, 0);
+      currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1));
+    endchar;
+  endfor
+
+endfor
+end
diff --git a/mf/xhslu16.mf b/mf/xhslu16.mf
new file mode 100644 (file)
index 0000000..b2e3e7d
--- /dev/null
@@ -0,0 +1,37 @@
+font_identifier:="xhslu16";
+mode_setup;
+font_size 16pt#;
+thick#:=1pt#;
+stepwidth#:=1/8designsize;% -> \internote
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture save_pic;
+numheights:=16;
+numlengths:=8;%(20-90pt)
+
+code=-1;
+for j=1 upto numlengths:
+  slength#:=(j+1)*10pt#;
+  define_pixels(slength);
+
+  for i=1 upto numheights:
+    beginchar(incr code, slength#, 0, 0);
+      x1=y1=0;x3=slength;y3=2y1'=-i*stepwidth;
+      x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90);
+      if x3>-y3:y3'=0;else:x3'=slength;fi
+      z2=.5[z3',z1'];
+      penpos1(thick,90);
+      penpos2(2/3thick,(angle(z3-z1)+90));
+      penpos3(.15thick,(angle(z3-z1)+90));
+      penstroke z1e..z2e..z3e;
+      pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3';
+      save_pic:=currentpicture;
+    endchar;
+
+    beginchar(128+code, slength#, 0, 0);
+      currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1));
+    endchar;
+  endfor
+
+endfor
+end
diff --git a/mf/xhslu20.mf b/mf/xhslu20.mf
new file mode 100644 (file)
index 0000000..d41801d
--- /dev/null
@@ -0,0 +1,37 @@
+font_identifier:="xhslu20";
+mode_setup;
+font_size 20pt#;
+thick#:=1pt#;
+stepwidth#:=1/8designsize;% -> \internote
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture save_pic;
+numheights:=16;
+numlengths:=8;%(20-90pt)
+
+code=-1;
+for j=1 upto numlengths:
+  slength#:=(j+1)*10pt#;
+  define_pixels(slength);
+
+  for i=1 upto numheights:
+    beginchar(incr code, slength#, 0, 0);
+      x1=y1=0;x3=slength;y3=2y1'=-i*stepwidth;
+      x1'=.5x3;z3'-z1'=whatever*dir(angle(z3-z1)+90);
+      if x3>-y3:y3'=0;else:x3'=slength;fi
+      z2=.5[z3',z1'];
+      penpos1(thick,90);
+      penpos2(2/3thick,(angle(z3-z1)+90));
+      penpos3(.15thick,(angle(z3-z1)+90));
+      penstroke z1e..z2e..z3e;
+      pickup pencircle; draw z1..z2..z3;% draw z1--z3; draw z1'--z3';
+      save_pic:=currentpicture;
+    endchar;
+
+    beginchar(128+code, slength#, 0, 0);
+      currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1));
+    endchar;
+  endfor
+
+endfor
+end
diff --git a/mf/xsld11.mf b/mf/xsld11.mf
new file mode 100644 (file)
index 0000000..4b9142a
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xsld11";
+mode_setup;
+font_size 10.24pt#;
+thick#:=1pt#;
+internote#:=1.28pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef;
+def T= rotated 180 shifted (0,-mheight) enddef;
+
+input xslgen;
diff --git a/mf/xsld13.mf b/mf/xsld13.mf
new file mode 100644 (file)
index 0000000..c612d42
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xsld13";
+mode_setup;
+font_size 12.8pt#;
+thick#:=1pt#;
+internote#:=1.6pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef;
+def T= rotated 180 shifted (0,-mheight) enddef;
+
+input xslgen;
diff --git a/mf/xsld16.mf b/mf/xsld16.mf
new file mode 100644 (file)
index 0000000..38720a7
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xsld16";
+mode_setup;
+font_size 16pt#;
+thick#:=1pt#;
+internote#:=2pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef;
+def T= rotated 180 shifted (0,-mheight) enddef;
+
+input xslgen;
diff --git a/mf/xsld20.mf b/mf/xsld20.mf
new file mode 100644 (file)
index 0000000..c36089f
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xsld20";
+mode_setup;
+font_size 20pt#;
+thick#:=1pt#;
+internote#:=2.5pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef;
+def T= rotated 180 shifted (0,-mheight) enddef;
+
+input xslgen;
diff --git a/mf/xsld24.mf b/mf/xsld24.mf
new file mode 100644 (file)
index 0000000..5a03c91
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xsld24";
+mode_setup;
+font_size 24pt#;
+thick#:=1pt#;
+internote#:=3pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef;
+def T= rotated 180 shifted (0,-mheight) enddef;
+
+input xslgen;
diff --git a/mf/xsld29.mf b/mf/xsld29.mf
new file mode 100644 (file)
index 0000000..766cb83
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xsld29";
+mode_setup;
+font_size 28.8pt#;
+thick#:=1pt#;
+internote#:=3.6pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= reflectedabout (origin,right) shifted (-.5mw,0) enddef;
+def T= rotated 180 shifted (0,-mheight) enddef;
+
+input xslgen;
diff --git a/mf/xslgen.mf b/mf/xslgen.mf
new file mode 100644 (file)
index 0000000..8df8742
--- /dev/null
@@ -0,0 +1,37 @@
+min_bow:= internote;
+max_bow:=3internote;
+slope:=17.5/100;
+
+code=-1;
+
+for iht=1 upto 8:
+  for iwd=0 upto 15:
+    beginchar(incr code, 0, 0, 0);
+      mw#:=(minwidth+iwd*delwidth)*pt#;
+      define_pixels(mw);
+      x1 = y1= 0; x3= mw; y3= 2y2'= iht*internote; x2'= .5x3;
+      mheight:=y3;
+      z2-z2'= whatever*dir(angle(z3-z1)+90);
+      my_bow:=min(max_bow, slope*mw);
+      my_bow:=max(my_bow, min_bow);
+      z1'=(z1-(0,my_bow)) rotated angle(z3-z1);
+      (z1'-z2)=whatever*(z1-z2');
+      penpos1(.15thick,(angle(z3-z1)+90));
+      penpos2(thick,(angle(z3-z1)+90));
+      penpos3(.15thick,(angle(z3-z1)+90));
+      penstroke (flex(z1e,z2e,z3e));
+%{{{
+      currentpen:= pencircle;
+      draw (flex(z1,z2,z3));% draw z1--z3; draw z2'--z2--z1'--z1;
+%}}}
+      currentpicture:=currentpicture t;
+      p:=currentpicture;
+    endchar;
+
+    beginchar(code+128, 0, 0, 0);
+      currentpicture:=p T;
+    endchar;
+
+  endfor
+endfor
+end
diff --git a/mf/xslhd.mf b/mf/xslhd.mf
new file mode 100644 (file)
index 0000000..5ae5fdc
--- /dev/null
@@ -0,0 +1,31 @@
+thick#:=1pt#;
+stepwidth#:=designsize/8;
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture save_pic;
+numheights:=16;
+numlengths:=8;%(12-96pt)
+
+code=-1;
+for j=1 upto numlengths:
+  slength#:=j*12pt#;
+  define_pixels(slength);
+
+  for i=1 upto numheights:
+    beginchar(incr code, slength#, 0, 0);
+      x1=y1=0;x2=slength;y2= i*stepwidth;
+      penpos1(thick,90);
+      penpos2(max(1,.15thick),min(2angle(z2-z1)+90,180));
+      fill z1r{dir(1)}..{dir(min(2angle(z2-z1),90)-1)}z2r--
+           z2l{dir(min(2angle(z2-z1)-180,-90))}..z1l{left}--cycle;
+      save_pic:=currentpicture;
+    endchar;
+
+    beginchar(128+code, slength#, 0, 0);
+      currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1));
+    endchar;
+  endfor
+
+endfor
+end
+
diff --git a/mf/xslhd11.mf b/mf/xslhd11.mf
new file mode 100644 (file)
index 0000000..215a47f
--- /dev/null
@@ -0,0 +1,5 @@
+font_identifier:="xslhd11";
+mode_setup;
+font_size 10.24pt#;
+input xslhd;
+
diff --git a/mf/xslhd13.mf b/mf/xslhd13.mf
new file mode 100644 (file)
index 0000000..930c0ae
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhd13";
+mode_setup;
+font_size 12.8pt#;
+input xslhd;
diff --git a/mf/xslhd16.mf b/mf/xslhd16.mf
new file mode 100644 (file)
index 0000000..aacbd5a
--- /dev/null
@@ -0,0 +1,5 @@
+font_identifier:="xslhd16";
+mode_setup;
+font_size 16pt#;
+input xslhd;
+
diff --git a/mf/xslhd20.mf b/mf/xslhd20.mf
new file mode 100644 (file)
index 0000000..d0bb66a
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhd20";
+mode_setup;
+font_size 20pt#;
+input xslhd;
diff --git a/mf/xslhd24.mf b/mf/xslhd24.mf
new file mode 100644 (file)
index 0000000..650eba1
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhd24";
+mode_setup;
+font_size 24pt#;
+input xslhd;
diff --git a/mf/xslhd29.mf b/mf/xslhd29.mf
new file mode 100644 (file)
index 0000000..db52074
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhd24";
+mode_setup;
+font_size 28.8pt#;
+input xslhd;
diff --git a/mf/xslhu.mf b/mf/xslhu.mf
new file mode 100644 (file)
index 0000000..c52ceac
--- /dev/null
@@ -0,0 +1,30 @@
+thick#:=1pt#;
+stepwidth#:=designsize/8;
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture save_pic;
+numheights:=16;
+numlengths:=8;%(12-96pt)
+
+code=-1;
+for j=1 upto numlengths:
+  slength#:=j*12pt#;
+  define_pixels(slength);
+
+  for i=1 upto numheights:
+    beginchar(incr code, slength#, 0, 0);
+      x1=y1=0;x2=slength;y2=-i*stepwidth;
+      penpos1(thick,90);
+      penpos2(max(1,.15thick),min(2angle(z2-z1)+90,180));
+      fill z1r{dir(1)}..{dir(min(2angle(z2-z1),90)-1)}z2r--
+           z2l{dir(min(2angle(z2-z1)-180,-90))}..z1l{left}--cycle;
+      save_pic:=currentpicture;
+    endchar;
+
+    beginchar(128+code, slength#, 0, 0);
+      currentpicture:=save_pic reflectedabout((.5slength,0),(.5slength, 1));
+    endchar;
+  endfor
+
+endfor
+end
diff --git a/mf/xslhu11.mf b/mf/xslhu11.mf
new file mode 100644 (file)
index 0000000..f1b0c69
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhu11";
+mode_setup;
+font_size 10.24pt#;
+input xslhu.mf
diff --git a/mf/xslhu13.mf b/mf/xslhu13.mf
new file mode 100644 (file)
index 0000000..162c503
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhu13";
+mode_setup;
+font_size 12.8pt#;
+input xslhu.mf
diff --git a/mf/xslhu16.mf b/mf/xslhu16.mf
new file mode 100644 (file)
index 0000000..6cfc184
--- /dev/null
@@ -0,0 +1,5 @@
+font_identifier:="xslhu16";
+mode_setup;
+font_size 16pt#;
+input xslhu.mf
+
diff --git a/mf/xslhu20.mf b/mf/xslhu20.mf
new file mode 100644 (file)
index 0000000..94c6f00
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhu20";
+mode_setup;
+font_size 20pt#;
+input xslhu.mf
diff --git a/mf/xslhu24.mf b/mf/xslhu24.mf
new file mode 100644 (file)
index 0000000..399813c
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhu24";
+mode_setup;
+font_size 24pt#;
+input xslhu.mf
diff --git a/mf/xslhu29.mf b/mf/xslhu29.mf
new file mode 100644 (file)
index 0000000..f5155ab
--- /dev/null
@@ -0,0 +1,4 @@
+font_identifier:="xslhu29";
+mode_setup;
+font_size 28.8pt#;
+input xslhu.mf
diff --git a/mf/xslhz20.mf b/mf/xslhz20.mf
new file mode 100644 (file)
index 0000000..23f015d
--- /dev/null
@@ -0,0 +1,24 @@
+font_identifier:="xslhz20";
+mode_setup;
+font_size 20pt#;
+thick#:=1pt#;
+stepwidth#:=4pt#;
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture pic;
+
+slope=1/100;
+
+for i=1 upto 100:
+  beginchar((i-1),0,0,0);
+    x3=-x1=.5i*stepwidth; x2=y1=y3=0; y2=slope*i*stepwidth;
+    penpos1(thick,90); penpos2(thick,90); penpos3(thick,90);
+    penstroke z1e..z2e..z3e;
+    pic:= currentpicture;
+  endchar;
+
+  beginchar((128+i-1),0,0,0);
+    currentpicture:= pic reflectedabout(origin,right);
+  endchar;
+endfor
+end
diff --git a/mf/xslu11.mf b/mf/xslu11.mf
new file mode 100644 (file)
index 0000000..0a11e60
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xslu11";
+mode_setup;
+font_size 10.24pt#;
+thick#:=1pt#;
+internote#:=1.28pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= rotated 180 shifted (.5mw, mheight) enddef;
+def T= rotated 180 shifted (0,mheight) enddef;
+
+input xslgen;
diff --git a/mf/xslu13.mf b/mf/xslu13.mf
new file mode 100644 (file)
index 0000000..b9f9fb1
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xslu13";
+mode_setup;
+font_size 12.8pt#;
+thick#:=1pt#;
+internote#:=1.6pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= rotated 180 shifted (.5mw, mheight) enddef;
+def T= rotated 180 shifted (0,mheight) enddef;
+
+input xslgen;
diff --git a/mf/xslu16.mf b/mf/xslu16.mf
new file mode 100644 (file)
index 0000000..37d07d9
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xslu16";
+mode_setup;
+font_size 16pt#;
+thick#:=1pt#;
+internote#:=2pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= rotated 180 shifted (.5mw, mheight) enddef;
+def T= rotated 180 shifted (0,mheight) enddef;
+
+input xslgen;
diff --git a/mf/xslu20.mf b/mf/xslu20.mf
new file mode 100644 (file)
index 0000000..0a741c0
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xslu20";
+mode_setup;
+font_size 20pt#;
+thick#:=1pt#;
+internote#:=2.5pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= rotated 180 shifted (.5mw, mheight) enddef;
+def T= rotated 180 shifted (0,mheight) enddef;
+
+input xslgen;
diff --git a/mf/xslu24.mf b/mf/xslu24.mf
new file mode 100644 (file)
index 0000000..f7ce9d6
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xslu24";
+mode_setup;
+font_size 24pt#;
+thick#:=1pt#;
+internote#:=3pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= rotated 180 shifted (.5mw, mheight) enddef;
+def T= rotated 180 shifted (0,mheight) enddef;
+
+input xslgen;
diff --git a/mf/xslu29.mf b/mf/xslu29.mf
new file mode 100644 (file)
index 0000000..6838343
--- /dev/null
@@ -0,0 +1,20 @@
+font_identifier:="xslu29";
+mode_setup;
+font_size 28.8pt#;
+thick#:=1pt#;
+internote#:=3.6pt#;
+define_pixels(internote);
+define_blacker_pixels(thick);
+
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+maxwidth:=minwidth+15delwidth;
+fontdimen 5: maxwidth;
+
+picture p;
+
+def t= rotated 180 shifted (.5mw, mheight) enddef;
+def T= rotated 180 shifted (0,mheight) enddef;
+
+input xslgen;
diff --git a/mf/xslz20.mf b/mf/xslz20.mf
new file mode 100644 (file)
index 0000000..f335e12
--- /dev/null
@@ -0,0 +1,42 @@
+font_identifier:="xslz20";
+mode_setup;
+font_size 20pt#;
+thick#:=1pt#;
+nhh#:=5pt#;
+define_pixels(nhh);
+define_blacker_pixels(thick);
+minwidth:=8pt#;
+delwidth:=4pt#;
+
+numslurs:=54;
+maxwidth:=minwidth+(numslurs-1)*delwidth;
+
+fontdimen 5: maxwidth;
+
+picture p;
+
+min_bow:=  .4nhh;
+max_bow:= 1.75nhh;
+slope:= 10/100;
+
+code=-1;
+
+for i=1 upto numslurs:
+
+  beginchar(incr code, 0, 0, 0);
+    mw:=(minwidth+code*delwidth)*pt;
+    x3= -x1= .5mw; x2= y1= y3 = 0;
+    y2= max(min_bow, slope*mw);
+    y2:= min(y2, max_bow);
+    penpos1(.15thick,90); penpos2(thick,90); penpos3(.15thick,90);
+    penstroke (flex(z1e,z2e,z3e));
+    currentpen:= pencircle; draw (flex(z1,z2,z3));
+    p:=currentpicture;
+  endchar;
+
+  beginchar(code+54, 0, 0, 0);
+    currentpicture:=p reflectedabout (origin, right);
+  endchar;
+
+endfor
+end
diff --git a/mf/xtie20.mf b/mf/xtie20.mf
new file mode 100644 (file)
index 0000000..99f2454
--- /dev/null
@@ -0,0 +1,24 @@
+font_identifier:="xtie20";
+mode_setup;
+font_size 20pt#;
+thick#:=1pt#;
+stepwidth#:=4pt#;
+define_pixels(stepwidth);
+define_blacker_pixels(thick);
+picture pic;
+
+slope=.009;
+
+for i=1 upto 100:
+  beginchar((i-1),0,0,0);
+    x3=-x1=.5i*stepwidth; x2=y1=y3=0; y2=slope*i*stepwidth;
+    penpos1(thick,90); penpos2(thick,90); penpos3(thick,90);
+    penstroke z1e..z2e..z3e;
+    pic:= currentpicture;
+  endchar;
+
+  beginchar((128+i-1),0,0,0);
+    currentpicture:= pic reflectedabout(origin,right);
+  endchar;
+endfor
+end