Generated with 

	make_patch 0.1.1 0.1.2 lilypond

usage 

	cd lilypond-source-dir; patch -E -p0 < patch-0.1.2
	
Patches do not contain automatically generated files, 
i.e. you should rerun configure
diff -urN ../lilypond-0.1.1/.dstreamrc ./.dstreamrc
--- ../lilypond-0.1.1/.dstreamrc	Fri Aug  1 00:40:33 1997
+++ ./.dstreamrc	Thu Aug  7 14:37:08 1997
@@ -15,79 +15,82 @@
 
 
 
-Atom			1
-Bar			1
-Beam			1
-Change_iterator		1
+Atom			0
+Bar			0
+Beam			0
+Change_iterator		0
 Chord			0
-Chord_iterator		1
-Clef_item		1
-Col_configuration	1
-Colinfo			1
-Colinfo			1
-Collision		1
-Command			1
+Chord_iterator		0
+Clef_item		0
+Col_configuration	0
+Colinfo			0
+Colinfo			0
+Collision		0
+Command			0
 
 # E l b e ment? search/replace typo.
 # Yeah. kind of. Looks cute though
-Elbement_group		1
-Engraver		1
-Engraver_group_engraver 1
-File_path		1
-Group_change_req	1
-Head_column		1
+Elbement_group		0
+Engraver		0
+Engraver_group_engraver 0
+File_path		0
+Group_change_req	0
+Head_column		0
 Idealspacing		0
-Ineq_constrained_qp 	1
+Ineq_constrained_qp 	0
 Input_translator	0
-Item			1
-Key_item		1
-Lookup			1
+Item			0
+Key_item		0
+Lookup			0
+Line_spacer		0
 Melodic_req		0
-Midi_def		1
-Mixed_qp		1
+Midi_def		0
+Mixed_qp		0
 Music			0
-Music_iterator		1
-My_lily_lexer		1
-Note_head		1
+Music_iterator		0
+My_lily_lexer		0
+Note_head		0
 Note_performer		0
 Note_req		0
 PCol			0
-PScore			1
-Paper_def		1
-Paperdef		1
+PScore			0
+Paper_def		0
+Paperdef		0
 Performer		0
+Performer_group_performer	0
 Request			0
-Request_iterator	1
-Rest_collision		1
-Rest_collision_engraver 1
-Rest_req		1
+Request_iterator	0
+Rest_collision		0
+Rest_collision_engraver 0
+Rest_req		0
 Rhythmic_req		0
-Score			1
+Score			0
 Score_column		0
-Score_elem		1
+Score_elem		0
 Score_engraver		0
 Score_performer		0
 Script_column		0
 Script_def		0
 Script_req		0
-Slur			1
-Spacing_problem 	1
-Spanner			1
-Staff			1
-Staff_commands		1
-Stem			1
-Stem			1
-Stem_req		1
-Symtable		1
-Symtables		1
+Slur			0
+Spacing_problem 	0
+Spanner			0
+Spring_spacer		0
+Staff			0
+Staff_commands		0
+Stem			0
+Stem			0
+Stem_req		0
+Symtable		0
+Symtables		0
 Text_def		0
 Text_req		0
-Time_description	1
+Time_description	0
 Voice			0
 Voice_element		0
-Voice_element_iterator  1
-Voice_iterator		1
-Word_wrap		1
+Voice_element_iterator  0
+Voice_iterator		0
+Word_wrap		0
 delete_identifiers	1
 parse_duration		1
 parse_pitchmod		1
diff -urN ../lilypond-0.1.1/BUGS ./BUGS
--- ../lilypond-0.1.1/BUGS	Fri Aug  1 20:17:29 1997
+++ ./BUGS	Thu Aug  7 12:33:18 1997
@@ -1,22 +1,3 @@
+Document reintroduced deficiencies.
 
