From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Tue, 11 Nov 1997 00:23:35 +0000 (+0100)
Subject: release: 0.1.30
X-Git-Tag: release/0.1.30
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c8e6f4f3b9c4308d88d844909e645fc5ff437fa8;p=lilypond.git

release: 0.1.30
---

diff --git a/AUTHORS.text b/AUTHORS.text
index dfec8605b5..428689b5ca 100644
--- a/AUTHORS.text
+++ b/AUTHORS.text
@@ -61,6 +61,6 @@ CCCCOOOONNNNTTTTRRRRIIIIBBBBUUUUTTTTOOOORRRRSS
 
 
 
-27/Oct/97                LilyPond 0.1.29                        1
+27/Oct/97                LilyPond 0.1.30                        1
 
 
diff --git a/Documentation/gnu-music.pod b/Documentation/gnu-music.pod
index a2a9ee0f05..2d52c81195 100644
--- a/Documentation/gnu-music.pod
+++ b/Documentation/gnu-music.pod
@@ -231,7 +231,3 @@ Francois Pinard.
 This history note is probably biased in some way, because I wrote it.
 The rest of this document is also entirely mine, and is not meant to
 reflect anyone else's opinion.
-
-
-For metacomposing, see New Scientist, aug 9 1997, or
-http://art.ucsc.edu/faculty/cope/home
diff --git a/Documentation/links.pod b/Documentation/links.pod
index e8044573e1..e0b5c61d76 100644
--- a/Documentation/links.pod
+++ b/Documentation/links.pod
@@ -24,6 +24,10 @@ The documentation system for C++ sources, which the LilyPond sources use.
 
 An enormous collection of music related URLs
 
+=item http://art.ucsc.edu/faculty/cope/home
+
+See New Scientist, aug 9 1997.
+
 =back
 
 =head2 Ftp 
diff --git a/Documentation/mudela-book.pod b/Documentation/mudela-book.pod
index b19009b172..f44c60b354 100644
--- a/Documentation/mudela-book.pod
+++ b/Documentation/mudela-book.pod
@@ -4,7 +4,7 @@ mudela-book - integrate LaTeX and mudela
 
 =head1 SYNOPSIS
 
-	convert-mudela [options] [file]
+	mudela-book [options] [file]
 
 =head1 DESCRIPTION
 
diff --git a/INSTALL.text b/INSTALL.text
index aaed4e5d25..93fd8e0faa 100644
--- a/INSTALL.text
+++ b/INSTALL.text
@@ -61,7 +61,7 @@ RRRRUUUUNNNNNNNNIIIINNNNGGGG
 
 
 
-20/Oct/97                LilyPond 0.1.29                        1
+20/Oct/97                LilyPond 0.1.30                        1
 
 
 
@@ -127,7 +127,7 @@ CCCCOOOONNNNFFFFIIIIGGGGUUUURRRRIIIINNNNGGGG a
 
 
 
-20/Oct/97                LilyPond 0.1.29                        2
+20/Oct/97                LilyPond 0.1.30                        2
 
 
 
@@ -193,7 +193,7 @@ INSTALL(1)            LilyPond documentation           INSTALL(1)
 
 
 
-20/Oct/97                LilyPond 0.1.29                        3
+20/Oct/97                LilyPond 0.1.30                        3
 
 
 
@@ -259,7 +259,7 @@ IIIINNNNSSSSTTTTAAAALLLLLLLLIIIINNNNGGGG
 
 
 
-20/Oct/97                LilyPond 0.1.29                        4
+20/Oct/97                LilyPond 0.1.30                        4
 
 
 
@@ -325,7 +325,7 @@ RRRREEEEDDDDHHHHAAAATTTT LLLLIIIINNNNUUUUXXXX
 
 
 
-20/Oct/97                LilyPond 0.1.29                        5
+20/Oct/97                LilyPond 0.1.30                        5
 
 
 
@@ -391,6 +391,6 @@ AAAAUUUUTTTTHHHHOOOORRRRSSSS
 
 
 
-20/Oct/97                LilyPond 0.1.29                        6
+20/Oct/97                LilyPond 0.1.30                        6
 
 
diff --git a/NEWS b/NEWS
index 0868b00741..7710007f24 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,10 @@
+pl 30
+	- feta: G clef. 
+	- scripts now do relative coords (fixes lyrics + barnumber bug)
+	- bf: Lyrics lexer mode
+	- bf: bass clef
 
+********
 pl 29
 	- feta: bass clef, bf: dynamics, bf: 64th flag
 	
diff --git a/README b/README
index 1f3b542c66..fc5a277cb2 100644
--- a/README
+++ b/README
@@ -1,9 +1,12 @@
 This is the toplevel README to LilyPond		-*-Text-*-
 
 
-GNU LilyPond which converts music definition files into visual or
-audio output: it can typeset formatted sheet music in TeX and 
-and (mechanical) perfomances to MIDI files.
+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.
 
 
 1. VERSIONING
diff --git a/TODO b/TODO
index 5eb9af3245..6038253a3f 100644
--- a/TODO
+++ b/TODO
@@ -6,6 +6,8 @@ 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
 
+0.2:
+
 	* LILYSOURCEDIR
 	
 	* documentation
@@ -14,15 +16,17 @@ grep for TODO and ugh/ugr
 
 	* standchen: warning: Excentric column (Meter dims?)
 
-	* optimal pagebreaking.
+	* naming Mozarella, Madeira, Muella?
 
-	* put errorlevel in Input class
+	* versioning for Feta
 
-	* AFM for font input?
+	* bf: abbrevs over whole note
 
-	* naming Mozarella, Madeira, Muella?
+	* Score_bar/Piano_braces, are *not* ordinary bars 
 
-	* bf: abbrevs over whole note
+STUFF
+
+	* give Items/Spanners access to unbroken originals	
 
 	* scoping for properties
 
@@ -47,9 +51,13 @@ grep for TODO and ugh/ugr
 	- MIDI instrument
 	- staff title
 
-	* give Items/Spanners access to unbroken originals	
+	* optimal pagebreaking.
+
+	* put errorlevel in Input class
+
+	* AFM for font input?
+
 
-	* Score_bar/Piano_braces, are *not* ordinary bars 
 
 3RD PARTY BUGS:
 	* Rational infty(HUGE_VAL) on glibc / w32
@@ -113,19 +121,6 @@ languages:
 	- ABC? 
 	- SMDL?
 
