From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Wed, 8 Oct 1997 14:17:24 +0000 (+0200)
Subject: release: 0.1.20
X-Git-Tag: release/0.1.21~2
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=b1eda2bf8186760c557b770833c172a8979bc538;p=lilypond.git

release: 0.1.20
---

diff --git a/AUTHORS.text b/AUTHORS.text
index 96d40df9e3..59490e17be 100644
--- a/AUTHORS.text
+++ b/AUTHORS.text
@@ -61,6 +61,6 @@ CCCCOOOONNNNTTTTRRRRIIIIBBBBUUUUTTTTOOOORRRRSS
 
 
 
-23/Sep/97                LilyPond 0.1.19                        1
+23/Sep/97                LilyPond 0.1.20                        1
 
 
diff --git a/BUGS b/BUGS
index 95493cbd7d..40be3fcf28 100644
--- a/BUGS
+++ b/BUGS
@@ -1,18 +1,5 @@
 Document Really Ugly Bugs (coredumps, assert fails, etc)
 
-[Solaris, fixed in pl13]
-
-Stack frame overwrite on Solaris 2.x (this will produce a seg
-fault, signal 11).  Stacktrace
-
-	Engraver_group_engraver::Engraver_group_engraver(int)
-	Score_engraver::Score_engraver( )
-	get_group_engraver_p()
-
-We don't know a fix or workaround, but compiling without optimisation
-might help (Without -O2 optimisation, my execs run fine on Solaris;
-without -O2, but with purify, it dumps core)
-
 
 [Linux Intel]
 
@@ -39,4 +26,8 @@ Typical stacktrace:
 
 
 I get bitten by this every once in a while, and I am very interested
-in hints what might be wrong.
+in hints what might be wrong.  This problem has only been identified
+with libc-5.3 and libc-5.4 platforms, so you might try upgrading to
+6.0, ie. GNU libc-2.
+
+
diff --git a/Documentation/mudela-man.doc b/Documentation/mudela-man.doc
index ddf19760d6..498ba8b756 100644
--- a/Documentation/mudela-man.doc
+++ b/Documentation/mudela-man.doc
@@ -342,7 +342,7 @@ Symbols which can be put at either side (above or below) of a staff
 are entered as follows:
 \begin[verbatim,fragment]{mudela}
         a-^     % marcato, direction: default
-        a^-     % portato, direction: above note
+        %a^-     % portato, direction: above note
         a_.     % staccato, direction: below note
         a^\fermata      % predefined identifier
         c_"marcato"     % add a text
diff --git a/INSTALL.text b/INSTALL.text
index c660fb1603..20f340f20a 100644
--- a/INSTALL.text
+++ b/INSTALL.text
@@ -61,7 +61,7 @@ RRRRUUUUNNNNNNNNIIIINNNNGGGG
 
 
 
-7/Oct/97                 LilyPond 0.1.19                        1
+8/Oct/97                 LilyPond 0.1.20                        1
 
 
 
@@ -127,7 +127,7 @@ CCCCOOOONNNNFFFFIIIIGGGGUUUURRRRIIIINNNNGGGG a
 
 
 
-7/Oct/97                 LilyPond 0.1.19                        2
+8/Oct/97                 LilyPond 0.1.20                        2
 
 
 
@@ -193,7 +193,7 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
 
 
 
-7/Oct/97                 LilyPond 0.1.19                        3
+8/Oct/97                 LilyPond 0.1.20                        3
 
 
 
@@ -259,7 +259,7 @@ IIIINNNNSSSSTTTTAAAALLLLLLLLIIIINNNNGGGG
 
 
 
-7/Oct/97                 LilyPond 0.1.19                        4
+8/Oct/97                 LilyPond 0.1.20                        4
 
 
 
@@ -325,7 +325,7 @@ RRRREEEEDDDDHHHHAAAATTTT LLLLIIIINNNNUUUUXXXX
 
 
 
-7/Oct/97                 LilyPond 0.1.19                        5
+8/Oct/97                 LilyPond 0.1.20                        5
 
 
 
@@ -391,6 +391,6 @@ AAAAUUUUTTTTHHHHOOOORRRRSSSS
 
 
 
-7/Oct/97                 LilyPond 0.1.19                        6
+8/Oct/97                 LilyPond 0.1.20                        6
 
 
diff --git a/NEWS b/NEWS
index 8e1a22a644..facfa0b0fc 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+pl 20
+	- don't swallow non lyric-stuff in lyrics
+	- x-position of Stem
+	- more feta changes
+	- move scripts to right
+	- genheader.py replaces genheader.perl
+
 pl 19.jcn2
 	- bf's mi2mu:
 	  * Midi_track_parser::note_end_all
diff --git a/README b/README
index 6b8828bc88..4a359b0efd 100644
--- a/README
+++ b/README
@@ -66,5 +66,5 @@ The website also contains the complete documentation
 
 7. CAVEATS
 
-Please read the file BUGS for some ugly bugs.  This especially 
-applies to Solaris 2.x and Linux-Intel unix users.
+Please read the file BUGS for some ugly bugs.  This especially applies
+Linux-Intel unix users.
diff --git a/TODO b/TODO
index 85db7d288d..3c414d5349 100644
--- a/TODO
+++ b/TODO
@@ -6,9 +6,13 @@ done, or is an idea that I want to think about
 Most of the items are marked in the code as well, with full explanation. 
 grep for TODO and ugh/ugr
 
-	* adapt Script for new font conventions
+	* accidental placement
 
-	* AFM for font input.
+	* bar-checking lyrics.
+
+	* check IO error on writing (disk full?)
+
+	* AFM for font input?
 
 	* Make general "spanning"-elements and "placer"-elements
 
@@ -36,8 +40,6 @@ grep for TODO and ugh/ugr
 	- MIDI instrument
 	- staff title
 
-	* check out egcs
-
 	* give Items/Spanners access to unbroken originals	
 
 	* Score_bar/Piano_braces, are *not* ordinary bars 
diff --git a/VERSION b/VERSION
index 04ce9ca7fc..b99cf5a2f1 100644
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 TOPLEVEL_MAJOR_VERSION = 0
 TOPLEVEL_MINOR_VERSION = 1
-TOPLEVEL_PATCH_LEVEL = 19.jcn2
+TOPLEVEL_PATCH_LEVEL = 20
 TOPLEVEL_MY_PATCH_LEVEL = 
 
 # use the above to send patches, always empty for released version:
diff --git a/bin/genheader.in b/bin/genheader.in
deleted file mode 100644
index 8643a3794f..0000000000
--- a/bin/genheader.in
+++ /dev/null
@@ -1,60 +0,0 @@
-#!@PERL@ -w
-
-# generate the standard header of a LilyPond source file.
-my $fn;
-
-sub
-    do_init
-{
-    $MAILADDRESS=$ENV{MAILADDRESS};
-     @pw=(getpwuid($<));
-     $username=$pw[6];
-
-    die "arg needed\n" if (!($#ARGV+1));
-     $fn = $ARGV[0];
-
-     $hh_b =  ($fn =~ /hh$/ );
-     $inc_b=  ($hh_b || $fn =~ /[ti]cc$/);
-}
-
-sub 
-    do_head
-{
-    
-    my $what="implement ";
-    $what = "declare " if ($hh_b);
-    my ($PROJECT, $cwd);
-    $PROJECT = "the GNU LilyPond music typesetter";
-    chop($cwd = `pwd`);
-    
-    $PROJECT= "the Flower Library" if ($cwd =~ /flower/);
-    
-    my $headstr ="/*
-  $fn -- $what
-
-  source file of $PROJECT
-
-  (c) 1997 $username <$MAILADDRESS>
-*/\n";
-    print $headstr;
-}
-sub do_inc
-{
-    my $headstr="";
-    my $startdef= $fn;
-    $startdef =~ s/[\.-]/_/g;
-    $startdef =~ tr/a-z/A-Z/;
-    my $terminatestr="\n";
-
-    if ($inc_b) {
-	$headstr = "\n\n#ifndef $startdef\n#define $startdef\n";
-	$terminatestr .= "#endif // $startdef\n"  
-	}
-
-    print $headstr, $terminatestr;
-}
-do_init;
-do_head;
-do_inc;
-
-
diff --git a/bin/genheader.py b/bin/genheader.py
new file mode 100644
index 0000000000..f8c1cc30f1
--- /dev/null
+++ b/bin/genheader.py
@@ -0,0 +1,132 @@
+#!@PYTHON@
+
+# 
+# genheader.py -- do headers (like these) 
+# 
+# source file of the GNU LilyPond music typesetter
+# 
+# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+# 
+
+
+
+import posix
+import pwd
+import regex
+import regsub
+import string
+import sys
+import os
+import getopt
+
+class My_options:
+    def __init__(self):
+	self.commentify = None
+	self.add_hdr_def = 0
+	self.classname = ''
+
+my_options = My_options()
+
+def mail():
+    return os.environ['MAILADDRESS']
+
+def name():
+    return pwd.getpwuid(posix.getuid())[4]
+
+def c_commentify(str):
+    return  '/* ' + regsub.gsub('^','  ', str) + '\n */';
+
+def sh_commentify(str):
+    return regsub.gsub('^', '# ', str)
+
+def tex_commentify(str):
+    return regsub.gsub('^', '% ', str)
+
+def project_str():
+    cwd = posix.getcwd()
+    if regex.search('flower', cwd) <> -1:
+	PROJECT = "the Flower Library"
+    elif regex.search('mf$', cwd) <> -1:
+	PROJECT = "the Feta (Font-En-Tja) music font"
+    else:
+	PROJECT = "the GNU LilyPond music typesetter"
+    return PROJECT
+
+def head_str(filename):
+    if my_options.add_hdr_def:
+	what = "declare " 
+    else:
+	what=" implement "
+
+
+    headstr = '\n%s -- %s\n\nsource file of %s\n\n(c) 1997 %s <%s>\n' \
+	      %(filename, what, project_str(), name(), mail())
+    return headstr
+
+
+def c_include(filename):
+    startdef= filename;
+    trans = string.maketrans( string.lowercase + '.', string.uppercase + '_')
+    startdef = string.translate(filename, trans)
+
+   
+    headstr = "\n\n#ifndef %s\n#define %s\n" % (startdef, startdef)
+    terminatestr = "#endif /* %s */\n"  % (startdef);
+
+    return headstr+ '\n\n'+ terminatestr;
+
+
+
+
+
+(options, files) = getopt.getopt(sys.argv[1:], 'tcsh', ['class']) 
+
+for opt in options:
+    o = opt[0]
+    a = opt[1]
+    if o == '-c':
+	my_options.commentify = c_commentify
+    elif o == '-t':
+	my_options.commentify = tex_commentify
+    elif o == '-s':
+	my_options.commentify = sh_commentify
+    elif o == '-h':
+	my_options.add_hdr_def = 1
+    elif o == '--class':
+	my_options.classname = a
+
+
+
+#
+# FIXME:  should create xxx.cc and include/xxx.hh, with implement/declare Xxx
+# in  one run
+if my_options.classname:
+    pass
+	
+def do_file(nm):
+    s = my_options.commentify(head_str(nm)) 
+    if my_options.add_hdr_def:
+	s = s + c_include(nm)
+    return s
+
+
+def extension(ext,nm):
+    ext = '\.' + ext
+    return regex.search(ext, nm) <> -1
+
+def select_commentification(nm):
+    if extension('hh',nm) or extension('cc',nm):
+	return c_commentify
+    elif extension('py',nm) or extension('pl',nm) or extension('sh',nm):
+	return  sh_commentify
+    elif extension('mf',nm) or extension('tex',nm) or extension('ly',nm):
+	return tex_commentify
+    else: 
+	raise 'help'
+
+for nm in files:
+    if extension('hh', nm): 
+	my_options.add_hdr_def = 1
+    if my_options.commentify == None:
+	my_options.commentify = select_commentification(nm)
+    print do_file(nm)
diff --git a/bin/make-website.in b/bin/make-website.in
index 37d318957d..9830035556 100644
--- a/bin/make-website.in
+++ b/bin/make-website.in
@@ -94,7 +94,8 @@ local @examples=("twinkle-pop",
 		 "gallina",
 		 "twinkle", 
 		 "collisions",
-		 "scales", 
+		 "font",
+		 #"scales", 
 		 "rhythm", 
 		 "multi" );
 
diff --git a/bin/mf-deps.py b/bin/mf-deps.py
index 700b9ccf35..c17e5d949a 100644
--- a/bin/mf-deps.py
+++ b/bin/mf-deps.py
@@ -1,5 +1,14 @@
 #!@PYTHON@
 
+# 
+# mf-deps.py -- dependencies for metafont 
+# 
+# source file of the GNU LilyPond music typesetter
+# 
+# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+# 
+
+
 """look into metafont source for dependencies.
 
  fixme: python path
diff --git a/bin/mf-to-table.py b/bin/mf-to-table.py
index 1ebf973d6c..bf680f9377 100644
--- a/bin/mf-to-table.py
+++ b/bin/mf-to-table.py
@@ -1,5 +1,13 @@
 #!@PYTHON@
 
+# 
+# mf-to-table.py -- convert spacing info in  MF logs .ly and .tex
+# 
+# source file of the GNU LilyPond music typesetter
+# 
+# (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+# 
+
 import getopt
 from string import *
 import regex
@@ -7,6 +15,7 @@ import regsub
 import os
 import sys
 import time
+
 begin_autometric_re = regex.compile('@{')
 end_autometric_re = regex.compile('@}')
 autometric_re = regex.compile('@{\([^@]*\)@}')
diff --git a/init/engraver.ly b/init/engraver.ly
index ffb57a5dc5..0852b4ca8c 100644
--- a/init/engraver.ly
+++ b/init/engraver.ly
@@ -66,7 +66,7 @@ Lyric_voice =
 
 	\consists "Lyric_engraver";
 	\consists "Line_group_engraver";
-	\consists "Swallow_engraver";
+	%\consists "Swallow_engraver";
 }
 
 Lyrics = \translator {
diff --git a/init/font-en-tja16.ly b/init/font-en-tja16.ly
index 4d99069a89..0ff3a8cdc0 100644
--- a/init/font-en-tja16.ly
+++ b/init/font-en-tja16.ly
@@ -1,14 +1,14 @@
 % generated automatically by mf-to-table.py version 0.3
-% on Mon Oct  6 20:23:06 1997
+% on Wed Oct  8 16:18:13 1997
 % Do not edit
 
 % input from out/font-en-tja16.log
 % name=\symboltables {
     "rests"  = \table {
-        "0" "\wholerest" -0.00\pt 6.00\pt 2.00\pt 4.00\pt 
-        "1" "\halfrest" -0.00\pt 6.00\pt -0.00\pt 2.00\pt 
-        "0o" "\outsidewholerest" -2.00\pt 8.00\pt 2.00\pt 4.00\pt 
-        "1o" "\outsidehalfrest" -2.00\pt 8.00\pt -0.00\pt 2.00\pt 
+        "0" "\wholerest" -0.00\pt 6.00\pt 1.50\pt 4.00\pt 
+        "1" "\halfrest" -0.00\pt 6.00\pt -0.00\pt 2.50\pt 
+        "0o" "\outsidewholerest" -2.50\pt 8.50\pt 1.50\pt 4.00\pt 
+        "1o" "\outsidehalfrest" -2.50\pt 8.50\pt -0.00\pt 2.50\pt 
         "2" "\quartrest" -0.00\pt 4.00\pt 3.00\pt 14.00\pt 
         "3" "\eighthrest" -0.00\pt 5.33\pt 4.00\pt 11.47\pt 
         "4" "\sixteenthrest" -0.00\pt 5.33\pt -0.00\pt 11.47\pt 
@@ -27,21 +27,30 @@
         "dot" "\dot" -0.00\pt 1.80\pt -0.90\pt 0.90\pt 
         }
     "balls"  = \table {
-        "0" "\wholeball" -0.00\pt 8.28\pt -2.30\pt 2.30\pt 
-        "1" "\halfball" -0.00\pt 5.76\pt -2.30\pt 2.30\pt 
-        "2" "\quartball" -0.00\pt 5.52\pt -2.30\pt 2.30\pt 
-        "-1" "\breveball" -0.00\pt 8.00\pt -2.00\pt 2.00\pt 
-        "-2" "\longaball" -0.00\pt 8.00\pt -2.00\pt 2.00\pt 
+        "-1" "\brevisball" -0.00\pt 8.00\pt -2.20\pt 2.20\pt 
+        "-2" "\longaball" -0.00\pt 8.00\pt -2.20\pt 2.20\pt 
+        "0" "\wholeball" -0.00\pt 7.92\pt -2.20\pt 2.20\pt 
+        "1" "\halfball" -0.00\pt 5.51\pt -2.20\pt 2.20\pt 
+        "2" "\quartball" -0.00\pt 5.28\pt -2.20\pt 2.20\pt 
         }
     "foobars"  = \table {
         "ufermata" "\ufermata" -6.30\pt 6.30\pt -0.00\pt 6.80\pt 
         "dfermata" "\dfermata" -6.30\pt 6.30\pt -6.80\pt 0.00\pt 
-        "accent" "\accent" -3.60\pt 3.60\pt -2.00\pt 2.00\pt 
+        "accent" "\sforzatoaccent" -3.60\pt 3.60\pt -2.00\pt 2.00\pt 
         "staccato" "\staccato" -0.50\pt 0.50\pt -0.50\pt 0.50\pt 
         "ustaccatissimo" "\ustaccatissimo" -0.80\pt 0.80\pt -0.20\pt 4.00\pt 
         "dstaccatissimo" "\dstaccatissimo" -0.80\pt 0.80\pt -4.00\pt 0.20\pt 
         "tenuto" "\tenuto" -3.60\pt 3.60\pt -0.24\pt 0.24\pt 
         "umarcato" "\umarcato" -2.00\pt 2.00\pt -0.00\pt 4.40\pt 
         "dmarcato" "\dmarcato" -2.00\pt 2.00\pt -4.40\pt 0.00\pt 
+        "open" "\ouvert" -1.40\pt 1.40\pt -0.00\pt 3.50\pt 
+        "stopped" "\plusstop" -2.20\pt 2.20\pt -2.20\pt 2.20\pt 
+        "upbow" "\upbow" -2.60\pt 2.60\pt -0.00\pt 7.80\pt 
+        "downbow" "\downbow" -3.50\pt 3.50\pt -0.00\pt 4.00\pt 
+        "turn" "\turn" -4.38\pt 4.38\pt -2.12\pt 2.12\pt 
+        }
+    "floogbars"  = \table {
+        "3u" "\eighthflag" -0.20\pt 5.17\pt -12.77\pt 0.20\pt 
+        "3d" "\deighthflag" -0.20\pt 5.17\pt -0.20\pt 12.77\pt 
         }
     %  } % $name
diff --git a/init/font-en-tja20.ly b/init/font-en-tja20.ly
index 2c2230c08d..4746d6ce47 100644
--- a/init/font-en-tja20.ly
+++ b/init/font-en-tja20.ly
@@ -1,14 +1,14 @@
 % generated automatically by mf-to-table.py version 0.3
-% on Mon Oct  6 20:23:19 1997
+% on Wed Oct  8 16:18:16 1997
 % Do not edit
 
 % input from out/font-en-tja20.log
 % name=\symboltables {
     "rests"  = \table {
-        "0" "\wholerest" -0.00\pt 7.50\pt 2.50\pt 5.00\pt 
-        "1" "\halfrest" -0.00\pt 7.50\pt -0.00\pt 2.50\pt 
-        "0o" "\outsidewholerest" -2.50\pt 10.00\pt 2.50\pt 5.00\pt 
-        "1o" "\outsidehalfrest" -2.50\pt 10.00\pt -0.00\pt 2.50\pt 
+        "0" "\wholerest" -0.00\pt 7.50\pt 1.88\pt 5.00\pt 
+        "1" "\halfrest" -0.00\pt 7.50\pt -0.00\pt 3.13\pt 
+        "0o" "\outsidewholerest" -3.13\pt 10.62\pt 1.88\pt 5.00\pt 
+        "1o" "\outsidehalfrest" -3.13\pt 10.62\pt -0.00\pt 3.13\pt 
         "2" "\quartrest" -0.00\pt 5.00\pt 3.75\pt 17.50\pt 
         "3" "\eighthrest" -0.00\pt 6.67\pt 5.00\pt 14.33\pt 
         "4" "\sixteenthrest" -0.00\pt 6.67\pt -0.00\pt 14.33\pt 
@@ -27,21 +27,30 @@
         "dot" "\dot" -0.00\pt 2.25\pt -1.13\pt 1.13\pt 
         }
     "balls"  = \table {
-        "0" "\wholeball" -0.00\pt 10.35\pt -2.88\pt 2.88\pt 
-        "1" "\halfball" -0.00\pt 7.20\pt -2.88\pt 2.88\pt 
-        "2" "\quartball" -0.00\pt 6.91\pt -2.88\pt 2.88\pt 
-        "-1" "\breveball" -0.00\pt 10.00\pt -2.50\pt 2.50\pt 
-        "-2" "\longaball" -0.00\pt 10.00\pt -2.50\pt 2.50\pt 
+        "-1" "\brevisball" -0.00\pt 10.00\pt -2.75\pt 2.75\pt 
+        "-2" "\longaball" -0.00\pt 10.00\pt -2.75\pt 2.75\pt 
+        "0" "\wholeball" -0.00\pt 9.90\pt -2.75\pt 2.75\pt 
+        "1" "\halfball" -0.00\pt 6.89\pt -2.75\pt 2.75\pt 
+        "2" "\quartball" -0.00\pt 6.61\pt -2.75\pt 2.75\pt 
         }
     "foobars"  = \table {
         "ufermata" "\ufermata" -7.88\pt 7.88\pt -0.00\pt 8.50\pt 
         "dfermata" "\dfermata" -7.88\pt 7.88\pt -8.50\pt 0.00\pt 
-        "accent" "\accent" -4.50\pt 4.50\pt -2.50\pt 2.50\pt 
+        "accent" "\sforzatoaccent" -4.50\pt 4.50\pt -2.50\pt 2.50\pt 
         "staccato" "\staccato" -0.63\pt 0.63\pt -0.63\pt 0.63\pt 
         "ustaccatissimo" "\ustaccatissimo" -1.00\pt 1.00\pt -0.20\pt 5.00\pt 
         "dstaccatissimo" "\dstaccatissimo" -1.00\pt 1.00\pt -5.00\pt 0.20\pt 
         "tenuto" "\tenuto" -4.50\pt 4.50\pt -0.30\pt 0.30\pt 
         "umarcato" "\umarcato" -2.50\pt 2.50\pt -0.00\pt 5.50\pt 
         "dmarcato" "\dmarcato" -2.50\pt 2.50\pt -5.50\pt 0.00\pt 
+        "open" "\ouvert" -1.75\pt 1.75\pt -0.00\pt 4.38\pt 
+        "stopped" "\plusstop" -2.75\pt 2.75\pt -2.75\pt 2.75\pt 
+        "upbow" "\upbow" -3.25\pt 3.25\pt -0.00\pt 9.75\pt 
+        "downbow" "\downbow" -4.38\pt 4.38\pt -0.00\pt 5.00\pt 
+        "turn" "\turn" -5.47\pt 5.47\pt -2.65\pt 2.65\pt 
+        }
+    "floogbars"  = \table {
+        "3u" "\eighthflag" -0.25\pt 6.46\pt -15.91\pt 0.25\pt 
+        "3d" "\deighthflag" -0.25\pt 6.46\pt -0.25\pt 15.91\pt 
         }
     %  } % $name
diff --git a/init/script.ly b/init/script.ly
index 9f37993065..508e43223f 100644
--- a/init/script.ly
+++ b/init/script.ly
@@ -26,6 +26,7 @@ rfheel = \script { "fheel" 0 0 1 0 0 }
 lftoe = \script { "ftoe" 0 0 -1 0 0 }
 rftoe = \script { "ftoe" 0 0 1 0 0 }
 turn = \script { "turn" 0 0 1 0 0 }
+open = \script { "open" 0 0 1 0 0 }
 
 %
 % left toe:      right heel:
diff --git a/init/table16.ly b/init/table16.ly
index 4e77e6ac0b..0fe26c3108 100644
--- a/init/table16.ly
+++ b/init/table16.ly
@@ -11,13 +11,15 @@ table_sixteen=
    % index TeXstring, 	xmin xmax ymin ymax
 
     "scripts" = \table {
+        "stopped" "\plusstop" -2.20\pt 2.20\pt -2.20\pt 2.20\pt 
+        "open" "\ouvert" -1.07\pt 1.07\pt -0.00\pt 2.67\pt 
 	"fermata" "\ufermata"		0.0\pt 0.0\pt	0.0\pt 6.0\pt
 	"-fermata" "\dfermata"		0.0\pt 0.0\pt	-6.0\pt 0.0\pt
 	"portato" "\portato"		0.0\pt 4.0\pt	0.0\pt	2.0\pt
 	"-portato" "\iportato"		0.0\pt 4.0\pt	-2.0\pt	0.0\pt
 	"tenuto" "\utenuto"			0.0\pt 4.0\pt	-1.0\pt	1.0\pt
 	"-tenuto" "\dtenuto"		0.0\pt 4.0\pt	-1.0\pt	1.0\pt
-	"sforzato" "\accent"		-0.8\pt 4.0\pt	-1.92\pt 1.92\pt
+	"sforzato" "\sforzatoaccent"		-0.8\pt 4.0\pt	-1.92\pt 1.92\pt
 	"marcato" "\umarcato"		0.0\pt 4.0\pt	0.0\pt	4.0\pt
 	"-marcato" "\dmarcato"		0.0\pt 4.0\pt	-4.0\pt	0.0\pt
 	"staccato" "\staccato"		0.0\pt	0.0\pt 	-1.1\pt 1.1\pt
@@ -80,17 +82,9 @@ table_sixteen=
 	"half"	"\hslurchar%{%}"
      }
 
-     "accidentals" = \table {
-	"-2"	"\flatflat"	0.0\pt 	8.16\pt	-2.5\pt 7.5\pt
-	"-1"	"\flat"		0.0\pt	4.8\pt	-2.5\pt 7.5\pt
-	"0"	"\natural"	0.0\pt	4.0\pt	-6.\pt 6.\pt
-	"1"	"\sharp" 	0.0\pt	4.4\pt	-6.\pt 6.\pt
-	"2"	"\sharpsharp"	0.0\pt	4.8\pt	-2.5\pt 7.5\pt
-     }
-
      "streepjes" = \table {
-	"toplines"	"\toplines{%}{%}"	-1.0\pt	7.0\pt	0.0\pt	0.0\pt
-	"botlines"	"\botlines{%}{%}"	-1.0\pt	7.0\pt	0.0\pt	0.0\pt
+	"toplines"	"\topledgerlines{%}{%}"	-1.0\pt	7.0\pt	0.0\pt	0.0\pt
+	"botlines"	"\botledgerlines{%}{%}"	-1.0\pt	7.0\pt	0.0\pt	0.0\pt
      }
 
      "bars" = \table {
@@ -163,12 +157,9 @@ table_sixteen=
      }
 
      "beamslopes" = \table {
-	"slope"		"\beamslope{%}{%}"  2.0\pt 64.0\pt 0.0\pt 0.0\pt	
+	"slope"		"\beamslope{%}{%}"  2.0\pt 64.0\pt 0.0\pt 0.0\pt
 	"horizontal"	"\rulesym{%}{%}"	
      }
-     % ugh what's our outdir called?
      \include "font-en-tja16.ly"
-
-
 }
 
diff --git a/init/table20.ly b/init/table20.ly
index 5c62d24311..b98a254235 100644
--- a/init/table20.ly
+++ b/init/table20.ly
@@ -12,13 +12,15 @@ table_twenty =
     % index TeXstring, 	xmin xmax ymin ymax
 
     "scripts" = \table {
-	"fermata" "\ufermata"		0.0\pt 0.0\pt	0.0\pt 6.0\pt
+	    "open" "\ouvert" -1.33\pt 1.33\pt -0.00\pt 3.33\pt 
+        "stopped" "\plusstop" -2.75\pt 2.75\pt -2.75\pt 2.75\pt 
+    "fermata" "\ufermata"		0.0\pt 0.0\pt	0.0\pt 6.0\pt
 	"-fermata" "\dfermata"		0.0\pt 0.0\pt	-6.0\pt 0.0\pt
 	"portato" "\portato"		0.0\pt 4.0\pt	0.0\pt	2.0\pt
 	"-portato" "\iportato"		0.0\pt 4.0\pt	-2.0\pt	0.0\pt
 	"tenuto" "\utenuto"			0.0\pt 4.0\pt	-1.0\pt	1.0\pt
 	"-tenuto" "\dtenuto"		0.0\pt 4.0\pt	-1.0\pt	1.0\pt
-	"sforzato" "\accent"		-0.8\pt 4.0\pt	-1.92\pt 1.92\pt
+	"sforzato" "\sforzatoaccent"		-0.8\pt 4.0\pt	-1.92\pt 1.92\pt
 	"marcato" "\umarcato"		0.0\pt 4.0\pt	0.0\pt	4.0\pt
 	"-marcato" "\dmarcato"		0.0\pt 4.0\pt	-4.0\pt	0.0\pt
 	"staccato" "\staccato"		0.0\pt	0.0\pt 	-1.1\pt 1.1\pt
@@ -92,8 +94,8 @@ table_twenty =
     }
 
     "streepjes" = \table {
-	"toplines"	"\toplines{%}{%}"	-3.0\pt	9.0\pt	0.0\pt	0.0\pt
-	"botlines"	"\botlines{%}{%}"	-3.0\pt	9.0\pt	0.0\pt	0.0\pt
+	"toplines"	"\topledgerlines{%}{%}"	-3.0\pt	9.0\pt	0.0\pt	0.0\pt
+	"botlines"	"\botledgerlines{%}{%}"	-3.0\pt	9.0\pt	0.0\pt	0.0\pt
     }
 
     "bars" = \table {
diff --git a/input/font.ly b/input/font.ly
index b724a49ef7..ff68d5bce7 100644
--- a/input/font.ly
+++ b/input/font.ly
@@ -1,7 +1,8 @@
 \header{
 enteredby	jcn
 copyright	PD
-TestedFeatures	font-en-tja
+TestedFeatures  This file tests the Feta music-font
+	(Feta definitively is not an abbreviation of Font-En-TjA)
 }
 
 \version "0.1.6";
@@ -10,25 +11,26 @@ TestedFeatures	font-en-tja
 	\melodic{ 
 		\octave c';
 		\meter 4/4;
-		a\longa
-		a\breve |
+		\multi 2  < { \stemup g''\longa a''\breve | }
+		{ \stemdown
 		c1 g c' a'
-		c2 g c' a'
+		c2 g } >
+		\stemboth
+		c' a'
 		c4 g c' a' |
-		a\ppp a\pp a\p a\mp |
-		a\mf a\f a\ff a\fff|
-		a\fp a\sf a\sfz a | % a\fz a\rf
+		a\ppp-\upbow a\pp-\downbow a\p^\turn a\mp^\fermata |
+		a\mf_\fermata a\f-\stopped a\ff-\open a\fff|
+		a\fp a4.\sf a4.\sfz | % a\fz a\rf
 		[c8 c] [a' a']
 		[c a'] [a' c] |
 		[c d e f] [as' ges' f' e']
 		[cis' dis' c' des'] [cisis' disis' ceses' deses'] |
 		  r1 r2 r4 r8 r16 r32 r64 r128 r128 |
-		  c'1.^\fermata c'1._\fermata
 		\multi 2 < { \stemup r1} {\stemdown c''}>
 		\multi 2 < { \stemup c1 } {\stemdown r1}>		
 		\stemboth
 		
-		c4_. c4-> c4^^ c4_^ 
+		c8_. c''8-> c4^^ c4_^ 
 		c4 _| c4^|
 		}
 	\paper{ 
diff --git a/input/gallina.tex b/input/gallina.tex
index c04c51db0d..5edf749d49 100644
--- a/input/gallina.tex
+++ b/input/gallina.tex
@@ -8,6 +8,7 @@
 \addtolength{\topmargin}{-1cm}
 \setlength{\textwidth}{15cm}
 \input lilyponddefs
+\musixsixteendefs
 \input titledefs
 \begin{document}
 
diff --git a/input/scsii-menuetto.tex b/input/scsii-menuetto.tex
index 095e50328a..dc5daa4fcd 100644
--- a/input/scsii-menuetto.tex
+++ b/input/scsii-menuetto.tex
@@ -6,8 +6,9 @@
 \textwidth\hsize\advance\textwidth-15mm
 \begin{document}
 \input lilyponddefs
+\musixsixteendefs
 \input titledefs
-\def\interscoreline{\vskip12pt}
+\def\interscoreline{\vskip6pt}
 \title{Solo Cello Suites\normalsize\\[2ex]Suite II}
 % \subtitle{Suite II}
 \composer{J.\ S.\ Bach}
diff --git a/input/standchen-16.tex b/input/standchen-16.tex
index b30bb00318..7f7ab47f17 100644
--- a/input/standchen-16.tex
+++ b/input/standchen-16.tex
@@ -9,6 +9,7 @@
 %\pagestyle{empty}
 \begin{document}
 \input lilyponddefs
+\musixsixteendefs
 \input titledefs
 \def\interscoreline{\vskip3mm}
 \title{St\"andchen\normalsize\\[2ex](Serenade)}
diff --git a/input/standchen-20.tex b/input/standchen-20.tex
index 9870b620ea..b38054c5ab 100644
--- a/input/standchen-20.tex
+++ b/input/standchen-20.tex
@@ -9,6 +9,7 @@
 \pagestyle{empty}
 \begin{document}
 \input lilyponddefs
+\musixtwentydefs
 \input titledefs
 \def\interscoreline{\vskip3mm}
 \title{St\"andchen\normalsize\\[2ex](Serenade)}
diff --git a/lily/VERSION b/lily/VERSION
index dc8420e3e3..c9923f9d22 100644
--- a/lily/VERSION
+++ b/lily/VERSION
@@ -1,6 +1,6 @@
 MAJOR_VERSION = 0
 MINOR_VERSION = 1
-PATCH_LEVEL = 19
+PATCH_LEVEL = 20
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
 
diff --git a/lily/rest.cc b/lily/rest.cc
index e11eef1489..6dc7dab858 100644
--- a/lily/rest.cc
+++ b/lily/rest.cc
@@ -36,6 +36,8 @@ Rest::brew_molecule_p () const
 {
   int staff_size_i_ =8;
   bool streepjes_b = (position_i_<-1) || (position_i_ > staff_size_i_+1);
+  if  (balltype_i_ < 0 || balltype_i_ > 1)
+    streepjes_b = false;
   
   Atom s(paper ()->lookup_l()->rest (balltype_i_, streepjes_b));
   Molecule * m = new Molecule ( Atom (s));
diff --git a/lily/script.cc b/lily/script.cc
index 073fc7cd93..df80dabd37 100644
--- a/lily/script.cc
+++ b/lily/script.cc
@@ -99,9 +99,11 @@ Molecule*
 Script::brew_molecule_p() const
 {
   Real dy = paper()->internote_f ();
+  Real dx = paper()->note_width()/2;
   
   Molecule*out = new Molecule (specs_l_->get_atom (paper(), dir_));
   out->translate (dy * pos_i_, Y_AXIS);
+  out->translate (dx, X_AXIS);	// FIXME! ugh
   return out;
 }
 
diff --git a/lily/stem.cc b/lily/stem.cc
index 6ddb44f685..462567a47e 100644
--- a/lily/stem.cc
+++ b/lily/stem.cc
@@ -320,7 +320,7 @@ Stem::abbrev_mol () const
 }
 
 Molecule*
- Stem::brew_molecule_p () const 
+Stem::brew_molecule_p () const 
 {
   Molecule *mol_p =new Molecule;
   
@@ -361,9 +361,10 @@ Stem::note_delta_f () const
   Real r=0;
   if (head_l_arr_.size())
     {
-      r += head_l_arr_[0]->width ().length() * (stem_xdir_+1.0)/2.0;
-      if (stem_xdir_ == RIGHT)
-	r -= paper ()->rule_thickness ();
+      Interval head_wid(0,  head_l_arr_[0]->width ().length ());
+      Real rule_thick(paper ()->rule_thickness ());
+      Interval stem_wid(-rule_thick/2, rule_thick/2);
+      r = head_wid[stem_xdir_] - stem_wid[stem_xdir_];
     }
   return r;
 }
diff --git a/make/lelievijver.lsm b/make/lelievijver.lsm
index b4d5b465be..ad7e8f6372 100644
--- a/make/lelievijver.lsm
+++ b/make/lelievijver.lsm
@@ -1,7 +1,7 @@
 Begin3
 Titel: LilyPond
-Versie: 0.1.19.jcn2
-Inschrijf datum: 07OCT97
+Versie: 0.1.20
+Inschrijf datum: 08OCT97
 Beschrijving: LilyPond is de muziek typesetter van het GNU Project.  
 		Het programma genereert muziek in zichtbare of 
 		hoorbare vorm uit uit een muzikale definitie file: 
@@ -16,8 +16,8 @@ Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
 	jan@digicash.com (Jan Nieuwenhuizen)
 Onderhouden door: hanwen@stack.nl (Han-Wen Nienhuys)
 Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
-	395k lilypond-0.1.19.jcn2.tar.gz 
+	395k lilypond-0.1.20.tar.gz 
 Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/
-	395k lilypond-0.1.19.jcn2.tar.gz 
+	395k lilypond-0.1.20.tar.gz 
 Copi"eer politie: GPL
 End
diff --git a/make/lilypond.lsm b/make/lilypond.lsm
index fbffa124b8..176eb4fecc 100644
--- a/make/lilypond.lsm
+++ b/make/lilypond.lsm
@@ -1,21 +1,21 @@
 Begin3
 Title: LilyPond
-Version: 0.1.19
-Entered-date: 07OCT97
-Description: 	LilyPond is the GNU Project music typesetter. This
-		program converts music definition files into
-		visual or auditive output: it can typeset formatted
-		sheet music to a TeX file and and (mechanical)
-		performances to MIDI files. Features include multiple
-		staffs, meters, clefs, keys, lyrics, versatile
-		input-language, cadenzas beams, slurs, triplets.
+Version: 0.1.20
+Entered-date: 08OCT97
+Description: LilyPond is the GNU Project music typesetter.  The program
+		generates visual or auditive output from a music 
+		definition file: it can typeset formatted sheet music 
+		to a TeX file and play (mechanical) performances to a 
+		MIDI file.  Features include multiple staffs, meters, 
+		clefs, keys, lyrics, versatile input-language, 
+		cadenzas, beams, slurs, triplets.
 Keywords: music typesetting midi notation
 Author: hanwen@stack.nl (Han-Wen Nienhuys)
 	jan@digicash.com (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps
-	395k lilypond-0.1.19.tar.gz 
+	395k lilypond-0.1.20.tar.gz 
 Original-site: pcnov095.win.tue.nl /pub/lilypond/
-	395k lilypond-0.1.19.tar.gz 
+	395k lilypond-0.1.20.tar.gz 
 Copying-policy: GPL
 End
diff --git a/make/lilypond.spec b/make/lilypond.spec
index e5695f922e..7eaca4df99 100644
--- a/make/lilypond.spec
+++ b/make/lilypond.spec
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 0.1.19
+Version: 0.1.20
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.1.19.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.1.20.tar.gz
 Summary: A preprocessor to make TeX typeset music.
 URL: http://www.stack.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@stack.nl>
diff --git a/mf/TODO b/mf/TODO
index 111de76aaf..a13e94503a 100644
--- a/mf/TODO
+++ b/mf/TODO
@@ -1,4 +1,5 @@
 
+	- design macro for penstroke with rounded endings
 	- y-refpoint for rests should be the 4th staffline (gclef: b')
 	- more symbols
 	  * flags
@@ -7,8 +8,9 @@
 	    - {up, down}bow
 	    - toe/heel
 	    - piano pedals,
-	    - braces.
-	    - trills
+	  * braces.
+	  * trills
+	  * maxima notehead
 	  * coda signs.
 	  * 0 - 9
 
@@ -17,5 +19,6 @@
 	- lilyrules.mf for different rules (lines) ?
 	- check out Adobe Sonata/Petrucci font layout.  They are the
 standard for Music fonts
-	- hack up GS to do round pixels iso. square pixels.
+	- hack up GS to do round pixels iso. square pixels.  (Printers
+don't do square pixels.)
 
diff --git a/mf/autometric.mf b/mf/autometric.mf
index 6cffec3caa..9912d70d59 100644
--- a/mf/autometric.mf
+++ b/mf/autometric.mf
@@ -1,9 +1,13 @@
-% autometric.mf
-% part of LilyPond's pretty-but-neat music font
+% 
+% autometric.mf -- administrative MF routines
+% 
+% source file of the Feta (Font-En-Tja) pretty-but-neat music font
+% 
+% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
 % 
 % these macros help create ascii logging output
 % to automate generation of lily tables and tex backend
-% parsed by the mf-to-table script
+% The output should be parsed by the mf-to-table script
 
 
 
@@ -24,12 +28,14 @@ def fet_endfont(expr name) =
 def fet_begingroup(expr name) =
 	message "@{group:"&name&"@}";
 	message "";
-	enddef;
+	begingroup
+enddef;
 
 def fet_endgroup(expr name) =
+	endgroup;
 	message "@{puorg:"&name&"@}";
 	message "";
-	enddef;
+enddef;
 
 def autometric_output_char=
 	message "@{char:"&charnamestr&":"&decimal charcode&":"&decimal charbp&":"&decimal charwd&":"&decimal chardp&":"&decimal charht&":"&idstr&":"&texstr&"@}";
diff --git a/mf/bolletjes.mf b/mf/bolletjes.mf
deleted file mode 100644
index c41f5d0d52..0000000000
--- a/mf/bolletjes.mf
+++ /dev/null
@@ -1,174 +0,0 @@
-% bolletjes.mf
-% part of LilyPond's pretty-but-neat music font
-
-% most beautiful noteheads are pronounced, not circular, 
-% and not even symmetric.
-% These examples are inspired by [Wanske] [see literature list]
-
-%noteheight#:=interline#;
-
-% even more pronounced (almost overdone), just like the original
-noteheight#:=interline#+1.5stafflinethickness#;
-
-
-% setup user vars
-def setup_notehead_vars =
-	save a_b,err_y_a,tilt,superness;
-	save ai_a,ai_bi,err_y_ai,err_x_bi,inner_tilt,inner_superness;
-	save b_h,a_w;
-	enddef;
-
-% setup addititional vars and calc them
-def notehead_calc =
-	save a,beta,ai,bi, ht, wd;
-	ht# =noteheight#;
-	2beta#=ht#*b_h;
-	a# = beta#*a_b;
-	wd# = 2a# / a_w;
-	ai# = a# * ai_a;
-	bi# = ai#/ai_bi;
-	define_pixels(a,beta);
-	define_pixels(ai,bi);
-	set_char_box(0, wd#, .5 ht#, .5 ht#);
-	enddef;
-
-
-% draw the outer and inner ellipse.
-def notehead_draw =
-	path black,white;
-	black=distorted_ellipse(a,beta,a*err_y_a,0,superness);
-	white=distorted_ellipse(ai,bi,ai*err_y_ai,bi*err_x_bi,inner_superness);
-if test>1: %fixme
-		save x;
-		x1=-x3=a; x2=x4=0; y1=y3=0; y2=-y4=b;
-		penlabels(1,2,3,4);
-		test_grid;
-else:
-		black:=black rotated tilt;
-		black:=black shifted (w/2,0);
-		white:=white rotated inner_tilt;
-		white:=white shifted (w/2,0);
-fi
-		fill black;
-		unfill white;
-
-		
-	enddef;
-
-
-fet_begingroup("balls");
-
-% whole note
-% Wanske, p.38
-fet_beginchar("Whole notehead", "0", "wholeball")
-	setup_notehead_vars;
-	
-	a_b:=1.80;
-	err_y_a:=0; % no slant
-	tilt:=0;
-	superness:=0.707;
-	ai_a:=0.508;
-	% ai_bi:=1.23;
-	ai_bi:=1.30; % jcn
-	% err_y_ai:=0.0938;
-	% err_x_bi:=0;
-	err_y_ai:=0;
-	err_x_bi:=0.115;
-	% inner_tilt:=135;
-	inner_tilt:=125; % jcn
-	% inner_superness:=0.69;
-	inner_superness:=0.68; % jcn
-	b_h:=1; %no rotate-> no height correction
-	a_w:=1; % no rotate-> no width correction
-
-	notehead_calc;
-	notehead_draw;
-fet_endchar;
-
-
-% half note
-% Wanske, p.39
-fet_beginchar("Half notehead", "1", 
-	"halfball")
-	setup_notehead_vars;
-		% a_b:=1.49; % after text
-	a_b:=1.50; % after drawing
-	err_y_a:=0.157;
-	tilt:=34;
-	% superness:=0.66;
-	superness:=0.67; % jcn
-	% ai_a:=0.863;
-	ai_a:=0.850; % jcn
-	% ai_bi:=3.14;
-	ai_bi:=3.30; % jcn
-	err_y_ai:=0;
-	err_x_bi:=-0.12;
-	inner_tilt:=tilt;
-	inner_superness:=0.80;
-	b_h:=0.935;
-	a_w:=1.12;
-
-	notehead_calc;
-	notehead_draw;
-fet_endchar;
-
-
-% quarter note
-% Wanske p.38
-fet_beginchar("Quart notehead", "2", "quartball")
-	setup_notehead_vars;
-	% a_b:=1.57; % after text
-	a_b:=1.54; % after drawing
-	err_y_a:=0.044;
-	tilt:=32;
-	superness:=0.707;
-	ai_a:=0;
-	ai_bi:=1;
-	err_y_ai:=0;
-	err_x_bi:=0;
-	inner_tilt:=0;
-	inner_superness:=0.707;
-	b_h:=0.85;
-	a_w:=1.09;
-
-	notehead_calc;
-	notehead_draw;
-fet_endchar;
-
-
-
-% from MO*gen.mf; (pass the barfbag?)
-def add_mirror (expr pone, ptwo) =
-  addto currentpicture also currentpicture
-        reflectedabout (round(pone), round(ptwo))
-enddef;
-
-def fill_square (expr xwidth, ywidth, zshift) =
-  fill unitsquare xscaled xwidth yscaled ywidth shifted zshift
-enddef;
-
-% ugh
-nhh#:=interline#;
-nhw#:=6/5interline#;
-define_pixels(nhh,nhw);
-
-fet_beginchar("Brevis notehead","-1","breveball"); 
-	set_char_box(0, 2interline#,.5 interline#, .5interline#);
-	fill_square (5/4nhw, .25nhh, (0,.25nhh));
-	add_mirror (origin, right);
-	x1=x2=0; x3=x4=5/4nhw; y1=-y2=y3=-y4=.7nhh;
-	pickup pencircle scaled stafflinethickness;
-	draw z1--z2; draw z3--z4;
- 	push_picture(currentpicture);
-fet_endchar;
-
-fet_beginchar("Longa notehead","-2","longaball");
-	set_char_box(0, 2 interline#,.5interline#, .5interline# );
-	currentpicture := pop_picture;
-	pickup pencircle scaled stafflinethickness;
-	draw (5/4nhw,-.7nhh)--(5/4nhw,-1.7nhh);
-fet_endchar;
-
-% fet_endgroup("noteheads");
-fet_endgroup("balls");
-
diff --git a/mf/dimen.tex b/mf/dimen.tex
index 78fc5369af..9d809332d7 100644
--- a/mf/dimen.tex
+++ b/mf/dimen.tex
@@ -7,7 +7,8 @@
 \font\vet=vette-beams16
 \font\slurs=xslhd16
 \font\specfont=musixspx
-\def\thefont{\slurs}
+\font\egler=opus16
+\def\thefont{\egler}
 %\def\thefont{\specfont}
 
 \def\mb#1{{\thefont\char#1}}
diff --git a/mf/eindelijk.mf b/mf/eindelijk.mf
deleted file mode 100644
index 362ed9ab12..0000000000
--- a/mf/eindelijk.mf
+++ /dev/null
@@ -1,215 +0,0 @@
-% eindelijk.mf
-% LilyPond's own rest(s)
-
-% todo breve/longa rests
-
-
-fet_begingroup("rests");
-
-begingroup
-
-med#:=1/33designsize;
-thick#:=1/16designsize;
-define_blacker_pixels(med,thick);
-pen med_pen;
-med_pen:= pencircle scaled med;
-
-rthin:=1/8interline;
-% rthick:=2rthin;
-rthick:=2thick+rthin;
-
-def shift_pic (expr pone, ptwo) =
-  currentpicture:=currentpicture shifted (round(pone),round(ptwo))
-enddef;
-
-% stuff for     8th,16th etc rests
-%
-save stem, ball_crook_stem, ball_crook_balldiam, flare;
-
-define_pixels(stem,flare);
-% stem#:=1/8interline#;
-stem# = 1/5interline#;
-ball_crook_stem = stem;
-ball_crook_balldiam =flare;
-flare# = 2/3interline#;
-
-save block_rest_y, block_rest_x;
-
-block_rest_y# = 1/2 interline#;
-block_rest_x# = 3 block_rest_y#;
-
-define_pixels(block_rest_y, block_rest_x);
-
-def block_rest=
-	pickup pencircle scaled blot_diameter;
-
-	bot y1 = 0;
-	top y2 = block_rest_y;
-	y3 = y2;
-	y4 = y1;
-
-	rt x1 = block_rest_x;
-	x2 = x1;
-	lft x3 = 0;
-	x4 = x3;
-	save p;
-	path p;
-	p:=z1 -- z2 -- z3 -- z4 -- cycle;
-	draw_rounded_path(p, blot_diameter);
-enddef;
-
-fet_beginchar( "whole rest", "0", "wholerest");
-set_char_box(0, block_rest_x#, -block_rest_y#, 2 block_rest_y# );
-	block_rest;
-	currentpicture := currentpicture shifted (0,block_rest_y);
-fet_endchar;
-
-fet_beginchar("half rest", "1", "halfrest");
-	set_char_box(0, block_rest_x#, 0, block_rest_y#);
-	block_rest;
-fet_endchar;
-
-
-%
-% should use ledgerline thickness?
-%
-fet_beginchar( "whole rest (outside staff)", "0o", "outsidewholerest");
-	set_char_box(block_rest_y#, block_rest_x# + block_rest_y#, -block_rest_y#, 2 block_rest_y# );
-	block_rest;
-	currentpicture := currentpicture shifted (0,block_rest_y);
-	pickup pencircle scaled stafflinethickness;
-	draw (-block_rest_y, interline) .. (block_rest_x + block_rest_y, interline);
-fet_endchar;
-
-fet_beginchar("half rest (outside staff)", "1o", "outsidehalfrest");
-	set_char_box(block_rest_y#, block_rest_x#+ block_rest_y#, 0, block_rest_y#);
-	block_rest;
-	pickup pencircle scaled stafflinethickness;
-	draw (-block_rest_y,0) .. (block_rest_x + block_rest_y,0);
-fet_endchar;
-
-def rest_crook(expr a, w) =
-	balled_crook(a, w, ball_crook_balldiam, ball_crook_stem)
-enddef;
-
-fet_beginchar("Quarter rest","2","quartrest");
-	alpha:=-50;
-	penpos1(rthin,alpha+90);
-	penpos2(5/4rthick,alpha);
-	penpos4(5/4rthick,alpha);
-	penpos3(3/4rthick,alpha);
-	penpos6(rthin,alpha-20);
-%	penpos6(rthick,alpha-20);
-%	penpos7(4/3thick,alpha);
-	penpos7(5/8rthick,alpha);
-	penpos8(rthin,-10);
-	y1l=7/2interline; x1l=1/3interline;
-	z2r=z1+(interline*right) rotated alpha;
-	z3=1/2[z2,z4];
-	x4=3/8interline; y4=2interline;
-	z6=z4l+(5/4interline*right) rotated alpha;
-%	x7l=x4l; y7r=y6l;
-	x7l=x4l; y7l=y4r;
-	x8=2/5interline; y8= 3/4 interline;
-	z5=z6r shifted (sqrt(2)*rthin/4,sqrt(2)*rthin/4);
-
-	pickup penrazor scaled rthin rotated 45;
-	draw z1--z2r; 
-	draw z4l--z5;
-	penstroke z2e..z3e..z4e;
-	penstroke z6e..tension1.4..z7e..tension1.4..z8e;
-	penlabels(1,2,3,4,5,6,7,8);
-	set_char_box(0, interline#, -3/4 interline#, 7/2 interline#);
-	fet_endchar;
-
-fet_beginchar("8th rest","3","eighthrest");
-	set_char_box(0, 4/3interline#,-interline#, 8/3interline#+2stafflinethickness#);
-	save x,y, ht;
-	ht = h + d;
-	x1=w-stem/6; y1=ht-flare/4;
-	rest_crook (z1,w-stem/6);
-	z2-z1=whatever*dir70;
-	y2=stem/2;
-	brush (z1,stem/3,z2,stem);
-	% ugh
-	currentpicture:=currentpicture shifted (0,interline);
-%	currentpicture:=currentpicture shifted (0,interline+2stafflinethickness);
-	fet_endchar;
-
-fet_beginchar("16th rest","4","sixteenthrest");
-	set_char_box(0,4/3interline#,0, 5/3interline#+interline#+2stafflinethickness#);
-	save x,y;
-	x1=w-stem/6; y1=h-flare/4;
-	z2-z1=whatever*dir74;
-	y2=stem/2;
-	brush (z1,stem/2,z2,stem);
-	rest_crook (z1,7/8w);
-	z3-z1=whatever*dir74;
-	y3=y1-interline;
-	rest_crook (z3,7/8w);
-%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
-	fet_endchar;
-
-fet_beginchar("32th rest","5","thirtysecondrest");
-	set_char_box(0,4/3interline#,0, 5/3interline#+2interline#+2stafflinethickness#);
-	save x,y;
-	x1=w-stem/6; y1=h-flare/4;
-	z2-z1=whatever*dir76;
-	y2=stem/2;
-	brush (z1,stem/2,z2,stem);
-	rest_crook (z1,7/8w);
-	z3-z1=whatever*dir76;
-	y3=y1-interline;
-	rest_crook (z3,7/8w);
-	z4-z1=whatever*dir76;
-	y4=y1-2interline;
-	rest_crook (z4,7/8w);
-%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
-	fet_endchar;
-
-fet_beginchar("64th rest","6","sixtyfourthrest");
-	set_char_box(0,4/3interline#,0, 5/3interline#+3interline#+2stafflinethickness#);
-	save x,y;
-	x1=w-stem/6; y1=h-flare/4;
-	z2-z1=whatever*dir78;
-	y2=stem/2;
-	brush (z1,stem/2,z2,stem);
-	rest_crook (z1,7/8w);
-	z3-z1=whatever*dir78;
-	y3=y1-interline;
-	rest_crook (z3,7/8w);
-	z4-z1=whatever*dir78;
-	y4=y1-2interline;
-	rest_crook (z4,7/8w);
-	z5-z1=whatever*dir78;
-	y5=y1-3interline;
-	rest_crook (z5,7/8w);
-%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
-	fet_endchar;
-
-fet_beginchar("128th rest","7","hundredtwentyeighthrest"); 
-	set_char_box(0, 4/3interline#, 0, 5/3interline#+4interline#+2stafflinethickness#);
-	save x,y;
-	x1=w-stem/6; y1=h-flare/4;
-	z2-z1=whatever*dir80;
-	y2=stem/2;
-	brush (z1,stem/2,z2,stem);
-	rest_crook (z1,7/8w);
-	z3-z1=whatever*dir80;
-	y3=y1-interline;
-	rest_crook (z3,7/8w);
-	z4-z1=whatever*dir80;
-	y4=y1-2interline;
-	rest_crook (z4,7/8w);
-	z5-z1=whatever*dir80;
-	y5=y1-3interline;
-	rest_crook (z5,7/8w);
-	z6-z1=whatever*dir80;
-	y6=y1-4interline;
-	rest_crook (z6,7/8w);
-%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
-	fet_endchar;
-
-endgroup;
-fet_endgroup("rests");
-
diff --git a/mf/feta-banier.mf b/mf/feta-banier.mf
new file mode 100644
index 0000000000..f845fac0cc
--- /dev/null
+++ b/mf/feta-banier.mf
@@ -0,0 +1,84 @@
+% flags 
+%
+
+
+fet_begingroup("floogbars")
+
+save flag_angle, flare;
+save hip_thickness, hip_depth, hip_width;
+save foot_thickness, foot_depth, foot_width;
+
+flag_angle = 32;
+
+hip_thickness# = stafflinethickness#;
+foot_thickness# = blot_diameter#;
+flare# = 1.0 interline#;
+
+hip_depth# = 15/7 interline#; 
+hip_width# = 8/7 interline# + hip_thickness# /2 + stemthickness#/2;
+
+foot_depth# = flare# + 15/7 interline#;
+foot_width# = .885 hip_width#;
+
+
+define_pixels(flare, 
+	hip_depth, hip_width, hip_thickness,
+	foot_depth, foot_width, foot_thickness
+);
+
+%treq;
+
+
+%
+% Inspired by Adobe Sonata,
+% for example, see POSTSCRIPT Language -- program design, 
+% page 119
+%
+def draw_eight_flag =
+
+
+	penpos0(stemthickness, 0);
+	penpos1(flare, 90);
+	penpos2(hip_thickness, 0);
+	penpos3(foot_thickness, 0) ;
+	penpos4(stemthickness, 0);
+
+	z0r = z1r;
+	z0  = (0,0);
+	z2 = (hip_width, -hip_depth);
+	z3 = (foot_width, -foot_depth);
+	z4r = z1l;
+
+	save bot_dir, bot_path;
+	pair bot_dir;
+	path bot_path;
+	bot_path := z2{down} .. z3;
+	bot_dir := direction 1 of bot_path;
+
+	fill z1l{dir -flag_angle} .. z2l{down} .. 
+		z3l{bot_dir}  .. z3r{-bot_dir} ..
+		{up}z2r .. {up}z1r .. 
+		z0l{down} -- z4l -- cycle;
+		
+		;
+
+enddef;
+
+
+fet_beginchar("8th Flag (up)", "3u", "eighthflag")
+	set_char_box(stemthickness# /2, hip_width# + hip_thickness#/2, 
+		foot_depth# + foot_thickness#/2, stemthickness#/2)
+
+	draw_eight_flag;	
+	penlabels(0, 1, 2, 3, 4);
+fet_endchar;
+
+fet_beginchar("8th Flag (down)", "3d", "deighthflag")
+	set_char_box(stemthickness# /2, hip_width# + hip_thickness#/2, 
+		foot_depth# + foot_thickness#/2, stemthickness#/2)
+
+	draw_eight_flag;
+	y_mirror_char;
+fet_endchar;
+
+fet_endgroup("floogbars")
diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf
new file mode 100644
index 0000000000..cef0590903
--- /dev/null
+++ b/mf/feta-bolletjes.mf
@@ -0,0 +1,201 @@
+% bolletjes.mf
+% part of LilyPond's pretty-but-neat music font
+
+% most beautiful noteheads are pronounced, not circular, 
+% and not even symmetric.
+% These examples are inspired by [Wanske] [see literature list]
+
+
+fet_begingroup("balls");
+
+noteheight#:=interline#+ (1 + overdone_heads) *stafflinethickness#;
+
+define_pixels(noteheight);
+
+
+
+def draw_brevis =
+	save beamheight, head_width;
+	save holeheight, stem_width;
+	save serif_size;
+
+	head_width# = 2 interline#;
+	holeheight = 3 stafflinethickness;
+	stem_width = 1.2 stafflinethickness;
+
+
+	define_pixels(head_width);
+	set_char_box(0, head_width#, noteheight#/2, noteheight#/2);
+	
+	2 beamheight + holeheight = noteheight;
+	serif_size = (holeheight - stafflinethickness)/2;
+
+	penpos1(stem_width, 0);
+	penpos2(stem_width, 0);
+	penpos3(beamheight, 90);
+	penpos4(beamheight, 90);
+	penpos5(stem_width, 180);
+
+	z1l = (0, 0);
+	z2l = (0, -stafflinethickness/2);
+	z3r = z2r + serif_size *(1,-1);
+	y4r = y3r;
+	x4r = head_width/2;
+	z5l = z3l + serif_size * (-1,-1);
+
+	penlabels(1,2,3,4, 5);
+	fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right}
+		-- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle;
+
+	addto currentpicture also currentpicture yscaled -1;
+	addto currentpicture also currentpicture reflectedabout(z4r, z4l);
+enddef;
+
+fet_beginchar("Brevis notehead", "-1", "brevisball")
+	draw_brevis;
+fet_endchar;
+
+
+%
+% Some sources (eg Musix/OpusTeX think that the appendage should be on
+% the right, my only other ref [Willemze], shows an appendage to the left
+%
+fet_beginchar("Longa notehead", "-2", "longaball");
+	draw_brevis;
+	save theta;
+	z7 = z5;
+	z6 - z7 = (-stem_width/2, -interline);
+	theta = angle(z6-z7)+ 90;
+	penpos7(stafflinethickness, theta);
+	penpos6(stem_width, theta);
+	
+	fill z7r .. z6r{z6-z7} .. {z7-z6} z6l -- z7l -- cycle;
+	penlabels(6,7);
+fet_endchar;
+
+% setup user vars
+def setup_notehead_vars =
+	save a_b,err_y_a,tilt,superness;
+	save ai_a,ai_bi,err_y_ai,err_x_bi,inner_tilt,inner_superness;
+	save b_h,a_w;
+	enddef;
+
+% setup addititional vars and calc them
+def notehead_calc =
+	save a,beta,ai,bi, ht, wd;
+	ht# =noteheight#;
+	2beta#=ht#*b_h;
+	a# = beta#*a_b;
+	wd# = 2a# / a_w;
+	ai# = a# * ai_a;
+	bi# = ai#/ai_bi;
+	define_pixels(a,beta);
+	define_pixels(ai,bi);
+	set_char_box(0, wd#, .5 ht#, .5 ht#);
+	enddef;
+
+
+% draw the outer and inner ellipse.
+def notehead_draw =
+	path black,white;
+	black=distorted_ellipse(a,beta,a*err_y_a,0,superness);
+	white=distorted_ellipse(ai,bi,ai*err_y_ai,bi*err_x_bi,inner_superness);
+if test>1: %fixme
+		save x;
+		x1=-x3=a; x2=x4=0; y1=y3=0; y2=-y4=b;
+		penlabels(1,2,3,4);
+		test_grid;
+else:
+		black:=black rotated tilt;
+		black:=black shifted (w/2,0);
+		white:=white rotated inner_tilt;
+		white:=white shifted (w/2,0);
+fi
+		fill black;
+		unfill white;
+
+		
+	enddef;
+
+% whole note
+% Wanske, p.38
+fet_beginchar("Whole notehead", "0", "wholeball")
+	setup_notehead_vars;
+	
+	a_b:=1.80;
+	err_y_a:=0; % no slant
+	tilt:=0;
+	superness:=0.707;
+	ai_a:=0.508;
+	% ai_bi:=1.23;
+	ai_bi:=1.30; % jcn
+	% err_y_ai:=0.0938;
+	% err_x_bi:=0;
+	err_y_ai:=0;
+	err_x_bi:=0.115;
+	% inner_tilt:=135;
+	inner_tilt:=125; % jcn
+	% inner_superness:=0.69;
+	inner_superness:=0.68; % jcn
+	b_h:=1; %no rotate-> no height correction
+	a_w:=1; % no rotate-> no width correction
+
+	notehead_calc;
+	notehead_draw;
+fet_endchar;
+
+
+% half note
+% Wanske, p.39
+fet_beginchar("Half notehead", "1", 
+	"halfball")
+	setup_notehead_vars;
+		% a_b:=1.49; % after text
+	a_b:=1.50; % after drawing
+	err_y_a:=0.157;
+	tilt:=34;
+	% superness:=0.66;
+	superness:=0.67; % jcn
+	% ai_a:=0.863;
+	ai_a:=0.850; % jcn
+	% ai_bi:=3.14;
+	ai_bi:=3.30; % jcn
+	err_y_ai:=0;
+	err_x_bi:=-0.12;
+	inner_tilt:=tilt;
+	inner_superness:=0.80;
+	b_h:=0.935;
+	a_w:=1.12;
+
+	notehead_calc;
+	notehead_draw;
+fet_endchar;
+
+
+% quarter note
+% Wanske p.38
+fet_beginchar("Quart notehead", "2", "quartball")
+	setup_notehead_vars;
+	% a_b:=1.57; % after text
+	a_b:=1.54; % after drawing
+	err_y_a:=0.044;
+	tilt:=32;
+	superness:=0.707;
+	ai_a:=0;
+	ai_bi:=1;
+	err_y_ai:=0;
+	err_x_bi:=0;
+	inner_tilt:=0;
+	inner_superness:=0.707;
+	b_h:=0.85;
+	a_w:=1.09;
+
+	notehead_calc;
+	notehead_draw;
+fet_endchar;
+
+
+
+
+fet_endgroup("balls");
+
diff --git a/mf/feta-eindelijk.mf b/mf/feta-eindelijk.mf
new file mode 100644
index 0000000000..5e9c67b8c6
--- /dev/null
+++ b/mf/feta-eindelijk.mf
@@ -0,0 +1,218 @@
+% eindelijk.mf
+% LilyPond's own rest(s)
+
+% todo breve/longa rests
+
+
+fet_begingroup("rests");
+
+begingroup
+
+med#:=1/33designsize;
+thick#:=1/16designsize;
+define_blacker_pixels(med,thick);
+pen med_pen;
+med_pen:= pencircle scaled med;
+
+rthin:=1/8interline;
+% rthick:=2rthin;
+rthick:=2thick+rthin;
+
+def shift_pic (expr pone, ptwo) =
+  currentpicture:=currentpicture shifted (round(pone),round(ptwo))
+enddef;
+
+% stuff for     8th,16th etc rests
+%
+save stem, ball_crook_stem, ball_crook_balldiam, flare;
+
+define_pixels(stem,flare);
+% stem#:=1/8interline#;
+stem# = 1/5interline#;
+ball_crook_stem = stem;
+ball_crook_balldiam =flare;
+flare# = 2/3interline#;
+
+save block_rest_y, block_rest_x;
+
+block_rest_y# = 5/8 interline#;
+block_rest_x# = 3/2 interline#;
+
+define_pixels(block_rest_y, block_rest_x);
+
+def block_rest=
+	pickup pencircle scaled blot_diameter;
+
+	bot y1 = 0;
+	top y2 = block_rest_y;
+	y3 = y2;
+	y4 = y1;
+
+	rt x1 = block_rest_x;
+	x2 = x1;
+	lft x3 = 0;
+	x4 = x3;
+	save p;
+	path p;
+	p:=z1 -- z2 -- z3 -- z4 -- cycle;
+	draw_rounded_path(p, blot_diameter);
+enddef;
+
+fet_beginchar( "whole rest", "0", "wholerest");
+set_char_box(0, block_rest_x#, -interline# + block_rest_y#,  interline# );
+	block_rest;
+	currentpicture := currentpicture shifted (0,interline - block_rest_y);
+fet_endchar;
+
+fet_beginchar("half rest", "1", "halfrest");
+	set_char_box(0, block_rest_x#, 0, block_rest_y#);
+	block_rest;
+fet_endchar;
+
+
+%
+% should use ledgerline thickness?
+%
+fet_beginchar( "whole rest (outside staff)", "0o", "outsidewholerest");
+	set_char_box(block_rest_y#, block_rest_x# + block_rest_y#, 
+		-interline# + block_rest_y#, interline#);
+	block_rest;
+	currentpicture := currentpicture shifted (0,interline - block_rest_y);
+	pickup pencircle scaled ledgerlinethickness;
+	draw (-block_rest_y, interline) 
+             .. (block_rest_x + block_rest_y, interline);
+fet_endchar;
+
+fet_beginchar("half rest (outside staff)", "1o", "outsidehalfrest");
+	set_char_box(block_rest_y#, block_rest_x#+ block_rest_y#, 
+		0, block_rest_y#);
+	block_rest;
+	pickup pencircle scaled ledgerlinethickness;
+	draw (-block_rest_y,0) .. (block_rest_x + block_rest_y,0);
+fet_endchar;
+
+def rest_crook(expr a, w) =
+	balled_crook(a, w, ball_crook_balldiam, ball_crook_stem)
+enddef;
+
+fet_beginchar("Quarter rest","2","quartrest");
+	alpha:=-50;
+	penpos1(rthin,alpha+90);
+	penpos2(5/4rthick,alpha);
+	penpos4(5/4rthick,alpha);
+	penpos3(3/4rthick,alpha);
+	penpos6(rthin,alpha-20);
+%	penpos6(rthick,alpha-20);
+%	penpos7(4/3thick,alpha);
+	penpos7(5/8rthick,alpha);
+	penpos8(rthin,-10);
+	y1l=7/2interline; x1l=1/3interline;
+	z2r=z1+(interline*right) rotated alpha;
+	z3=1/2[z2,z4];
+	x4=3/8interline; y4=2interline;
+	z6=z4l+(5/4interline*right) rotated alpha;
+%	x7l=x4l; y7r=y6l;
+	x7l=x4l; y7l=y4r;
+	x8=2/5interline; y8= 3/4 interline;
+	z5=z6r shifted (sqrt(2)*rthin/4,sqrt(2)*rthin/4);
+
+	pickup penrazor scaled rthin rotated 45;
+	draw z1--z2r; 
+	draw z4l--z5;
+	penstroke z2e..z3e..z4e;
+	penstroke z6e..tension1.4..z7e..tension1.4..z8e;
+	penlabels(1,2,3,4,5,6,7,8);
+	set_char_box(0, interline#, -3/4 interline#, 7/2 interline#);
+	fet_endchar;
+
+fet_beginchar("8th rest","3","eighthrest");
+	set_char_box(0, 4/3interline#,-interline#, 8/3interline#+2stafflinethickness#);
+	save x,y, ht;
+	ht = h + d;
+	x1=w-stem/6; y1=ht-flare/4;
+	rest_crook (z1,w-stem/6);
+	z2-z1=whatever*dir70;
+	y2=stem/2;
+	brush (z1,stem/3,z2,stem);
+	% ugh
+	currentpicture:=currentpicture shifted (0,interline);
+%	currentpicture:=currentpicture shifted (0,interline+2stafflinethickness);
+	fet_endchar;
+
+fet_beginchar("16th rest","4","sixteenthrest");
+	set_char_box(0,4/3interline#,0, 5/3interline#+interline#+2stafflinethickness#);
+	save x,y;
+	x1=w-stem/6; y1=h-flare/4;
+	z2-z1=whatever*dir74;
+	y2=stem/2;
+	brush (z1,stem/2,z2,stem);
+	rest_crook (z1,7/8w);
+	z3-z1=whatever*dir74;
+	y3=y1-interline;
+	rest_crook (z3,7/8w);
+%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
+	fet_endchar;
+
+fet_beginchar("32th rest","5","thirtysecondrest");
+	set_char_box(0,4/3interline#,0, 5/3interline#+2interline#+2stafflinethickness#);
+	save x,y;
+	x1=w-stem/6; y1=h-flare/4;
+	z2-z1=whatever*dir76;
+	y2=stem/2;
+	brush (z1,stem/2,z2,stem);
+	rest_crook (z1,7/8w);
+	z3-z1=whatever*dir76;
+	y3=y1-interline;
+	rest_crook (z3,7/8w);
+	z4-z1=whatever*dir76;
+	y4=y1-2interline;
+	rest_crook (z4,7/8w);
+%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
+	fet_endchar;
+
+fet_beginchar("64th rest","6","sixtyfourthrest");
+	set_char_box(0,4/3interline#,0, 5/3interline#+3interline#+2stafflinethickness#);
+	save x,y;
+	x1=w-stem/6; y1=h-flare/4;
+	z2-z1=whatever*dir78;
+	y2=stem/2;
+	brush (z1,stem/2,z2,stem);
+	rest_crook (z1,7/8w);
+	z3-z1=whatever*dir78;
+	y3=y1-interline;
+	rest_crook (z3,7/8w);
+	z4-z1=whatever*dir78;
+	y4=y1-2interline;
+	rest_crook (z4,7/8w);
+	z5-z1=whatever*dir78;
+	y5=y1-3interline;
+	rest_crook (z5,7/8w);
+%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
+	fet_endchar;
+
+fet_beginchar("128th rest","7","hundredtwentyeighthrest"); 
+	set_char_box(0, 4/3interline#, 0, 5/3interline#+4interline#+2stafflinethickness#);
+	save x,y;
+	x1=w-stem/6; y1=h-flare/4;
+	z2-z1=whatever*dir80;
+	y2=stem/2;
+	brush (z1,stem/2,z2,stem);
+	rest_crook (z1,7/8w);
+	z3-z1=whatever*dir80;
+	y3=y1-interline;
+	rest_crook (z3,7/8w);
+	z4-z1=whatever*dir80;
+	y4=y1-2interline;
+	rest_crook (z4,7/8w);
+	z5-z1=whatever*dir80;
+	y5=y1-3interline;
+	rest_crook (z5,7/8w);
+	z6-z1=whatever*dir80;
+	y6=y1-4interline;
+	rest_crook (z6,7/8w);
+%	currentpicture:=currentpicture shifted (0,2stafflinethickness);
+	fet_endchar;
+
+endgroup;
+fet_endgroup("rests");
+
diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf
new file mode 100644
index 0000000000..97c2dabc0a
--- /dev/null
+++ b/mf/feta-generic.mf
@@ -0,0 +1,19 @@
+
+input feta-macros;
+
+make_pen_stack;
+make_picture_stack;
+input feta-params;
+
+
+test:=	0;
+if test = 0: 
+	input feta-eindelijk;
+	input feta-toevallig;
+	input feta-puntje;
+	input feta-bolletjes;
+	input feta-schrift;
+	input feta-banier;
+else:
+	input foo;
+fi
diff --git a/mf/feta-macros.mf b/mf/feta-macros.mf
new file mode 100644
index 0000000000..7666427515
--- /dev/null
+++ b/mf/feta-macros.mf
@@ -0,0 +1,143 @@
+%
+% debugging
+%
+def test_grid =
+if test>1:
+	proofrulethickness 1pt#;
+	makegrid(0pt,0pt for i:=-5pt step 1pt until 5pt: ,i endfor)
+		(0pt,0pt for i:=-5pt step 1pt until 5pt: ,i endfor);
+	proofrulethickness .1pt#;
+	makegrid(0pt,0pt for i:=-4.8pt step .2pt until 4.8pt: ,i endfor)
+		(0pt,0pt for i:=-4.8pt step .2pt until 4.8pt: ,i endfor);
+fi
+	enddef;
+
+def treq =
+	tracingequations := tracingonline := 1;
+enddef;
+
+
+%
+% Transforms
+%
+
+def scaledabout(expr point, scale) =
+	shifted -point scaled scale shifted point
+enddef;
+
+%
+% Urgh! Want to do parametric types
+%
+
+def del_picture_stack=
+	save save_picture_stack, picture_stack_idx;
+enddef;
+
+% better versions of Taupin/Egler savepic cmds
+%
+%
+def make_picture_stack = 
+	% override previous stack.
+	del_picture_stack;
+	picture save_picture_stack[];
+	numeric picture_stack_idx;
+	picture_stack_idx := 0;
+	def push_picture(expr p) = 
+		save_picture_stack[picture_stack_idx] := p ;
+		picture_stack_idx := picture_stack_idx + 1;
+	enddef;
+	def pop_picture =  save_picture_stack[decr picture_stack_idx] enddef;
+	def top_picture = save_picture_stack[picture_stack_idx] enddef;
+enddef;
+
+
+% save/restore pens
+% why can't I delete individual pens?
+def make_pen_stack =
+	del_pen_stack;
+	pen save_pen_stack[];
+	numeric pen_stack_idx;
+	pen_stack_idx := 0;
+	def push_pen(expr p) = 
+		save_pen_stack[pen_stack_idx] := p ;
+		pen_stack_idx := pen_stack_idx +1;
+	enddef;
+	def pop_pen =  save_pen_stack[decr pen_stack_idx] enddef;
+	def top_pen = save_pen_stack[pen_stack_idx] enddef;
+enddef;
+def del_pen_stack=
+	save save_pen_stack, pen_stack_idx;
+enddef;
+
+%
+% drawing
+%
+
+% a: x diameter
+% b: y diameter
+% err_x: drift of y axis at top
+% err_y: drift of x axis at right
+def distorted_ellipse(expr a,b,err_y,err_x,super) =
+	superellipse((a,err_x),(-err_y,b),(-a,-err_x),(err_y,-b),super);
+	enddef;
+
+def draw_brush(expr a,w,b,v) =
+	save x,y;
+	z1=a; z2=b;
+	penpos3(w,angle(z2-z1)+90);
+	penpos4(w,angle(z2-z1));
+	penpos5(v,angle(z1-z2)+90);
+	penpos6(v,angle(z1-z2));
+	z3 = z4 = z1;
+	z5 = z6 = z2;
+
+	fill z3r{z3r-z5l}..z4l..{z5r-z3l}z3l..z5r{z5r-z3l}..z6l..{z3r-z5l}z5l..cycle;
+enddef;
+
+def brush(expr a,w,b,v) =
+	begingroup;
+	draw_brush(a,w,b,v);	
+	penlabels(3,4,5,6);
+	endgroup;
+enddef;
+
+def draw_rounded_path(expr p, thick) =
+	push_pen(currentpen);
+	fill p;
+	pickup pencircle scaled thick;
+	draw p;
+	currentpen := pop_pen;
+enddef;
+
+%
+%
+%
+def balled_crook(expr a, w, balldiam, stem) =
+begingroup;
+	save x,y;
+	penpos1(balldiam/2,-90);
+	penpos2(balldiam/2,0);
+	penpos3(balldiam/2,90);
+	penpos4(balldiam/2,180);
+	x4r=xpart a-w; y3r=ypart a+balldiam/4;
+	x1l=x2l=x3l=x4l;
+	y1l=y2l=y3l=y4l;
+	penpos5(stem,250);
+	x5=x4r+9/8balldiam; y5r=y1r;
+	penpos6(stem,260);
+	x6l=xpart a; y6l=ypart a;
+	penstroke z1e..z2e..z3e..z4e..z1e..z5e{right}..z6e;
+	penlabels(1,2,3,4,5,6);
+endgroup;
+enddef;
+
+def y_mirror_char =
+	currentpicture := currentpicture yscaled -1;
+	set_char_box(charbp, charwd, charht, chardp);
+enddef;
+
+
+def xy_mirror_char =
+	currentpicture := currentpicture scaled -1;
+	set_char_box(charwd, charbp, charht, chardp);
+enddef;
diff --git a/mf/feta-params.mf b/mf/feta-params.mf
new file mode 100644
index 0000000000..ea95ec3523
--- /dev/null
+++ b/mf/feta-params.mf
@@ -0,0 +1,35 @@
+
+interline#:=staffsize#/(stafflines-1);
+
+%
+%  [D.K.Roush & J.S.Gourlay] say this should be 0.072
+% We know better
+% generally, the "blackness" of most chars depends on this.
+%
+stafflinethickness#:=0.1 interline#;
+
+stemthickness# := stafflinethickness#;
+ledgerlinethickness# := 1.5 stafflinethickness#;
+
+define_pixels(interline, stemthickness);
+define_pixels(stafflinethickness,ledgerlinethickness);
+
+%
+% Hand-engraved music often has balls extending above and below
+% the lines.  If you like that, modify overdone heads (unit:
+% stafflinethickness)
+%
+
+numeric overdone_heads;
+overdone_heads = 0.0;
+
+% 
+% Because of the engraving/stamping process, no traditional
+% characters have sharp edges and corners
+% The following variable controls the amount of "roundness"
+%
+% this is not a meta variable: it is related to absolute sizes.
+%
+numeric blot_diameter;
+blot_diameter# = .4pt#;
+define_pixels(blot_diameter);
diff --git a/mf/feta-puntje.mf b/mf/feta-puntje.mf
new file mode 100644
index 0000000000..7675befaee
--- /dev/null
+++ b/mf/feta-puntje.mf
@@ -0,0 +1,13 @@
+fet_begingroup("dots");
+
+fet_beginchar("duration dot","dot", "dot")
+	save dot_diam;
+	2 dot_diam# = interline# - stafflinethickness#;
+	define_pixels(dot_diam)
+	pickup pencircle scaled dot_diam;
+	draw (dot_diam/2,0);
+	set_char_box(0, dot_diam#, dot_diam#/2, dot_diam#/2);
+fet_endchar;
+
+
+fet_endgroup("dots");
diff --git a/mf/feta-schrift.mf b/mf/feta-schrift.mf
new file mode 100644
index 0000000000..4600513b99
--- /dev/null
+++ b/mf/feta-schrift.mf
@@ -0,0 +1,329 @@
+%
+% scripts
+%
+
+
+fet_begingroup("foobars")
+
+
+def draw_fermata =
+	save alpha, radius, crook_thinness, crook_fatness, dot_diam;
+	
+	% [Wanske] and some  Baerenreiter editions
+	% suggest ca 80 degrees iso half-circle
+	alpha := 10;
+
+	radius# = 1.5 interline#;
+	crook_thinness# = 1.5stafflinethickness#;
+	crook_fatness# = 4 stafflinethickness#;
+
+	radius# + crook_fatness#/2 = h#;
+	radius# + crook_thinness#/2 = w#;
+	set_char_box(w#, w#, 0, h#);
+	
+	define_pixels(radius, crook_thinness, crook_fatness);
+	dot_diam = 4/3 crook_fatness;
+
+
+	penpos1(crook_thinness, 0);
+	penpos2(crook_fatness, -90);
+	z1 = (-radius,0);
+	z2 = (0, radius);
+
+	fill z1l{dir (-alpha-90)}..{dir (90-alpha)}z1r..
+		{right}z2r -- z2l{left} .. cycle;
+
+	addto currentpicture also 
+		currentpicture xscaled -1;
+
+	pickup pencircle scaled dot_diam;
+	x4 =0;
+	bot y4 = - crook_thinness/2;
+	draw z4;
+enddef;
+
+fet_beginchar("fermata up", "ufermata", "ufermata")
+	draw_fermata;	
+	penlabels(1,2,4);
+fet_endchar;
+
+fet_beginchar("fermata down", "dfermata", "dfermata")
+	draw_fermata;
+	currentpicture:=currentpicture yscaled -1 ;
+	set_char_box(w#, w#, h#, 0);
+	
+fet_endchar;
+
+
+%
+% FIXME: rounded endings
+%
+% `\accent' is TeX reserved.
+fet_beginchar("> accent", "accent", "sforzatoaccent")
+	set_char_box(.9 interline#, .9 interline#, .5 interline#, .5 interline#);
+	save thickness, diminish;
+
+	thickness = 2 stafflinethickness;
+
+	% prevent blobs at crossing lines
+	diminish = .75;
+
+	y1 + thickness/2 = h;
+	x1 = -b;
+	x2 = w;
+	y2 = .25 thickness* diminish;
+
+	z4 = (w,0);
+	x3 =0;
+	z3 = whatever [z1, z4];
+
+	penpos2(thickness*(2 - diminish)/2 , 90);
+	penpos1(thickness, 90);
+	penpos3(thickness, 90);
+
+	penstroke z1e .. z3e .. z2e;
+	penstroke (z1e .. z3e .. z2e) yscaled -1;
+
+	penlabels(1,2,3);
+fet_endchar;
+
+fet_beginchar("staccato dot", "staccato", "staccato")
+	save radius;
+	radius# = 1.25 stafflinethickness#;
+	define_pixels(radius);
+	pickup pencircle scaled 2 radius;
+	draw (0,0);
+	set_char_box(radius#, radius#, radius#, radius#);
+fet_endchar;
+
+def draw_staccatissimo =
+	save radius, height;
+	height# = .8 interline#;
+	radius# = 2 stafflinethickness#;
+	define_pixels(radius, height);
+
+	draw_brush((0,0), blot_diameter, (0, height),2 radius);
+	set_char_box(radius#,radius#, blot_diameter#/2, height# + radius#);
+enddef;
+
+fet_beginchar("staccatissimo/martellato up", "ustaccatissimo", 
+		"ustaccatissimo")
+	draw_staccatissimo;
+fet_endchar;
+
+%
+% FIXEM: scale labels too.
+%
+fet_beginchar("staccatissimo/martellato down", "dstaccatissimo", "dstaccatissimo")
+	draw_staccatissimo;
+	y_mirror_char;
+fet_endchar;
+
+fet_beginchar("portato/single tenuto", "tenuto", "tenuto")
+	save thick;
+	thick# = 1.2 stafflinethickness#;
+	define_pixels(thick);
+
+	set_char_box(.9 interline#, .9 interline#, thick#/2,thick#/2);
+	pickup pencircle scaled thick;
+	lft x1 = -b;
+	rt x2 = w;
+	y1 = y2 = 0;
+	draw z1 .. z2;
+fet_endchar;
+
+
+def draw_marcato = 
+	save fatness, thinness;
+	set_char_box(interline#/2, interline#/2, 0, 1.1 interline#);
+
+	fatness = 3 stafflinethickness;
+	thinness = .8 stafflinethickness;
+	x2 - x1  + blot_diameter = fatness;
+	x2 + thinness/2 = w;
+	
+	y1 = y2;
+	y1 = thinness/2;
+	z2 - z3 = whatever * (charwd, -charht);
+	z1 - z4 = whatever * (charwd, -charht);
+	z3 - z4 = whatever * (charwd, charht);
+	y3 + thinness/2 = h;
+	draw_rounded_path(z1 -- z2 -- z3 -- z4 -- cycle, thinness);
+
+	pickup pencircle scaled thinness;
+	z3 - z5 = whatever* (z3 - z4);
+	bot y5 = 0;
+	draw z3 .. z5;
+enddef;
+
+fet_beginchar("marcato up", "umarcato", "umarcato")
+	draw_marcato;
+	labels(1,2,3,4,5);
+fet_endchar;
+
+
+%
+% The down marcato char (not very much used). 
+% Contrary to what some MF/TeX `gurus' believe
+% it is *point*-symmetric with the "up" version; (at least [Chlapik] 
+% agrees with us)
+%
+fet_beginchar("marcato down", "dmarcato", "dmarcato")
+	draw_marcato;
+	xy_mirror_char;
+fet_endchar;
+ 
+fet_beginchar("open (unstopped)", "open", "ouvert")
+	save thin, height, width, thick;
+	height# = 5/4 width#;
+	height# = 7/8 interline#;
+	thin = 1.2 stafflinethickness;
+	thick =  1.4 thin;
+	set_char_box(width#/2, width#/2, 0, height#);
+	
+	penpos1(thick, 0);
+	penpos2(thin, 90);
+	z1r = (w,h/2);
+	z2r = (0, h);
+	penlabels(1,2);
+	penstroke z1e{up} .. {left}z2e;
+	addto currentpicture also currentpicture xscaled -1;
+	addto currentpicture also currentpicture reflectedabout((w,h/2), (0,h/2));
+fet_endchar;
+
+
+fet_beginchar("plus (stopped)", "stopped", "plusstop")
+	save thick, size;
+	thick = 2 stafflinethickness;
+	size# = 1.1 interline#;
+
+	set_char_box(size#/2, size#/2, size#/2, size#/2);
+	pickup pencircle scaled thick;
+
+	rt x1 = w;
+	y1 = 0;
+	z2 = -z1;
+
+	draw z1 .. z2;
+	draw (z1 .. z2) rotated 90;
+fet_endchar;
+
+%
+% FIXME: blotting 
+%
+fet_beginchar("Upbow", "upbow", "upbow")
+	save ht, wd, thick;
+
+	thick = 1.4 stafflinethickness;
+	wd# = 1.3 interline#;
+	ht# = 3/2 wd#; 
+
+	
+	set_char_box(wd#/2, wd#/2, 0, ht#);
+	pickup pencircle scaled thick;
+
+	x1 = 0;
+	bot y1 = 0;
+	rt x2 =  w;
+	top y2 = h;
+
+	labels(1,2);
+	draw z2 -- z1 -- (z2 xscaled -1);
+fet_endchar;
+
+
+fet_beginchar("Downbow", "downbow", "downbow")
+	save stemthick, beamheight;
+	save wd;
+	define_pixels(wd)
+
+	wd# = 7/4 interline#;
+	stemthick = 1.2 stafflinethickness;
+
+	set_char_box(wd#/2, wd#/2, 0, interline#);
+
+	beamheight = 4/10 h;
+
+
+	pickup pencircle scaled blot_diameter;
+	top y2 - bot y1  = beamheight;
+	top y2 = h;
+	rt x1 = w;
+	x1 = x2;
+	y2 = y3;
+	y1 = y4;
+	x3 = 0;
+	x4 = x3;
+	save p;
+	path p;
+	p := z1 -- z2 -- z3 -- z4 --cycle;
+	draw_rounded_path(p, blot_diameter);
+	pickup pencircle scaled stemthick;
+
+	bot y5 =0;
+	rt x5 = rt x6 = w;
+	y6 = h - beamheight;
+	draw z6 -- z5;
+	labels(1, 2,3,4,5,6);
+	addto currentpicture also currentpicture xscaled -1;
+fet_endchar;
+
+%
+% FIXME the middle part (NW -> SE) may have some more (ok; it is
+% negative: less) slope
+%
+fet_beginchar("Turn","turn","turn")
+	save thin, thick, ball_diam, darkness;
+	save wd, ht, thick_nibangle, ball_nib_thick;
+	save turndir;
+	pair turndir;
+
+	wd# = 35/16 interline#;
+	ht# = 18/17 interline#;
+	darkness = 1.3 stafflinethickness;
+
+	set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);
+
+	thick_nibangle = 60;
+	thick = 3 darkness;
+	thin = darkness;
+	ball_nib_thick = 2.7 darkness;
+	ball_diam = ball_nib_thick + (h - ball_nib_thick) / 10;
+
+	
+	x3l = w;
+	y3 = 0;
+	y4l = h;
+	x4 = x2;
+	x2l = w/2;
+	y2l = -d;
+	z1 = (0,0);
+
+	penpos1(1.1 thick, thick_nibangle);
+	penpos2(thick, thick_nibangle);
+	penpos3(thin, 180);
+	penpos4(ball_nib_thick, -90);
+
+	path swoosh, ploop;
+	swoosh :=  z1l{curl 0} .. z2l .. z3l{up} .. {left}z4l 
+	  -- z4r .. z3r{down} .. z2r{left} ;
+	fill swoosh .. (swoosh scaled -1) .. cycle;
+	penlabels(2,3,4);
+
+	x5r = x4;
+	y5r = y4l - ball_diam /2;
+	z6r = z5r;
+
+	penpos5(1.6 ball_diam/2, 10);
+	penpos6(ball_diam/2, 150);
+
+	ploop := z4l{left} .. z5l .. z6l -- cycle;
+	fill ploop;
+	fill ploop scaled -1;
+
+
+	penlabels(5,6,7);
+	
+fet_endchar;
+
+fet_endgroup("foobars");
diff --git a/mf/feta-toevallig.mf b/mf/feta-toevallig.mf
new file mode 100644
index 0000000000..a0865df28d
--- /dev/null
+++ b/mf/feta-toevallig.mf
@@ -0,0 +1,199 @@
+%
+% Accidentals from various sources, notably
+%
+%   Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural, flat)
+%   F Hofmeister edition of Muellers `Etueden fuer Horn'  (double sharp)
+%
+
+
+%tracingall;
+%proofing := 2;
+%\tracingequations:= tracingonline := 1;
+
+fet_begingroup("accidentals");
+
+fet_beginchar("Sharp" , "1", "sharp");
+	set_char_box(0, 1.1 interline#, 1.5 interline#, 
+		1.5 interline#);
+
+	save interbeam, interstem, beamheight, beamwidth, 
+		stemwidth;
+
+	interbeam := 1.1 interline;
+	interstem := 7/16 ;
+	beamheight := 4 stafflinethickness;
+	beamwidth := w;
+	stemwidth := 1.3 stafflinethickness;
+	roundness := blot_diameter;
+	pair center;
+	center := (.5 w, 0);
+	
+	roundness + 2 spanwidth = beamwidth;
+	roundness + 2 spanheight = beamheight;
+
+	2 horizontal_protrusion  + interstem * beamwidth + stemwidth
+		= beamwidth;
+	
+% wanske: whole beamheight; or ca 18 degrees
+%	z2 - z1 = (beamwidth - roundness, beamheight/2);
+	z2 - z1 = (beamwidth - roundness, beamheight);
+	z1 + z2 = 2*center;
+	beamslope = (y2-y1)/(x2-x1);
+
+	pair hspan, vspan;
+	hspan = (spanwidth, beamslope * spanwidth);
+	vspan = (0, spanheight);
+
+	
+	path beam;
+	beam := (hspan + vspan -- -hspan 
+		+  vspan -- -hspan -vspan -- hspan - vspan -- cycle )
+		shifted center;
+
+	draw_rounded_path((beam shifted (0,-interbeam/2)), roundness);
+	draw_rounded_path((beam shifted (0,interbeam/2)), roundness);
+
+	pickup pencircle scaled stemwidth;
+	x3 = x4 = xpart center;
+	bot y3 = -1.5 interline + ypart center;
+	top y4 = 1.5 interline + ypart center;
+
+	path stem;
+	stem := z3 .. z4;
+	numeric xs;
+	xs := interstem* beamwidth / 2;
+	draw stem shifted (- xs, - xs* beamslope);
+	draw stem shifted (xs , xs *beamslope);
+	labels(1,2,3,4);
+	fet_endchar;
+
+fet_beginchar( "Natural", "0", "natural")
+	set_char_box(0, 8/12 interline#, 1.5 interline#, 1.5 interline#);
+
+	save interbeam, interstem, beamheight, beamwidth, 
+		stemwidth;
+
+	beamheight = 4.5 stafflinethickness;
+	interstem + stemwidth =  w;
+	stemwidth = 1.3 stafflinethickness;
+
+	z2 -z1 = (interstem, slope * interstem);
+	xpart .5 [z2,z1] = xcenter ;
+	xcenter = w/2;
+
+
+	pickup penrazor scaled beamheight rotated 90;
+	top y2 = interline - 3/2 stafflinethickness ;
+	slope =  stafflinethickness / interstem;
+	
+	draw z1 .. z2;
+	draw (xpart z1, -y2) .. (xpart z2, -y1);
+	beamtop = top y2;
+	
+	pickup pencircle scaled stemwidth;
+	xpart z3 = xpart z1;
+	xpart z4 = xpart z2;
+	top y3 = 1.5 interline;
+	top y4 = beamtop;
+
+	draw (xpart z1, -y4) .. z3;
+	draw (xpart z2, -y3) .. z4;
+
+	labels(1,2,3,4);
+	fet_endchar;
+
+%
+% Dedicated to my mom.    (3/10/97)
+%
+% Mamma, ik hou van je; kom je alsjeblieft terug? 
+%    -- HW
+%
+
+%
+% FIXME more metaness
+% FIXME distribution of the crooks' thickness
+%
+% FIXME probably doesn't look quite right. 
+%
+
+def flat_meta_symbol(expr w, d, h, 
+	 stemwidth, crook_fatness, crook_thinness,
+	bottom_stem_thick, top_stem_thick)=
+
+	z1 = (0, h);
+	z2 = (0, -d);
+	brush(z1, top_stem_thick , z2, bottom_stem_thick);
+	
+	z3 = (0, 7/16 interline);
+	z4 = z3 + whatever * (dir 30);
+	y4 = 1/2 interline ;
+	y5 = 4/16 interline;
+	x5 + crook_fatness/2 = w;
+	z6 = z2 + (0,-1) * (bottom_stem_thick - crook_thinness);
+
+	penpos3(crook_thinness, 90);
+	penpos4(crook_thinness, 90);
+	penpos5(crook_fatness, 0);
+	penpos6(crook_thinness, -90);
+	labels(1,2,3,4,5,6);
+	penstroke z3e{dir 32} .. z4e{dir 30} .. z5e{down} .. {dir 220}z6e;
+	enddef;
+	
+def flat_symbol (expr w, d, h)=
+	save stemwidth, bottom_stem_thick, top_stem_thick, 
+		crook_thinness, crook_fatness;
+	stemwidth = stafflinethickness;
+	crook_fatness = 1/4 interline;
+	crook_thinness =  stemwidth;
+	bottom_stem_thick =  5/4 stemwidth;
+	top_stem_thick = 2 stemwidth;
+	flat_meta_symbol(w,d,h, stemwidth, crook_fatness, crook_thinness, 
+		bottom_stem_thick, top_stem_thick);
+	enddef;
+
+%
+% unfortunately, 600dpi is not enough to show the brush of the stem.
+%
+fet_beginchar("Flat", "-1", "flat")
+	set_char_box(0, 9/12 interline#, .5 interline#, 2 interline#);
+	flat_symbol (w, d, h);
+	fet_endchar;
+
+fet_beginchar("Double flat", "-2", "flatflat")
+	set_char_box(0, 18/12 interline#, .5 interline#, 2 interline#);
+	flat_symbol(w/2, d, h);
+	addto currentpicture also currentpicture
+		shifted (w/2 - stafflinethickness/2,0);
+	fet_endchar;
+	
+
+fet_beginchar("Double sharp", "2", "sharpsharp")
+	set_char_box(0, interline#, .5 interline#, .5 interline#);
+	save klaverblad, klaversteel;
+
+	klaversteel = 1/12 interline;
+	klaverblad = 1/3 interline;
+
+	z1 = (klaversteel, 0);
+	z2 = (w/2 - klaverblad / 10, h - klaverblad);
+	z3 = (w/2, h);
+	z4 = z2 reflectedabout((0,0), (1,1));
+	z5 = z1 reflectedabout((0,0), (1,1));
+
+%	labels(1,2,3,4,5);
+	draw_rounded_path(  
+		z1{dir 45} .. {right}z2 -- z3 -- z4{down} .. {dir 225}z5 .. cycle,
+	1/20 interline);
+
+	addto currentpicture also currentpicture yscaled (-d/h);
+	addto currentpicture also currentpicture xscaled (-1);
+
+	% ugh
+	currentpicture := currentpicture  shifted (w/2,0);
+
+
+	fet_endchar;
+
+
+fet_endgroup("accidentals");
+
diff --git a/mf/font-en-tja16.mf b/mf/font-en-tja16.mf
index 62ad525942..80ccfadeec 100644
--- a/mf/font-en-tja16.mf
+++ b/mf/font-en-tja16.mf
@@ -13,7 +13,7 @@ staffsize#:=16pt#;
 stafflines:=5;
 code:=-1;
 
-input generic-tja;
+input feta-generic;
 
 fet_endfont("font-en-tja");
 
diff --git a/mf/font-en-tja20.mf b/mf/font-en-tja20.mf
index abc685f417..c7e35a13ed 100644
--- a/mf/font-en-tja20.mf
+++ b/mf/font-en-tja20.mf
@@ -11,7 +11,7 @@ stafflines:=5;
 stafflinethickness#:=0.4pt#;
 code:=-1;
 
-input generic-tja;
+input feta-generic;
 
 fet_endfont("font-en-tja");
 
diff --git a/mf/generic-macros.mf b/mf/generic-macros.mf
deleted file mode 100644
index b6b26ed9f7..0000000000
--- a/mf/generic-macros.mf
+++ /dev/null
@@ -1,129 +0,0 @@
-
-%
-% debugging
-%
-def test_grid =
-if test>1:
-	proofrulethickness 1pt#;
-	makegrid(0pt,0pt for i:=-5pt step 1pt until 5pt: ,i endfor)
-		(0pt,0pt for i:=-5pt step 1pt until 5pt: ,i endfor);
-	proofrulethickness .1pt#;
-	makegrid(0pt,0pt for i:=-4.8pt step .2pt until 4.8pt: ,i endfor)
-		(0pt,0pt for i:=-4.8pt step .2pt until 4.8pt: ,i endfor);
-fi
-	enddef;
-%
-% Transforms
-%
-
-def scaledabout(expr point, scale) =
-	shifted -point scaled scale shifted point
-enddef;
-
-%
-% Urgh! Want to do parametric types
-%
-
-def del_picture_stack=
-	save save_picture_stack, picture_stack_idx;
-enddef;
-
-% better versions of Taupin/Egler savepic cmds
-%
-%
-def make_picture_stack = 
-	% override previous stack.
-	del_picture_stack;
-	picture save_picture_stack[];
-	numeric picture_stack_idx;
-	picture_stack_idx := 0;
-	def push_picture(expr p) = 
-		save_picture_stack[picture_stack_idx] := p ;
-		picture_stack_idx := picture_stack_idx + 1;
-	enddef;
-	def pop_picture =  save_picture_stack[decr picture_stack_idx] enddef;
-	def top_picture = save_picture_stack[picture_stack_idx] enddef;
-enddef;
-
-
-% save/restore pens
-% why can't I delete individual pens?
-def make_pen_stack =
-	del_pen_stack;
-	pen save_pen_stack[];
-	numeric pen_stack_idx;
-	pen_stack_idx := 0;
-	def push_pen(expr p) = 
-		save_pen_stack[pen_stack_idx] := p ;
-		pen_stack_idx := pen_stack_idx +1;
-	enddef;
-	def pop_pen =  save_pen_stack[decr pen_stack_idx] enddef;
-	def top_pen = save_pen_stack[pen_stack_idx] enddef;
-enddef;
-def del_pen_stack=
-	save save_pen_stack, pen_stack_idx;
-enddef;
-
-%
-% drawing
-%
-
-% a: x diameter
-% b: y diameter
-% err_x: drift of y axis at top
-% err_y: drift of x axis at right
-def distorted_ellipse(expr a,b,err_y,err_x,super) =
-	superellipse((a,err_x),(-err_y,b),(-a,-err_x),(err_y,-b),super);
-	enddef;
-
-def brush(expr a,w,b,v) =
-	begingroup;
-	save x,y;
-	z1=a; z2=b;
-	penpos3(w,angle(z2-z1)+90);
-	penpos4(w,angle(z2-z1));
-	penpos5(v,angle(z1-z2)+90);
-	penpos6(v,angle(z1-z2));
-	z3 = z4 = z1;
-	z5 = z6 = z2;
-
-	fill z3r{z3r-z5l}..z4l..{z5r-z3l}z3l..z5r{z5r-z3l}..z6l..{z3r-z5l}z5l..cycle;
-	penlabels(3,4,5,6);
-	endgroup;
-enddef;
-
-def draw_rounded_path(expr p, thick) =
-	push_pen(currentpen);
-	fill p;
-	pickup pencircle scaled thick;
-	draw p;
-	currentpen := pop_pen;
-enddef;
-
-%
-%
-%
-def balled_crook(expr a, w, balldiam, stem) =
-begingroup;
-	save x,y;
-	penpos1(balldiam/2,-90);
-	penpos2(balldiam/2,0);
-	penpos3(balldiam/2,90);
-	penpos4(balldiam/2,180);
-	x4r=xpart a-w; y3r=ypart a+balldiam/4;
-	x1l=x2l=x3l=x4l;
-	y1l=y2l=y3l=y4l;
-	penpos5(stem,250);
-	x5=x4r+9/8balldiam; y5r=y1r;
-	penpos6(stem,260);
-	x6l=xpart a; y6l=ypart a;
-	penstroke z1e..z2e..z3e..z4e..z1e..z5e{right}..z6e;
-	penlabels(1,2,3,4,5,6);
-endgroup;
-enddef;
-
-def y_mirror_char =
-	currentpicture := currentpicture yscaled -1;
-	set_char_box(charbp, charwd, charht, chardp);
-enddef;
-
diff --git a/mf/generic-params.mf b/mf/generic-params.mf
deleted file mode 100644
index 690e415f2e..0000000000
--- a/mf/generic-params.mf
+++ /dev/null
@@ -1,25 +0,0 @@
-
-interline#:=staffsize#/(stafflines-1);
-
-%
-%  [D.K.Roush & J.S.Gourlay] say this should be 0.072
-% We know better
-% generally, the "blackness" of most chars depends on this.
-%
-stafflinethickness#:=0.1 interline#;
-
-define_pixels(interline);
-define_pixels(stafflinethickness);
-
-% 
-% Because of the engraving/stamping process, no traditional
-% characters have sharp edges and corners
-% The following variable controls the amount of "roundness"
-%
-numeric blot_diameter;
-
-%
-% this is not a meta variable: it is related to absolute sizes.
-%
-blot_diameter# = .4pt#;
-define_pixels(blot_diameter);
diff --git a/mf/generic-tja.mf b/mf/generic-tja.mf
deleted file mode 100644
index 2d890ee79b..0000000000
--- a/mf/generic-tja.mf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-input generic-macros;
-
-make_pen_stack;
-make_picture_stack;
-input generic-params;
-
-
-test:=0;
-if test = 0: 
-	input eindelijk;
-	input toevallig;
-	input puntje;
-	input bolletjes;
-	input schrift;
-else:
-%	input klef;
-fi
diff --git a/mf/klef.mf b/mf/klef.mf
deleted file mode 100644
index 47980e1a33..0000000000
--- a/mf/klef.mf
+++ /dev/null
@@ -1,46 +0,0 @@
-
-% implement clefs 
-fet_begingroup("foobars")
-
-
-fet_beginchar("F clef", "bassclef", "bassclef");
-	set_char_box(0,0,0,0);
-fet_endchar;
-
-fet_beginchar("G clef", "evolinclef", "evolinclef");
-	save tilt;
-	tilt = 15;
-
-	inner_fatness = 5 stafflinethickness;
-	upstroke_fatness = 7 stafflinethickness;
-	top_curl_fatness = 4 stafflinethickness;
-	inner_thinness = 2 stafflinethickness;	
-	downstroke_thinness = 1.5 stafflinethickness;
-
-	z1 = 6/10 interline * dir(-135);
-	z3 = (0, interline - inner_fatness/2);
-	x5 = x1;
-	y5 = -interline;
-	z7 = (-1.25 interline, -.5 interline);
-	z9 = whatever * dir (90 + tilt);
-	y9 = 2.1 interline;
-	y12 + top_curl_fatness = 4 interline;
-	x12 = 0;
-	z13 = z9;
-	z15 = 1.5 interline * dir (tilt -90);
-	
-
-	penpos1(blot_diameter, 45);
-	penpos3(inner_fatness, -90);
-	penpos5(inner_thinness, 90);
-	penpos7(inner_thinness, 45);
-	penpos9(upstroke_fatness, tilt -90);
-	penpos12(top_curl_fatness, 90);
-	penpos13(downstroke_thinness, tilt-90);
-	penpos15(downstroke_thinness, tilt-90);
-	set_char_box(0,0,0,0);
-
-	penstroke z1e{dir 135} .. z3e ..  {left}z5e .. z7e ..  tension 1.2 .. z9e;% & z9e..  z12e .. z13e .. z15e;
-	penlabels(1,3,5,7, 9,12,13,15);
-fet_endchar;
-fet_endgroup("foobars");
diff --git a/mf/mfbug.mf b/mf/mfbug.mf
new file mode 100644
index 0000000000..5837988e0c
--- /dev/null
+++ b/mf/mfbug.mf
@@ -0,0 +1,21 @@
+% is this OK? Or is it a bug;
+% changing the order of z1l and z1r in reflectedabout 
+% stops mf from complaining
+fet_beginchar("open (unstopped)", "open", "ouvert")
+	save thin, height, width, thick;
+	height# = 5/4 width#;
+	height# = 2/3 interline#;
+	thin = .9 stafflinethickness;
+	thick =  1.4 thin;
+	set_char_box(width#/2, width#/2, 0, height#);
+	
+	penpos1(thick, 0);
+	penpos2(thin, 90);
+	z1r = (w,h/2);
+	z2r = (0, h);
+	penlabels(1,2);
+	penstroke z1e{up} .. {left}z2e;
+	addto currentpicture also currentpicture xscaled -1;
+	addto currentpicture also currentpicture reflectedabout(z1l, z1r);
+fet_endchar;
+fet_endgroup("foobars");
diff --git a/mf/puntje.mf b/mf/puntje.mf
deleted file mode 100644
index 7675befaee..0000000000
--- a/mf/puntje.mf
+++ /dev/null
@@ -1,13 +0,0 @@
-fet_begingroup("dots");
-
-fet_beginchar("duration dot","dot", "dot")
-	save dot_diam;
-	2 dot_diam# = interline# - stafflinethickness#;
-	define_pixels(dot_diam)
-	pickup pencircle scaled dot_diam;
-	draw (dot_diam/2,0);
-	set_char_box(0, dot_diam#, dot_diam#/2, dot_diam#/2);
-fet_endchar;
-
-
-fet_endgroup("dots");
diff --git a/mf/schrift.mf b/mf/schrift.mf
deleted file mode 100644
index d53b016780..0000000000
--- a/mf/schrift.mf
+++ /dev/null
@@ -1,165 +0,0 @@
-fet_begingroup("foobars")
-
-
-def draw_fermata =
-	save alpha, radius, crook_thinness, crook_fatness, dot_diam;
-	
-	radius# = 1.5 interline#;
-	crook_thinness# = 1.5stafflinethickness#;
-	crook_fatness# = 4 stafflinethickness#;
-
-	radius# + crook_fatness#/2 = h#;
-	radius# + crook_thinness#/2 = w#;
-	set_char_box(w#, w#, 0, h#);
-	
-	define_pixels(radius, crook_thinness, crook_fatness);
-	dot_diam = 4/3 crook_fatness;
-
-
-	penpos1(crook_thinness, 0);
-	penpos2(crook_fatness, -90);
-	penpos3(crook_thinness, -180);
-	z1 = (-radius,0);
-	z2 = (0, radius);
-	z3 = (radius,0);
-	
-%	fill z1l{down} .. {up}z1r .. z2r .. z3r{down} .. {up}z3l
-%		.. z2l .. cycle;
-	% wanske, baerenreiter suggest ca 80 degrees iso half-circle
-	% ugh?
-	alpha := 10;
-%	penstroke z1e{dir (90-alpha)}..z2e..{dir (alpha-90)}z3e;
-	% isn't this ugly to get rounded edges?
-	fill z1l{dir (-alpha-90)}..{dir (90-alpha)}z1r..z2r..
-		z3r{dir (alpha-90)}..{dir (90+alpha)}z3l..z2l..cycle;
-
-	pickup pencircle scaled dot_diam;
-	x4 =0;
-	bot y4 = - crook_thinness/2;
-	draw z4;
-enddef;
-
-fet_beginchar("fermata up", "ufermata", "ufermata")
-	draw_fermata;	
-	penlabels(1,2,3);
-	fet_endchar;
-
-fet_beginchar("fermata down", "dfermata", "dfermata")
-	draw_fermata;
-	currentpicture:=currentpicture yscaled -1 ;
-	set_char_box(w#, w#, h#, 0);
-	
-	fet_endchar;
-
-
-% FIXME: rounded endings
-%        and thickness at point of join==thickness at end, like ">"
-%
-fet_beginchar("> accent", "accent", "accent")
-	set_char_box(.9 interline#, .9 interline#, .5 interline#, .5 interline#);
-	save thickness, diminish;
-
-	thickness = 2 stafflinethickness;
-
-	% prevent blobs at crossing lines
-	diminish = .75;
-
-	y1 + thickness/2 = h;
-	x1 = -b;
-	x2 = w;
-	y2 = .25 thickness* diminish;
-
-	z4 = (w,0);
-	x3 =0;
-	z3 = whatever [z1, z4];
-
-	penpos2(thickness*(2 - diminish)/2 , 90);
-	penpos1(thickness, 90);
-	penpos3(thickness, 90);
-
-	penstroke z1e .. z3e .. z2e;
-	penstroke (z1e .. z3e .. z2e) yscaled -1;
-
-	penlabels(1,2,3);
-	fet_endchar;
-
-fet_beginchar("staccato dot", "staccato", "staccato")
-	save radius;
-	radius# = 1.25 stafflinethickness#;
-	define_pixels(radius);
-	pickup pencircle scaled 2 radius;
-	draw (0,0);
-	set_char_box(radius#, radius#, radius#, radius#);
-fet_endchar;
-
-def draw_staccatissimo =
-	save radius, height;
-	height# = .8 interline#;
-	radius# = 2 stafflinethickness#;
-	define_pixels(radius, height);
-
-	brush((0,0), blot_diameter, (0, height),2 radius);
-	set_char_box(radius#,radius#, blot_diameter#/2, height# + radius#);
-enddef;
-
-fet_beginchar("staccatissimo/martellato up", "ustaccatissimo", "ustaccatissimo")
-	draw_staccatissimo;
-fet_endchar;
-
-%
-% FIXEM: scale labels too.
-%
-fet_beginchar("staccatissimo/martellato down", "dstaccatissimo", "dstaccatissimo")
-	draw_staccatissimo;
-	y_mirror_char;
-fet_endchar;
-
-fet_beginchar("portato/single tenuto", "tenuto", "tenuto")
-	save thick;
-	thick# = 1.2 stafflinethickness#;
-	define_pixels(thick);
-
-	set_char_box(.9 interline#, .9 interline#, thick#/2,thick#/2);
-	pickup pencircle scaled thick;
-	lft x1 = -b;
-	rt x2 = w;
-	y1 = y2 = 0;
-	draw z1 .. z2;
-fet_endchar;
-
-
-def draw_marcato = 
-	save fatness, thinness;
-	set_char_box(interline#/2, interline#/2, 0, 1.1 interline#);
-
-	fatness = 3 stafflinethickness;
-	thinness = .8 stafflinethickness;
-	x2 - x1  + blot_diameter = fatness;
-	x2 + thinness/2 = w;
-	
-	y1 = y2;
-	y1 = thinness/2;
-	z2 - z3 = whatever * (charwd, -charht);
-	z1 - z4 = whatever * (charwd, -charht);
-	z3 - z4 = whatever * (charwd, charht);
-	y3 + thinness/2 = h;
-	draw_rounded_path(z1 -- z2 -- z3 -- z4 -- cycle, thinness);
-
-	pickup pencircle scaled thinness;
-	z3 - z5 = whatever* (z3 - z4);
-	bot y5 = 0;
-	draw z3 .. z5;
-
-	labels(1,2,3,4,5);
-enddef;
-
-fet_beginchar("marcato up", "umarcato", "umarcato")
-	draw_marcato;
-fet_endchar;
-fet_beginchar("marcato down", "dmarcato", "dmarcato")
-	draw_marcato;
-	y_mirror_char;
-fet_endchar;
-
-
-fet_endgroup("foobars");
diff --git a/mf/toevallig.mf b/mf/toevallig.mf
deleted file mode 100644
index 60aff66f03..0000000000
--- a/mf/toevallig.mf
+++ /dev/null
@@ -1,195 +0,0 @@
-%
-% Accidentals from various sources, notably
-%
-%   Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural, flat)
-%   F Hofmeister edition of Muellers `Etueden fuer Horn'  (double sharp)
-%
-
-
-%tracingall;
-%proofing := 2;
-%\tracingequations:= tracingonline := 1;
-
-fet_begingroup("accidentals");
-
-fet_beginchar("Sharp" , "1", "sharp");
-	set_char_box(0, 1.1 interline#, 1.5 interline#, 
-		1.5 interline#);
-
-	save interbeam, interstem, beamheight, beamwidth, 
-		stemwidth;
-
-	interbeam := 1.1 interline;
-	interstem := 7/16 ;
-	beamheight := 4 stafflinethickness;
-	beamwidth := w;
-	stemwidth := 1.3 stafflinethickness;
-	roundness := blot_diameter;
-	pair center;
-	center := (.5 w, 0);
-	
-	roundness + 2 spanwidth = beamwidth;
-	roundness + 2 spanheight = beamheight;
-
-	2 horizontal_protrusion  + interstem * beamwidth + stemwidth
-		= beamwidth;
-	
-% wanske: whole beamheight; or ca 18 degrees
-%	z2 - z1 = (beamwidth - roundness, beamheight/2);
-	z2 - z1 = (beamwidth - roundness, beamheight);
-	z1 + z2 = 2*center;
-	beamslope = (y2-y1)/(x2-x1);
-
-	pair hspan, vspan;
-	hspan = (spanwidth, beamslope * spanwidth);
-	vspan = (0, spanheight);
-
-	
-	path beam;
-	beam := (hspan + vspan -- -hspan 
-		+  vspan -- -hspan -vspan -- hspan - vspan -- cycle )
-		shifted center;
-
-	draw_rounded_path((beam shifted (0,-interbeam/2)), roundness);
-	draw_rounded_path((beam shifted (0,interbeam/2)), roundness);
-
-	pickup pencircle scaled stemwidth;
-	x3 = x4 = xpart center;
-	bot y3 = -1.5 interline + ypart center;
-	top y4 = 1.5 interline + ypart center;
-
-	path stem;
-	stem := z3 .. z4;
-	numeric xs;
-	xs := interstem* beamwidth / 2;
-	draw stem shifted (- xs, - xs* beamslope);
-	draw stem shifted (xs , xs *beamslope);
-	labels(1,2,3,4);
-	fet_endchar;
-
-fet_beginchar( "Natural", "0", "natural")
-	set_char_box(0, 8/12 interline#, 1.5 interline#, 1.5 interline#);
-
-	save interbeam, interstem, beamheight, beamwidth, 
-		stemwidth;
-
-	beamheight = 4.5 stafflinethickness;
-	interstem + stemwidth =  w;
-	stemwidth = 1.3 stafflinethickness;
-
-	z2 -z1 = (interstem, slope * interstem);
-	xpart .5 [z2,z1] = xcenter ;
-	xcenter = w/2;
-
-
-	pickup penrazor scaled beamheight rotated 90;
-	top y2 = interline - 3/2 stafflinethickness ;
-	slope =  stafflinethickness / interstem;
-	
-	draw z1 .. z2;
-	draw (xpart z1, -y2) .. (xpart z2, -y1);
-	beamtop = top y2;
-	
-	pickup pencircle scaled stemwidth;
-	xpart z3 = xpart z1;
-	xpart z4 = xpart z2;
-	top y3 = 1.5 interline;
-	top y4 = beamtop;
-
-	draw (xpart z1, -y4) .. z3;
-	draw (xpart z2, -y3) .. z4;
-
-	labels(1,2,3,4);
-	fet_endchar;
-
-%
-% Dedicated to my mom.    (3/10/97)
-%
-% Mamma, ik hou van je; kom je alsjeblieft terug? 
-%    -- HW
-%
-
-%
-% FIXME more metaness
-% FIXME distribution of the crooks' thickness
-%
-% FIXME probably doesn't look quite right. 
-
-def flat_meta_symbol(expr w, d, h, 
-	 stemwidth, crook_fatness, crook_thinness,
-	bottom_stem_thick, top_stem_thick)=
-
-	z1 = (0, h);
-	z2 = (0, -d);
-	brush(z1, top_stem_thick , z2, bottom_stem_thick);
-	
-	z3 = (0, 7/16 interline);
-	z4 = z3 + whatever * (dir 30);
-	y4 = 1/2 interline ;
-	y5 = 4/16 interline;
-	x5 + crook_fatness/2 = w;
-	z6 = z2 + (0,-1) * (bottom_stem_thick - crook_thinness);
-
-	penpos3(crook_thinness, 90);
-	penpos4(crook_thinness, 90);
-	penpos5(crook_fatness, 0);
-	penpos6(crook_thinness, -90);
-	labels(1,2,3,4,5,6);
-	penstroke z3e{dir 32} .. z4e{dir 30} .. z5e{down} .. {dir 220}z6e;
-	enddef;
-	
-def flat_symbol (expr w, d, h)=
-	save stemwidth, bottom_stem_thick, top_stem_thick, 
-		crook_thinness, crook_fatness;
-	stemwidth = stafflinethickness;
-	crook_fatness = 1/4 interline;
-	crook_thinness =  stemwidth;
-	bottom_stem_thick =  5/4 stemwidth;
-	top_stem_thick = 2 stemwidth;
-	flat_meta_symbol(w,d,h, stemwidth, crook_fatness, crook_thinness, 
-		bottom_stem_thick, top_stem_thick);
-	enddef;
-
-%
-% unfortunately, 600dpi is not enough to show the brush of the stem.
-%
-fet_beginchar("Flat", "-1", "flat")
-	set_char_box(0, 9/12 interline#, .5 interline#, 2 interline#);
-	flat_symbol (w, d, h);
-	fet_endchar;
-
-fet_beginchar("Double flat", "-2", "flatflat")
-	set_char_box(0, 18/12 interline#, .5 interline#, 2 interline#);
-	flat_symbol(w/2, d, h);
-	addto currentpicture also currentpicture
-		shifted (w/2 - stafflinethickness/2,0);
-	fet_endchar;
-	
-
-fet_beginchar("Double sharp", "2", "sharpsharp")
-	set_char_box(0, interline#, .5 interline#, .5 interline#);
-	save klaverblad, klaversteel;
-
-	klaversteel = 1/12 interline;
-	klaverblad = 1/3 interline;
-
-	z1 = (klaversteel, 0);
-	z2 = (w/2 - klaverblad / 10, h - klaverblad);
-	z3 = (w/2, h);
-	z4 = z2 reflectedabout((0,0), (1,1));
-	z5 = z1 reflectedabout((0,0), (1,1));
-
-	draw_rounded_path(  
-		z1{dir 45} .. {right}z2 -- z3 -- z4{down} .. {dir 225}z5 .. cycle,
-	1/20 interline);
-
-
-	addto currentpicture also currentpicture rotated 90;
-	addto currentpicture also currentpicture yscaled (-d/h);
-
-	currentpicture := currentpicture  shifted (w/2,0);
-	fet_endchar;
-
-
-fet_endgroup("accidentals");
-
diff --git a/tex/fetdefs.tex b/tex/fetdefs.tex
index 857f5121c1..87657a4f94 100644
--- a/tex/fetdefs.tex
+++ b/tex/fetdefs.tex
@@ -15,6 +15,7 @@
 \def\fetdef#1#2{\def#1{\lower.3884\staffrulethickness\hbox{\fetchar{#2}}}}
 \def\fetchar#1{\fontentja\char#1}
 
+%\input font-en-tja16
 \input font-en-tja20
 
 \def\beamslope#1#2{{\count0=#2\advance\count0 by#1
diff --git a/tex/font-en-tja16.tex b/tex/font-en-tja16.tex
index 14e723b485..4793b3cdce 100644
--- a/tex/font-en-tja16.tex
+++ b/tex/font-en-tja16.tex
@@ -1,5 +1,5 @@
 % generated automatically by mf-to-table.py version 0.3
-% on Mon Oct  6 20:23:06 1997
+% on Wed Oct  8 16:18:13 1997
 % Do not edit
 
 % input from out/font-en-tja16.log
@@ -27,20 +27,29 @@
 \fetdef\dot{15}
 
 % balls
-\fetdef\wholeball{16}
-\fetdef\halfball{17}
-\fetdef\quartball{18}
-\fetdef\breveball{19}
-\fetdef\longaball{20}
+\fetdef\brevisball{16}
+\fetdef\longaball{17}
+\fetdef\wholeball{18}
+\fetdef\halfball{19}
+\fetdef\quartball{20}
 
 % foobars
 \fetdef\ufermata{21}
 \fetdef\dfermata{22}
-\fetdef\accent{23}
+\fetdef\sforzatoaccent{23}
 \fetdef\staccato{24}
 \fetdef\ustaccatissimo{25}
 \fetdef\dstaccatissimo{26}
 \fetdef\tenuto{27}
 \fetdef\umarcato{28}
 \fetdef\dmarcato{29}
+\fetdef\ouvert{30}
+\fetdef\plusstop{31}
+\fetdef\upbow{32}
+\fetdef\downbow{33}
+\fetdef\turn{34}
+
+% floogbars
+\fetdef\eighthflag{35}
+\fetdef\deighthflag{36}
 
diff --git a/tex/font-en-tja20.tex b/tex/font-en-tja20.tex
index 5a06c9deeb..4739128ba7 100644
--- a/tex/font-en-tja20.tex
+++ b/tex/font-en-tja20.tex
@@ -1,5 +1,5 @@
 % generated automatically by mf-to-table.py version 0.3
-% on Mon Oct  6 20:23:19 1997
+% on Wed Oct  8 16:18:16 1997
 % Do not edit
 
 % input from out/font-en-tja20.log
@@ -27,20 +27,29 @@
 \fetdef\dot{15}
 
 % balls
-\fetdef\wholeball{16}
-\fetdef\halfball{17}
-\fetdef\quartball{18}
-\fetdef\breveball{19}
-\fetdef\longaball{20}
+\fetdef\brevisball{16}
+\fetdef\longaball{17}
+\fetdef\wholeball{18}
+\fetdef\halfball{19}
+\fetdef\quartball{20}
 
 % foobars
 \fetdef\ufermata{21}
 \fetdef\dfermata{22}
-\fetdef\accent{23}
+\fetdef\sforzatoaccent{23}
 \fetdef\staccato{24}
 \fetdef\ustaccatissimo{25}
 \fetdef\dstaccatissimo{26}
 \fetdef\tenuto{27}
 \fetdef\umarcato{28}
 \fetdef\dmarcato{29}
+\fetdef\ouvert{30}
+\fetdef\plusstop{31}
+\fetdef\upbow{32}
+\fetdef\downbow{33}
+\fetdef\turn{34}
+
+% floogbars
+\fetdef\eighthflag{35}
+\fetdef\deighthflag{36}
 
diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex
index 319d45f2f7..2854a35417 100644
--- a/tex/lilyponddefs.tex
+++ b/tex/lilyponddefs.tex
@@ -51,6 +51,8 @@
 \parindent=0pt
 \newdimen\smallspace
 \newdimen\interlinedist
+\newdimen\ledgerlinethickness
+\newdimen\stemthickness
 \newcount\n
 \newdimen\balkheight
 \newdimen\notewidth
@@ -90,6 +92,10 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % do derivative calcs
 
+% FIXME: should read from TFM/AFM/fetalog
+%
+
+% this has to be synced with the font definition
 \def\musixcalc{
         \interlinedist=\fontdimen5\musicfnt
         \smallspace=.3\interlinedist
@@ -99,6 +105,8 @@
         %  [D.K.Roush & J.S.Gourlay] say this should be 0.072
         % We know better
         \staffrulethickness=0.1\interlinedist
+        \stemthickness=\staffrulethickness
+        \ledgerlinethickness=1.5\staffrulethickness
 }
 
 
@@ -177,7 +185,7 @@
         \loop\ifnum\n<#1\advance\n by1%
                 \kern\interstaffrule
                 \nointerlineskip
-                \vbox to 0pt{\hrule height #3 width#2%
+                \vbox to 0pt{\hrule height .5#3 depth .5#3 width#2%
                         \vss}\nointerlineskip
                 \repeat
         }}
@@ -185,18 +193,19 @@
 %%
 % Ugh. Need to redo this. Wish we had PS.
 %
-\def\toplines#1#2{\dist#1
-        \topalign{\hbox{\kern-.25\dist\lines{#2}{1.5\dist}{2\staffrulethickness}}}}
+\def\topledgerlines#1#2{\dist#1
+        \topalign{\hbox{\kern-.25\dist\lines{#2}{1.5\dist}{\ledgerlinethickness}}}}
 
-\def\botlines#1#2{\dist#1
-        \botalign{\hbox{\kern-.25\dist\lines{#2}{1.5\dist}{2\staffrulethickness}}}}
+\def\botledgerlines#1#2{\dist#1
+        \botalign{\hbox{\kern-.25\dist\lines{#2}{1.5\dist}{\ledgerlinethickness}}}}
 
 %
 % a staffsymbol with #1 lines, width #2
 % bottom at baseline
 \def\linestafsym#1#2{\leftalign{\botalign{\lines{#1}{#2}{\staffrulethickness}}}}
 
-\def\stem#1#2{\vrule height#2 depth-#1}
+\def\stem#1#2{\hbox{\kern -.5\stemthickness
+        \vrule width\stemthickness height#2 depth-#1}}
 
 \def\placebox#1#2#3{%
         \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}%