-[document reintroduced deficiencies.]
-
-*******************
- '.' -> lilypond: lexer.l:258: int My_lily_lexer::yylex(): Assertion `cnv == 1' failed.
-
-***********************
-
-
-\score { < 
-	\melodic { \id "Staff" ""; c'4 g'4 }
-	\lyric { \id "Lyric" ""; hello4 bye4 < a chord > }
-	\lyric { \id "Lyric" ""; bye4 hello4 }
-	\melodic { \id "Staff" ""; c'4 g'4 }
-	> 
-} 
-
-*******************
-
-Stack frame overwrite in on Solaris 2.5.
-Engraver_group_engraver::Engraver_group_engraver() called from
-Score_engraver::Score_engraver()
+* placement of bar-numbers
diff -urN ../lilypond-0.1.1/Documentation/AUTHORS.pod ./Documentation/AUTHORS.pod
--- ../lilypond-0.1.1/Documentation/AUTHORS.pod	Wed Jul 30 01:15:53 1997
+++ ./Documentation/AUTHORS.pod	Thu Aug  7 11:36:00 1997
@@ -45,12 +45,14 @@
 
 =item *
 
-Alexandre Oliva <oliva@dcc.unicamp.br>
+Alexandre Oliva <oliva@dcc.unicamp.br>, testing
+
+=item *
+
+Anthony Fok <foka@gpu.srv.ualberta.ca>, debian package 
 
 =back
 
 Your name could be here! If you want to help, then take a look at the
 SMALLISH PROJECTS section of in the file F<TODO>. Some do not involve
 coding C++
-
-
diff -urN ../lilypond-0.1.1/Documentation/INSTALL.pod ./Documentation/INSTALL.pod
--- ../lilypond-0.1.1/Documentation/INSTALL.pod	Sun Aug  3 14:20:27 1997
+++ ./Documentation/INSTALL.pod	Wed Aug  6 15:01:36 1997
@@ -95,8 +95,8 @@
 
 =item *
 
-Perl.  Most scripts are written in Perl. Most  documentation was created
-with the perl's Plain Old Documentation.
+Perl-5.  Most scripts are written in Perl. Most  documentation was created
+with the perl's Plain Old Documentation. (I use 5.003)
 
 =item *
 
diff -urN ../lilypond-0.1.1/Documentation/Rules.make ./Documentation/Rules.make
--- ../lilypond-0.1.1/Documentation/Rules.make	Tue Aug  5 00:28:02 1997
+++ ./Documentation/Rules.make	Thu Aug  7 12:28:59 1997
@@ -23,8 +23,13 @@
 $(depth)/%.text: $(outdir)/%.text
 	cp $< $@
 
+do_pod2html=$(pod2html) $<
+
+# do this for perl 5.004
+#	 $ make do_pod2html='$(pod2html) --infile $< --outfile=$@' html
+#
 $(outdir)/%.html: %.pod
-	$(pod2html)  $<
+	$(do_pod2html) 
 	mv $(notdir $@) $(outdir)/
 
 $(outdir)/%.5: %.pod
@@ -36,7 +41,7 @@
 $(outdir)/%.gz: $(outdir)/%
 	gzip -c9 $< > $@
 
-$(outdir)/%.dvi: $(depth)/input/%.ly $(lilyout)/lilypond
+$(outdir)/%.dvi: $(depth)/input/%.ly 
 	(cd $(outdir); lilypond ../$< ;\
 	if [ -f ../$(basename $< ).tex ]; \
 	then \
diff -urN ../lilypond-0.1.1/Documentation/lilyliterature.pod ./Documentation/lilyliterature.pod
--- ../lilypond-0.1.1/Documentation/lilyliterature.pod	Sun Aug  3 17:08:28 1997
+++ ./Documentation/lilyliterature.pod	Tue Aug  5 22:55:56 1997
@@ -272,8 +272,12 @@
 
 [Specs for NIFF, a comprehensive but binary (yuk) format for notation HWN]
 
-SMDL, Standard Musical Description Language 
-ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf
+SMDL, Standard Musical Description Language,
+ftp://ftp.ornl.gov/pub/sgml/wg8/smdl/10743.pdf. ISO/IEC DIS 10743. 
+
+[An ISO defined SGML language. A much more thorough treatment of
+music/representation/performance definition than Mudela,  not
+suited for manual entry  HWN] 
 
 MPDL,
 
diff -urN ../lilypond-0.1.1/Documentation/lilypond.pod ./Documentation/lilypond.pod
--- ../lilypond-0.1.1/Documentation/lilypond.pod	Fri Aug  1 02:09:37 1997
+++ ./Documentation/lilypond.pod	Wed Aug  6 02:07:12 1997
@@ -159,7 +159,7 @@
 
 =item *
 send a description of the LilyPond version you use (with
-compile/config options please)
+compile/configure options please)
 
 =item *
 send a description of the bug itself.
diff -urN ../lilypond-0.1.1/Documentation/links.pod ./Documentation/links.pod
--- ../lilypond-0.1.1/Documentation/links.pod	Sun Aug  3 14:21:03 1997
+++ ./Documentation/links.pod	Tue Aug  5 17:39:45 1997
@@ -16,6 +16,11 @@
 LilyPond is part of the GNU Project started by the Free Software
 Foundation to create a system of free software for the world-community
 
+=item http://www.zib.de/Visual/software/doc++/index.html
+
+The documentation system for C++ sources, which the LilyPond sources use.
+
+
 =back
 
 =head2 Ftp 
diff -urN ../lilypond-0.1.1/Documentation/mudela-man.doc ./Documentation/mudela-man.doc
--- ../lilypond-0.1.1/Documentation/mudela-man.doc	Tue Aug  5 02:18:53 1997
+++ ./Documentation/mudela-man.doc	Tue Aug  5 23:50:08 1997
@@ -24,7 +24,8 @@
 arrogantly) The Musical Definition Language or Mudela, for
 short.\footnote{If anybody comes up with a better name, we'd gladly
   take this. Gourlay already uses Musical Description Language,
-  G-Sharp Score Definition Language. We're not being original here}
+  G-Sharp Score Definition Language.  ISO standard 10743 defines a
+  Standard Music Description Language.  We're not being original here}
 
 The first aim of Mudela is to define a piece of music, being complete
 from both from a musical typesetting, as from a musical performing
diff -urN ../lilypond-0.1.1/NEWS ./NEWS
--- ../lilypond-0.1.1/NEWS	Tue Aug  5 03:17:14 1997
+++ ./NEWS	Thu Aug  7 14:09:58 1997
@@ -1,5 +1,29 @@
+
+
+
+pl 0.1.2
+	- junked Line_of_staff
+	- bf: --output
+	- bf: . in lexer
+	- bf: mi2mu version number.
+	- bf: in mudela-book
+	- bf: don't forget to make mi2mu
+	- Bar_number_grav
+	- Bar_column_engraver, Bar_column: scripts on bars
+	- rewrite of {Horizontal,Vertical}_group. Yes, again. 
+Now neatly integrated into class hierarchy
+	- Axis, Axis_group
+	- Debian rules (AF)
+
+pl 0.1.1.jcn1
+	- Audio{column,score,item,...}, more generic audio
+	- bf: Makefiles
+	- bf: mi2mu mudela version
+*********
+aug 5
+
 pl 0.1.1
-	- {Horizontal, Vertical}_group.  A score_element may be in at most one. 
+	- {Horizontal, Vertical}_group.  A score_element may be in at most one.
 	- This means Horizontal_group_item and Vertical_group_spanner need special support.
 	- This also means a big speed increase
 	- configure cleanup
diff -urN ../lilypond-0.1.1/README ./README
--- ../lilypond-0.1.1/README	Tue Aug  5 00:31:40 1997
+++ ./README	Wed Aug  6 21:30:17 1997
@@ -5,6 +5,7 @@
 audio output: it can typeset formatted sheet music in TeX and 
 and (mechanical) perfomances to MIDI files.
 
+
 1. VERSIONING
 
 if you have downloaded a
@@ -46,27 +47,14 @@
 
 LilyPond is a long way from finished and polished. I do appreciate
 criticism, comments, bugreports, patches, etc. Please send e-mail to
-the mailing lists 
-
-
-	info-gnu-music@vuse.vanderbilt.edu
-	help-gnu-music@vuse.vanderbilt.edu
-	bug-gnu-music@vuse.vanderbilt.edu
-	gnu-music-discuss@vuse.vanderbilt.edu,
-
-See the man page on what to use for what.  Or you can send it directly
-to us: hanwen@stack.nl, jan@digicash.com.
-
-
-	
+the mailing lists. See Documentation/links.pod for more info 
 
-Have fun!
 
 6. DOZE
 
 If you have received this file as part of a DOS/Window32 distribution
 (lilypond-*.zip ), then it is advisable to also download the source
-package, since it contains the complete documentation
+package, since it might contain more documentation
 
 	ftp://pcnov095.win.tue.nl/pub/lilypond/ (Europe)
 	ftp://alpha.gnu.ai.mit.edu/gnu/ (US)
@@ -76,6 +64,21 @@
 	http://www.stack.nl/~hanwen/lilypond/index.html
 
 
+
+7. CAVEATS
+
+Solaris
+
+Stack frame overwrite in 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)
 
 
 
diff -urN ../lilypond-0.1.1/TODO ./TODO
--- ../lilypond-0.1.1/TODO	Tue Aug  5 02:35:05 1997
+++ ./TODO	Thu Aug  7 14:19:52 1997
@@ -6,6 +6,8 @@
 Most of the items are marked in the code as well, with full explanation. 
 grep for TODO and ugh/ugr
 
+	* virtualise PCols to make encapsulated spacing problems
+
 	* generate stuff in out/default, out/sun5-irix etc iso out/ 
 and out-sun5/
 
@@ -68,6 +70,8 @@
 
 3RD PARTY BUGS:
 
+	* collision.cc: 138, g++ errors
+
 	* bugreport to doc++ devel: struct not in class hier; public
 	virtual baseclasses
 
@@ -81,7 +85,20 @@
 	yy_scan_buffer in C++..
 
 	* (where are the) gcc compile warnings on linux
-	
+
+LILY BUGS
+	* '.' -> lilypond: lexer.l:258: int My_lily_lexer::yylex(): Assertion `cnv == 1' failed.
+
+
+	\score { < 
+	\melodic { \id "Staff" ""; c'4 g'4 }
+	\lyric { \id "Lyric" ""; hello4 bye4 < a chord > }
+	\lyric { \id "Lyric" ""; bye4 hello4 }
+	\melodic { \id "Staff" ""; c'4 g'4 }
+	> 
+
+	*******************
+
 
 PROJECTS
 
@@ -177,13 +194,11 @@
 	- special key: \key 'b bes bis';
 	- spacing, national styles?
 
-PARSER
-	* Duration -> Musical_duration, typedef Rational Duration?
-
-BUGS
 
 	* should adjust stemlength for flag number.
 
+BUGS
+
 	* lilypond - -> crash
 
 SEVERELY LACKING:
@@ -308,10 +323,6 @@
 
 	* configure idealspacing: arithmetic spacing
 
-	* LilyPond .deb. Other packaging methods?
-
-	* detect -pipe
-
 DOC
 	* Score_elem structure.
 
@@ -346,7 +357,6 @@
 	* volta
 
 IDEAS
-	* check out CORBA for Score_elems?
 
 	* derive PCol from Score_elem? More in Score_elems? Spacing?
 
diff -urN ../lilypond-0.1.1/VERSION ./VERSION
--- ../lilypond-0.1.1/VERSION	Tue Aug  5 03:06:31 1997
+++ ./VERSION	Tue Aug  5 17:19:31 1997
@@ -1,6 +1,6 @@
 TOPLEVEL_MAJOR_VERSION = 0
 TOPLEVEL_MINOR_VERSION = 1
-TOPLEVEL_PATCH_LEVEL = 1
+TOPLEVEL_PATCH_LEVEL = 2
 
 # use to send patches, always empty for released version:
 TOPLEVEL_MY_PATCH_LEVEL = 
diff -urN ../lilypond-0.1.1/bin/make-version ./bin/make-version
--- ../lilypond-0.1.1/bin/make-version	Wed Jul 30 01:31:46 1997
+++ ./bin/make-version	Tue Aug  5 17:36:51 1997
@@ -10,11 +10,4 @@
 
 cat $versionfile| sed 's/#.*$//g'|sed 's/\([^ ]*\)[\t ]*=[ \t]*\([^ ]*\)$/#define \1 \"\2\"/g' 
 echo
-if [ -z $CXX ]
-then
-    COMPILER=unknown
-else
-    COMPILER="$CXX `$CXX --version`"
-fi
-
-echo "#define COMPILER "\"$COMPILER\"
+    
diff -urN ../lilypond-0.1.1/bin/mudela-book.in ./bin/mudela-book.in
--- ../lilypond-0.1.1/bin/mudela-book.in	Tue Aug  5 00:05:08 1997
+++ ./bin/mudela-book.in	Tue Aug  5 17:25:12 1997
@@ -3,6 +3,7 @@
 my $mudcount = 0;
 my $mudela_b = 0;
 my $outname = "-";
+my $outdir;
 use Getopt::Long;
 
 sub gen_mufile
@@ -99,7 +100,7 @@
     if  (defined ($opt_outdir)) {
 	$outdir = $opt_outdir .  "/";
     } else {
-	$outdir = "";
+	$outdir = ".";
     }
    
     if (defined ($ARGV[0])) {
@@ -110,12 +111,17 @@
     if (defined ($opt_outname)) {
 	$outname = $opt_outname ;
     } else { 
-	die "Need to have an output name, use --outname" if ( $infile == "-");
+	die "Need to have an output name, use --outname" if ( $infile eq "-");
 	$outname = "$infile.tex";
     }
-    
+
+    my $openout ="$outdir$outname"; 
+    if  ( $infile eq $openout ) {
+	die "The input can't be the output\n";
+    }
+
     open INFILE, "<$infile";
-    open BOOK, ">$outdir$outname";
+    open BOOK, ">$openout";
     while (<INFILE>) {
 	if ($mudela_b) {
 	    if (end_b "mudela") {
diff -urN ../lilypond-0.1.1/flower/Makefile ./flower/Makefile
--- ../lilypond-0.1.1/flower/Makefile	Mon Aug  4 22:38:06 1997
+++ ./flower/Makefile	Wed Aug  6 21:04:58 1997
@@ -40,7 +40,7 @@
 #
 SCRIPTS = 
 README_FILES = ONEWS NEWS README TODO
-EXTRA_DISTFILES= configure config.hh.in configure.in VERSION $(README_FILES) $(SCRIPTS) Flower-flags.make.in
+EXTRA_DISTFILES= aclocal.m4 configure config.hh.in configure.in VERSION $(README_FILES) $(SCRIPTS) Flower-flags.make.in
 #
 
 
diff -urN ../lilypond-0.1.1/flower/README ./flower/README
--- ../lilypond-0.1.1/flower/README	Tue Mar  4 23:50:35 1997
+++ ./flower/README	Wed Aug  6 21:37:41 1997
@@ -1,5 +1,5 @@
 This library contains some general purpose routines which aren't
-standardised libraries yet. It may be replaced by STL in time
+standardised libraries yet. It may be replaced by STL in time.
 
 It was written by:
 
@@ -9,4 +9,4 @@
 
 	Jan Nieuwenhuizen <jan@digicash.com>
 
-It is licensed under the GNU GPL.
\ No newline at end of file
+It is licensed under the GNU GPL.
diff -urN ../lilypond-0.1.1/flower/aclocal.m4 ./flower/aclocal.m4
--- ../lilypond-0.1.1/flower/aclocal.m4	Thu Jan  1 01:00:00 1970
+++ ./flower/aclocal.m4	Mon Aug  4 15:19:44 1997
@@ -0,0 +1,2 @@
+
+dnl this file intentionally left blank :)
diff -urN ../lilypond-0.1.1/init/engraver.ly ./init/engraver.ly
--- ../lilypond-0.1.1/init/engraver.ly	Mon Jul 28 22:16:20 1997
+++ ./init/engraver.ly	Thu Aug  7 15:52:15 1997
@@ -5,7 +5,6 @@
 staff_engraver = \requesttranslator {
 		  Engraver "Engraver_group_engraver"
 		  \alias "Staff";
-		  \consists "Line_group_engraver";
 		  \consists "Bar_engraver";
 		  \consists "Clef_engraver";
 		  \consists "Key_engraver";
@@ -14,6 +13,10 @@
 		  \consists "Staff_sym_engraver";
 		  \consists "Collision_engraver";
 		  \consists "Rest_collision_engraver";
+%	\consists "Bar_column_engraver";
+%	\consists "Bar_number_grav";
+
+		  \consists "Line_group_engraver";
 		  \contains \requesttranslator {
 			  Engraver  "Voice_group_engravers"
 			  \alias "Voice_group";
@@ -37,8 +40,13 @@
 	\alias "Hoenoemjedat";
 	\consists "Span_bar_engraver";
 	\consists "Vertical_align_engraver";
-	\consists "Line_group_engraver";
 	\consists "Piano_bar_engraver";
+	\consists "Bar_column_engraver";
+	\consists "Bar_number_grav";
+
+
+	% This should come last
+	\consists "Line_group_engraver";
 	\contains\requesttranslator { \staff_engraver }
 }
 
@@ -50,6 +58,7 @@
 	\consists "Line_group_engraver";
 	\contains\requesttranslator { \staff_engraver }
 }
+
 lyric_engraver = \requesttranslator {
 	Engraver "Engraver_group_engraver"
 	\alias "Lyric";
@@ -76,11 +85,10 @@
 	\consists "Vertical_align_engraver";
 	\consists "Span_score_bar_engraver";
 
+
 	\contains \requesttranslator { \staff_group_engraver }
 	\contains \requesttranslator { \lyric_engraver }
 	\contains \requesttranslator { \piano_staff_engraver }
-
-	
 }
 
 
diff -urN ../lilypond-0.1.1/input/cadenza.ly ./input/cadenza.ly
--- ../lilypond-0.1.1/input/cadenza.ly	Thu Jul 31 23:54:57 1997
+++ ./input/cadenza.ly	Thu Aug  7 12:37:07 1997
@@ -51,7 +51,7 @@
 		\bar "" ;
 	[g8.(_"a tempo" e g8. )e]
 	a4. g8 [f8 e8 d8 c8]
-	'g2 d2^"tr"
+	'g2 d2^"\tr"
 	c4
 	}
 \score {
diff -urN ../lilypond-0.1.1/lily/Makefile ./lily/Makefile
--- ../lilypond-0.1.1/lily/Makefile	Mon Aug  4 16:55:42 1997
+++ ./lily/Makefile	Thu Aug  7 13:45:04 1997
@@ -12,18 +12,16 @@
 depth = ..
 #
 
+# identify module:
+#
 NAME = lilypond
+#
 
 # generic variables:
 #
 include Stable.make
 include ./$(depth)/make/Variables.make
 include VERSION
-#
-
-# identify module:
-#
-
 #
 
 # descent order into subdirectories:
diff -urN ../lilypond-0.1.1/lily/VERSION ./lily/VERSION
--- ../lilypond-0.1.1/lily/VERSION	Sat Aug  2 15:44:05 1997
+++ ./lily/VERSION	Wed Aug  6 22:50:26 1997
@@ -1,6 +1,6 @@
 MAJOR_VERSION = 0
 MINOR_VERSION = 1
-PATCH_LEVEL = 1
+PATCH_LEVEL = 2
 # use to send patches, always empty for released version:
 # include separator: ".postfix", "-pl" makes rpm barf
 
diff -urN ../lilypond-0.1.1/lily/atom.cc ./lily/atom.cc
--- ../lilypond-0.1.1/lily/atom.cc	Thu Jun 26 10:36:59 1997
+++ ./lily/atom.cc	Wed Aug  6 21:56:40 1997
@@ -13,12 +13,12 @@
 #include "varray.hh"
 #include "debug.hh"
 
-
-
 void
 Atom::print() const
 {
+#ifndef NPRINT
     mtor << "texstring: " <<sym_.tex<<"\n";    
+#endif
 }
 
 Box
@@ -39,14 +39,14 @@
 Atom::TeX_string() const
 {
     /* infinity checks. */
-    assert( abs(off_.x) < 100 CM);
-    assert( abs(off_.y) < 100 CM);
+    assert( abs(off_.x()) < 100 CM);
+    assert( abs(off_.y()) < 100 CM);
     
     // whugh.. Hard coded...
     String s("\\placebox{%}{%}{%}");
     Array<String> a;
-    a.push(print_dimen(off_.y));
-    a.push(print_dimen(off_.x));
+    a.push(print_dimen(off_.y()));
+    a.push(print_dimen(off_.x()));
     a.push(sym_.tex);
     return substitute_args(s, a);
 }
diff -urN ../lilypond-0.1.1/lily/audio-column.cc ./lily/audio-column.cc
--- ../lilypond-0.1.1/lily/audio-column.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/audio-column.cc	Thu Aug  7 13:45:04 1997
@@ -0,0 +1,43 @@
+/*
+  audio-column.cc -- implement Audio_column
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+ */
+
+#include "audio-column.hh"
+#include "audio-item.hh"
+#include "audio-score.hh"
+
+#include "debug.hh"
+
+Audio_column::Audio_column( Moment at_mom )
+{
+    at_mom_ = at_mom;
+    audio_score_l_ = 0;
+}
+
+void
+Audio_column::add( Audio_item* l )
+{
+    audio_item_l_list_.bottom().add( l );
+    l->audio_column_l_ = this; 
+}
+
+Moment
+Audio_column::at_mom() const
+{
+    return at_mom_;
+}
+
+void
+Audio_column::print() const
+{
+#ifndef NPRINT
+    mtor << "Audio_column {";
+    mtor << "at: " << at_mom_ << "\n";
+    mtor << "}\n";
+#endif 
+}
+
diff -urN ../lilypond-0.1.1/lily/audio-item.cc ./lily/audio-item.cc
--- ../lilypond-0.1.1/lily/audio-item.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/audio-item.cc	Thu Aug  7 13:45:04 1997
@@ -0,0 +1,84 @@
+/*
+  audio-item.cc -- implement Audio items.
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+*/
+
+#include "audio-item.hh"
+#include "midi-item.hh"
+
+#if 0
+Audio_instrument::Audio_instrument( String instrument_str )
+	: Audio_item( 0 )
+{
+}
+#endif
+                                      
+Audio_item::Audio_item( Request* req_l )
+{
+    audio_column_l_ = 0;
+    req_l_ = req_l;
+}
+
+Audio_key::Audio_key( Request* req_l )
+	: Audio_item( req_l )
+{
+}
+
+Midi_item*
+Audio_key::midi_item_p()
+{
+    return new Midi_key( this );
+}
+
+
+Audio_note::Audio_note( Request* req_l, bool on_b )
+	: Audio_item( req_l )
+{
+    on_b_ = on_b;
+}
+
+Midi_item*
+Audio_note::midi_item_p()
+{
+    return new Midi_note( this );
+}
+
+Audio_tempo::Audio_tempo( int per_minute_4_i )
+	: Audio_item( 0 )
+{
+    per_minute_4_i_ = per_minute_4_i;
+}
+
+Midi_item*
+Audio_tempo::midi_item_p()
+{
+    return new Midi_tempo( this );
+}
+
+Audio_meter::Audio_meter( Request* req_l )
+	: Audio_item( req_l )
+{
+}
+
+Midi_item*
+Audio_meter::midi_item_p()
+{
+    return new Midi_meter( this );
+}
+
+Audio_text::Audio_text( Audio_text::Type type, String text_str )
+	: Audio_item( 0 )
+{
+	text_str_ = text_str;
+	type_ = type;
+}
+
+Midi_item*
+Audio_text::midi_item_p()
+{
+    return new Midi_text( this );
+}
+
diff -urN ../lilypond-0.1.1/lily/audio-score.cc ./lily/audio-score.cc
--- ../lilypond-0.1.1/lily/audio-score.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/audio-score.cc	Thu Aug  7 13:45:04 1997
@@ -0,0 +1,73 @@
+/*
+  audio-score.cc -- implement Audio_score
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+*/
+
+#include "debug.hh"
+#include "midi-def.hh"
+#include "audio-column.hh"
+#include "audio-score.hh"
+
+Audio_score::Audio_score( Midi_def* l )
+{
+    midi_l_ = l;
+}
+
+void
+Audio_score::play( Audio_item* i, Audio_column* c )
+{
+    assert( c );
+    assert( i );
+
+    c->add( i );
+//    typeset_element( i );
+}
+
+void
+Audio_score::add( Audio_column* p )
+{
+    p->audio_score_l_ = this;
+    audio_column_p_list_.bottom().add(p);
+}
+
+#if 0
+void
+Audio_score::output(Tex_stream &ts)
+{
+    ts << "\n "<<  midi_l_->lookup_l()->texsetting << "%(Tex id)\n";
+    ts<< super_elem_l_->TeX_string();
+    ts << "\n\\EndLilyPondOutput";
+}
+#endif
+
+void
+Audio_score::print() const
+{    
+#ifndef NPRINT
+    mtor << "Audio_score { ";
+    midi_l_->print();
+    mtor << "\ncolumns: ";
+    for ( PCursor<Audio_column*> i( audio_column_p_list_ ); i.ok(); i++ )
+	i->print();
+    mtor << "}\n";
+#endif 
+}
+
+void
+Audio_score::process()
+{
+#if 0
+    clean_cols();
+    print();
+    *mlog << "Preprocessing elements... " <<flush;
+    preprocess();
+    *mlog << "\nCalculating column positions ... " <<flush;
+    calc_breaking();
+    *mlog << "\nPostprocessing elements..." << endl;
+    postprocess();
+#endif
+}
+
diff -urN ../lilypond-0.1.1/lily/axis-group-item.cc ./lily/axis-group-item.cc
--- ../lilypond-0.1.1/lily/axis-group-item.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/axis-group-item.cc	Thu Aug  7 15:47:52 1997
@@ -0,0 +1,52 @@
+/*
+  axis-item.cc -- implement Axis_group_item
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "axis-group-item.hh"
+#include "p-col.hh"
+
+IMPLEMENT_IS_TYPE_B2(Axis_group_item, Axis_group_element, Item);
+
+void
+Axis_group_item::OK() const
+{
+  
+}
+
+void
+Axis_group_item::do_breakable_col_processing()
+{
+    if (!pcol_l_->breakable_b())
+	return;
+    copy_breakable_items();
+    
+    Link_array<Score_elem> elems = axis_admin_.elem_l_arr_; 
+    for (int i=0; i < elems.size(); i++) {
+	Item * it_l = elems[i]->item();
+	assert(it_l);
+	
+	// somebody probably broke it in pieces
+	if (it_l->pcol_l_ != pcol_l_ ) {
+	    remove_element( it_l );
+	}
+    }
+    
+    elems=axis_admin_.elem_l_arr_;
+
+    for (int i=0; i < elems.size(); i++) {
+	Item* it_l = elems[i]->item();
+	for ( int j=0; j < 2; j++) {
+	    Item *new_l = it_l->find_prebroken_piece(broken_to_a_[j]->pcol_l_);
+	    ((Axis_group_item*)broken_to_a_[j])->add_element( new_l );
+	}
+    }
+}
+
+void
+Axis_group_item::do_print() const
+{ 
+    Axis_group_element::do_print(); 
+}
diff -urN ../lilypond-0.1.1/lily/axis-group-spanner.cc ./lily/axis-group-spanner.cc
--- ../lilypond-0.1.1/lily/axis-group-spanner.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/axis-group-spanner.cc	Thu Aug  7 14:22:59 1997
@@ -0,0 +1,78 @@
+/*
+  axis-group-spanner.cc -- implement Axis_group_spanner
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "axis-group-spanner.hh"
+#include "item.hh"
+#include "p-col.hh"
+
+void
+Axis_group_spanner::do_break_processing()
+{
+    set_my_columns();
+    if ( Spanner::line_l() ) {
+	Score_elem::handle_broken_dependencies();
+	return;
+    }
+    break_into_pieces( true );
+    Link_array<Score_elem> elem_l_arr = axis_admin_.elem_l_arr_;
+    remove_all();
+
+    
+    for (int i=0; i < elem_l_arr.size(); i++) {
+	Score_elem * elt = elem_l_arr[i];
+	Line_of_score *elt_line = elt->line_l();
+	
+	if ( ! elt_line ){ 
+	    if (elt->spanner()) {
+		Spanner * sp = elt->spanner();
+		
+		for (int j =0; j < broken_into_l_arr_.size(); j++) {
+		    Axis_group_spanner * my_broken_l
+			 = (Axis_group_spanner*)broken_into_l_arr_[j];
+		    
+		    Spanner * broken_span_l 
+			= sp->find_broken_piece(((Score_elem*)my_broken_l)->line_l());
+		    
+		    if (broken_span_l) {
+			my_broken_l->add_element(broken_span_l );
+		    }
+		}
+	    } else if (0&&elt->item() && elt->item()->pcol_l_->breakpoint_b()
+		       && elt->item()->break_status_i() == 0) {
+		for (int j =0; j < 2; j++) {
+		    Item * my_item = elt->item()->broken_to_a_[j];
+		    Line_of_score * item_line_l_ = my_item->line_l() ;
+		    if ( ! item_line_l_ ) 
+			continue;
+		    
+		    Axis_group_spanner * v
+			= (Axis_group_spanner*)find_broken_piece( item_line_l_);
+		    if (v) {
+			v->add_element( my_item );
+		    }
+		}
+	    }
+	} else {
+	    Axis_group_spanner * my_broken_l
+		= (Axis_group_spanner*)find_broken_piece( elt->line_l() );
+	    my_broken_l->add_element( elt );
+	}
+    }
+    
+    Spanner::do_break_processing();
+}
+
+void
+Axis_group_spanner::do_print() const
+{
+    Axis_group_element::do_print();
+}
+
+
+
+IMPLEMENT_IS_TYPE_B2(Axis_group_spanner, Spanner, Axis_group_element);
diff -urN ../lilypond-0.1.1/lily/axis-group.cc ./lily/axis-group.cc
--- ../lilypond-0.1.1/lily/axis-group.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/axis-group.cc	Wed Aug  6 17:02:58 1997
@@ -0,0 +1,85 @@
+/*
+  axis-group.cc -- implement Axis_group_administration
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "interval.hh"
+#include "axis-group.hh"
+#include "score-elem.hh"
+#include "debug.hh"
+
+/** don't copy anything: an element can only be in one
+  Axis_group_element at one time.  */
+Axis_group_administration::Axis_group_administration(
+    Axis_group_administration const&)
+{
+}
+
+bool 
+Axis_group_administration::contains_b(Score_elem const *e)const
+{
+    return elem_l_arr_.find_l(e);
+}
+
+Interval
+Axis_group_administration::extent(Axis axis)const
+{
+    Interval r;
+    for (int i=0; i < elem_l_arr_.size(); i++) 
+	r.unite(elem_l_arr_[i]->extent(axis));
+    return r;
+}
+
+void
+Axis_group_administration::add_element(Score_elem*e,
+				       Axis_group_element*g, Axis a1, Axis a2)
+{
+    assert( ! e->axis_group_l_a_[a1] && !e->axis_group_l_a_[a2] );
+    e->axis_group_l_a_[a1] = g;
+    e->axis_group_l_a_[a2] = g;    
+    elem_l_arr_.push ( e);
+}
+
+
+
+void
+Axis_group_administration::remove_element(Score_elem*e, Axis a1, Axis a2)
+{
+    assert( contains_b( e));
+    elem_l_arr_.unordered_substitute(e,0);
+    
+    e->axis_group_l_a_[a1] = 0;
+    e->axis_group_l_a_[a2] = 0;    
+}
+
+void
+Axis_group_administration::remove_all(Axis a1, Axis a2)
+{
+    for (int i=0; i < elem_l_arr_.size(); i++) { 
+	Score_elem*e=elem_l_arr_[i];
+	e->axis_group_l_a_[a1] = 0;
+	e->axis_group_l_a_[a2] = 0;  
+    }
+    elem_l_arr_.set_size(0);
+}
+
+void
+Axis_group_administration::translate(Real dx, Axis a)
+{
+    Offset o(0,0);
+    o[a] = dx;
+    for (int i=0; i < elem_l_arr_.size(); i++) 
+	elem_l_arr_[i]->translate(o);
+}
+
+
+void    
+Axis_group_administration::print() const
+{
+#ifndef NPRINT
+    for (int i=0; i < elem_l_arr_.size(); i++) 
+	mtor << elem_l_arr_[i]->name() << ' ';
+#endif
+}
diff -urN ../lilypond-0.1.1/lily/axis.cc ./lily/axis.cc
--- ../lilypond-0.1.1/lily/axis.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/axis.cc	Wed Aug  6 21:50:30 1997
@@ -0,0 +1,16 @@
+/*
+  axis.cc -- implement Axis
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "axes.hh"
+#include "string.hh"
+
+String
+axis_name_str(Axis a)
+{
+    return String (a + 'x');
+}
diff -urN ../lilypond-0.1.1/lily/bar-column-grav.cc ./lily/bar-column-grav.cc
--- ../lilypond-0.1.1/lily/bar-column-grav.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/bar-column-grav.cc	Wed Aug  6 13:49:55 1997
@@ -0,0 +1,68 @@
+/*
+  bar-column-grav.cc -- implement Bar_column_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "bar-column-grav.hh"
+#include "bar-column.hh"
+#include "request.hh"
+#include "script.hh"
+#include "bar.hh"
+
+Bar_column_engraver::Bar_column_engraver()
+{
+    bar_l_ =0;
+    barcol_p_ =0;
+}
+
+
+void
+Bar_column_engraver::acknowledge_element(Score_elem_info info)
+{
+    if (info.elem_l_->is_type_b(Script::static_name()) &&
+	info.req_l_->command()) {
+	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 ( 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));
+    }
+
+    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_.set_size(0);
+    }
+}
+
+void
+Bar_column_engraver::do_pre_move_processing()
+{
+    if (barcol_p_) {
+	typeset_element( barcol_p_ );
+	barcol_p_ =0;
+    }
+}
+
+void
+Bar_column_engraver::do_post_move_processing()
+{
+    script_l_arr_.set_size(0);
+    bar_l_ =0;
+}
+
+IMPLEMENT_IS_TYPE_B1(Bar_column_engraver, Engraver);
+ADD_THIS_ENGRAVER(Bar_column_engraver);
diff -urN ../lilypond-0.1.1/lily/bar-column.cc ./lily/bar-column.cc
--- ../lilypond-0.1.1/lily/bar-column.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/bar-column.cc	Tue Aug  5 22:23:25 1997
@@ -0,0 +1,34 @@
+/*
+  bar-column.cc -- implement Bar_column
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "bar.hh"
+#include "bar-column.hh"
+
+Bar_column::Bar_column()
+{
+    bar_l_ =0;
+    breakable_b_ = true;
+}
+
+void
+Bar_column::set_bar(Bar*b)
+{
+    Script_column::add_support( b );
+    bar_l_ = b;	
+}
+
+void
+Bar_column::do_substitute_dependency(Score_elem*o,Score_elem*n)
+{
+    if ( o == bar_l_ ) {
+	bar_l_ = n ? (Bar*)n->item() : 0;
+    }
+}
+
+IMPLEMENT_IS_TYPE_B1(Bar_column, Script_column);
+
diff -urN ../lilypond-0.1.1/lily/bar-grav.cc ./lily/bar-grav.cc
--- ../lilypond-0.1.1/lily/bar-grav.cc	Mon Jul 28 23:56:55 1997
+++ ./lily/bar-grav.cc	Tue Aug  5 21:22:18 1997
@@ -55,7 +55,7 @@
 Bar_engraver::do_pre_move_processing()
 {
       if (bar_p_) {
-	  typeset_breakable_item(bar_p_);
+	  typeset_element(bar_p_);
 	  bar_p_ =0;
       }
 }
diff -urN ../lilypond-0.1.1/lily/bar-number-grav.cc ./lily/bar-number-grav.cc
--- ../lilypond-0.1.1/lily/bar-number-grav.cc	Thu Jan  1 01:00:00 1970
+++ ./lily/bar-number-grav.cc	Thu Aug  7 02:45:18 1997
@@ -0,0 +1,51 @@
+/*
+  bar-number-grav.cc -- implement Bar_number_grav
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "bar-number-grav.hh"
+#include "script.hh"
+#include "text-def.hh"
+#include "command-request.hh"
+#include "bar.hh"
+
+Bar_number_grav::Bar_number_grav()
+{
+    number_i_ =1;
+    script_p_ =0;
+}
+
+static Command_script_req dummy;
+
+void
+Bar_number_grav::acknowledge_element(Score_elem_info i)
+{
+    if (i.origin_grav_l_arr_.size() == 1 &&
+	i.elem_l_->is_type_b( Bar::static_name()) && !script_p_) {
+
+	script_p_ = new Script;
+	Text_def *td_p =new Text_def;
+	td_p->text_str_ = number_i_++;
+	script_p_->specs_l_ = td_p;
+	script_p_->breakable_b_ = true;
+	script_p_->dir_i_ = 1;
+
+	announce_element(Score_elem_info( script_p_, &dummy));
+    }
+}
+
+void
+Bar_number_grav::do_pre_move_processing()
+{
+    if ( script_p_ ) {
+	typeset_element(script_p_);
+	script_p_ =0;
+    }
+}
+
+IMPLEMENT_IS_TYPE_B1(Bar_number_grav,Engraver);
+ADD_THIS_ENGRAVER(Bar_number_grav);
diff -urN ../lilypond-0.1.1/lily/bar.cc ./lily/bar.cc
--- ../lilypond-0.1.1/lily/bar.cc	Mon Jul 28 23:56:55 1997
+++ ./lily/bar.cc	Tue Aug  5 21:19:14 1997
@@ -15,6 +15,7 @@
 
 Bar::Bar()
 {
+    breakable_b_ = true;
     type_str_ = "|";
     spanned_i_ = 0;
 }
diff -urN ../lilypond-0.1.1/lily/boxes.cc ./lily/boxes.cc
--- ../lilypond-0.1.1/lily/boxes.cc	Fri Aug  1 21:12:30 1997
+++ ./lily/boxes.cc	Wed Aug  6 14:20:10 1997
@@ -8,7 +8,7 @@
 
 Box::Box(Interval ix, Interval iy)
 {
-    x = ix;
-    y = iy;
+    x() = ix;
+    y() = iy;
 }
 
diff -urN ../lilypond-0.1.1/lily/clef-grav.cc ./lily/clef-grav.cc
--- ../lilypond-0.1.1/lily/clef-grav.cc	Mon Jul 28 23:56:55 1997
+++ ./lily/clef-grav.cc	Tue Aug  5 21:22:18 1997
@@ -106,7 +106,7 @@
 {
     if (!clef_p_)
 	return;
-    typeset_breakable_item(clef_p_);
+    typeset_element(clef_p_);
     clef_p_ = 0;
 }
     
diff -urN ../lilypond-0.1.1/lily/clef-item.cc ./lily/clef-item.cc
--- ../lilypond-0.1.1/lily/clef-item.cc	Mon Jul 28 23:56:54 1997
+++ ./lily/clef-item.cc	Tue Aug  5 21:18:14 1997
@@ -27,6 +27,7 @@
 
 Clef_item::Clef_item()
 {
+    breakable_b_ =true;
     default_b_ = false;
     change_b_ = true;
     read("violin");
diff -urN ../lilypond-0.1.1/lily/collision.cc ./lily/collision.cc
--- ../lilypond-0.1.1/lily/collision.cc	Mon Jul 28 23:56:54 1997
+++ ./lily/collision.cc	Wed Aug  6 17:26:06 1997
@@ -133,10 +133,14 @@
     Real inter_f = paper()->internote_f();
     Real wid_f = paper()->note_width();
     for (int j=0; j < 4; j++) {
-	if (col_l_a[j])
-	    col_l_a[j]->translate(Offset(x_off[j] * wid_f,
-					 y_off[j] * inter_f));
-	
+	if (col_l_a[j]) {
+	    /* collision.cc:138: request for method `translate' is ambiguous 
+	       
+	       (shaddup)
+	     */
+	    Offset o(x_off[j] * wid_f, y_off[j] * inter_f);
+	    ((Score_elem*)col_l_a[j])->translate(o);
+	}
     }
 }
 
diff -urN ../lilypond-0.1.1/lily/crescendo.cc ./lily/crescendo.cc
--- ../lilypond-0.1.1/lily/crescendo.cc	Wed Jul 30 23:34:22 1997
+++ ./lily/crescendo.cc	Wed Aug  6 16:24:48 1997
@@ -24,7 +24,7 @@
 Interval
 Crescendo::symbol_height()const
 {
-    return get_symbol().dim.y;
+    return get_symbol().dim[Y_AXIS];
 }
 
 static Real absdyn_dim = 10 PT;	// ugh
diff -urN ../lilypond-0.1.1/lily/elem-group.cc ./lily/elem-group.cc
--- ../lilypond-0.1.1/lily/elem-group.cc	Mon Aug  4 14:14:02 1997
+++ ./lily/elem-group.cc	Thu Aug  7 01:35:20 1997
@@ -1,5 +1,5 @@
 /*
- elem-group.cc -- implement Horizontal_vertical_group
+  elem-group.cc -- implement Horizontal_vertical_group
 
   source file of the GNU LilyPond music typesetter
 
@@ -11,195 +11,119 @@
 #include "item.hh"
 #include "debug.hh"
 
-bool
-Elbement_group::contains_b(Score_elem const*e)const
+void
+Axis_group_element::unlink()
 {
-    return elem_l_arr_.find_l(e);
+    remove_all();
+    Score_elem::unlink();
 }
 
-Elbement_group::Elbement_group(Elbement_group const &s)
-    : Score_elem(s)
-{
-}
 
-Interval
-Vertical_group::do_height()const 
+bool
+Axis_group_element::contains_b(Score_elem const*e)const
 {
-    Interval r;
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-	r.unite(elem_l_arr_[i]->height());
-    return r;
+    return axis_admin_.contains_b(e);
 }
 
-Interval
-Horizontal_group::do_width()const 
+Link_array<Score_elem>
+Axis_group_element::get_extra_dependencies()const
 {
-    Interval r;
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-	if (elem_l_arr_[i]->item()) // makes no at preprocessing for spanners. 
-	    r.unite(elem_l_arr_[i]->width());
-    return r;
+    return axis_admin_.elem_l_arr_;
 }
 
-
-IMPLEMENT_IS_TYPE_B1(Horizontal_group, Elbement_group);
-IMPLEMENT_IS_TYPE_B1(Vertical_group, Elbement_group);
-
-
 void
-Elbement_group::add_element(Score_elem*i_l)
+Axis_group_element::do_print()const
 {
-    assert(i_l!= this);
-    assert(! contains_b(i_l));
-
-    elem_l_arr_.push(i_l);
-    add_dependency(i_l);
+    axis_admin_.print();
 }
+// ****************
+
 
 void
-Horizontal_group::add_element(Score_elem*elt)
+Vertical_group::add_element(Score_elem*e)
 {
-    assert ( !elt->x_group_l_ );
-    elt->x_group_l_ = this;
-    Elbement_group::add_element(elt);
+    axis_admin_.add_element(e, this, Y_AXIS, Y_AXIS);
 }
 
 void
-Vertical_group::add_element(Score_elem*e)
+Vertical_group::remove_element(Score_elem*e)
 {
-    assert( ! e->y_group_l_ );
-    e->y_group_l_ = this;
-
-    Elbement_group::add_element(e);
+    axis_admin_.remove_element(e, Y_AXIS, Y_AXIS);
 }
 
 
 void
-Horizontal_group::translate_x(Real x)
+Vertical_group::translate_y(Real dy)
 {
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-	elem_l_arr_[i]->translate_x(x);
+    axis_admin_.translate(dy, Y_AXIS);
 }
 
-void
-Vertical_group::translate_y(Real y)
+Interval
+Vertical_group::do_height() const
 {
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-	elem_l_arr_[i]->translate_y(y);
+    return axis_admin_.extent(Y_AXIS);
 }
-
-
-IMPLEMENT_IS_TYPE_B1(Elbement_group, Score_elem);
-
 void
-Elbement_group::do_print() const
+Vertical_group::remove_all()
 {
-#ifndef NPRINT
-    for (int i=0; i < elem_l_arr_.size(); i++) 
-	mtor << elem_l_arr_[i]->name() << ' ';
-#endif
+    axis_admin_.remove_all(Y_AXIS,Y_AXIS);
 }
+// ****************
 
 void
-Horizontal_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
+Horizontal_group::remove_all()
 {
-    int i;
-
-    while ((i=elem_l_arr_.find_i(old))>=0) {
-	old->x_group_l_ =0;
-	
-	if (new_l){ 
-	    new_l->x_group_l_ = this;
-	    elem_l_arr_[i] = new_l;
-	}else {	    
-	    elem_l_arr_.unordered_del(i);
-	}
-    }
+    axis_admin_.remove_all(X_AXIS,X_AXIS);
 }
 
 void
-Vertical_group::do_substitute_dependency(Score_elem* old, Score_elem *new_l)
+Horizontal_group::add_element(Score_elem*e)
 {
-    int i;
-
-    while ((i=elem_l_arr_.find_i(old))>=0) {
-	old->y_group_l_ =0;
-	
-	if (new_l){ 
-	    new_l->y_group_l_ =this;
-	    elem_l_arr_[i] = new_l;
-	}else {	    
-	    elem_l_arr_.unordered_del(i);
-	}
-    }
+    axis_admin_.add_element(e,this, X_AXIS,X_AXIS);
 }
 
-Vertical_group::Vertical_group(Vertical_group 
-			       const &s)
-    : Elbement_group(s)
+void
+Horizontal_group::remove_element(Score_elem*e)
 {
+    axis_admin_.remove_element(e,X_AXIS,X_AXIS);
 }
 
-Horizontal_group::Horizontal_group(Horizontal_group 
-				   const &s)
-       : Elbement_group(s)
-{
-}
 
-Elbement_group::Elbement_group()
+void
+Horizontal_group::translate_x(Real dx)
 {
-    transparent_b_ = true;
+    axis_admin_.translate(dx, X_AXIS);
 }
 
-IMPLEMENT_IS_TYPE_B2(Horizontal_vertical_group, Horizontal_group, Vertical_group);
-
-
-Horizontal_vertical_group::Horizontal_vertical_group()
+Interval
+Horizontal_group::do_width()const
 {
+    return axis_admin_.extent(X_AXIS);
 }
 
-void
-Horizontal_vertical_group::do_substitute_dependency(Score_elem*o,Score_elem*n)
-{
-    Vertical_group::do_substitute_dependency(o,n);
-    Horizontal_group::do_substitute_dependency(o,n);
-}
 
-void
-Horizontal_vertical_group::add_element(Score_elem*e)
-{
-    Vertical_group::add_element(e);
-    Horizontal_group::add_element(e);
-}
+// ****************
 
 void
-Horizontal_vertical_group::do_print()const
+Horizontal_vertical_group::remove_all()
 {
-    Vertical_group::do_print();
+    axis_admin_.remove_all(X_AXIS,Y_AXIS);
 }
-
 void
-Vertical_group::do_print()const
+Horizontal_vertical_group::add_element(Score_elem *e)
 {
-    Elbement_group::do_print();
+    axis_admin_.add_element(e, this, X_AXIS, Y_AXIS);
 }
 
 void
-Horizontal_group::do_print() const
+Horizontal_vertical_group::remove_element(Score_elem*e)
 {
-    Elbement_group::do_print();
+    axis_admin_.remove_element(e, X_AXIS, Y_AXIS);
 }
 
 
 
-void
-Vertical_group::remove_element(Score_elem*s)
-{
-    remove_dependency( s );
-}
-
-void
-Horizontal_group::remove_element(Score_elem*s)
-{
-    remove_dependency( s );
-}
+IMPLEMENT_IS_TYPE_B1(Axis_group_element, Score_elem);
+IMPLEMENT_IS_TYPE_B1(Horizontal_group, Axis_group_element);
+IMPLEMENT_IS_TYPE_B1(Vertical_group, Axis_group_element);
+IMPLEMENT_IS_TYPE_B2(Horizontal_vertical_group, Horizontal_group, Vertical_group);
diff -urN ../lilypond-0.1.1/lily/engraver.cc ./lily/engraver.cc
--- ../lilypond-0.1.1/lily/engraver.cc	Mon Jul 28 23:56:54 1997
+++ ./lily/engraver.cc	Tue Aug  5 21:22:18 1997
@@ -97,12 +97,6 @@
     return daddy_grav_l_->paper();
 }
 
-void
-Engraver::typeset_breakable_item(Item * nobreak_p)
-{
-    daddy_grav_l_->typeset_breakable_item(nobreak_p);
-}
-
 bool
 Engraver::contains_b(Engraver *grav_l)const
 {
diff -urN ../lilypond-0.1.1/lily/global-performers.cc ./lily/global-performers.cc
--- ../lilypond-0.1.1/lily/global-performers.cc	Mon Jul 21 22:28:34 1997
+++ ./lily/global-performers.cc	Thu Aug  7 13:45:05 1997
@@ -1,5 +1,5 @@
 /*
-  global-translators.cc -- implement 
+  global-performers.cc -- implement 
 
   source file of the GNU LilyPond music typesetter
 
diff -urN ../lilypond-0.1.1/lily/head-column.cc ./lily/head-column.cc
--- ../lilypond-0.1.1/lily/head-column.cc	Mon Jul 28 23:56:54 1997
+++ ./lily/head-column.cc	Wed Aug  6 16:52:43 1997
@@ -10,6 +10,7 @@
 #include "head-column.hh"
 #include "note-head.hh"
 #include "stem.hh"
+#include "script.hh"
 
 Head_column::Head_column()
 {
@@ -36,9 +37,18 @@
 Head_column::set(Stem*stem_l)
 {
     stem_l_ = stem_l;
-    add_dependency(stem_l);
+    Score_elem::add_dependency(stem_l);
+    for (int i=0; script_l_arr_.size(); i++)
+	script_l_arr_[i]->set_stem( stem_l );
 }
 
+void
+Head_column::add(Script *script_l)
+{
+    Script_column::add(script_l) ;
+    if  (stem_l_ )
+	script_l->set_stem( stem_l_ );
+}
 void
 Head_column::add(Note_head *n_l)
 {
diff -urN ../lilypond-0.1.1/lily/horizontal-group-item.cc ./lily/horizontal-group-item.cc
--- ../lilypond-0.1.1/lily/horizontal-group-item.cc	Tue Aug  5 01:43:19 1997
+++ ./lily/horizontal-group-item.cc	Thu Aug  7 13:21:03 1997
@@ -9,33 +9,10 @@
 #include "p-col.hh"
 #include "horizontal-group-item.hh"
 
-IMPLEMENT_IS_TYPE_B2(Horizontal_group_item, Horizontal_group, Item);
+IMPLEMENT_IS_TYPE_B2(Horizontal_group_item, Horizontal_group, Axis_group_item);
 
 void
-Horizontal_group_item::OK() const
-{
-    for (int i=0; i < elem_l_arr_.size(); i++) {
-	Item * it_l = elem_l_arr_[i]->item();
-	
-	assert(it_l&& it_l->pcol_l_ == pcol_l_ );
-    }
-}
-
-void
-Horizontal_group_item::do_breakable_col_processing()
-{
-    if (!pcol_l_->breakable_b())
-	return;
-    OK();
-    copy_breakable_items();
-    
-    Link_array<Score_elem> elems = elem_l_arr_;
-
-    for (int i=0; i < elems.size(); i++) {
-	Item* it_l = elems[i]->item();
-	for ( int j=0; j < 2; j++) {
-	    Item *new_l = it_l->find_prebroken_piece(broken_to_a_[j]->pcol_l_);
-	    ((Horizontal_group_item*)broken_to_a_[j])->add_element( new_l );
-	}
-    }
+Horizontal_group_item::do_print() const
+{ 
+    Axis_group_item::do_print(); 
 }
diff -urN ../lilypond-0.1.1/lily/include/audio-column.hh ./lily/include/audio-column.hh
--- ../lilypond-0.1.1/lily/include/audio-column.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/audio-column.hh	Thu Aug  7 13:45:05 1997
@@ -0,0 +1,38 @@
+/*
+  audio-column.hh -- declare Audio_column
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+ */
+
+#ifndef AUDIO_COLUMN_HH
+#define AUDIO_COLUMN_HH
+
+#include "proto.hh"
+#include "plist.hh"
+#include "lily-proto.hh"
+#include "moment.hh"
+
+
+/**
+    generic audio grouped vertically.
+ */
+
+class Audio_column { 
+public:
+    Audio_column( Moment at_mom );
+
+    void add( Audio_item* i_l );
+    Moment at_mom() const;
+    void print() const;
+
+    Link_list<Audio_item *> audio_item_l_list_;
+    Audio_score * audio_score_l_;
+
+private:
+    Audio_column( Audio_column const& );
+
+    Moment at_mom_;
+};
+
+
+#endif // AUDIO_COLUMN_HH
diff -urN ../lilypond-0.1.1/lily/include/audio-item.hh ./lily/include/audio-item.hh
--- ../lilypond-0.1.1/lily/include/audio-item.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/audio-item.hh	Thu Aug  7 13:45:05 1997
@@ -0,0 +1,84 @@
+/*
+  audio-item.hh -- declare Audio_items
+
+  (c) 1996, 1997 Jan Nieuwenhuizen <jan@digicash.com>
+ */
+
+#ifndef AUDIO_ITEM_HH
+#define AUDIO_ITEM_HH
+
+#include "lily-proto.hh"
+#include "string.hh"
+
+/**
+  Any piece of audio information.
+  We need virtual constructors, 
+  let's try decentralised factory for specific audio implemenations.
+ */
+struct Audio_item {
+    Audio_item( Request* req_l );
+
+    /// Create a midi-item from myself.
+    virtual Midi_item* midi_item_p() = 0;
+
+#if 0
+    /// Not implemented. Anyone?
+    virtual Niff_item* niff_item_p() = 0;
+
+    /// Not implemented. Anyone?
+    virtual Cscore_item* score_item_p() = 0;
+#endif
+    
+    Audio_column* audio_column_l_;
+    Request* req_l_;
+
+private:
+    Audio_item( Audio_item const& );
+    Audio_item& operator=( Audio_item const& );
+};
+
+struct Audio_key : public Audio_item {
+    Audio_key( Request* req_l );
+
+    virtual Midi_item* midi_item_p();
+};
+
+#if 0
+struct Audio_instrument : public Audio_item {
+    Audio_instrument( Request* req_l );
+};
+#endif
+                                      
+struct Audio_note : public Audio_item {
+    Audio_note( Request* req_l, bool on_b );
+    virtual Midi_item* midi_item_p();
+    bool on_b_;
+};
+
+struct Audio_text : Audio_item {
+    enum Type { 
+	TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, 
+	MARKER, CUE_POINT
+    };
+
+    Audio_text( Audio_text::Type type, String text_str );
+    virtual Midi_item* midi_item_p();
+
+    Type type_;
+    String text_str_;
+};
+
+struct Audio_tempo : Audio_item {
+    Audio_tempo( int per_minute_4_i );
+    virtual Midi_item* midi_item_p();
+
+    int per_minute_4_i_;
+};
+
+struct Audio_meter : Audio_item {
+    Audio_meter( Request* req_l );
+    virtual Midi_item* midi_item_p();
+};
+
+#endif // AUDIO_ITEM_HH
+
diff -urN ../lilypond-0.1.1/lily/include/audio-score.hh ./lily/include/audio-score.hh
--- ../lilypond-0.1.1/lily/include/audio-score.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/audio-score.hh	Thu Aug  7 13:45:05 1997
@@ -0,0 +1,35 @@
+/*
+  audio-score.hh -- declare Audio_score
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+ */
+
+#ifndef AUDIO_SCORE_HH
+#define AUDIO_SCORE_HH
+
+#include "proto.hh"
+#include "parray.hh"
+#include "plist.hh"
+
+/** all stuff which goes onto midi. notes, signs, symbols in a score
+     #Audio_score# contains the items, the columns.
+    
+    */
+
+class Audio_score {
+public:
+    Audio_score( Midi_def* );
+
+    void add( Audio_column* );
+
+//    void output(Tex_stream &ts);
+
+    void play( Audio_item* i, Audio_column* c );
+    void print() const;
+    void process();
+
+    Pointer_list<Audio_column*> audio_column_p_list_;
+    Midi_def *midi_l_;
+};
+
+#endif // AUDIO_SCORE_HH
diff -urN ../lilypond-0.1.1/lily/include/axes.hh ./lily/include/axes.hh
--- ../lilypond-0.1.1/lily/include/axes.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/axes.hh	Wed Aug  6 16:04:10 1997
@@ -0,0 +1,24 @@
+
+/*
+  axes.hh -- declare 
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef AXES_HH
+#define AXES_HH
+
+enum Axis {
+    X_AXIS =0,
+    Y_AXIS =1,
+    NO_AXES=2,
+};
+
+class String;
+
+String axis_name_str(Axis);
+
+#endif // AXES_HH
diff -urN ../lilypond-0.1.1/lily/include/axis-group-item.hh ./lily/include/axis-group-item.hh
--- ../lilypond-0.1.1/lily/include/axis-group-item.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/axis-group-item.hh	Wed Jan  1 00:00:00 1997
@@ -0,0 +1,26 @@
+/*
+  axis-item.hh -- declare Axis_group_item
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef AXIS_ITEM_HH
+#define AXIS_ITEM_HH
+
+#include "axis-group.hh" 
+#include "item.hh"
+
+class Axis_group_item : public virtual Axis_group_element, public Item {
+protected:
+    virtual void do_breakable_col_processing();
+    void OK()const;
+    virtual void do_print() const;
+public:
+    DECLARE_MY_RUNTIME_TYPEINFO;
+
+};
+
+#endif // AXIS_ITEM_HH
diff -urN ../lilypond-0.1.1/lily/include/axis-group-spanner.hh ./lily/include/axis-group-spanner.hh
--- ../lilypond-0.1.1/lily/include/axis-group-spanner.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/axis-group-spanner.hh	Wed Jan  1 00:00:00 1997
@@ -0,0 +1,28 @@
+/*
+  axis-group-spanner.hh -- declare Axis_group_spanner
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SPAN_AXIS_GROUP_HH
+#define SPAN_AXIS_GROUP_HH
+
+#include "spanner.hh"
+#include "axis-group.hh"
+
+/** An element which groups a line. Due to technical problems, this
+   cannot be used as a baseclass */
+class Axis_group_spanner : public Spanner, public virtual Axis_group_element
+{
+protected:
+    virtual void do_break_processing();
+    virtual void do_print()const;
+
+public:
+    DECLARE_MY_RUNTIME_TYPEINFO;
+};
+
+#endif // SPAN_AXIS_GROUP_HH
diff -urN ../lilypond-0.1.1/lily/include/axis-group.hh ./lily/include/axis-group.hh
--- ../lilypond-0.1.1/lily/include/axis-group.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/axis-group.hh	Wed Jan  1 00:00:00 1997
@@ -0,0 +1,54 @@
+/*
+axis-group.hh -- declare Axis_group_administration, Axis_group_element
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef Axis_group_administration_HH
+#define Axis_group_administration_HH
+
+#include "parray.hh"
+#include "axes.hh"
+#include "real.hh"
+#include "lily-proto.hh"
+#include "score-elem.hh"
+/**
+  Do the dirty work for Axis_group_element.
+ */
+struct Axis_group_administration {
+    Link_array<Score_elem> elem_l_arr_;
+    
+    void translate(Real, Axis);
+    Interval extent(Axis)const;
+    void print() const ;
+    Axis_group_administration(Axis_group_administration const&);
+    Axis_group_administration(){}
+    void remove_all(Axis a1,Axis a2);
+    
+    bool contains_b(Score_elem const *)const;
+    void add_element(Score_elem*, Axis_group_element*, Axis a1, Axis a2);
+    void remove_element(Score_elem*, Axis a1, Axis a2);
+};
+
+/** 
+  Treat a group of elements a unity in either or both axis sense .
+  This is a wrapper around Axis_group_administration
+  */
+class Axis_group_element : public virtual Score_elem {
+protected:
+    Axis_group_administration axis_admin_;
+    virtual void do_print()const;
+    virtual Link_array<Score_elem> get_extra_dependencies()const;
+    virtual void unlink();
+
+public:
+    virtual void remove_all()=0;
+    virtual void add_element(Score_elem*)=0;
+    virtual void remove_element(Score_elem*)=0;
+    virtual bool contains_b(Score_elem const *)const;
+    DECLARE_MY_RUNTIME_TYPEINFO;
+};
+#endif // Axis_group_administration_HH
diff -urN ../lilypond-0.1.1/lily/include/bar-column-grav.hh ./lily/include/bar-column-grav.hh
--- ../lilypond-0.1.1/lily/include/bar-column-grav.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/bar-column-grav.hh	Tue Aug  5 21:05:04 1997
@@ -0,0 +1,31 @@
+/*
+  bar-column-grav.hh -- declare Bar_column_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef BAR_COLUMN_GRAV_HH
+#define BAR_COLUMN_GRAV_HH
+
+#include "engraver.hh"
+
+/// couple bars and appropriate scripts
+class Bar_column_engraver :public Engraver {
+    Bar_column *barcol_p_;
+    Array< Script * >  script_l_arr_;
+
+    Bar *bar_l_;
+    
+protected:
+    virtual void acknowledge_element(Score_elem_info);
+    virtual void do_pre_move_processing();
+    virtual void do_post_move_processing();
+public:
+    Bar_column_engraver();
+    DECLARE_MY_RUNTIME_TYPEINFO;
+};
+
+#endif // BAR_COLUMN_GRAV_HH
diff -urN ../lilypond-0.1.1/lily/include/bar-column.hh ./lily/include/bar-column.hh
--- ../lilypond-0.1.1/lily/include/bar-column.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/bar-column.hh	Wed Aug  6 14:06:33 1997
@@ -0,0 +1,32 @@
+/*
+  bar-column.hh -- declare Bar_column
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef BAR_COLUMN_HH
+#define BAR_COLUMN_HH
+
+#include "script-column.hh"
+
+/**  
+  The scripts  over  a and the bar itself.
+ */
+class Bar_column : public Script_column {
+    Bar * bar_l_;
+
+public:
+    Bar_column();
+    void set_bar ( Bar*);
+protected:
+    SCORE_ELEM_CLONE(Bar_column);
+    void do_substitute_dependency(Score_elem*,Score_elem*);
+    DECLARE_MY_RUNTIME_TYPEINFO;
+protected:
+    
+};
+
+#endif // BAR_COLUMN_HH
diff -urN ../lilypond-0.1.1/lily/include/bar-number-grav.hh ./lily/include/bar-number-grav.hh
--- ../lilypond-0.1.1/lily/include/bar-number-grav.hh	Thu Jan  1 01:00:00 1970
+++ ./lily/include/bar-number-grav.hh	Wed Aug  6 14:00:18 1997
@@ -0,0 +1,29 @@
+/*
+  bar-number-grav.hh -- declare Bar_number_grav
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef BAR_NUMBER_GRAV_HH
+#define BAR_NUMBER_GRAV_HH
+
+#include "engraver.hh"
+
+/**
+  catch bars, and put a number over them.
+ */
+class Bar_number_grav : public Engraver {
+    Script * script_p_;
+    int number_i_;
+protected:
+
+    void acknowledge_element(Score_elem_info);
+    void do_pre_move_processing();
+public:
+    Bar_number_grav();
+    DECLARE_MY_RUNTIME_TYPEINFO;
+};
+#endif // BAR_NUMBER_GRAV_HH
diff -urN ../lilypond-0.1.1/lily/include/boxes.hh ./lily/include/boxes.hh
--- ../lilypond-0.1.1/lily/include/boxes.hh	Mon May 12 23:09:59 1997
+++ ./lily/include/boxes.hh	Wed Aug  6 16:49:29 1997
@@ -9,19 +9,28 @@
 #include "real.hh"
 #include "interval.hh"
 #include "offset.hh"
+#include "axes.hh"
 
-/// a square subset of Real^2
 struct Box {
-    Interval x, y;
-
+    Interval interval_a_[NO_AXES];
+    
+    Interval &x() {return interval_a_[X_AXIS]; }
+    Interval &y(){ return interval_a_[Y_AXIS]; }
+    Interval x()const{ return interval_a_[X_AXIS]; }
+    Interval y()const{return interval_a_[Y_AXIS]; }
+    Interval operator[](Axis a ) {
+	return interval_a_[a];
+    }
+    
     void translate(Offset o) {
-	x.translate(o.x);
-	y.translate(o.y);
+	x().translate(o.x());
+	y().translate(o.y());
     }
+
     /// smallest box enclosing #b#
     void unite(Box b) {
-	x.unite(b.x);
-	y.unite(b.y);
+	x().unite(b.x());
+	y().unite(b.y());
     }
     Box();
     Box(Interval ix, Interval iy);
diff -urN ../lilypond-0.1.1/lily/include/collision.hh ./lily/include/collision.hh
--- ../lilypond-0.1.1/lily/include/collision.hh	Wed Jul 30 23:27:32 1997
+++ ./lily/include/collision.hh	Tue Aug  5 23:21:11 1997
@@ -12,7 +12,11 @@
 #include "lily-proto.hh"
 #include "item.hh"
 
-/** TODO 
+/**
+  Resolve conflicts between various Note_columns (chords).
+  
+ 
+  TODO 
 
   multistaff support (see Chlapik: equal noteheads should be on the
   same hpos.)  
diff -urN ../lilypond-0.1.1/lily/include/elem-group-item.hh ./lily/include/elem-group-item.hh
--- ../lilypond-0.1.1/lily/include/elem-group-item.hh	Tue Aug  5 01:16:58 1997
+++ ./lily/include/elem-group-item.hh	Thu Aug  7 13:40:06 1997
@@ -10,15 +10,25 @@
 #ifndef ELEM_GROUP_ITEM_HH
 #define ELEM_GROUP_ITEM_HH
 
+#include "axis-group-item.hh"
 #include "elem-group.hh"
-#include "item.hh"
 
-class Horizontal_vertical_group_item  : public Item, public Horizontal_vertical_group {
+
+/**
+  Treat a collection of items as a unity
+ */
+class Horizontal_vertical_group_item  : public Axis_group_item, public Horizontal_vertical_group {
+protected:
+    virtual void do_print() const;
+    virtual void remove_all() { Horizontal_vertical_group::remove_all(); }
 public:
+    virtual void add_element(Score_elem*e) { Horizontal_vertical_group::add_element(e); }
+    virtual void remove_element(Score_elem*e) { Horizontal_vertical_group::remove_element(e); }
+
     DECLARE_MY_RUNTIME_TYPEINFO;
     SCORE_ELEM_CLONE(Horizontal_vertical_group_item);
-protected:
-    virtual void do_print() const;
+  
+	
 };
 
 #endif // ELEM_GROUP_ITEM_HH
diff -urN ../lilypond-0.1.1/lily/include/elem-group.hh ./lily/include/elem-group.hh
--- ../lilypond-0.1.1/lily/include/elem-group.hh	Mon Aug  4 14:56:30 1997
+++ ./lily/include/elem-group.hh	Thu Aug  7 13:24:44 1997
@@ -11,49 +11,38 @@
 #define ELEM_GROUP_HH
 
 #include "score-elem.hh"
+#include "axis-group.hh"
 
-class Elbement_group: public virtual Score_elem {
-protected:
-    Link_array<Score_elem> elem_l_arr_;
-    
-    virtual void do_print() const ;
-public:
-    Elbement_group(Elbement_group const&);
-    Elbement_group();
-    bool contains_b(Score_elem const *)const;
-    void add_element(Score_elem*);
-    DECLARE_MY_RUNTIME_TYPEINFO;
-};
 
-class Horizontal_group : public Elbement_group {
-public:
-    DECLARE_MY_RUNTIME_TYPEINFO;
-    Horizontal_group(){}
-    void add_element(Score_elem*);
-    Horizontal_group(Horizontal_group const&);
-    void remove_element(Score_elem*);
 
+/**
+  Treat a group of elements a unity in horizontal sense .
+  A column is a typical Vertical_group.
+ */
+class Horizontal_group : public virtual Axis_group_element {
 protected:
-    virtual Horizontal_group * horizontal_group() { return this; }
-    virtual void do_substitute_dependency(Score_elem*,Score_elem*);
-    virtual void do_print() const ;
+    virtual void remove_all();
     virtual void translate_x(Real);
     virtual Interval do_width()const;
-};
 
-class Vertical_group : public Elbement_group {
+public:
+    DECLARE_MY_RUNTIME_TYPEINFO;
+    virtual void add_element(Score_elem*);
+    virtual void remove_element(Score_elem*);
+
+};
+/**
+  Like Horizontal_group, but in X direction
+ */
+class Vertical_group : public virtual Axis_group_element {
 protected:
     virtual void translate_y(Real);
-    virtual void do_print() const ;
     virtual Interval do_height()const;
-    virtual void do_substitute_dependency(Score_elem*,Score_elem*);
-    virtual Vertical_group * vertical_group() { return this; }
+    virtual void remove_all();
+
 public:
-    void add_element(Score_elem*);
-    void remove_element(Score_elem*);
-    
-    Vertical_group(Vertical_group const &);
-    Vertical_group(){}
+    virtual void add_element(Score_elem*);
+    virtual void remove_element(Score_elem*);
     DECLARE_MY_RUNTIME_TYPEINFO;
 };
 
@@ -65,14 +54,12 @@
 				  public Horizontal_group 
 {  
 protected:
-    virtual Horizontal_vertical_group* elem_group() { return this; }
+    virtual void remove_all();
 public:
-    Horizontal_vertical_group();
-    bool contains_b(Score_elem const *)const;
-    DECLARE_MY_RUNTIME_TYPEINFO;
-    virtual void do_substitute_dependency(Score_elem*,Score_elem*);
-    virtual void do_print() const;
-    void add_element(Score_elem*);
+    virtual void add_element(Score_elem*);
+    virtual void remove_element(Score_elem*);
+    
+    DECLARE_MY_RUNTIME_TYPEINFO;    
 };
 
 #endif // ELEM_GROUP_HH
diff -urN ../lilypond-0.1.1/lily/include/engraver.hh ./lily/include/engraver.hh
--- ../lilypond-0.1.1/lily/include/engraver.hh	Wed Jul 30 23:27:32 1997
+++ ./lily/include/engraver.hh	Tue Aug  5 21:12:41 1997
@@ -65,11 +65,6 @@
     virtual void do_removal_processing() {}
 
     /**
-      typeset a "command" item. Default: pass on to daddy.
-      If the column is not breakable, #pre_p# and #post_p# are junked
-      */
-    virtual void typeset_breakable_item(Item * nobreak_p);
-    /**
       Invoke walker method to typeset element. Default: pass on to daddy.
       */
     virtual void typeset_element(Score_elem*elem_p);
diff -urN ../lilypond-0.1.1/lily/include/head-column.hh ./lily/include/head-column.hh
--- ../lilypond-0.1.1/lily/include/head-column.hh	Wed Jul 30 23:27:32 1997
+++ ./lily/include/head-column.hh	Tue Aug  5 23:54:02 1997
@@ -12,6 +12,9 @@
 
 #include "script-column.hh"
 
+/**
+  Scripts and rests/noteheads
+ */
 class Head_column : public Script_column
 { 
 public:
@@ -27,7 +30,7 @@
     Stem* stem_l_;
 
     void add(Note_head*);
-    void add(Script*s) { Script_column::add(s) ; }
+    virtual void add(Script*s);
     virtual void set(Stem*);
     Head_column();
     DECLARE_MY_RUNTIME_TYPEINFO;
diff -urN ../lilypond-0.1.1/lily/include/head-grav.hh ./lily/include/head-grav.hh
--- ../lilypond-0.1.1/lily/include/head-grav.hh	Wed Jul 30 23:27:32 1997
+++ ./lily/include/head-grav.hh	Tue Aug  5 23:27:15 1997
@@ -9,17 +9,22 @@
 #define HEADGRAV_HH
 #include "engraver.hh"
 
-struct Note_head_engraver : Engraver {
+/**
+  make balls and rests
+ */
+class Note_head_engraver : public Engraver {
     Note_head* note_p_;
     Rhythmic_req * note_req_l_;
     
-    /* *************** */
+public:
     Note_head_engraver();
+    DECLARE_MY_RUNTIME_TYPEINFO;
+protected:
     virtual bool do_try_request(Request *req_l) ;
     virtual void do_process_requests();
     virtual void do_pre_move_processing();
     virtual void do_post_move_processing();
-    DECLARE_MY_RUNTIME_TYPEINFO;
+
 };
 
 
diff -urN ../lilypond-0.1.1/lily/include/horizontal-group-item.hh ./lily/include/horizontal-group-item.hh
--- ../lilypond-0.1.1/lily/include/horizontal-group-item.hh	Tue Aug  5 01:38:35 1997
+++ ./lily/include/horizontal-group-item.hh	Thu Aug  7 14:09:31 1997
@@ -11,15 +11,19 @@
 #define HORIZONTAL_GROUP_ITEM_HH
 
 #include "elem-group.hh"
-#include "item.hh"
+#include "axis-group-item.hh"
 
-class Horizontal_group_item : public Item, public Horizontal_group {
+class Horizontal_group_item : public Axis_group_item, public Horizontal_group {
+protected:
+    virtual void remove_all() { Horizontal_group::remove_all(); }
+    virtual void do_print() const;
+public:
+    virtual void add_element(Score_elem*e) { Horizontal_group::add_element(e); }
+    virtual void remove_element(Score_elem*e) { Horizontal_group::remove_element(e); }
     DECLARE_MY_RUNTIME_TYPEINFO;
     SCORE_ELEM_CLONE(Horizontal_group_item);
-protected:
-    virtual void do_breakable_col_processing();
-    void OK()const;
-    virtual void do_print() const { Elbement_group::do_print(); }
+  
+
 };
 
 #endif // HORIZONTAL_GROUP_ITEM_HH
diff -urN ../lilypond-0.1.1/lily/include/input-translator.hh ./lily/include/input-translator.hh
--- ../lilypond-0.1.1/lily/include/input-translator.hh	Mon Jul 28 15:36:51 1997
+++ ./lily/include/input-translator.hh	Tue Aug  5 23:31:01 1997
@@ -24,7 +24,10 @@
     ~Input_translator_list(){}
 };
 
-struct Input_translator : Input { 
+/** Define a intereter for music. This is an runtime interface to the
+ typesystem */
+class Input_translator : public Input { 
+public:
     Input_translator_list contains_itrans_p_list_;
     Array<String> consists_str_arr_;
     Array<String> alias_str_arr_;
diff -urN ../lilypond-0.1.1/lily/include/item.hh ./lily/include/item.hh
--- ../lilypond-0.1.1/lily/include/item.hh	Mon Aug  4 14:02:38 1997
+++ ./lily/include/item.hh	Tue Aug  5 23:27:56 1997
@@ -14,7 +14,7 @@
 #include "score-elem.hh"
 
 /**
- a horizontally fixed size element of the score
+  A horizontally fixed size element of the score.
 
   Item is the datastructure for printables whose width is known
   before the spacing is calculated
@@ -30,7 +30,9 @@
     
     Item * broken_to_a_[2];
 
-    // nobreak = 0, pre =1, post = 2
+    /// should be put in a breakable col.
+    bool breakable_b_;
+    /// nobreak = 0, pre =1, post = 2
     int break_status_i()const;
     Item * find_prebroken_piece(PCol*)const;
     Item * find_prebroken_piece(Line_of_score*)const;    
diff -urN ../lilypond-0.1.1/lily/include/key-grav.hh ./lily/include/key-grav.hh
--- ../lilypond-0.1.1/lily/include/key-grav.hh	Wed Jul 30 23:27:32 1997
+++ ./lily/include/key-grav.hh	Tue Aug  5 23:40:11 1997
@@ -13,7 +13,14 @@
 #include "engraver.hh"
 #include "key.hh"
 
-struct Key_engraver : Engraver {
+/**
+  Make the key signature.
+ */
+class Key_engraver : public Engraver {
+    void create_key();
+    void read_req(Key_change_req * r);
+
+public:
     Key key_;
     Key_change_req * keyreq_l_;
     Key_item * kit_p_;
@@ -21,17 +28,15 @@
     bool default_key_b_;
     bool change_key_b_;
     
+protected:
     virtual bool do_try_request(Request *req_l);
     virtual void do_process_requests();
     virtual void do_pre_move_processing();
     virtual void do_post_move_processing();
     virtual void acknowledge_element(Score_elem_info);
+public:
     Key_engraver();
     DECLARE_MY_RUNTIME_TYPEINFO;
-private:
-    void create_key();
-    
-    void read_req(Key_change_req * r);
 };
 
 #endif // KEYGRAV_HH
diff -urN ../lilypond-0.1.1/lily/include/key-item.hh ./lily/include/key-item.hh
--- ../lilypond-0.1.1/lily/include/key-item.hh	Wed Jul 30 23:27:32 1997
+++ ./lily/include/key-item.hh	Tue Aug  5 23:31:31 1997
@@ -19,7 +19,6 @@
     bool default_b_;
 
     
-    /* *************** */
     DECLARE_MY_RUNTIME_TYPEINFO;
     SCORE_ELEM_CLONE(Key_item);
 
@@ -27,6 +26,7 @@
     void add(int pitch, int acc);
     void read(const Key_engraver&);
     void set_c_position(int);
+protected:
     virtual void do_pre_processing();
     Molecule* brew_molecule_p()const;
 };
diff -urN ../lilypond-0.1.1/lily/include/lily-proto.hh ./lily/include/lily-proto.hh
--- ../lilypond-0.1.1/lily/include/lily-proto.hh	Wed Jan  1 00:00:00 1997
+++ ./lily/include/lily-proto.hh	Wed Jan  1 00:00:00 1997
@@ -10,11 +10,22 @@
 #define LILY_PROTO_HH
 #include "proto.hh"
 
-struct My_lily_lexer;
+
 struct Absolute_dynamic_req;
+struct Axis_group_element;
+struct Axis_group;
 struct Translator;
+struct Audio_column;
+struct Audio_item;
+struct Audio_key;
+struct Audio_meter;
+struct Audio_note;
+struct Audio_score;
+struct Audio_tempo;
 struct Atom;
 struct Bar;
+struct Bar_column_engraver;
+struct Bar_column;
 struct Bar_engraver;
 struct Bar_req;
 struct Barcheck_req;
@@ -43,6 +54,7 @@
 struct Cresc_req;
 struct Crescendo ;
 struct Decresc_req;
+
 struct Directional_spanner;
 struct Disallow_break_req;
 struct Durational_req;
@@ -85,6 +97,7 @@
 struct Lookup;
 struct Lyric_item;
 struct Lyric_req;
+struct My_lily_lexer;
 struct Measure_grouping_req;
 struct Melodic_req;
 struct Meter;
@@ -95,10 +108,13 @@
 struct Midi_duration;
 struct Midi_header;
 struct Midi_item;
+struct Midi_key;
+struct Midi_meter;
+struct Midi_note;
 struct Midi_output;
-struct Midi_pitch;
 struct Midi_score;
 struct Midi_stream;
+struct Midi_tempo;
 struct Midi_track;
 struct Mixed_qp;
 struct Molecule;
diff -urN ../lilypond-0.1.1/lily/include/local-key-item.hh ./lily/include/local-key-item.hh
--- ../lilypond-0.1.1/lily/include/local-key-item.hh	Wed Jul 30 23:27:32 1997
+++ ./lily/include/local-key-item.hh	Tue Aug  5 23:32:22 1997
@@ -21,20 +21,26 @@
 
   TODO:
   update item if Items are removed
+
+  TODO
+  
+  figure out private/public
+  
  */
-struct Local_key_item : Item {
+class Local_key_item : public Item {
+public:
     DECLARE_MY_RUNTIME_TYPEINFO;
     Array<Local_acc> accs;
     Link_array<Item> support_items_;
     int c0_position;
 
-    /* *************** */
+
     
     Local_key_item(int c0position);
     void add_support(Item*);
     void add(int oct, int pitch, int acc);
     void add(Melodic_req*);
-public:
+protected:
     virtual void do_pre_processing();    
     virtual void do_substitute_dependency(Score_elem*,Score_elem*);
     virtual Molecule* brew_molecule_p()const;
diff -urN ../lilypond-0.1.1/lily/include/midi-def.hh ./lily/include/midi-def.hh
--- ../lilypond-0.1.1/lily/include/midi-def.hh	Mon Jul 21 22:28:35 1997
+++ ./lily/include/midi-def.hh	Tue Aug  5 23:34:14 1997
@@ -16,6 +16,7 @@
 
 
 /** 
+  definitions for midi output. Rather empty
  */
 struct Midi_def {
     // ugh!
@@ -25,7 +26,6 @@
     /// output file name
     String outfile_str_;
 
-    Assoc<String, Real> *real_vars_p_;
     Input_translator* itrans_p_;
 
     /// duration of whole note
@@ -37,11 +37,9 @@
 
     Real duration_to_seconds_f(Moment);
     Global_translator* get_global_translator_p() const;
-    Real get_var( String s ) const;
     int get_tempo_i( Moment moment );
     void print() const;
     void set( Input_translator* itrans_p );
-    void set_var( String s, Real r );
     void set_tempo( Moment moment, int count_per_minute_i );
 };
 
diff -urN ../lilypond-0.1.1/lily/include/midi-item.hh ./lily/include/midi-item.hh
--- ../lilypond-0.1.1/lily/include/midi-item.hh	Wed Jul 30 23:44:28 1997
+++ ./lily/include/midi-item.hh	Thu Aug  7 13:49:49 1997
@@ -1,14 +1,14 @@
-//
-//  midiitem.hh -- part of GNU LilyPond
-//
-//  copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
+/*
+  midi-item.hh -- declare Midi items
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+ */
 
 #ifndef MIDI_ITEM_HH
 #define MIDI_ITEM_HH
 
 #include "string.hh"
 #include "lily-proto.hh"
-#include "virtual-methods.hh"
 
 /**
   Any piece of midi information.
@@ -16,24 +16,23 @@
   Maybe use base classes for RIFF files?
  */
 struct Midi_item {
-    Midi_item() { }
-    DECLARE_MY_RUNTIME_TYPEINFO;
+    Midi_item( Audio_item* audio_item_l ); 
     static String i2varint_str( int i );
-    virtual void output_midi( Midi_stream& midi_stream_r ) const;
+    void output( Midi_stream* midi_stream_l ) const;
     virtual String str() const = 0;
+
+    Audio_item* audio_item_l_;
+    int channel_i_;
+
 private:
-    Midi_item(Midi_item const&){}
-    void operator=(Midi_item const&){}
+    Midi_item( Midi_item const& );
+    Midi_item& operator =( Midi_item const& );
 };
 
 struct Midi_key : public Midi_item {
-    Midi_key( int accidentals_i, int minor_i );
-    DECLARE_MY_RUNTIME_TYPEINFO;
+    Midi_key( Audio_item* audio_item_l );
 	
     virtual String str() const;
-    /* *************** */
-    int accidentals_i_;
-    int minor_i_;
 };
 
 /**
@@ -41,46 +40,43 @@
  */
 struct Midi_instrument : public Midi_item {
     Midi_instrument( int channel_i, String instrument_str );
-    DECLARE_MY_RUNTIME_TYPEINFO;
 
     virtual String str() const;
-
-    int channel_i_;
-    Byte program_byte_;
+    String instrument_str_;
 };
                                       
+/**
+  Turn a note on or off. (blond / dark? :)
+ */
 struct Midi_note : public Midi_item {
     /**
       Generate a note-event on a channel.
 
       @param #melreq_l# is the pitch. 
      */
-    Midi_note( Melodic_req* melreq_l, int channel_i, bool on_b );
-    DECLARE_MY_RUNTIME_TYPEINFO;
+    Midi_note( Audio_item* audio_item_l ); 
 
     virtual String str() const;
 
     /* *************** */
     int const c0_pitch_i_c_ = 60;
+    bool on_b_;
     Byte dynamic_byte_;
-
-    int channel_i_;
-    int on_b_;
-    int pitch_i_;
 };
 
 struct Midi_duration : public Midi_item {
     Midi_duration( Real seconds_f );
-    DECLARE_MY_RUNTIME_TYPEINFO;
 
     virtual String str() const;
     /* *************** */
     Real seconds_f_;
 };
 
+/**
+  variable sized MIDI data
+ */
 struct Midi_chunk : Midi_item {
     Midi_chunk();
-    DECLARE_MY_RUNTIME_TYPEINFO;
 
     void add( String str );
     void set( String header_str, String data_str, String footer_str );
@@ -92,9 +88,9 @@
 };
 
 struct Midi_header : Midi_chunk {
-    /* *************** */
+
     Midi_header( int format_i, int tracks_i, int clocks_per_4_i );
-    DECLARE_MY_RUNTIME_TYPEINFO;
+
 };
 
 struct Midi_text : Midi_item {
@@ -104,7 +100,8 @@
 	MARKER, CUE_POINT
     };
     Midi_text( Midi_text::Type type, String text_str );
-    DECLARE_MY_RUNTIME_TYPEINFO;
+   Midi_text( Audio_item* audio_item_l );
+    
 
     virtual String str() const;
     /* *************** */
@@ -115,7 +112,8 @@
 
 struct Midi_tempo : Midi_item {
     Midi_tempo( int per_minute_4_i );
-    DECLARE_MY_RUNTIME_TYPEINFO;
+   Midi_tempo( Audio_item* audio_item_l ); 
+  
 
     virtual String str() const;
     /* *************** */
@@ -123,28 +121,20 @@
     int per_minute_4_i_;
 };
 
-struct Midi_time : Midi_item {
-
-    Midi_time( int num_i, int den_i, int clocks_per_1_i );
-    DECLARE_MY_RUNTIME_TYPEINFO;
-
-    virtual String str() const;
-
-    /* *************** */
-    int num_i_;
-    int den_i_;
-    int clocks_per_1_i_;
+struct Midi_meter : Midi_item {
+     Midi_meter( Audio_item* audio_item_l ); 
+  
+      virtual String str() const;
+      int clocks_per_1_i_;
 };
 
 struct Midi_track : Midi_chunk {
     int number_i_;
-    /* *************** */
+    
     Midi_track();
-    DECLARE_MY_RUNTIME_TYPEINFO;
 
     void add( int delta_time_i, String event );
     void add( Moment delta_time_moment, Midi_item* mitem_l );
 };
 
-#endif // MIDI_ITEM_HH //
-
+#endif // MIDI_ITEM_HH
diff -urN ../lilypond-0.1.1/lily/include/midi-output.hh ./lily/include/midi-output.hh
--- ../lilypond-0.1.1/lily/include/midi-output.hh	Sat Jun  7 10:24:03 1997
+++ ./lily/include/midi-output.hh	Tue Aug  5 23:36:43 1997
@@ -13,7 +13,7 @@
 
 
 struct Midi_output {
-    #if 0
+#if 0
     Midi_output(Score* score_l, Midi_def* );
 
     void do_staff(Staff*st_l, int count);
diff -urN ../lilypond-0.1.1/lily/include/midi-stream.hh ./lily/include/midi-stream.hh
--- ../lilypond-0.1.1/lily/include/midi-stream.hh	Mon May 19 02:53:13 1997
+++ ./lily/include/midi-stream.hh	Tue Aug  5 23:36:43 1997
@@ -9,7 +9,7 @@
 #include <iostream.h>
 #include "string.hh"
 
-/// Midi output
+/// Midi outputfile
 struct Midi_stream {
     ostream* os_p_;
     String filename_str_;
diff -urN ../lilypond-0.1.1/lily/include/music.hh ./lily/include/music.hh
--- ../lilypond-0.1.1/lily/include/music.hh	Fri Aug  1 00:07:47 1997
+++ ./lily/include/music.hh	Tue Aug  5 23:24:32 1997
@@ -17,18 +17,22 @@
 #include "lily-proto.hh"
 #include "string.hh"
 
-/** In Lily, everything that has a length and a pitch (which can be
-  transposed) is considered "music", 
+/** 
+  Anything which has length or pitch.
+  
+  In Lily, everything that can be thought to have a length and a pitch
+  (which has a duration which can be transposed) is considered "music",
 
   Music is hierarchical: 
 
-  @seealso Music_list
+  @see Music_list
+
   */
 class Music:public Input {
 public:
     Music_list * parent_music_l_;
     
-    /** what kind of iterator needed to walk this music?  This doesn't
+    /** The kind of iterator needed to walk this music.  This doesn't
       make sense for simple (ie non-list) music, but it does no harm
       here. Yes, it did harm Music_list: you can forget to copy it.
       
diff -urN ../lilypond-0.1.1/lily/include/note-column-grav.hh ./lily/include/note-column-grav.hh
--- ../lilypond-0.1.1/lily/include/note-column-grav.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/note-column-grav.hh	Tue Aug  5 21:20:56 1997
@@ -23,7 +23,7 @@
     bool h_shift_b_;
     int dir_i_;
     
-    /* *************** */
+
     bool acceptable_elem_b(Score_elem const*)const;
 protected:
     virtual void set_feature(Feature);
diff -urN ../lilypond-0.1.1/lily/include/offset.hh ./lily/include/offset.hh
--- ../lilypond-0.1.1/lily/include/offset.hh	Mon May 19 02:53:13 1997
+++ ./lily/include/offset.hh	Wed Aug  6 21:22:22 1997
@@ -6,33 +6,49 @@
 
 #ifndef OFFSET_HH
 #define OFFSET_HH
+
 #include "real.hh"
+#include "axes.hh"
+
 
 /// 2d vector 
 struct Offset {
-    Real x,y;
-
-    Offset operator+(Offset o)const {
-	Offset r(*this);
-	r+=o;
-	return r;
+    Real coordinate_a_[NO_AXES];
+    
+    Real &y() { return coordinate_a_[Y_AXIS]; }
+    Real &x() { return coordinate_a_[X_AXIS]; }
+    Real y()const { return coordinate_a_[Y_AXIS]; }
+    Real x()const { return coordinate_a_[X_AXIS]; }
+    
+    Real &operator[](Axis i) {
+	return coordinate_a_[i];
+    }
+    Real operator[](Axis i) const{
+	return coordinate_a_[i];
     }
     
     Offset operator+=(Offset o) {
-	x+=o.x;
-	y+=o.y;
+	x()+=o.x();
+	y()+=o.y();
 	return *this;
     }
     Offset(Real ix , Real iy) {
-	x=ix;
-	y=iy;
+	x()=ix;
+	y()=iy;
     }
     Offset() {
-	x=0.0;
-	y=0.0;
+	x()=0.0;
+	y()=0.0;
     }
 };
 
+inline Offset
+operator+(Offset o1, Offset const& o2)
+{
+    o1 += o2;
+    return o1;
+}
+    
 #endif // OFFSET_HH
 
 
diff -urN ../lilypond-0.1.1/lily/include/paper-def.hh ./lily/include/paper-def.hh
--- ../lilypond-0.1.1/lily/include/paper-def.hh	Wed Jul  9 00:27:25 1997
+++ ./lily/include/paper-def.hh	Wed Aug  6 22:13:44 1997
@@ -18,7 +18,7 @@
 
 /** 
 
-  symbols, dimensions and constants
+  Symbols, dimensions and constants pertaining to visual output.
 
   This struct takes care of all kinds of symbols, dimensions and
   constants. Most of them are related to the point-size of the fonts,
diff -urN ../lilypond-0.1.1/lily/include/performer.hh ./lily/include/performer.hh
--- ../lilypond-0.1.1/lily/include/performer.hh	Tue Aug  5 02:57:50 1997
+++ ./lily/include/performer.hh	Thu Aug  7 13:45:05 1997
@@ -41,6 +41,7 @@
 
     virtual void do_removal_processing();
     void creation_processing();
+
 protected:
     virtual void do_creation_processing();
 
@@ -48,8 +49,8 @@
     virtual int get_tempo_i() const;
     virtual void do_print() const;
     virtual Moment get_mom() const;
-    virtual void play_event( Midi_item* l );
-
+    virtual void play( Audio_item* p );
+    virtual void play( Midi_item* l );
 };
 
 #include "global-performers.hh"
diff -urN ../lilypond-0.1.1/lily/include/rest-column.hh ./lily/include/rest-column.hh
--- ../lilypond-0.1.1/lily/include/rest-column.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/rest-column.hh	Tue Aug  5 23:54:31 1997
@@ -13,10 +13,8 @@
 #include "script-column.hh"
 #include "head-column.hh"
 
-/** 
-  struct to treat a set of rests as union (one voicegroup should
-  only produce one rest.
-  */
+/** struct to treat a set of rests as union (one voice should only
+  produce one rest.  */
 class Rest_column : public Head_column {
 public:
     DECLARE_MY_RUNTIME_TYPEINFO;
diff -urN ../lilypond-0.1.1/lily/include/score-align-grav.hh ./lily/include/score-align-grav.hh
--- ../lilypond-0.1.1/lily/include/score-align-grav.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/score-align-grav.hh	Tue Aug  5 18:15:08 1997
@@ -12,6 +12,9 @@
 
 #include "engraver.hh"
 
+/**
+  Group  a number of items across staffs
+ */
 class Score_align_engraver: public Engraver
 {
     Horizontal_group_item  * align_p_;
diff -urN ../lilypond-0.1.1/lily/include/score-column.hh ./lily/include/score-column.hh
--- ../lilypond-0.1.1/lily/include/score-column.hh	Fri Jul 25 14:56:03 1997
+++ ./lily/include/score-column.hh	Wed Aug  6 22:12:37 1997
@@ -16,14 +16,14 @@
 #include "p-col.hh"
 
 /**
+  Column with durational info.
+  
+  The columns which contain data have a rhythmical
+  position. Score_column is the type with a rhythmical time attached
+  to it. The calculation of idealspacing is done with data in these
+  columns. (notably: the #durations# field)
 
-    When typesetting hasn't started on PScore yet, the columns which
-    contain data have a rhythmical position. Score_column is the type
-    with a rhythmical time attached to it. The calculation of
-    idealspacing is done with data in these columns. (notably: the
-    #durations# field)
-
-    */
+  */
 
 class Score_column : public PCol {
     friend class Score;
diff -urN ../lilypond-0.1.1/lily/include/score-elem.hh ./lily/include/score-elem.hh
--- ../lilypond-0.1.1/lily/include/score-elem.hh	Mon Aug  4 12:18:27 1997
+++ ./lily/include/score-elem.hh	Thu Aug  7 01:32:16 1997
@@ -15,6 +15,8 @@
 
 #define SCORE_ELEM_CLONE(T) VIRTUAL_COPY_CONS(T, Score_elem)
 
+
+
 /** Both Spanner and Item are Score_elem's. Most Score_elem's depend
   on other Score_elem's, eg, Beam needs to know and set direction of
   Stem. So the Beam has to be calculated *before* Stem. This is
@@ -58,8 +60,8 @@
 
 public:
     PScore *pscore_l_;    
-    Vertical_group  *y_group_l_;
-    Horizontal_group *x_group_l_;
+    Axis_group_element * axis_group_l_a_[2];
+
     Score_elem(Score_elem const&);
     virtual String TeX_string () const ;
     virtual void print() const;
@@ -70,6 +72,7 @@
     Score_elem();
     DECLARE_MY_RUNTIME_TYPEINFO;    
     
+    Interval extent(Axis)const;
     Interval width() const;
     Interval height() const;
     virtual void translate_x(Real);
@@ -91,7 +94,12 @@
     void post_processing();
     void molecule_processing();
 
-    void unlink();
+    /**
+      Axis group has to remove all its links.
+      Sigh... too many virtual functions. 
+      
+     */
+    virtual void unlink();
     void unlink_all();
     void substitute_dependency(Score_elem*,Score_elem*);
     void remove_dependency(Score_elem*);
@@ -149,8 +157,7 @@
     virtual void do_break_processing();
     virtual void handle_broken_dependencies();
     virtual void handle_prebroken_dependencies();
-
-
+    virtual Link_array<Score_elem> get_extra_dependencies()const;
 
 };
 
diff -urN ../lilypond-0.1.1/lily/include/score-grav.hh ./lily/include/score-grav.hh
--- ../lilypond-0.1.1/lily/include/score-grav.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/score-grav.hh	Tue Aug  5 21:13:49 1997
@@ -13,6 +13,9 @@
 #include "engraver-group.hh"
 #include "global-translator.hh"
 
+/**
+  Top level engraver. Puts elements into appropriate columns.
+ */
 class Score_engraver : 
     public Engraver_group_engraver, public Global_translator 
 {
@@ -52,7 +55,6 @@
     virtual void do_creation_processing();
     virtual void do_removal_processing();
     virtual void announce_element(Score_elem_info);
-    virtual void typeset_breakable_item(Item * nobreak_p);
     virtual void do_announces();
     virtual void typeset_element(Score_elem*elem_p);
     virtual Paper_def * paper() const;
diff -urN ../lilypond-0.1.1/lily/include/score-performer.hh ./lily/include/score-performer.hh
--- ../lilypond-0.1.1/lily/include/score-performer.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/score-performer.hh	Thu Aug  7 13:45:05 1997
@@ -11,6 +11,9 @@
 #include "performer-group-performer.hh"
 #include "global-translator.hh"
 
+/**
+  Top level performer. Completely takes care of MIDI output
+ */
 class Score_performer: 
     public Performer_group_performer, public Global_translator 
 {
@@ -30,7 +33,9 @@
     virtual void set_score( Score* score_l );
     virtual void start();
     virtual int get_tempo_i() const;
-    virtual void play_event(Midi_item*);
+    virtual void play(Audio_item*);
+    virtual void play(Midi_item*);
+
 private:
     void header(Midi_stream&);
 
@@ -38,8 +43,9 @@
 
     Moment prev_mom_;
     Moment now_mom_;
+    Audio_column* audio_column_l_;
 
-    Link_array<Midi_item> midi_item_p_arr_;
+    Link_array<Midi_item> midi_item_l_arr_;
 };
 
 #endif // SCORE_PERFORMER_HH
diff -urN ../lilypond-0.1.1/lily/include/score.hh ./lily/include/score.hh
--- ../lilypond-0.1.1/lily/include/score.hh	Thu Jul 24 23:36:04 1997
+++ ./lily/include/score.hh	Thu Aug  7 13:45:05 1997
@@ -27,6 +27,7 @@
     Midi_def *midi_p_;
     Music * music_p_;
     PScore *pscore_p_;
+    Audio_score* audio_score_p_;
 
     int errorlevel_i_;
     
@@ -34,6 +35,7 @@
 
     /// construction
     Score();
+    Score(Score const&);
     ~Score();    
 
     /// do everything except outputting to file
@@ -50,11 +52,7 @@
 
     void print() const;
 
-    Score(Score const&);
 private:
-
-
-
     void run_translator(Global_translator*);
     void midi_output();
     void paper_output();
diff -urN ../lilypond-0.1.1/lily/include/script-column.hh ./lily/include/script-column.hh
--- ../lilypond-0.1.1/lily/include/script-column.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/script-column.hh	Tue Aug  5 18:33:41 1997
@@ -25,7 +25,7 @@
     Link_array<Item> support_l_arr_;
     DECLARE_MY_RUNTIME_TYPEINFO;
    
-    void add(Script *);
+    virtual void add(Script *);
     void add_support(Item*);
 };
 
diff -urN ../lilypond-0.1.1/lily/include/script-grav.hh ./lily/include/script-grav.hh
--- ../lilypond-0.1.1/lily/include/script-grav.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/script-grav.hh	Tue Aug  5 22:18:30 1997
@@ -15,15 +15,12 @@
     Array<Script *> script_p_arr_;
     Array<Script_req *> script_req_l_arr_;
 
-    /* *************** */
-    bool acceptable_elem_b(Score_elem*);
 public:
     DECLARE_MY_RUNTIME_TYPEINFO;
     Script_engraver();
 protected:
     virtual bool do_try_request(Request*);
     virtual void do_process_requests();
-    virtual void acknowledge_element(Score_elem_info);
     virtual void do_pre_move_processing();
     virtual void do_post_move_processing();
 
diff -urN ../lilypond-0.1.1/lily/include/script.hh ./lily/include/script.hh
--- ../lilypond-0.1.1/lily/include/script.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/script.hh	Wed Aug  6 14:05:11 1997
@@ -17,7 +17,6 @@
     
     Stem *stem_l_;
 
-    /* *************** */
 protected:
     Molecule *brew_molecule_p()const;
     virtual void do_substitute_dependency(Score_elem*,Score_elem*);
@@ -25,6 +24,7 @@
     virtual Interval symbol_height()const;
     virtual void do_pre_processing();
     virtual Interval do_width() const;
+    SCORE_ELEM_CLONE(Script);
 private:
 
     void set_default_dir();
diff -urN ../lilypond-0.1.1/lily/include/span-bar-grav.hh ./lily/include/span-bar-grav.hh
--- ../lilypond-0.1.1/lily/include/span-bar-grav.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/span-bar-grav.hh	Tue Aug  5 23:58:03 1997
@@ -12,6 +12,12 @@
 
 #include "engraver.hh"
 
+/** 
+
+  Make bars that span multiple "staffs". Catch bars, and span a
+  Span_bar over them if we find more than 2 bars
+
+  */
 class Span_bar_engraver : public Engraver
 {
     Span_bar * spanbar_p_;
diff -urN ../lilypond-0.1.1/lily/include/span-score-bar-grav.hh ./lily/include/span-score-bar-grav.hh
--- ../lilypond-0.1.1/lily/include/span-score-bar-grav.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/span-score-bar-grav.hh	Tue Aug  5 23:53:18 1997
@@ -12,6 +12,13 @@
 
 #include "span-bar-grav.hh"
 
+/** 
+
+  Make the bars that Span the entire score line (system). A
+  Span_bar_engraver which generates a special bar.
+
+  */
+
 class Span_score_bar_engraver : public Span_bar_engraver 
 {
 public:
diff -urN ../lilypond-0.1.1/lily/include/spanner.hh ./lily/include/spanner.hh
--- ../lilypond-0.1.1/lily/include/spanner.hh	Mon Aug  4 23:30:37 1997
+++ ./lily/include/spanner.hh	Tue Aug  5 23:28:08 1997
@@ -10,7 +10,7 @@
 #include "lily-proto.hh"
 #include "score-elem.hh"
 
-/** a symbol which is attached between two columns. A spanner is a
+/** A symbol which is attached between two columns. A spanner is a
   symbol which spans across several columns, so its final appearance
   can only be calculated after the breaking problem is solved.
 
diff -urN ../lilypond-0.1.1/lily/include/spring-spacer.hh ./lily/include/spring-spacer.hh
--- ../lilypond-0.1.1/lily/include/spring-spacer.hh	Tue Aug  5 02:54:22 1997
+++ ./lily/include/spring-spacer.hh	Wed Aug  6 17:12:58 1997
@@ -16,7 +16,7 @@
 #include "colhpos.hh"
 
 /** 
-  Determine positions of columns connected by springs and held apart by rods
+  Determine positions of columns connected by springs and held apart by rods.
   
   
     Generate a spacing which
diff -urN ../lilypond-0.1.1/lily/include/staff-performer.hh ./lily/include/staff-performer.hh
--- ../lilypond-0.1.1/lily/include/staff-performer.hh	Thu Jul 31 22:01:46 1997
+++ ./lily/include/staff-performer.hh	Thu Aug  7 13:45:05 1997
@@ -21,7 +21,8 @@
     String instrument_str();
 
 protected:
-    virtual void play_event( Midi_item* l );
+    virtual void play( Midi_item* l );
+    virtual void play( Audio_item* l );
     virtual void do_removal_processing();
     virtual void do_creation_processing();
     // <ugh>
@@ -34,7 +35,7 @@
 
     Moment midi_mom_;
     Midi_track* midi_track_p_;
-
+    Pointer_list<Audio_item*> audio_item_p_list_;
     int track_i_;
 };
 
diff -urN ../lilypond-0.1.1/lily/include/staff-side.hh ./lily/include/staff-side.hh
--- ../lilypond-0.1.1/lily/include/staff-side.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/staff-side.hh	Wed Aug  6 22:13:08 1997
@@ -13,7 +13,7 @@
 #include "score-elem.hh"
 #include "interval.hh"
 
-/** A symbol which sits along a staff
+/** A symbol which sits along a staff.
 
   Should override translate_y() ?
   */
diff -urN ../lilypond-0.1.1/lily/include/staffline.hh ./lily/include/staffline.hh
--- ../lilypond-0.1.1/lily/include/staffline.hh	Sun Aug  3 16:53:40 1997
+++ ./lily/include/staffline.hh	Thu Jan  1 01:00:00 1970
@@ -1,26 +0,0 @@
-/*
-  staffline.hh -- horizontal structures for broken scores.
-
-  (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef STAFFLINE_HH
-#define STAFFLINE_HH
-
-#include "spanner-elem-group.hh"
-
-/// one broken line of staff.
-struct Line_of_staff : public Spanner_elem_group{
-
-    SCORE_ELEM_CLONE(Line_of_staff);
-public:
-    DECLARE_MY_RUNTIME_TYPEINFO;
-
-    /* *************** */
-    /** 
-      Add an element. If it is a Element_group, only the dependency
-      (otherwise, might translate doubly) */
-    void add_element(Score_elem*);
-};
-
-#endif
diff -urN ../lilypond-0.1.1/lily/include/symbol.hh ./lily/include/symbol.hh
--- ../lilypond-0.1.1/lily/include/symbol.hh	Thu Jun 26 10:30:21 1997
+++ ./lily/include/symbol.hh	Wed Aug  6 14:33:35 1997
@@ -34,10 +34,10 @@
 	off_ += o;
     }
     void translate_x(Real r){ 
-	off_.x += r;
+	off_.x() += r;
     }
     void translate_y(Real r) {
-	off_.y += r;
+	off_.y() += r;
     }
     
     /// how big is #this#?
diff -urN ../lilypond-0.1.1/lily/include/text-def.hh ./lily/include/text-def.hh
--- ../lilypond-0.1.1/lily/include/text-def.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/text-def.hh	Wed Aug  6 10:41:09 1997
@@ -28,7 +28,6 @@
     String text_str_;
     String style_str_;
     
-    /* *************** */
     virtual void do_print() const;
     virtual ~Text_def() {};
     bool do_equal_b(const Text_def&)const;
diff -urN ../lilypond-0.1.1/lily/include/vertical-align-elem.hh ./lily/include/vertical-align-elem.hh
--- ../lilypond-0.1.1/lily/include/vertical-align-elem.hh	Wed Jul 30 23:27:33 1997
+++ ./lily/include/vertical-align-elem.hh	Thu Aug  7 12:48:27 1997
@@ -11,6 +11,7 @@
 #define VERTICAL_ALIGN_ITEM_HH
 
 #include "elem-group.hh"
+
 /**
   Order elements top to bottom.
  */
diff -urN ../lilypond-0.1.1/lily/include/vertical-group-spanner.hh ./lily/include/vertical-group-spanner.hh
--- ../lilypond-0.1.1/lily/include/vertical-group-spanner.hh	Tue Aug  5 01:30:28 1997
+++ ./lily/include/vertical-group-spanner.hh	Thu Aug  7 14:27:01 1997
@@ -10,26 +10,21 @@
 #ifndef SPAN_VERTICAL_GROUP_HH
 #define SPAN_VERTICAL_GROUP_HH
 
-#include "spanner.hh"
+#include "axis-group-spanner.hh"
 #include "elem-group.hh"
 
-/** An element which groups a line. Due to technical problems, this
-   cannot be used as a baseclass */
-class Vertical_group_spanner : public Spanner, public Vertical_group
+/** An element which groups a line. 
+ */
+class Vertical_group_spanner : public Axis_group_spanner, public Vertical_group
 {
 protected:
-    virtual void do_break_processing();
-    virtual void do_print()const;
-    VIRTUAL_COPY_CONS(Vertical_group_spanner, Score_elem);
-
-private:
-    void remove_all();
-    /// shouldn't be copied.
-    Vertical_group_spanner(Vertical_group_spanner const&);
-
+    SCORE_ELEM_CLONE(Vertical_group_spanner);
+    virtual void remove_all() { Vertical_group::remove_all(); }
 public:
-    Vertical_group_spanner();
     DECLARE_MY_RUNTIME_TYPEINFO;
+    virtual void add_element(Score_elem*e) { Vertical_group::add_element(e); }
+    virtual void remove_element(Score_elem*e) { Vertical_group::remove_element(e); }
+  
 };
 
 #endif // SPAN_VERTICAL_GROUP_HH
diff -urN ../lilypond-0.1.1/lily/item.cc ./lily/item.cc
--- ../lilypond-0.1.1/lily/item.cc	Tue Aug  5 01:20:29 1997
+++ ./lily/item.cc	Wed Aug  6 16:27:12 1997
@@ -14,9 +14,9 @@
 
 Item::Item()
 {
+    breakable_b_ = false;
     pcol_l_ = 0;
-    broken_to_a_[0]
-	= broken_to_a_[1]=0;
+    broken_to_a_[0] = broken_to_a_[1]=0;
 }
 
 IMPLEMENT_IS_TYPE_B1(Item, Score_elem);
@@ -33,7 +33,7 @@
 Real 
 Item::hpos_f()const
 {
-    return pcol_l_->hpos_f_ + offset().x;
+    return pcol_l_->hpos_f_ + offset()[X_AXIS];
 }
 
 
@@ -64,11 +64,12 @@
     for (int i=0; i < 2; i++) {
 	Item * item_p = clone()->item();
 	item_p->copy_dependencies(*this);
+	
 	/* add our pre and postbreaks blondly to our own y_group
 	   Let Vertical_group_spanner figure out the mess.
 	 */
-	if  ( y_group_l_ )
-	    y_group_l_->add_element( item_p );
+	if  ( axis_group_l_a_[Y_AXIS] )
+	    axis_group_l_a_[Y_AXIS]->add_element( item_p );
 	pscore_l_->typeset_item(item_p, pcol_l_, -1+ 2*i);
 	item_p->handle_prebroken_dependencies();
 	broken_to_a_[i] = item_p;
diff -urN ../lilypond-0.1.1/lily/key-grav.cc ./lily/key-grav.cc
--- ../lilypond-0.1.1/lily/key-grav.cc	Mon Jul 28 23:56:54 1997
+++ ./lily/key-grav.cc	Tue Aug  5 21:43:15 1997
@@ -67,9 +67,9 @@
 void
 Key_engraver::do_process_requests()
 {
-    if (key_.multi_octave_b_)
+    if (key_.multi_octave_b_) {
 	assert(false); // TODO . 
-    else if (keyreq_l_) {
+    } else if (keyreq_l_) {
 	create_key();
     }
 }
@@ -79,7 +79,7 @@
 { 
     if (kit_p_) {
 	kit_p_->default_b_ = default_key_b_;
-	typeset_breakable_item( kit_p_);
+	typeset_element( kit_p_);
 	kit_p_ = 0;
     }
 }
diff -urN ../lilypond-0.1.1/lily/key-item.cc ./lily/key-item.cc
--- ../lilypond-0.1.1/lily/key-item.cc	Mon Jul 28 23:56:54 1997
+++ ./lily/key-item.cc	Tue Aug  5 21:19:01 1997
@@ -1,10 +1,20 @@
+/*
+  key-item.cc -- implement Key_item
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+
+  keyplacement by Mats Bengtsson
+*/
+
 #include "key-item.hh"
 #include "key.hh"
 #include "debug.hh"
 #include "molecule.hh"
 #include "paper-def.hh"
 #include "lookup.hh"
-//#include "clef-grav.hh"
+
 #include "key-grav.hh"
 
 const int FLAT_TOP_PITCH=2; /* fes,ges,as and bes typeset in lower octave */
@@ -12,6 +22,7 @@
 
 Key_item::Key_item(int c)
 {
+    breakable_b_ =true;
     default_b_ = false;
     set_c_position(c);
 }
diff -urN ../lilypond-0.1.1/lily/key-performer.cc ./lily/key-performer.cc
--- ../lilypond-0.1.1/lily/key-performer.cc	Tue Jul 29 14:50:11 1997
+++ ./lily/key-performer.cc	Thu Aug  7 13:45:05 1997
@@ -8,7 +8,7 @@
 
 #include "key-performer.hh"
 #include "command-request.hh"
-#include "midi-item.hh"
+#include "audio-item.hh"
 
 
 
@@ -36,16 +36,9 @@
 void
 Key_performer::process_requests()
 {
-    if ( key_req_l_ ) {
-	int sharps_i = key_req_l_->sharps_i();
-	int flats_i = key_req_l_->flats_i();
-	// midi cannot handle non-conventional keys
-	if ( !( flats_i && sharps_i ) ) {
-	    Midi_key k( sharps_i - flats_i, key_req_l_->minor_b() );
-	    play_event( &k );
-	}
-	key_req_l_ = 0;
-    }
+    if ( key_req_l_ )
+	play( new Audio_key( key_req_l_ ) );
+    key_req_l_ = 0;
 }
 
 bool
diff -urN ../lilypond-0.1.1/lily/leastsquares.cc ./lily/leastsquares.cc
--- ../lilypond-0.1.1/lily/leastsquares.cc	Wed Mar 19 01:34:24 1997
+++ ./lily/leastsquares.cc	Wed Aug  6 16:29:56 1997
@@ -5,7 +5,7 @@
     assert( input.size() > 1 );
     Real dx = 0.0;
     for (int i=1; i < input.size(); i++)
-	dx += abs (input[i-1].x - input[i].x);
+	dx += abs (input[i-1].x() - input[i].x());
 
     assert(dx);
 }
@@ -19,8 +19,8 @@
     Real sxy = 0.0;
 
     for (int i=0; i < input.size();i++) {
-	Real x=input[i].x;
-	Real y = input[i].y;
+	Real x=input[i].x();
+	Real y = input[i].y();
 	sx += x;
 	sy += y;
 	sqx += sqr(x);
diff -urN ../lilypond-0.1.1/lily/lexer.l ./lily/lexer.l
--- ../lilypond-0.1.1/lily/lexer.l	Thu Jul  3 22:16:42 1997
+++ ./lily/lexer.l	Wed Aug  6 22:50:06 1997
@@ -70,7 +70,7 @@
 WORD		{A}{AN}*
 ALPHAWORD	{A}+
 INT		-?{N}+
-REAL		{INT}?\.{N}*
+REAL		({INT}\.{N}*)|(-?\.{N}+)
 KEYWORD		\\{WORD}
 WHITE		[ \n\t\f]
 BLACK		[^ \n\t\f]
@@ -223,7 +223,7 @@
 		/* ugr. This sux. */
 		String s (YYText()); 
 		int i = 0;
-		while ((i=s.index_i("_")) != -1) // change word binding "_" to " "
+               	while ((i=s.index_i("_")) != -1) // change word binding "_" to " "
 			*(s.ch_l() + i) = ' ';
 		if ((i=s.index_i("\\,")) != -1)   // change "\," to TeX's "\c "
 			{
@@ -354,17 +354,6 @@
 		    return NOTENAME_ID;
 		}
 	}
-#if 0
-	if (YYSTATE != notes) {
-		// ugr. Should do this in note mode?
-	//		Identifier * id = lookup_identifier(str);
-		if (id) {
-			mtor << "(identifier)\n";
-			yylval.id = id;
-			return id->token_code_i_;
-		}
-	}
-#endif
 
 	yylval.string=new String( str );
 	return STRING;
diff -urN ../lilypond-0.1.1/lily/line-group-grav.cc ./lily/line-group-grav.cc
--- ../lilypond-0.1.1/lily/line-group-grav.cc	Tue Aug  5 01:29:29 1997
+++ ./lily/line-group-grav.cc	Thu Aug  7 12:58:30 1997
@@ -11,7 +11,6 @@
 #include "command-request.hh"
 #include "bar.hh"
 #include "debug.hh"
-#include "staffline.hh"
 #include "line-group-grav.hh"
 
 Line_group_engraver::Line_group_engraver()
@@ -22,7 +21,7 @@
 void
 Line_group_engraver::acknowledge_element(Score_elem_info  elem)
 {
-    if ( !elem.elem_l_->y_group_l_ )
+    if ( !elem.elem_l_->axis_group_l_a_[Y_AXIS] )
 	staffline_p_->add_element(elem.elem_l_);
 }
 
diff -urN ../lilypond-0.1.1/lily/local-key-item.cc ./lily/local-key-item.cc
--- ../lilypond-0.1.1/lily/local-key-item.cc	Mon Jul 28 23:56:54 1997
+++ ./lily/local-key-item.cc	Wed Aug  6 16:53:53 1997
@@ -89,7 +89,7 @@
     }
 
     Interval head_width=itemlist_width(support_items_);
-    output->translate_x(-output->extent().x.right + head_width.left );
+    output->translate_x(-output->extent().x().right + head_width.left );
     
     return output;
 }
diff -urN ../lilypond-0.1.1/lily/lookup.cc ./lily/lookup.cc
--- ../lilypond-0.1.1/lily/lookup.cc	Sun Aug  3 01:40:46 1997
+++ ./lily/lookup.cc	Wed Aug  6 16:56:17 1997
@@ -109,7 +109,7 @@
     a.push(print_dimen( h));
     Symbol ret=(*symtables_)("bars")->lookup(s);;
     ret.tex = substitute_args(ret.tex, a);
-    ret.dim.y = Interval( 0, h);
+    ret.dim.y() = Interval( 0, h);
     return ret;
 }
 
@@ -183,7 +183,7 @@
     Array<String> a;
     a.push(idx);
     ret.tex = substitute_args(ret.tex, a);
-    ret.dim.x = Interval(0,wid);
+    ret.dim.x() = Interval(0,wid);
     return ret;
 }
 
@@ -192,9 +192,8 @@
 {
     Real internote_f = paper_l_ ->internote_f();
     Symbol s;
-    s.dim.x = Interval(0,wid);
     Real dy = (lines >0) ? (lines-1)*internote_f : 0;
-    s.dim.y = Interval(0,dy);
+    s.dim = Box(Interval(0,wid), Interval(0,dy));
 
     Array<String> a;
     a.push(lines);
@@ -211,8 +210,8 @@
 Lookup::meter(Array<Scalar> a) const
 {
     Symbol s;
-    s.dim.x = Interval( 0 PT, 10 PT);
-    s.dim.y = Interval(0, 20 PT);	// todo
+    s.dim.x() = Interval( 0 PT, 10 PT);
+    s.dim.y() = Interval(0, 20 PT);	// todo
     String src = (*symtables_)("param")->lookup("meter").tex;
     s.tex = substitute_args(src,a);
     return s;    
@@ -229,8 +228,8 @@
     }
     Symbol s;
     
-    s.dim.x = Interval(0,0);
-    s.dim.y = Interval(y1,y2);
+    s.dim.x() = Interval(0,0);
+    s.dim.y() = Interval(y1,y2);
     
     Array<String> a;
     a.push(print_dimen(y1));
@@ -263,7 +262,7 @@
 	Array<String> a;
 	a.push(idx);
 	s.tex = substitute_args(s.tex,a);
-	s.dim.y = Interval(0,y);
+	s.dim.y() = Interval(0,y);
     }
     {
 	Array<String> a;
diff -urN ../lilypond-0.1.1/lily/lyric-performer.cc ./lily/lyric-performer.cc
--- ../lilypond-0.1.1/lily/lyric-performer.cc	Tue Jul 29 14:50:10 1997
+++ ./lily/lyric-performer.cc	Thu Aug  7 13:45:06 1997
@@ -9,7 +9,7 @@
 #include "lyric-performer.hh"
 #include "text-def.hh"
 #include "musical-request.hh"
-#include "midi-item.hh"
+#include "audio-item.hh"
 
 
 
@@ -36,11 +36,8 @@
 void
 Lyric_performer::process_requests()
 {
-    if ( lreq_arr_.size() ) {
-	Midi_text t( Midi_text::LYRIC, lreq_arr_[ 0 ]->tdef_p_->text_str_ );
-	play_event( &t );
-    }
-
+    if ( lreq_arr_.size() )
+	play( new Audio_text( Audio_text::LYRIC, lreq_arr_[ 0 ]->tdef_p_->text_str_ ) );
     lreq_arr_.clear();
 }
 
diff -urN ../lilypond-0.1.1/lily/main.cc ./lily/main.cc
--- ../lilypond-0.1.1/lily/main.cc	Wed Jul 30 15:11:40 1997
+++ ./lily/main.cc	Tue Aug  5 17:44:55 1997
@@ -65,7 +65,10 @@
 #ifdef STRING_UTILS_INLINED
 	"STRING_UTILS_INLINED "
 #endif
-	"datadir= " DIR_DATADIR "\n" 
+	"datadir= " DIR_DATADIR 
+
+	"\n";
+	
 	;
     
     
@@ -76,13 +79,10 @@
 {
     cout <<
 	"\n"
-	"GNU LilyPond, a music typesetter.\n"
-	"Copyright (C) 1996,97 by\n"
+	"GNU LilyPond -- The GNU Project music typesetter.\n"
+	"Copyright 1996,97 by\n"
 	"  Han-Wen Nienhuys <hanwen@stack.nl>\n"
 	"  Jan Nieuwenhuizen <jan@digicash.com>\n"
-	"Contributors\n"
-	"  Mats Bengtsson <matsb@s3.kth.se>\n"
-	"  Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>\n"
 	"\n"
 	"    This program is free software; you can redistribute it and/or\n"
 	"modify it under the terms of the GNU General Public License version 2\n"
@@ -106,7 +106,7 @@
 do_one_file(String init_str, String file_str)
 {
     if ( init_str != "" && "" == path.find( init_str ) ) {
-	error ( "Can not find `" + init_str +"'");
+	error ( "Can not find `" + init_str +"\'");
 	return ;
     }
     if ( file_str!= "" && path.find( file_str ) == "" ) {
diff -urN ../lilypond-0.1.1/lily/meter-grav.cc ./lily/meter-grav.cc
--- ../lilypond-0.1.1/lily/meter-grav.cc	Mon Jul 28 23:56:53 1997
+++ ./lily/meter-grav.cc	Tue Aug  5 21:22:18 1997
@@ -100,7 +100,7 @@
 Meter_engraver::do_pre_move_processing()
 {
     if (meter_p_) {
-	typeset_breakable_item(meter_p_);
+	typeset_element(meter_p_);
 	meter_p_ =0;
 	meter_req_l_ = 0;
     }
diff -urN ../lilypond-0.1.1/lily/meter-performer.cc ./lily/meter-performer.cc
--- ../lilypond-0.1.1/lily/meter-performer.cc	Wed Jul 30 22:45:23 1997
+++ ./lily/meter-performer.cc	Thu Aug  7 13:45:06 1997
@@ -8,7 +8,7 @@
 
 #include "meter-performer.hh"
 #include "command-request.hh"
-#include "midi-item.hh"
+#include "audio-item.hh"
 
 IMPLEMENT_IS_TYPE_B1(Meter_performer,Performer);
 ADD_THIS_PERFORMER(Meter_performer);
@@ -34,11 +34,9 @@
 void
 Meter_performer::process_requests()
 {
-    if ( meter_req_l_ ) {
-	Midi_time m( meter_req_l_->beats_i_, meter_req_l_->one_beat_i_, 18 );
-	play_event( &m );
-	meter_req_l_ = 0;
-    }
+    if ( meter_req_l_ )
+	play( new Audio_meter( meter_req_l_ ) );
+    meter_req_l_ = 0;
 }
 
 bool
diff -urN ../lilypond-0.1.1/lily/meter.cc ./lily/meter.cc
--- ../lilypond-0.1.1/lily/meter.cc	Mon Jul 28 23:56:53 1997
+++ ./lily/meter.cc	Tue Aug  5 21:17:46 1997
@@ -7,6 +7,7 @@
 Meter::Meter(Array<Scalar>a)
     :args(a)
 {
+    breakable_b_ = true;
 }
 
 Molecule*
diff -urN ../lilypond-0.1.1/lily/midi-def.cc ./lily/midi-def.cc
--- ../lilypond-0.1.1/lily/midi-def.cc	Tue Jul 29 02:13:00 1997
+++ ./lily/midi-def.cc	Tue Aug  5 23:37:00 1997
@@ -23,6 +23,7 @@
 
 // statics Midi_def
 // ugh
+
 int Midi_def::den_i_s = 4;
 int Midi_def::num_i_s = 4;
 
@@ -30,7 +31,6 @@
 {
     outfile_str_ = "lelie.midi"; 
     itrans_p_ = 0;
-    real_vars_p_ = new Assoc<String,Real>;
     // ugh
     set_tempo( Moment( 1, 4 ), 60 );
 }
@@ -39,14 +39,12 @@
 {
     whole_seconds_f_ = s.whole_seconds_f_;
     itrans_p_ = s.itrans_p_ ? new Input_translator( *s.itrans_p_ ) : 0;
-    real_vars_p_ = new Assoc<String,Real> ( *s.real_vars_p_ );
     outfile_str_ = s.outfile_str_;
 }
 
 Midi_def::~Midi_def()
 {
     delete itrans_p_;
-    delete real_vars_p_;
 }
 
 Real
@@ -64,14 +62,6 @@
     return  itrans_p_->get_group_performer_p()->global_l();
 }
 
-Real
-Midi_def::get_var( String s ) const
-{
-    if ( !real_vars_p_->elt_b( s ) )
-	error ( "unknown midi variable `"  + s + "'" );
-    return real_vars_p_->elem( s );
-}
-
 int
 Midi_def::get_tempo_i( Moment moment )
 {
@@ -85,9 +75,6 @@
     mtor << "Midi {";
     mtor << "4/min: " << Real( 60 ) / ( whole_seconds_f_ * 4 );
     mtor << "out: " << outfile_str_;
-    for (Assoc_iter<String,Real> i( *real_vars_p_ ); i.ok(); i++) {
-	mtor << i.key() << "= " << i.val() << "\n";
-    }
     mtor << "}\n";
 #endif
 }
@@ -103,11 +90,5 @@
 Midi_def::set_tempo( Moment moment, int count_per_minute_i )
 {
     whole_seconds_f_ = Moment( count_per_minute_i ) / Moment( 60 ) / moment;
-}
-
-void
-Midi_def::set_var( String s, Real r )
-{
-   real_vars_p_->elem( s ) = r;
 }
 
diff -urN ../lilypond-0.1.1/lily/midi-item.cc ./lily/midi-item.cc
--- ../lilypond-0.1.1/lily/midi-item.cc	Wed Jul 30 23:10:52 1997
+++ ./lily/midi-item.cc	Thu Aug  7 13:45:06 1997
@@ -1,39 +1,25 @@
 /*
-  midi-item.cc -- implement various midi items.
+  midi-item.cc -- implement Midi items.
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+ */
 
-#include <limits.h>
 #include "proto.hh"
 #include "plist.hh"
-#include "p-col.hh"
 #include "debug.hh"
 #include "misc.hh"
 #include "string.hh"
 #include "string-convert.hh"
-#include "request.hh"
+#include "command-request.hh"
 #include "musical-request.hh"
-#include "music-list.hh"
 #include "midi-item.hh"
 #include "midi-stream.hh"
-
-
-IMPLEMENT_IS_TYPE_B(Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_key,Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_note, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_duration, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_chunk, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_header, Midi_chunk);
-IMPLEMENT_IS_TYPE_B1(Midi_instrument, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_tempo, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_text, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_time, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_track, Midi_chunk);
+#include "audio-item.hh"
 
 Midi_chunk::Midi_chunk()
+    : Midi_item( 0 )
 {
 }
 
@@ -64,6 +50,7 @@
 }
 
 Midi_duration::Midi_duration( Real seconds_f )
+    : Midi_item( 0 )
 {
     seconds_f_ = seconds_f;
 }
@@ -75,6 +62,7 @@
 }
 
 Midi_header::Midi_header( int format_i, int tracks_i, int clocks_per_4_i )
+    : Midi_chunk()
 {
     String str;
 	
@@ -258,27 +246,44 @@
 }; 
 
 Midi_instrument::Midi_instrument( int channel_i, String instrument_str )
+    : Midi_item( 0 )
 {
+    instrument_str_ = instrument_str;
+    instrument_str_.to_lower();
     channel_i_ = channel_i;
-    instrument_str.to_lower();
-    for ( int i = 0; instrument_name_sz_a_[i]; i++ )
-	if ( instrument_str == String(instrument_name_sz_a_[ i ] )) { 
-	    program_byte_ = (Byte)i;
-	    break;
-	}
 }
                                       
 String
 Midi_instrument::str() const
 {
-    if ( program_byte_ ) {
+    // ugh, does not work...
+    return String( "" );
+    Byte program_byte = 0;
+    for ( int i = 0; instrument_name_sz_a_[i]; i++ )
+	if ( instrument_str_ == String(instrument_name_sz_a_[ i ] )) { 
+	    program_byte = (Byte)i;
+	    break;
+	}
+    if ( program_byte ) {
 	String str = String( (char)( 0xc0 + channel_i_ ) );
-	str += String( (char)program_byte_ );
+	str += String( (char)program_byte );
 	return str;
     }
     return String( "" );
 }
 
+Midi_item::Midi_item( Audio_item* audio_item_l )
+{
+    audio_item_l_ = audio_item_l;
+    channel_i_ = 0;
+}
+
+void
+Midi_item::output( Midi_stream* midi_stream_l ) const
+{
+    *midi_stream_l << str();
+}
+
 String
 Midi_item::i2varint_str( int i )
 {
@@ -300,36 +305,36 @@
     return str;
 }
 
-void 
-Midi_item::output_midi( Midi_stream& midi_stream_r ) const
+Midi_key::Midi_key( Audio_item* audio_item_l )
+    : Midi_item( audio_item_l )
 {
-    midi_stream_r << str();
-}
-
-Midi_key::Midi_key( int accidentals_i, int minor_i )
-{
-	accidentals_i_ = accidentals_i;
-	minor_i_ = minor_i;
 }
 
 String
 Midi_key::str() const
 {
+    Key_change_req* k = audio_item_l_->req_l_->command()->keychange();
+    int sharps_i = k->sharps_i();
+    int flats_i = k->flats_i();
+
+    // midi cannot handle non-conventional keys
+    if ( flats_i && sharps_i )
+	return "";
+    int accidentals_i = sharps_i - flats_i;
+
     String str = "ff5902";
-    str += String_convert::i2hex_str( accidentals_i_, 2, '0' );
-    str += String_convert::i2hex_str( minor_i_, 2, '0' );
+    str += String_convert::i2hex_str( accidentals_i, 2, '0' );
+    int minor_i = k->minor_b();
+    str += String_convert::i2hex_str( minor_i, 2, '0' );
     return String_convert::hex2bin_str( str );
 }
 
-Midi_note::Midi_note( Melodic_req* melreq_l, int channel_i, bool on_bo  )
+Midi_note::Midi_note( Audio_item* audio_item_l )
+    : Midi_item( audio_item_l )
 {
-    assert(melreq_l);
-    pitch_i_ = melreq_l->pitch() + c0_pitch_i_c_;   
-    channel_i_ = channel_i;
-    
-    on_b_ = on_bo;
-
+    // ugh
     dynamic_byte_ = 0x64;
+    on_b_ = ( (Audio_note*)audio_item_l_ )->on_b_;
     if ( on_b_ ) // poor man-s staff dynamics:
 	dynamic_byte_ -= 0x10 * channel_i_;
     else
@@ -339,10 +344,12 @@
 String
 Midi_note::str() const
 {
-    if ( pitch_i_ != INT_MAX ) {
+    Note_req* n = audio_item_l_->req_l_->musical()->melodic()->note();
+    int pitch_i = n->pitch() + c0_pitch_i_c_;
+    if ( pitch_i != INT_MAX ) {
 	Byte status_byte = ( on_b_ ? 0x90 : 0x80 ) + channel_i_;
 	String str = String( (char)status_byte );
-	str += (char)pitch_i_;
+	str += (char)pitch_i;
 	// poor man-s staff dynamics:
 	str += (char)dynamic_byte_;
 	return str;
@@ -350,7 +357,14 @@
     return String( "" );
 }
 
+Midi_tempo::Midi_tempo( Audio_item* audio_item_l )
+    : Midi_item( audio_item_l )
+{
+    per_minute_4_i_ = ( (Audio_tempo*)audio_item_l_ )->per_minute_4_i_;
+}
+
 Midi_tempo::Midi_tempo( int per_minute_4_i )
+    : Midi_item( 0 )
 {
     per_minute_4_i_ = per_minute_4_i;
 }
@@ -364,41 +378,53 @@
     return String_convert::hex2bin_str( str );
 }
 
-Midi_time::Midi_time( int num_i, int den_i, int clocks_per_1_i )
+Midi_meter::Midi_meter( Audio_item* audio_item_l )
+    : Midi_item( audio_item_l )
 {
-	num_i_ = num_i;
-	den_i_ = den_i;
-	clocks_per_1_i_ = clocks_per_1_i;
+    clocks_per_1_i_ = 18;
 }
 
 String
-Midi_time::str() const
+Midi_meter::str() const
 {
-	String str = "ff5804";
-	str += String_convert::i2hex_str( num_i_, 2, '0' );
-	str += String_convert::i2hex_str( intlog2( den_i_ ) , 2, '0' );
-	str += String_convert::i2hex_str( clocks_per_1_i_, 2, '0' );
-	str += String_convert::i2hex_str( 8, 2, '0' );
-	return String_convert::hex2bin_str( str );
+    Meter_change_req* m = audio_item_l_->req_l_->command()->meterchange();
+    int num_i = m->beats_i_;
+    int den_i = m->one_beat_i_;
+
+    String str = "ff5804";
+    str += String_convert::i2hex_str( num_i, 2, '0' );
+    str += String_convert::i2hex_str( intlog2( den_i ) , 2, '0' );
+    str += String_convert::i2hex_str( clocks_per_1_i_, 2, '0' );
+    str += String_convert::i2hex_str( 8, 2, '0' );
+    return String_convert::hex2bin_str( str );
+}
+
+Midi_text::Midi_text( Audio_item* audio_item_l )
+    : Midi_item( audio_item_l )
+{
+    text_str_ = ( (Audio_text*)audio_item_l_ )->text_str_;
+    type_ = (Type)( (Audio_text*)audio_item_l_ )->type_;
 }
 
 Midi_text::Midi_text( Midi_text::Type type, String text_str )
+    : Midi_item( 0 )
 {
-	type_ = type;
-	text_str_ = text_str;
+    text_str_ = text_str;
+    type_ = type;
 }
 
 String
 Midi_text::str() const
 {
-	String str = "ff" + String_convert::i2hex_str( type_, 2, '0' );
-	str = String_convert::hex2bin_str( str );
-	str += i2varint_str( text_str_.length_i() );
-	str += text_str_;
-	return str;
+    String str = "ff" + String_convert::i2hex_str( type_, 2, '0' );
+    str = String_convert::hex2bin_str( str );
+    str += i2varint_str( text_str_.length_i() );
+    str += text_str_;
+    return str;
 }
 
-Midi_track::Midi_track( )
+Midi_track::Midi_track()
+    : Midi_chunk()
 {
 //                4D 54 72 6B     MTrk
 //                00 00 00 3B     chunk length (59)
diff -urN ../lilypond-0.1.1/lily/midi-stream.cc ./lily/midi-stream.cc
--- ../lilypond-0.1.1/lily/midi-stream.cc	Wed Jul 30 23:30:31 1997
+++ ./lily/midi-stream.cc	Thu Aug  7 13:45:06 1997
@@ -37,13 +37,18 @@
 	str = String_convert::bin2hex_str( str );
     
     *os_p_ << str;
+
+    if ( check_debug )
+        *os_p_ << "\n";
+
     return *this;
 }
 
 Midi_stream&
 Midi_stream::operator <<( Midi_item const& mitem_c_r )
 {
-    mitem_c_r.output_midi( *this );
+//    *this << mitem_c_r.str();
+    mitem_c_r.output( this );
     if ( check_debug )
         *os_p_ << "\n";
     return *this;
diff -urN ../lilypond-0.1.1/lily/molecule.cc ./lily/molecule.cc
--- ../lilypond-0.1.1/lily/molecule.cc	Sun Aug  3 01:30:50 1997
+++ ./lily/molecule.cc	Thu Aug  7 02:54:17 1997
@@ -69,7 +69,9 @@
 	add(m);
 	return;
     }
-   Real xof=extent().x.right - m.extent().x.left;
+     Real xof=extent().x().right - m.extent().x().left;
+ 
+     
     Molecule toadd(m);
     toadd.translate(Offset(xof, 0.0));
     add(toadd);
@@ -82,7 +84,8 @@
 	add(m);
 	return;
     }
-    Real xof=extent().x.left - m.extent().x.right;
+  Real xof=extent().x().left - m.extent().x().right;
+   
     Molecule toadd(m);
     toadd.translate(Offset(xof, 0.0));
     add(toadd);
@@ -96,7 +99,8 @@
 	add(m);
 	return;
     }
-  Real yof=extent().y.right - m.extent().y.left;
+   Real yof=extent().y().right - m.extent().y().left;
+
     Molecule toadd(m);
     toadd.translate_y(yof);
     add(toadd);
@@ -109,7 +113,7 @@
 	add(m);
 	return;
     }
-    Real yof=extent().y.left- m.extent().y.right;
+     Real yof=extent().y().left- m.extent().y().right;
     Molecule toadd(m);
     toadd.translate_y(yof);
     add(toadd);
diff -urN ../lilypond-0.1.1/lily/note-column-grav.cc ./lily/note-column-grav.cc
--- ../lilypond-0.1.1/lily/note-column-grav.cc	Mon Jul 28 23:56:53 1997
+++ ./lily/note-column-grav.cc	Tue Aug  5 18:28:31 1997
@@ -49,7 +49,7 @@
 
     char const*nC = i.elem_l_->name();
 
-    if (nC == Script::static_name()) {
+    if (nC == Script::static_name() && i.req_l_ && i.req_l_->musical()) {
 	script_l_arr_.push((Script*)i.elem_l_->item());
     } else if (nC == Note_head::static_name()) {
 	Note_head * h_l = (Note_head*)i.elem_l_->item();
diff -urN ../lilypond-0.1.1/lily/note-performer.cc ./lily/note-performer.cc
--- ../lilypond-0.1.1/lily/note-performer.cc	Thu Jul 31 22:01:46 1997
+++ ./lily/note-performer.cc	Thu Aug  7 13:45:06 1997
@@ -1,6 +1,8 @@
 /*
   note-performer.cc -- implement Note_performer
 
+  source file of the GNU LilyPond music typesetter
+
   (c) 1996, 1997 Jan Nieuwenhuizen <jan@digicash.com>
  */
 
@@ -8,7 +10,7 @@
 #include "translator.hh"
 #include "input-translator.hh"
 #include "musical-request.hh"
-#include "midi-item.hh"
+#include "audio-item.hh"
 #include "debug.hh"
 
 IMPLEMENT_IS_TYPE_B1(Note_performer,Performer);
@@ -29,34 +31,28 @@
 Note_performer::do_print() const
 {
 #ifndef NPRINT
-    if ( note_req_l_ )
+    if ( note_req_l_ ) {
     	note_req_l_->print();
+	mtor << ( off_mom_ ? "on" : "off" ) << "\n";
+    }
 #endif
 }
 
 void 
 Note_performer::process_requests() 
 {
-//    if ( when() == off_mom_ )
-//	play_event( Note_event( current_l_->pitch() ) );
-
-//Midi_note( Melodic_req* melreq_l, int channel_i, bool on_bo  )
-
     // this is _really_ braindead, but it generates some output
     if ( !note_req_l_ || !note_req_l_->melodic()  || !note_req_l_->rhythmic() )
 	return;
 
-    // ugh, need to know channel (===track===staff) too
-    int channel_i = get_track_i();
+    // ugh! Midi specific
     Moment mom = get_mom();
     if ( !off_mom_ ) { // start note
 	off_mom_ = mom + note_req_l_->duration();
-	Midi_note n( note_req_l_->melodic(), channel_i, true );
-	play_event( &n );
+	play( new Audio_note( note_req_l_, true ) );
     }
-    else if ( mom == off_mom_ ) {
-	Midi_note n( note_req_l_->melodic(), channel_i, false );
-	play_event( &n );
+    else if ( mom == off_mom_ ) { // stop note
+	play( new Audio_note( note_req_l_, false ) );
 	note_req_l_ = 0;
 	off_mom_ = 0;
     }
@@ -79,4 +75,3 @@
 
     return true;
 }
-
diff -urN ../lilypond-0.1.1/lily/notehead.cc ./lily/notehead.cc
--- ../lilypond-0.1.1/lily/notehead.cc	Mon Jul 28 23:56:53 1997
+++ ./lily/notehead.cc	Wed Aug  6 16:57:01 1997
@@ -114,7 +114,7 @@
 	s = p->lookup_l()->rest(balltype_i_, streepjes_b);
     }
     out = new Molecule(Atom(s));
-    out->translate_x( x_dir_i_ * s.dim.x.length() );
+    out->translate_x( x_dir_i_ * s.dim.x().length() );
     if (dots_i_) {
 	Symbol d = p->lookup_l()->dots(dots_i_ );
 	Molecule dm;
diff -urN ../lilypond-0.1.1/lily/p-score.cc ./lily/p-score.cc
--- ../lilypond-0.1.1/lily/p-score.cc	Sat Aug  2 22:53:19 1997
+++ ./lily/p-score.cc	Thu Aug  7 02:17:24 1997
@@ -125,6 +125,8 @@
 #ifndef NDEBUG
     for (iter_top(col_p_list_,cc); cc.ok(); cc++)
 	cc->OK();
+    for (PCursor<Score_elem*> i( elem_p_list_.top()); i.ok(); i++) 
+	i->OK();
 #endif
 }
 
diff -urN ../lilypond-0.1.1/lily/paper-def.cc ./lily/paper-def.cc
--- ../lilypond-0.1.1/lily/paper-def.cc	Tue Jul 29 15:14:43 1997
+++ ./lily/paper-def.cc	Wed Aug  6 21:24:43 1997
@@ -51,7 +51,6 @@
     itrans_p_ = 0;
     lookup_p_ = 0;
     real_vars_p_ = new Assoc<String,Real>;
-    outfile_str_ = "lelie.tex";
 }
 
 Paper_def::~Paper_def()
diff -urN ../lilypond-0.1.1/lily/performer-group-performer.cc ./lily/performer-group-performer.cc
--- ../lilypond-0.1.1/lily/performer-group-performer.cc	Sat Aug  2 16:31:29 1997
+++ ./lily/performer-group-performer.cc	Thu Aug  7 13:45:06 1997
@@ -1,6 +1,8 @@
 /*
   performer-group-performer.cc -- implement Performer_group_performer
 
+  source file of the GNU LilyPond music typesetter
+
   (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
                  Jan Nieuwenhuizen <jan@digicash.com>
  */
diff -urN ../lilypond-0.1.1/lily/performer.cc ./lily/performer.cc
--- ../lilypond-0.1.1/lily/performer.cc	Thu Jul 31 22:01:47 1997
+++ ./lily/performer.cc	Thu Aug  7 13:45:06 1997
@@ -1,5 +1,7 @@
 /*
-  performer.cc -- declare Performer
+  performer.cc -- implement Performer
+
+  source file of the GNU LilyPond music typesetter
 
   (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
                  Jan Nieuwenhuizen <jan@digicash.com>
@@ -34,9 +36,15 @@
 }
 
 void 
-Performer::play_event( Midi_item* l ) 
+Performer::play( Audio_item* p ) 
+{ 
+    daddy_perf_l_->play( p ); 
+}
+
+void 
+Performer::play( Midi_item* l ) 
 { 
-    daddy_perf_l_->play_event( l ); 
+    daddy_perf_l_->play( l ); 
 }
 
 int
diff -urN ../lilypond-0.1.1/lily/score-align-grav.cc ./lily/score-align-grav.cc
--- ../lilypond-0.1.1/lily/score-align-grav.cc	Tue Aug  5 01:18:20 1997
+++ ./lily/score-align-grav.cc	Wed Aug  6 16:57:23 1997
@@ -22,7 +22,7 @@
 Score_align_engraver::do_pre_move_processing()
 {
     if (align_p_) {
-	typeset_breakable_item( align_p_);
+	typeset_element( align_p_);
 	align_p_ =0;
     }
 }
@@ -34,10 +34,13 @@
     
 	if (!align_p_ ) {
 	    align_p_ = new Horizontal_group_item;
+	    align_p_->breakable_b_ = true;
 	    announce_element(Score_elem_info(align_p_,0));
 	}
-	
-	align_p_->add_element(inf.elem_l_);
+	Score_elem * unbound_elem = inf.elem_l_;
+	while ( unbound_elem->axis_group_l_a_[X_AXIS] )
+	    unbound_elem = unbound_elem->axis_group_l_a_[X_AXIS];
+	align_p_->add_element(unbound_elem );
     }
     
 }
diff -urN ../lilypond-0.1.1/lily/score-elem.cc ./lily/score-elem.cc
--- ../lilypond-0.1.1/lily/score-elem.cc	Mon Aug  4 14:49:29 1997
+++ ./lily/score-elem.cc	Thu Aug  7 02:27:45 1997
@@ -52,8 +52,8 @@
 	return "";
     String s( "\\placebox{%}{%}{%}");
     Array<String> a;
-    a.push(print_dimen(offset_.y));
-    a.push(print_dimen(offset_.x));
+    a.push( print_dimen(offset_.y() ));
+    a.push( print_dimen(offset_.x() ));
     String t = output->TeX_string();
     if (t == "")
 	return t;
@@ -81,8 +81,7 @@
 {
     transparent_b_ = s.transparent_b_;
     empty_b_ = s.empty_b_;
-    x_group_l_ = 0;
-    y_group_l_ = 0;    
+    axis_group_l_a_[0] = axis_group_l_a_[1] =0;
     status_ = s.status_;
     assert(!s.output);
     output = 0;
@@ -103,7 +102,7 @@
 void
 Score_elem::translate_x(Real x)
 {
-    offset_.x += x;
+    offset_.x() += x;
 }
 
 
@@ -111,15 +110,15 @@
 void
 Score_elem::translate_y(Real y)
 {
-    offset_.y += y;
+    offset_.y() += y;
 }
 
 
 void
 Score_elem::translate(Offset O)
 {
-    translate_y(O.y);
-    translate_x(O.x);
+    translate_y(O.y());
+    translate_x(O.x());
 }
 
 Interval
@@ -129,20 +128,30 @@
 
     if (!output){
 	Molecule*m = brew_molecule_p();
-	r = m->extent().x;
+	r = m->extent().x();
 	delete m;
     } else
-	r = output->extent().x;
+	r = output->extent().x();
     return r;
 }
 
 Interval
 Score_elem::width() const
 {
-    Interval r=(empty_b_)?Interval(0,0):do_width();
+    return extent( X_AXIS);
+}
 
+Interval
+Score_elem::extent(Axis a)const
+{
+    Interval r(0,0);
+    if ( !empty_b_ ) {
+	
+	r = a == X_AXIS? do_width(): do_height();
+    }
+    
     if (!r.empty_b()) // float exception on DEC Alpha
-	r+=offset_.x;
+	r+=offset_[a];
 
     return r;
 }
@@ -153,23 +162,17 @@
     Interval r;
     if (!output){
 	Molecule*m = brew_molecule_p();
-	r = m->extent().y;
+	r = m->extent().y();
 	delete m;
     } else
-	r = output->extent().y;
+	r = output->extent().y();
     return r;
 }
 
 Interval
 Score_elem::height() const
 {
-    Interval r=(empty_b_)?Interval(0,0): do_height();
-
-    if (!r.empty_b())
-	r+=offset_.y;
-
-  
-    return r;
+    return extent(Y_AXIS);
 }
 
 void
@@ -179,8 +182,8 @@
     mtor << name() << "{\n";
     mtor << "dets: " << dependent_size() << "dependencies: " << 
 	dependency_size();
-    if (offset_.x || offset_.y)
-	mtor << "offset (" << offset_.x << ", " << offset_.y <<")";
+    if (offset_.x() || offset_.y())
+	mtor << "offset (" << offset_.x() << ", " << offset_.y() <<")";
     mtor << "\n";
 
     do_print();
@@ -196,8 +199,7 @@
 Score_elem::Score_elem()
 {
     transparent_b_ = empty_b_ = false;
-    x_group_l_ = 0;
-    y_group_l_ =0;
+    axis_group_l_a_[0] = axis_group_l_a_[1] =0;
     pscore_l_=0;
     offset_ = Offset(0,0);
     output = 0;
@@ -233,6 +235,9 @@
     for (int i=0; i < dependency_size(); i++)
 	dependency(i)->pre_processing();
 
+    Link_array<Score_elem> extra(get_extra_dependencies());
+    for (int i=0; i < extra.size(); i++)
+	extra[i]->pre_processing();
     
     do_pre_processing();
     status_ = PRECALCED;
@@ -253,7 +258,11 @@
     for (int i=0; i < dependency_size(); i++)
 	dependency(i)->breakable_col_processing();
 
+      Link_array<Score_elem> extra(get_extra_dependencies());
+    for (int i=0; i < extra.size(); i++)
+	extra[i]->breakable_col_processing();
     
+  
     do_breakable_col_processing();
     status_ = PREBROKEN;
 }
@@ -273,6 +282,11 @@
     for (int i=0; i < dependency_size(); i++)
 	dependency(i)->break_processing();
 
+    Link_array<Score_elem> extra(get_extra_dependencies());
+    for (int i=0; i < extra.size(); i++)
+	extra[i]->break_processing();
+    
+
     
     do_break_processing();
     status_ = BROKEN;
@@ -297,6 +311,12 @@
   
     for (int i=0; i < dependency_size(); i++)
 	dependency(i)->post_processing();
+
+    Link_array<Score_elem> extra(get_extra_dependencies());
+    for (int i=0; i < extra.size(); i++)
+	extra[i]->post_processing();
+    
+
     do_post_processing();
     status_=POSTCALCED;
 }
@@ -317,11 +337,21 @@
     for (int i=0; i < dependency_size(); i++)
 	dependency(i)->molecule_processing();
 
+    Link_array<Score_elem> extra(get_extra_dependencies());
+    for (int i=0; i < extra.size(); i++)
+	extra[i]->molecule_processing();
+    
+
     if (transparent_b_)
 	return ;
     output= brew_molecule_p();
 }
 
+/*
+  
+  VIRTUAL STUBS
+
+ */
 void
 Score_elem::do_post_processing()
 {
@@ -341,7 +371,6 @@
 void
 Score_elem::do_add_processing()
 {
-
 }
 
 void
@@ -349,13 +378,8 @@
 {
 }
 void
-Score_elem::do_substitute_dependent(Score_elem*o,Score_elem*n)
+Score_elem::do_substitute_dependent(Score_elem*,Score_elem*)
 {
-    if  ( o== y_group_l_ ) {
-	y_group_l_ = n ?  n->vertical_group() : 0;
-    } else if (o == x_group_l_ ) {
-	x_group_l_ = n ? n->horizontal_group() : 0;
-    }
 }
 
 
@@ -368,6 +392,10 @@
     Atom a(paper()->lookup_l()->fill(Box(Interval(0,0), Interval(0,0))));
     return new Molecule (a);
 }
+
+
+
+
 Offset
 Score_elem::offset() const
 {
@@ -445,6 +473,8 @@
     for (int i=0;  i <remove_us_arr.size(); i++)
 	remove_dependency(remove_us_arr[i]);
 
+    status_ = BROKEN;
+
 }
 
 /*
@@ -488,6 +518,7 @@
     for (int i=0;  i <remove_us_arr.size(); i++)
 	remove_dependency(remove_us_arr[i]);
 
+    status_ = PREBROKEN;
 }
 
 
@@ -498,8 +529,7 @@
     for (int i=0; i < dependency_size(); i++) 
 	dependency(i)->unlink_all();
     junk_links();
-    y_group_l_ = 0;
-    x_group_l_ = 0;
+    axis_group_l_a_[0] = axis_group_l_a_[1] =0;
 }
 
 void
@@ -512,9 +542,11 @@
     while  ( dependent_size() ) {
 	dependent(0)->remove_dependency(this);
     }
-}
-
+    for (int j=0; j < 2; j++)
+	if ( axis_group_l_a_[j])
+	    axis_group_l_a_[j]->remove_element(this);
 
+}
 
 void
 Score_elem::OK()const
@@ -524,4 +556,10 @@
 	dependency(i)->OK();
     }
 #endif
+}
+Link_array<Score_elem>
+Score_elem::get_extra_dependencies()const
+{
+    Link_array<Score_elem> empty;
+    return empty;
 }
diff -urN ../lilypond-0.1.1/lily/score-grav.cc ./lily/score-grav.cc
--- ../lilypond-0.1.1/lily/score-grav.cc	Tue Jul 29 00:38:59 1997
+++ ./lily/score-grav.cc	Wed Aug  6 22:10:59 1997
@@ -5,12 +5,12 @@
 
   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
 */
+
 #include "super-elem.hh"
 #include "scoreline.hh"
 #include "debug.hh"
 #include "score-elem.hh"
 #include "bar.hh"		// needed for Bar::static_name
-#include "staffline.hh"
 #include "score-grav.hh"
 #include "p-col.hh"
 #include "p-score.hh"
@@ -125,15 +125,10 @@
 void
 Score_engraver::typeset_element(Score_elem *elem_p)
 {
-    musical_item_p_arr_.push(elem_p);
-}
-
-void
-Score_engraver::typeset_breakable_item(Item * nobreak_p)
-{
-    if (nobreak_p) {
-	nobreak_item_p_arr_.push(nobreak_p);
-    }
+    if  ( elem_p->item() && elem_p->item()->breakable_b_ ) {
+	nobreak_item_p_arr_.push(elem_p->item());
+    } else
+	musical_item_p_arr_.push(elem_p);
 }
 
 void
@@ -144,6 +139,8 @@
 
     for  (int i =0; i < nobreak_item_p_arr_.size(); i++) {
 	ps_l->typeset_item(nobreak_item_p_arr_[i], c, 0);
+
+	// should get rid of this.. .
 	scoreline_l_->add_dependency(nobreak_item_p_arr_[i]);
     }
     nobreak_item_p_arr_.set_size(0);
@@ -208,6 +205,5 @@
 }
 
 IMPLEMENT_IS_TYPE_B1(Score_engraver,Engraver_group_engraver);
-
 ADD_THIS_ENGRAVER(Score_engraver);
 
diff -urN ../lilypond-0.1.1/lily/score-halign-grav.cc ./lily/score-halign-grav.cc
--- ../lilypond-0.1.1/lily/score-halign-grav.cc	Mon Jul 28 23:56:53 1997
+++ ./lily/score-halign-grav.cc	Tue Aug  5 22:28:13 1997
@@ -20,7 +20,7 @@
 Score_horizontal_align_engraver::do_pre_move_processing()
 {
     if (halign_p_) {
-	typeset_breakable_item(halign_p_);
+	typeset_element(halign_p_);
 	halign_p_ =0;
     }
 	
@@ -36,6 +36,7 @@
 	Score_align_engraver * align_grav_l = (Score_align_engraver*) reg;
 	if (!halign_p_) {
 	    halign_p_ = new Break_align_item;
+	    halign_p_->breakable_b_ = true;
 	    announce_element(Score_elem_info(halign_p_,0));
 	}
 	Item * it = i.elem_l_->item();
diff -urN ../lilypond-0.1.1/lily/score-performer.cc ./lily/score-performer.cc
--- ../lilypond-0.1.1/lily/score-performer.cc	Thu Jul 31 23:47:12 1997
+++ ./lily/score-performer.cc	Thu Aug  7 13:45:06 1997
@@ -1,6 +1,8 @@
 /*
   score-performer.cc -- implement Score_performer
 
+  source file of the GNU LilyPond music typesetter
+  
   (c) 1996, 1997 Jan Nieuwenhuizen <jan@digicash.com>
  */
 
@@ -8,6 +10,9 @@
 #include "score-performer.hh"
 #include "input-translator.hh"
 #include "midi-def.hh"
+#include "audio-item.hh"
+#include "audio-column.hh"
+#include "audio-score.hh"
 #include "midi-item.hh"
 #include "midi-stream.hh"
 #include "string-convert.hh"
@@ -47,16 +52,16 @@
     Performer_group_performer::do_removal_processing();
 
 
-    Midi_stream output_stream( midi_l_->outfile_str_, midi_item_p_arr_.size() + 1, 384 );    
+    Midi_stream output_stream( midi_l_->outfile_str_, midi_item_l_arr_.size() + 1, 384 );    
     *mlog << "MIDI output to " << midi_l_->outfile_str_ << " ..." << endl;    
 
     header( output_stream);
-    int track_i = 1;
-    for (int i=0; i<  midi_item_p_arr_.size(); i++) {
-	Midi_item * it_p = midi_item_p_arr_[i];
+//    int track_i = 1;
+    for (int i=0; i<  midi_item_l_arr_.size(); i++) {
+	Midi_item * it_p = midi_item_l_arr_[i];
 	
-	if ( it_p->is_type_b( Midi_track::static_name()))
-	    ((Midi_track*)it_p )->number_i_ = track_i ++;
+//	if ( it_p->is_type_b( Midi_track::static_name()))
+//	    ((Midi_track*)it_p )->number_i_ = track_i ++;
 	output_stream<< *it_p;
     }
     *output_stream.os_p_ << flush;
@@ -64,9 +69,16 @@
 }
 
 void
-Score_performer::play_event(Midi_item*m)
+Score_performer::play( Audio_item* l )
 {
-    midi_item_p_arr_.push(m);
+    l->audio_column_l_ = audio_column_l_;
+    audio_column_l_->add( l );
+}
+
+void
+Score_performer::play( Midi_item* l )
+{
+    midi_item_l_arr_.push( l );
 }
 
 Moment
@@ -105,7 +117,7 @@
 			  + String_convert::i2dec_str( 0, 0, '0' ) );
     midi_track.add( Moment( 0 ), &track_name );
 
-    Midi_tempo tempo ( get_tempo_i());
+    Midi_tempo tempo ( get_tempo_i() );
     midi_track.add( Moment(0), &tempo);
 
     output_stream  << midi_track;
@@ -115,6 +127,9 @@
 Score_performer::prepare( Moment m )
 {
     now_mom_ = m;
+    audio_column_l_ = new Audio_column( m );
+    
+    score_l_->audio_score_p_->add( audio_column_l_ );
 }
 
 void 
diff -urN ../lilypond-0.1.1/lily/score.cc ./lily/score.cc
--- ../lilypond-0.1.1/lily/score.cc	Fri Aug  1 20:09:25 1997
+++ ./lily/score.cc	Thu Aug  7 13:45:06 1997
@@ -17,6 +17,7 @@
 #include "source-file.hh"
 #include "midi-output.hh"
 #include "midi-def.hh"
+#include "audio-score.hh"
 #include "p-col.hh"
 #include "music-iterator.hh"
 #include "music.hh"
@@ -27,6 +28,7 @@
 Score::Score()
 {
     pscore_p_=0;
+    audio_score_p_ = 0;
     paper_p_ = 0;
     midi_p_ = 0;
     errorlevel_i_ = 0;
@@ -44,6 +46,7 @@
 {
     delete music_p_;
     delete pscore_p_;
+    delete audio_score_p_;
     delete paper_p_;
     delete midi_p_;
 }
@@ -89,6 +92,7 @@
 	return;
     
     *mlog << "\nCreating MIDI elements ..." << flush;
+    audio_score_p_ = new Audio_score( midi_p_ );
     
     Global_translator* score_trans=  midi_p_->get_global_translator_p();
     run_translator( score_trans );
@@ -163,7 +167,7 @@
 Score::paper_output()
 {
     if (paper_p_->outfile_str_=="")
-	paper_p_->outfile_str_ = default_out_fn + ".out";
+	paper_p_->outfile_str_ = default_out_fn + ".tex";
 
     if ( errorlevel_i_ ) { 
 	*mlog << "lilypond: warning: no output to: " << paper_p_->outfile_str_ 
diff -urN ../lilypond-0.1.1/lily/scoreline.cc ./lily/scoreline.cc
--- ../lilypond-0.1.1/lily/scoreline.cc	Mon Aug  4 23:31:00 1997
+++ ./lily/scoreline.cc	Wed Aug  6 22:11:10 1997
@@ -7,7 +7,6 @@
 */
 
 #include "scoreline.hh"
-#include "staffline.hh"
 #include "dimen.hh"
 #include "spanner.hh"
 #include "symbol.hh"
diff -urN ../lilypond-0.1.1/lily/scores.cc ./lily/scores.cc
--- ../lilypond-0.1.1/lily/scores.cc	Sat Jun  7 15:47:08 1997
+++ ./lily/scores.cc	Wed Aug  6 21:24:43 1997
@@ -28,9 +28,7 @@
 	
 	if (is_p->errorlevel_i_) {
 	    is_p->warning("Score contains errors. Will not process it. ");
-	  
 	} else { 
-	
 	    is_p->print ();
 	    is_p->process();
 	}
diff -urN ../lilypond-0.1.1/lily/script-grav.cc ./lily/script-grav.cc
--- ../lilypond-0.1.1/lily/script-grav.cc	Mon Jul 28 23:56:53 1997
+++ ./lily/script-grav.cc	Tue Aug  5 18:37:01 1997
@@ -44,33 +44,11 @@
     }
 }
 
-bool
-Script_engraver::acceptable_elem_b(Score_elem*s_l)
-{
-    char const *nC = s_l->name();
-    return (nC == Stem::static_name());
-}
-
-void
-Script_engraver::acknowledge_element(Score_elem_info info)
-{
-    Score_elem *elem_l = info.elem_l_;
-    if (!acceptable_elem_b(elem_l))
-	return;
-    
-    for (int i=0; i < script_p_arr_.size(); i++) {
-	Script*script_l = script_p_arr_[i];
-	if (elem_l->name() == Stem::static_name())
-	    script_l->set_stem((Stem*)elem_l->item());
-    }
-}
-
 void
 Script_engraver::do_pre_move_processing()
 {
     Staff_symbol* s_l = get_staff_info().staff_sym_l_;
     for (int i=0; i < script_p_arr_.size(); i++) {
-	
 	Script*script_p = script_p_arr_[i];
 	script_p->set_staffsym( s_l);
 	typeset_element(script_p);
diff -urN ../lilypond-0.1.1/lily/script.cc ./lily/script.cc
--- ../lilypond-0.1.1/lily/script.cc	Mon Jul 28 23:56:53 1997
+++ ./lily/script.cc	Thu Aug  7 02:40:52 1997
@@ -67,12 +67,16 @@
 Interval
 Script::do_width() const
 {
-    return specs_l_->get_atom(paper(), dir_i_).extent().x;
+    return specs_l_->get_atom(paper(), dir_i_).extent().x();
 }
 
 void
 Script::do_pre_processing()
 {
+    if  (breakable_b_ && break_status_i() != 1) {
+	transparent_b_ = empty_b_ = true;
+    }
+    
     if (!dir_i_)
 	set_default_dir();
     inside_staff_b_ = specs_l_->inside_b();
@@ -81,7 +85,7 @@
 Interval
 Script::symbol_height()const
 {
-    return specs_l_->get_atom(paper(), dir_i_).extent().y;
+    return specs_l_->get_atom(paper(), dir_i_).extent().y();
 }
 
 Molecule*
diff -urN ../lilypond-0.1.1/lily/span-bar-grav.cc ./lily/span-bar-grav.cc
--- ../lilypond-0.1.1/lily/span-bar-grav.cc	Mon Jul 28 23:56:52 1997
+++ ./lily/span-bar-grav.cc	Tue Aug  5 21:22:18 1997
@@ -46,7 +46,7 @@
 	for (int i=0; i < bar_l_arr_.size() ; i++)
 	    spanbar_p_->add(bar_l_arr_[i]);
 	spanbar_p_->set( valign_l_ );
-	typeset_breakable_item(spanbar_p_);
+	typeset_element(spanbar_p_);
 	spanbar_p_ =0;
     }
     bar_l_arr_.set_size( 0);
diff -urN ../lilypond-0.1.1/lily/span-bar.cc ./lily/span-bar.cc
--- ../lilypond-0.1.1/lily/span-bar.cc	Mon Jul 28 23:56:52 1997
+++ ./lily/span-bar.cc	Wed Aug  6 17:20:57 1997
@@ -63,7 +63,7 @@
 Interval
 Span_bar::do_width() const
 {
-    return paper()->lookup_l()->bar(type_str_, 40 PT).dim.x; // ugh
+    return paper()->lookup_l()->bar(type_str_, 40 PT).dim.x(); // ugh
 }
 void
 Span_bar::do_pre_processing()
diff -urN ../lilypond-0.1.1/lily/spanner.cc ./lily/spanner.cc
--- ../lilypond-0.1.1/lily/spanner.cc	Mon Aug  4 22:02:51 1997
+++ ./lily/spanner.cc	Wed Aug  6 20:55:58 1997
@@ -36,6 +36,9 @@
 void
 Spanner::break_into_pieces(bool copy_deps_b)
 {
+    if (  broken_into_l_arr_.size() )
+	return; 
+	 
     PCol * left = left_col_l_;
     PCol * right = right_col_l_;
     if(left->daddy_l_) left = left->daddy_l_;
diff -urN ../lilypond-0.1.1/lily/staff-performer.cc ./lily/staff-performer.cc
--- ../lilypond-0.1.1/lily/staff-performer.cc	Thu Jul 31 22:01:47 1997
+++ ./lily/staff-performer.cc	Thu Aug  7 13:45:06 1997
@@ -1,7 +1,9 @@
 /*
   staff-performer.cc -- implement Staff_performer
 
-  (c) 1996, 1997 Jan Nieuwenhuizen <jan@digicash.com>
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
  */
 
 
@@ -10,6 +12,8 @@
 #include "input-translator.hh"
 #include "debug.hh"
 #include "midi-def.hh"
+#include "audio-column.hh"
+#include "audio-item.hh"
 #include "midi-item.hh"
 #include "midi-stream.hh"
 #include "string.hh"
@@ -21,31 +25,44 @@
 
 Staff_performer::Staff_performer()
 {
-    midi_mom_ = 0;
     midi_track_p_ = new Midi_track;
 }
+
+Staff_performer::~Staff_performer()
+{
+    delete midi_track_p_;
+}
+
 void
 Staff_performer::do_creation_processing()
 {
-    header();
 }
 
 void
 Staff_performer::do_removal_processing()
 {
-    Performer::play_event( midi_track_p_);
-}
+    header();
 
-Staff_performer::~Staff_performer()
-{
-    delete midi_track_p_;
+    Moment midi_mom = 0;
+    for ( PCursor<Audio_item*> i( audio_item_p_list_ ); i.ok(); i++ ) {
+	Audio_item* l = *i;
+	Moment mom = l->audio_column_l_->at_mom();
+	Moment delta_t = mom - midi_mom_ ;
+	midi_mom_ += delta_t;
+	Midi_item* p = l->midi_item_p();
+	p->channel_i_ = track_i_;
+	midi_track_p_->add( delta_t, p );
+	delete p;
+    }
+
+    Performer::play( midi_track_p_ );
 }
 
 void
 Staff_performer::header()
 {
     // set track name
-    Midi_text track_name( Midi_text::TRACK_NAME, instrument_str());
+    Midi_text track_name( Midi_text::TRACK_NAME, instrument_str() );
     midi_track_p_->add( Moment( 0 ), &track_name );
 
     // set instrument description
@@ -60,7 +77,7 @@
     Midi_instrument instrument( channel_i, instrument_str() );
     midi_track_p_->add( Moment( 0 ), &instrument );
 
-    Midi_tempo midi_tempo( get_tempo_i(  ) );
+    Midi_tempo midi_tempo( get_tempo_i() );
     midi_track_p_->add( Moment( 0 ), &midi_tempo );
 }
 
@@ -71,12 +88,17 @@
 }
 
 void 
-Staff_performer::play_event( Midi_item* l )
+Staff_performer::play( Audio_item* p )
+{
+    audio_item_p_list_.bottom().add( p );
+    Performer::play( p );
+}
+
+// huh?
+void 
+Staff_performer::play( Midi_item* p )
 {
-    Moment mom = get_mom();
-    Moment delta_t = mom - midi_mom_ ;
-    midi_mom_ += delta_t;
-    midi_track_p_->add( delta_t, l);
+    Performer::play( p );
 }
 
 
diff -urN ../lilypond-0.1.1/lily/staffline.cc ./lily/staffline.cc
--- ../lilypond-0.1.1/lily/staffline.cc	Mon Aug  4 14:35:18 1997
+++ ./lily/staffline.cc	Thu Jan  1 01:00:00 1970
@@ -1,21 +0,0 @@
-/*
-  staffline.cc -- implement Line_of_staff
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-#include "staffline.hh"
-#include "scoreline.hh"
-#include "dimen.hh"
-#include "spanner.hh"
-#include "symbol.hh"
-#include "paper-def.hh"
-#include "molecule.hh"
-#include "p-col.hh"
-#include "p-score.hh"
-
-
-
-IMPLEMENT_IS_TYPE_B2(Line_of_staff,Spanner,Horizontal_vertical_group);
diff -urN ../lilypond-0.1.1/lily/stem.cc ./lily/stem.cc
--- ../lilypond-0.1.1/lily/stem.cc	Mon Jul 28 23:56:52 1997
+++ ./lily/stem.cc	Wed Aug  6 17:31:05 1997
@@ -237,7 +237,7 @@
     if (!print_flag_b_ || abs(flag_i_) <= 4)
 	return Interval(0,0);	// TODO!
     Paper_def*p= paper();
-    Interval r(p->lookup_l()->flag(flag_i_).dim.x);
+    Interval r(p->lookup_l()->flag(flag_i_).dim.x());
     r+= stem_xoffset_f_;
     return r;
 }
diff -urN ../lilypond-0.1.1/lily/symbol.cc ./lily/symbol.cc
--- ../lilypond-0.1.1/lily/symbol.cc	Thu Apr 24 15:05:41 1997
+++ ./lily/symbol.cc	Wed Aug  6 18:49:16 1997
@@ -17,5 +17,5 @@
 String
 Symbol::str()const 
 {
-    return  "symbol(\'"+tex+"\', (" + dim.x.str() + ", " + dim.y.str() + "))";
+    return  "symbol(\'"+tex+"\', (" + dim.x().str() + ", " + dim.y().str() + "))";
 }
diff -urN ../lilypond-0.1.1/lily/template8.cc ./lily/template8.cc
--- ../lilypond-0.1.1/lily/template8.cc	Fri Jul 25 23:14:25 1997
+++ ./lily/template8.cc	Thu Aug  7 13:45:07 1997
@@ -1,5 +1,21 @@
+/*
+  template8.cc -- instantiate audio List classes
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
 
 #include "proto.hh"
 #include "plist.hh"
-#include "plist.tcc"
+#include "audio-column.hh"
+#include "audio-item.hh"
+#include "cursor.tcc"
+#include "list.tcc"
 #include "pcursor.tcc"
+#include "plist.tcc"
+
+
+IPL_instantiate(Audio_item);
+IPL_instantiate(Audio_column);
+
diff -urN ../lilypond-0.1.1/lily/tex-beam.cc ./lily/tex-beam.cc
--- ../lilypond-0.1.1/lily/tex-beam.cc	Mon May 19 16:14:53 1997
+++ ./lily/tex-beam.cc	Wed Aug  6 18:49:16 1997
@@ -24,8 +24,8 @@
     bs.tex = substitute_args(bs.tex,args);
     int w = 2 << widx;
     Real width = w PT;
-    bs.dim.x = Interval(0,width);
-    bs.dim.y = Interval(0,width*slope);
+    bs.dim.x() = Interval(0,width);
+    bs.dim.y() = Interval(0,width*slope);
     return bs;
 }
 
@@ -55,8 +55,8 @@
     args.push(print_dimen(height));
     args.push(print_dimen(width));
     bs.tex = substitute_args(bs.tex,args);
-    bs.dim.x = Interval(0,width);
-    bs.dim.y = Interval(0,height);
+    bs.dim.x() = Interval(0,width);
+    bs.dim.y() = Interval(0,height);
     return bs;
 }
 
@@ -97,8 +97,8 @@
     
     Symbol ret;
     ret.tex = m.TeX_string();
-    ret.dim.y = Interval(0,width*slope);
-    ret.dim.x = Interval(0,width);
+    ret.dim.y() = Interval(0,width*slope);
+    ret.dim.x() = Interval(0,width);
     
     return ret;
 }
diff -urN ../lilypond-0.1.1/lily/tex-slur.cc ./lily/tex-slur.cc
--- ../lilypond-0.1.1/lily/tex-slur.cc	Wed Jul 30 20:54:13 1997
+++ ./lily/tex-slur.cc	Wed Aug  6 18:49:16 1997
@@ -52,8 +52,8 @@
 
     Symbol s;
     
-    s.dim.y = Interval(min(0,0), max(0,0)); // todo
-    s.dim.x = Interval(0,dx);
+    s.dim.y() = Interval(min(0,0), max(0,0)); // todo
+    s.dim.x() = Interval(0,dx);
 
     String f =  String("\\hslurchar");
     f += direction_char(0);
@@ -95,8 +95,8 @@
     }
 	
     Symbol s;
-    s.dim.x = Interval(0,dx);
-    s.dim.y = Interval(min(0,dy), max(0,dy));
+    s.dim.x() = Interval(0,dx);
+    s.dim.y() = Interval(min(0,dy), max(0,dy));
 
 
     String f = String("\\hslurchar");
@@ -156,8 +156,8 @@
     }
     
     Symbol s;
-    s.dim.x = Interval(0,dx);
-    s.dim.y = Interval(min(0,dy), max(0,dy));
+    s.dim.x() = Interval(0,dx);
+    s.dim.y() = Interval(min(0,dy), max(0,dy));
 
     String f = String("\\slurchar") + String( direction_char(y_sign) );
 
diff -urN ../lilypond-0.1.1/lily/text-def.cc ./lily/text-def.cc
--- ../lilypond-0.1.1/lily/text-def.cc	Mon Jul 28 23:56:52 1997
+++ ./lily/text-def.cc	Wed Aug  6 18:50:55 1997
@@ -18,7 +18,7 @@
 {
     Atom a = get_atom(p,0);
 
-    Real guess_width_f = text_str_.length_i() * a.sym_.dim.x.length(); // ugh
+    Real guess_width_f = text_str_.length_i() * a.sym_.dim.x().length(); // ugh
     Interval i(0, guess_width_f);
     i += - (align_i_ + 1)* i.center();
     return i;
diff -urN ../lilypond-0.1.1/lily/text-item.cc ./lily/text-item.cc
--- ../lilypond-0.1.1/lily/text-item.cc	Mon Jul 28 23:56:52 1997
+++ ./lily/text-item.cc	Wed Aug  6 20:54:51 1997
@@ -36,7 +36,7 @@
 Interval
 Text_item::symbol_height()const
 {
-    return tdef_p_->get_atom(paper(), dir_i_).sym_.dim.y;
+    return tdef_p_->get_atom(paper(), dir_i_).sym_.dim.y();
 }
     
 Molecule*
@@ -51,7 +51,7 @@
     Molecule* mol_p = new Molecule(a);
 
     if(dir_i_<0 )		// should do something better anyway.
-	mol_p->translate_y( -mol_p->extent().y.left );
+	mol_p->translate_y( -mol_p->extent().y().left );
     mol_p->translate_y( pos_i_ * paper()->internote_f());
     
     return mol_p;
diff -urN ../lilypond-0.1.1/lily/text-spanner.cc ./lily/text-spanner.cc
--- ../lilypond-0.1.1/lily/text-spanner.cc	Mon Jul 28 23:56:52 1997
+++ ./lily/text-spanner.cc	Wed Aug  6 18:50:55 1997
@@ -69,7 +69,7 @@
 Interval
 Text_spanner::height()const
 {
-    return brew_molecule_p()->extent().y;
+    return brew_molecule_p()->extent().y();
 }
 
 void
diff -urN ../lilypond-0.1.1/lily/vertical-align-elem.cc ./lily/vertical-align-elem.cc
--- ../lilypond-0.1.1/lily/vertical-align-elem.cc	Mon Jul 28 23:56:52 1997
+++ ./lily/vertical-align-elem.cc	Thu Aug  7 12:53:58 1997
@@ -27,6 +27,13 @@
 	else
 	    elem_l_arr_.del(i);
 }
+
+/**
+  Align elements top to bottom. 
+  The first element has its top at y =0.0 afterwards
+
+  TODO configurable, like Horizontal_align_item
+ */
 void
 Vertical_align_element::do_post_processing()
 {
diff -urN ../lilypond-0.1.1/lily/vertical-align-grav.cc ./lily/vertical-align-grav.cc
--- ../lilypond-0.1.1/lily/vertical-align-grav.cc	Mon Aug  4 14:43:33 1997
+++ ./lily/vertical-align-grav.cc	Wed Aug  6 18:50:54 1997
@@ -36,7 +36,7 @@
 {
     if ( i.origin_grav_l_arr_.size() == 2 && 
 	 i.elem_l_->is_type_b(Vertical_group::static_name()) &&
-	 !i.elem_l_->y_group_l_   ) {
+	 !i.elem_l_->axis_group_l_a_[Y_AXIS]   ) {
 	assert( !valign_p_->contains_b(  i.elem_l_) );
 
 	valign_p_->add ( i.elem_l_ );
diff -urN ../lilypond-0.1.1/lily/vertical-group-spanner.cc ./lily/vertical-group-spanner.cc
--- ../lilypond-0.1.1/lily/vertical-group-spanner.cc	Tue Aug  5 01:29:58 1997
+++ ./lily/vertical-group-spanner.cc	Thu Aug  7 14:08:36 1997
@@ -10,95 +10,4 @@
 #include "item.hh"
 #include "p-col.hh"
 
-/**
-  Uncouple all elements of this Vertical_group. Ugh!
- */
-void
-Vertical_group_spanner::remove_all()
-{
-    for (int i=0; i < elem_l_arr_.size(); i++){
-	elem_l_arr_[i]->y_group_l_ = 0;
-    }
-    elem_l_arr_.set_size(0);
-    junk_dependencies();   
-}
-
-void
-Vertical_group_spanner::do_break_processing()
-{
-    set_my_columns();
-    if ( line_l() ) {
-	return;
-    }
-    break_into_pieces( false );
-
-    Link_array<Score_elem> elem_l_arr = elem_l_arr_;
-    remove_all();
-    
-    
-    
-    for (int i=0; i < elem_l_arr.size(); i++) {
-	Score_elem * elt = elem_l_arr[i];
-	Line_of_score *elt_line = elt->line_l();
-	
-	if  ( elt-> y_group_l_ )
-	    continue;
-	
-	if ( ! elt_line ){ 
-	    if (elt->spanner()) {
-		Spanner * sp = elt->spanner();
-		
-		for (int j =0; j < broken_into_l_arr_.size(); j++) {
-		    Vertical_group_spanner * my_broken_l
-			 = (Vertical_group_spanner*)broken_into_l_arr_[j];
-		    
-		    Spanner * broken_span_l 
-			= sp->find_broken_piece(my_broken_l->line_l());
-		    
-		    if (broken_span_l) {
-			my_broken_l->add_element(broken_span_l );
-		    }
-		}
-	    } else if (elt->item() && elt->item()->pcol_l_->breakpoint_b()
-		       && elt->item()->break_status_i() == 0) {
-		for (int j =0; j < 2; j++) {
-		    Item * my_item = elt->item()->broken_to_a_[j];
-		    Line_of_score * item_line_l_ = my_item->line_l() ;
-		    if ( ! item_line_l_ ) 
-			continue;
-		    
-		    Vertical_group_spanner * v
-			= (Vertical_group_spanner*)find_broken_piece( item_line_l_);
-		    if (v) {
-			v->add_element( my_item );
-		    }
-		}
-	    }
-	} else {
-	    Vertical_group_spanner * my_broken_l
-		= (Vertical_group_spanner*)find_broken_piece( elt->line_l() );
-	    my_broken_l->add_element( elt );
-	}
-    }
-    for (int j =0; j < broken_into_l_arr_.size(); j++) 
-	broken_into_l_arr_[j]->break_processing();	
-}
-
-Vertical_group_spanner::Vertical_group_spanner()
-{
-}
-
-void
-Vertical_group_spanner::do_print() const
-{
-    Vertical_group::do_print();
-}
-
-
-
-IMPLEMENT_IS_TYPE_B2(Vertical_group_spanner, Spanner, Vertical_group);
-
-Vertical_group_spanner::Vertical_group_spanner(Vertical_group_spanner const &s)
-    : Spanner(s), Vertical_group(s)
-{
-}
+IMPLEMENT_IS_TYPE_B2(Vertical_group_spanner, Axis_group_spanner, Vertical_group);
diff -urN ../lilypond-0.1.1/make/Makefile ./make/Makefile
--- ../lilypond-0.1.1/make/Makefile	Sun Aug  3 17:16:38 1997
+++ ./make/Makefile	Thu Aug  7 12:24:48 1997
@@ -16,7 +16,7 @@
 # identify module:
 #
 NAME = make
-
+SUBDIRS = debian
 
 # list of distribution files:
 
@@ -24,6 +24,7 @@
 # configure and make.
 EXTRA_DISTFILES = Configure_variables.make.in lilypond.spec.in Toplevel.make.in \
 	lilypond.lsm.in $(outdir)/lilypond.spec $(outdir)/lilypond.lsm
+
 #
 
 # generic variables:
diff -urN ../lilypond-0.1.1/make/Rules.make ./make/Rules.make
--- ../lilypond-0.1.1/make/Rules.make	Tue Jul 29 00:57:06 1997
+++ ./make/Rules.make	Wed Aug  6 01:17:52 1997
@@ -12,7 +12,7 @@
 
 # so why does make still consider xx.y : RCS/xx.y,v ?
 # there is no suffix ,v anymore!
-.SUFFIXES: .cc .o .hh .y .l .pod .text .1 .dep .html
+.SUFFIXES: .cc .o .hh .y .l  .dep
 
 
 # compile rules:
diff -urN ../lilypond-0.1.1/make/Targets.make ./make/Targets.make
--- ../lilypond-0.1.1/make/Targets.make	Mon Aug  4 15:19:45 1997
+++ ./make/Targets.make	Wed Aug  6 22:01:16 1997
@@ -123,7 +123,7 @@
 
 # doc++ documentation of classes
 doc++: $(progdocs)	
-	doc++ -k -p -d $(DOCDIR) $^
+	$(docxx) -S -k -p -d $(DOCDIR) $^
 
 # ugh. should generate in out/
 dist:
diff -urN ../lilypond-0.1.1/make/Variables.make ./make/Variables.make
--- ../lilypond-0.1.1/make/Variables.make	Mon Aug  4 16:51:00 1997
+++ ./make/Variables.make	Wed Aug  6 22:05:36 1997
@@ -157,9 +157,6 @@
 
 DO_CXX_COMPILE=$(DODEP)\
 	$(CXX) -c $(CXXFLAGS) $(CXX_OUTPUT_OPTION) 
-# "CC = $(CC)"
-# "CXX = $(CXX)"
-#
 
 # linker:
 #
@@ -205,7 +202,8 @@
 
 # .hh should be first. Don't know why
 # take some trouble to auto ignore sources and obsolete stuff.
-progdocs=$(shell $(FIND) ./ -name '*.hh' |egrep -v '$(OUTDIR_NAME)') $(shell $(FIND) ./ -name '*.cc'|egrep -v '$(OUTDIR_NAME)')
+progdocs=$(shell $(FIND) ./ -name '*.hh' |egrep -v '$(OUTDIR_NAME)') \
+	$(shell $(FIND) ./ -name '*.cc' |egrep -v '$(OUTDIR_NAME)') \
 
 
 pod2html=pod2html
@@ -221,3 +219,5 @@
 # substitute $(STRIP) in Site.make if you want stripping
 DO_STRIP=true
 
+
+docxx=doc++
diff -urN ../lilypond-0.1.1/make/debian/Makefile ./make/debian/Makefile
--- ../lilypond-0.1.1/make/debian/Makefile	Thu Jan  1 01:00:00 1970
+++ ./make/debian/Makefile	Thu Aug  7 12:01:06 1997
@@ -0,0 +1,20 @@
+depth = ../..
+
+NAME= debian
+
+# generic variables:
+#
+include ./$(depth)/make/Variables.make
+include ./$(depth)/make/Files.make 
+#
+
+# generic targets and rules:
+#
+include ./$(depth)/make/Targets.make
+include ./$(depth)/make/Rules.make
+#
+
+
+EXTRA_DISTFILES = README.debian.ex changelog control\
+	copyright dirs diversions.ex docs examples info.ex menu.ex postinst\
+	postrm rules watch
diff -urN ../lilypond-0.1.1/make/debian/README.debian.ex ./make/debian/README.debian.ex
--- ../lilypond-0.1.1/make/debian/README.debian.ex	Thu Jan  1 01:00:00 1970
+++ ./make/debian/README.debian.ex	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,6 @@
+lilypond for DEBIAN
+-------------------
+
+Comments regarding the Package
+
+Anthony Fok <foka@gpu.srv.ualberta.ca>, Wed,  6 Aug 1997 02:14:59 -0600
diff -urN ../lilypond-0.1.1/make/debian/changelog ./make/debian/changelog
--- ../lilypond-0.1.1/make/debian/changelog	Thu Jan  1 01:00:00 1970
+++ ./make/debian/changelog	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,10 @@
+lilypond (0.1.0-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Anthony Fok <foka@gpu.srv.ualberta.ca>  Wed,  6 Aug 1997 04:40:57 -0600
+
+Local variables:
+mode: debian-changelog
+add-log-mailing-address: "foka@gpu.srv.ualberta.ca"
+End:
diff -urN ../lilypond-0.1.1/make/debian/control ./make/debian/control
--- ../lilypond-0.1.1/make/debian/control	Thu Jan  1 01:00:00 1970
+++ ./make/debian/control	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,22 @@
+Source: lilypond
+Section: tex
+Priority: contrib/optional
+Maintainer: Anthony Fok <foka@gpu.srv.ualberta.ca>
+Standards-Version: 2.2.0.0
+
+Package: lilypond
+Architecture: any
+Depends: ${shlibs:Depends}
+Recommends: tetex-base, musixtex | musixtex-fonts
+Description: GNU LilyPond -- A preprocessor to make TeX typeset music.
+ GNU LilyPond is a program which converts a music-script (mudela) into TeX
+ output, or MIDI to produce multi-staff scores. Features include multiple
+ meters, clefs, keys, lyrics, versatile input-language, cadenzas beams,
+ slurs, triplets, multiple voices.
+ .
+ Note: LilyPond uses the fonts from MusiXTeX.  Please install the package
+       musixtex or musixtex-fonts when you install lilypond.  :)
+ .
+  URL: http://www.stack.nl/~hanwen/lilypond/
+  Authors: Han-Wen Nienhuys <hanwen@stack.nl>
+           Jan Nieuwenhuizen <jan@digicash.com>
diff -urN ../lilypond-0.1.1/make/debian/copyright ./make/debian/copyright
--- ../lilypond-0.1.1/make/debian/copyright	Thu Jan  1 01:00:00 1970
+++ ./make/debian/copyright	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,36 @@
+This package was debianized by Anthony Fok foka@gpu.srv.ualberta.ca on
+Wed,  6 Aug 1997 04:30:28 -0600
+
+It was downloaded from
+    ftp://pcnov095.win.tue.nl/pub/lilypond/lilypond-0.1.0.tar.gz
+
+It is also available from:
+    ftp://alpha.gnu.ai.mit.edu/gnu/lilypond-0.1.0.tar.gz
+
+For more informatino about GNU LilyPond, please visit:
+    http://www.stack.nl/~hanwen/lilypond/ for more information.
+
+
+Authors:
+    Han-Wen Nienhuys <hanwen@stack.nl>
+    Jan Nieuwenhuizen <jan@digicash.com>
+ 
+Copyright:
+
+  GNU LilyPond is Copyright (C) Free Software Foundation, Inc.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; version 2 dated June, 1991.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program;  if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave., Cambridge, MA 02139, USA.
+
+  On Debian GNU/Linux systems, the complete text of the GNU General
+  Public License can be found in `/usr/doc/copyright/GPL.gz'.
diff -urN ../lilypond-0.1.1/make/debian/dirs ./make/debian/dirs
--- ../lilypond-0.1.1/make/debian/dirs	Thu Jan  1 01:00:00 1970
+++ ./make/debian/dirs	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,2 @@
+usr/bin
+usr/lib/texmf/doc
diff -urN ../lilypond-0.1.1/make/debian/diversions.ex ./make/debian/diversions.ex
--- ../lilypond-0.1.1/make/debian/diversions.ex	Thu Jan  1 01:00:00 1970
+++ ./make/debian/diversions.ex	Thu Aug  7 11:50:54 1997
@@ -0,0 +1 @@
+<FILE> <Diverted to> <Packagename>
diff -urN ../lilypond-0.1.1/make/debian/docs ./make/debian/docs
--- ../lilypond-0.1.1/make/debian/docs	Thu Jan  1 01:00:00 1970
+++ ./make/debian/docs	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,3 @@
+Documentation/out/*.text
+Documentation/*.doc
+Documentation/lelie_logo.gif
diff -urN ../lilypond-0.1.1/make/debian/examples ./make/debian/examples
--- ../lilypond-0.1.1/make/debian/examples	Thu Jan  1 01:00:00 1970
+++ ./make/debian/examples	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,2 @@
+input/*.ly
+input/*.tex
diff -urN ../lilypond-0.1.1/make/debian/info.ex ./make/debian/info.ex
--- ../lilypond-0.1.1/make/debian/info.ex	Thu Jan  1 01:00:00 1970
+++ ./make/debian/info.ex	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,15 @@
+# This is a configuration files for installing a .info menu
+# The Description to be placed into the directory
+DESCR="Description"
+
+# The section this info file should be placed in (Regexp) followed by
+# the new section name to be created if the Regexp does not match
+# (Optional. If not given the .info will be appended to the directory)
+#SECTION_MATCH="Regexp"
+#SECTION_NAME="New Section Name"
+
+# The file referred to from the Info directory
+FILE=lilypond.info
+
+# Optional. The files to be copied to /usr/info
+#FILES=*.info
diff -urN ../lilypond-0.1.1/make/debian/menu.ex ./make/debian/menu.ex
--- ../lilypond-0.1.1/make/debian/menu.ex	Thu Jan  1 01:00:00 1970
+++ ./make/debian/menu.ex	Thu Aug  7 11:50:54 1997
@@ -0,0 +1 @@
+text Apps/Misc lilypond none "lilypond Description" /usr/bin/lilypond
diff -urN ../lilypond-0.1.1/make/debian/postinst ./make/debian/postinst
--- ../lilypond-0.1.1/make/debian/postinst	Thu Jan  1 01:00:00 1970
+++ ./make/debian/postinst	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,7 @@
+#!/bin/bash
+set -e
+
+if [ -x /usr/bin/texhash -a -e /usr/lib/texmf/ls-R ]; then
+    texhash
+fi
+
diff -urN ../lilypond-0.1.1/make/debian/postrm ./make/debian/postrm
--- ../lilypond-0.1.1/make/debian/postrm	Thu Jan  1 01:00:00 1970
+++ ./make/debian/postrm	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+set -e
+
+case "$1" in
+    remove)
+        if [ -x /usr/bin/texhash -a -e /usr/lib/texmf/ls-R ]; then
+            texhash
+        fi
+    ;;
+
+    upgrade)
+    ;;
+
+    purge)
+        if [ -x /usr/bin/texhash -a -e /usr/lib/texmf/ls-R ]; then
+            texhash
+        fi
+    ;;
+
+    failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 0
+    ;;
+esac
diff -urN ../lilypond-0.1.1/make/debian/rules ./make/debian/rules
--- ../lilypond-0.1.1/make/debian/rules	Thu Jan  1 01:00:00 1970
+++ ./make/debian/rules	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,57 @@
+#!/usr/bin/make -f
+# Made with the aid of debmake, by Christoph Lameter,
+# based on the sample debian/rules file for GNU hello by Ian Jackson.
+
+package=lilypond
+
+build:
+	$(checkdir)
+	./configure --enable-checking --disable-debugging \
+		--enable-printing --prefix=/usr --enable-optimize \
+		--enable-shared
+	make all
+
+	touch build
+
+clean:
+	$(checkdir)
+	-rm -f build
+	-make distclean
+	-rm -f {,*/}out/{*,.build} flower/config.{log,status}
+	-rm -f `find . -name "*~"`
+	-rm -rf debian/tmp debian/files* core debian/substvars
+
+binary-indep:	checkroot build
+	$(checkdir)
+# There are no architecture-independent files to be uploaded
+# generated by this package.  If there were any they would be
+# made here.
+
+binary-arch:	checkroot build
+	$(checkdir)
+	-rm -rf debian/tmp
+	install -d debian/tmp
+	cd debian/tmp && install -d `cat ../dirs`
+	make prefix=`pwd`/debian/tmp/usr install
+	ln -fs ../../../doc/lilypond debian/tmp/usr/lib/texmf/doc/lilypond
+# Must have debmake installed for this to work. Otherwise please copy
+# /usr/bin/debstd into the debian directory and change debstd to debian/debstd
+	debstd -m BUGS TODO NEWS DEDICATION ANNOUNCE README
+	dpkg-gencontrol
+	chown -R root.root debian/tmp
+	chmod -R go=rX debian/tmp
+	dpkg --build debian/tmp ..
+
+define checkdir
+	test -f debian/rules
+endef
+
+# Below here is fairly generic really
+
+binary:		binary-indep binary-arch
+
+checkroot:
+	$(checkdir)
+	test root = "`whoami`"
+
+.PHONY: binary binary-arch binary-indep clean checkroot
diff -urN ../lilypond-0.1.1/make/debian/watch ./make/debian/watch
--- ../lilypond-0.1.1/make/debian/watch	Thu Jan  1 01:00:00 1970
+++ ./make/debian/watch	Thu Aug  7 11:50:54 1997
@@ -0,0 +1,5 @@
+# Example watch control file for uscan
+# 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
diff -urN ../lilypond-0.1.1/mi2mu/Makefile ./mi2mu/Makefile
--- ../lilypond-0.1.1/mi2mu/Makefile	Mon Aug  4 14:23:19 1997
+++ ./mi2mu/Makefile	Wed Aug  6 15:06:41 1997
@@ -13,6 +13,9 @@
 depth = ..
 #
 
+NAME = mi2mu
+MODULE_NAME = mi2mu
+
 # generic variables:
 #
 include ./$(depth)/make/Variables.make
@@ -21,8 +24,6 @@
 
 # identify module:
 #
-NAME = mi2mu
-MODULE_NAME = mi2mu
 include $(mi2mu-dir)/VERSION
 build = $(mi2mu-dir)/$(outdir)/.build
 #
diff -urN ../lilypond-0.1.1/mi2mu/TODO ./mi2mu/TODO
--- ../lilypond-0.1.1/mi2mu/TODO	Mon Jun  2 12:52:19 1997
+++ ./mi2mu/TODO	Tue Aug  5 23:37:55 1997
@@ -6,6 +6,8 @@
 
 IMPORTANT
 
+	* junk one in list vs. array
+
 	* remove silly #warning using midi_voice list
 
 	* add mi2mu example output (.midi.ly and .gif) to website
diff -urN ../lilypond-0.1.1/mi2mu/lily-stream.cc ./mi2mu/lily-stream.cc
--- ../lilypond-0.1.1/mi2mu/lily-stream.cc	Tue Jul 22 17:39:27 1997
+++ ./mi2mu/lily-stream.cc	Wed Aug  6 15:06:37 1997
@@ -108,10 +108,12 @@
     *os_p_ << midi_parser_l_g->filename_str_;
     *os_p_ << "\n\n";    
     // ugh
-    *os_p_ << "\\version \"0.0.61\";\n";
+    *os_p_ << "\\version \"0.1.0\";\n";
 }
 /*
   snapnie: dit kan toch automaties? Zie ook dstream.
+
+  HWN
   */
 void
 Lily_stream::indent()
diff -urN ../lilypond-0.1.1/tex/taupindefs.tex ./tex/taupindefs.tex
--- ../lilypond-0.1.1/tex/taupindefs.tex	Tue Jul  1 13:34:23 1997
+++ ./tex/taupindefs.tex	Thu Aug  7 12:36:51 1997
@@ -115,3 +115,5 @@
 \mdef\ispicato{29}
 \mdef\upbow{23}
 \mdef\downbow{22}
+
+\def\tr{{\it tr}}