-	* placement of bar-numbers
-
-******************
-
-	\score { < 
-		\melodic \type Staff { c'4 g'4 }
-		\lyric { \id "Lyric" ""; hello4 bye4 < a chord > }
-		\lyric { \id "Lyric" ""; bye4 hello4 }
-		\melodic { \id "Staff" ""; c'4 g'4 }
-	> }
-
-******************
-
 	* add to MIDI output:
 	- tempo change
 	- repeat
@@ -275,6 +270,7 @@ SMALLISH PROJECTS
 	* write Dynamic_line (to group dynamics horizontally)
 
 	* use Real for all y positions.
+	- use translate_axis( .. ,Y_AXIS) 
 
 	* half-sharps, half-flats
 
@@ -353,7 +349,7 @@ Mudela.
 
 	* move MIDI stuff (including Quantization) to a ANSI C libmidi library.
 
-	* use an embedded language: Python
+	* use an embedded language: Python, Scheme
 	for: 
 		- Score_elems
 		- Engraver
diff --git a/VERSION b/VERSION
index db68ff0c0d..9692368e96 100644
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 TOPLEVEL_MAJOR_VERSION = 0
 TOPLEVEL_MINOR_VERSION = 1
-TOPLEVEL_PATCH_LEVEL = 29
+TOPLEVEL_PATCH_LEVEL = 30
 TOPLEVEL_MY_PATCH_LEVEL = 
 
 # use the above to send patches, always empty for released version:
diff --git a/init/feta16.ly b/init/feta16.ly
index fe4aff5ab3..8c4a51080b 100644
--- a/init/feta16.ly
+++ b/init/feta16.ly
@@ -1,5 +1,5 @@
 % generated automatically by mf-to-table.py version 0.4
-% on Wed Nov  5 23:51:17 1997
+% on Tue Nov 11 13:31:20 1997
 % Do not edit
 % input from out/feta16.log
 % name=\symboltables {
@@ -67,7 +67,9 @@
         "d6"	"\\dsixtyfourthflag"	-0.20\pt	4.54\pt	-0.20\pt	17.66\pt	
         }
     "klef"	 = \table {
-        "bass"	"\\bassclef"	-0.00\pt	10.80\pt	-10.00\pt	4.00\pt	
-        "bass_change"	"\\cbassclef"	-0.00\pt	8.64\pt	-8.00\pt	3.20\pt	
+        "bass"	"\\bassclef"	1.20\pt	12.80\pt	-10.00\pt	4.00\pt	
+        "bass_change"	"\\cbassclef"	0.96\pt	10.24\pt	-8.00\pt	3.20\pt	
+        "violin"	"\\violinclef"	0.11\pt	10.55\pt	-12.00\pt	20.00\pt	
+        "violin_change"	"\\cviolinclef"	-0.23\pt	8.12\pt	-9.60\pt	16.00\pt	
         }
     %  } % $name
diff --git a/init/feta20.ly b/init/feta20.ly
index 144f3f45f0..dccf7ba6bd 100644
--- a/init/feta20.ly
+++ b/init/feta20.ly
@@ -1,5 +1,5 @@
 % generated automatically by mf-to-table.py version 0.4
-% on Wed Nov  5 23:51:26 1997
+% on Tue Nov 11 13:31:29 1997
 % Do not edit
 % input from out/feta20.log
 % name=\symboltables {
@@ -67,7 +67,9 @@
         "d6"	"\\dsixtyfourthflag"	-0.25\pt	5.68\pt	-0.25\pt	22.08\pt	
         }
     "klef"	 = \table {
-        "bass"	"\\bassclef"	-0.00\pt	13.50\pt	-12.50\pt	5.00\pt	
-        "bass_change"	"\\cbassclef"	-0.00\pt	10.80\pt	-10.00\pt	4.00\pt	
+        "bass"	"\\bassclef"	1.50\pt	16.00\pt	-12.50\pt	5.00\pt	
+        "bass_change"	"\\cbassclef"	1.20\pt	12.80\pt	-10.00\pt	4.00\pt	
+        "violin"	"\\violinclef"	0.14\pt	13.19\pt	-15.00\pt	25.00\pt	
+        "violin_change"	"\\cviolinclef"	-0.29\pt	10.15\pt	-12.00\pt	20.00\pt	
         }
     %  } % $name
