Generated by hanwen@cs.uu.nl using package-diff 0.62,
From = lilypond-1.0.16, To = lilypond-1.0.17

usage 

    cd lilypond-source-dir; patch -E -p1 < lilypond-1.0.17.diff

Patches do not contain automatically generated files 
or (urg) empty directories, 
i.e., you should rerun autoconf, configure 
and possibly make outdirs.

--state
1.0.16
1.0.17
++state
diff -urN ../lilypond-1.0.16/BUGS ./BUGS
--- ../lilypond-1.0.16/BUGS	Tue Sep 15 18:22:43 1998
+++ ./BUGS	Mon Oct 19 11:09:04 1998
@@ -3,6 +3,11 @@
 
 ********
 
+[Linux Intel, EGCS-1.1b]
+
+Compiling with -O2 -finline-functions will cause crashes during
+parsing stage.
+
 
 [All platforms] 
 
diff -urN ../lilypond-1.0.16/Documentation/links.yo ./Documentation/links.yo
--- ../lilypond-1.0.16/Documentation/links.yo	Tue Sep 15 18:22:43 1998
+++ ./Documentation/links.yo	Thu Oct 15 14:03:41 1998
@@ -63,6 +63,12 @@
 it()[your mirror here]
 )
 
+Debian releases are located at
+lurl(http://cgi.debian.org/www-master/debian.org/Packages/stable/tex/lilypond.html)
+and
+lurl(ftp://ftp.debian.org/debian/dists/unstable/main/binary-i386/tex/lilypond_*.deb)
+
+
 sect(News)
 
 The following newsgroups all contain material relevant to LilyPond
@@ -133,3 +139,5 @@
     RedHat Software Inc. develops and markets a GNU/Linux distribution (of
     which we are avid users)
 )
+
+
diff -urN ../lilypond-1.0.16/Documentation/tex/colorado.bib ./Documentation/tex/colorado.bib
--- ../lilypond-1.0.16/Documentation/tex/colorado.bib	Tue Sep 15 18:22:43 1998
+++ ./Documentation/tex/colorado.bib	Mon Oct 19 11:09:05 1998
@@ -7,500 +7,498 @@
 % TODO: fix the labelling.  
 
 @Book {6,
-author ={Jacob, Archibald},
-year={1947},
-title = {Musical handwriting : or, How to put music on paper : A handbook for all musicians, professional and amateur},
-address ={London},
-publisher ={Oxford University Press}, 
-note = {subject: Musical notation},
+	author ={Jacob, Archibald},
+	year={1947},
+	title = {Musical handwriting : or, How to put music on paper : A handbook for all musicians, professional and amateur},
+	address ={London},
+	publisher ={Oxford University Press}, 
+	note = {subject: Musical notation},
 }
 
 @Book {15,
-author ={Carl Brandt and Clinton Roemer},
-title = {Standardized Chord Symbol Notation},
-address={Sherman Oaks, CA},
-publisher={Roerick Music Co.},
-note ={subject: musical notation},
+	author ={Carl Brandt and Clinton Roemer},
+	title = {Standardized Chord Symbol Notation},
+	address={Sherman Oaks, CA},
+	publisher={Roerick Music Co.},
+	note ={subject: musical notation},
 }
 
 @Book {22,
-author = {Johnson, Harold M},
-year = {1946},
-title = {How to write music manuscript an exercise-method handbook for the  music student, copyist, arranger, composer, teacher},
-publisher={Carl Fischer, Inc.},
-address= {New York},
-note = {subject: Musical notation --Handbooks, manuals},
+	author = {Johnson, Harold M},
+	year = {1946},
+	title = {How to write music manuscript an exercise-method handbook for the  music student, copyist, arranger, composer, teacher},
+	publisher={Carl Fischer, Inc.},
+	address= {New York},
+	note = {subject: Musical notation --Handbooks, manuals},
 }
 
 @Book {31,
-title = {Music Printing & Publishing},
-author ={Donald W. Krummel \& Stanley Sadie},
-year = {1990},
-publisher= {Macmillan Press},
-note ={subject: musical notation},
+	title = {Music Printing & Publishing},
+	author ={Donald W. Krummel \& Stanley Sadie},
+	year = {1990},
+	publisher= {Macmillan Press},
+	note ={subject: musical notation},
 }
 
 %series={The Norton/Grove Handbooks in Music.},
 % publisher={W.W. Norton},
 
 @Book {40,
-author={Foss, Hubert},
-title = {Music Printing},
-series = {Practical Printing and Binding},
-address={London},
-publisher={Oldhams Press Ltd., Long Acre},
-note ={subject: musical notation},
+	author={Foss, Hubert},
+	title = {Music Printing},
+	series = {Practical Printing and Binding},
+	address={London},
+	publisher={Oldhams Press Ltd., Long Acre},
+	note ={subject: musical notation},
 }
 
 @Book {48,
-author = {Steele, Robert},
-year = {1903},
-title = {The Earliest English Music Printing},
-address={London},
-note= {subject: history of music printing and engraving},
+	author = {Steele, Robert},
+	year = {1903},
+	title = {The Earliest English Music Printing},
+	address={London},
+	note= {subject: history of music printing and engraving},
 }
 
 @Book {54,
-author={Austin, Ernest},
-title = {The Story of Music Printing},
-address={London},
-publisher={Lowe and Brydone Printers, Ltd.},
-note= {subject: history of music printing and engraving},
+	author={Austin, Ernest},
+	title = {The Story of Music Printing},
+	address={London},
+	publisher={Lowe and Brydone Printers, Ltd.},
+	note= {subject: history of music printing and engraving},
 
 }
 
 
 
 @Book {63,
-author={?},
-title = {Pictoral History of Music Printing},
-address={Elhardt, Indiana},
-publisher={H. and A. Selmer, Inc.},
-note= {subject: history of music printing and engraving},
+	author={?},
+	title = {Pictoral History of Music Printing},
+	address={Elhardt, Indiana},
+	publisher={H. and A. Selmer, Inc.},
+	note= {subject: history of music printing and engraving},
 
 }
 
 @Book {77,
-author = {Wintermitz, Emmanuel},
-year = {1955},
-title = {Musical Autographs from Monteverdi to Hindemith},
-address={Princeton},
-publisher={Princeton University Press},
-note= {subject: history of music printing and engraving},
+	author = {Wintermitz, Emmanuel},
+	year = {1955},
+	title = {Musical Autographs from Monteverdi to Hindemith},
+	address={Princeton},
+	publisher={Princeton University Press},
+	note= {subject: history of music printing and engraving},
 
 }
 
 
 @Book {92,
 
-author = {Novello, A},
-year = {1847},
-title = {Some Account of the Methods of Musick Printing, with Specimens of the Various Sizes of Moveable Types and of Other Matters},
-address={London},
-note={ subject: history of music printing and engraving},
+	author = {Novello, A},
+	year = {1847},
+	title = {Some Account of the Methods of Musick Printing, with Specimens of the Various Sizes of Moveable Types and of Other Matters},
+	address={London},
+	note={ subject: history of music printing and engraving},
 }
 
 @Book {100,
-author={Chrsander, F.},
-year={18??},
-title={A Sketch of the HIstory of Music printing, from the 15th to the 16th century},
-note={ subject: history of music printing and engraving},
+	author={Chrsander, F.},
+	year={18??},
+	title={A Sketch of the HIstory of Music printing, from the 15th to the 16th century},
+	note={ subject: history of music printing and engraving},
 }
 
 @Article {squire1897,
-author = {Squire, W},
-year = {1897},
-title = {Notes on Early Music Printing},
-journal = {Bibliographica},
-volume={iii},
-number={99},
-note={ subject: history of music printing and engraving},
+	author = {Squire, W},
+	year = {1897},
+	title = {Notes on Early Music Printing},
+	journal = {Bibliographica},
+	volume={iii},
+	number={99},
+	note={ subject: history of music printing and engraving},
 
 }
 
 @Article{113,
-author = {Meyer, K. and O'Meara, J},
-year = {1935},
-title = {The Printing of Music, 1473-1934},
-journal = {The Dolphin},
-volume={ ii},
-pages={ 171--207},
-note={ subject: history of music printing and engraving},
+	author = {Meyer, K. and O'Meara, J},
+	year = {1935},
+	title = {The Printing of Music, 1473-1934},
+	journal = {The Dolphin},
+	volume={ ii},
+	pages={ 171--207},
+	note={ subject: history of music printing and engraving},
 
 }
 %% 4th ver.,
 @Article {120,
-author = {Pattison, B},
-year = {1939},
-title = {Notes on Early Music Printing},
-journal = {The Library},
-note={subject: history of music printing and engraving},
-volume={xix},
-pages={389-421}, 
+	author = {Pattison, B},
+	year = {1939},
+	title = {Notes on Early Music Printing},
+	journal = {The Library},
+	note={subject: history of music printing and engraving},
+	volume={xix},
+	pages={389-421}, 
 }
 
 @Book {136,
-author = {King, H},
-year = {1964},
-title = {Four Hundred Years of Music Printing},
-address={London},
-note={ subject: history of music printing and engraving},
+	author = {King, H},
+	year = {1964},
+	title = {Four Hundred Years of Music Printing},
+	address={London},
+	note={ subject: history of music printing and engraving},
 }
 
 
 %(Rev.1961).
 @Book{150,
-author={Deutsch, O.F.},
-year ={1946},
-title = {Music Publishers' Numbers},
-address={London},
-note={ subject: history of music printing and engraving},
+	author={Deutsch, O.F.},
+	year ={1946},
+	title = {Music Publishers' Numbers},
+	address={London},
+	note={ subject: history of music printing and engraving},
 }
 
 @Book {151,
-author = {Marco, G.A},
-year = {1962},
-title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work},
-address={Charlottesville, Virginia},
-note={ subject: history of music printing and engraving},
+	author = {Marco, G.A},
+	year = {1962},
+	title = {The Earliest Music Printers of Continental Europe: a Checklist of Facsimiles Illustrating Their Work},
+	address={Charlottesville, Virginia},
+	note={ subject: history of music printing and engraving},
 }
 
 @Article {158,
-author = {Kinkeldey, O},
-year = {1932},
-title = {Music And Music Printing in Incunabula},
-journal = {Papers of the Bibliographical Society of America},
-volume={ xxvi},
-pages={89-118},
-note={ subject: history of music printing and engraving},
+	author = {Kinkeldey, O},
+	year = {1932},
+	title = {Music And Music Printing in Incunabula},
+	journal = {Papers of the Bibliographical Society of America},
+	volume={ xxvi},
+	pages={89-118},
+	note={ subject: history of music printing and engraving},
 }
 
 @Book {166,
-author = {Oldman, C.B},
-year = {1934},
-title = {Collecting Musical First Editions},
-address={London},
-note={ subject: history of music printing and engraving},
+	author = {Oldman, C.B},
+	year = {1934},
+	title = {Collecting Musical First Editions},
+	address={London},
+	note={ subject: history of music printing and engraving},
 }
 
 @Book{170,
-author={Carter, J},
-year={1934},
-title = {New Paths in Book Collecting},
-address={London},
-note={ subject: history of music printing and engraving},
+	author={Carter, J},
+	year={1934},
+	title = {New Paths in Book Collecting},
+	address={London},
+	note={ subject: history of music printing and engraving},
 }
 
 @Book {179,
-author={Krummel, D.W.},
-year={1958},
-month={9},
-title = {Graphic Analysis in Application to Early American Engraved Music},
-journal = {Notes},
-volume={xvi},
-pages={213},
-note={ subject: history of music printing and engraving},
+	author={Krummel, D.W.},
+	year={1958},
+	month={9},
+	title = {Graphic Analysis in Application to Early American Engraved Music},
+	journal = {Notes},
+	volume={xvi},
+	pages={213},
+	note={ subject: history of music printing and engraving},
 }
 
 @Book {189,
-author = {Krummel, D.W},
-year = {1971},
-title = {Oblong Format in Early Music Books},
-journal = {The Library},
-volume={5th ser., xxvi},
-pages={312},
-note={ subject: history of music printing and engraving},
+	author = {Krummel, D.W},
+	year = {1971},
+	title = {Oblong Format in Early Music Books},
+	journal = {The Library},
+	volume={5th ser., xxvi},
+	pages={312},
+	note={ subject: history of music printing and engraving},
 }
 
 @Book {198,
-author = {King, A.H},
-year = {1973},
-title = {The 50th Anniversary of Music Printing},
+	author = {King, A.H},
+	year = {1973},
+	title = {The 50th Anniversary of Music Printing},
 }
 
 @Book {204,
-author={Rastall, Richard},
-year={1982},
+	author={Rastall, Richard},
+	year={1982},
  title = {The notation of Western music : an introduction},
-address={New York, N.Y.},
-publisher={St. Martin's Press},
-note = {Musical notation},
+	address={New York, N.Y.},
+	publisher={St. Martin's Press},
+	note = {Musical notation},
 
 
 }
 
 @Book {215,
-author = {Tappolet, Willy},
-year = {1947},
-title = {La Notation Musicale},
-address={Paris},
-note={subject: general notation},
-publisher={Neuch\^atel},
+	author = {Tappolet, Willy},
+	year = {1947},
+	title = {La Notation Musicale},
+	address={Paris},
+	note={subject: general notation},
+	publisher={Neuch\^atel},
 }
 
 @Book {223,
-author = {Williams, C.F. Abdy},
-year = {1903},
-title = {The Story of Notation},
-address={New York},
-publisher={Charles Scribner's Sons},
-note={subject: general notation},
+	author = {Williams, C.F. Abdy},
+	year = {1903},
+	title = {The Story of Notation},
+	address={New York},
+	publisher={Charles Scribner's Sons},
+	note={subject: general notation},
 }
 
 @Book {239,
-author={Apel, Willi},
-year={1953},
-title = {The notation of polyphonic music, 900-1600},
-address={Cambridge, Mass},
-institution={Mediaeval Academy of America},
-note = {Musical notation},
+	author={Apel, Willi},
+	year={1953},
+	title = {The notation of polyphonic music, 900-1600},
+	address={Cambridge, Mass},
+	institution={Mediaeval Academy of America},
+	note = {Musical notation},
 }
 
 @Book {248,
-author={Berger, Anna Maria Busse},
-year={1993},
-title = {Mensuration and proportion signs : origins and evolution},
-address={Oxford, England},
-publisher={Clarendon Press},
-scnd_address={New York},
-scnd_publisher={Oxford University Press },
-note={subject: early notation},
+	author={Berger, Anna Maria Busse},
+	year={1993},
+	title = {Mensuration and proportion signs : origins and evolution},
+	address={Oxford, England},
+	publisher={Clarendon Press},
+	scnd_address={New York},
+	scnd_publisher={Oxford University Press },
+	note={subject: early notation},
 }
 
 @Book {258,
-author={Parrish, Carl},
-year={1957},
+	author={Parrish, Carl},
+	year={1957},
  title = {The notation of medieval music},
-address={New York},
-publisher={Norton},
-note = {Musical notation},
+	address={New York},
+	publisher={Norton},
+	note = {Musical notation},
 
 
 }
 
 @Book {269,
-author = {Parrish, Carl},
-year = {1946},
-title = {The Notation of Medieval Music},
-address={New York},
-publisher={Carl Fischer, Inc.},
-note={subject: early notation},
+	author = {Parrish, Carl},
+	year = {1946},
+	title = {The Notation of Medieval Music},
+	address={New York},
+	publisher={Carl Fischer, Inc.},
+	note={subject: early notation},
 }
 
 @Book {277,
-author = {Patch, Harry},
-year = {1949},
-title = {Genesis of a Music},
-address={Madison},
-publisher={University of Wisconsin Press},
-note={subject: early notation},
+	author = {Patch, Harry},
+	year = {1949},
+	title = {Genesis of a Music},
+	address={Madison},
+	publisher={University of Wisconsin Press},
+	note={subject: early notation},
 }
 
 @Book {285,
-author={Cage, John},
-year={1969},
+	author={Cage, John},
+	year={1969},
   title = {Notations},
-address={New York},
-publisher={Something Else Press},
-note = {Music, Manuscripts, Facsimiles.
-
-Facsimiles of holographs from the Foundation for Contemporary
-Performance Arts, with text by 269 composers, but rearranged using
-chance operations.,V)} },
+	address={New York},
+	publisher={Something Else Press},
+	note = {Music, Manuscripts, Facsimiles.
+
+	Facsimiles of holographs from the Foundation for Contemporary
+	Performance Arts, with text by 269 composers, but rearranged using
+	chance operations.,V)} },
 
 @Book {295,
-author = {Gaburo, Virginia},
-year = {1977},
-title = {Notation},
-address={publisher= {Lingua Press},
-publisher={La Jolla, California}},
-note = {A Lecture about notation, new ideas about},
+	author = {Gaburo, Virginia},
+	year = {1977},
+	title = {Notation},
+	address={publisher= {Lingua Press},
+	publisher={La Jolla, California}},
+	note = {A Lecture about notation, new ideas about},
 }
 
 @Book {306,
-author = {Risatti, Howard},
-year = {1975},
-title = {New Music Vocabulary},
-address={Urbana, Illinois},
-publisher={University of Illinois Press},
-note = {A Guide to Notational Signs for Contemporary Music},
+	author = {Risatti, Howard},
+	year = {1975},
+	title = {New Music Vocabulary},
+	address={Urbana, Illinois},
+	publisher={University of Illinois Press},
+	note = {A Guide to Notational Signs for Contemporary Music},
 }
 
 
 
 @Book {325,
-author = {Cowell, Henry},
-year = {1930},
-title = {New Musical Resources},
-address={New York},
-publisher={Alfred A. Knopf, Inc.},
-note={subject: 20th century notation},
+	author = {Cowell, Henry},
+	year = {1930},
+	title = {New Musical Resources},
+	address={New York},
+	publisher={Alfred A. Knopf, Inc.},
+	note={subject: 20th century notation},
 }
 
 @Article {333,
-author = {Cowell, Henry},
-year = {1927},
-title = {Our Inadequate Notation},
-journal = {Modern Music},
-volume={4},
-number={3},
-note={subject: 20th century notation},
+	author = {Cowell, Henry},
+	year = {1927},
+	title = {Our Inadequate Notation},
+	journal = {Modern Music},
+	volume={4},
+	number={3},
+	note={subject: 20th century notation},
 
 }
 
 @Book {342,
-author = {Bowers, Roger},
-year = {1992},
-title = {Music & Letters},
-volume={73},
-number={3},
-month={August},
-pages={347(52)},
-note={Some reflection upon notation and proportion in Monteverdi's mass and vespers},
+	author = {Bowers, Roger},
+	year = {1992},
+	title = {Music & Letters},
+	volume={73},
+	number={3},
+	month={August},
+	pages={347(52)},
+	note={Some reflection upon notation and proportion in Monteverdi's mass and vespers},
 }
 
 @Book {353,
-author = {Brainard, Paul},
-year = {1992},
-title = {Current Musicology},
-number={50},
-month={July-Dec},
-pages={21(26)},
-note={Proportional notation in the music of Schutz and his contemporaries in the 17th Century},
+	author = {Brainard, Paul},
+	year = {1992},
+	title = {Current Musicology},
+	number={50},
+	month={July-Dec},
+	pages={21(26)},
+	note={Proportional notation in the music of Schutz and his contemporaries in the 17th Century},
 }
 
 @Book {362,
-author = {Monelle, Raymond},
-year = {1989},
-title = {Comparative Literature},
-volume={41}, number={3}, 
-month={Summer},
-pages={252(18)},
+	author = {Monelle, Raymond},
+	year = {1989},
+	title = {Comparative Literature},
+	volume={41}, number={3}, 
+	month={Summer},
+	pages={252(18)},
 
-note={Music notation and the poetic foot},
+	note={Music notation and the poetic foot},
 }
 
 @Book {373,
-author = {Pinegar, Sandra},
-year = {1993},
-title = {Current Musicology},
-number={53},
-month={July},
-pages={99(10)},
-note={The seeds of notation and music paleography.},
+	author = {Pinegar, Sandra},
+	year = {1993},
+	title = {Current Musicology},
+	number={53},
+	month={July},
+	pages={99(10)},
+	note={The seeds of notation and music paleography.},
 }
 
 @Book {382,
-author = {Smith, Norman E},
-year = {1990},
-title = {Current Musicology},
-number={45-47},
-month={Jan-Dec},
-pages={283(22)},
-note={The notation of fractio modi.},
+	author = {Smith, Norman E},
+	year = {1990},
+	title = {Current Musicology},
+	number={45-47},
+	month={Jan-Dec},
+	pages={283(22)},
+	note={The notation of fractio modi.},
 }
 
 @Book {392,
-author = {Treitler, Leo},
-year = {1992},
-title = {The Journal of Musicology},
-volume={10},
-number={2},
-month={Spring},
-pages={131(61)},
+	author = {Treitler, Leo},
+	year = {1992},
+	title = {The Journal of Musicology},
+	volume={10},
+	number={2},
+	month={Spring},
+	pages={131(61)},
 
-note={ The unwritten and written transmission, of medieval chant
-and the start-up of musical notation.
+	note={ The unwritten and written transmission, of medieval chant
+	and the start-up of musical notation.
 
-Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition.},
+	Notational practice developed in medieval music to address the written tradition for chant which interacted with the unwritten vocal tradition.},
 }
 
 @Book {407,
-author = {West, M.L},
-year = {1994},
-title = {Music & Letters},
-volume={75},
-number={2},
-month={May},
-pages={161(19)},
-note={The Babylonian musical notation and the Hurrian melodic texts. 
+	author = {West, M.L},
+	year = {1994},
+	title = {Music & Letters},
+	volume={75},
+	number={2},
+	month={May},
+	pages={161(19)},
+	note={The Babylonian musical notation and the Hurrian melodic texts. 
 
-A new way of deciphering the ancient Babylonian musical notation. 
+	A new way of deciphering the ancient Babylonian musical notation. 
 }
 }
 
 @Book {418,
-author = {Brown, Earle},
-year = {1986},
-title = {Musical Quarterly},
-volume={72},
-month={Spring},
-pages={180(22)},
-note={The notation and performance of new music.},
+	author = {Brown, Earle},
+	year = {1986},
+	title = {Musical Quarterly},
+	volume={72},
+	month={Spring},
+	pages={180(22)},
+	note={The notation and performance of new music.},
 }
 
 @Book {426,
-author = {Eggleston, Suzanne},
-year = {1994},
-title = {Notes},
-volume={51},
-number={2},
-month={Dec},
-pages={657(7)}, 
-journal={New periodicals},
-note={A list of new music periodicals covering the period
-Jun.-Dec. 1994. Includes aims, formats and a description of the
-contents of each listed periodical. Includes Music Notation News},
+	author = {Eggleston, Suzanne},
+	year = {1994},
+	title = {Notes},
+	volume={51},
+	number={2},
+	month={Dec},
+	pages={657(7)}, 
+	journal={New periodicals},
+	note={A list of new music periodicals covering the period
+	Jun.-Dec. 1994. Includes aims, formats and a description of the
+	contents of each listed periodical. Includes Music Notation News},
 
 }
 
 @Book {441,
 
-author = {Fuller, David},
-year = {1989},
-title = {The Journal of Musicology},
-volume={7},
-number={1},
-month={Winter},
-pages={21(8)},
-note={
-Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation).        
+	author = {Fuller, David},
+	year = {1989},
+	title = {The Journal of Musicology},
+	volume={7},
+	number={1},
+	month={Winter},
+	pages={21(8)},
+	note={
+	Notes and inegales unjoined: defending a definition. (written-out inequalities in music notation).        
 }},
 
 @Book {454,
 
-author = {Jones, David Evan},
-year = {1990},
-title = {Perspectives of New Music},
-note={
-Speech extrapolated. (includes notation)
-}
+	author = {Jones, David Evan},
+	year = {1990},
+	title = {Perspectives of New Music},
+	note={Speech extrapolated. (includes notation)}
 }
 
 @Book {464,
-author = {Lependorf, Jeffrey},
-year = {1989},
-journal={Perspectives of New Music},
-volume={27},
+	author = {Lependorf, Jeffrey},
+	year = {1989},
+	journal={Perspectives of New Music},
+	volume={27},
  number={2},
-month={Summer},
-pages={232(20)},
-note={
-Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan) },
+	month={Summer},
+	pages={232(20)},
+	note={
+	Contemporary notation for the shakuhachi: a primer for composers. (Tradition and Renewal in the Music of Japan) },
 
 }
 
 @Book {478,
-author = {Rastall, Richard},
-year = {1993},
-title = {Music & Letters},
-volume={74}, number={4},
-month={November},
-pages={639(2)},
-
-note={Equal Temperament Music Notation: The Ailler-Brennink
-Chromatic Notation. Results and Conclusions of the Music Notation
-Refor by the Chroma Foundation (book reviews).  },
+	author = {Rastall, Richard},
+	year = {1993},
+	title = {Music & Letters},
+	volume={74}, number={4},
+	month={November},
+	pages={639(2)},
+
+	note={Equal Temperament Music Notation: The Ailler-Brennink
+	Chromatic Notation. Results and Conclusions of the Music Notation
+	Refor by the Chroma Foundation (book reviews).  },
 }
 
 @Article {Francois92,
@@ -515,7 +513,7 @@
 	     computer is used to write down music with accuracy never
 	     before achieved, the range of modern sounds has surpassed
 	     the relevance of the computer...},
-title={Writing without representation, and unreadable notation.},
+	title={Writing without representation, and unreadable notation.},
 }
 
 @Book {501,
diff -urN ../lilypond-1.0.16/Documentation/tex/fonts.doc ./Documentation/tex/fonts.doc
--- ../lilypond-1.0.16/Documentation/tex/fonts.doc	Tue Sep 15 18:22:43 1998
+++ ./Documentation/tex/fonts.doc	Mon Oct 19 11:09:05 1998
@@ -4,6 +4,8 @@
 \def\kdots{,\ldots,}
 \title{Not the Font-En-Tja font}
 \author{HWN \& JCN} 
+\def\preMudelaExample{}
+\def\postMudelaExample{}
 \begin{document}
 \maketitle
 
@@ -22,6 +24,14 @@
 is a matter of taste, I'd say that B\"arenreiter has the finest
 typography of all.
 
+%
+% stupid test to check convert-mudela.py.
+%
+% (so sue me)
+\begin{mudela}[fragment,center]
+  \clef bass; c1 \clef alto; c'2  \clef treble; c''4
+\end{mudela}
+
 
 \section{Bezier curves for slurs}
 
@@ -289,6 +299,12 @@
  ib_{4+} &=& (3 il - bt) / 3
 \end{eqnarray*}
 
+
+\section{Layout of the source files}
+
+The main font (with the fixed size music glyphs) uses a the \TeX\
+logfile as a communication device.  Use the specialised macros to
+create and export glyphs.
 
 \bibliographystyle{plain}
 \bibliography{engraving}
diff -urN ../lilypond-1.0.16/Documentation/topdocs/AUTHORS.yo ./Documentation/topdocs/AUTHORS.yo
--- ../lilypond-1.0.16/Documentation/topdocs/AUTHORS.yo	Tue Sep 15 18:22:43 1998
+++ ./Documentation/topdocs/AUTHORS.yo	Mon Oct 19 11:10:53 1998
@@ -7,7 +7,7 @@
 it()nemail(Tom Cato Amundsen)(tomcato@xoommail.com),
     cembalo-partita in mudela.
 it()nemail(Mats Bengtsson)(matsb@s3.kth.se),
-    lurl(http://www.s3.kth.se/~matsb)
+    lurl(http://www.s3.kth.se/~matsb/)
     clef stuff, key stuff, swedish notenames, testing, general
     comments.
 it()nemail(Eric Bullinger)(eric@aut.ee.ethz.ch),
@@ -18,24 +18,22 @@
     debian package: debian/*
 it()nemail(Neil Jerram)(nj104@cus.cam.ac.uk). 
     parts of Documentation/Vocab*
-it()Donald Ervin Knuth,  lurl(http://www.cs-staff.stanford.edu/~knuth)
+it()Donald Ervin Knuth,  lurl(http://www.cs-staff.stanford.edu/~knuth/)
     mf/ital-*.mf (these were taken from the CM fonts)
 it()nemail(Werner Lemberg)(xlwy01@uxp1.hrz.uni-dortmund.de),
     misc bugfixes, some Beam and Stem code. 
 it()nemail(David R. Linn)(drl@vuse.vanderbilt.edu),
     Mailing list maintenance.
-it()nemail(Adrian Moriano)()
-    Documentation fixes, glossary.
+it()nemail(Adrian Mariano)()
+    Reference manual, tutorial fixes, glossary.
 it()nemail(Han-Wen Nienhuys)(hanwen@cs.uu.nl), 
-    lurl(http://www.cs.uu.nl/~hanwen)
-    nl()
+    lurl(http://www.cs.uu.nl/~hanwen/)
     Main author (initials: HWN).
 it()nemail(Jan Nieuwenhuizen)(janneke@gnu.org), 
-    lurl(http://www.xs4all.nl/~jantien)
-    nl()
+    lurl(http://www.xs4all.nl/~jantien/)
     Main author (initials: JCN).
 it()nemail(Alexandre Oliva)(oliva@dcc.unicamp.br), 
-    lurl(http://sunsite.unicamp.br/~oliva)
+    lurl(http://sunsite.unicamp.br/~oliva/)
     testing
 it()nemail(Franc,ois Pinard)(pinard@iro.umontreal.ca), 
     parts of Documentation/Vocab*, started internationalization stuff
diff -urN ../lilypond-1.0.16/Documentation/topdocs/INSTALL.yo ./Documentation/topdocs/INSTALL.yo
--- ../lilypond-1.0.16/Documentation/topdocs/INSTALL.yo	Tue Sep 15 18:22:43 1998
+++ ./Documentation/topdocs/INSTALL.yo	Mon Oct 19 11:09:05 1998
@@ -39,7 +39,8 @@
 
 sect(RUNNING)
 
-GNU LilyPond does use a lot of resources. For operation you need the following:
+GNU LilyPond does use a lot of resources. For operation you need the
+following:
 
 itemize(
 it()TeX
@@ -48,6 +49,21 @@
     Ghostscript installed.
 )
 
+
+For running LilyPond successfully you have to help TeX and MetaFont
+find various files.  The recommended way of doing so is adjusting the
+environment variables in the start-up scripts of your shell.  An
+example is given here for the Bourne shell:
+verb(export MFINPUTS="/usr/local/share/lilypond/mf:"
+export TEXINPUTS="/usr/local/share/lilypond/tex:"
+)
+The empty path component
+represents TeX() and MetaFont's default search paths.  Scripts with
+the proper paths for the bourne and C-shell respectively are generated in
+file(buildscripts/out/lilypond-profile) and
+file(buildscripts/out/lilypond-login) during compilation.
+
+
 sect(RECOMMENDED)
 
 Although not strictly necessary, these are recommended to have.
@@ -64,6 +80,9 @@
 Check out lurl(ftp://ftp.gnu.org)
 or any mirror of this site.
 
+it()GUILE (version 1.2)
+Check out lurl(http://www.gnu.org/programs/guile.html)
+
 it()Python (version 1.5 or newer).  Check out
 lurl(ftp://ftp.python.org) or lurl(ftp://ftp.cwi.nl/pub/python).
 
@@ -101,11 +120,26 @@
     TeTeX users should not forget to rerun texhash.
 )
 
+Building the website requires pnmtopng.  The version of file(pnmtopng)
+that is distributed with RedHat 5.1 contains a bug (pnmtopng is
+dynamically linked to the wrong version of libpng).  Recompile it from
+source, and make sure that the pnmtopng binary is linked statically to
+the libpng that is included in libgr.
+
+verb( tar xzf libgr-2.0.13.tar.gz
+      make
+      cd png
+      rm libpng.so*
+      make pnmtopng
+)
+
+You can then install the new pnmtopng into /usr/local/bin/
+
 sect(CONFIGURING and COMPILING)
 
 to install GNU LilyPond, simply type:
 verb(
-	configure  --enable-tex-dir=XXXX --enable-mf-dir=YYYY
+	configure
 	make
 	make install
 )
@@ -120,17 +154,12 @@
 	/usr/local/bin/mi2mu
 	/usr/local/share/lilypond/*
 	/usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
-	/usr/lib/texmf/texmf/tex/lilypond/* 
 )
 
 
-You should specify directories that are in TeX()'s and MetaFont's
-include path with the options (--enable-tex-dir) and
-bf(--enable-mf-dir).  If you don't specify any directories, the TeX()
-include directory is detected dynamically, which is unreliable.  The
-above assumes that you are root and have the GNU development tools,
-and your make is GNU make.  If this is not the case, you can adjust
-your environment variables to your taste:
+The above assumes that you are root and have the GNU development
+tools, and your make is GNU make.  If this is not the case, you can
+adjust your environment variables to your taste:
 
 verb(
 	export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR" 
@@ -149,13 +178,6 @@
 
 In this case, you will have to set up MFINPUTS, and TEXINPUTS accordingly.
 
-If you want to install GNU LilyPond in file(/usr/local), and your TeX has
-no default hooks for local stuff, you can do:
-
-verb(
-	configure --prefix=/usr/local --enable-tex-prefix=/usr/lib/texmf
-)
-
 Since GNU LilyPond currently is beta, you are advised to also use
 
 verb(
@@ -163,29 +185,18 @@
 	--enable-checking
 )
 
-Other options include:
+Options to configure include:
 
 description(
-dit(bf(--enable-shared))
-    Make a shared library (gnu/linux, solaris (?) only )  (TEMPORARILY
-OUT OF ORDER)
-
+dit(bf(--enable-guile))
+    Link in GUILE (experimental)
 dit(bf(--enable-printing))
     Enable debugging print routines (lilypond bf(-D) option)
 dit(bf(--enable-optimise))
-    Set maximum optimisation: compile with bf(-O2)
+    Set maximum optimisation: compile with bf(-O2).  This can be
+unreliable on some compiler/platform combinations (eg, DEC Alpha and PPC)
 dit(bf(--enable-profiling))
     Compile with support for profiling.
-dit(bf(--enable-tex-prefix))
-    Set the directory where TeX and Metafont live.
-dit(bf(--enable-tex-dir))
-    Set then directory TeX input is in (detected as a subdir of
-    tex-prefix).  This should be a directory that is reachable both for
-    tex and latex.  On my system the best choice would be
-    file(/usr/lib/texmf/texmf/tex/generic//).
-dit(bf(--enable-mf-dir))
-    Set the directory metafont input is in (idem).   On my system the best
-    choice would be file(/usr/lib/texmf/texmf/fonts/source/public/).
 dit(bf(--enable-config))
     Output to a different configuration file.  Needed for multi-platform
     builds
diff -urN ../lilypond-1.0.16/Documentation/topdocs/index.yo ./Documentation/topdocs/index.yo
--- ../lilypond-1.0.16/Documentation/topdocs/index.yo	Fri Sep 25 15:54:23 1998
+++ ./Documentation/topdocs/index.yo	Mon Oct 19 11:09:05 1998
@@ -31,9 +31,6 @@
 This is not a Fanmail/Hype page. These pages were entirely created from
 the LilyPond package-sources. 
 
-A document on LilyPond's music description language Mudela is 
-url(in the making)(DOEXPAND(docdir)/tex/DOEXPAND(outdir)/tutorial.html).
-
 Note: These pages are created from the latest bf(development snapshots)
 of LilyPond, specifically, this page was made from LilyPond
 @TOPLEVEL_VERSION@.tar.gz
@@ -42,7 +39,6 @@
 
 description(
 dit(lurl(http://www.cs.uu.nl/people/hanwen/lilypond/))Han-Wen's site.
-dit(lurl(http://www.xs4all.nl/~jantien/lilypond/))Jan's site.
 dit(lurl(http://www.realtime.net/~daboys/lilypond/))Jeff's Windows NT Distribution site.
 )
 
diff -urN ../lilypond-1.0.16/NEWS ./NEWS
--- ../lilypond-1.0.16/NEWS	Wed Oct 14 14:44:20 1998
+++ ./NEWS	Mon Oct 19 13:09:33 1998
@@ -1,3 +1,25 @@
+pl 17
+	- fixed RPM building.
+
+pl 16.hwn1
+ 	- ridiculous slur dims fixed.
+ 	- ly2dvi32.py -> ly2dvi.py, ly2dvi.sh -> ly2dvi-old
+ 	- use re iso. regex for python stuff.
+ 	- bf: mudela-book.py
+ 	- updated install directions.  Made lilypond-login for csh
+ 	- bf: installdirs of MF stuff
+ 	- Dictionary implementation using hash tables (LilyPond is 3% faster)
+ 	- Cache [non]group_l_arr () calls in translator-group.cc (LilyPond is 4% faster)
+
+pl 16.uu1
+	- debian URLs, make/stepmake.make  patch
+	- further debian fixes.
+	
+pl 14.tca1
+	- partitas
+	- prall{mordent,prall} patch.
+
+******
 pl 16
 	- read property ydirection and tieYDirection for tie direction.
 	- bf: slur over rest.
diff -urN ../lilypond-1.0.16/TODO ./TODO
--- ../lilypond-1.0.16/TODO	Wed Oct 14 11:21:16 1998
+++ ./TODO	Mon Oct 19 11:09:05 1998
@@ -9,10 +9,10 @@
 
 
 BUGS:
-	
 
-	* egcs-1.1 -O2 -finline-functions  causes crash
+	* document new TeX/mf layout
 
+	* egcs-1.1 -O2 -finline-functions  causes crash
 
 	* formatting of input stuff. 
 
@@ -28,12 +28,6 @@
 
 	* [/3 c8 c16 c c c]/1
   
-	* I see that  \prallprall and \prallmordent are identical. I think this is a 
-	mistake, that \prallprall should not have the vertical line.
-	This can be fixed by removing  the line
-	draw_mordent(twidth-0.5toverlap);
-	from the definition of \prallprall in mf/feta-slag.mf (see below)
-
 	* fix singleStaffBracket
   
   	* repeat bars: need distance after ":|" and before "|:"
@@ -65,8 +59,6 @@
 	
 	portato= \script { "portato" 0 -1 0 1 0 }
 
-	* MIDI spelling.
-
 	* Align_element::padding  ?
 
 	* uniformise property names.
@@ -108,8 +100,6 @@
 
 	* install TeX stuff into tex/generic directory.
 
-	* /etc/profile.d support for RPM.
-
 	* percussion note heads
 
 	* mi2mu empty staffs.
@@ -118,12 +108,6 @@
 
 	* make GNU style webpages.
 
-	* There seems to be an install error in lilypond-1.0.0.  Most of the
-	files in the "init" directory don't get installed in the
-	/usr/local/share/lilypond directory.  The files installed are of
-	the form feta*.ly.  In particular init.ly doesn't get installed.
-	I installed the files by hand and then the system seems to work.
-
 	* midi_instrument -> midiInstrument
 
 	* horizontal centering of dynamics 
@@ -237,8 +221,6 @@
 	  - abbreviation-beam -> (measured/unmeasured) tremolo
 	  - partial -> anacrouse
 
-	* libtoolize flowerlib
-
 	* shared lib
 
 	* robustify Beam (in case of no stems, 32nd notes)
@@ -250,12 +232,7 @@
 	* check for groff / troff/ nroff et
 
 	* more intelligent file searching
-	- use kpsepath
-	- make LilyPond fully relocatable
-
-	* use kpsepath to find all TeX dirs
-	- configure.in 
-	- clean-fonts.sh
+	- make LilyPond RPM fully relocatable
 
 	* nicen examples:
 	- break-up heavily-nested score blocks
@@ -287,15 +264,6 @@
         * clefs (AG): The "8" should appear closer to the actual clef,
           touching it.
 
-	* scoping for properties?
-
-	{	c4
-		\multi 2  < { \stemup .. } { \stemdown .. } >
-		c2 
-	}
-
-	this modifies \stem for the c2
-
 	* put errorlevel in Input class
 
 	* junk nesting slurs
@@ -341,12 +309,6 @@
 
 	* redhat (v?) graphical install bomb-out?
 
-	* egcs-1.03 ice: stem.cc:327; should localize bug (mine's still 10K)
-
-	* gcc 2.8.1: see ice and RESIZE_ICE
-
-	* xdvi: PS in magnifying glass.
-
 	* GNU diff 2.7: diff -rN does not see a new directory with empty file
 
 	* GNU patch 2.1: <must find simple example> if patch chokes on a
@@ -363,8 +325,6 @@
 
 	* GNU indent: handle C++
 
-	* GNU make: move hardcoded builtin rules to runtime ?
-
 	* GNU patch 
 	  - 'double-fix' mode: ignore identical fix, rather than suggest 
 	    to revert patch direction when (more or less? exactly) the same 
@@ -498,7 +458,6 @@
 	- Move all Score_elems, into libmutype.a
 	- SGML
 
- 
 	* Documentation
 	- Doc (C) stuff of sheet music
 	- a better format?  SGML?  TeX?  Info?
diff -urN ../lilypond-1.0.16/VERSION ./VERSION
--- ../lilypond-1.0.16/VERSION	Wed Oct 14 16:20:16 1998
+++ ./VERSION	Mon Oct 19 11:51:51 1998
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=0
-PATCH_LEVEL=16
+PATCH_LEVEL=17
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
diff -urN ../lilypond-1.0.16/buildscripts/lilypond-login.sh ./buildscripts/lilypond-login.sh
--- ../lilypond-1.0.16/buildscripts/lilypond-login.sh	Thu Jan  1 00:00:00 1970
+++ ./buildscripts/lilypond-login.sh	Mon Oct 19 11:09:05 1998
@@ -0,0 +1,13 @@
+#!/bin/csh
+
+# env. vars for the C-shell.
+
+# set environment for LilyPond.  To be installed in /etc/profile.d/
+setenv GS_LIB "@datadir@/afm"
+setenv GS_FONTPATH "@datadir@/ps"
+setenv LILYINCLUDE "@datadir@/ly:@datadir@/afm"
+
+# include an empty path component for the system wide includes.
+setenv MFINPUTS "@datadir@/mf:"${MFINPUTS:=":"}
+setenv TEXINPUTS "@datadir@/tex:"${TEXINPUTS:=":"}
+
diff -urN ../lilypond-1.0.16/buildscripts/lilypond-profile.sh ./buildscripts/lilypond-profile.sh
--- ../lilypond-1.0.16/buildscripts/lilypond-profile.sh	Wed Oct 14 11:46:16 1998
+++ ./buildscripts/lilypond-profile.sh	Mon Oct 19 11:09:05 1998
@@ -4,7 +4,7 @@
 # set environment for LilyPond.  To be installed in /etc/profile.d/
 GS_LIB="@datadir@/afm"
 GS_FONTPATH="@datadir@/ps"
-LILYINCLUDE="@datadir@/ly"
+LILYINCLUDE="@datadir@/ly:@datadir@/afm"
 
 # include an empty path component for the system wide includes.
 MFINPUTS="@datadir@/mf:"${MFINPUTS:=":"}
diff -urN ../lilypond-1.0.16/buildscripts/set-lily.sh ./buildscripts/set-lily.sh
--- ../lilypond-1.0.16/buildscripts/set-lily.sh	Tue Sep 15 18:22:43 1998
+++ ./buildscripts/set-lily.sh	Mon Oct 19 11:09:05 1998
@@ -52,5 +52,5 @@
     ln ../.dstreamrc .
 fi
 
-./configure --prefix=$prefix --enable-debugging --enable-printing --enable-checking --disable-optimise
+./configure --prefix=$prefix --enable-debugging --enable-printing --enable-checking --disable-optimise --enable-guile
 
diff -urN ../lilypond-1.0.16/debian/TODO ./debian/TODO
--- ../lilypond-1.0.16/debian/TODO	Tue Sep 15 18:22:43 1998
+++ ./debian/TODO	Thu Oct 15 19:07:52 1998
@@ -2,6 +2,3 @@
  * Compile mudela-mode.el into mudela-mode.elc
  * Install /etc/emacs/site-start.d/50lilypond.el
  * Figure out how to make mudela-mode work on my computer.  :-)
-
-Sun, 26 Apr 1998 21:11:32 -0600:
- * Remove preinst from upstream source
diff -urN ../lilypond-1.0.16/debian/changelog ./debian/changelog
--- ../lilypond-1.0.16/debian/changelog	Tue Sep 15 18:22:43 1998
+++ ./debian/changelog	Thu Oct 15 19:07:52 1998
@@ -1,8 +1,53 @@
+lilypond (1.0.16-1) unstable; urgency=low
+
+  * New upstream release.
+  * [debian/{copyright,control}]: pcnov095.win.tue.nl -> ftp.cs.uu.nl
+      (New upstream master FTP site).  Also updated JCN's web site URL.
+  * [debian/rules]: 
+      - Now, in the "clean:" target, runs either 
+        "find . -user root | xargs -r chown $$SUDO_USER.$$SUDO_GID" or
+        "find . -user root | xargs -r chown $$LOGNAME" to deal with all those
+        root-owned "out/*" files generated during a "sudo debian/rules clean"
+        run.  Thanks to Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>
+        for reporting the problem!  (closes: Bug#27044)
+      - Updated debian/rules according to the new debhelper rules example.
+  * [Documentation/topdocs/AUTHORS.yo]: Added a trailing "/" on URLs.
+
+ -- Anthony Fok <foka@debian.org>  Thu, 15 Oct 1998 04:49:40 -0600
+
+lilypond (1.0.2-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Anthony Fok <foka@debian.org>  Sat, 15 Aug 1998 04:32:08 -0600
+
+lilypond (1.0.1-1) unstable; urgency=low
+
+  * New upstream release.
+  * [aclocal.m4]: Temporarily changed OPTIMIZE="-O2" to OPTIMIZE="-O"
+      to avoid egcs (c++) complaint of "Internal compiler error"
+      on my computer.
+  * [scripts/mudela-book.py]: Added "#!@PYTHON@" at the top.  This string
+      expands to "#!/usr/bin/python" in /usr/bin/mudela-book.
+      (Thanks to Lintian.  :-)
+  * [debian/control]: Recommends: python-base (>= 1.5.1).
+      (Again, thanks to Lintian.  :-)
+  * [debian/postrm]: Now also removes the generated LilyPond fonts
+      *.{tfm,pk} under /var/spool/texmf when called as "postrm remove".
+  * [debian/preinst]: Yes, have to bring this back to remove the generated
+      LilyPond fonts in /var/spool/texmf because "postrm remove" didn't do
+      its jobs in previous versions.  Oops.  :-)
+  * [debian/rules]: Installs a few new upstream documentation files, and
+      the example files in out/ directories are moved to parent directories.
+
+ -- Anthony Fok <foka@debian.org>  Fri, 14 Aug 1998 03:30:05 -0600
+
 lilypond (0.1.76-1) unstable; urgency=low
 
   * support for 'make deb' target
+  * Not uploaded to Debian's FTP site.
 
- -- Jan Nieuwenhuizen <janneke@gnu.org> Fri,  3 Jul 1998 17:53:37 +0200
+ -- Jan Nieuwenhuizen <janneke@gnu.org>  Fri,  3 Jul 1998 17:53:37 +0200
 
 lilypond (0.1.71-1) unstable; urgency=low
 
diff -urN ../lilypond-1.0.16/debian/control ./debian/control
--- ../lilypond-1.0.16/debian/control	Wed Oct 14 11:42:52 1998
+++ ./debian/control	Mon Oct 19 11:15:45 1998
@@ -7,8 +7,9 @@
 Package: lilypond
 Architecture: any
 Depends: ${shlibs:Depends}, tetex-base (>= 0.9-5)
+Recommends: python-base (>= 1.5.1)
 Conflicts: musixtex-fonts, tetex-base (<< 0.9)
-Description: The GNU Project music typesetter.  
+Description: The GNU Project music typesetter.
  LilyPond is the GNU Project music typesetter.  This program can print
  beautiful sheet music from a music definition file.  It can also play
  mechanical performances to a MIDI file.  Features include multiple
@@ -16,7 +17,8 @@
  beams, slurs, triplets, formatting scores, part extraction.  It includes
  a nice font of musical symbols.
  .
-  URL: http://www.cs.ruu.nl/people/hanwen/lilypond
-       http://sca.uwaterloo.ca/~praetzel/lilypond/
+  URLs: http://www.cs.uu.nl/~hanwen/lilypond/
+        http://www.xs4all.nl/~jantien/lilypond/
+        http://sca.uwaterloo.ca/~praetzel/lilypond/
   Authors: Han-Wen Nienhuys <hanwen@cs.uu.nl>
            Jan Nieuwenhuizen <janneke@gnu.org>
diff -urN ../lilypond-1.0.16/debian/control.foka ./debian/control.foka
--- ../lilypond-1.0.16/debian/control.foka	Tue Sep 15 18:22:43 1998
+++ ./debian/control.foka	Thu Oct 15 19:07:52 1998
@@ -7,6 +7,7 @@
 Package: lilypond
 Architecture: any
 Depends: ${shlibs:Depends}, tetex-base (>= 0.9-5)
+Recommends: python-base (>= 1.5.1)
 Conflicts: musixtex-fonts, tetex-base (<< 0.9)
 Description: The GNU Project music typesetter.
  LilyPond is the GNU Project music typesetter.  This program can print
@@ -24,7 +25,8 @@
  cadensa, balken, boogjes, triolen, partituren, en losse partijen.  Een
  fraai font met muzikeksymbolen wordt meegeleverd.
  .
-  URL: http://www.cs.ruu.nl/people/hanwen/lilypond/
-       http://sca.uwaterloo.ca/~praetzel/lilypond/
-  Authors: Han-Wen Nienhuys <hanwen@stack.nl>
+  URLs: http://www.cs.uu.nl/~hanwen/lilypond/
+        http://www.digicash.com/~jan/lilypond/
+        http://sca.uwaterloo.ca/lilypond/
+  Authors: Han-Wen Nienhuys <hanwen@cs.uu.nl>
            Jan Nieuwenhuizen <janneke@gnu.org>
diff -urN ../lilypond-1.0.16/debian/control.in ./debian/control.in
--- ../lilypond-1.0.16/debian/control.in	Tue Sep 15 18:22:43 1998
+++ ./debian/control.in	Thu Oct 15 19:07:52 1998
@@ -7,10 +7,12 @@
 Package: lilypond
 Architecture: any
 Depends: ${shlibs:Depends}, tetex-base (>= 0.9-5)
+Recommends: python-base (>= 1.5.1)
 Conflicts: musixtex-fonts, tetex-base (<< 0.9)
-Description: The GNU Project music typesetter.  @BLURB@
+Description: The GNU Project music typesetter.@BLURB@
  .
-  URL: http://www.cs.ruu.nl/people/hanwen/lilypond
-       http://sca.uwaterloo.ca/~praetzel/lilypond/
+  URLs: http://www.cs.uu.nl/~hanwen/lilypond/
+        http://www.xs4all.nl/~jantien/lilypond/
+        http://sca.uwaterloo.ca/~praetzel/lilypond/
   Authors: Han-Wen Nienhuys <hanwen@cs.uu.nl>
            Jan Nieuwenhuizen <janneke@gnu.org>
diff -urN ../lilypond-1.0.16/debian/copyright ./debian/copyright
--- ../lilypond-1.0.16/debian/copyright	Tue Sep 15 18:22:43 1998
+++ ./debian/copyright	Thu Oct 15 19:07:52 1998
@@ -2,18 +2,19 @@
 Wed,  6 Aug 1997 04:30:28 -0600
 
 It was downloaded from
-      ftp://pcnov095.win.tue.nl/pub/lilypond/development/
-          lilypond-0.1.71.tar.gz
+      ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/lilypond-1.0.16.tar.gz
 
 It is also available from:
+
       ftp://sca.uwaterloo.ca/pub/lilypond/development/
 
 For more information about GNU LilyPond, please visit:
-      http://www.cs.ruu.nl/people/hanwen/lilypond/
-  or  http://sca.uwaterloo.ca/~praetzel/lilypond/
+      http://www.cs.uu.nl/~hanwen/lilypond/
+  or  http://www.xs4all.nl/~jantien/
+  or  http://sca.uwaterloo.ca/lilypond/
 
 Authors:
-      Han-Wen Nienhuys <hanwen@stack.nl>
+      Han-Wen Nienhuys <hanwen@cs.uu.nl>
       Jan Nieuwenhuizen <janneke@gnu.org>
  
 Copyright:
diff -urN ../lilypond-1.0.16/debian/postrm ./debian/postrm
--- ../lilypond-1.0.16/debian/postrm	Tue Sep 15 18:22:43 1998
+++ ./debian/postrm	Thu Oct 15 19:07:52 1998
@@ -4,7 +4,7 @@
 #   by Anthony Fok <foka@debian.org>
 #   This is free software; see the GNU General Public Licence
 #   version 2 or later for copying conditions.  There is NO warranty.
-#   Last modified:  Wed, 22 Apr 1998 05:55:58 -0600
+#   Last modified:  Fri, 14 Aug 1998 00:07:07 -0600
 
 set -e
 
@@ -22,17 +22,13 @@
 : ${VARTEXFONTS=$std_VARTEXFONTS}
 
 case "$1" in
-    remove)
-	/usr/bin/mktexlsr
-    ;;
-
     upgrade)
 	# Clear out the old TFM and PK files in case the fonts were modified
 	rm -rf $VARTEXFONTS/tfm/$font_supplier/$font_typeface
 	rm -rf $VARTEXFONTS/pk/*/$font_supplier/$font_typeface
     ;;
 
-    purge)
+    remove|purge)
 	# Clear out the old TFM and PK files in case the fonts were modified
 	rm -rf $VARTEXFONTS/tfm/$font_supplier/$font_typeface
 	rm -rf $VARTEXFONTS/pk/*/$font_supplier/$font_typeface
diff -urN ../lilypond-1.0.16/debian/rules ./debian/rules
--- ../lilypond-1.0.16/debian/rules	Tue Sep 15 18:22:43 1998
+++ ./debian/rules	Thu Oct 15 19:07:52 1998
@@ -9,8 +9,9 @@
 # for Debian GNU/Linux.
 
 package = lilypond
-
-SHELL = /bin/bash
+SHELL = /bin/sh
+r = debian/tmp
+d = usr/doc/$(package)
 
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
@@ -19,57 +20,81 @@
 build-stamp:
 	dh_testdir
 
-	./configure --disable-checking --disable-debugging \
+	CC=egcc ./configure --disable-checking --disable-debugging \
 		--enable-printing --prefix=/usr --enable-optimise \
 		--enable-shared
 	$(MAKE) all
+	# $(MAKE) htmldoc
 
 	touch build-stamp
 
 clean:
 	dh_testdir
 	dh_testroot
-	rm -f build-stamp
+	rm -f build-stamp install-stamp
 	-$(MAKE) distclean
-	-$(MAKE) local-distclean
+
+	# Correct the owner of the out/dummy.dep files when built with sudo.
+	if [ -n "$$SUDO_USER" -a -n "$$SUDO_GID" ]; then \
+		find . -user root | xargs -r chown $$SUDO_USER.$$SUDO_GID; \
+	else \
+		find . -user root | xargs -r chown $$LOGNAME; \
+	fi
 
 	# Remove the following line once the *.make files are fixed
-	rm -f bin/*.pyc
-	rm -f debian/preinst
+	rm -f stepmake/bin/*.pyc
+	rm -f stepmake/stepmake/stepmake
+	rm -f stepmake/stepmake/bin
+	rm -f GNUmakefile stepmake/GNUmakefile
+	rm -f config.h
+	rm -f wwwlist
 
 	dh_clean
 
-# Build architecture-independent files here.
-binary-indep: build
-# We have nothing to do by default.
-
-binary-arch: build
+install: install-stamp
+install-stamp: build-stamp
 	dh_testdir
 	dh_testroot
 	dh_clean -k
-
 	dh_installdirs usr/lib/texmf/doc \
 		usr/lib/emacs/site-lisp \
 		usr/doc/$(package)/examples
-	ln -fs ../../../doc/lilypond debian/tmp/usr/lib/texmf/doc/lilypond
-	$(MAKE) prefix=`pwd`/debian/tmp/usr install
-	cp -av mudela-mode.el debian/tmp/usr/lib/emacs/site-lisp
-	dh_installdocs ANNOUNCEMENT ANNOUNCE-0.1 README.txt NEWS ONEWS DEDICATION \
-		BUGS TODO \
+	ln -fs ../../../doc/lilypond $(r)/usr/lib/texmf/doc/lilypond
+
+	$(MAKE) prefix=`pwd`/$(r)/usr install
+
+	touch install-stamp
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+binary-arch: build install
+	dh_testdir
+	dh_testroot
+	cp -av mudela-mode.el $(r)/usr/lib/emacs/site-lisp
+	dh_installdocs ANNOUNCEMENT ANNOUNCE-0.1 NEWS* DEDICATION \
+		BUGS TODO *.txt \
 		Documentation/pictures/*.xpm \
 		Documentation/out/*.txt \
 		Documentation/tex/*.doc \
 		Documentation/tex/*.bib
 #	dh_installexamples input
 	cp -aP `find input mutopia \( -name '*.ly' -o -name '*.tex' -o -name 'TODO' \)` \
-		debian/tmp/usr/doc/lilypond/examples
+		$(r)/$(d)/examples
+	for i in `find $(r)/$(d)/examples/ -type d -name out`; do \
+		mv -fv $$i/* $$i/..; rmdir $$i; done
 #	dh_installmenu
+#	dh_installemacsen
 #	dh_installcron
 #	dh_installmanpages
 #	dh_undocumented
 	dh_installchangelogs
 #	dh_strip
 	dh_compress
+	( cd $(r)/$(d) && \
+		if [ -f NEWS ]; then gzip -9vf NEWS; fi )
+	ln -s NEWS.gz $(r)/$(d)/changelog.gz
 	dh_fixperms
 	dh_suidregister
 	dh_installdeb
@@ -83,4 +108,4 @@
 	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
 
 binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary
+.PHONY: build clean install binary-indep binary-arch binary
diff -urN ../lilypond-1.0.16/debian/watch ./debian/watch
--- ../lilypond-1.0.16/debian/watch	Tue Sep 15 18:22:43 1998
+++ ./debian/watch	Thu Oct 15 19:07:52 1998
@@ -1,5 +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/development	lilypond-*.tar.gz	debian	uupdate
+# Site		Directory			Pattern			Version	Script
+ftp.cs.uu.nl	/pub/GNU/LilyPond/development	lilypond-*.tar.gz	debian	uupdate
diff -urN ../lilypond-1.0.16/flower/hash.cc ./flower/hash.cc
--- ../lilypond-1.0.16/flower/hash.cc	Thu Jan  1 00:00:00 1970
+++ ./flower/hash.cc	Mon Oct 19 11:09:05 1998
@@ -0,0 +1,33 @@
+#include "string.hh"
+#include "array.hh"
+#include "dictionary.hh"
+
+
+// Note: assumes long is at least 32 bits.
+const unsigned long my_prime_list[] = 
+{
+  53,         97,         193,       389,       769,
+  1543,       3079,       6151,      12289,     24593,
+  49157,      98317,      196613,    393241,    786433,
+  1572869,    3145739,    6291469,   12582917,  25165843,
+  50331653,   100663319,  201326611, 402653189u, 805306457u, 
+  1610612741u, 3221225473u, 4294967291u
+};
+
+unsigned long prime_list (int idx)
+{
+  return my_prime_list [idx];
+}
+
+unsigned int hash (String s)
+{
+  const char* str = s.ch_C ();
+  unsigned int result = 0;
+  while (1) {
+    char c = *str++;
+    if (c == 0) break;
+      result += (result<<3) + c;
+  }
+  return result;
+}
+
diff -urN ../lilypond-1.0.16/flower/include/dictionary-iter.hh ./flower/include/dictionary-iter.hh
--- ../lilypond-1.0.16/flower/include/dictionary-iter.hh	Tue Sep 15 18:22:43 1998
+++ ./flower/include/dictionary-iter.hh	Mon Oct 19 11:09:05 1998
@@ -1,5 +1,5 @@
 /*
-  dictionary-iter.hh -- declare 
+  dictionary-iter.hh -- declare Dictionary_iter
 
   source file of the Flower Library
 
@@ -10,18 +10,51 @@
 #ifndef DICTIONARY_ITER_HH
 #define DICTIONARY_ITER_HH
 
-#include "string.hh"
-#include "assoc-iter.hh"
+#include "dictionary.hh"
+
+
+
 #include "dictionary.hh"
 
 template<class V>
-class Dictionary_iter : public Assoc_iter<String, V>
+class Dictionary_iter
 {
+  Dictionary<V> *dict_l_;
+  int i;
 public:
-  Dictionary_iter (Dictionary<V> const &d)
-    : Assoc_iter<String, V> (d)
-  {
-  }
+  Dictionary_iter(Dictionary<V> const &dict)
+    {
+      i =0;
+      dict_l_ =(Dictionary<V> *) & dict;
+      next_used ();
+    }
+
+  bool ok ()
+    {
+      return i < dict_l_->fixed_p_->dict_arr_.size ();
+    }
+
+  void next_used ()
+    {
+      while (ok () && dict_l_->fixed_p_->dict_arr_[i].free_b_)
+	{
+	  i ++;
+	}
+    }
+  void operator ++(int)
+    {
+      i++;
+      next_used ();
+    }
+
+  String key ()
+    {
+      return dict_l_->fixed_p_->dict_arr_[i].name_;
+    }
+  V val ()
+    {
+      return dict_l_->fixed_p_->dict_arr_[i].value_;      
+    }
 };
 
 #endif // DICTIONARY_ITER_HH
diff -urN ../lilypond-1.0.16/flower/include/dictionary.hh ./flower/include/dictionary.hh
--- ../lilypond-1.0.16/flower/include/dictionary.hh	Tue Sep 15 18:22:43 1998
+++ ./flower/include/dictionary.hh	Mon Oct 19 11:09:05 1998
@@ -11,28 +11,185 @@
 #define DICTIONARY_HH
 
 #include "string.hh"
-#include "assoc.hh"
+#include "array.hh"
 
-/**
-  UGH:  write a String_hash template, 
-
-  SEE:
-  
-       #include <search.h>
+unsigned long prime_list (int idx);
+template<class V>
+struct Dict_entry
+{
+  String name_;
+  V value_;
+  bool free_b_;
+
+  Dict_entry() {
+    free_b_ = true;
+  }
+  Dict_entry (String s, V v)
+    {
+      name_ = s;
+      value_ = v;
+      free_b_ = false;
+    }
+};
 
-       ENTRY *hsearch(ENTRY item, ACTION action);
+unsigned int hash (String);
 
-       int     hcreate (unsigned nel);
+/**
+   A hash table of prime size.
 
-       void    hdestroy (void);
+   We use quadratic probing.  
+ */
+template<class V>
+class Fixed_size_dictionary
+{
+public:
+  Array<Dict_entry<V> > dict_arr_; 
+  int size_idx_;
+  Fixed_size_dictionary (int size_idx)
+    {
+      size_idx_ = size_idx;
+      int sz = prime_list(size_idx_);
+      dict_arr_.set_size (sz);
+    }
+
+  /// find #s#, or find first empty entry corresponding to #s#
+  int lookup  (String s)
+    {
+      int sz =dict_arr_.size ();
+      int i = hash (s) % sz;
+      int j = 0;
+      while (j <= sz/2) {
+	if (dict_arr_[i].free_b_)
+	  return i;
+	    
+	if (dict_arr_[i].name_ == s)
+	  return i;
+
+	j++;
+	i = (i + j*j) % sz;
+      }
+
+      return -1;
+    }
+
+  /// remove #s# from the hash table.  
+  V remove (String s)
+    {
+      assert (false);		// Untested routine.
+      int sz =dict_arr_.size ();
+      int i = hash (s) % sz;
+      int j = 0;
+      V retval;
+      while (j <= sz/2 && dict_arr_[i].name_ != s)
+	{
+	  assert (!dict_arr_[i].free_b_);
+	    
+	
+	  j ++;
+	  i = (i + j*j) % sz;
+	}
+
+      j++;
+      int nexti = (i + j*j) % sz;
+
+      while (j <= sz/2 && !dict_arr_[i].free_b_)
+	{
+	  dict_arr_[i] = dict_arr_[nexti];
+	  j++;
+	  i = nexti;
+	  nexti = (nexti + j*j)%sz;
+	}
+      
+    finish:
+      return retval;
+    }
+};
 
-  (should be frobnified to allow multiple hashes)
+/**
+   Hash table with sliding sizes. 
  */
-template<class T>
-class Dictionary : public Assoc<String, T>
+template<class V>
+class Dictionary
 {
+  Fixed_size_dictionary<V> * fixed_p_;
+
+  /// set size to next prime, and copy contents
+  void enlarge ()
+    {
+      Fixed_size_dictionary<V> *f = new Fixed_size_dictionary<V> (fixed_p_->size_idx_ +1);
+      for (int i=0; i < fixed_p_->dict_arr_.size(); i++)
+	{
+	  if (fixed_p_->dict_arr_[i].free_b_)
+	    continue;
+
+	  String nm (fixed_p_->dict_arr_[i].name_);
+	  int nl = f->lookup (nm);
+	  
+	  f->dict_arr_[nl] = Dict_entry<V> (nm, fixed_p_->dict_arr_[i].value_);
+	}
+      delete fixed_p_;
+      fixed_p_ = f;
+    }
 public:
-  
+  Dictionary ()
+    {
+      fixed_p_ = new Fixed_size_dictionary<V> (0);
+    }
+  ~Dictionary ()
+    {
+      delete fixed_p_;
+    }
+  void operator = (Dictionary<V> const &src)
+    {
+      if (&src == this)
+	return;
+      
+      delete fixed_p_;
+      fixed_p_ = new Fixed_size_dictionary<V> (*src.fixed_p_);
+    }
+  Dictionary (Dictionary<V> const &src)
+    {
+      fixed_p_ = new Fixed_size_dictionary<V> (*src.fixed_p_);
+    }
+  bool elem_b (String s) const
+    {
+      int l =  fixed_p_->lookup (s);
+
+      return (l >= 0 && !fixed_p_->dict_arr_[l].free_b_) ;
+    }
+
+  /**
+     Find and return element.  If #s# is not in the table, create an entry in the table, and init
+   */
+  V& elem (String s)
+    {
+      int l;
+      while ((l= fixed_p_->lookup (s)) <0)
+	{
+	  enlarge ();
+	}
+
+      
+       fixed_p_->dict_arr_[l].free_b_ = false;
+       fixed_p_->dict_arr_[l].name_ = s;
+       return fixed_p_->dict_arr_[l].value_;
+    }
+  V& operator [] (String k)
+    {
+      return elem (k);
+    }
+
+  V operator [] (String k) const
+    {
+      return elem (k);
+    }
+
+  V remove (String s)
+    {
+      return fixed_p_->remove (s);      
+    }
+  friend class Dictionary_iter<V>;
 };
+
 
 #endif // DICTIONARY_HH
diff -urN ../lilypond-1.0.16/init/engraver.ly ./init/engraver.ly
--- ../lilypond-1.0.16/init/engraver.ly	Mon Oct 12 13:10:54 1998
+++ ./init/engraver.ly	Mon Oct 19 11:09:05 1998
@@ -176,12 +176,11 @@
 
 };
 
-\translator {
+StupidScore = \translator {
  	\type "Score_engraver";
-	\name StupidScore;
-
-	\consists "Staff_sym_engraver";
-}
+	\name Score;
+	\consists "Note_heads_engraver";
+};
 
 
 
diff -urN ../lilypond-1.0.16/lily/include/key-item.hh ./lily/include/key-item.hh
--- ../lilypond-1.0.16/lily/include/key-item.hh	Tue Sep 15 18:22:42 1998
+++ ./lily/include/key-item.hh	Mon Oct 19 11:09:05 1998
@@ -13,11 +13,14 @@
 
 /// An item which places accidentals at the start of the line
 struct Key_item : Item {
-  Array<int> pitch;
-  Array<int> acc;
-  Array<int> old_pitch;
-  Array<int> old_acc;
+  Array<int> pitch_arr_;
+  Array<int> acc_arr_;
+  Array<int> old_pitch_arr_;
+  Array<int> old_acc_arr_;
+
+  // ugh.  Naming 
   int c_position;
+  // see above.
   int c0_position;
   bool default_b_;
   bool multi_octave_b_;
@@ -30,7 +33,10 @@
   void add (const Musical_pitch&);
   void add_old (int pitch, int acc);
   void add_old (const Musical_pitch&);
-  void read (const Key_engraver&);
+  void set (bool multi_octave_b,
+	    Array<Musical_pitch> const &idx_arr,
+	    Array<Musical_pitch> const &old_idx_arr);
+
   void set_c_position (int);
   int Key_item::calculate_position(int p, int a) const;
 
diff -urN ../lilypond-1.0.16/lily/include/local-key-item.hh ./lily/include/local-key-item.hh
--- ../lilypond-1.0.16/lily/include/local-key-item.hh	Tue Sep 15 18:22:42 1998
+++ ./lily/include/local-key-item.hh	Mon Oct 19 11:09:05 1998
@@ -24,10 +24,9 @@
 class Local_key_item : public Item {
 public:
     DECLARE_MY_RUNTIME_TYPEINFO;
-    Array<Musical_pitch> accs;
+    Array<Musical_pitch> accidental_pitch_arr_;
     Link_array<Item> support_items_;
     int c0_position_i_;
-    
     Local_key_item ();
     void add_support (Item*);
     void add (Musical_pitch);
diff -urN ../lilypond-1.0.16/lily/include/notename-table.hh ./lily/include/notename-table.hh
--- ../lilypond-1.0.16/lily/include/notename-table.hh	Fri Sep 18 12:53:24 1998
+++ ./lily/include/notename-table.hh	Mon Oct 19 11:09:05 1998
@@ -16,7 +16,7 @@
 #include "dictionary.hh"
 #include "musical-pitch.hh"
 
-class Notename_table :   public Dictionary< Musical_pitch >{
+class Notename_table :   public Dictionary<Musical_pitch>{
 public:
   String get_name (Musical_pitch) const;
 };
diff -urN ../lilypond-1.0.16/lily/include/slur-engraver.hh ./lily/include/slur-engraver.hh
--- ../lilypond-1.0.16/lily/include/slur-engraver.hh	Tue Sep 15 18:22:42 1998
+++ ./lily/include/slur-engraver.hh	Mon Oct 19 11:09:05 1998
@@ -15,7 +15,6 @@
   Array<Slur_req*> new_slur_req_l_arr_;
   Array<Slur *> slur_l_stack_;
   Array<Slur*> end_slur_l_arr_;
-  Direction dir_;
 
 protected:
   virtual bool do_try_request (Request*);
@@ -27,7 +26,6 @@
 
 public:
   TRANSLATOR_CLONE(Slur_engraver);
-  Slur_engraver();
   DECLARE_MY_RUNTIME_TYPEINFO;
 };
 
diff -urN ../lilypond-1.0.16/lily/key-engraver.cc ./lily/key-engraver.cc
--- ../lilypond-1.0.16/lily/key-engraver.cc	Tue Sep 22 10:17:27 1998
+++ ./lily/key-engraver.cc	Mon Oct 19 11:09:05 1998
@@ -29,7 +29,7 @@
       kit_p_ = new Key_item;
       kit_p_->break_priority_i_ = -1; // ugh
       announce_element (Score_element_info (kit_p_,keyreq_l_));
-      kit_p_->read (*this);
+      kit_p_->set (key_.multi_octave_b_, accidental_idx_arr_, old_accidental_idx_arr_);
     }
 }
 
diff -urN ../lilypond-1.0.16/lily/key-item.cc ./lily/key-item.cc
--- ../lilypond-1.0.16/lily/key-item.cc	Tue Sep 15 18:22:42 1998
+++ ./lily/key-item.cc	Mon Oct 19 11:09:05 1998
@@ -14,8 +14,7 @@
 #include "molecule.hh"
 #include "paper-def.hh"
 #include "lookup.hh"
-
-#include "key-engraver.hh"
+#include "musical-pitch.hh"
 
 const int FLAT_TOP_PITCH=2; /* fes,ges,as and bes typeset in lower octave */
 const int SHARP_TOP_PITCH=4; /*  ais and bis typeset in lower octave */
@@ -28,19 +27,21 @@
 }
 
 void
-Key_item::read (Key_engraver const & key_grav_r)
+Key_item::set (bool multi_octave_b,
+	       Array<Musical_pitch> const &idx_arr,
+	       Array<Musical_pitch> const &old_idx_arr)
 {
-  multi_octave_b_ = key_grav_r.key_.multi_octave_b_;
-  const Array<Musical_pitch> &idx_arr = key_grav_r.accidental_idx_arr_; 
+  multi_octave_b_ =multi_octave_b;
+
   for (int i = 0; i < idx_arr.size(); i++) 
     {
       Musical_pitch m_l =idx_arr[i];
       if (multi_octave_b_)
-	 add (m_l);
+	add (m_l);
       else
 	add (m_l.notename_i_, m_l.accidental_i_);
     }
-  const Array<Musical_pitch> &old_idx_arr = key_grav_r.old_accidental_idx_arr_; 
+
   for (int i = 0 ; i< old_idx_arr.size(); i++) 
     {
       Musical_pitch m_l =old_idx_arr[i];
@@ -66,29 +67,29 @@
 void
 Key_item::add (int p, int a)
 {
-  pitch.push (p);
-  acc.push (a);
+  pitch_arr_.push (p);
+  acc_arr_.push (a);
 }
 
 void
 Key_item::add (const Musical_pitch& pitch_r)
 {
-  pitch.push (pitch_r.steps());
-  acc.push (pitch_r.accidental_i_);
+  pitch_arr_.push (pitch_r.steps());
+  acc_arr_.push (pitch_r.accidental_i_);
 }
 
 void
 Key_item::add_old (int p, int a)
 {
-  old_pitch.push (p);
-  old_acc.push (a);
+  old_pitch_arr_.push (p);
+  old_acc_arr_.push (a);
 }
 
 void
 Key_item::add_old (const Musical_pitch& pitch_r)
 {
-  old_pitch.push (pitch_r.steps());
-  old_acc.push (pitch_r.accidental_i_);
+  old_pitch_arr_.push (pitch_r.steps());
+  old_acc_arr_.push (pitch_r.accidental_i_);
 }
 
 int
@@ -120,18 +121,20 @@
   
   int j;
   if ((break_status_dir_ == LEFT || break_status_dir_ == CENTER)
-      || old_pitch.size ())
+      || old_pitch_arr_.size ())
     {
-      for (int i =0; i < old_pitch.size(); i++) 
+      for (int i =0; i < old_pitch_arr_.size(); i++) 
         {
-          for (j =0; (j < pitch.size()) && (old_pitch[i] != pitch[j]); j++) 
+          for (j =0; (j < pitch_arr_.size())
+		 && (old_pitch_arr_[i] != pitch_arr_[j]); j++) 
 	    ;
 	  
-          if (j == pitch.size()
-	      || (old_pitch[i] == pitch[j] && old_acc[i] != acc[j]))
+          if (j == pitch_arr_.size()
+	      || (old_pitch_arr_[i] == pitch_arr_[j]
+		  && old_acc_arr_[i] != acc_arr_[j]))
             {
               Atom a =lookup_l ()->accidental (0);
-              a.translate_axis (calculate_position(old_pitch[i], old_acc[i]) * inter, Y_AXIS);
+              a.translate_axis (calculate_position(old_pitch_arr_[i], old_acc_arr_[i]) * inter, Y_AXIS);
               Molecule m (a);
               output->add_at_edge (X_AXIS, RIGHT, m);	
             }
@@ -148,14 +151,14 @@
       output->add_at_edge (X_AXIS, RIGHT, lookup_l()->fill (Box(x,y)));
     }
  
-  for (int i =0; i < pitch.size(); i++) 
+  for (int i =0; i < pitch_arr_.size(); i++) 
     {
-      Atom a =lookup_l ()->accidental (acc[i]);
-      a.translate_axis (calculate_position(pitch[i], acc[i]) * inter, Y_AXIS);
+      Atom a =lookup_l ()->accidental (acc_arr_[i]);
+      a.translate_axis (calculate_position(pitch_arr_[i], acc_arr_[i]) * inter, Y_AXIS);
       Molecule m (a);
       output->add_at_edge (X_AXIS, RIGHT, m);	
     }
-  if (pitch.size()) 
+  if (pitch_arr_.size()) 
     {
       Molecule m (lookup_l ()->fill (Box (
 					  Interval (0, paper()->note_width ()),
diff -urN ../lilypond-1.0.16/lily/local-key-item.cc ./lily/local-key-item.cc
--- ../lilypond-1.0.16/lily/local-key-item.cc	Fri Oct  9 14:03:43 1998
+++ ./lily/local-key-item.cc	Mon Oct 19 11:09:05 1998
@@ -16,7 +16,7 @@
 
 Local_key_item::Local_key_item ()
 {
-  c0_position_i_  = 0;
+  c0_position_i_ = 0;
 }
 
 void
@@ -31,17 +31,17 @@
 void
 Local_key_item::add (Musical_pitch p)
 {
-  for (int i=0; i< accs.size(); i++)
-    if (!Musical_pitch::compare (p, accs[i]))
+  for (int i=0; i< accidental_pitch_arr_.size(); i++)
+    if (!Musical_pitch::compare (p, accidental_pitch_arr_[i]))
       return;
   
-  accs.push (p);
+  accidental_pitch_arr_.push (p);
 }
 
 void
 Local_key_item::do_pre_processing()
 {
-  accs.sort (Musical_pitch::compare);
+  accidental_pitch_arr_.sort (Musical_pitch::compare);
 }
 
 Molecule*
@@ -51,10 +51,10 @@
 
   Molecule *octave_mol_p = 0;
   int lastoct = -100;
-  for  (int i = 0; i <  accs.size(); i++) 
+  for  (int i = 0; i <  accidental_pitch_arr_.size(); i++) 
     {
       // do one octave
-      if (accs[i].octave_i_ != lastoct) 
+      if (accidental_pitch_arr_[i].octave_i_ != lastoct) 
 	{
 	  if (octave_mol_p)
 	    {
@@ -65,9 +65,12 @@
 	    }
 	  octave_mol_p= new Molecule;
 	}
-      lastoct = accs[i].octave_i_;
-      Real dy = (accs[i].notename_i_ + c0_position_i_) * paper()->internote_f ();
-      Atom a (lookup_l ()->accidental (accs[i].accidental_i_));
+      
+      lastoct = accidental_pitch_arr_[i].octave_i_;
+      Real dy =
+	(c0_position_i_ + accidental_pitch_arr_[i].notename_i_)
+	* paper()->internote_f ();
+      Atom a (lookup_l ()->accidental (accidental_pitch_arr_[i].accidental_i_));
 
       a.translate_axis (dy, Y_AXIS);
       Molecule m(a);
@@ -82,7 +85,7 @@
       delete octave_mol_p;
     }
   
- if (accs.size()) 
+ if (accidental_pitch_arr_.size()) 
     {
       Box b(Interval (0, paper()->internote_f ()), Interval (0,0));
       Molecule m (lookup_l ()->fill (b));
diff -urN ../lilypond-1.0.16/lily/main.cc ./lily/main.cc
--- ../lilypond-1.0.16/lily/main.cc	Wed Oct 14 14:24:41 1998
+++ ./lily/main.cc	Mon Oct 19 11:09:05 1998
@@ -194,11 +194,10 @@
 #endif
 }
 
-int
-main_prog (int argc, char **argv)
+
+void
+setup_paths ()
 {
-  guile_init ();
-  
   // facilitate binary distributions
   char const *env_lily = getenv ("LILYPONDPREFIX");
   String prefix_directory;
@@ -221,10 +220,6 @@
   textdomain (name.ch_C ());
 #endif
 
-  identify ();
-  call_constructors ();
-  debug_init ();		// should be first
-
   global_path.add ("");
   // must override (come before) "/usr/local/share/lilypond"!
   char const *env_sz = getenv ("LILYINCLUDE");
@@ -239,11 +234,24 @@
 
   global_path.add (String (DIR_DATADIR) + "/ly/");
   global_path.add (String (DIR_DATADIR) + "/afm/");  
+}
+
 
-  Getopt_long oparser (argc, argv,theopts);
-  String init_str;
 
+int
+main_prog (int argc, char **argv)
+{
+  guile_init ();
+  identify ();
+  call_constructors ();
+  debug_init ();		// should be first
+
+  setup_paths ();
+
+  String init_str;
   String outname_str;
+
+  Getopt_long oparser (argc, argv,theopts);
   while (Long_option_init const * opt = oparser ())
     {
       switch (opt->shortname)
diff -urN ../lilypond-1.0.16/lily/music-iterator.cc ./lily/music-iterator.cc
--- ../lilypond-1.0.16/lily/music-iterator.cc	Mon Oct 12 13:10:55 1998
+++ ./lily/music-iterator.cc	Mon Oct 19 11:09:05 1998
@@ -167,7 +167,7 @@
 }
 
 void
-Music_iterator::inherit_info(Music_iterator const *parent)
+Music_iterator::inherit_info(Music_iterator const *)
 {
 }
 
diff -urN ../lilypond-1.0.16/lily/notename-table.cc ./lily/notename-table.cc
--- ../lilypond-1.0.16/lily/notename-table.cc	Tue Sep 15 18:22:42 1998
+++ ./lily/notename-table.cc	Mon Oct 19 11:09:05 1998
@@ -9,13 +9,13 @@
 #include "notename-table.hh"
 #include "pointer.tcc"
 #include "musical-request.hh"
-#include "assoc-iter.hh"
+#include "dictionary-iter.hh"
 
 String
 Notename_table::get_name (Musical_pitch m) const
 {
 
-  for (Assoc_iter<String, Musical_pitch> ai (*this); ai.ok (); ai++)
+  for (Dictionary_iter<Musical_pitch> ai (*this); ai.ok (); ai++)
     {
       if (ai.val () == m)
 	return ai.key ();
diff -urN ../lilypond-1.0.16/lily/paper-def.cc ./lily/paper-def.cc
--- ../lilypond-1.0.16/lily/paper-def.cc	Fri Oct  9 14:03:43 1998
+++ ./lily/paper-def.cc	Mon Oct 19 11:09:05 1998
@@ -21,8 +21,7 @@
 #include "identifier.hh"
 #include "main.hh"
 #include "scope.hh"
-#include "assoc.hh"
-#include "assoc-iter.hh"
+#include "dictionary-iter.hh"
 
 Paper_def::Paper_def ()
 {
@@ -214,7 +213,7 @@
 Paper_def::ps_output_settings_str () const
 {
   String s ("\n ");
-  for (Assoc_iter<String,Identifier*> i (*scope_p_); i.ok (); i++)
+  for (Dictionary_iter<Identifier*> i (*scope_p_); i.ok (); i++)
     s += String ("/mudelapaper") + i.key () 
       + "{" + i.val ()->str () + "} bind def\n";
   s +=  *scope_p_->elem ("pssetting")->access_String ();
@@ -225,7 +224,7 @@
 Paper_def::tex_output_settings_str () const
 {
   String s ("\n ");
-  for (Assoc_iter<String,Identifier*> i (*scope_p_); i.ok (); i++)
+  for (Dictionary_iter<Identifier*> i (*scope_p_); i.ok (); i++)
     s += String ("\\def\\mudelapaper") + i.key () 
       + "{" + i.val ()->str () + "}\n";
   s +=  *scope_p_->elem ("texsetting")->access_String ();
diff -urN ../lilypond-1.0.16/lily/parser.yy ./lily/parser.yy
--- ../lilypond-1.0.16/lily/parser.yy	Mon Oct 12 13:10:55 1998
+++ ./lily/parser.yy	Mon Oct 19 11:09:05 1998
@@ -1442,7 +1442,7 @@
 symtable_body:
 				{ $$ = new Symtable; }
 	| symtable_body	STRING	symboldef {
-		$$->add (*$2, *$3);
+		$$->elem (*$2) = *$3;
 		delete $2;
 		delete $3;
 	}
diff -urN ../lilypond-1.0.16/lily/scope.cc ./lily/scope.cc
--- ../lilypond-1.0.16/lily/scope.cc	Mon Oct  5 11:20:00 1998
+++ ./lily/scope.cc	Mon Oct 19 11:09:05 1998
@@ -8,7 +8,7 @@
  */
 
 #include "scope.hh"
-#include "assoc-iter.hh"
+#include "dictionary-iter.hh"
 #include "debug.hh"
 #include "identifier.hh"
 
@@ -16,7 +16,7 @@
 Scope::print () const
 {
   bool init_b = false;		// ugh
-  for (Assoc_iter<String,Identifier*> ai (*this);  ai.ok(); ai++)
+  for (Dictionary_iter<Identifier*> ai (*this);  ai.ok(); ai++)
     {
       if (ai.val()->init_b_ == init_b)
 	{
@@ -28,7 +28,7 @@
 
 Scope::~Scope ()
 {
-  for (Assoc_iter<String,Identifier*>	 ai (*this); ai.ok(); ai++)
+  for (Dictionary_iter<Identifier*>	 ai (*this); ai.ok(); ai++)
     {
       DOUT << "deleting: " << ai.key() << '\n';
       delete ai.val ();
@@ -38,7 +38,7 @@
 Scope::Scope (Scope const&s)
   : Dictionary<Identifier*> (s)
 {
-  for (Assoc_iter<String,Identifier*> ai (s); ai.ok(); ai++)
+  for (Dictionary_iter<Identifier*> ai (s); ai.ok(); ai++)
     {
       (*this)[ai.key ()] = ai.val ()->clone ();
     }
diff -urN ../lilypond-1.0.16/lily/slur-engraver.cc ./lily/slur-engraver.cc
--- ../lilypond-1.0.16/lily/slur-engraver.cc	Wed Oct 14 14:45:01 1998
+++ ./lily/slur-engraver.cc	Mon Oct 19 11:09:05 1998
@@ -50,13 +50,6 @@
     }
 }
 
-/*
-  abracadabra
-  */
-Slur_engraver::Slur_engraver()
-{
-  dir_ =CENTER;
-}
 void
 Slur_engraver::do_process_requests()
 {
@@ -98,17 +91,16 @@
 {
   Scalar dir (get_property ("slurydirection"));
   Scalar dir2 (get_property ("ydirection"));
-  if (dir.length_i ())
-    {
-      dir_ = (Direction) sign (int(dir));
-    }
-  else if (dir2.length_i ())
-    dir_ = (Direction) sign (int (dir2));
+
+  Direction slurdir = CENTER;
+  if (dir.length_i () && dir.isnum_b ())
+    slurdir = (Direction) sign (int(dir));
+  else if (dir2.length_i () && dir2.isnum_b ())
+    slurdir = (Direction) sign (int (dir2));
   
   for (int i = 0; i < end_slur_l_arr_.size(); i++)
     {
-      if (dir_)
-	end_slur_l_arr_[i]->dir_ = dir_;
+      end_slur_l_arr_[i]->dir_ = slurdir;
       typeset_element (end_slur_l_arr_[i]);
     }
   end_slur_l_arr_.clear();
diff -urN ../lilypond-1.0.16/lily/symtable.cc ./lily/symtable.cc
--- ../lilypond-1.0.16/lily/symtable.cc	Fri Oct  9 14:03:43 1998
+++ ./lily/symtable.cc	Mon Oct 19 11:09:05 1998
@@ -10,8 +10,7 @@
 #include "debug.hh"
 #include "real.hh"
 #include "atom.hh"
-#include "assoc.hh"
-#include "assoc-iter.hh"
+#include "dictionary-iter.hh"
 #include "symtable.hh"
 
 Symtables::Symtables()
@@ -24,7 +23,7 @@
 {
   font_ = s.font_;
   font_path_ = s.font_path_;
-  for (Assoc_iter<String, Symtable*>  i (s); i.ok(); i++)
+  for (Dictionary_iter< Symtable*>  i (s); i.ok(); i++)
     {
       add (i.key(), new Symtable (*i.val ()));
     }
@@ -32,7 +31,7 @@
 
 Symtables::~Symtables()
 {
-  for (Assoc_iter<String, Symtable*>  i (*this); i.ok(); i++)
+  for (Dictionary_iter< Symtable*>  i (*this); i.ok(); i++)
     {
       delete i.val();
     }
@@ -71,7 +70,7 @@
 void
 Symtables::print() const
 {
-  for (Assoc_iter<String, Symtable*>  i (*this); i.ok(); i++)
+  for (Dictionary_iter<Symtable*>  i (*this); i.ok(); i++)
     {
       DOUT << "table \'" << i.key () << "\' {\n";
       i.val()->print ();
@@ -81,7 +80,7 @@
 void
 Symtable::print() const
 {
-  for (Assoc_iter<String, Atom>  i (*this); i.ok(); i++)
+  for (Dictionary_iter<Atom>  i (*this); i.ok(); i++)
     {
       DOUT << "\'" << i.key() << "\'->" << i.val ().str () << '\n';
     }
@@ -91,5 +90,5 @@
 Symtables::add (String s, Symtable*p)
 {
   p-> id_str = s;
-  Dictionary<Symtable*>::add (s,p);
+  Dictionary<Symtable*>::elem  (s) = p;
 }
diff -urN ../lilypond-1.0.16/lily/ties-engraver.cc ./lily/ties-engraver.cc
--- ../lilypond-1.0.16/lily/ties-engraver.cc	Wed Oct 14 14:34:10 1998
+++ ./lily/ties-engraver.cc	Mon Oct 19 11:09:05 1998
@@ -105,14 +105,14 @@
     {
       Scalar tie_dir (get_property ("tieYDirection"));
       Scalar y_dir (get_property ("ydirection"));      
-      Direction dir;
-	if (tie_dir.length_i ())
-	  dir = (Direction) sign (int(tie_dir));
-	else if (y_dir.length_i ())
-	  dir = (Direction) sign (int (y_dir));
-  
-	end_tie_p_arr_[i]->dir_ = dir;
-	typeset_element (end_tie_p_arr_[i]);
+      Direction dir = CENTER;
+      if (tie_dir.length_i () && tie_dir.isnum_b ())
+	dir = (Direction) sign (int (tie_dir));
+      else if (y_dir.length_i () && y_dir.isnum_b ())
+	dir = (Direction) sign (int (y_dir));
+      
+      end_tie_p_arr_[i]->dir_ = dir;
+      typeset_element (end_tie_p_arr_[i]);
     }
 
   end_tie_p_arr_ = tie_p_arr_;
diff -urN ../lilypond-1.0.16/lily/translator-group.cc ./lily/translator-group.cc
--- ../lilypond-1.0.16/lily/translator-group.cc	Mon Oct  5 11:20:00 1998
+++ ./lily/translator-group.cc	Mon Oct 19 11:09:05 1998
@@ -35,13 +35,13 @@
 void
 Translator_group::check_removal()
 {
-  for (int i =0; i < group_l_arr ().size();)
+  Link_array<Translator_group> groups (group_l_arr ());
+  
+  for (int i =0; i < groups.size(); i++)
     {
-      group_l_arr ()[i]->check_removal();
-      if (group_l_arr ()[i]->removable_b())
-	terminate_translator (group_l_arr ()[i]);
-      else
-	i++;
+      groups[i]->check_removal();
+      if (groups[i]->removable_b())
+	terminate_translator (groups[i]);
     }
 }
 
@@ -86,7 +86,13 @@
 bool
 Translator_group::removable_b() const
 {
-  return !(iterator_count_ || group_l_arr ().size());
+  for (PCursor<Translator*> i (trans_p_list_.top ()); i.ok (); i++)
+    {
+      if (i->access_Translator_group ())
+	return false;
+    }
+
+  return !iterator_count_;
 }
 
 Translator_group *
@@ -94,10 +100,12 @@
 {
   if (is_alias_b (n) && (id_str_ == id || id.empty_b ()))
     return this;
+
+  Link_array<Translator_group> groups (group_l_arr ());
   Translator_group* r = 0;
-  for (int i =0; !r && i < group_l_arr ().size(); i++)
+  for (int i =0; !r && i < groups.size(); i++)
     {
-      r = group_l_arr ()[i]->find_existing_translator_l (n,id);
+      r = groups[i]->find_existing_translator_l (n,id);
     }
 
   return r;
@@ -182,8 +190,11 @@
 Translator_group::do_try_request (Request* req_l)
 {
   bool hebbes_b =false;
-  for (int i =0; !hebbes_b && i < nongroup_l_arr ().size() ; i++)
-    hebbes_b =nongroup_l_arr ()[i]->try_request (req_l);
+
+  Link_array<Translator> nongroups (nongroup_l_arr ());
+  
+  for (int i =0; !hebbes_b && i < nongroups.size() ; i++)
+    hebbes_b =nongroups[i]->try_request (req_l);
   if (!hebbes_b && daddy_trans_l_)
     hebbes_b = daddy_trans_l_->try_request (req_l);
   return hebbes_b ;
@@ -258,10 +269,11 @@
 Translator*
 Translator_group::get_simple_translator (char const *type) const
 {
-  for (int i=0; i < nongroup_l_arr ().size(); i++)
+  Link_array<Translator> nongroups (nongroup_l_arr ());
+  for (int i=0; i < nongroups.size(); i++)
     {
-      if (nongroup_l_arr ()[i]->name() == type)
-	return nongroup_l_arr ()[i];
+      if (nongroups[i]->name() == type)
+	return nongroups[i];
     }
   if (daddy_trans_l_)
     return daddy_trans_l_->get_simple_translator (type);
diff -urN ../lilypond-1.0.16/make/GNUmakefile ./make/GNUmakefile
--- ../lilypond-1.0.16/make/GNUmakefile	Tue Sep 15 18:22:43 1998
+++ ./make/GNUmakefile	Fri Oct 16 15:29:00 1998
@@ -4,9 +4,5 @@
 STEPMAKE_TEMPLATES=makedir
 BLURBS=BLURB # COPERTINA FLAPTEKST
 
-# ifneq ($(strip $(state-vector)),)
-EXTRA_DIST_FILES = STATE-VECTOR
-# endif
-
 include $(depth)/make/stepmake.make 
 
diff -urN ../lilypond-1.0.16/make/STATE-VECTOR ./make/STATE-VECTOR
--- ../lilypond-1.0.16/make/STATE-VECTOR	Wed Oct 14 16:20:39 1998
+++ ./make/STATE-VECTOR	Thu Jan  1 00:00:00 1970
@@ -1,104 +0,0 @@
-0.1.76
-0.1.76.jcn1
-0.1.77
-0.1.77.uu1
-0.1.77.hwjc
-0.1.77.jcn1
-0.1.77.jcn2
-0.1.77.hwn1
-0.1.78
-0.1.78.hwn1
-0.1.78.jcn1
-0.1.78.jcn2
-0.1.79
-0.1.79.hwn1
-0.1.79.jcn2
-0.1.80
-0.1.80.jcn1
-0.1.80.eb1
-0.1.80.hwn1
-0.1.81
-0.1.81.jcn1
-0.1.81.jbr2
-0.1.81.jcn2
-0.1.81.jbr1
-0.1.81.jcn1
-0.1.81.hwn1
-0.1.81.hwn2
-0.1.82
-0.1.82.jcn1
-0.1.82.jcn2
-0.1.82.jcn3
-0.1.82.jcn4
-0.1.82.jcn5
-0.1.82.hwn1
-0.1.82.hwn2
-0.1.83
-0.1.83.hwn1
-0.1.83.jcn1
-0.1.83.uu1
-0.1.83.hwn1
-0.1.83.hwn2
-0.1.83.hwn3
-0.1.83.hwn4
-0.1.83.hwn5
-0.1.83.jcn4
-0.1.84
-0.1.84.jcn1
-0.1.84.hwn1
-0.1.84.jcn2
-0.1.84.hwn2
-0.1.84.jcn3
-0.1.84.hwn4
-0.1.85
-0.1.85.jcn1
-0.1.85.hwn1
-0.1.85.jcn2
-1.0.0
-1.0.0.hwn1
-1.0.0.hwn2
-1.0.1
-1.0.1.jbr1
-1.0.1.jcn2
-1.0.1.jbr2
-1.0.2
-1.0.2.hwn1
-1.0.3
-1.0.4.jcn1
-1.0.5
-1.0.5.jbr1
-1.0.5.jcn1
-1.0.5.hwn1
-1.0.6
-1.0.6.uu1
-1.0.7
-1.0.7.jbr1
-1.0.7.hwn1
-1.0.7.uu1
-1.0.8.uu1
-1.0.8
-1.0.8.jcn1
-1.0.8.uu1
-1.0.9
-1.0.9.hwn1
-1.0.9.uu1
-1.0.10
-1.0.10.jcn1
-1.0.10.uu1
-1.0.10.uu2
-1.0.11
-1.0.11.mb1
-1.0.11.uu1
-1.0.12
-1.0.12.uu1
-1.0.13
-1.0.13.jcn1
-1.0.13.jcn2
-1.0.13.jcn3
-1.0.13.jcn4
-1.0.13.jcn5
-1.0.14
-1.0.14.hwn1
-1.0.15
-1.0.15.uu1
-1.0.16
diff -urN ../lilypond-1.0.16/make/lilypond.spec.in ./make/lilypond.spec.in
--- ../lilypond-1.0.16/make/lilypond.spec.in	Mon Oct 12 13:10:55 1998
+++ ./make/lilypond.spec.in	Mon Oct 19 13:14:23 1998
@@ -17,7 +17,7 @@
 %prep
 %setup
 %build
-./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --enable-optimise --enable-shared
+./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --disable-optimise --enable-shared
 make all
 make -C Documentation info || true
 make htmldoc
@@ -29,7 +29,10 @@
 
 strip lily/out/lilypond mi2mu/out/mi2mu
 make prefix="$RPM_BUILD_ROOT/usr" install
+
+mkdir -p $RPM_BUILD_ROOT/etc/profile.d
 cp buildscripts/out/lilypond-profile $RPM_BUILD_ROOT/etc/profile.d/lilypond.sh
+cp buildscripts/out/lilypond-login $RPM_BUILD_ROOT/etc/profile.d/lilypond.csh
 
 %files
 
@@ -42,8 +45,6 @@
 # %doc input/*.ly
 # verbatim include of input: list the directory without issuing a %dir 
 
-%doc input
-
 /usr/bin/convert-mudela
 /usr/bin/mudela-book
 /usr/bin/ly2dvi
@@ -54,15 +55,12 @@
 /usr/man/man1/mudela-book.1
 /usr/man/man1/ly2dvi.1
 /usr/man/man1/convert-mudela.1
-/usr/info/lilypond.info*
-/usr/lib/texmf/texmf/tex/generic/lilypond
-/usr/lib/texmf/texmf/fonts/source/public/lilypond
 /usr/share/lilypond/
 /usr/share/locale/*/LC_MESSAGES/lilypond.mo
-/etc/profile.d/lilypond.sh
+/etc/profile.d/lilypond.*
+
+
 %post
 
-## ln -s  /usr/lib/texmf/texmf/tex/lilypond  /usr/lib/texmf/texmf/tex/latex/lilypond # suck me plenty
-texhash		# takes some time...
 touch /tmp/.lilypond-install
 rm `find /var/lib/texmf -name 'feta*pk -print' -or -name 'feta*tfm -print'` /tmp/.lilypond-install
diff -urN ../lilypond-1.0.16/make/mutopia-rules.make ./make/mutopia-rules.make
--- ../lilypond-1.0.16/make/mutopia-rules.make	Wed Sep 30 11:45:14 1998
+++ ./make/mutopia-rules.make	Mon Oct 19 11:09:06 1998
@@ -23,9 +23,9 @@
 .PRECIOUS: $(outdir)/%.dvi
 
 $(outdir)/%.dvi: %.ly
-	$(PYTHON) $(depth)/scripts/ly2dvi32.py -o $(outdir)  $< 
+	$(PYTHON) $(depth)/scripts/ly2dvi.py -o $(outdir)  $< 
 	-mv $(basename $<).midi $(outdir)
 
 $(outdir)/%.dvi: %.fly
-	$(PYTHON) $(depth)/scripts/ly2dvi32.py -o $(outdir)  $< 
+	$(PYTHON) $(depth)/scripts/ly2dvi.py -o $(outdir)  $< 
 	-mv $(basename $<).midi $(outdir)
diff -urN ../lilypond-1.0.16/make/stepmake.make ./make/stepmake.make
--- ../lilypond-1.0.16/make/stepmake.make	Mon Sep 28 17:59:58 1998
+++ ./make/stepmake.make	Thu Oct 15 14:51:51 1998
@@ -33,7 +33,7 @@
 
 -include $(addprefix $(depth)/make/,$(addsuffix -inclusions.make, $(LOCALSTEPMAKE_TEMPLATES)))
 
--include $(addprefix $(depth)/make/,$(addsuffix -inclusions.make, $(STEPMAKE_TEMPLATES)))
+-include $(addprefix $(stepdir)/,$(addsuffix -inclusions.make, $(STEPMAKE_TEMPLATES)))
 
 
 include $(addprefix $(stepdir)/,$(addsuffix -vars.make, $(STEPMAKE_TEMPLATES)))
diff -urN ../lilypond-1.0.16/mf/GNUmakefile ./mf/GNUmakefile
--- ../lilypond-1.0.16/mf/GNUmakefile	Mon Oct 12 13:10:55 1998
+++ ./mf/GNUmakefile	Mon Oct 19 11:09:06 1998
@@ -31,9 +31,9 @@
 
 TEXINSTALL=$(MAKE) INSTALLATION_OUT_DIR=$(datadir)/tex/ depth=.. INSTALLATION_OUT_FILES="$(TEXTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
 
-AFMINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir)/ INSTALLATION_OUT_FILES="$(AFM_FILES)" -f $(stepdir)/install-outfiles.sub.make $@
+AFMINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir)/afm/ INSTALLATION_OUT_FILES="$(AFM_FILES)" -f $(stepdir)/install-outfiles.sub.make $@
 
-LYINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir) INSTALLATION_OUT_FILES="$(LYTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
+LYINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir)/ly/ INSTALLATION_OUT_FILES="$(LYTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
 
 localinstall: $(ALL_GEN_FILES)
 	$(TEXINSTALL)
diff -urN ../lilypond-1.0.16/mf/feta-slag.mf ./mf/feta-slag.mf
--- ../lilypond-1.0.16/mf/feta-slag.mf	Tue Sep 15 18:22:43 1998
+++ ./mf/feta-slag.mf	Thu Oct 15 14:35:07 1998
@@ -108,7 +108,6 @@
 	trills := 3;
 	set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
 	draw_trill_three;
-	draw_mordent(twidth-0.5toverlap);
 fet_endchar;
 
 fet_beginchar("prallmordent", "prallmordent", "prallmordent")
diff -urN ../lilypond-1.0.16/mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Capriccio.ly ./mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Capriccio.ly
--- ../lilypond-1.0.16/mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Capriccio.ly	Thu Jan  1 00:00:00 1970
+++ ./mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Capriccio.ly	Thu Oct 15 14:53:37 1998
@@ -0,0 +1,498 @@
+\header{
+	enteredby = "Tom Cato Amundsen";
+	copyright = "Public Domain";
+	piece = "Capriccio";
+}
+
+%% I takt 22 foretar jeg et stemmekryss mellom stemme en og to, pga at den 
+%% stemmen som tidligere har vært andre stemme, kommeri resten av stykket
+%% ligge øverst og følgelig er første stemme.
+%% 
+%% Noe liknende skjer også i mellom andre og tredje stemme i takt 28
+
+\version "1.0.7";
+
+global = \notes{
+	\time 2/4;
+	\key es;
+	s2*48
+	\bar ":|:";
+	s2*48
+	\bar "|.";
+}
+
+vOne = \type Voice = voiceOne \notes\relative c''{
+	r8 g c4~ |	
+	[c8 d16 c][b a g f] |
+	[es8 g' d, f'] |
+	[es16 d c d][e fis g a] |
+%5
+	[bes g fis g][d g fis g] |
+	[c g fis g][a g fis e] |
+	d8 g4 fis8 |
+	g r r4 |
+%9
+	r16 [c, fis, g][a bes c8~] |
+	[c16 bes a bes][c d e fis] |
+	[g8 fis16 g~] g4~ |
+	[g8 e16 g~] g4~ |
+	[g8 e16 f~] f4~ |
+	[f8~ d16 f~] f4~ |
+	[f16 es d f][es d c b] |
+	[c b c d][es f g8~]
+%17
+	[g16 f es g ][f es d c] |
+	[b a b c][d es f8~] |
+	[f16 as g f][es d c bes!] |
+	[as c f es][d c b d] |
+%21
+	[g f es g][f es d f] |
+%stemmekryss ugh
+	r16 [c b c][g c b c] |
+	[es c a' es][c' es, d c] |
+	[d bes a bes][f bes a bes] |
+%25
+	[d bes g' d][bes' d, c bes] |
+	[c a g a][fis a g a] |
+	[c a fis' c][a' c, bes a] |
+	[bes8 d] g4~ |
+%29
+	[g8 a16 g][fis e d c] |
+	[bes8 d' a, c'] |
+	[g, bes'16 a][g8 bes] |
+	[e, g bes, e] |
+%33
+	[f, as'16 g][f8 as] |
+	[d, f as, d] |
+	es,4 r8 c' |
+	as4 r |
+%37
+	r8 g c4~ |
+	[c8 d16 c][b a g f] |
+	[es8 g' d, f'~] |
+	[f16 es d f][es d c bes] |
+%41
+	[as g as bes][c d es8~] |
+	[es16 d c es][d c bes as] |
+	[g f g as][bes c des8~] |
+	[des16 c bes des][c bes as g] |
+%45
+	as2~ |
+	[as8 g] g4~ |
+	[g8 as16 g][f es d c] |
+	g'2 |
+%49
+	r8 d' g,4~|
+	[g8 f16 g][a b c d] |
+	[es8 c, f' d,]
+	[g'16 as g f][es d c bes] |
+%53
+	[as8 f' g, e'] |
+	[f16 c' e, f] r [c' e, f~] |
+	f4 r |
+	r8 [f16 g][as bes c d,] |
+%57
+	es8 r r4 |
+	r8 [es16 f][g as bes! g] |
+	as8 r r4 |
+	r16 [g f es][d c b a] |
+%61
+	[b c d es] f4~ |
+	[f16 es b c] r [es b c] |
+	r [d b c] r [c b c~] |
+	[c8 g' d f~] |
+%65
+	[f es16 f] g4~ |
+	[g8 f c es~] |
+	[es d16 es] f4~ |
+	[f8 es16 d][c bes a g] |
+	c2~ |
+	c4. c8 |
+	bes4 a |
+	r16 [a' fis g] r16 [a fis g] |
+%73
+	r8 g es4~ |
+	es8 d4 c8~ |
+	[c es d c] |
+	[bes g'][a, fis'] |
+%77
+	g4 r8 f! |
+	b,4 r |
+	r8 g' c,4~ |
+	[c8 bes16 c][d e f g] |
+%81
+	[as16 c8.][as16 c bes c] |
+	[as c8.][as16 bes as bes] |
+	[g bes8.][g16 bes as bes] |
+	[g bes8.][g16 as g as] |
+%85
+	[f as8.][f16 as g as] |
+	[f as8.][f16 g f g] |
+	[es g d g][c, f bes, es] |
+	[as, c f es] f4 |
+%89
+	r8 c g'4~ |
+	[g8 as16 g][f es d c] |
+	b4 r8 es |
+	c4 r |
+%93
+	r8 g f'4~ |
+	[f8 d g <f as,]> |
+	<es4 g,> <d f,> |
+	<c2 g es>
+}
+
+vTwo = \type Voice = voiceTwo \notes\relative c{
+	es4 r8 es |
+	f4 r8 bes |
+	c4. b8 |
+	c r r4 |
+%5
+	r8 d g4~ |
+	[g8 a16 g][fis e d c] | 
+	[bes8 d' a, c'~] |
+	[c16 bes a c][bes a g f!] |
+%9
+	[es8 c] r8 fis! |
+	g r r a! |
+	[bes16 d8.][bes16 des c des] |
+	[bes16 des8.][bes16 c bes c] |
+%13	
+	[as c8.][as16 c bes c] |
+	[as bes8.][as16 bes as bes] |
+	g8 r r4 |
+	r8 [es16 f][g a b! c] |
+%17
+	d8 r r4 |
+	r8 [d,16 es][f g a! b!] |
+	c8 r r4 |
+	r2 |
+%21
+	r8 c4 b8 |
+	es4 r |
+	s2*5 |
+	r16 [g,, fis g][d g fis g]
+%29
+	[c, g' fis g][a g fis e] |
+	d8 g4 fis8 |
+	r16 [g fis g][d g fis g] |
+	[bes g e' bes][g' bes, as g] |
+%33
+	[as f e f][c f e f] |
+	[as f d' as][f' as, g f] |
+	[g8 bes] es4~
+	[es8 f16 es][d c bes as] |
+%37
+	g4 r8 c |
+	f4 r |
+	r8 [es, f g~] |
+	[g g] c4~ |
+%41
+	[c8 c16 d][es f g as] |
+	bes8 f, bes4~ | % HACK vil bruke [...] her
+	[bes8 bes16 c][des es f g] |
+	as8 [g, f e] |  % HACK vil bruke [...] her
+%45
+	[f16 f' e g][f es d! c] |
+	b4 r8 es |
+	c2 |
+	b2 |
+%49
+	b4 r8 d |
+	g, c4 b8 |
+	r16 [g as g] r [f g f] |
+	es8 g' c,4~ | % HACK vil egentlig bruke [...]
+%53
+	[c8 bes16 c][d e f g] |
+	[as8 f,][bes' g,] |
+	[c'16 des c bes][as g f es!] |
+	[d!16 c d es][f g as8~] |
+%57
+	[as16 c bes as][g f es d] |
+	[c b c d][es f g8~] |
+	[g16 bes as g][f es d c] |
+	b8 r r4 |
+%61
+	r4 r8 d'8 |
+	g,4 f |
+	es d |
+	[es8 es' b d~] |
+%65
+	d4. [c16 bes] |
+	a4. c8 |
+	c4. [bes16 as] |
+	g4 r |
+%69
+	r8 [bes as g] |
+	[fis a] d,4~ |
+	[d8 c16 d][e fis g a!] |
+	[bes8 g,][c' a,]
+%73
+	d'4. c8 |
+	fis, bes4 a8~ |
+	[a fis g a] |
+	d, r r16 [es' d c] |
+%77
+	[b8 d] g,4~ |
+	[g8 f16 g][a b! c d] |
+	[es b, c d][es f g as!] |
+	[bes! as g as][bes c d e!] |
+%81
+	[f8 e16 f~] f4~ |
+	[f8 e16 f~] f4~ |
+	[f8 d16 es!~] es4~ |
+	[es8 d16 es~] es4~ |
+%85
+	[es8 c16 d~] d4~ |
+	[d8 c16 d~] d4 |
+	[c8 bes! as g] |
+	f4 r16 [c' b d] |
+%89
+	g,4 r8 es' |
+	c4 r |
+	r8 d, g4~ |
+	[g8 as16 g][f es d c] |
+%93
+	b4 r8 d' |
+	[g, b c d~] |
+% ???
+% What have i misunderstood? I want the note_head not to collide with
+% i hotehead i vOne
+	\property Voice.hshift = -1
+	d 
+	\property Voice.hshift = 0
+	c4 b8 |
+}
+vThree = \type Voice = voiceThree \notes\relative c{
+	\stemdown
+	c4 r8 c |
+	d4 r |
+	r8 [es f g] |
+	[c, c' bes! a] |
+%5
+	g4 r8 g |
+	a4 r |
+	r8 [bes, c d] |
+	[g, d'] g4~ |
+%9
+	[g8 a16 g][fis e d c] |
+	[bes8 d' a, c'] |
+	[g, bes' f,! as'!] |
+	[e, g' c,, e']
+%13
+	[f, as' es,! g'] |
+	[d, f' bes,, d'] |
+	[es, es' f g] |
+	as r8 r4 |
+%17
+	r8 [d, es f] |
+	g r8 r4 |
+	r8 g c4~ |
+	[c8 d16 c][b a g f] |
+%21
+	[es8 g' d, f'] |
+	[c, es'16 d][c8 es] |
+	[a, c f, a] |
+	[bes, d'16 c][bes8 d] |
+%25
+	[g, bes es, g] |
+	[a, c'16 bes][a8 c] |
+	[fis, a d, fis] |
+	g,8 r bes r |
+%29
+	a r c r |
+	r [bes c d] |
+	g, r bes r |
+	r4 c8 r |
+%33
+	f r as, r |
+	r4 bes8 r |
+	r16 [f'16 es d][c bes as g] |
+	[f es' d c][bes as g f] |
+%37
+	[es d' c bes][as g f es] |
+	[d c' b a][g f es d] |
+	c8 c'4 b8 |
+	c4 r16 [c d es] |
+%41
+	f8 r r4 |
+	bes,4 r16 [bes c d] |
+	es8 r r4 |
+	r8 [as, bes c] |
+%45
+	[f, c'] f4~ |
+	[f16 es d f][es d c bes] |
+	[as8 g] as4^\mordent |
+	g2
+%49
+	g'4 r8 f |
+	es4 d |
+	c8 r d r |
+	es4 r8 e |
+%53
+	f4 [bes8 c] |
+	f8 r g r |
+	[as f,g as] |
+	bes r r4 |
+%57
+	r8 [es, f g] |
+	as r r4 |
+	r8 [d, es f] |
+	[g d] g,4~ |
+%61
+	[g8 f16 g][a b c d] |
+	[es8 c, f' d,] |
+	[g' es, as' f,] |
+	[g'16 g, g' as][g f es d] |
+%65
+	[c g' c d][c bes a g] |
+	[f f, f' g][f es d c] |
+	[bes f' bes c][bes as! g f] |
+	[es es, es' f][es d c bes] |
+%69
+	[a g a bes][c d es c] |
+	[d c d e][fis g a fis] |
+	[g8 es c d] |
+	g, r es' r |
+%73
+	[bes16 g' fis g][c, a' fis g] |
+	[d bes' fis g][es c' fis, g] |
+	[fis, es' d c][bes a g fis] |
+	[g f! es d][c8 d] |
+%77
+	[g16 fis g a][b c d es] |
+	[f es d es][f g a b] |
+	c8 r r c |
+	e, r r c' |
+%81
+	[f, as' es, g'] |
+	[d, f' bes,, d'] |
+	[es, g' d, f'] |
+	[c, es' as,, c'] |
+%85
+	[d,8 f' c, es'] |
+	[b, d' g,, b'] |
+	[c, g'] c4~ |
+	[c8 d16 c][b a g f] |
+%89
+	[es d c d][es f g es] |
+	[as g f g] as4~ |
+	[as16 as g f][es d c bes!] |
+	[as g' f es][d c b a] |
+%93
+	[g es' d c][b a g f] |
+	[es as g f][es d es f] |
+	[g c es fis][g8 g,] |
+	<c2 c,>
+}
+
+vOneSwitch = \type Voice = voiceOne \notes{
+	s2*4
+%5
+	\stemup	s2*17
+%22
+	\stemdown s16*1
+	\stemboth s16*7
+%23
+	s2*12 
+%35
+	s4 \stemup s4 
+	s2*3
+%39
+	\stemboth s2*2
+%41
+	\stemup s2*8
+%49
+	\stemboth s2*3
+%52
+	\stemup s2*8
+%60
+	\stemboth s2
+%61
+	\stemup s2*35
+%96
+	\stemboth
+}
+
+vTwoSwitch = \type Voice = voiceTwo \notes{
+	\stemup	s2*4 
+%5
+	\stemdown \translator Staff = treble s2*17
+%22
+	\stemup
+	s2*6
+%28
+	\translator Staff = bass s2*7
+%35
+	s4 \translator Staff = treble \stemdown s4
+	s2*3
+%39	
+	\translator Staff = bass \stemup s2*2
+%41
+	s4 \translator Staff = treble \stemdown s4
+%42
+	s8 \translator Staff = bass \stemup s8*3 
+%43
+	s4 \translator Staff = treble \stemdown s4
+%44
+	s8 \translator Staff = bass \stemup s8*3
+%45
+	\translator Staff = treble \stemdown s2*4
+%49
+	\stemup \translator Staff = bass s2*3
+%52
+	s8*1 \stemdown \translator Staff = treble \stemdown s8*3
+	s2*7
+%60
+	\stemup \translator Staff = bass s2
+%61
+	\translator Staff = treble \stemdown s2*35
+}
+
+vThreeSwitch = \type Voice = voiceThree \notes{
+	\stemdown s2*6
+%7
+	\stemboth s2*21
+%28
+	\stemdown s2*7
+%35
+	s4 \stemboth s4
+%36
+	s2*3
+%39
+	\stemdown s2*7
+%46
+	\stemboth s2*3
+%49
+	\stemdown s2*3
+%52
+	s4 \stemboth s4
+	s2
+%54
+	s2*2 %HACK evt endre her, sammenlikne med Henle	
+%56
+	s2*4
+%60
+	\stemdown 
+}
+
+\score{
+	\type GrandStaff<
+		\type Staff = treble <
+			\global
+			\vOneSwitch
+			\vOne
+		>
+		\type Staff = bass <			
+			\clef bass;
+			\global
+			\vTwoSwitch
+			\vTwo
+			\vThreeSwitch
+			\vThree
+		>
+	>
+	\paper{
+	}
+	\midi{\tempo=60;}
+}
diff -urN ../lilypond-1.0.16/scripts/GNUmakefile ./scripts/GNUmakefile
--- ../lilypond-1.0.16/scripts/GNUmakefile	Tue Sep 15 18:22:43 1998
+++ ./scripts/GNUmakefile	Mon Oct 19 12:57:15 1998
@@ -1,7 +1,7 @@
 # bin/Makefile
 
 depth = ..
-SEXECUTABLES=convert-mudela mudela-book ly2dvi ly2dvi32
+SEXECUTABLES=convert-mudela mudela-book ly2dvi 
 STEPMAKE_TEMPLATES=script
 
 
diff -urN ../lilypond-1.0.16/scripts/convert-mudela.py ./scripts/convert-mudela.py
--- ../lilypond-1.0.16/scripts/convert-mudela.py	Mon Oct 12 13:10:55 1998
+++ ./scripts/convert-mudela.py	Mon Oct 19 11:09:06 1998
@@ -22,11 +22,11 @@
 import __main__
 import getopt
 from string import *
-import regex
-import regsub
+import re
+
 import time
-mudela_version_re_str ='\\\\version *\"\(.*\)\"'
-mudela_version_re = regex.compile(mudela_version_re_str)
+mudela_version_re_str = '\\\\version *\"(.*)\"'
+mudela_version_re = re.compile(mudela_version_re_str)
 
 def program_id ():
 	return '%s version %s' %(program_name,  version);
@@ -65,8 +65,9 @@
 
 def guess_mudela_version(filename):
 	s = gulp_file (filename)
-	if mudela_version_re.search(s) <> -1:
-		return mudela_version_re.group(1)
+	m = mudela_version_re.search (s)
+	if m:
+		return m.group(1)
 	else:
 		return ''
 
@@ -97,7 +98,7 @@
 	def conv (lines):
 		found =0
 		for x in lines:
-			if regex.search ('\\\\octave', x) <> -1:
+			if re.search ('\\\\octave', x):
 				found = 1
 				break
 		if found:
@@ -114,9 +115,9 @@
 	def conv (lines):
 		newlines = []
 		for x in lines:
-			x = regsub.gsub ('\\\\textstyle\\([^;]+\\);',
+			x = re.sub ('\\\\textstyle([^;]+);',
 					 '\\\\property Lyrics . textstyle = \\1', x)
-			x = regsub.gsub ('\\\\key\\([^;]+\\);', '\\\\accidentals \\1;', x)
+			x = re.sub ('\\\\key([^;]+);', '\\\\accidentals \\1;', x)
 			newlines.append (x)
 		return newlines
 		
@@ -129,9 +130,9 @@
 	def conv (lines):
 		newlines = []
 		for x in lines:
-			x = regsub.gsub ('\\\\musical_pitch',
+			x = re.sub ('\\\\musical_pitch',
 					 '\\\\musicalpitch',x)
-			x = regsub.gsub ('\\\\meter',
+			x = re.sub ('\\\\meter',
 					 '\\\\time',x)
 			newlines.append (x)
 		return newlines
@@ -153,11 +154,11 @@
 	def conv (lines):
 		newlines = []
 		for x in lines:
-			x = regsub.gsub ('\\\\accidentals',
-					 '\\\\keysignature',x)
-			x = regsub.gsub ('specialaccidentals *= *1',
+			x = re.sub ('\\\\accidentals',
+				    '\\\\keysignature',x)
+			x = re.sub ('specialaccidentals *= *1',
 					 'keyoctaviation = 0',x)
-			x = regsub.gsub ('specialaccidentals *= *0',
+			x = re.sub ('specialaccidentals *= *0',
 					 'keyoctaviation = 1',x)
 			newlines.append (x)
 		return newlines
@@ -171,7 +172,7 @@
 	def conv(lines):
 		found = 0
 		for x in lines:
-			if regex.search ('\\\\header', x) <> -1:
+			if re.search ('\\\\header', x):
 				found = 1
 				break
 		if found:
@@ -184,7 +185,7 @@
 	def conv(lines):
 		newlines =[]
 		for x in lines:
-			x =  regsub.gsub ('\\\\melodic', '\\\\notes',x)
+			x =  re.sub ('\\\\melodic', '\\\\notes',x)
 			newlines.append (x)
 		return newlines
 	
@@ -194,8 +195,8 @@
 	def conv(lines):
 		newlines =[]
 		for x in lines:
-			x =  regsub.gsub ('default_paper *=', '',x)
-			x =  regsub.gsub ('default_midi *=', '',x)			
+			x =  re.sub ('default_paper *=', '',x)
+			x =  re.sub ('default_midi *=', '',x)			
 			newlines.append (x)
 		return newlines
 	
@@ -205,8 +206,8 @@
 	def conv(lines):
 		newlines =[]
 		for x in lines:
-			x =  regsub.gsub ('ChoireStaff', 'ChoirStaff',x)
-			x =  regsub.gsub ('\\output', 'output = ',x)
+			x =  re.sub ('ChoireStaff', 'ChoirStaff',x)
+			x =  re.sub ('\\output', 'output = ',x)
 			newlines.append (x)
 		return newlines
 	
@@ -215,9 +216,9 @@
 if 1:
 	def conv(lines):
 		newlines =[]
-		found = 0
+		found = None
 		for x in lines:
-			found = regex.search ('[a-zA-Z]+ = *\\translator',x) <> -1
+			found = re.search ('[a-zA-Z]+ = *\\translator',x)
 			newlines.append (x)
 			if found: break
 		if found:
@@ -232,7 +233,7 @@
 	def conv(lines):
 		newlines =[]
 		for x in lines:
-			x =  regsub.gsub ('\\\\lyric', '\\\\lyrics',x)
+			x =  re.sub ('\\\\lyric', '\\\\lyrics',x)
 			newlines.append (x)
 		return newlines
 	
@@ -270,7 +271,7 @@
 
 	for x in lines:
 		if last_conversion:
-			x = regsub.sub (mudela_version_re_str, '\\version \"%s\"' % tup_to_str (last_conversion), x)
+			x = re.sub (mudela_version_re_str, '\\\\version \"%s\"' % tup_to_str (last_conversion), x)
 		outfile.write(x)
 
 class UnknownVersion:
@@ -322,6 +323,7 @@
 		os.rename (infile_name + '.NEW', infile_name)
 
 	sys.stderr.write ('\n')
+	sys.stderr.flush ()
 
 edit = 0
 to_version = ()
diff -urN ../lilypond-1.0.16/scripts/ly2dvi-old.sh ./scripts/ly2dvi-old.sh
--- ../lilypond-1.0.16/scripts/ly2dvi-old.sh	Thu Jan  1 00:00:00 1970
+++ ./scripts/ly2dvi-old.sh	Mon Oct 19 11:09:06 1998
@@ -0,0 +1,1005 @@
+#!/bin/sh
+#
+# Script to make a LaTeX file for Lilypond
+#
+# Written by Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>
+#  Sat Nov 22 22:26:43 CET 1997
+#
+# $Id: ly2dvi.sh,v 1.16 1998/05/08 21:18:34 janaf Exp $
+#
+#  Original LaTeX file made by Mats Bengtsson, 17/8 1997
+#
+
+VERSION="0.12.jcn1"
+NAME=ly2dvi.sh
+IDENTIFICATION="$NAME $VERSION" 
+NOW=`date`
+echo "$IDENTIFICATION" 1>&2
+
+# TODO:
+#  prevent orphaned "Lily is here" strings
+
+# NEWS
+
+# 0.12.jcn1
+#  - mudelaDefs really fixed (sorry, PC)
+
+# 0.12
+#  - -S/--sourcedir switch
+
+#
+#0.11.jcn3
+# - mudelaDefs fixes, (thanks PC)
+#0.11.jcn2
+# - pass -I, --include to Lily
+# - bf: split $LILYINCLUDE and try all dirs
+# - bf: geometry left/top
+#
+#0.11.pc
+# - fix backslash gobbling, reduce number of separate processes used
+# - require readable rc files, allow rc file in /usr/local/share/lilypond/lilyrc
+# - use latex path, not tex path
+# - Don't override if kpsepath returns non-NULL
+# - Don't clobber x.tex if it wasn't created by ly2dvi
+#
+#
+#0.11.jcn1
+# - find .fly files too
+#
+#0.11.hwn1
+# - height vs heigth
+# - robustification: give \nonstopmode as LaTeX arg; no hanging if no TeX file.
+# - robustification: notice failed cp.
+
+#0.11
+#	- more papersizes (thanks Han-Wen) - don't expect LaTeX to accept all...
+#	- -W,--Width=       : set paper width  (points)
+#       - -H,--Height=      : set paper height (points)
+#	- -H and -W is used only when an unknown papersize is to be specified,
+#	  and has to be combined with a papersize option known to LaTeX
+#NB!	- -F,--headers=     : name of additional LaTeX headers input file.
+#NB!      Changed from -H to -F
+#	- -d,--dependencies : passed to lilypond
+
+
+#0.10.jcn1
+#	- HEIGHT -> HEIGHT
+#	- vertical margins (for a4), same on both sides
+#	- textheight from lilypond output file (mudelapapertextheight)
+#	- piece titling
+#	- mudelapiece, mudelaopus
+#
+#0.10
+#	- -K,--keeplilypond : Keep lilypond output files (default delete)
+#	- -k,--keeply2dvi   : Keep ly2dvi   output files (default delete)
+#	- -L,--landscape    : Set landscape orientation
+#	- -N,--nonumber     : Turn off page numbering (\pagestyle{empty})
+#	- Could not reinsert "\usepackage[T1]{fontenc}" because
+#	  "los-toros" won't work with it
+#	- Ekstra LaTeX headers from input file
+#0.9.hwn1
+#       - option to remove output of lily
+# 0.9
+#	- Trap Lilypond abort
+#	- Replaced "\usepackage[T1]{fontenc}" with
+#	  \usepackage[latin1]{inputenc} (takk, Mats)
+#	- Removed "()" around "\LilyIdString" (Janne didn't want it)
+# 0.8	- Trap Lilypond segmentation fault
+#	- Function for cleanup
+#	- Trap line
+#	- More human-readable variables
+#	- Some logics concerning rc-files
+# 0.7
+#	- Improved Lilypond error checking
+#	- Output orientation (landscape...). Overrides mudela file
+#	  variable orientation="landscape";
+#	- Paper width and height put into variables (only A4!)
+#	- Adjusted top margin to default.....
+#
+#TODO
+#	- Include more papersizes.
+#	- Manual page.......
+# 0.6.jaf2
+# 	- LILYINCLUDE update
+#
+# 0.6.hwn1
+# 	- handle LILYINCLUDE
+#       - --output
+#
+# 0.6
+#	- Source rc-files, if present. Files are:
+#	  /usr/local/share/lilyrc /etc/lilyrc $HOME/.lilyrc ./.lilyrc
+#	- tee output from Lilypond
+#	- Handles margins for A4 paper (equal on both sides)
+#	- new option -s (--separate) for one LaTeX run per file,
+#	  else all files are run together
+#
+# 0.5
+#	- More useful ("two-level") debug.
+#	- The Q&D hack to find file names and not handling \include
+#	  is replaced by grabbing output file names from Lilypond.
+#	= Detects multiple output files - adds them when running
+#	  LaTeX.
+#	- Works with multiple input files - no matter if they are
+#	  (a mix of) input to or output from Lilypond.
+#
+#TODO
+#	- Still no margins handling.
+#	- We have to discuss how to handle multiple output files
+#	  from Lilypond - 'ly2dvi standchen' gives a rather odd
+#	  result....
+
+# 0.4.1
+#	- Always exit after printing help info
+# 0.4
+#	- Changes to ensure for more strict grep'ing of parameters
+#	  Thanks to from G.B.Stott@bolton.ac.uk
+#	- More efficient use of sed -e 's///' -e 's///'
+#	  Thanks to Johan Vromans <jvromans@squirrel.nl> and GBS
+#	- Ask tex for location of titledefs.tex (Thanks to JV)
+#	- Accept only exact match of "\def\mudelacomposer{"
+#	  (or whatever mudela* defined in titledefs.tex)
+#	- Even more efficient use of sed (Thanks to JV)
+#	- Default file name for single output file implemented.
+#	- Moved help into function - finally included from 0.1.jcn1
+#
+#TODO
+#	- Still doesn't handle \include
+#	- The Q&D for finding output file name from the sequence of
+#	  \paper \output \midi \output really needs to be looked at.
+#	  I have improved it a lot, but it's only capable of finding
+#	  one (the last) file name.
+#	  Well, I have to rewrite this entirely to handle \include,
+#	  then I can fix it.
+#	- Still no margins handling.
+#
+#WARNING
+#	- Some lines of output from lilypond do NOT start
+#	  at first character position, therefore I have removed "^"
+#	  in sed'ing and grep'ing.
+
+# 0.3.hwn1
+# 	- add "Creator: " line to output
+#
+# 0.3
+#	- multiple input files to make score from several files
+#	  (extra files assumed to be Lilypond output)
+#	- cp dvi-file instead of mv, to allow for xdvi reload
+#	- check for illegal long options
+#	- put in pt in text width, if not given
+#	- put in \nonstopmode in LaTeX file
+#	- restored LaTeX exit value check
+ 
+# 0.2.1
+#	- temporarily omit LaTeX exit value check
+#	- remove ALL temporary files
+
+# 0.2
+#	- fix for solaris          - included from 0.1.jcn1
+#	- long option hack         - included from 0.1.jcn1 - modified
+#	- moved help into function - NOT included from 0.1.jcn1 yet
+#	- various improvements     - included from 0.1.jcn1
+#	- find mudela definitions from titledefs.tex
+#	- find papersize from lilypond output file (mudelapapersize),
+#	  overridden by option '-p size' or '--papersize=size'
+#	- option -l lang or --language=lang overrides
+#	  lilypond output file definition (mudelalanguage)
+#	- textwidth from lilypond output file (mudelapaperlinewidth)
+
+# 0.1.jcn1
+#	- fix for solaris
+#	- long option hack
+#	- moved help into function
+
+#
+# Clean up
+#
+cleanup() {
+  if [ "$KEEP_LY2DVI_OUTPUT" != "Y" ]
+  then
+    [ -n "$LatF" -a -f "$LatF" ]       && rm -f $LatF
+    [ -n "$LOGFILE" -a -f "$LOGFILE" ] && rm -f $LOGFILE
+    [ -n "$FN" ]                       && rm -f $FN.*
+    for F in *$$* $TMP/*$$*
+    do
+      rm -f $F
+    done
+  fi
+  if [ "$KEEP_LILY_OUTPUT" != "Y" ]
+  then
+    for F in $LILY_OUTPUT_FILES
+    do
+      [ -f $F ] && rm -f $F
+    done
+  fi
+}
+
+#
+# print usage
+#
+help() {
+  cat << EOF
+Generate dvi file from mudela or lilypond output
+Usage: $0 [OPTION]... [FILE]...
+
+Options:
+  -D,--debug           increase verbosity
+  -F,--headers=        name of additional LaTeX headers file
+  -H,--Height=         set paper height (points) (see manual page)
+  -I,--include=DIR     add DIR to search path of LilyPond
+  -K,--keeplilypond    keep lilypond output files
+  -L,--landscape       set landscape orientation
+  -N,--nonumber        switch off page numbering
+  -O,--orientation=    set orientation (obsolete - use -L instead) 
+  -W,--Width=          set paper width (points) (see manual page)
+  -d,--dependencies    tell lilypond make a dependencies file
+  -h,--help            this help text
+  -k,--keeply2dvi      keep ly2dvi output files
+  -l,--language=       give LaTeX language (babel)
+  -o,--output=         set output directory
+  -p,--papersize=      give LaTeX papersize (eg. a4)
+  -s,--separate        run all files separately through LaTeX
+  -S,--sourcedir       set sourcedir 
+
+  files may be (a mix of) input to or output from lilypond(1)
+EOF
+}
+
+
+#
+# SVr4 echo swallows backslashes, and there's no way to turn it off.
+# Therefore use Echo whenever backslashes may be important.
+# printf is in the posix.2 standard -- which means it's in 
+# all modern shells.
+#
+Echo() {
+	printf "%s\n" "$@"
+}
+
+#
+setPaperZize() {
+case "$PAPERSIZE" in
+  a0*)
+    PWIDTH=2389
+    PHEIGHT=3381
+    PAPERSIZE=a0paper
+    ;;
+  a1|a1p*)
+    PWIDTH=1690
+    PHEIGHT=2389
+    PAPERSIZE=a1paper
+    ;;
+  a2*)
+    PWIDTH=1194
+    PHEIGHT=1690
+    PAPERSIZE=a2paper
+    ;;
+  a3*)
+    PWIDTH=845
+    PHEIGHT=1194
+    PAPERSIZE=a3paper
+    ;;
+  a4*)
+    PWIDTH=597
+    PHEIGHT=845
+    PAPERSIZE=a4paper
+    ;;
+  a5*)
+    PWIDTH=423
+    PHEIGHT=597
+    PAPERSIZE=a5paper
+    ;;
+  a6*)
+    PWIDTH=298
+    PHEIGHT=423
+    PAPERSIZE=a6paper
+    ;;
+  a7*)
+    PWIDTH=211
+    PHEIGHT=298
+    PAPERSIZE=a7paper
+    ;;
+  a8*)
+    PWIDTH=305
+    PHEIGHT=211
+    PAPERSIZE=a8paper
+    ;;
+  a9*)
+    PWIDTH=105
+    PHEIGHT=305
+    PAPERSIZE=a9paper
+    ;;
+  a10*)
+    PWIDTH=74
+    PHEIGHT=105
+    PAPERSIZE=a10paper
+    ;;
+  b0*)
+    PWIDTH=2847
+    PHEIGHT=4023
+    PAPERSIZE=b0paper
+    ;;
+  b1*)
+    PWIDTH=2012
+    PHEIGHT=2847
+    PAPERSIZE=b1paper
+    ;;
+  b2*)
+    PWIDTH=1423
+    PHEIGHT=2012
+    PAPERSIZE=b2paper
+    ;;
+  b3*)
+    PWIDTH=1006
+    PHEIGHT=1423
+    PAPERSIZE=b3paper
+    ;;
+  b4*)
+    PWIDTH=712
+    PHEIGHT=1006
+    PAPERSIZE=b4paper
+    ;;
+  b5*)
+    PWIDTH=503
+    PHEIGHT=712
+    PAPERSIZE=b5paper
+    ;;
+  archA)
+    PWIDTH=650
+    PHEIGHT=867
+    ;;
+  archB)
+    PWIDTH=867
+    PHEIGHT=1301
+    ;;
+  archC)
+    PWIDTH=1301
+    PHEIGHT=1734
+    ;;
+  archD)
+    PWIDTH=1734
+    PHEIGHT=2602
+    ;;
+  archE)
+    PWIDTH=2602
+    PHEIGHT=3469
+    ;;
+  flsa|flse)
+    PWIDTH=614
+    PHEIGHT=940
+    ;;
+  halfletter)
+    PWIDTH=397
+    PHEIGHT=614
+    ;;
+  ledger)
+    PWIDTH=1229
+    PHEIGHT=795
+    ;;
+  legal)
+    PWIDTH=614
+    PHEIGHT=1012
+    ;;
+  letter)
+    PWIDTH=614
+    PHEIGHT=795
+    ;;
+  note)
+    PWIDTH=542
+    PHEIGHT=723
+    ;;
+  *)
+    echo ""
+    echo $0": unknown papersize -- "$PAPERSIZE
+    echo ""
+    ;;
+esac
+}
+
+doRcFiles()
+{
+#
+# RC-files ?
+#
+for D in /usr/local/share/ /usr/local/share/lilypond/ /etc/ $HOME/. ./.
+do
+  RCfile=$D"lilyrc"
+  [ -r $RCfile ] && . $RCfile
+done
+fORI=$ORIENTATION
+fLNG=$LANGUAGE
+fPSZ=$PAPERSIZE
+fLHF=$LATEXHF
+unset ORIENTATION LANGUAGE PAPERSIZE LATEXHF
+}
+
+
+
+#
+# Trap function (cleanup)
+#
+
+
+
+trap cleanup 0 9 15
+
+
+
+#
+# Various defaults
+#
+[ -z "$TMP" ] && TMP=/tmp
+if [ ! -d $TMP ]
+then
+  $debug_echo $IDENTIFICATION": temporary directory "$TMP" not found, set to /tmp"
+  TMP=/tmp
+fi
+LOGFILE=$TMP/lilylog.$$	                # Logfile for lilypond
+PAPERSIZE=a4                            # Default papersize name
+PWIDTH=597                              # Default paperwidth
+PHEIGHT=845                             # Default paperheight
+PNUM="%"                                # Page numbering on
+LILYOPTS=""                             # Options to lilypond
+SOURCEDIR=""
+LILYPOND_EXECUTABLE=lilypond
+doRcFiles
+
+
+
+# Keywords defined in titledefs.tex
+#
+TF="`kpsewhich -n latex tex titledefs.tex`"
+MU_DEF=""
+if [ -r "${TF:=/usr/local/share/texmf/tex/lilypond/titledefs.tex}" ]
+then
+  MU_DEF=`sed -n -e 's/.*newcommand\*{.\(mudela[^}]*\)}.*$/\1/p' "$TF"`
+fi
+
+: "${MU_DEF:=mudelatitle mudelasubtitle mudelacomposer \
+          mudelameter mudelaopus mudelaarranger mudelapiece \
+	  mudelapoet mudelainstrument \
+	  }"
+
+#
+# debugging
+#
+debug_echo=:
+#
+# All files in one LaTeX run
+#
+SEPFILE=N
+#
+# Find command line options and switches
+#
+# "x:" x takes argument
+#
+switches="DF:H:I:KLNO:W:dhkl:o:p:S:s\?"
+options=""
+#
+# ugh, "\-" is a hack to support long options
+# while getopts \-:$options$switches O
+# must be in double quotes for bash-2.0
+while getopts "\-:$options$switches" O
+do
+  $debug_echo "O: \`$O'"
+  $debug_echo "arg: \`$OPTARG'"
+  case $O in
+    D  )
+      [ $debug_echo = echo ] && set -x
+      debug_echo=echo
+      ;;
+    F  )
+      LATEXHF=$OPTARG
+      ;;
+    H  )
+      PHEIGHT=$OPTARG
+      ;;
+    I  )
+      LILYOPTS="$LILYOPTS -I $OPTARG"
+      LILYINCLUDE="$LILYINCLUDE:$OPTARG"
+      ;;
+    K  )
+      KEEP_LILY_OUTPUT=Y
+      ;;
+    L  )
+      ORIENTATION=landscape
+      ;;
+    O  )
+      ORIENTATION=$OPTARG
+      ;;
+    N  )
+      PNUM="\pagestyle{empty}"
+      ;;
+    W  )
+      PWIDTH=$OPTARG
+      ;;
+    d  )
+      LILYOPTS=$LILYOPTS" -d"
+      ;;
+    h  )
+      help;
+      exit 0
+      ;;
+    k  )
+      KEEP_LY2DVI_OUTPUT=Y
+      ;;
+    l  )
+      LANGUAGE=$OPTARG
+      ;;
+    o  )
+      OUTPUTDIR=$OPTARG
+      ;;
+    p  )
+      PAPERSIZE=$OPTARG
+      ;;
+    s  )
+      SEPFILE=Y
+      ;;
+    S  )
+      SOURCEDIR=$OPTARG
+      ;;
+    \? )
+      help;
+      exit -1
+      ;;
+    # a long option!
+    -)
+      $debug_echo "long option: \`$OPTARG'"
+      case "$OPTARG" in
+        He*|-He*)
+          PHEIGHT"`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"=
+          ;;
+        W*|-W*)
+          PWIDTH="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+          ;;
+        dep*|-dep*)
+          LILYOPTS="$LILYOPTS -d"
+          ;;
+        d*|-d*)
+          [ $debug_echo = echo ] && set -x
+          debug_echo=echo
+          ;;
+        hea*|-hea*)
+          LATEXHF="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+          ;;
+        h*|-h*)
+          help;
+	  exit 0
+          ;;
+        i*|-i*)
+          dir="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+	  LILYOPTS="$LILYOPTS --include=$dir"
+	  LILYINCLUDE="$LILYINCLUDE:$dir"
+	  ;;
+        keepli*|-keepli*)
+          KEEP_LILY_OUTPUT=Y
+          ;;
+        k*|-k*)
+          KEEP_LY2DVI_OUTPUT=Y
+          ;;
+        land*|-land*)
+          ORIENTATION=landscape
+          ;;
+        lang*|-lang*)
+          LANGUAGE="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+          ;;
+	n*|-n*)
+	  PNUM="\pagestyle{empty}"
+	  ;;
+	or*|-or*)
+	  ORIENTATION="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+	  ;;
+	ou*|-ou*)
+	  OUTPUTDIR="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+	  ;;
+        p*|-p*)
+          PAPERSIZE="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
+          ;;
+        separa*|-sep*)
+      	  SEPFILE=Y
+          ;;
+	sourcedir*|-sourcedir*)
+	  SOURCEDIR=$OPTARG
+	  ;;
+        *|-*)
+          echo "$0: illegal option -- \"$OPTARG\""
+          help;
+          exit -1
+          ;;
+      esac
+  esac
+done
+shift `expr $OPTIND - 1`
+
+if [ "$SOURCEDIR" != "" ]; then
+# apparently MakeTeXTFM can't handle relative dirs
+	SOURCEDIR=`cd $SOURCEDIR; pwd`
+	LILYINCLUDE="$SOURCEDIR/init:$SOURCEDIR/mf/out:$LILYINCLUDE"
+	TEXINPUTS="$SOURCEDIR/tex:$TEXINPUTS:"
+	MFINPUTS="$SOURCEDIR/mf:$MFINPUTS:"
+	LILYPOND_EXECUTABLE="$SOURCEDIR/lily/out/lilypond"
+	export MFINPUTS LILYPOND_EXECUTABLE TEXINPUTS SOURCEDIR 
+fi
+
+#
+# Input file name
+#
+if [ "$1" = "" ]
+then
+  help
+  $debug_echo "$IDENTIFICATION: No input file name given"
+  exit 1
+fi
+# regexp_quote -- quote a string as a regular expression for egrep or sed
+regexp_quote(){
+	Echo "$@" | sed 's/\([]\[\.*?+^$]\)/\\\1/g'
+}
+#
+#
+mudelaDefs(){
+# Include \def\mudela-definitions
+# The aim here is to pick up the definition for the 
+# current file, then any other file.
+#
+mudelatmp=$TMP/mudelaDefs$$
+# Use `cat' to prevent filenames being prepended
+# 
+cat "$File" $OF | fgrep "$MU_DEF" > $mudelatmp
+for L in $MU_DEF
+do
+    # This converts \def\mudelatitle{fred}
+    # to \mudelatitle{fred} or to
+    # \def\mudelatitle{fred}
+    # and stops after the first one found.
+    sed -n '/\\def\\'"$L"'{\([^}]*\)}.*$/{
+	s//'"`regexp_quote \"$1\"`"'\\'"$L"'{\1}%/p
+	q
+    }'  $mudelatmp  >> $LatF
+done
+rm -f $mudelatmp
+}
+#
+#
+startFile(){
+#
+# LaTeX file name
+#
+BN=`basename "$File" .tex`
+FN="$BN.$$"
+if [ "$KEEP_LY2DVI_OUTPUT" != "Y" ]
+then
+  LatF="$TMP/$FN.tex"
+else
+  LatF="$FN.tex"
+fi
+#
+# Find:
+#   paper size        (PAPERSIZE, overridden by command line option -p)
+#   paper orientation (ORIENTATION, overridden by option -o)
+#   language          (LANGUAGE, overridden by option -l)
+#   textwidth
+#
+eval `sed -n \\
+  -e 's/\\\\def\\\\mudelalanguage{\([^}]*\).*$/fLNG=\1;/p' \\
+  -e 's/\\\\def\\\\mudelalatexheaders{\([^}]*\).*$/fLHF=\1;/p' \\
+  -e 's/\\\\def\\\\mudelaorientation{\([^}]*\).*$/fORI=\1;/p' \\
+  -e 's/\\\\def\\\\mudelapaperlinewidth{\([^}]*\).*$/TWN=\1;/p' \\
+  -e 's/\\\\def\\\\mudelapapertextheight{\([^}]*\).*$/THN=\1;/p' \\
+  -e 's/\\\\def\\\\mudelapapersize{\([^}]*\).*$/fPSZ=\1;/p' \\
+    "$File"`
+#
+if [ -z "$LATEXHF" ]
+then
+  LATEXHF="$fLHF"
+fi
+LLHF="%"
+if [ -n "$LATEXHF" ]
+then
+  [ -f 	"$LATEXHF" ] && LLHF="\input{$LATEXHF}"
+fi
+#
+if [ -z "$PAPERSIZE" ]
+then
+  PAPERSIZE="$fPSZ"
+fi
+if [ -n "$PAPERSIZE" ]
+then
+  setPaperZize
+  PAPEROPT="$PAPERSIZE"
+fi
+#
+if [ -z "$ORIENTATION" ]
+then
+  ORIENTATION="$fORI"
+fi
+if [ -n "$ORIENTATION" ]
+then
+  if [ -z "$PAPEROPT" ]
+  then
+    PAPEROPT="$ORIENTATION"
+  else
+    PAPEROPT="$PAPEROPT,$ORIENTATION"
+  fi
+fi
+#
+if [ -n "$PAPEROPT" ]
+then
+  PAPER="[$PAPEROPT]"
+fi
+#
+if [ -z "$LANGUAGE" ]
+then
+  LANGUAGE="$fLNG"
+fi
+if [ -n "$LANGUAGE" ]
+then
+  LLNG="\usepackage[$LANGUAGE]{babel}"
+else
+  LLNG="%"
+fi
+
+#
+# Find textwidth
+#
+if [ -n "$TWN" ]
+then
+  TW="$TWN"
+  case "$TW" in
+    *mm)
+      ;;
+    *cm)
+      ;;
+    *pt)
+      ;;
+    *)
+      TW="${TW}pt"
+      ;;
+  esac
+  $debug_echo "Text width = $TW"
+fi
+TWp=`Echo $TW | sed -e 's/\..*$//'`
+PWp="$PWIDTH"
+#
+# Find textheight
+#
+if [ -n "$THN" ]
+then
+  TH=$THN
+  case $TH in
+    *mm)
+      ;;
+    *cm)
+      ;;
+    *pt)
+      ;;
+    *)
+      TH="${TH}pt"
+      ;;
+  esac
+  $debug_echo "Text height = $TH"
+fi
+THp="`echo $TH | sed -e 's/\..*$//'`"
+PHp="$PHEIGHT"
+if [ "$ORIENTATION" = "landscape" ]
+then
+  PWp="$PHEIGHT"
+  PHp="$PWIDTH"
+fi
+HMARG="`expr '(' $PWp - $TWp ')' / 2`"pt
+$debug_echo "Text left = $HMARG"
+VMARG="`expr '(' $PHp - $THp ')' / 2`"pt
+$debug_echo "Text top = $VMARG"
+#
+# Geometry: /var/lib/texmf/latex/geometry/geometry.dvi
+#
+#
+# Write LaTeX file
+#
+cat << EOF > $LatF
+% Creator: $IDENTIFICATION
+% Automatically generated from  $IF, $NOW
+
+\documentclass$PAPER{article}
+
+$LLNG
+\usepackage{geometry}
+\usepackage[latin1]{inputenc}
+%\usepackage[T1]{fontenc}
+$PNUM
+%\addtolength{\oddsidemargin}{-1cm}
+%\addtolength{\topmargin}{-1cm}
+%\setlength{\textwidth}{$TW}
+%\setlength{\textheight}{$TH}
+\geometry{width=$TW, left=$HMARG, height=$TH, top=$VMARG}
+\input lilyponddefs
+\input titledefs
+$LLHF
+\begin{document}
+EOF
+mudelaDefs
+cat << EOF >> $LatF
+\cmrtwenty% ugh
+\makelilytitle
+EOF
+}
+nextFile(){
+cat << EOF >> $LatF
+\def\theopus{}%
+\def\thepiece{}%
+\def\mudelaopus{}%
+\def\mudelapiece{}%
+EOF
+mudelaDefs "\\def"
+cat << EOF >> $LatF
+\def\theopus{\mudelaopus}% ugh
+\def\thepiece{\mudelapiece}%
+\makelilypiecetitle
+EOF
+}
+#
+# Conclusion
+#
+endFile(){
+cat << EOF >> $LatF
+\vfill\hfill{\LilyIdString}
+\end{document}
+EOF
+#
+# Run LaTeX
+#
+latex '\nonstopmode \input '$LatF || exit 5
+#
+# Rename dvi file
+#
+if [ -f $FN.dvi ]
+then
+    RESULT="$BN.dvi"
+    [ -n "$OUTPUTDIR" ] && RESULT="$OUTPUTDIR/$RESULT"
+    
+    cp "$FN.dvi" "$RESULT" || exit 5
+fi
+#
+# Output some info
+#
+cat << EOF
+
+$IDENTIFICATION: dvi file name is $RESULT
+
+EOF
+}
+
+# ugh. GF is side-effect.
+findInput() {
+# should check for LILYINCLUDE
+  OIFS="$IFS"
+  IFS=':'
+  x=`echo $LILYINCLUDE | sed "s!:! !g"`
+  IFS="$OIFS"
+  for lypath in . $x
+  do
+    if [ -f "$lypath/$1" ]
+    then
+      GF="$lypath/$1"
+      return
+    fi
+
+    if [ -f "$lypath/$1.ly" ]
+    then
+      GF="$lypath/$1.ly"
+      return
+    fi
+    if [ -f "$lypath/$1.fly" ]
+    then
+       GF="$lypath/$1.fly"
+       return
+    fi
+  done
+  $debug_echo "$IDENTIFICATION: Input file \"$GF\" not found"
+  echo "$NAME: Input file \"$GF\" not found"                       1>&2
+  exit 2
+}
+#
+# Loop through all files
+#
+
+LILY_OUTPUT_FILES=
+
+for GF 
+do
+    findInput $GF
+
+  #
+  # Check whether the file is input to or output from lilypond
+  #
+  L1=`head -1 $GF` 
+  OP=`echo $L1 | grep "^% Creator: GNU LilyPond"`
+  if [ -n "$OP" ]
+  then
+    #
+    # OK - it's the output from lilypond.
+    #
+    # Get lilypond source file name
+    #
+    OF=$GF
+    IFL=`grep mudelafilename $OF`
+    if [ "$IFL" != "" ]
+    then
+      IF=`echo $IFL | sed -e 's/.*{//' -e 's/}*.$//'`
+      #
+      # Check if source file exists
+      #
+      if [ ! -f $IF ]
+      then
+        $debug_echo $IDENTIFICATION": Mudela file not found."
+        TW=15.5cm
+        TH=25.0cm
+      fi
+    else
+      $debug_echo $IDENTIFICATION": Mudela file name not found."
+      TW=15.5cm
+      TH=25.0cm
+    fi
+  else
+    #
+    # I have to assume this is the lilypond input file
+    # Find output file name, if defined
+    #
+    IF=$GF
+    #
+    # Run lilypond
+    # Grab output file names
+    #
+    $debug_echo "lilypond "$LILYOPTS $IF
+
+    $LILYPOND_EXECUTABLE $LILYOPTS $IF 2>&1  | tee $LOGFILE
+    OF="`sed -n -e 's/TeX output to \([^\.]*\.tex\)\.\.\.$/\1/p' $LOGFILE`"
+    $debug_echo "==> $OF"
+    LILY_OUTPUT_FILES="$LILY_OUTPUT_FILES $OF"
+    STATUS=`egrep -i "error|segmentation|abort" $LOGFILE`
+    echo $STATUS
+    if [ ! -z "$STATUS" ]
+    then
+      exit 10
+    fi
+  fi
+  #
+  # "Spin through" all the files
+  #
+  for File in $OF
+  do
+    $debug_echo "--- "$File
+    #
+    # Check if output file is generated
+    #
+    if [ ! -f "$File" ]
+    then
+      $debug_echo "$IDENTIFICATION: hmm, I could not find the output file $File"
+      exit 4
+    fi
+    #
+    # Is this the first file?
+    #
+    if [ -z "$FFile" ]
+    then
+      FFile="$File"
+      startFile
+    else
+      nextFile
+    fi
+    cat << EOF >> $LatF
+\input{$File}
+EOF
+    if [ $SEPFILE = Y ]
+    then
+      FFile=""
+      endFile
+    fi
+  done
+done
+if [ $SEPFILE = N ]
+then
+  endFile
+fi
+#
+# OK - finished
+#
diff -urN ../lilypond-1.0.16/scripts/ly2dvi.py ./scripts/ly2dvi.py
--- ../lilypond-1.0.16/scripts/ly2dvi.py	Thu Jan  1 00:00:00 1970
+++ ./scripts/ly2dvi.py	Mon Oct 19 11:09:06 1998
@@ -0,0 +1,1117 @@
+#!@PYTHON@
+
+"""
+=======================================================================
+LilyPond to dvi converter
+
+Features include Title information, paper size specification, and image
+orientation.  
+
+Usage: ly2dvi.py [OPTION]... [FILE]...
+Input: LilyPond source or LilyPond generated TeX files
+Output: DVI file
+=======================================================================
+"""
+
+name = 'ly2dvi'
+version = '0.0.5'
+errorlog = ''
+
+import sys
+import os
+import getopt
+import re
+import string
+import time
+import glob
+
+
+class Input:
+    """
+    This class handles all ly2dvi.py input file methods
+
+    Public methods:
+    
+    __init__()  Constructor
+    open(file)  Open a .ly file or .tex file using lilyinclude path
+    close()     Close current file
+    type()      Determine file type .ly (input) or .tex (output)
+    setVars()   Set title definitions found in .tex (output) file
+    """
+
+    #
+    # Constructors
+    #
+
+    def __init__(this):
+       this.__fd = None 
+
+    #
+    # open
+    #
+    def open(this,file):
+        """
+        open file and set private class variable __fd.  The search
+        sequence is: current directory followed by the directories
+        found in include property list.  Each directory is searched
+        for file, file.ly, and file.fly.
+        
+        input:  file   filename
+        output: void
+        error:  ExitNotFound Exception
+        """
+
+        for i in [''] + Props.get('include')[0:]:
+            ifile = os.path.join(i,file)
+            for j in ['','.ly','.fly']:
+                jfile = ifile+j
+                try:
+                    this.__fd = open( jfile, 'r' )
+                    return
+                except:
+                    pass
+        sys.exit('ExitNotFound', file)
+
+
+    #
+    # close
+    #
+    def close(this):
+        """
+        close file object __fd
+        
+        input:  void
+        output: void
+        error:  None
+        """
+        this.__fd.close()
+
+
+    #
+    # type
+    #
+    def type(this):
+        """
+        Determine input file type.  LilyPond source is 'input' type
+        and LilyPond generated TeX file is 'output' type
+
+        input:  void
+        output: 'input' | 'output'
+        error:  None
+        """
+
+        firstline = this.__fd.readline()
+        this.__fd.seek(0)
+        if  re.match('% Creator: GNU LilyPond [0-9]+[.0-9]+',firstline ):
+            return 'output'
+        else:
+            return 'source'
+
+
+    #
+    # setVars
+    #
+    def setVars(this):	
+        """
+        Search for properties in the current input file and set the
+        appropriate values.  The supported properties names are in
+        local variable varTable along with the property list
+        titledefs.
+
+        input:  void
+        output: None
+        error:  None
+        """
+
+        varTable = [
+            #   regexp              set method
+            #   ------              ----------
+            ( 'language',        Props.setLanguage ),
+            ( 'latexheaders',    Props.setHeader ),
+            ( 'orientation',     Props.setOrientation ),
+            ( 'paperpapersize',  Props.setPaperZize ),
+            ( 'papertextheight', Props.setTextHeight ),
+            ( 'paperlinewidth',  Props.setLineWidth ),
+            ( 'filename',        Props.setFilename ),
+            ]
+
+        titles={}
+        for line in this.__fd.readlines():
+            m=re.match('\\\\def\\\\mudela([\w]+){(.*)}',line)
+            if m:
+                for var in varTable:
+                    if m.group(1) == var[0]:
+                        var[1](m.group(2),'file')
+                        break
+                for var in Props.get('titledefs'):
+                    if m.group(1) == var:
+                        titles[var]=m.group(2)
+                        break
+        Props.setTitles(titles,'file')
+        this.__fd.seek(0)
+
+
+
+class TeXOutput:
+    """
+    This class handles all ly2dvi.py output file methods
+
+    private methods:
+     __mudelaDefs(opt)  Send title info to output file
+
+    Public methods:
+    __init__()  Constructor
+    write(str)  Write a string to output file 
+    start(file) Start the latex file
+    next()      Process next output file
+    end()       Finish latex file and run latex 
+    """
+
+    #
+    # constructor
+    #
+    def __init__(this):
+       this.__fd = None 
+       this.__base = ''
+       this.__outfile = ''
+
+    #
+    # __medelaDefs
+    #
+    def __mudelaDefs(this,opt):
+        """
+        Write titles to output
+
+        input:  opt   Supports header and subheader output
+        output: None
+        error:  None
+        """
+
+        titles = Props.get('titles')
+        for key in titles.keys():
+            this.write('%s\\mudela%s{%s}%%\n' % (opt,key,titles[key]))
+
+    #
+    # write
+    #
+    def write(this,str):
+        """
+        Write str to current output file
+
+        input:  str  String to write
+        output: None
+        error:  None
+        """
+        
+        this.__fd.write(str)
+
+    #
+    # start
+    #
+    def start(this,file):
+        """
+        Start LaTeX file.  Calculates the horizontal and vertical
+        margin using pagewidth, pageheight, linewidth, and textheight.
+        Creates temporary output filename and opens it for write.
+        Sends the LaTeX header information to output.  Lastly sends
+        the title information to output.
+
+        input:  file  output file name 
+        output: None
+        error:  None
+        """
+
+        now=time.asctime(time.localtime(time.time()))
+        linewidth = Props.get('linewidth')
+        textheight = Props.get('textheight')
+
+        if Props.get('orientation') == 'landscape':
+            pagewidth = Props.get('pageheight')
+            pageheight = Props.get('pagewidth')
+        else:
+            pageheight = Props.get('pageheight')
+            pagewidth = Props.get('pagewidth')
+                             
+        horizontalMarginArg =  ( (pagewidth - linewidth)/2 )   
+        verticalMarginArg =  ( (pageheight - textheight)/2  )
+
+        top="""\
+%% Creator: %s
+%% Automatically generated from  %s, %s
+
+\\documentclass[%s]{article}
+
+%s 
+\\usepackage{geometry}
+\\usepackage[latin1]{inputenc} 
+%%\\usepackage[T1]{fontenc} 
+%s 
+%%\\addtolength{\\oddsidemargin}{-1cm} 
+%%\\addtolength{\\topmargin}{-1cm} 
+%%\\setlength{\\textwidth}{%s} 
+%%\\setlength{\\textheight}{%s} 
+\\geometry{width=%spt, left=%spt, height=%spt, top=%spt} 
+\\input lilyponddefs 
+\\input titledefs 
+%s 
+\\begin{document}
+""" % ( program_id(), Props.get('filename'), now, Props.get('papersize'),
+        Props.get('language'), Props.get('pagenumber'), linewidth, textheight,
+        linewidth, horizontalMarginArg, textheight, verticalMarginArg,
+        Props.get('header') )
+        
+        pathcomp = os.path.splitext(file)
+        this.__base = pathcomp[0]
+        this.__outfile = '%s.%d%s' % (pathcomp[0], os.getpid(), pathcomp[1])
+        try:
+            this.__fd = open(this.__outfile,"w")
+        except:
+            sys.exit('ExitNoWrite', this.__outfile)
+        this.write(top)
+        this.__mudelaDefs('')
+        this.write("""\
+\\cmrtwenty% ugh
+\\makelilytitle
+""") 
+
+    #
+    # next
+    #
+    def next(this):
+        """
+        Write LaTeX subheader information to support more than one
+        score in a document.  Lastly send current title information to
+        output.
+
+        input:  None
+        output: None
+        error:  None
+        """
+
+        this.write("""\
+\\def\\theopus{}%
+\\def\\thepiece{}%
+\\def\\mudelaopus{}%
+\\def\\mudelapiece{}%
+""")
+        this.__mudelaDefs("\\def")
+        this.write("""\
+\\def\\theopus{\\mudelaopus}% ugh
+\\def\\thepiece{\\mudelapiece}%
+\\makelilypiecetitle
+""")
+
+
+    #
+    # end
+    #
+    def end(this):
+        """
+        Close output file and run latex on it.
+
+        input:  None
+        output: None
+        error:  ExitBadLatex Exception
+        """
+
+        outfile=this.__base + '.dvi'
+        if Props.get('output') != '':
+            outfile = os.path.join(Props.get('output'), outfile )
+            
+        this.write("""\
+\\vfill\\hfill{\\LilyIdString}
+\\end{document}
+""")
+        this.__fd.close()
+        if ( os.name == 'posix' ):
+            stat = os.system('latex \'\\nonstopmode \\input %s\'' %
+                             (this.__outfile))
+        else: # Windows shells don't eat the single quotes
+            stat = os.system('latex \\nonstopmode \\input %s' %
+                             (this.__outfile))
+        if stat:
+            sys.exit('ExitBadLatex')
+        if os.path.isfile(outfile):
+            os.remove(outfile)
+        os.rename(this.__base + '.' + str(os.getpid()) + '.dvi', outfile)
+        sys.stderr.write( '\n' + program_id() + ': dvi file name is %s\n\n'
+                   % (outfile))
+
+        if Props.get('postscript'):
+            psoutfile=this.__base + '.ps'
+            if Props.get('output') != '':
+                psoutfile = os.path.join(Props.get('output'), psoutfile )
+            stat = os.system('dvips -o %s %s 2>&1' % (psoutfile,outfile))
+            if stat:
+                sys.exit('ExitBadPostscript')
+            
+
+
+
+class Properties:
+    """
+    This class handles all ly2dvi.py property manipulation
+
+    Public methods:
+    
+    __init__()  Constructor
+    set<property> methods
+    """
+
+    def __init__(this):
+
+        #
+        # Following is the order of priority for property assignment.  The
+        # list is organized from lowest to highest priority.  Each
+        # assignment is overridden by the next requester in the list.
+        #
+        # Requester     Description
+        # ---------     -----------
+        # init          Initial default values
+        # file          The values found in the lilypond generated TeX files
+        # environment   Envrionment variables LILYINCLUDE, LILYPONDPREFIX
+        # rcfile        $LILYPONDPREFIX/share/lilypond/.lilyrc
+        # rcfile        $HOME/.lilyrc
+        # rcfile        ./.lilyrc
+        # commandline   command line arguments
+        # 
+        this.__overrideTable = {
+            'init'        : 0,
+            'file'        : 1,
+            'environment' : 2,
+            'rcfile'      : 3,
+            'commandline' : 4,
+            'program'     : 5
+            }
+
+        this.__roverrideTable = {} # reverse lookup used for debug
+        for i in this.__overrideTable.items():
+            this.__roverrideTable[i[1]]=i[0]
+        
+        this.__data = {
+            'pagewidth'    :  [597, this.__overrideTable['init']],
+            'pageheight'   :  [845, this.__overrideTable['init']],
+            'papersize'    :  ['a4paper', this.__overrideTable['init']],
+            'textheight'   :  [0, this.__overrideTable['init']],
+            'linewidth'    :  [0, this.__overrideTable['init']],
+            'orientation'  :  ['portrait', this.__overrideTable['init']],
+            'language'     :  ['%', this.__overrideTable['init']],
+            'include'      :  [[], this.__overrideTable['init']],
+            'debug'        :  [0, this.__overrideTable['init']],
+            'keeplilypond' :  [0, this.__overrideTable['init']],
+            'keeply2dvi'   :  [0, this.__overrideTable['init']],
+            'pagenumber'   :  ['%', this.__overrideTable['init']],
+            'separate'     :  [0, this.__overrideTable['init']],
+            'output'       :  ['', this.__overrideTable['init']],
+            'header'       :  ['%', this.__overrideTable['init']],
+            'dependencies' :  [0, this.__overrideTable['init']],
+            'root'         :  ['', this.__overrideTable['init']],
+            'tmp'          :  ['d:\tmp', this.__overrideTable['init']],
+            'filename'     :  ['', this.__overrideTable['init']],
+            'titledefs'    :  [[], this.__overrideTable['init']],
+            'titles'       :  [{}, this.__overrideTable['init']],
+            'lilyOutputFiles' :  [[], this.__overrideTable['init']],
+            'postscript'   :  [0, this.__overrideTable['init']],
+            }
+
+        #
+        # Try to set root and HOME first before calling rcfile
+        #
+        if os.environ.has_key('LILYPONDPREFIX'):
+            this.setRoot(os.environ['LILYPONDPREFIX'], 'environment')
+        else:
+            p=os.path.split(sys.argv[0])
+            p=os.path.split(p[0])
+            this.setRoot(p[0],'init')
+
+        if not os.environ.has_key('HOME'):
+            if os.environ.has_key('HOMEDRIVE') and \
+                 os.environ.has_key('HOMEPATH'):
+                os.environ['HOME'] = os.environ['HOMEDRIVE'] + \
+                                     os.environ['HOMEPATH']
+            else:
+                os.environ['HOME'] = os.curdir
+
+        this.rcfile() # Read initialization file(s)
+
+        if os.environ.has_key('LILYINCLUDE'):
+            tmp=this.get('include')
+            for s in string.split(os.environ['LILYINCLUDE'],os.pathsep):
+                tmp.append(s)
+            this.__set('include', tmp, 'environment')    
+
+
+        t=''
+	if os.environ.has_key ('TEXINPUTS'):
+		t = os.pathsep + os.environ['TEXINPUTS']
+        os.environ['TEXINPUTS'] = os.path.join(this.get('root'), 'texmf',
+					       'tex', 'lilypond' ) + t
+
+        t=''
+	if os.environ.has_key ('MFINPUTS'):
+		t = os.pathsep + os.environ['MFINPUTS']
+        os.environ['MFINPUTS'] = os.path.join(this.get('root'), 'texmf',
+					       'mf', 'public', 'lilypond' ) + t
+
+        if os.environ.has_key('TMP'):
+            this.__set('tmp',os.environ['TMP'],'environment')
+
+        
+	fd=this.get_texfile_path ('titledefs.tex')
+        mudefs=[]    
+
+        for line in fd.readlines():
+            m=re.match('\\\\newcommand\*{\\\\mudela([\w]+)}',line)
+            if m:
+                mudefs.append(m.group(1))
+	fd.close
+        this.__set('titledefs', mudefs, 'init')
+
+    #
+    # __set
+    #
+    def __set(this,var,value,requester):
+        """
+        All of the set methods call this to set a property.  If the value
+        was last set by a requestor of lesser priority the new value is
+        assigned, else the old value has priority and is unchanged.
+        """
+
+        if this.__overrideTable[requester] < this.__data[var][1]:
+            return 0
+        else:
+            this.__data[var] = [value, this.__overrideTable[requester]]
+
+    #
+    # get
+    #
+    def get(this,var):
+        """
+        All of the get methods call this to get a property value.  List
+        variable types are return by value to facilitate an append operation.
+        """
+
+        if var == 'include' or var == 'lilyOutputFiles':
+            return this.__data[var][0][0:]  # return a copy not a ref
+        else:
+            return this.__data[var][0]
+
+    #
+    # get_texfile_path
+    #
+    def get_texfile_path (this, var):
+        """
+        locate and open titledefs.tex file
+        """
+
+        if os.name == 'nt':
+            path = os.path.join(this.get('root'), 'texmf', 'tex',
+                                'lilypond', var)
+        else:
+            path =''
+            cmd =('kpsewhich tex %s %s' % (var,errorlog))
+            pipe = os.popen (cmd, 'r')
+            path = pipe.readline ()[:-1] # chop off \n
+            return_status =  pipe.close()
+            if return_status and not path:
+                path = os.path.join(this.get('root'), 'texmf', 'tex',
+                                    'lilypond', var)
+	fd = open(path, 'r')
+        return fd
+
+
+    #
+    # Read rc file
+    #
+    def rcfile(this):
+	"""
+        Read initialization file(s)
+        """
+        varTable = [
+            #   name              set method
+            #   ----              ----------
+            ( 'DEBUG',          this.setDebug ),
+            ( 'DEPENDENCIES',   this.setDependencies ),
+            ( 'KEEPLILYPOND',   this.setKeeplilypond ),
+            ( 'KEEPLY2DVI',     this.setKeeply2dvi ),
+            ( 'LANGUAGE',       this.setLanguage ),
+            ( 'LATEXHF',        this.setHeader ),
+            ( 'LILYINCLUDE',    this.setInclude ),
+            ( 'LILYPONDPREFIX', this.setRoot ),
+            ( 'NONUMBER',       this.setNonumber ),
+            ( 'ORIENTATION',    this.setOrientation ),
+            ( 'OUTPUTDIR',      this.setOutput ),
+            ( 'PAPERSIZE',      this.setPaperZize ),
+            ( 'PHEIGHT',        this.setTextHeight ),
+            ( 'POSTSCRIPT',     this.setPostscript ),
+            ( 'PWIDTH',         this.setLineWidth ),
+            ( 'SEPARATE',       this.setSeparate ),
+            ( 'TMP',            this.setTmp ),
+            ]
+
+        if ( os.name == 'posix' ):
+            dotFilename='.lilyrc'
+        else: # Windows apps like edit choke on .lilyrc
+            dotFilename='_lilyrc'
+
+	for d in [os.path.join(this.get('root'),'share','lilypond'), \
+                  os.environ['HOME'], os.curdir ]:
+	    file=os.path.join(d,dotFilename)
+	    try:
+		fd = open( file, 'r' )
+	    except:
+		continue
+	    
+            for line in fd.readlines():
+		if re.match('#.*',line):
+		    continue
+		m=re.search('([\w]+)=(.*)',line)
+		if m:
+                    for var in varTable:
+                        if m.group(1) == var[0]:
+                            var[1](m.group(2),'rcfile')
+                            break
+	    fd.close
+
+    #
+    # setPaperZize
+    #
+    def setPaperZize(this,size,requester):
+        """
+        Set paper size properties
+        """
+
+        paperTable = [
+            # regex          width    height      name
+            # -----          -----    ------      ----
+            ( 'a0.*',        2389,    3381,    'a0paper' ),
+            ( 'a1$|a1p.*',   1690,    2389,    'a1paper' ),
+            ( 'a2.*',        1194,    1690,    'a2paper' ),
+            ( 'a3.*',        845,     1194,    'a3paper' ),
+            ( 'a4.*',        597,     845,     'a4paper' ),
+	    ( 'a5.*',        423,     597,     'a5paper' ),
+            ( 'a6.*',        298,     423,     'a6paper' ),
+            ( 'a7.*',        211,     298,     'a7paper' ),
+            ( 'a8.*',        305,     211,     'a8paper' ),
+            ( 'a9.*',        105,     305,     'a9paper' ),
+            ( 'a10.*',       74,      105,     'a10paper' ),
+            ( 'b0.*',        2847,    4023,    'b0paper' ),
+            ( 'b1.*',        2012,    2847,    'b1paper' ),
+            ( 'b2.*',        1423,    2012,    'b2paper' ),
+            ( 'b3.*',        1006,    1423,    'b3paper' ),
+            ( 'b4.*',        712,     1006,    'b4paper' ),
+            ( 'b5.*',        503,     712,     'b5paper' ),
+            ( 'archA$',      650,     867,     'archApaper' ),
+            ( 'archB$',      867,     1301,    'archBpaper' ),
+            ( 'archC$',      1301,    1734,    'archCpaper' ),
+            ( 'archD$',      1734,    2602,    'archDpaper' ),
+            ( 'archE$',      2602,    3469,    'archEpaper' ),
+            ( 'flsa$|flse$', 614,     940,     'flsapaper' ),
+            ( 'halfletter$', 397,     614,     'halfletterpaper' ),
+            ( 'ledger$',     1229,    795,     'ledgerpaper' ),
+            ( 'legal$',      614,     1012,    'legalpaper' ),
+            ( 'letter$',     614,     795,     'letterpaper' ),
+            ( 'note$',       542,     723,     'notepaper' )
+            ]
+
+        found=0
+        for paper in paperTable:
+            if re.match(paper[0],size):
+                found=1
+                this.__set('pagewidth',paper[1],requester)
+                this.__set('pageheight',paper[2],requester)
+                this.__set('papersize',paper[3],requester)
+                break
+
+        if not found:
+            sys.exit('ExitBadPaper',size)
+
+    #
+    # setTextHeight
+    #
+    def setTextHeight(this,size,requester):
+        """
+        Set textheight property
+        """
+
+	m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
+	if m:
+	    if m.group(2) == 'cm':
+		this.__set('textheight',\
+                           float(m.group(1)) * 72.27/2.54, requester )
+	    elif m.group(2) == 'mm':
+		this.__set('textheight',\
+                           float(m.group(1)) * 72.27/25.4, requester )
+	    elif m.group(2) == 'pt':
+		this.__set('textheight', float(m.group(1)), requester )
+	    elif m.group(2) == '':
+		this.__set('textheight', float(m.group(1)), requester )
+	    else:
+		sys.exit('ExitBadHeight', m.group(2))
+	else:		
+	    sys.exit('ExitBadHeight', size)
+
+    #
+    # setLineWidth
+    #
+    def setLineWidth(this,size,requester):
+        """
+        Set linewidth propery
+        """
+
+	m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
+	if m:
+	    if m.group(2) == 'cm':
+		this.__set('linewidth', \
+		float(m.group(1)) * 72.27/2.54, requester )
+	    elif m.group(2) == 'mm':
+		this.__set('linewidth', \
+		float(m.group(1)) * 72.27/25.4, requester )
+	    elif m.group(2) == 'pt':
+		this.__set('linewidth', float(m.group(1)), requester )
+	    elif m.group(2) == '':
+		this.__set('linewidth', float(m.group(1)), requester )
+	    else:
+		sys.exit('ExitBadWidth', m.group(2))
+	else:		
+	    sys.exit('ExitBadWidth', size)
+
+    #
+    # setOrientation
+    #
+    def setOrientation(this,orient,requester):
+        """
+        Set orientation property
+        """
+
+	if orient == 'landscape' or orient == 'portrait':
+	    this.__set('orientation', orient, requester )
+	else:
+	    sys.exit('ExitBadOrient', orient)
+
+    #
+    # setLanguage
+    #
+    def setLanguage(this,lang,requester):
+        """
+        Set language property
+        """
+
+	this.__set('language', '\\usepackage[%s]{babel}' % (lang), requester )
+
+    #
+    # setInclude
+    #
+    def setInclude(this,inc, requester):
+        """
+        Append an include path
+        """
+
+        tmp = this.get('include')
+        tmp.append(inc)
+        this.__set('include', tmp, requester )
+
+    #
+    # setDebug
+    #
+    def setDebug(this,value,requester):
+        """
+        Set or Clear debug flag
+        """
+
+        if int(value) == 1:
+            this.__set('debug',1,requester)
+        else:
+            this.__set('debug',0,requester)
+
+    #
+    # setKeeplilypond
+    #
+    def setKeeplilypond(this, value, requester):	
+        """
+        Set or Clear keeplilypond flag
+        """
+
+        if int(value) == 1:
+            this.__set('keeplilypond',1,requester)
+        else:
+            this.__set('keeplilypond',0,requester)
+
+    #
+    # setKeeply2dvi
+    #
+    def setKeeply2dvi(this, value, requester):	
+        """
+        Set or Clear keeply2dvi flag
+        """
+
+        if int(value) == 1:
+            this.__set('keeply2dvi',1,requester)
+        else:
+            this.__set('keeply2dvi',0,requester)
+
+    #
+    # setNonumber 
+    #
+    def setNonumber(this, value, requester):	
+        """
+        Set nonumber flag
+        """
+
+        if int(value) == 1:
+            this.__set('pagenumber',1,requester)
+        else:
+            this.__set('pagenumber',0,requester)
+
+    #
+    # setSeparate
+    #
+    def setSeparate(this, value, requester):	
+        """
+        Set or Clear separate flag
+        """
+
+        if int(value) == 1:
+            this.__set('separate',1,requester)
+        else:
+            this.__set('separate',0,requester)
+
+    #
+    # Set output directory name
+    #
+    def setOutput(this,out,requester):
+	this.__set('output',out,requester)
+
+    #
+    # Set latex header name
+    #
+    def setHeader(this,head, requester):
+	this.__set('header',head,requester)
+
+    #
+    # Set or Clear Dependencies flag to generate makefile dependencies
+    #
+    def setDependencies(this, requester):	
+        """
+        Set or Clear dependencies flag
+        """
+
+        if int(value) == 1:
+            this.__set('dependencies',1,requester)
+        else:
+            this.__set('dependencies',0,requester)
+
+    #
+    # Set tmp directory
+    #
+    def setTmp(this,dir, requester):	
+	this.__set('tmp',dir,requester)
+
+    #
+    # Set mudela source file name
+    #
+    def setFilename(this,file, requester):	
+	this.__set('filename',file,requester)
+
+    #
+    # Set title commands
+    #
+    def setTitles(this,titles, requester):	
+	this.__set('titles',titles,requester)
+
+    #
+    # Set title commands
+    #
+    def addLilyOutputFiles(this,filelist,requester):
+        """
+        Add a to the lily output list
+        """
+
+        tmp = this.get('lilyOutputFiles')
+        tmp = tmp + filelist
+        this.__set('lilyOutputFiles',tmp,requester)
+
+    #
+    # Set/Clear postscript flag
+    #
+    def setPostscript(this,value,requester):
+        """
+        Set postscript flag
+        """
+
+        if int(value) == 1:
+            this.__set('postscript',1,requester)
+        else:
+            this.__set('postscript',0,requester)
+
+    #
+    # Set root
+    #
+    def setRoot(this,path, requester):	
+        """
+        Set lilypond root directory
+        """
+
+        os.environ['LILYPONDPREFIX'] = path
+	this.__set('root',path,requester)
+
+    #
+    # printProps
+    #
+    def printProps(this):
+        """
+        Print properties
+        """
+        
+        for key in this.__data.keys():
+            print "%s <%s>:<%s>" % (key,this.get(key),
+                                    this.__roverrideTable[this.__data[key][1]])
+
+
+
+#
+# Misc functions
+#
+
+def getLilyopts():
+    inc = ''	
+    if len(Props.get('include')) > 0: 
+        inc = '-I ' + string.join(Props.get('include'),os.pathsep)
+    else:
+
+        if Props.get('dependencies'):
+            dep=' -d'
+        else:
+            dep=''
+	return inc + dep
+    return inc
+
+def writeLilylog(contents):
+    if Props.get('keeplilypond'):
+        file='lilylog.' + str(os.getpid())
+        output = Props.get('output')
+        if output != '':
+            file = os.path.join( output, file )
+        try:
+            fd = open( file, 'w' )
+        except:
+            sys.exit('ExitNoWrite', file)
+        fd.write(contents)
+        fd.close()
+
+def getTeXFile(contents):
+    texfiles=[]
+    for line in string.split(contents,'\n'):
+        m = re.search('^TeX output to (.+)\.\.\.', line)
+        if m:
+            texfiles.append(m.group(1))
+
+    if texfiles == []:
+        sys.exit('ExitNoTeXName')
+    else:
+        return texfiles
+
+def program_id ():
+    return name + ' ' + version;
+
+
+def mailaddress():
+    try:
+	return os.environ['MAILADDRESS']
+    except KeyError:
+	return '(address unknown)'
+
+
+def identify ():
+    sys.stderr.write (program_id () + '\n')
+
+def help ():
+    sys.stderr.write (
+        'Generate dvi file from mudela or lilypond output\n'
+        'Usage: ' + name + ' [OPTION]... [FILE]...\n'
+        '\n'
+        'Options:\n'
+        '  -D,--debug           increase verbosity\n'
+        '  -F,--headers=        name of additional LaTeX headers file\n'
+        '  -H,--Height=         set paper height (points) (see manual page)\n'
+        '  -I,--include=DIR     add DIR to LilyPond\'s search path\n'
+        '  -K,--keeplilypond    keep lilypond output files\n'
+        '  -L,--landscape       set landscape orientation\n'
+        '  -N,--nonumber        switch off page numbering\n'
+        '  -O,--orientation=    set orientation (obsolete - use -L instead)\n'
+        '  -P,--postscript      generate postscript file\n'
+        '  -W,--Width=          set paper width (points) (see manual page)\n'
+        '  -d,--dependencies    tell lilypond make a dependencies file\n'
+        '  -h,--help            this help text\n'
+        '  -k,--keeply2dvi      keep ly2dvi output files\n'
+        '  -l,--language=       give LaTeX language (babel)\n'
+        '  -o,--output=         set output directory\n'
+        '  -p,--papersize=      give LaTeX papersize (eg. a4)\n'
+        '  -s,--separate        run all files separately through LaTeX\n'
+        '\n'
+        'files may be (a mix of) input to or output from lilypond(1)\n'
+        )
+
+
+
+#
+# main
+#
+
+def main():
+    """Generate dvi files from lilypond source/output"""
+
+    infile = Input()
+    outfile = TeXOutput()
+    texInputFiles=[]
+
+    (options, files) = getopt.getopt (sys.argv[1:],
+                                      'DF:H:I:KLNPW:dhkl:o:p:s',
+                                      ['debug', 'headers=', 'Height=',
+                                       'include=', 'keeplilypond', 'landscape',
+                                       'nonumber', 'Width=', 'dependencies',
+                                       'help', 'keeply2dvi', 'language=',
+                                       'output=', 'papersize=', 'separate',
+                                       'postscript'])
+    for opt in options:
+        o = opt[0]
+        a = opt[1]
+        if o == '--debug' or o == '-D':
+	    Props.setDebug(1,'commandline')
+        elif o == '--headers' or o == '-F':
+	    Props.setHeader(a,'commandline')
+        elif o == '--include' or o == '-I':
+	    Props.setInclude(a,'commandline')
+        elif o == '--Height' or o == '-H':
+	    Props.setTextHeight(a,'commandline')
+        elif o == '--keeplilypond' or o == '-K':
+	    Props.setKeeplilypond(1,'commandline')
+        elif o == '--landscape' or o == '-L':
+	    Props.setOrientation('landscape','commandline')
+        elif o == '--nonumber' or o == '-N':
+	    Props.setNonumber('commandline')
+        elif o == '--Width' or o == '-W':
+	    Props.setLineWidth(a,'commandline')
+        elif o == '--dependencies' or o == '-d':
+	    Props.setDependencies(1,'commandline')
+        elif o == '--help' or o == '-h':
+            help()
+            return 0
+        elif o == '--keeply2dvi' or o == '-k':
+	    Props.setKeeply2dvi(1,'commandline')
+        elif o == '--language' or o == '-l':
+	    Props.setLanguage(a,'commandline')
+        elif o == '--output' or o == '-o':
+	    Props.setOutput(a,'commandline')
+        elif o == '--papersize' or o == '-p':
+	    Props.setPaperZize(a,'commandline')
+        elif o == '--separate' or o == '-s':
+	    Props.setSeparate(1,'commandline')
+        elif o == '--postscript' or o == '-P':
+	    Props.setPostscript(1,'commandline')
+
+    if len(files):
+        for file in files:
+            infile.open(file)
+            type = infile.type()
+            infile.close()
+            if type == 'source':
+                cmd = 'lilypond %s %s 2>&1' % (getLilyopts(), file)
+                fd = os.popen( cmd , 'r' )
+                log = ''
+                line=fd.readline()
+                while line:
+                    log = log + line
+                    sys.stderr.write( line )
+                    line=fd.readline()
+                stat = fd.close()
+                if stat:
+                    sys.exit('ExitBadLily', cmd )
+                texFiles=getTeXFile(log)
+                writeLilylog(log)
+                Props.addLilyOutputFiles(texFiles,'program')
+                texInputFiles = texInputFiles + texFiles
+            else:
+                texInputFiles.append(file)
+
+        firstfile=1
+        for file in texInputFiles:
+            infile.open(file)
+            infile.setVars() # first pass set variables
+            infile.close()
+            if Props.get('debug'):
+                Props.printProps()
+            if firstfile:
+                outfile.start(file)
+            else:
+                outfile.next()
+            outfile.write("""\
+\\input{%s}
+""" % (file))
+            if Props.get('separate'):
+                outfile.end()
+            else:
+                firstfile=0
+        if not Props.get('separate'):
+            outfile.end()
+    else:
+        help()
+        sys.exit('ExitBadArgs','No files specified')
+
+#
+# Exit values
+#
+ExitTable = {
+    'ExitInterupt'         : ['Ouch!', 1 ],
+    'ExitBadArgs'          : ['Wrong number of arguments', 2 ],
+    'ExitNotFound'         : ['File not found', 3 ],
+    'ExitBadPaper'         : ['Unknown papersize', 4 ],
+    'ExitBadHeight'        : ['Invalid Height specification', 5 ],
+    'ExitBadWidth'         : ['Invalid Width specification', 6 ],
+    'ExitBadOrient'        : ['Invalid Orientation specification', 7 ],
+    'ExitNoWrite'          : ['Permission denied', 8 ],
+    'ExitNoTeXName'        : ['hmm, I could not find an output file name', 9 ],
+    'ExitBadLily'          : ['Lilypond failed', 10 ],
+    'ExitBadLatex'         : ['Latex failed', 11 ],
+    'ExitBadPostscript'    : ['Postscript failed', 12 ],
+    'ExitUnknown'          : ['Unknown Exit Code', 20 ],
+    }
+
+def cleanup():
+    lilyfiles = []
+    tmpfiles = []
+    if not Props.get('keeplilypond'):
+        lilyfiles = Props.get('lilyOutputFiles')
+    if not Props.get('keeply2dvi'):
+        tmpfiles = glob.glob('*.' + str(os.getpid()) + '.*' )
+    for file in lilyfiles + tmpfiles:
+        if os.path.isfile(file):
+            os.remove(file)
+
+
+identify()
+Props = Properties()
+
+try:
+    main()
+
+except KeyboardInterrupt:
+    print ExitTable['ExitInterupt'][0]
+    cleanup()
+    sys.exit(ExitTable['ExitInterupt'][1])
+
+except SystemExit, errno:
+    if ExitTable.has_key(errno.args[0]):
+        msg = ExitTable[errno.args[0]]
+    else:
+        msg = ExitTable['ExitUnknown']
+    if len(errno.args) > 1:  
+        sys.stderr.write( '%s: %s: %s\n' % (name, msg[0], errno.args[1]))
+    else:
+        sys.stderr.write( '%s %s\n' % (name, msg[0]))
+    if Props.get('debug'):
+        Props.printProps()
+    cleanup()
+    sys.exit(msg[1])
+else:
+    cleanup()
diff -urN ../lilypond-1.0.16/scripts/ly2dvi.sh ./scripts/ly2dvi.sh
--- ../lilypond-1.0.16/scripts/ly2dvi.sh	Tue Sep 15 18:22:43 1998
+++ ./scripts/ly2dvi.sh	Thu Jan  1 00:00:00 1970
@@ -1,1005 +0,0 @@
-#!/bin/sh
-#
-# Script to make a LaTeX file for Lilypond
-#
-# Written by Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>
-#  Sat Nov 22 22:26:43 CET 1997
-#
-# $Id: ly2dvi.sh,v 1.16 1998/05/08 21:18:34 janaf Exp $
-#
-#  Original LaTeX file made by Mats Bengtsson, 17/8 1997
-#
-
-VERSION="0.12.jcn1"
-NAME=ly2dvi.sh
-IDENTIFICATION="$NAME $VERSION" 
-NOW=`date`
-echo "$IDENTIFICATION" 1>&2
-
-# TODO:
-#  prevent orphaned "Lily is here" strings
-
-# NEWS
-
-# 0.12.jcn1
-#  - mudelaDefs really fixed (sorry, PC)
-
-# 0.12
-#  - -S/--sourcedir switch
-
-#
-#0.11.jcn3
-# - mudelaDefs fixes, (thanks PC)
-#0.11.jcn2
-# - pass -I, --include to Lily
-# - bf: split $LILYINCLUDE and try all dirs
-# - bf: geometry left/top
-#
-#0.11.pc
-# - fix backslash gobbling, reduce number of separate processes used
-# - require readable rc files, allow rc file in /usr/local/share/lilypond/lilyrc
-# - use latex path, not tex path
-# - Don't override if kpsepath returns non-NULL
-# - Don't clobber x.tex if it wasn't created by ly2dvi
-#
-#
-#0.11.jcn1
-# - find .fly files too
-#
-#0.11.hwn1
-# - height vs heigth
-# - robustification: give \nonstopmode as LaTeX arg; no hanging if no TeX file.
-# - robustification: notice failed cp.
-
-#0.11
-#	- more papersizes (thanks Han-Wen) - don't expect LaTeX to accept all...
-#	- -W,--Width=       : set paper width  (points)
-#       - -H,--Height=      : set paper height (points)
-#	- -H and -W is used only when an unknown papersize is to be specified,
-#	  and has to be combined with a papersize option known to LaTeX
-#NB!	- -F,--headers=     : name of additional LaTeX headers input file.
-#NB!      Changed from -H to -F
-#	- -d,--dependencies : passed to lilypond
-
-
-#0.10.jcn1
-#	- HEIGHT -> HEIGHT
-#	- vertical margins (for a4), same on both sides
-#	- textheight from lilypond output file (mudelapapertextheight)
-#	- piece titling
-#	- mudelapiece, mudelaopus
-#
-#0.10
-#	- -K,--keeplilypond : Keep lilypond output files (default delete)
-#	- -k,--keeply2dvi   : Keep ly2dvi   output files (default delete)
-#	- -L,--landscape    : Set landscape orientation
-#	- -N,--nonumber     : Turn off page numbering (\pagestyle{empty})
-#	- Could not reinsert "\usepackage[T1]{fontenc}" because
-#	  "los-toros" won't work with it
-#	- Ekstra LaTeX headers from input file
-#0.9.hwn1
-#       - option to remove output of lily
-# 0.9
-#	- Trap Lilypond abort
-#	- Replaced "\usepackage[T1]{fontenc}" with
-#	  \usepackage[latin1]{inputenc} (takk, Mats)
-#	- Removed "()" around "\LilyIdString" (Janne didn't want it)
-# 0.8	- Trap Lilypond segmentation fault
-#	- Function for cleanup
-#	- Trap line
-#	- More human-readable variables
-#	- Some logics concerning rc-files
-# 0.7
-#	- Improved Lilypond error checking
-#	- Output orientation (landscape...). Overrides mudela file
-#	  variable orientation="landscape";
-#	- Paper width and height put into variables (only A4!)
-#	- Adjusted top margin to default.....
-#
-#TODO
-#	- Include more papersizes.
-#	- Manual page.......
-# 0.6.jaf2
-# 	- LILYINCLUDE update
-#
-# 0.6.hwn1
-# 	- handle LILYINCLUDE
-#       - --output
-#
-# 0.6
-#	- Source rc-files, if present. Files are:
-#	  /usr/local/share/lilyrc /etc/lilyrc $HOME/.lilyrc ./.lilyrc
-#	- tee output from Lilypond
-#	- Handles margins for A4 paper (equal on both sides)
-#	- new option -s (--separate) for one LaTeX run per file,
-#	  else all files are run together
-#
-# 0.5
-#	- More useful ("two-level") debug.
-#	- The Q&D hack to find file names and not handling \include
-#	  is replaced by grabbing output file names from Lilypond.
-#	= Detects multiple output files - adds them when running
-#	  LaTeX.
-#	- Works with multiple input files - no matter if they are
-#	  (a mix of) input to or output from Lilypond.
-#
-#TODO
-#	- Still no margins handling.
-#	- We have to discuss how to handle multiple output files
-#	  from Lilypond - 'ly2dvi standchen' gives a rather odd
-#	  result....
-
-# 0.4.1
-#	- Always exit after printing help info
-# 0.4
-#	- Changes to ensure for more strict grep'ing of parameters
-#	  Thanks to from G.B.Stott@bolton.ac.uk
-#	- More efficient use of sed -e 's///' -e 's///'
-#	  Thanks to Johan Vromans <jvromans@squirrel.nl> and GBS
-#	- Ask tex for location of titledefs.tex (Thanks to JV)
-#	- Accept only exact match of "\def\mudelacomposer{"
-#	  (or whatever mudela* defined in titledefs.tex)
-#	- Even more efficient use of sed (Thanks to JV)
-#	- Default file name for single output file implemented.
-#	- Moved help into function - finally included from 0.1.jcn1
-#
-#TODO
-#	- Still doesn't handle \include
-#	- The Q&D for finding output file name from the sequence of
-#	  \paper \output \midi \output really needs to be looked at.
-#	  I have improved it a lot, but it's only capable of finding
-#	  one (the last) file name.
-#	  Well, I have to rewrite this entirely to handle \include,
-#	  then I can fix it.
-#	- Still no margins handling.
-#
-#WARNING
-#	- Some lines of output from lilypond do NOT start
-#	  at first character position, therefore I have removed "^"
-#	  in sed'ing and grep'ing.
-
-# 0.3.hwn1
-# 	- add "Creator: " line to output
-#
-# 0.3
-#	- multiple input files to make score from several files
-#	  (extra files assumed to be Lilypond output)
-#	- cp dvi-file instead of mv, to allow for xdvi reload
-#	- check for illegal long options
-#	- put in pt in text width, if not given
-#	- put in \nonstopmode in LaTeX file
-#	- restored LaTeX exit value check
- 
-# 0.2.1
-#	- temporarily omit LaTeX exit value check
-#	- remove ALL temporary files
-
-# 0.2
-#	- fix for solaris          - included from 0.1.jcn1
-#	- long option hack         - included from 0.1.jcn1 - modified
-#	- moved help into function - NOT included from 0.1.jcn1 yet
-#	- various improvements     - included from 0.1.jcn1
-#	- find mudela definitions from titledefs.tex
-#	- find papersize from lilypond output file (mudelapapersize),
-#	  overridden by option '-p size' or '--papersize=size'
-#	- option -l lang or --language=lang overrides
-#	  lilypond output file definition (mudelalanguage)
-#	- textwidth from lilypond output file (mudelapaperlinewidth)
-
-# 0.1.jcn1
-#	- fix for solaris
-#	- long option hack
-#	- moved help into function
-
-#
-# Clean up
-#
-cleanup() {
-  if [ "$KEEP_LY2DVI_OUTPUT" != "Y" ]
-  then
-    [ -n "$LatF" -a -f "$LatF" ]       && rm -f $LatF
-    [ -n "$LOGFILE" -a -f "$LOGFILE" ] && rm -f $LOGFILE
-    [ -n "$FN" ]                       && rm -f $FN.*
-    for F in *$$* $TMP/*$$*
-    do
-      rm -f $F
-    done
-  fi
-  if [ "$KEEP_LILY_OUTPUT" != "Y" ]
-  then
-    for F in $LILY_OUTPUT_FILES
-    do
-      [ -f $F ] && rm -f $F
-    done
-  fi
-}
-
-#
-# print usage
-#
-help() {
-  cat << EOF
-Generate dvi file from mudela or lilypond output
-Usage: $0 [OPTION]... [FILE]...
-
-Options:
-  -D,--debug           increase verbosity
-  -F,--headers=        name of additional LaTeX headers file
-  -H,--Height=         set paper height (points) (see manual page)
-  -I,--include=DIR     add DIR to search path of LilyPond
-  -K,--keeplilypond    keep lilypond output files
-  -L,--landscape       set landscape orientation
-  -N,--nonumber        switch off page numbering
-  -O,--orientation=    set orientation (obsolete - use -L instead) 
-  -W,--Width=          set paper width (points) (see manual page)
-  -d,--dependencies    tell lilypond make a dependencies file
-  -h,--help            this help text
-  -k,--keeply2dvi      keep ly2dvi output files
-  -l,--language=       give LaTeX language (babel)
-  -o,--output=         set output directory
-  -p,--papersize=      give LaTeX papersize (eg. a4)
-  -s,--separate        run all files separately through LaTeX
-  -S,--sourcedir       set sourcedir 
-
-  files may be (a mix of) input to or output from lilypond(1)
-EOF
-}
-
-
-#
-# SVr4 echo swallows backslashes, and there's no way to turn it off.
-# Therefore use Echo whenever backslashes may be important.
-# printf is in the posix.2 standard -- which means it's in 
-# all modern shells.
-#
-Echo() {
-	printf "%s\n" "$@"
-}
-
-#
-setPaperZize() {
-case "$PAPERSIZE" in
-  a0*)
-    PWIDTH=2389
-    PHEIGHT=3381
-    PAPERSIZE=a0paper
-    ;;
-  a1|a1p*)
-    PWIDTH=1690
-    PHEIGHT=2389
-    PAPERSIZE=a1paper
-    ;;
-  a2*)
-    PWIDTH=1194
-    PHEIGHT=1690
-    PAPERSIZE=a2paper
-    ;;
-  a3*)
-    PWIDTH=845
-    PHEIGHT=1194
-    PAPERSIZE=a3paper
-    ;;
-  a4*)
-    PWIDTH=597
-    PHEIGHT=845
-    PAPERSIZE=a4paper
-    ;;
-  a5*)
-    PWIDTH=423
-    PHEIGHT=597
-    PAPERSIZE=a5paper
-    ;;
-  a6*)
-    PWIDTH=298
-    PHEIGHT=423
-    PAPERSIZE=a6paper
-    ;;
-  a7*)
-    PWIDTH=211
-    PHEIGHT=298
-    PAPERSIZE=a7paper
-    ;;
-  a8*)
-    PWIDTH=305
-    PHEIGHT=211
-    PAPERSIZE=a8paper
-    ;;
-  a9*)
-    PWIDTH=105
-    PHEIGHT=305
-    PAPERSIZE=a9paper
-    ;;
-  a10*)
-    PWIDTH=74
-    PHEIGHT=105
-    PAPERSIZE=a10paper
-    ;;
-  b0*)
-    PWIDTH=2847
-    PHEIGHT=4023
-    PAPERSIZE=b0paper
-    ;;
-  b1*)
-    PWIDTH=2012
-    PHEIGHT=2847
-    PAPERSIZE=b1paper
-    ;;
-  b2*)
-    PWIDTH=1423
-    PHEIGHT=2012
-    PAPERSIZE=b2paper
-    ;;
-  b3*)
-    PWIDTH=1006
-    PHEIGHT=1423
-    PAPERSIZE=b3paper
-    ;;
-  b4*)
-    PWIDTH=712
-    PHEIGHT=1006
-    PAPERSIZE=b4paper
-    ;;
-  b5*)
-    PWIDTH=503
-    PHEIGHT=712
-    PAPERSIZE=b5paper
-    ;;
-  archA)
-    PWIDTH=650
-    PHEIGHT=867
-    ;;
-  archB)
-    PWIDTH=867
-    PHEIGHT=1301
-    ;;
-  archC)
-    PWIDTH=1301
-    PHEIGHT=1734
-    ;;
-  archD)
-    PWIDTH=1734
-    PHEIGHT=2602
-    ;;
-  archE)
-    PWIDTH=2602
-    PHEIGHT=3469
-    ;;
-  flsa|flse)
-    PWIDTH=614
-    PHEIGHT=940
-    ;;
-  halfletter)
-    PWIDTH=397
-    PHEIGHT=614
-    ;;
-  ledger)
-    PWIDTH=1229
-    PHEIGHT=795
-    ;;
-  legal)
-    PWIDTH=614
-    PHEIGHT=1012
-    ;;
-  letter)
-    PWIDTH=614
-    PHEIGHT=795
-    ;;
-  note)
-    PWIDTH=542
-    PHEIGHT=723
-    ;;
-  *)
-    echo ""
-    echo $0": unknown papersize -- "$PAPERSIZE
-    echo ""
-    ;;
-esac
-}
-
-doRcFiles()
-{
-#
-# RC-files ?
-#
-for D in /usr/local/share/ /usr/local/share/lilypond/ /etc/ $HOME/. ./.
-do
-  RCfile=$D"lilyrc"
-  [ -r $RCfile ] && . $RCfile
-done
-fORI=$ORIENTATION
-fLNG=$LANGUAGE
-fPSZ=$PAPERSIZE
-fLHF=$LATEXHF
-unset ORIENTATION LANGUAGE PAPERSIZE LATEXHF
-}
-
-
-
-#
-# Trap function (cleanup)
-#
-
-
-
-trap cleanup 0 9 15
-
-
-
-#
-# Various defaults
-#
-[ -z "$TMP" ] && TMP=/tmp
-if [ ! -d $TMP ]
-then
-  $debug_echo $IDENTIFICATION": temporary directory "$TMP" not found, set to /tmp"
-  TMP=/tmp
-fi
-LOGFILE=$TMP/lilylog.$$	                # Logfile for lilypond
-PAPERSIZE=a4                            # Default papersize name
-PWIDTH=597                              # Default paperwidth
-PHEIGHT=845                             # Default paperheight
-PNUM="%"                                # Page numbering on
-LILYOPTS=""                             # Options to lilypond
-SOURCEDIR=""
-LILYPOND_EXECUTABLE=lilypond
-doRcFiles
-
-
-
-# Keywords defined in titledefs.tex
-#
-TF="`kpsewhich -n latex tex titledefs.tex`"
-MU_DEF=""
-if [ -r "${TF:=/usr/local/share/texmf/tex/lilypond/titledefs.tex}" ]
-then
-  MU_DEF=`sed -n -e 's/.*newcommand\*{.\(mudela[^}]*\)}.*$/\1/p' "$TF"`
-fi
-
-: "${MU_DEF:=mudelatitle mudelasubtitle mudelacomposer \
-          mudelameter mudelaopus mudelaarranger mudelapiece \
-	  mudelapoet mudelainstrument \
-	  }"
-
-#
-# debugging
-#
-debug_echo=:
-#
-# All files in one LaTeX run
-#
-SEPFILE=N
-#
-# Find command line options and switches
-#
-# "x:" x takes argument
-#
-switches="DF:H:I:KLNO:W:dhkl:o:p:S:s\?"
-options=""
-#
-# ugh, "\-" is a hack to support long options
-# while getopts \-:$options$switches O
-# must be in double quotes for bash-2.0
-while getopts "\-:$options$switches" O
-do
-  $debug_echo "O: \`$O'"
-  $debug_echo "arg: \`$OPTARG'"
-  case $O in
-    D  )
-      [ $debug_echo = echo ] && set -x
-      debug_echo=echo
-      ;;
-    F  )
-      LATEXHF=$OPTARG
-      ;;
-    H  )
-      PHEIGHT=$OPTARG
-      ;;
-    I  )
-      LILYOPTS="$LILYOPTS -I $OPTARG"
-      LILYINCLUDE="$LILYINCLUDE:$OPTARG"
-      ;;
-    K  )
-      KEEP_LILY_OUTPUT=Y
-      ;;
-    L  )
-      ORIENTATION=landscape
-      ;;
-    O  )
-      ORIENTATION=$OPTARG
-      ;;
-    N  )
-      PNUM="\pagestyle{empty}"
-      ;;
-    W  )
-      PWIDTH=$OPTARG
-      ;;
-    d  )
-      LILYOPTS=$LILYOPTS" -d"
-      ;;
-    h  )
-      help;
-      exit 0
-      ;;
-    k  )
-      KEEP_LY2DVI_OUTPUT=Y
-      ;;
-    l  )
-      LANGUAGE=$OPTARG
-      ;;
-    o  )
-      OUTPUTDIR=$OPTARG
-      ;;
-    p  )
-      PAPERSIZE=$OPTARG
-      ;;
-    s  )
-      SEPFILE=Y
-      ;;
-    S  )
-      SOURCEDIR=$OPTARG
-      ;;
-    \? )
-      help;
-      exit -1
-      ;;
-    # a long option!
-    -)
-      $debug_echo "long option: \`$OPTARG'"
-      case "$OPTARG" in
-        He*|-He*)
-          PHEIGHT"`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"=
-          ;;
-        W*|-W*)
-          PWIDTH="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
-          ;;
-        dep*|-dep*)
-          LILYOPTS="$LILYOPTS -d"
-          ;;
-        d*|-d*)
-          [ $debug_echo = echo ] && set -x
-          debug_echo=echo
-          ;;
-        hea*|-hea*)
-          LATEXHF="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
-          ;;
-        h*|-h*)
-          help;
-	  exit 0
-          ;;
-        i*|-i*)
-          dir="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
-	  LILYOPTS="$LILYOPTS --include=$dir"
-	  LILYINCLUDE="$LILYINCLUDE:$dir"
-	  ;;
-        keepli*|-keepli*)
-          KEEP_LILY_OUTPUT=Y
-          ;;
-        k*|-k*)
-          KEEP_LY2DVI_OUTPUT=Y
-          ;;
-        land*|-land*)
-          ORIENTATION=landscape
-          ;;
-        lang*|-lang*)
-          LANGUAGE="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
-          ;;
-	n*|-n*)
-	  PNUM="\pagestyle{empty}"
-	  ;;
-	or*|-or*)
-	  ORIENTATION="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
-	  ;;
-	ou*|-ou*)
-	  OUTPUTDIR="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
-	  ;;
-        p*|-p*)
-          PAPERSIZE="`expr \"$OPTARG\" ':' '[^=]*=\(.*\)'`"
-          ;;
-        separa*|-sep*)
-      	  SEPFILE=Y
-          ;;
-	sourcedir*|-sourcedir*)
-	  SOURCEDIR=$OPTARG
-	  ;;
-        *|-*)
-          echo "$0: illegal option -- \"$OPTARG\""
-          help;
-          exit -1
-          ;;
-      esac
-  esac
-done
-shift `expr $OPTIND - 1`
-
-if [ "$SOURCEDIR" != "" ]; then
-# apparently MakeTeXTFM can't handle relative dirs
-	SOURCEDIR=`cd $SOURCEDIR; pwd`
-	LILYINCLUDE="$SOURCEDIR/init:$SOURCEDIR/mf/out:$LILYINCLUDE"
-	TEXINPUTS="$SOURCEDIR/tex:$TEXINPUTS:"
-	MFINPUTS="$SOURCEDIR/mf:$MFINPUTS:"
-	LILYPOND_EXECUTABLE="$SOURCEDIR/lily/out/lilypond"
-	export MFINPUTS LILYPOND_EXECUTABLE TEXINPUTS SOURCEDIR 
-fi
-
-#
-# Input file name
-#
-if [ "$1" = "" ]
-then
-  help
-  $debug_echo "$IDENTIFICATION: No input file name given"
-  exit 1
-fi
-# regexp_quote -- quote a string as a regular expression for egrep or sed
-regexp_quote(){
-	Echo "$@" | sed 's/\([]\[\.*?+^$]\)/\\\1/g'
-}
-#
-#
-mudelaDefs(){
-# Include \def\mudela-definitions
-# The aim here is to pick up the definition for the 
-# current file, then any other file.
-#
-mudelatmp=$TMP/mudelaDefs$$
-# Use `cat' to prevent filenames being prepended
-# 
-cat "$File" $OF | fgrep "$MU_DEF" > $mudelatmp
-for L in $MU_DEF
-do
-    # This converts \def\mudelatitle{fred}
-    # to \mudelatitle{fred} or to
-    # \def\mudelatitle{fred}
-    # and stops after the first one found.
-    sed -n '/\\def\\'"$L"'{\([^}]*\)}.*$/{
-	s//'"`regexp_quote \"$1\"`"'\\'"$L"'{\1}%/p
-	q
-    }'  $mudelatmp  >> $LatF
-done
-rm -f $mudelatmp
-}
-#
-#
-startFile(){
-#
-# LaTeX file name
-#
-BN=`basename "$File" .tex`
-FN="$BN.$$"
-if [ "$KEEP_LY2DVI_OUTPUT" != "Y" ]
-then
-  LatF="$TMP/$FN.tex"
-else
-  LatF="$FN.tex"
-fi
-#
-# Find:
-#   paper size        (PAPERSIZE, overridden by command line option -p)
-#   paper orientation (ORIENTATION, overridden by option -o)
-#   language          (LANGUAGE, overridden by option -l)
-#   textwidth
-#
-eval `sed -n \\
-  -e 's/\\\\def\\\\mudelalanguage{\([^}]*\).*$/fLNG=\1;/p' \\
-  -e 's/\\\\def\\\\mudelalatexheaders{\([^}]*\).*$/fLHF=\1;/p' \\
-  -e 's/\\\\def\\\\mudelaorientation{\([^}]*\).*$/fORI=\1;/p' \\
-  -e 's/\\\\def\\\\mudelapaperlinewidth{\([^}]*\).*$/TWN=\1;/p' \\
-  -e 's/\\\\def\\\\mudelapapertextheight{\([^}]*\).*$/THN=\1;/p' \\
-  -e 's/\\\\def\\\\mudelapapersize{\([^}]*\).*$/fPSZ=\1;/p' \\
-    "$File"`
-#
-if [ -z "$LATEXHF" ]
-then
-  LATEXHF="$fLHF"
-fi
-LLHF="%"
-if [ -n "$LATEXHF" ]
-then
-  [ -f 	"$LATEXHF" ] && LLHF="\input{$LATEXHF}"
-fi
-#
-if [ -z "$PAPERSIZE" ]
-then
-  PAPERSIZE="$fPSZ"
-fi
-if [ -n "$PAPERSIZE" ]
-then
-  setPaperZize
-  PAPEROPT="$PAPERSIZE"
-fi
-#
-if [ -z "$ORIENTATION" ]
-then
-  ORIENTATION="$fORI"
-fi
-if [ -n "$ORIENTATION" ]
-then
-  if [ -z "$PAPEROPT" ]
-  then
-    PAPEROPT="$ORIENTATION"
-  else
-    PAPEROPT="$PAPEROPT,$ORIENTATION"
-  fi
-fi
-#
-if [ -n "$PAPEROPT" ]
-then
-  PAPER="[$PAPEROPT]"
-fi
-#
-if [ -z "$LANGUAGE" ]
-then
-  LANGUAGE="$fLNG"
-fi
-if [ -n "$LANGUAGE" ]
-then
-  LLNG="\usepackage[$LANGUAGE]{babel}"
-else
-  LLNG="%"
-fi
-
-#
-# Find textwidth
-#
-if [ -n "$TWN" ]
-then
-  TW="$TWN"
-  case "$TW" in
-    *mm)
-      ;;
-    *cm)
-      ;;
-    *pt)
-      ;;
-    *)
-      TW="${TW}pt"
-      ;;
-  esac
-  $debug_echo "Text width = $TW"
-fi
-TWp=`Echo $TW | sed -e 's/\..*$//'`
-PWp="$PWIDTH"
-#
-# Find textheight
-#
-if [ -n "$THN" ]
-then
-  TH=$THN
-  case $TH in
-    *mm)
-      ;;
-    *cm)
-      ;;
-    *pt)
-      ;;
-    *)
-      TH="${TH}pt"
-      ;;
-  esac
-  $debug_echo "Text height = $TH"
-fi
-THp="`echo $TH | sed -e 's/\..*$//'`"
-PHp="$PHEIGHT"
-if [ "$ORIENTATION" = "landscape" ]
-then
-  PWp="$PHEIGHT"
-  PHp="$PWIDTH"
-fi
-HMARG="`expr '(' $PWp - $TWp ')' / 2`"pt
-$debug_echo "Text left = $HMARG"
-VMARG="`expr '(' $PHp - $THp ')' / 2`"pt
-$debug_echo "Text top = $VMARG"
-#
-# Geometry: /var/lib/texmf/latex/geometry/geometry.dvi
-#
-#
-# Write LaTeX file
-#
-cat << EOF > $LatF
-% Creator: $IDENTIFICATION
-% Automatically generated from  $IF, $NOW
-
-\documentclass$PAPER{article}
-
-$LLNG
-\usepackage{geometry}
-\usepackage[latin1]{inputenc}
-%\usepackage[T1]{fontenc}
-$PNUM
-%\addtolength{\oddsidemargin}{-1cm}
-%\addtolength{\topmargin}{-1cm}
-%\setlength{\textwidth}{$TW}
-%\setlength{\textheight}{$TH}
-\geometry{width=$TW, left=$HMARG, height=$TH, top=$VMARG}
-\input lilyponddefs
-\input titledefs
-$LLHF
-\begin{document}
-EOF
-mudelaDefs
-cat << EOF >> $LatF
-\cmrtwenty% ugh
-\makelilytitle
-EOF
-}
-nextFile(){
-cat << EOF >> $LatF
-\def\theopus{}%
-\def\thepiece{}%
-\def\mudelaopus{}%
-\def\mudelapiece{}%
-EOF
-mudelaDefs "\\def"
-cat << EOF >> $LatF
-\def\theopus{\mudelaopus}% ugh
-\def\thepiece{\mudelapiece}%
-\makelilypiecetitle
-EOF
-}
-#
-# Conclusion
-#
-endFile(){
-cat << EOF >> $LatF
-\vfill\hfill{\LilyIdString}
-\end{document}
-EOF
-#
-# Run LaTeX
-#
-latex '\nonstopmode \input '$LatF || exit 5
-#
-# Rename dvi file
-#
-if [ -f $FN.dvi ]
-then
-    RESULT="$BN.dvi"
-    [ -n "$OUTPUTDIR" ] && RESULT="$OUTPUTDIR/$RESULT"
-    
-    cp "$FN.dvi" "$RESULT" || exit 5
-fi
-#
-# Output some info
-#
-cat << EOF
-
-$IDENTIFICATION: dvi file name is $RESULT
-
-EOF
-}
-
-# ugh. GF is side-effect.
-findInput() {
-# should check for LILYINCLUDE
-  OIFS="$IFS"
-  IFS=':'
-  x=`echo $LILYINCLUDE | sed "s!:! !g"`
-  IFS="$OIFS"
-  for lypath in . $x
-  do
-    if [ -f "$lypath/$1" ]
-    then
-      GF="$lypath/$1"
-      return
-    fi
-
-    if [ -f "$lypath/$1.ly" ]
-    then
-      GF="$lypath/$1.ly"
-      return
-    fi
-    if [ -f "$lypath/$1.fly" ]
-    then
-       GF="$lypath/$1.fly"
-       return
-    fi
-  done
-  $debug_echo "$IDENTIFICATION: Input file \"$GF\" not found"
-  echo "$NAME: Input file \"$GF\" not found"                       1>&2
-  exit 2
-}
-#
-# Loop through all files
-#
-
-LILY_OUTPUT_FILES=
-
-for GF 
-do
-    findInput $GF
-
-  #
-  # Check whether the file is input to or output from lilypond
-  #
-  L1=`head -1 $GF` 
-  OP=`echo $L1 | grep "^% Creator: GNU LilyPond"`
-  if [ -n "$OP" ]
-  then
-    #
-    # OK - it's the output from lilypond.
-    #
-    # Get lilypond source file name
-    #
-    OF=$GF
-    IFL=`grep mudelafilename $OF`
-    if [ "$IFL" != "" ]
-    then
-      IF=`echo $IFL | sed -e 's/.*{//' -e 's/}*.$//'`
-      #
-      # Check if source file exists
-      #
-      if [ ! -f $IF ]
-      then
-        $debug_echo $IDENTIFICATION": Mudela file not found."
-        TW=15.5cm
-        TH=25.0cm
-      fi
-    else
-      $debug_echo $IDENTIFICATION": Mudela file name not found."
-      TW=15.5cm
-      TH=25.0cm
-    fi
-  else
-    #
-    # I have to assume this is the lilypond input file
-    # Find output file name, if defined
-    #
-    IF=$GF
-    #
-    # Run lilypond
-    # Grab output file names
-    #
-    $debug_echo "lilypond "$LILYOPTS $IF
-
-    $LILYPOND_EXECUTABLE $LILYOPTS $IF 2>&1  | tee $LOGFILE
-    OF="`sed -n -e 's/TeX output to \([^\.]*\.tex\)\.\.\.$/\1/p' $LOGFILE`"
-    $debug_echo "==> $OF"
-    LILY_OUTPUT_FILES="$LILY_OUTPUT_FILES $OF"
-    STATUS=`egrep -i "error|segmentation|abort" $LOGFILE`
-    echo $STATUS
-    if [ ! -z "$STATUS" ]
-    then
-      exit 10
-    fi
-  fi
-  #
-  # "Spin through" all the files
-  #
-  for File in $OF
-  do
-    $debug_echo "--- "$File
-    #
-    # Check if output file is generated
-    #
-    if [ ! -f "$File" ]
-    then
-      $debug_echo "$IDENTIFICATION: hmm, I could not find the output file $File"
-      exit 4
-    fi
-    #
-    # Is this the first file?
-    #
-    if [ -z "$FFile" ]
-    then
-      FFile="$File"
-      startFile
-    else
-      nextFile
-    fi
-    cat << EOF >> $LatF
-\input{$File}
-EOF
-    if [ $SEPFILE = Y ]
-    then
-      FFile=""
-      endFile
-    fi
-  done
-done
-if [ $SEPFILE = N ]
-then
-  endFile
-fi
-#
-# OK - finished
-#
diff -urN ../lilypond-1.0.16/scripts/ly2dvi32.py ./scripts/ly2dvi32.py
--- ../lilypond-1.0.16/scripts/ly2dvi32.py	Mon Oct  5 11:48:10 1998
+++ ./scripts/ly2dvi32.py	Thu Jan  1 00:00:00 1970
@@ -1,1117 +0,0 @@
-#!@PYTHON@
-
-"""
-=======================================================================
-LilyPond to dvi converter
-
-Features include Title information, paper size specification, and image
-orientation.  
-
-Usage: ly2dvi.py [OPTION]... [FILE]...
-Input: LilyPond source or LilyPond generated TeX files
-Output: DVI file
-=======================================================================
-"""
-
-name = 'ly2dvi'
-version = '0.0.5'
-errorlog = ''
-
-import sys
-import os
-import getopt
-import re
-import string
-import time
-import glob
-
-
-class Input:
-    """
-    This class handles all ly2dvi.py input file methods
-
-    Public methods:
-    
-    __init__()  Constructor
-    open(file)  Open a .ly file or .tex file using lilyinclude path
-    close()     Close current file
-    type()      Determine file type .ly (input) or .tex (output)
-    setVars()   Set title definitions found in .tex (output) file
-    """
-
-    #
-    # Constructors
-    #
-
-    def __init__(this):
-       this.__fd = None 
-
-    #
-    # open
-    #
-    def open(this,file):
-        """
-        open file and set private class variable __fd.  The search
-        sequence is: current directory followed by the directories
-        found in include property list.  Each directory is searched
-        for file, file.ly, and file.fly.
-        
-        input:  file   filename
-        output: void
-        error:  ExitNotFound Exception
-        """
-
-        for i in [''] + Props.get('include')[0:]:
-            ifile = os.path.join(i,file)
-            for j in ['','.ly','.fly']:
-                jfile = ifile+j
-                try:
-                    this.__fd = open( jfile, 'r' )
-                    return
-                except:
-                    pass
-        sys.exit('ExitNotFound', file)
-
-
-    #
-    # close
-    #
-    def close(this):
-        """
-        close file object __fd
-        
-        input:  void
-        output: void
-        error:  None
-        """
-        this.__fd.close()
-
-
-    #
-    # type
-    #
-    def type(this):
-        """
-        Determine input file type.  LilyPond source is 'input' type
-        and LilyPond generated TeX file is 'output' type
-
-        input:  void
-        output: 'input' | 'output'
-        error:  None
-        """
-
-        firstline = this.__fd.readline()
-        this.__fd.seek(0)
-        if  re.match('% Creator: GNU LilyPond [0-9]+[.0-9]+',firstline ):
-            return 'output'
-        else:
-            return 'source'
-
-
-    #
-    # setVars
-    #
-    def setVars(this):	
-        """
-        Search for properties in the current input file and set the
-        appropriate values.  The supported properties names are in
-        local variable varTable along with the property list
-        titledefs.
-
-        input:  void
-        output: None
-        error:  None
-        """
-
-        varTable = [
-            #   regexp              set method
-            #   ------              ----------
-            ( 'language',        Props.setLanguage ),
-            ( 'latexheaders',    Props.setHeader ),
-            ( 'orientation',     Props.setOrientation ),
-            ( 'paperpapersize',  Props.setPaperZize ),
-            ( 'papertextheight', Props.setTextHeight ),
-            ( 'paperlinewidth',  Props.setLineWidth ),
-            ( 'filename',        Props.setFilename ),
-            ]
-
-        titles={}
-        for line in this.__fd.readlines():
-            m=re.match('\\\\def\\\\mudela([\w]+){(.*)}',line)
-            if m:
-                for var in varTable:
-                    if m.group(1) == var[0]:
-                        var[1](m.group(2),'file')
-                        break
-                for var in Props.get('titledefs'):
-                    if m.group(1) == var:
-                        titles[var]=m.group(2)
-                        break
-        Props.setTitles(titles,'file')
-        this.__fd.seek(0)
-
-
-
-class TeXOutput:
-    """
-    This class handles all ly2dvi.py output file methods
-
-    private methods:
-     __mudelaDefs(opt)  Send title info to output file
-
-    Public methods:
-    __init__()  Constructor
-    write(str)  Write a string to output file 
-    start(file) Start the latex file
-    next()      Process next output file
-    end()       Finish latex file and run latex 
-    """
-
-    #
-    # constructor
-    #
-    def __init__(this):
-       this.__fd = None 
-       this.__base = ''
-       this.__outfile = ''
-
-    #
-    # __medelaDefs
-    #
-    def __mudelaDefs(this,opt):
-        """
-        Write titles to output
-
-        input:  opt   Supports header and subheader output
-        output: None
-        error:  None
-        """
-
-        titles = Props.get('titles')
-        for key in titles.keys():
-            this.write('%s\\mudela%s{%s}%%\n' % (opt,key,titles[key]))
-
-    #
-    # write
-    #
-    def write(this,str):
-        """
-        Write str to current output file
-
-        input:  str  String to write
-        output: None
-        error:  None
-        """
-        
-        this.__fd.write(str)
-
-    #
-    # start
-    #
-    def start(this,file):
-        """
-        Start LaTeX file.  Calculates the horizontal and vertical
-        margin using pagewidth, pageheight, linewidth, and textheight.
-        Creates temporary output filename and opens it for write.
-        Sends the LaTeX header information to output.  Lastly sends
-        the title information to output.
-
-        input:  file  output file name 
-        output: None
-        error:  None
-        """
-
-        now=time.asctime(time.localtime(time.time()))
-        linewidth = Props.get('linewidth')
-        textheight = Props.get('textheight')
-
-        if Props.get('orientation') == 'landscape':
-            pagewidth = Props.get('pageheight')
-            pageheight = Props.get('pagewidth')
-        else:
-            pageheight = Props.get('pageheight')
-            pagewidth = Props.get('pagewidth')
-                             
-        horizontalMarginArg =  ( (pagewidth - linewidth)/2 )   
-        verticalMarginArg =  ( (pageheight - textheight)/2  )
-
-        top="""\
-%% Creator: %s
-%% Automatically generated from  %s, %s
-
-\\documentclass[%s]{article}
-
-%s 
-\\usepackage{geometry}
-\\usepackage[latin1]{inputenc} 
-%%\\usepackage[T1]{fontenc} 
-%s 
-%%\\addtolength{\\oddsidemargin}{-1cm} 
-%%\\addtolength{\\topmargin}{-1cm} 
-%%\\setlength{\\textwidth}{%s} 
-%%\\setlength{\\textheight}{%s} 
-\\geometry{width=%spt, left=%spt, height=%spt, top=%spt} 
-\\input lilyponddefs 
-\\input titledefs 
-%s 
-\\begin{document}
-""" % ( program_id(), Props.get('filename'), now, Props.get('papersize'),
-        Props.get('language'), Props.get('pagenumber'), linewidth, textheight,
-        linewidth, horizontalMarginArg, textheight, verticalMarginArg,
-        Props.get('header') )
-        
-        pathcomp = os.path.splitext(file)
-        this.__base = pathcomp[0]
-        this.__outfile = '%s.%d%s' % (pathcomp[0], os.getpid(), pathcomp[1])
-        try:
-            this.__fd = open(this.__outfile,"w")
-        except:
-            sys.exit('ExitNoWrite', this.__outfile)
-        this.write(top)
-        this.__mudelaDefs('')
-        this.write("""\
-\\cmrtwenty% ugh
-\\makelilytitle
-""") 
-
-    #
-    # next
-    #
-    def next(this):
-        """
-        Write LaTeX subheader information to support more than one
-        score in a document.  Lastly send current title information to
-        output.
-
-        input:  None
-        output: None
-        error:  None
-        """
-
-        this.write("""\
-\\def\\theopus{}%
-\\def\\thepiece{}%
-\\def\\mudelaopus{}%
-\\def\\mudelapiece{}%
-""")
-        this.__mudelaDefs("\\def")
-        this.write("""\
-\\def\\theopus{\\mudelaopus}% ugh
-\\def\\thepiece{\\mudelapiece}%
-\\makelilypiecetitle
-""")
-
-
-    #
-    # end
-    #
-    def end(this):
-        """
-        Close output file and run latex on it.
-
-        input:  None
-        output: None
-        error:  ExitBadLatex Exception
-        """
-
-        outfile=this.__base + '.dvi'
-        if Props.get('output') != '':
-            outfile = os.path.join(Props.get('output'), outfile )
-            
-        this.write("""\
-\\vfill\\hfill{\\LilyIdString}
-\\end{document}
-""")
-        this.__fd.close()
-        if ( os.name == 'posix' ):
-            stat = os.system('latex \'\\nonstopmode \\input %s\'' %
-                             (this.__outfile))
-        else: # Windows shells don't eat the single quotes
-            stat = os.system('latex \\nonstopmode \\input %s' %
-                             (this.__outfile))
-        if stat:
-            sys.exit('ExitBadLatex')
-        if os.path.isfile(outfile):
-            os.remove(outfile)
-        os.rename(this.__base + '.' + str(os.getpid()) + '.dvi', outfile)
-        sys.stderr.write( '\n' + program_id() + ': dvi file name is %s\n\n'
-                   % (outfile))
-
-        if Props.get('postscript'):
-            psoutfile=this.__base + '.ps'
-            if Props.get('output') != '':
-                psoutfile = os.path.join(Props.get('output'), psoutfile )
-            stat = os.system('dvips -o %s %s 2>&1' % (psoutfile,outfile))
-            if stat:
-                sys.exit('ExitBadPostscript')
-            
-
-
-
-class Properties:
-    """
-    This class handles all ly2dvi.py property manipulation
-
-    Public methods:
-    
-    __init__()  Constructor
-    set<property> methods
-    """
-
-    def __init__(this):
-
-        #
-        # Following is the order of priority for property assignment.  The
-        # list is organized from lowest to highest priority.  Each
-        # assignment is overridden by the next requester in the list.
-        #
-        # Requester     Description
-        # ---------     -----------
-        # init          Initial default values
-        # file          The values found in the lilypond generated TeX files
-        # environment   Envrionment variables LILYINCLUDE, LILYPONDPREFIX
-        # rcfile        $LILYPONDPREFIX/share/lilypond/.lilyrc
-        # rcfile        $HOME/.lilyrc
-        # rcfile        ./.lilyrc
-        # commandline   command line arguments
-        # 
-        this.__overrideTable = {
-            'init'        : 0,
-            'file'        : 1,
-            'environment' : 2,
-            'rcfile'      : 3,
-            'commandline' : 4,
-            'program'     : 5
-            }
-
-        this.__roverrideTable = {} # reverse lookup used for debug
-        for i in this.__overrideTable.items():
-            this.__roverrideTable[i[1]]=i[0]
-        
-        this.__data = {
-            'pagewidth'    :  [597, this.__overrideTable['init']],
-            'pageheight'   :  [845, this.__overrideTable['init']],
-            'papersize'    :  ['a4paper', this.__overrideTable['init']],
-            'textheight'   :  [0, this.__overrideTable['init']],
-            'linewidth'    :  [0, this.__overrideTable['init']],
-            'orientation'  :  ['portrait', this.__overrideTable['init']],
-            'language'     :  ['%', this.__overrideTable['init']],
-            'include'      :  [[], this.__overrideTable['init']],
-            'debug'        :  [0, this.__overrideTable['init']],
-            'keeplilypond' :  [0, this.__overrideTable['init']],
-            'keeply2dvi'   :  [0, this.__overrideTable['init']],
-            'pagenumber'   :  ['%', this.__overrideTable['init']],
-            'separate'     :  [0, this.__overrideTable['init']],
-            'output'       :  ['', this.__overrideTable['init']],
-            'header'       :  ['%', this.__overrideTable['init']],
-            'dependencies' :  [0, this.__overrideTable['init']],
-            'root'         :  ['', this.__overrideTable['init']],
-            'tmp'          :  ['d:\tmp', this.__overrideTable['init']],
-            'filename'     :  ['', this.__overrideTable['init']],
-            'titledefs'    :  [[], this.__overrideTable['init']],
-            'titles'       :  [{}, this.__overrideTable['init']],
-            'lilyOutputFiles' :  [[], this.__overrideTable['init']],
-            'postscript'   :  [0, this.__overrideTable['init']],
-            }
-
-        #
-        # Try to set root and HOME first before calling rcfile
-        #
-        if os.environ.has_key('LILYPONDPREFIX'):
-            this.setRoot(os.environ['LILYPONDPREFIX'], 'environment')
-        else:
-            p=os.path.split(sys.argv[0])
-            p=os.path.split(p[0])
-            this.setRoot(p[0],'init')
-
-        if not os.environ.has_key('HOME'):
-            if os.environ.has_key('HOMEDRIVE') and \
-                 os.environ.has_key('HOMEPATH'):
-                os.environ['HOME'] = os.environ['HOMEDRIVE'] + \
-                                     os.environ['HOMEPATH']
-            else:
-                os.environ['HOME'] = os.curdir
-
-        this.rcfile() # Read initialization file(s)
-
-        if os.environ.has_key('LILYINCLUDE'):
-            tmp=this.get('include')
-            for s in string.split(os.environ['LILYINCLUDE'],os.pathsep):
-                tmp.append(s)
-            this.__set('include', tmp, 'environment')    
-
-
-        t=''
-	if os.environ.has_key ('TEXINPUTS'):
-		t = os.pathsep + os.environ['TEXINPUTS']
-        os.environ['TEXINPUTS'] = os.path.join(this.get('root'), 'texmf',
-					       'tex', 'lilypond' ) + t
-
-        t=''
-	if os.environ.has_key ('MFINPUTS'):
-		t = os.pathsep + os.environ['MFINPUTS']
-        os.environ['MFINPUTS'] = os.path.join(this.get('root'), 'texmf',
-					       'mf', 'public', 'lilypond' ) + t
-
-        if os.environ.has_key('TMP'):
-            this.__set('tmp',os.environ['TMP'],'environment')
-
-        
-	fd=this.get_texfile_path ('titledefs.tex')
-        mudefs=[]    
-
-        for line in fd.readlines():
-            m=re.match('\\\\newcommand\*{\\\\mudela([\w]+)}',line)
-            if m:
-                mudefs.append(m.group(1))
-	fd.close
-        this.__set('titledefs', mudefs, 'init')
-
-    #
-    # __set
-    #
-    def __set(this,var,value,requester):
-        """
-        All of the set methods call this to set a property.  If the value
-        was last set by a requestor of lesser priority the new value is
-        assigned, else the old value has priority and is unchanged.
-        """
-
-        if this.__overrideTable[requester] < this.__data[var][1]:
-            return 0
-        else:
-            this.__data[var] = [value, this.__overrideTable[requester]]
-
-    #
-    # get
-    #
-    def get(this,var):
-        """
-        All of the get methods call this to get a property value.  List
-        variable types are return by value to facilitate an append operation.
-        """
-
-        if var == 'include' or var == 'lilyOutputFiles':
-            return this.__data[var][0][0:]  # return a copy not a ref
-        else:
-            return this.__data[var][0]
-
-    #
-    # get_texfile_path
-    #
-    def get_texfile_path (this, var):
-        """
-        locate and open titledefs.tex file
-        """
-
-        if os.name == 'nt':
-            path = os.path.join(this.get('root'), 'texmf', 'tex',
-                                'lilypond', var)
-        else:
-            path =''
-            cmd =('kpsewhich tex %s %s' % (var,errorlog))
-            pipe = os.popen (cmd, 'r')
-            path = pipe.readline ()[:-1] # chop off \n
-            return_status =  pipe.close()
-            if return_status and not path:
-                path = os.path.join(this.get('root'), 'texmf', 'tex',
-                                    'lilypond', var)
-	fd = open(path, 'r')
-        return fd
-
-
-    #
-    # Read rc file
-    #
-    def rcfile(this):
-	"""
-        Read initialization file(s)
-        """
-        varTable = [
-            #   name              set method
-            #   ----              ----------
-            ( 'DEBUG',          this.setDebug ),
-            ( 'DEPENDENCIES',   this.setDependencies ),
-            ( 'KEEPLILYPOND',   this.setKeeplilypond ),
-            ( 'KEEPLY2DVI',     this.setKeeply2dvi ),
-            ( 'LANGUAGE',       this.setLanguage ),
-            ( 'LATEXHF',        this.setHeader ),
-            ( 'LILYINCLUDE',    this.setInclude ),
-            ( 'LILYPONDPREFIX', this.setRoot ),
-            ( 'NONUMBER',       this.setNonumber ),
-            ( 'ORIENTATION',    this.setOrientation ),
-            ( 'OUTPUTDIR',      this.setOutput ),
-            ( 'PAPERSIZE',      this.setPaperZize ),
-            ( 'PHEIGHT',        this.setTextHeight ),
-            ( 'POSTSCRIPT',     this.setPostscript ),
-            ( 'PWIDTH',         this.setLineWidth ),
-            ( 'SEPARATE',       this.setSeparate ),
-            ( 'TMP',            this.setTmp ),
-            ]
-
-        if ( os.name == 'posix' ):
-            dotFilename='.lilyrc'
-        else: # Windows apps like edit choke on .lilyrc
-            dotFilename='_lilyrc'
-
-	for d in [os.path.join(this.get('root'),'share','lilypond'), \
-                  os.environ['HOME'], os.curdir ]:
-	    file=os.path.join(d,dotFilename)
-	    try:
-		fd = open( file, 'r' )
-	    except:
-		continue
-	    
-            for line in fd.readlines():
-		if re.match('#.*',line):
-		    continue
-		m=re.search('([\w]+)=(.*)',line)
-		if m:
-                    for var in varTable:
-                        if m.group(1) == var[0]:
-                            var[1](m.group(2),'rcfile')
-                            break
-	    fd.close
-
-    #
-    # setPaperZize
-    #
-    def setPaperZize(this,size,requester):
-        """
-        Set paper size properties
-        """
-
-        paperTable = [
-            # regex          width    height      name
-            # -----          -----    ------      ----
-            ( 'a0.*',        2389,    3381,    'a0paper' ),
-            ( 'a1$|a1p.*',   1690,    2389,    'a1paper' ),
-            ( 'a2.*',        1194,    1690,    'a2paper' ),
-            ( 'a3.*',        845,     1194,    'a3paper' ),
-            ( 'a4.*',        597,     845,     'a4paper' ),
-	    ( 'a5.*',        423,     597,     'a5paper' ),
-            ( 'a6.*',        298,     423,     'a6paper' ),
-            ( 'a7.*',        211,     298,     'a7paper' ),
-            ( 'a8.*',        305,     211,     'a8paper' ),
-            ( 'a9.*',        105,     305,     'a9paper' ),
-            ( 'a10.*',       74,      105,     'a10paper' ),
-            ( 'b0.*',        2847,    4023,    'b0paper' ),
-            ( 'b1.*',        2012,    2847,    'b1paper' ),
-            ( 'b2.*',        1423,    2012,    'b2paper' ),
-            ( 'b3.*',        1006,    1423,    'b3paper' ),
-            ( 'b4.*',        712,     1006,    'b4paper' ),
-            ( 'b5.*',        503,     712,     'b5paper' ),
-            ( 'archA$',      650,     867,     'archApaper' ),
-            ( 'archB$',      867,     1301,    'archBpaper' ),
-            ( 'archC$',      1301,    1734,    'archCpaper' ),
-            ( 'archD$',      1734,    2602,    'archDpaper' ),
-            ( 'archE$',      2602,    3469,    'archEpaper' ),
-            ( 'flsa$|flse$', 614,     940,     'flsapaper' ),
-            ( 'halfletter$', 397,     614,     'halfletterpaper' ),
-            ( 'ledger$',     1229,    795,     'ledgerpaper' ),
-            ( 'legal$',      614,     1012,    'legalpaper' ),
-            ( 'letter$',     614,     795,     'letterpaper' ),
-            ( 'note$',       542,     723,     'notepaper' )
-            ]
-
-        found=0
-        for paper in paperTable:
-            if re.match(paper[0],size):
-                found=1
-                this.__set('pagewidth',paper[1],requester)
-                this.__set('pageheight',paper[2],requester)
-                this.__set('papersize',paper[3],requester)
-                break
-
-        if not found:
-            sys.exit('ExitBadPaper',size)
-
-    #
-    # setTextHeight
-    #
-    def setTextHeight(this,size,requester):
-        """
-        Set textheight property
-        """
-
-	m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
-	if m:
-	    if m.group(2) == 'cm':
-		this.__set('textheight',\
-                           float(m.group(1)) * 72.27/2.54, requester )
-	    elif m.group(2) == 'mm':
-		this.__set('textheight',\
-                           float(m.group(1)) * 72.27/25.4, requester )
-	    elif m.group(2) == 'pt':
-		this.__set('textheight', float(m.group(1)), requester )
-	    elif m.group(2) == '':
-		this.__set('textheight', float(m.group(1)), requester )
-	    else:
-		sys.exit('ExitBadHeight', m.group(2))
-	else:		
-	    sys.exit('ExitBadHeight', size)
-
-    #
-    # setLineWidth
-    #
-    def setLineWidth(this,size,requester):
-        """
-        Set linewidth propery
-        """
-
-	m=re.match('([0-9][.0-9]*)(cm|mm|pt|$)',size)
-	if m:
-	    if m.group(2) == 'cm':
-		this.__set('linewidth', \
-		float(m.group(1)) * 72.27/2.54, requester )
-	    elif m.group(2) == 'mm':
-		this.__set('linewidth', \
-		float(m.group(1)) * 72.27/25.4, requester )
-	    elif m.group(2) == 'pt':
-		this.__set('linewidth', float(m.group(1)), requester )
-	    elif m.group(2) == '':
-		this.__set('linewidth', float(m.group(1)), requester )
-	    else:
-		sys.exit('ExitBadWidth', m.group(2))
-	else:		
-	    sys.exit('ExitBadWidth', size)
-
-    #
-    # setOrientation
-    #
-    def setOrientation(this,orient,requester):
-        """
-        Set orientation property
-        """
-
-	if orient == 'landscape' or orient == 'portrait':
-	    this.__set('orientation', orient, requester )
-	else:
-	    sys.exit('ExitBadOrient', orient)
-
-    #
-    # setLanguage
-    #
-    def setLanguage(this,lang,requester):
-        """
-        Set language property
-        """
-
-	this.__set('language', '\\usepackage[%s]{babel}' % (lang), requester )
-
-    #
-    # setInclude
-    #
-    def setInclude(this,inc, requester):
-        """
-        Append an include path
-        """
-
-        tmp = this.get('include')
-        tmp.append(inc)
-        this.__set('include', tmp, requester )
-
-    #
-    # setDebug
-    #
-    def setDebug(this,value,requester):
-        """
-        Set or Clear debug flag
-        """
-
-        if int(value) == 1:
-            this.__set('debug',1,requester)
-        else:
-            this.__set('debug',0,requester)
-
-    #
-    # setKeeplilypond
-    #
-    def setKeeplilypond(this, value, requester):	
-        """
-        Set or Clear keeplilypond flag
-        """
-
-        if int(value) == 1:
-            this.__set('keeplilypond',1,requester)
-        else:
-            this.__set('keeplilypond',0,requester)
-
-    #
-    # setKeeply2dvi
-    #
-    def setKeeply2dvi(this, value, requester):	
-        """
-        Set or Clear keeply2dvi flag
-        """
-
-        if int(value) == 1:
-            this.__set('keeply2dvi',1,requester)
-        else:
-            this.__set('keeply2dvi',0,requester)
-
-    #
-    # setNonumber 
-    #
-    def setNonumber(this, value, requester):	
-        """
-        Set nonumber flag
-        """
-
-        if int(value) == 1:
-            this.__set('pagenumber',1,requester)
-        else:
-            this.__set('pagenumber',0,requester)
-
-    #
-    # setSeparate
-    #
-    def setSeparate(this, value, requester):	
-        """
-        Set or Clear separate flag
-        """
-
-        if int(value) == 1:
-            this.__set('separate',1,requester)
-        else:
-            this.__set('separate',0,requester)
-
-    #
-    # Set output directory name
-    #
-    def setOutput(this,out,requester):
-	this.__set('output',out,requester)
-
-    #
-    # Set latex header name
-    #
-    def setHeader(this,head, requester):
-	this.__set('header',head,requester)
-
-    #
-    # Set or Clear Dependencies flag to generate makefile dependencies
-    #
-    def setDependencies(this, requester):	
-        """
-        Set or Clear dependencies flag
-        """
-
-        if int(value) == 1:
-            this.__set('dependencies',1,requester)
-        else:
-            this.__set('dependencies',0,requester)
-
-    #
-    # Set tmp directory
-    #
-    def setTmp(this,dir, requester):	
-	this.__set('tmp',dir,requester)
-
-    #
-    # Set mudela source file name
-    #
-    def setFilename(this,file, requester):	
-	this.__set('filename',file,requester)
-
-    #
-    # Set title commands
-    #
-    def setTitles(this,titles, requester):	
-	this.__set('titles',titles,requester)
-
-    #
-    # Set title commands
-    #
-    def addLilyOutputFiles(this,filelist,requester):
-        """
-        Add a to the lily output list
-        """
-
-        tmp = this.get('lilyOutputFiles')
-        tmp = tmp + filelist
-        this.__set('lilyOutputFiles',tmp,requester)
-
-    #
-    # Set/Clear postscript flag
-    #
-    def setPostscript(this,value,requester):
-        """
-        Set postscript flag
-        """
-
-        if int(value) == 1:
-            this.__set('postscript',1,requester)
-        else:
-            this.__set('postscript',0,requester)
-
-    #
-    # Set root
-    #
-    def setRoot(this,path, requester):	
-        """
-        Set lilypond root directory
-        """
-
-        os.environ['LILYPONDPREFIX'] = path
-	this.__set('root',path,requester)
-
-    #
-    # printProps
-    #
-    def printProps(this):
-        """
-        Print properties
-        """
-        
-        for key in this.__data.keys():
-            print "%s <%s>:<%s>" % (key,this.get(key),
-                                    this.__roverrideTable[this.__data[key][1]])
-
-
-
-#
-# Misc functions
-#
-
-def getLilyopts():
-    inc = ''	
-    if len(Props.get('include')) > 0: 
-        inc = '-I ' + string.join(Props.get('include'),os.pathsep)
-    else:
-
-        if Props.get('dependencies'):
-            dep=' -d'
-        else:
-            dep=''
-	return inc + dep
-    return inc
-
-def writeLilylog(contents):
-    if Props.get('keeplilypond'):
-        file='lilylog.' + str(os.getpid())
-        output = Props.get('output')
-        if output != '':
-            file = os.path.join( output, file )
-        try:
-            fd = open( file, 'w' )
-        except:
-            sys.exit('ExitNoWrite', file)
-        fd.write(contents)
-        fd.close()
-
-def getTeXFile(contents):
-    texfiles=[]
-    for line in string.split(contents,'\n'):
-        m = re.search('^TeX output to (.+)\.\.\.', line)
-        if m:
-            texfiles.append(m.group(1))
-
-    if texfiles == []:
-        sys.exit('ExitNoTeXName')
-    else:
-        return texfiles
-
-def program_id ():
-    return name + ' ' + version;
-
-
-def mailaddress():
-    try:
-	return os.environ['MAILADDRESS']
-    except KeyError:
-	return '(address unknown)'
-
-
-def identify ():
-    sys.stderr.write (program_id () + '\n')
-
-def help ():
-    sys.stderr.write (
-        'Generate dvi file from mudela or lilypond output\n'
-        'Usage: ' + name + ' [OPTION]... [FILE]...\n'
-        '\n'
-        'Options:\n'
-        '  -D,--debug           increase verbosity\n'
-        '  -F,--headers=        name of additional LaTeX headers file\n'
-        '  -H,--Height=         set paper height (points) (see manual page)\n'
-        '  -I,--include=DIR     add DIR to LilyPond\'s search path\n'
-        '  -K,--keeplilypond    keep lilypond output files\n'
-        '  -L,--landscape       set landscape orientation\n'
-        '  -N,--nonumber        switch off page numbering\n'
-        '  -O,--orientation=    set orientation (obsolete - use -L instead)\n'
-        '  -P,--postscript      generate postscript file\n'
-        '  -W,--Width=          set paper width (points) (see manual page)\n'
-        '  -d,--dependencies    tell lilypond make a dependencies file\n'
-        '  -h,--help            this help text\n'
-        '  -k,--keeply2dvi      keep ly2dvi output files\n'
-        '  -l,--language=       give LaTeX language (babel)\n'
-        '  -o,--output=         set output directory\n'
-        '  -p,--papersize=      give LaTeX papersize (eg. a4)\n'
-        '  -s,--separate        run all files separately through LaTeX\n'
-        '\n'
-        'files may be (a mix of) input to or output from lilypond(1)\n'
-        )
-
-
-
-#
-# main
-#
-
-def main():
-    """Generate dvi files from lilypond source/output"""
-
-    infile = Input()
-    outfile = TeXOutput()
-    texInputFiles=[]
-
-    (options, files) = getopt.getopt (sys.argv[1:],
-                                      'DF:H:I:KLNPW:dhkl:o:p:s',
-                                      ['debug', 'headers=', 'Height=',
-                                       'include=', 'keeplilypond', 'landscape',
-                                       'nonumber', 'Width=', 'dependencies',
-                                       'help', 'keeply2dvi', 'language=',
-                                       'output=', 'papersize=', 'separate',
-                                       'postscript'])
-    for opt in options:
-        o = opt[0]
-        a = opt[1]
-        if o == '--debug' or o == '-D':
-	    Props.setDebug(1,'commandline')
-        elif o == '--headers' or o == '-F':
-	    Props.setHeader(a,'commandline')
-        elif o == '--include' or o == '-I':
-	    Props.setInclude(a,'commandline')
-        elif o == '--Height' or o == '-H':
-	    Props.setTextHeight(a,'commandline')
-        elif o == '--keeplilypond' or o == '-K':
-	    Props.setKeeplilypond(1,'commandline')
-        elif o == '--landscape' or o == '-L':
-	    Props.setOrientation('landscape','commandline')
-        elif o == '--nonumber' or o == '-N':
-	    Props.setNonumber('commandline')
-        elif o == '--Width' or o == '-W':
-	    Props.setLineWidth(a,'commandline')
-        elif o == '--dependencies' or o == '-d':
-	    Props.setDependencies(1,'commandline')
-        elif o == '--help' or o == '-h':
-            help()
-            return 0
-        elif o == '--keeply2dvi' or o == '-k':
-	    Props.setKeeply2dvi(1,'commandline')
-        elif o == '--language' or o == '-l':
-	    Props.setLanguage(a,'commandline')
-        elif o == '--output' or o == '-o':
-	    Props.setOutput(a,'commandline')
-        elif o == '--papersize' or o == '-p':
-	    Props.setPaperZize(a,'commandline')
-        elif o == '--separate' or o == '-s':
-	    Props.setSeparate(1,'commandline')
-        elif o == '--postscript' or o == '-P':
-	    Props.setPostscript(1,'commandline')
-
-    if len(files):
-        for file in files:
-            infile.open(file)
-            type = infile.type()
-            infile.close()
-            if type == 'source':
-                cmd = 'lilypond %s %s 2>&1' % (getLilyopts(), file)
-                fd = os.popen( cmd , 'r' )
-                log = ''
-                line=fd.readline()
-                while line:
-                    log = log + line
-                    sys.stderr.write( line )
-                    line=fd.readline()
-                stat = fd.close()
-                if stat:
-                    sys.exit('ExitBadLily', cmd )
-                texFiles=getTeXFile(log)
-                writeLilylog(log)
-                Props.addLilyOutputFiles(texFiles,'program')
-                texInputFiles = texInputFiles + texFiles
-            else:
-                texInputFiles.append(file)
-
-        firstfile=1
-        for file in texInputFiles:
-            infile.open(file)
-            infile.setVars() # first pass set variables
-            infile.close()
-            if Props.get('debug'):
-                Props.printProps()
-            if firstfile:
-                outfile.start(file)
-            else:
-                outfile.next()
-            outfile.write("""\
-\\input{%s}
-""" % (file))
-            if Props.get('separate'):
-                outfile.end()
-            else:
-                firstfile=0
-        if not Props.get('separate'):
-            outfile.end()
-    else:
-        help()
-        sys.exit('ExitBadArgs','No files specified')
-
-#
-# Exit values
-#
-ExitTable = {
-    'ExitInterupt'         : ['Ouch!', 1 ],
-    'ExitBadArgs'          : ['Wrong number of arguments', 2 ],
-    'ExitNotFound'         : ['File not found', 3 ],
-    'ExitBadPaper'         : ['Unknown papersize', 4 ],
-    'ExitBadHeight'        : ['Invalid Height specification', 5 ],
-    'ExitBadWidth'         : ['Invalid Width specification', 6 ],
-    'ExitBadOrient'        : ['Invalid Orientation specification', 7 ],
-    'ExitNoWrite'          : ['Permission denied', 8 ],
-    'ExitNoTeXName'        : ['hmm, I could not find an output file name', 9 ],
-    'ExitBadLily'          : ['Lilypond failed', 10 ],
-    'ExitBadLatex'         : ['Latex failed', 11 ],
-    'ExitBadPostscript'    : ['Postscript failed', 12 ],
-    'ExitUnknown'          : ['Unknown Exit Code', 20 ],
-    }
-
-def cleanup():
-    lilyfiles = []
-    tmpfiles = []
-    if not Props.get('keeplilypond'):
-        lilyfiles = Props.get('lilyOutputFiles')
-    if not Props.get('keeply2dvi'):
-        tmpfiles = glob.glob('*.' + str(os.getpid()) + '.*' )
-    for file in lilyfiles + tmpfiles:
-        if os.path.isfile(file):
-            os.remove(file)
-
-
-identify()
-Props = Properties()
-
-try:
-    main()
-
-except KeyboardInterrupt:
-    print ExitTable['ExitInterupt'][0]
-    cleanup()
-    sys.exit(ExitTable['ExitInterupt'][1])
-
-except SystemExit, errno:
-    if ExitTable.has_key(errno.args[0]):
-        msg = ExitTable[errno.args[0]]
-    else:
-        msg = ExitTable['ExitUnknown']
-    if len(errno.args) > 1:  
-        sys.stderr.write( '%s: %s: %s\n' % (name, msg[0], errno.args[1]))
-    else:
-        sys.stderr.write( '%s %s\n' % (name, msg[0]))
-    if Props.get('debug'):
-        Props.printProps()
-    cleanup()
-    sys.exit(msg[1])
-else:
-    cleanup()
diff -urN ../lilypond-1.0.16/scripts/mudela-book.py ./scripts/mudela-book.py
--- ../lilypond-1.0.16/scripts/mudela-book.py	Tue Sep 29 16:00:31 1998
+++ ./scripts/mudela-book.py	Mon Oct 19 11:09:06 1998
@@ -9,10 +9,9 @@
 
 import os
 import string
-import regex
+import re
 import getopt
 import sys
-import regsub
 
 outdir = 'out/'
 program_version = '0.3'
@@ -70,7 +69,7 @@
 		self.file.write ('default_paper = \\paper { \\paper_%s\n linewidth = -15.\\cm; }\n' % s)
 		
 		if self.fragment:
-			self.file.write ('\\score { \\melodic { ')
+			self.file.write ('\\score { \\notes { ')
 
 	def write (self,s):
 		self.file.write (s)
@@ -133,16 +132,16 @@
 
 
 
-begin_mudela_re = regex.compile ('^ *\\\\begin{mudela}')
-begin_mudela_opts_re = regex.compile ('^ *\\\\begin{mudela}\[\(.*\)\]')
-end_mudela_re = regex.compile ('^ *\\\\end{mudela}')
-section_re = regex.compile ('\\\\section')
-chapter_re = regex.compile ('\\\\chapter')
-input_re = regex.compile ('^\\\\input[ \t\n]+\\(.*\\)$')
+begin_mudela_re = re.compile ('^ *\\\\begin{mudela}')
+begin_mudela_opts_re = re.compile ('^ *\\\\begin{mudela}\[(.*)\]')
+end_mudela_re = re.compile ('^ *\\\\end{mudela}')
+section_re = re.compile ('\\\\section')
+chapter_re = re.compile ('\\\\chapter')
+input_re = re.compile ('^\\\\input[ \t\n]+(.*)$')
 
 class Tex_input:
 	def __init__ (self,name):
-		if regex.search ('\\.[^/\\\\]+',name) == -1:
+		if not re.search ('\\.[^/\\\\]+',name):
 			name = name + '.tex'
 		print 'opening %s' % name
 		self.filename = name
@@ -152,8 +151,9 @@
 		lines = self.infile.readlines ()
 		(retlines, retdeps) = ([],[self.filename])
 		for line in lines:
-			if input_re.search (line) <> -1:
-				t = Tex_input (input_re.group (1))
+			m = input_re.search (line)
+			if m:
+				t = Tex_input (m.group (1))
 				ls =t.get_lines ()
 				retlines = retlines + ls[0]
 				retdeps = retdeps + ls[1]
@@ -175,9 +175,9 @@
 		self.mudela = None
 		self.deps = []
 	def set_sections (self, l):
-		if section_re.search (l) <> -1:
+		if section_re.search (l):
 			self.section = self.section + 1
-		if chapter_re.search (l) <> -1:
+		if chapter_re.search (l):
 			self.section = 0
 			self.chapter = self.chapter + 1
 
@@ -191,9 +191,10 @@
 	def do_it(self):
 		(lines, self.deps) = self.get_lines ()
 		for line in lines:
-			if begin_mudela_re.search (line) <> -1:
-				if begin_mudela_opts_re.search (line) <> -1:
-					opts = begin_mudela_opts_re.group (1)
+			if begin_mudela_re.search (line):
+				m =begin_mudela_opts_re.search (line) 
+				if m:
+					opts = m.group (1)
 				else:
 					opts = ''
 				optlist = string.split (opts, ',')
@@ -214,7 +215,7 @@
 
 
 				continue
-			elif end_mudela_re.search (line) <> -1:
+			elif end_mudela_re.search (line):
 				self.mudela.close ()
 				self.mudtex.close_mudela ()
 				self.mudela = None
diff -urN ../lilypond-1.0.16/stepmake/TODO ./stepmake/TODO
--- ../lilypond-1.0.16/stepmake/TODO	Tue Sep 15 18:22:43 1998
+++ ./stepmake/TODO	Mon Oct 19 11:09:06 1998
@@ -1,5 +1,7 @@
 	* urg, fix flower.py dirname, tarball etc. (package-diff, release)
 
+	* use RE iso REG{SUB,EX} for python stuff.
+
 	* (re-)enable use outside of make system, e.g.
 	  
 	  - /usr/bin/make-patch for direct use on tarballs
diff -urN ../lilypond-1.0.16/stepmake/stepmake/generic-targets.make ./stepmake/stepmake/generic-targets.make
--- ../lilypond-1.0.16/stepmake/stepmake/generic-targets.make	Fri Oct  9 15:51:31 1998
+++ ./stepmake/stepmake/generic-targets.make	Fri Oct 16 15:28:03 1998
@@ -84,12 +84,6 @@
 	(cd $(outdir); sh ../$(step-bindir)/tar-docxx.sh $(package)-$(TOPLEVEL_VERSION).tar.gz)
 
 
-update-state-vector:
-ifneq ($(strip $(state-vector)),)
-	if [ "`tail -1 $(state-vector)`" != "$(TOPLEVEL_VERSION)" ]; then\
-	  echo $(TOPLEVEL_VERSION) >> $(state-vector); \
-	fi
-endif
 
 local-dist: $(DIST_FILES) $(OUT_DIST_FILES) $(NON_ESSENTIAL_DIST_FILES)
 	mkdir -p $(distdir)/$(localdir)
diff -urN ../lilypond-1.0.16/stepmake/stepmake/toplevel-targets.make ./stepmake/stepmake/toplevel-targets.make
--- ../lilypond-1.0.16/stepmake/stepmake/toplevel-targets.make	Tue Sep 15 18:22:43 1998
+++ ./stepmake/stepmake/toplevel-targets.make	Fri Oct 16 15:28:04 1998
@@ -27,7 +27,6 @@
 	$(MAKE) CONFIGSUFFIX='www' clean
 
 dist:
-	$(MAKE) update-state-vector
 	rm -rf $(distdir)
 	$(MAKE) local-dist $(distdir)
 	chmod -R a+r $(distdir)
diff -urN ../lilypond-1.0.16/test/hash.cc ./test/hash.cc
--- ../lilypond-1.0.16/test/hash.cc	Thu Jan  1 00:00:00 1970
+++ ./test/hash.cc	Mon Oct 19 11:09:06 1998
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <iostream.h>
+#include "dictionary-iter.hh"
+
+
+
+main ()
+{
+  Dictionary<String> *dict = new Dictionary<String>;
+  
+  char s[1000];
+
+  dict->elem("foo") = "bar";
+  dict->elem("bla") = "ba";
+  dict->elem("blo") = "bar";
+  
+  while (gets (s))
+    {
+      String str (s);
+
+      int l = str.length_i ();
+
+      dict->elem (str.left_str (l/2)) = str.right_str (l/2);
+    }
+
+  int i=1000;
+  while (i--)
+    {
+      Dictionary<String> *dict2=new Dictionary<String> (*dict);
+      delete dict;
+      dict = dict2;
+    }
+
+  for (Dictionary_iter<String> i (*dict); i.ok (); i++)
+    {
+      cout << i.key () << " == " << i.val () << endl;
+      cout << "elem_b: " << dict->elem_b (i.key ()) << ", key " << i.key () << " val " << dict->elem (i.key ()) <<endl;
+    }
+}