diff --git a/init/table16.ly b/init/table16.ly
index daa17af924..f95cb2fdcc 100644
--- a/init/table16.ly
+++ b/init/table16.ly
@@ -53,7 +53,7 @@ table_sixteen=
 
      "clefs" = \table {
 	"violin"	"\violinclef"		0.0\pt	12.8\pt	-10.0\pt	18.0\pt
-	"bass"	"\bassclef" 		0.0\pt	12.8\pt	0.0\pt	16.0\pt
+	"bass"	"\bassclef" 		-1.0\pt	12.8\pt	0.0\pt	16.0\pt
 	"alto"	"\altoclef"		0.0\pt	12.8\pt	0.0\pt	16.0\pt
 	"tenor"	"\altoclef"		0.0\pt	12.8\pt	0.0\pt	16.0\pt
 	"violin_change"	"\cviolinclef" 	0.0\pt	11.2\pt	-12.0\pt	12.0\pt
diff --git a/input/standchen.ly b/input/standchen.ly
index 756a6c218d..9faee5ed92 100644
--- a/input/standchen.ly
+++ b/input/standchen.ly
@@ -44,30 +44,30 @@ melodie = \melodic{
 %%4
 	r < [ 'a cis > e < 'a cis > e < 'a cis ] > |
 %%5
-	[2/3 a~ bes a ]1/1 d'4. a |
+	[2/3 a() bes a ]1/1 d'4. a |
 %%6
-	[2/3 g~ a g ]1/1 d'4 g r |
+	[2/3 g() a g ]1/1 d'4 g r |
 
 %%7
-	a4.^> g [2/3 g~ f e ]1/1 |
+	a4.^> g [2/3 g() f e ]1/1 |
 %%8
 	f2 r4 |
 %%9
 
-	< { a'4.~  g' [2/3 g'( f' )e' ]1/1 }
+	< { a'4.()  g' [2/3 g'( f' )e' ]1/1 }
 	{ cis'4. e'_"dolce" \plet 2/3; e' \plet 1/1; } > |
 %%10
 	< f'2. d'2. > |
 %%11
-	[2/3 a ~  bes a ]1/1 f'4. a |
+	[2/3 a ()  bes a ]1/1 f'4. a |
 %%12
-	[2/3 g~   a g ]1/1 e'4. d' |
+	[2/3 g()   a g ]1/1 e'4. d' |
 %%13
-	c'4. bes [2/3 bes~   a g ]1/1 |
+	c'4. bes [2/3 bes()   a g ]1/1 |
 %%14
 	a2 r 
-	< { d'~  c'4. g [2/3 bes a g ]1/1 }
-	{ f \p ~  e4._"dolce" bes 
+	< { d'()  c'4. g [2/3 bes a g ]1/1 }
+	{ f \p ()  e4._"dolce" bes 
 		\plet 2/3; g
 		\plet 1/1; 
 	} > |
@@ -81,12 +81,12 @@ melodie = \melodic{
 	[ d'8. a16 ] f4. d |
 %%19
 %#%	c'\grace\stemup
-	[2/3 bes ~   a bes ]1/1 d'4. bes |
+	[2/3 bes ()   a bes ]1/1 d'4. bes |
 %%20
 	a2. |
 %%21
 %#%	a\grace
-	[2/3 g~  fis g ]1/1 bes4.^> g |
+	[2/3 g()  fis g ]1/1 bes4.^> g |
 %%22
 	f!2. |
 %%23
@@ -94,16 +94,16 @@ melodie = \melodic{
 %%24
 	[ d'8. a16 ] fis4. d |
 %%25
-	[2/3 b \mf~   ais b ]1/1 d'4. b |
+	[2/3 b \mf()   ais b ]1/1 d'4. b |
 %%26
 	< a2. fis2. > |
 %%27
-	[2/3 e' \f~  dis' e' ]1/1 g'4. cis' |
+	[2/3 e' \f()  dis' e' ]1/1 g'4. cis' |
 %%28
 	< d'2. fis2. > |
 %#%\volta1
 %%29
-	< { bes2( [ d'8.~ )bes16 ] }
+	< { bes2( [ d'8.() )bes16 ] }
 	{ g2 \mf [ bes8. g16 ] } > |
 %%30
 	< { a4. [ a-. a-. a-. ] }
@@ -114,7 +114,7 @@ melodie = \melodic{
 %%32
 	< a2 fis2 \pp > < a4 fis4 > |
 %%33
-	< { b2( [ d'8.~ )b16 ] }
+	< { b2( [ d'8.() )b16 ] }
 	{ g2 [ b8. g16 ] } > |
 %%34
 	< { a4. [ a-. a-. a-. ] }
@@ -128,14 +128,14 @@ melodie = \melodic{
 %%37
 	[ a8. a16 ] [ cis'8. cis'16 ] [ e'8. e'16 ] |
 %%38
-	d'4~  cis'4 r4 |
+	d'4()  cis'4 r4 |
 %%39
 %#%	> a4. [ cis' e'8. >! d'16 ] |
 	a4. \> [ cis' e'8. \! d'16 ] |
 %%40
 	cis'2 r4 |
 %%41
-	< fis'4. \> cis'4. \f > e' [2/3 e'~  d' \! cis' ]1/1 |
+	< fis'4. \> cis'4. \f > e' [2/3 e'()  d' \! cis' ]1/1 |
 %%42
 	[ b8. cis'16 ] d'4^> b r |
 %%43
@@ -144,19 +144,19 @@ melodie = \melodic{
 %%44
 	[ b8. \> cis'16 ] d'4^> b \! r |
 %%45
-	[2/3 b \p ~  ais b ]1/1 d'4. b |
+	[2/3 b \p ()  ais b ]1/1 d'4. b |
 %%46
 	<a!2. fis2. > |
 %%47
-	[2/3 e' \f~  dis' e' ]1/1 g'4.^> cis' |
+	[2/3 e' \f()  dis' e' ]1/1 g'4.^> cis' |
 %%48
 	\textstyle "italic";
 	< 
-	{ fis2.~
+	{ fis2.(
 	%\group "+1"; 
-		\stemdown f2. }
-	{ d'2. ~ \stemup
-		d'4 r4_"decresc." d'4 } 
+		\stemdown )f2. }
+	{ d'2. ( \stemup
+		) d'4 r4_"decresc." d'4 } 
 	>
 	\textstyle "roman"; |
 %%50
diff --git a/lily/VERSION b/lily/VERSION
index c66f32fc18..ab7dbaa23a 100644
--- a/lily/VERSION
+++ b/lily/VERSION
@@ -1,4 +1,4 @@
 MAJOR_VERSION = 0
 MINOR_VERSION = 1
-PATCH_LEVEL = 29
+PATCH_LEVEL = 30
 MY_PATCH_LEVEL =
diff --git a/lily/bar-column-grav.cc b/lily/bar-column-grav.cc
index e86a8cee62..8ab52f41d5 100644
--- a/lily/bar-column-grav.cc
+++ b/lily/bar-column-grav.cc
@@ -24,34 +24,34 @@ void
 Bar_column_engraver::acknowledge_element (Score_elem_info info)
 {
   if (info.elem_l_->is_type_b (Script::static_name()) 
-	&& info.req_l_->command()
-	&& info.origin_grav_l_arr_.size() == 1) 
-	  {
-	script_l_arr_.push ((Script*)info.elem_l_->item());
+      && info.req_l_->command()
+      && info.origin_grav_l_arr_.size() == 1) 
+    {
+      script_l_arr_.push ((Script*)info.elem_l_->item());
     }
   else 
     {
-	if  (info.origin_grav_l_arr_.size() == 1 
-	     && info.elem_l_->is_type_b (Bar::static_name()))
-	     bar_l_ = (Bar*)info.elem_l_->item();
+      if  (info.origin_grav_l_arr_.size() == 1 
+	   && info.elem_l_->is_type_b (Bar::static_name()))
+	bar_l_ = (Bar*)info.elem_l_->item();
     }
 	
   if (bar_l_ && !barcol_p_) 
     {
-	barcol_p_ = new Bar_column;
-	barcol_p_->breakable_b_ =true;
-	barcol_p_->set_bar (bar_l_);
-	announce_element (Score_elem_info (barcol_p_, 0));
+      barcol_p_ = new Bar_column;
+      barcol_p_->breakable_b_ =true;
+      barcol_p_->set_bar (bar_l_);
+      announce_element (Score_elem_info (barcol_p_, 0));
     }
 
   if  (barcol_p_) 
     {
-	for (int i=0; i < script_l_arr_.size(); i++) 
-	  {
-	    script_l_arr_[i]->breakable_b_ = true;
-	    barcol_p_->add (script_l_arr_[i]);
-	  }
-	script_l_arr_.clear();
+      for (int i=0; i < script_l_arr_.size(); i++) 
+	{
+	  script_l_arr_[i]->breakable_b_ = true;
+	  barcol_p_->add (script_l_arr_[i]);
+	}
+      script_l_arr_.clear();
     }
 }
 
@@ -60,8 +60,8 @@ Bar_column_engraver::do_pre_move_processing()
 {
   if (barcol_p_) 
     {
-	typeset_element (barcol_p_);
-	barcol_p_ =0;
+      typeset_element (barcol_p_);
+      barcol_p_ =0;
     }
 }
 
diff --git a/lily/crescendo.cc b/lily/crescendo.cc
index acb8a5bdf3..ffe6648c53 100644
--- a/lily/crescendo.cc
+++ b/lily/crescendo.cc
@@ -18,7 +18,6 @@ Crescendo::Crescendo()
   grow_dir_ =0;
   dir_ = DOWN ;
   dyn_b_drul_[LEFT] = dyn_b_drul_[RIGHT] =false;
-  inside_staff_b_ = false;
 }
 
 Interval
@@ -62,7 +61,7 @@ Crescendo::brew_molecule_p() const
   m_p = new Molecule;
   Atom s (get_symbol());
   m_p->add (Atom (s));
-  m_p->translate (Offset (x_off_dim, pos_i_ * paper()->internote_f ()));
+  m_p->translate (Offset (x_off_dim, y_));
   return m_p;
 }
 
diff --git a/lily/dynamic-grav.cc b/lily/dynamic-grav.cc
index 7a62123f83..d4b9544e3a 100644
--- a/lily/dynamic-grav.cc
+++ b/lily/dynamic-grav.cc
@@ -105,7 +105,8 @@ Dynamic_engraver::do_pre_move_processing()
   Staff_symbol* s_l = get_staff_info().staff_sym_l_;
   if (dynamic_p_)
     {
-      dynamic_p_->set_staffsym (s_l);
+      
+      dynamic_p_->add_support (s_l);
       typeset_element (dynamic_p_);
       dynamic_p_ = 0;
     }
@@ -115,7 +116,7 @@ Dynamic_engraver::do_pre_move_processing()
 	to_end_cresc_p_->dyn_b_drul_[RIGHT]=true;
 
       to_end_cresc_p_->set_bounds(RIGHT,get_staff_info().musical_l ());
-      to_end_cresc_p_->set_staffsym (s_l);
+      to_end_cresc_p_->add_support (s_l);
       typeset_element (to_end_cresc_p_);
       to_end_cresc_p_ = 0;
     }
diff --git a/lily/include/staff-side.hh b/lily/include/staff-side.hh
index c682c9efbd..131b265186 100644
--- a/lily/include/staff-side.hh
+++ b/lily/include/staff-side.hh
@@ -18,35 +18,36 @@
 
   */
 class Staff_side : virtual Score_elem {
-    Link_array<Score_elem> support_l_arr_;
-    int staff_size_i_;
-    Interval support_height() const;
-    Staff_symbol* staff_sym_l_;
-    int get_position_i() const;
+  Link_array<Score_elem> support_l_arr_;
+  int staff_size_i_;
+  Interval support_height() const;
+  Staff_symbol* staff_sym_l_;
+  Real get_position_f() const;
 
-    void read_staff_sym();
+  void read_staff_sym();
 public:
 
-    /**
-      Vertical dir of symbol relative to staff. -1 = below staff?
-      */
-    Direction dir_;
-    Interval sym_int_;
+  /**
+    Vertical dir of symbol relative to staff. -1 = below staff?
+    */
+  Direction dir_;
+  Interval sym_int_;
     
-    /// follow the support inside the staff?
-    bool inside_staff_b_;
+  /// follow the support inside the staff?
+  bool inside_staff_b_;
 
-    int pos_i_;
+  Real y_;
 
-    void set_staffsym (Staff_symbol * );
+
+  void set_staffsym (Staff_symbol * );
   
-    Staff_side();
-    void add_support (Score_elem*);
-    DECLARE_MY_RUNTIME_TYPEINFO;
+  Staff_side();
+  void add_support (Score_elem*);
+  DECLARE_MY_RUNTIME_TYPEINFO;
     
 protected:
-    virtual Interval symbol_height() const;
-    virtual void do_substitute_dependency (Score_elem *, Score_elem*);
-    virtual void do_post_processing();
+  virtual Interval symbol_height() const;
+  virtual void do_substitute_dependency (Score_elem *, Score_elem*);
+  virtual void do_post_processing();
 };
 #endif // STAFF_SIDE_HH
diff --git a/lily/include/staff-sym.hh b/lily/include/staff-sym.hh
index 31b69273cc..4a4888a522 100644
--- a/lily/include/staff-sym.hh
+++ b/lily/include/staff-sym.hh
@@ -19,6 +19,7 @@ class Staff_symbol : public Spanner
 {
   /// this many lines.
   int no_lines_i_;
+  Real interline_f_;
 public:
   DECLARE_MY_RUNTIME_TYPEINFO;
   Staff_symbol (int lines);
@@ -26,6 +27,7 @@ public:
   int steps_i() const;
 protected:
   SCORE_ELEM_CLONE(Staff_symbol);
+  virtual Interval do_height () const;
   virtual Molecule* brew_molecule_p() const;
   virtual void do_print() const;
 };
diff --git a/lily/lexer.l b/lily/lexer.l
index 96ee56b49d..840e2b31ce 100644
--- a/lily/lexer.l
+++ b/lily/lexer.l
@@ -66,7 +66,7 @@ A		[a-zA-Z]
 AA		{A}|_
 N		[0-9]
 AN		{AA}|{N}
-PUNCT		[?!,.:']
+PUNCT		[?!:']
 ACCENT		\\[`'"^]
 NATIONAL  [\001-\006\021-\027\031\036\200-\377]
 TEX		{AA}|-|{PUNCT}|{ACCENT}|{NATIONAL}
diff --git a/lily/script-grav.cc b/lily/script-grav.cc
index 1fed7f0299..597fe0809a 100644
--- a/lily/script-grav.cc
+++ b/lily/script-grav.cc
@@ -9,6 +9,7 @@
 #include "musical-request.hh"
 #include "stem.hh"
 #include "staff-sym.hh"
+#include "general-script-def.hh"
 
 Script_engraver::Script_engraver()
 {
@@ -55,7 +56,9 @@ Script_engraver::do_pre_move_processing()
   for (int i=0; i < script_p_arr_.size(); i++) 
     {
       Script*script_p = script_p_arr_[i];
-      script_p->set_staffsym (s_l);
+      if (!script_p->specs_l_->inside_b())
+	script_p->add_support (s_l);
+
       typeset_element (script_p);
     }
   script_p_arr_.clear();
diff --git a/lily/script.cc b/lily/script.cc
index ceaeacd4c3..0979cfe824 100644
--- a/lily/script.cc
+++ b/lily/script.cc
@@ -86,7 +86,6 @@ Script::do_pre_processing()
 
   if (!dir_)
     set_default_dir();
-  inside_staff_b_ = specs_l_->inside_b();
 }
 
 Interval
@@ -98,11 +97,10 @@ Script::symbol_height() const
 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_axis (dy * pos_i_, Y_AXIS);
+  out->translate_axis (y_, Y_AXIS);
   out->translate_axis (dx, X_AXIS);	// FIXME! ugh
   return out;
 }
diff --git a/lily/staff-side.cc b/lily/staff-side.cc
index 7f9abeeb83..4099f2eece 100644
--- a/lily/staff-side.cc
+++ b/lily/staff-side.cc
@@ -13,44 +13,37 @@
 #include "staff-sym.hh"
 #include "debug.hh"
 
-void
-Staff_side::set_staffsym (Staff_symbol* s_l)
-{
-  staff_sym_l_ = s_l;
-  add_dependency (s_l);
-}
 
 Staff_side::Staff_side()
 {
-  pos_i_ =0;
+   y_=0;
   sym_int_ = Interval (0,0);
-  staff_size_i_ = 0;
-  staff_sym_l_ = 0;
   dir_ = CENTER;
   inside_staff_b_ = false;
 }
 
-void
-Staff_side::read_staff_sym()
-{
-  if (! staff_sym_l_)
-    return ;
-  staff_size_i_ = staff_sym_l_->steps_i();
-}
-
 
 Interval
 Staff_side::support_height() const
 {
-  Interval r;
+  Interval y_int;
+  for (int i=0; i < support_l_arr_.size(); i++) 
+    {
+      Axis_group_element *common = 
+	common_group (support_l_arr_[i], Y_AXIS);
+	
+      Real y = support_l_arr_[i]->relative_coordinate (common, Y_AXIS)  
+	-relative_coordinate (common,Y_AXIS);
 
-  for (int i=0; i < support_l_arr_.size(); i++)
-    r.unite (support_l_arr_[i]->height());
-  if (r.empty_b())
+      y_int.unite (y + support_l_arr_[i]->height());
+    }
+
+
+  if (y_int.empty_b())
     {
-      r = Interval (0,0);
+      y_int = Interval (0,0);
     }
-  return r;
+  return y_int;
 }
 
 void
@@ -60,8 +53,8 @@ Staff_side::add_support (Score_elem*i)
   add_dependency (i);
 }
 
-int
-Staff_side::get_position_i() const
+Real
+Staff_side::get_position_f() const
 {
   if (!dir_)
     {
@@ -73,28 +66,11 @@ Staff_side::get_position_i() const
 
   Real y=0;
   Real inter_f = paper()-> internote_f ();
-  if (!inside_staff_b_)
-    {
-      y  = (staff_sym_l_) ? dir_ * (staff_sym_l_->steps_i()/2 + 2) : -2;
-      y *=inter_f;
-
-      Interval v= support_height();
-
-      if (dir_ > 0)
-	{
-	  y = y >? (v.max() + 2*inter_f);
-	}
-      else if (dir_ < 0)
-	{
-	  y = y <? (v.min() - 2*inter_f);
-	}
-    }
-  else
-    {
-      Interval v= support_height();
-      y = v[dir_]  + 2*dir_*inter_f;	// ugh
-    }
-  return int (rint (Real (y)/inter_f)); // should ret a float?
+
+  Interval v= support_height();
+  y = v[dir_]  + 2*dir_*inter_f;	// ugh
+
+  return y;
 }
 
 Interval
@@ -107,17 +83,15 @@ void
 Staff_side::do_post_processing()
 {
   sym_int_ = symbol_height();
-  pos_i_ = get_position_i();
+  y_ = get_position_f();
   if (dir_)
-    pos_i_ += int (rint (- sym_int_[-dir_] / paper()->internote_f ()));
+    y_ += - sym_int_[-dir_];
 }
 
 void
 Staff_side::do_substitute_dependency (Score_elem*o, Score_elem*n)
 {
   support_l_arr_.unordered_substitute (o,n);
-  if (staff_sym_l_ == o)
-    staff_sym_l_ = n ? (Staff_symbol*) n->spanner():0;
 }
 
 
diff --git a/lily/staff-sym.cc b/lily/staff-sym.cc
index ebacee46f7..4cd214b79b 100644
--- a/lily/staff-sym.cc
+++ b/lily/staff-sym.cc
@@ -10,12 +10,13 @@
 #include "paper-def.hh"
 #include "molecule.hh"
 #include "debug.hh"
-
+#include "dimen.hh"
 
 
 Staff_symbol::Staff_symbol (int l)
 {
   no_lines_i_ = l;
+  interline_f_ =  0 PT;
 }
 
 
@@ -30,19 +31,25 @@ Staff_symbol::do_print() const
 #endif
 }
 
+Interval
+Staff_symbol::do_height() const
+{
+  int n = no_lines_i_ -1;
+  return 2* inter_note_f () * Interval (-n, n);
+}
+
 Molecule*
 Staff_symbol::brew_molecule_p() const
 {
   Paper_def * p = paper();
   Atom rule  = p->lookup_l ()->rule_symbol (p->get_var ("rule_thickness"), 
 					    width ().length ());
-  Real inter = p->interline_f ();
-  Real height = (no_lines_i_-1) * inter/2;
+  Real height = (no_lines_i_-1) * inter_note_f();
   Molecule * m = new Molecule;
   for (int i=0; i < no_lines_i_; i++)
     {
       Atom a (rule);
-      a.translate_axis (height - i * inter, Y_AXIS);
+      a.translate_axis (height - i * inter_note_f()*2, Y_AXIS);
       m->add (a);
     }
 
@@ -52,6 +59,9 @@ Staff_symbol::brew_molecule_p() const
 Real
 Staff_symbol::inter_note_f() const
 {
+  if (interline_f_)
+    return interline_f_/2;
+
   return paper()->internote_f ();
 }
 
diff --git a/lily/text-item.cc b/lily/text-item.cc
index 8d62ea7289..16a45977f1 100644
--- a/lily/text-item.cc
+++ b/lily/text-item.cc
@@ -52,7 +52,7 @@ Text_item::brew_molecule_p() const
 
   if (dir_<0)		// should do something better anyway.
     mol_p->translate_axis (-mol_p->extent().y ().left , Y_AXIS);
-  mol_p->translate_axis (pos_i_ * paper()->internote_f (), Y_AXIS);
+  mol_p->translate_axis (y_, Y_AXIS);
   
   return mol_p;
 }
diff --git a/make/debian/watch b/make/debian/watch
index 2b1a91d0d7..1a1bb286a0 100644
--- a/make/debian/watch
+++ b/make/debian/watch
@@ -2,4 +2,4 @@
 # Rename this file to "watch" and then you can run the "uscan" command
 # to check for upstream updates and more.
 # Site			Directory	Pattern			Version	Script
-pcnov095.win.tue.nl	/pub/lilypond	lilypond-*.tar.gz	debian	uupdate
+pcnov095.win.tue.nl	/pub/lilypond/development	lilypond-*.tar.gz	debian	uupdate
diff --git a/make/lelievijver.lsm b/make/lelievijver.lsm
index a9436ed3e8..4ca6b9c40c 100644
--- a/make/lelievijver.lsm
+++ b/make/lelievijver.lsm
@@ -1,7 +1,7 @@
 Begin3
 Titel: LilyPond
-Versie: 0.1.29
-Inschrijf datum: 06NOV97
+Versie: 0.1.30
+Inschrijf datum: 11NOV97
 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.29.tar.gz 
+	395k lilypond-0.1.30.tar.gz 
 Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/
-	395k lilypond-0.1.29.tar.gz 
+	395k lilypond-0.1.30.tar.gz 
 Copi"eer politie: GPL
 End
diff --git a/make/lilypond.lsm b/make/lilypond.lsm
index d3085da434..28812b00e6 100644
--- a/make/lilypond.lsm
+++ b/make/lilypond.lsm
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 0.1.29
-Entered-date: 06NOV97
+Version: 0.1.30
+Entered-date: 11NOV97
 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 
@@ -13,9 +13,9 @@ Keywords: music notation typesetting midi
 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
-	440k lilypond-0.1.29.tar.gz 
-Original-site: pcnov095.win.tue.nl /pub/lilypond/
-	440k lilypond-0.1.29.tar.gz 
+Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
+	440k lilypond-0.1.30.tar.gz 
+Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
+	440k lilypond-0.1.30.tar.gz 
 Copying-policy: GPL
 End
diff --git a/make/lilypond.lsm.in b/make/lilypond.lsm.in
index fc173051cf..bc3e34ed5d 100644
--- a/make/lilypond.lsm.in
+++ b/make/lilypond.lsm.in
@@ -13,9 +13,9 @@ Keywords: music notation typesetting midi
 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
+Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
 	440k lilypond-@TOPLEVEL_VERSION@.tar.gz 
-Original-site: pcnov095.win.tue.nl /pub/lilypond/
+Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
 	440k lilypond-@TOPLEVEL_VERSION@.tar.gz 
 Copying-policy: GPL
 End
diff --git a/make/lilypond.spec b/make/lilypond.spec
index 714757289c..343da659ed 100644
--- a/make/lilypond.spec
+++ b/make/lilypond.spec
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 0.1.29
+Version: 0.1.30
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.29.tar.gz
+Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.30.tar.gz
 Summary: A program for typesetting music.
 URL: http://www.stack.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@stack.nl>
diff --git a/mf/autometric.mf b/mf/autometric.mf
index 47afdd263e..3b1b798684 100644
--- a/mf/autometric.mf
+++ b/mf/autometric.mf
@@ -40,6 +40,11 @@ def autometric_output_char=
 	message "@{char@:"&charnamestr&"@:"&decimal charcode&"@:"&decimal charbp&"@:"&decimal charwd&"@:"&decimal chardp&"@:"&decimal charht&"@:"&idstr&"@:"&texstr&"@}";
 enddef;
 
+def hround_pixels(expr sharped) = hround(sharped * hppp) enddef;
+def vround_pixels(expr sharped) = vround(sharped * vppp) enddef;
+
+
+
 def tand(expr alpha) = 
 	(sind alpha/cosd alpha)
 	enddef;
diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf
index 53535b6a22..69f7eb9af2 100644
--- a/mf/feta-bolletjes.mf
+++ b/mf/feta-bolletjes.mf
@@ -1,5 +1,12 @@
-% bolletjes.mf
-% part of LilyPond's pretty-but-neat music font
+% 
+% feta-bolletjes.mf --  implement noteheads
+% 
+% source file of LilyPond's pretty-but-neat music font
+% 
+% (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+% & Han-Wen Nienhuys <hanwen@stack.nl>
+% 
+
 
 % most beautiful noteheads are pronounced, not circular, 
 % and not even symmetric.
diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf
index c710d56da2..dd8abe5e91 100644
--- a/mf/feta-generic.mf
+++ b/mf/feta-generic.mf
@@ -25,8 +25,8 @@ if test = 0:
 	input feta-banier;
 	input feta-klef;
 else:
-	input feta-bolletjes;	
-	input feta-banier;
+%	input feta-bolletjes;	
+%	input feta-banier;
 %	input feta-eindelijk;
 	input feta-klef;
 
diff --git a/mf/feta-klef.mf b/mf/feta-klef.mf
index 077971baba..e9b285d7e5 100644
--- a/mf/feta-klef.mf
+++ b/mf/feta-klef.mf
@@ -1,58 +1,26 @@
+% 
+% feta-klef.mf --  implement Clefs
+% 
+% source file of the Feta (Font-En-Tja) music font
+% 
+% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% 
 
 fet_begingroup("klef");
 
-def draw_bass_clef(expr reduction, center) = 
-	save thinness, left_shoot, reduced_il;
-	save left_fat, right_fat, dot_size, dot_sep;
-	save hip_factor;
-
-	left_shoot = 0.3;
-	left_fat = .3;
-	right_fat = .5;
-	dot_size = .4;
-	dot_sep = 1.2;
-	hip_factor = 0.95;
-	thinness = stafflinethickness;
-	
-
-	reduced_il# = interline# * reduction;
-	define_pixels(reduced_il);
-	set_char_box(left_fat * reduced_il#, 
-		(1 + hip_factor + right_fat/2)* reduced_il# +
-		(dot_sep+ 1) * dot_size *reduced_il#
-		, 2.5 reduced_il#, 1.0 reduced_il#)
-
-	z2 - z1 = (1.1 reduced_il, reduced_il);
-	z3 = (x2 + hip_factor* reduced_il, y1);
-	z4 - z1 = (- left_shoot * reduced_il, -2.5 reduced_il);
-
-	z1extreme = z1l - ( thinness/2, 0);
-	penpos1(left_fat* reduced_il , 0);
-	z1r = (center, 0);
-	z5 = (x3l +  dot_sep * dot_size * interline, .5 interline);
-	
-	
-	penpos3(right_fat * reduced_il, 180);
-
-	penlabels(1,3);
-	labels(2,4);
 
+def draw_staff(expr first, last)=
+	pickup pencircle scaled stafflinethickness;
+	for i:= first step 1 until last:
+		draw (- interline, i* interline) .. (4 interline, i* interline);
+	endfor
 
-	pickup pencircle scaled thinness;
-	filldraw z1r{up} .. z2{right} .. z3r{down}  .. {curl 0} z4 {curl 0}
-		.. z3l{up} .. z2{left} .. z1l{down} -- cycle;
-
-	draw_bulb(1, z1r, z1extreme, 1.2 , 1.2);
-
-	pickup pencircle scaled (dot_size * interline);
-	draw z5;
-	draw z5 yscaled -1;
+ enddef;
 
-enddef;
 
 
 %
-% Inspired by Baerenreiter, Auf dem Strom
+% Inspired by Baerenreiter and Breitkopf
 % 
 % FIXME: dims
 % FIXME: right vertical tangent seems to be lower than the F-line
@@ -62,22 +30,25 @@ enddef;
 % [Wanske] says that the extreme x point should be exactly between 
 % the dots, but her picture shows that the extreme is ~ 0.2 ss lower
 
-def draw_bass_klef(expr reduction) = 
+def draw_bass_klef(expr exact_center, reduction) = 
 	save reduced_il, left_tilt, left_thick;
 	reduced_il# = interline# * reduction;
-	left_tilt = 10;
-
+	left_tilt = 5;
 	define_pixels(reduced_il);
 	left_thick = .25  reduced_il;
 	
-	set_char_box(0, 2.7 reduced_il#, 2.5 reduced_il#, reduced_il#);
+	set_char_box(
+		- xpart exact_center+ .2 reduced_il#, 
+		xpart exact_center + 2.7 reduced_il#, 
+		- ypart exact_center + 2.5 reduced_il#, 
+		ypart exact_center +reduced_il#);
 	x1r - x1l = left_thick;
-	x1l = 0;
-	y1l = 0;
+	z1l = (hround_pixels(xpart exact_center), 
+		vround_pixels(ypart exact_center));
 
 	y2 = reduced_il;
 
-	x3r = x1l + 12/7 reduced_il;
+	x3l - x1l =  2.1 reduced_il;
 	x2 = .5 [x1,x3];
 	x3l - x3r = .48 reduced_il;
 	y3l = -0.05 interline;
@@ -93,24 +64,159 @@ def draw_bass_klef(expr reduction) =
 	draw_bulb(1, z1r,  z1l, .45 reduced_il, 1.0);
 
 
-	fill z1r{up} .. z2r{right} .. tension .9 .. z3r{down}  .. {curl 0} 
+	fill z1r{up} .. z2r{right} .. tension 1.0 .. z3r{down}  .. {curl 0} 
 		simple_serif(z4r, z4l, 90) {curl 0}
-		.. z3l{up} .. tension .9 .. z2l{left} 
+		.. z3l{up} .. tension 0.9 .. z2l{left} 
 		.. z1l{dir (-90 + left_tilt)} -- cycle;
 	labels(2,4);
 	penlabels(1,2,3,4);
 
-	pickup pencircle scaled (1/3 reduced_il);
+	pickup pencircle scaled (.35 reduced_il);
 	draw z5;
 	draw z5 yscaled -1;
 enddef;
 
+
+
 fet_beginchar("F clef ", "bass", "bassclef")
-	draw_bass_klef(1.0);
+	if test = 1:
+		draw_staff(-3,1);
+	fi;
+	draw_bass_klef((.5 interline#, 0), 1.0);
 fet_endchar;
 fet_beginchar("F clef (reduced)", "bass_change", "cbassclef")
-	draw_bass_klef(0.8);
+	draw_bass_klef((.4 interline#, 0),0.8);
 fet_endchar;
 
 
+
+%
+% Inspired by Baerenreiter
+% 
+% FIXME top 
+% FIXME bulb should curve (see bass clef)
+% FIXME start (inside) should be little thinner
+% FIXME parametrise.
+% FIXME should be a bit more upright
+%
+def draw_gclef (expr exact_center, reduction)=
+	save reduced_il, downstroke_dir, downstroke_angle, hair, center;
+	save breapth_factor, inner_thick_end, thinness, thickness, thinnib
+, thinness, thinpen;
+	reduced_il# = interline# * reduction;
+	define_pixels(reduced_il);
+	pair downstroke_dir, center;
+
+	center := (hround_pixels(xpart exact_center), 
+		vround_pixels(ypart exact_center));
+
+	hair =  .3 stafflinethickness;
+	thinness = 1.3 stafflinethickness;
+	downstroke_dir = (14, -75);
+	breapth_factor = 11/7;
+	inner_thick_end = 45;
+	thickness = .4 interline - hair;
+
+	thinnib = thinness - hair;
+	thinpen = thinness;
+	set_char_box(-xpart exact_center + breapth_factor* reduced_il#, 
+		xpart exact_center + .66 breapth_factor* reduced_il#,
+		-ypart exact_center + 3 * reduced_il#,
+		ypart exact_center + 5 * reduced_il#);
+	
+	pickup pencircle scaled hair;
+
+	downstroke_angle = angle downstroke_dir;
+	z1 = center + whatever * (-1, -2);
+	x1 = xpart center -.28 reduced_il;
+	
+	top z2r = center + (0,reduced_il + stafflinethickness/2);
+	
+	x4 = xpart center - .1 reduced_il;
+	bot y4r = -(reduced_il + .5 stafflinethickness);
+
+	z3 = (z4 - center) rotated inner_thick_end + center;
+	
+	z5r = (- breapth_factor, .37)* reduced_il + center;
+	penpos5(thickness, 135);
+
+	z6 = center + whatever * downstroke_dir;
+	y6 = ypart center + 2 reduced_il;
+
+
+	z7l - z6 = whatever *(z5- z6) ;
+	y7l = 3.5 reduced_il;
+
+
+
+	z8r = .4 [z9r, z7r] + 1.5 stafflinethickness * dir 52;
+
+	x9 = .7 [x10, x7r];
+	top y9l = 5 reduced_il;
+
+	y10 = 3. reduced_il;
+	y11 = -11/7 reduced_il;
+
+	y12 = ypart center - 18.5/7 reduced_il;
+	x12 = x11 - 5 /7 reduced_il;	
+
+	z13 = z12 + .6 reduced_il*(-1,1);
+
+	(z10r - z10l) dotprod (unitvector downstroke_dir rotated 90) = 
+		thinnib;
+
+	center - z10= whatever * downstroke_dir;
+	center - z11 =  whatever * downstroke_dir;
+
+	penpos1(thinnib, angle(-1,-2));
+	penpos2(thickness, 90);
+	penpos3(thinnib, -90 + inner_thick_end);
+	penpos4(thinnib, -90);
+
+
+	penpos7(thickness, 135);
+	penpos8(1.5 thinnib, - 70 + angle downstroke_dir);
+	penpos9(1.5 thickness, -80);
+	penpos10(whatever, downstroke_angle + 10);
+	penpos11(thinnib, downstroke_angle + 90);
+	penpos12(thinnib, -90);
+	penpos13(3 thinnib, 180);
+
+	
+	filldraw z2l{right}   .. z3l.. z4l{left} .. z5l{up}  .. z7l{up} 
+		%.. z8l	
+		.. z9l & z9l ..
+		{downstroke_dir}z10l --- z11l -- z11r --- z10r{- downstroke_dir} 
+		.. tension .8 
+		.. z9r & z9r  
+		%.. z8r
+		.. z7r{down} .. z5r{down} .. z4r{right}
+		.. z3r .. z2r{left} .. 
+		tension .95 .. 
+		z1r -- z1l 
+		.. tension 0.85 ..cycle;
+
+	filldraw simple_serif(z1r, z1l, 90)  -- cycle;
+
+	filldraw z12r{left} .. z13r{up} -- z13l{down} .. z12l{right} .. cycle;
+
+	draw_bulb(-1,  z13l, lft z13r, 6/14 reduced_il, 1.0);
+
+	pickup pencircle scaled (thinpen);
+	draw z10 --- z11 .. z12{left};
+
+	penlabels(range 1 thru 15);
+enddef;
+
+
+fet_beginchar("G clef", "violin", "violinclef")
+	if test = 1:
+		draw_staff(-1,3);
+	fi;
+	draw_gclef((1.6 interline#,0), 1.0);
+fet_endchar;
+fet_beginchar("G clef", "violin_change", "cviolinclef")
+	draw_gclef((1.2 interline#,0), .8);
+fet_endchar;
+
 fet_endgroup("klef");
diff --git a/mf/feta-schrift.mf b/mf/feta-schrift.mf
index ad274d6a8c..37d551b925 100644
--- a/mf/feta-schrift.mf
+++ b/mf/feta-schrift.mf
@@ -1,6 +1,10 @@
-%
-% scripts
-%
+% 
+% feta-schrift.mf --  implement scripts
+% 
+% source file of the Feta (Font-En-Tja) music font
+% 
+% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% 
 
 
 fet_begingroup("scripts")
diff --git a/mf/feta-toevallig.mf b/mf/feta-toevallig.mf
index 8528ee47cd..a3cddb3fa0 100644
--- a/mf/feta-toevallig.mf
+++ b/mf/feta-toevallig.mf
@@ -1,3 +1,12 @@
+% 
+% feta-toevallig.mf --  implement Accidentals
+% 
+% source file of the Feta (Font-En-Tja) music font
+% 
+% (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+% 
+
+
 %
 % Accidentals from various sources, notably
 %
@@ -12,6 +21,11 @@
 
 fet_begingroup("accidentals");
 
+%
+% The beams of most sharps have horizontal endings (as if drawn with 
+% a square pen).  [Wanske] does not mention this, so we'll just ignore 
+% this fact
+%
 fet_beginchar("Sharp" , "1", "sharp");
 	set_char_box(0, 1.1 interline#, 1.5 interline#, 
 		1.5 interline#);
diff --git a/tex/feta16.tex b/tex/feta16.tex
index 1dd3f19865..777cda5fa7 100644
--- a/tex/feta16.tex
+++ b/tex/feta16.tex
@@ -1,5 +1,5 @@
 % generated automatically by mf-to-table.py version 0.4
-% on Wed Nov  5 23:51:17 1997
+% on Tue Nov 11 13:31:20 1997
 % Do not edit
 % input from out/feta16.log
 % name
@@ -69,4 +69,6 @@
 % klef
 \fetdef\bassclef{51}
 \fetdef\cbassclef{52}
+\fetdef\violinclef{53}
+\fetdef\cviolinclef{54}
 
diff --git a/tex/feta20.tex b/tex/feta20.tex
index 5a820d00bb..00dad23d8b 100644
--- a/tex/feta20.tex
+++ b/tex/feta20.tex
@@ -1,5 +1,5 @@
 % generated automatically by mf-to-table.py version 0.4
-% on Wed Nov  5 23:51:26 1997
+% on Tue Nov 11 13:31:29 1997
 % Do not edit
 % input from out/feta20.log
 % name
@@ -69,4 +69,6 @@
 % klef
 \fetdef\bassclef{51}
 \fetdef\cbassclef{52}
+\fetdef\violinclef{53}
+\fetdef\cviolinclef{54}