]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 0.0.27 release/0.0.27
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 4 Feb 1997 22:32:27 +0000 (23:32 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 4 Feb 1997 22:32:27 +0000 (23:32 +0100)
129 files changed:
Documentation/README.pod
Documentation/lilyinput.pod
Makefile
NEWS
Sources.make
TODO
Variables.make
clearlily
configure
deps/Makefile
flower/NEWS
flower/TODO
flower/Variables.make
flower/dstream.cc
flower/dstream.hh
flower/interval.hh
flower/interval.tcc
flower/path.hh
flower/real.hh
flower/string.cc
genheader
hdr/Makefile
hdr/accidental.hh [deleted file]
hdr/complexstaff.hh
hdr/complexwalker.hh
hdr/const.hh
hdr/debug.hh
hdr/globvars.hh [deleted file]
hdr/identifier.hh
hdr/identparent.hh
hdr/inputcommand.hh
hdr/inputcommands.hh
hdr/inputmusic.hh
hdr/inputscore.hh
hdr/lexer.hh
hdr/main.hh
hdr/misc.hh
hdr/molecule.hh
hdr/notehead.hh
hdr/parseconstruct.hh
hdr/proto.hh
hdr/pstaff.hh
hdr/register.hh
hdr/request.hh
hdr/score.hh
hdr/scoreline.hh
hdr/script.hh
hdr/scriptdef.hh
hdr/staffline.hh
hdr/stem.hh
hdr/textdef.hh
hdr/textitem.hh
hdr/voice.hh
hdr/voicegroup.hh [new file with mode: 0644]
init/Makefile
init/bare.ini [new file with mode: 0644]
input/Makefile
input/cadenza.ly
input/error.ly [new file with mode: 0644]
input/kortjakje.ly
input/maartje.ly
input/martien.ly [new file with mode: 0644]
input/martien.tex [new file with mode: 0644]
input/mlalt.ly [new file with mode: 0644]
input/mlcello.ly [new file with mode: 0644]
input/mlvio1.ly [new file with mode: 0644]
input/mlvio2.ly [new file with mode: 0644]
input/pavane.ly
input/pavane.tex [new file with mode: 0644]
input/scales.ly
input/scsii-menuetto.tex [new file with mode: 0644]
input/standchen.ly
input/standchen.tex [new file with mode: 0644]
input/twinkle.ly
input/wohltemperirt.ly [new file with mode: 0644]
lilyponddefs.tex
pavane.tex [deleted file]
src/Makefile
src/beam.cc
src/complexmelodicstaff.cc [deleted file]
src/complexprint.cc
src/complexstaff.cc
src/complexwalker.cc
src/grouping.cc
src/groupregs.cc
src/inputcommand.cc
src/inputcommands.cc
src/inputmusic.cc
src/inputscore.cc
src/inputstaff.cc
src/lexer.l
src/lexerinit.cc
src/lookup.cc
src/lyriccolumn.cc
src/lyricitem.cc
src/main.cc
src/melodicstaff.cc
src/misc.cc
src/mylexer.cc
src/note.cc
src/notehead.cc
src/parser.y
src/register.cc
src/request.cc
src/score.cc
src/scores.cc
src/script.cc
src/scriptdef.cc
src/simplestaff.cc
src/simplewalker.cc
src/source.cc [new file with mode: 0644]
src/sourcefile.cc [new file with mode: 0644]
src/staff.cc
src/staffcommands.cc
src/stem.cc
src/table.cc [deleted file]
src/template3.cc
src/template4.cc
src/template6.cc
src/texbeam.cc
src/texslur.cc
src/textdef.cc
src/timedescription.cc
src/voice.cc
src/voicegroup.cc
src/voiceregs.cc
src/warn.cc
src/windhoos-suck-suck-suck-thank-you-cygnus.cc [new file with mode: 0644]
standchen.tex [deleted file]

index 17c75baa815effd5d8e5ef7d3cdc32acb2263ade..973bab25c1da95d5b25a5bcec8644770a5650e25 100644 (file)
@@ -1,6 +1,6 @@
 =head1 NAME
 
-Lilypond - a music typesetter
+LilyPond - a music typesetter
 
 =head1 SYNOPSIS
 
@@ -29,8 +29,11 @@ multiple stafftypes (melodic, rhythmic)
 
 =item *
 beams, slurs, chords, super/subscripts (accents and text),
-triplets,  general n-plet (triplet,
-quadruplets, etc.), lyrics
+triplets, general n-plet (triplet, quadruplets, etc.), lyrics
+
+=item *
+multiple voices within one staff; beams optionally shared
+between voices.
 
 =item *
 multiple scores within one input file. Each score is output to
@@ -136,6 +139,13 @@ Set the default output file to F<FILE>.
 
 Show a summary of usage
 
+=item  B<--init, -i>
+
+set init file (default: symbol.ini)
+
+=item B<--include, -I>
+add to file search path.
+
 =back
 
 =head1 
@@ -196,8 +206,6 @@ The MusixTeX fonts. (I use version T.59)
 Do:
 
        tar zxf flower-1.11.9.tar.gz
-       mv flower-1.11.9 flower
-       cd flower; make; cd ..
        tar zxf lilypond-1.2.13.tar.gz
        cd lilypond-1.2.13
        configure
@@ -236,8 +244,8 @@ named return values
 Han-Wen Nienhuys <hanwen@stack.nl>, Main author
 
 =item *
-Jan Nieuwenhuizen <jan@digicash.com>, Lyrics, bits of
-FlowerLib, general comments.
+Jan Nieuwenhuizen <jan@digicash.com>, Context errors, Lyrics,
+bits of FlowerLib, general comments.
 
 =item *
 Mats Bengtsson <matsb@s3.kth.se>, bugfixes, testing, general comments.
@@ -260,11 +268,10 @@ discouraged; this is what I type in my xterm:
 
 This is what the output looks like over here:
 
-       hw:~/musix/spacer$ lilypond input/maartje
-       LilyPond 0.0.23/FlowerLib 1.0.20. Compile: Jan 20 1997, 00:51:06 (g++ 2.7.2)
+       hw:~/musix/spacer$ lilypond input/maartje.ly
+       LilyPond 0.0.27/FlowerLib 1.0.23. Compile: Feb  5 1997, 00:28:13 (g++ 2.7.2)
        Parsing ... [./init//symbol.ini[./init/dutch.ini][./init/script.ini][./init/table_sixteen.ini]][./input/maartje.ly]
-       Processing music ... warning: process_requests(): beamed note should have a stem (t = 5/8)
-       Preprocessing ... Calculating ... Postprocessing ... 
+       Processing music ... Preprocessing ... Calculating ... Postprocessing ... 
        output to lelie.out...
 
        hw:~/musix/spacer$ tex test
@@ -345,9 +352,9 @@ failed, obviously).
 After long and hard thinking, I came up with an algorithm for the
 horizontal spacing of multiple staffs (april 1996) I coded it (and did
 not test it). After starting with this fundamental piece, I slowly
-added the stages which come before spacing, and after a few months, I
-had a first working version, (october 1996).  I announced Patchlevel 0.0.7
-(or 8) to the mutex list after asking some technical details on
-spacing; it was downloaded approximately 4 times.  Then I got the hang
-of it, and in the subsequent two months, I coded until it had
-doubled in size (pl 23).
+added the stages which come before spacing, and after.  A half year
+later later, I had a first working version, (october 1996).  I
+announced Patchlevel 0.0.7 (or 8) to the mutex list after asking some
+technical details on spacing; it was downloaded approximately 4 times.
+Then I got the hang of it, and in the subsequent two months, I coded
+until it had doubled in size (pl 23).
index 4e8367d3d006818efad7c6228c1003acb6da350b..6e086690716801b831a307f7295113936c5c5619 100644 (file)
@@ -32,7 +32,7 @@ In musicmode, eg,
 
 and in lyricmode, eg,
 
-       Twink- le, twink- le litt- le star,2
+       Twin- kle, twin- kle lit- tle star,2
 
 a lot of characters parse differently
 than in "command" mode, eg,
index 75f56e1ccd07d141c854b868cb6463bdf9ca77ea..e55ebd0dc997b205de3e656c6a7192a78f15459c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,10 +5,14 @@ include Variables.make
 
 
 $(exe): $(obs)
+       strip --strip-debug $(STABLEOBS)
        $(CXX) -o $@ $^ $(LOADLIBES)
 
+
+.PHONY: clean
+
 clean:
-       rm -f $(exe) $(DOCDIR)/* core $(obs)
+       rm -f $(exe) $(DOCDIR)/* core $(obs) $(ALLDEPS)
        for SUBDIR in $(SUBDIRS); \
        do \
                $(MAKE) SUBDIR=$$SUBDIR -C $$SUBDIR clean;\
diff --git a/NEWS b/NEWS
index 1ed9d91e5f4a41eaa783dc3238f2d1477cdfd42b..3362d4ffa6d112cadb22f41982ddbc6188bd7043 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,29 @@
+pl 27
+       - preliminary WIN32 support (JN)
+Features
+       - errors converted to warnings (JN)
+       - context errors (JN)
+       - As vs. as  notename.
+       - WARNING: "melodic" stafftype will create the new Complex_staff!
+Examples
+       - Lohman's Viola Quartet (JN)
+       - JS Bach Solo Cello suite II menuet (JN)
+
+
+pl pre27
+
+Features       
+       - option --init
+       - last_duration_mode: default_duration is last duration entered
+       (\duration{\last})
+       - syntax: grouping 2*4 3*8
+       - preliminary multivoice support
+Examples
+       - JS Bach's WTK example added.
+
+Internal:
+       - Text_reg and Script_reg
+
 pl 26
        - Documentation/lelie_logo.png
        - 8-bit chars for input (see ltest.tex) (MB)
index e4e9834da69a37c0959abe48cb3299e0f5d998c3..56e9623b54090e9ba03ff99f8f1fa2647a6ce8e4 100644 (file)
@@ -1,10 +1,10 @@
 # -*- Makefile-*-
 # sourcefiles to be shipped. Also for dependencies
 
-hdr=   accidental.hh bar.hh beam.hh boxes.hh break.hh clef.hh clefitem.hh\
+hdr=   bar.hh beam.hh boxes.hh break.hh clef.hh clefitem.hh\
        command.hh complexwalker.hh complexstaff.hh\
        const.hh debug.hh dimen.hh directionalspanner.hh\
-       getcommand.hh glob.hh globvars.hh grouping.hh idealspacing.hh\
+       getcommand.hh glob.hh  grouping.hh idealspacing.hh\
        identifier.hh identparent.hh inputcommand.hh inputcommands.hh\
        inputmusic.hh inputscore.hh inputstaff.hh item.hh key.hh keyitem.hh\
        keyword.hh leastsquares.hh lexer.hh linespace.hh linepstaff.hh\
@@ -16,14 +16,16 @@ hdr=   accidental.hh bar.hh beam.hh boxes.hh break.hh clef.hh clefitem.hh\
        qlpsolve.hh register.hh request.hh rest.hh rhythmstaff.hh\
        sccol.hh score.hh\
        scoreline.hh script.hh scriptdef.hh simplestaff.hh simplewalker.hh\
-       slur.hh spanner.hh staff.hh staffcommands.hh staffelem.hh staffline.hh\
+       slur.hh source.hh sourcefile.hh spanner.hh staff.hh staffcommands.hh\
+       staffelem.hh staffline.hh\
        stcol.hh stem.hh staffwalker.hh symbol.hh symtable.hh\
        tex.hh textdef.hh\
-       textitem.hh textspanner.hh timedescription.hh tstream.hh voice.hh
+       textitem.hh textspanner.hh timedescription.hh tstream.hh voice.hh\
+       voicegroup.hh
 
 mycc=bar.cc beam.cc boxes.cc break.cc calcideal.cc clef.cc\
        clefitem.cc command.cc complexstaff.cc complexwalker.cc \
-       complexmelodicstaff.cc complexprint.cc debug.cc dimen.cc\
+        complexprint.cc debug.cc dimen.cc\
        directionalspanner.cc\
        getcommands.cc grouping.cc groupregs.cc idealspacing.cc identifier.cc\
        inputcommand.cc inputcommands.cc inputmusic.cc inputscore.cc\
@@ -36,11 +38,21 @@ mycc=bar.cc beam.cc boxes.cc break.cc calcideal.cc clef.cc\
        paper.cc pcol.cc pscore.cc pstaff.cc qlp.cc qlpsolve.cc\
        register.cc request.cc rest.cc rhythmstaff.cc sccol.cc score.cc\
        scoreline.cc scores.cc script.cc scriptdef.cc simpleprint.cc\
-       simplestaff.cc simplewalker.cc slur.cc spanner.cc staff.cc\
+       simplestaff.cc simplewalker.cc slur.cc source.cc sourcefile.cc\
+       spanner.cc staff.cc\
        staffcommands.cc staffelem.cc staffline.cc stcol.cc stem.cc\
-       staffwalker.cc symbol.cc symtable.cc table.cc tex.cc texbeam.cc\
+       staffwalker.cc symbol.cc symtable.cc  tex.cc texbeam.cc\
        texslur.cc textdef.cc textitem.cc textspanner.cc\
        timedescription.cc tstream.cc voice.cc voiceregs.cc voicegroup.cc\
-       warn.cc wordwrap.cc\
+       warn.cc windhoos-suck-suck-suck-thank-you-cygnus.cc wordwrap.cc\
        template1.cc template2.cc template3.cc template4.cc\
-       template5.cc template6.cc version.cc
\ No newline at end of file
+       template5.cc template6.cc version.cc
+
+# a bit of a hack to keep exec size under control.
+stablecc=request.cc bar.cc boxes.cc break.cc  clef.cc getcommands.cc grouping.cc\
+       item.cc keyword.cc leastsquares.cc \
+       linepstaff.cc linespace.cc lookup.cc molecule.cc meter.cc\
+       paper.cc parser.cc lexer.cc pstaff.cc qlp.cc qlpsolve.cc\
+       template1.cc template2.cc template3.cc template4.cc\
+       template5.cc template6.cc version.cc tstream.cc  tex.cc\
+       voice.cc wordwrap.cc spanner.cc 
diff --git a/TODO b/TODO
index 9f422946dc6101707b386b645b6c908051bd5d19..0385d4ae0c87d38fa98ff64164475adcab37a483 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,15 @@
+
+       ./input/standchen.ly.rej
+
+       ./src/stem.cc.rej
+
+       * scrap simplestaff
+
 BUGS
        * first clef isn't printed
 
+       * accidental placement for other clefs
+
 SEVERELY LACKING:
 
        * grace notes
@@ -13,8 +22,6 @@ INPUTLANGUAGE
 
        * transposition
 
-       * voicegroups.
-
        * rest name configurable
 
 SMALLISH PROJECTS
@@ -44,8 +51,6 @@ SMALLISH PROJECTS
        * use (char *) iso. String for communication between lexer and
        parser.
 
-       * As vs. as  notename.
-
        * configure idealspacing: arithmetic spacing
 
        * fix linking: `Warning: size of symbol'
@@ -53,18 +58,18 @@ SMALLISH PROJECTS
 BIGGISH PROJECT
 
        * merge musical & non-musical column. Scrap Commands in favour
-       of Requests, and do multiparralel meters
+       of Requests, and do multiparallel meters
 
 DOC
 
        * beam generation.
 
+       * Request_register
+
        * all errors
 
 FUTURE
 
-       * syntax: grouping 2*4 3*8.
-
        * put scripts on barcommands 
 
        * glissando
@@ -75,8 +80,6 @@ FUTURE
 
        * implement better breaking algorithm
 
-       * check out linux -> go32 crosscompiler: dos port
-
        * Implement all requests
 
        * merge key{item} & localkey{item}
@@ -89,23 +92,15 @@ FUTURE
 
 IDEAS
 
-       * voice terminate req.
-
-       * keep input in mem, store char* to define spots
-
        * enter Requests directly
 
        * itemcolumns
 
-       * check out PMX
-
        * dependencies: -> implement children more elegantly. Handle
        spanner with broken deps.
 
        * use an embedded language: scheme, lisp, S-lang, Perl, ?
 
-       * Broadcasts in Walker of Request and Item.
-
        * y -dims in internote?
 
        * hack up mf sources for decent spacing info (and then maybe
index e71edf9753f44b990b40ca56bb2e4532da2dae29..39719441bf7e758ad8d2c57f3e494e081ce36c97 100644 (file)
@@ -6,6 +6,9 @@
 OPTIFLAG=-DNDEBUG -DNPRINT -O2
 DEBUGFLAG=-g
 
+# uncomment for windhoos
+# CXX=g++
+
 # turn off -pipe if linker doesn't support it
 EXTRACXXFLAGS=-pipe -Wall -W   -Wmissing-prototypes 
 
@@ -37,7 +40,7 @@ endif
 # version info
 MAJVER=0
 MINVER=0
-PATCHLEVEL=26
+PATCHLEVEL=27
 VERSION=$(MAJVER).$(MINVER).$(PATCHLEVEL)
 CXXVER=`$(CXX) --version`
 
@@ -59,14 +62,15 @@ INPUTDIR=input
 # 
 #
 include Sources.make
-progdocs=$(hdr) $(mycc)
 gencc=parser.cc lexer.cc
 cc=$(mycc) $(gencc)
 
 CCSOURCE=$(addprefix $(CCDIR)/, $(cc))
 obs=$(addprefix $(OBJECTDIR)/,$(cc:.cc=.o)) 
 ALLDEPS=$(addprefix $(DEPDIR)/,$(cc:.cc=.dep))
-
+STABLEOBS=$(addprefix $(OBJECTDIR)/,$(stablecc:.cc=.o)) 
+HEADERS=$(addprefix $(HEADERDIR)/,$(hdr)) 
+progdocs=$(HEADERS) $(addprefix $(CCDIR)/, $(mycc))
 #dist
 .EXPORT_ALL_VARIABLES:
 
@@ -81,12 +85,12 @@ SCRIPTS=make_version make_patch genheader clearlily
 MAKFILES=Makefile Variables.make Sources.make Initial.make Generate.make \
        configure
 OFILES=COPYING README NEWS TODO
-IFILES= standchen.tex titledefs.tex pavane.tex lilyponddefs.tex \
+IFILES=  titledefs.tex lilyponddefs.tex \
        ltest.tex test.tex .dstreamrc dimen.tex 
 DFILES=$(MAKFILES) $(OFILES) $(IFILES) $(SCRIPTS)
 
 #compiling
-LOADLIBES=-L$(FLOWERDIR) -lflower $(EXTRALIB)
+LOADLIBES=-L$(FLOWERDIR) -lflower $(EXTRALIB) -lg++
 FLOWERDIR=../flower
 
 CXXFLAGS=$(DEFINES) -I$(HEADERDIR) -I$(FLOWERDIR) $(EXTRACXXFLAGS)
index 34eb6c982d21e6c25ca0f9a161c73287b31874db..40b79c3aaae41dddcc43dacf4fe472e5480c7a29 100755 (executable)
--- a/clearlily
+++ b/clearlily
@@ -1,4 +1,4 @@
 #!/bin/sh
 
 # unclobber current dir.
-rm -v *.aux *.log `grep -li "^% Creator: LilyPond" *.out` *.orig *~
\ No newline at end of file
+rm -v *.aux *.log `grep -li "^% Creator: LilyPond" *.out *.uit` *.orig *~
index b10d46123512b12913a13e21accfc82331039a18..000f31cdc139a4cb995f7323a8e996e6ecc987e6 100755 (executable)
--- a/configure
+++ b/configure
@@ -3,7 +3,7 @@
 PREFIX=${PREFIX:-.}
 echo using PREFIX=$PREFIX
 
-NEEDFLOWERVER=1.0.22
+NEEDFLOWERVER=1.0.2
 flowertar=flower-$NEEDFLOWERVER
 here=`pwd`
 cd ..
index 790d7b06f2e2c091d918b99384013a4b85cfbbac..4a3104af2ff9f9f7fb8fab2ab23edc269d84234e 100644 (file)
@@ -7,4 +7,4 @@ dist:
        ln $(DISTFILES) $(DDIR)/$(SUBDIR)
 
 clean:
-       rm -f *.dep
+       true
index ae66f7dbc3156bb58d5f21138744d16cb75df50f..77591bb6cb353e3ea92b009ece116ca8887747a5 100644 (file)
@@ -1,2 +1,4 @@
+pl 23
+       - win32 patches (JN)
 pl 22:
        - Array::add -> Array::push
\ No newline at end of file
index 6ce4b741d24e680a18156f11d44fea713ca54e68..d67ab72e9f9fdcf07a658e3c295f230e6316b6ef 100644 (file)
@@ -1,3 +1,4 @@
+       * disable: const pointer->bool->string
 
        * PointerVec ?
 
index c417e74140268f210e0c882a8357a55aa36d6660..67d1863f279767b9665c8c999ff254830e5faa46 100644 (file)
@@ -1,10 +1,10 @@
 MAJVER=1
 MINVER=0
-PATCHLEVEL=22
+PATCHLEVEL=23
 PACKAGENAME=flower
 
 #PROFILEFLAG=-pg
-DEBUGFLAG=-g -O2 -DNDEBUG
+DEBUGFLAG= -O2 -DNDEBUG # -g
 OPTIFLAG=-DNDEBUG -DNPRINT -O2
 
 #########################################
@@ -35,3 +35,4 @@ ALLSOURCES=$(hh) $(cc) $(inl) $(templatecc)
 DFILES=$(ALLSOURCES) Makefile Variables.make make_version\
        Sources.make TODO README NEWS
 DDIR=$(DNAME)
+
index 44e2057059637ece5fde0e6a104d3677702201f5..02b218d3cf44c76606c722cb6afcff9188daba57 100644 (file)
@@ -118,7 +118,7 @@ Dstream::Dstream(ostream *r, const char * cfg_nm )
             r.message("not enough fields in Dstream init.");
             continue;
         }
-        (*silent)[r[0]] = bool(Scalar(r[1]));
+        (*silent)[r[0]] = (bool)(int)(Scalar(r[1]));
     }
 
 }
index aae52a7838c5fda5b03fdb079b844465a162d9c0..e38f30128f80ce52fd4534162425ce2a18719cee 100644 (file)
@@ -28,6 +28,7 @@ public:
       if rcfile == 0, then do not read any rc file
       */
       
+    virtual ~Dstream();
     Dstream &identify_as(String s);
     
     Dstream &operator << (String s);
index 294457db0f87af829f3afca887304602d8b469bf..acf437ad0ac98b7ff4da2b37e87c5b1099641e75 100644 (file)
@@ -19,7 +19,7 @@ struct Interval_t {
 
     /****************/
     
-    T center() { return (left + right) /2;}
+    T center() { return (left + right) / T(2);}
     void translate(T t) {
        left += t;
        right += t;
index 0a1a027acd277a6a376b65a5e849eda437b3f731..6e7b0b1279c228982edacbf11eee9775bc07dce6 100644 (file)
@@ -34,7 +34,7 @@ Interval__compare(const Interval_t<T>&a,Interval_t<T> const&b)
 #ifdef AIX
 const Real INFTY = 1e8;        // ARGh. AIX sucks
 #else
-const Real INFTY = HUGE;
+const Real INFTY = HUGE_VAL;
 #endif
 
 template<class T>
index 3ff83d3b72fe3022f31b96a316974e715363dd9e..781e86f970da53430856ee4416b3aa8da1fd3684 100644 (file)
@@ -15,7 +15,8 @@ public:
     File_path(String);
 
     /// add to end of path.
-    Array<String>:: push;
+    Array<String>::push;
+    void add(String str) { push(str); }
 };
 /**
 
index 16f52b509269e7dc084c7b53889d6ba5a5990400..0533af2111a5510ce0624bf674f805fa8b5a1563 100644 (file)
@@ -4,7 +4,7 @@
 
 #include <builtin.h>
 #include <minmax.h>
-#include <std/cmath.h>
+#include <math.h>
 
 typedef double Real;
 
index 0804c5bbdc7d30e6ed50235fea460ac46548772a..eb5822cf32685e8bbce079668c472ff68cde7d47 100644 (file)
@@ -47,7 +47,7 @@ String::String(Rational r)
     *this = n;
     if (r.denominator() != 1) {
        char * d = Itoa(r.denominator());
-       *this +=  '/' + String(d);
+       *this +=  String( '/' ) + String(d);
        //delete d;
     }
 /*    delete n;
index f153e3e6ca8f4ebc3d15e0bb50d7c3df72256297..203ed196ea5bd093997dfd78c94f114357b0a905 100755 (executable)
--- a/genheader
+++ b/genheader
@@ -5,7 +5,7 @@ cat << HERE
 /*
   $1 -- part of LilyPond
 
-  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c) 1997 $USERNAME <$MAILADRESS>
 */
 
 #ifndef $def
index 2ee609e881c75f080c0a05588b4705a7188a2b6c..f23ddcf6caa7f9633d6d525e3bd404a2579369cd 100644 (file)
@@ -9,4 +9,4 @@ TAGS: $(hdr)
        etags -CT $(hdr) 
 
 clean:
-       rm -f parser.hh
\ No newline at end of file
+       rm -f parser.hh
diff --git a/hdr/accidental.hh b/hdr/accidental.hh
deleted file mode 100644 (file)
index d388a3f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-  accidental.hh -- part of LilyPond
-
-  (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef ACCIDENTAL_HH
-#define ACCIDENTAL_HH
-#include "item.hh"
-
-struct Accidental : Item {
-const char * name() const;
-    int type,pos; 
-
-    void preprocess();
-    Accidental(int type, int position);
-    void do_print()constt;
-private:
-    void brew_molecule();
-};
-#endif // ACCIDENTAL_HH
-
index 4413add60e04fb25e096e87bd53ad4f2162bb67b..17d489be960119b90e2aba006ed6df33f056c197 100644 (file)
@@ -16,7 +16,9 @@
 /// column of Complex_staff: store one request
 struct Complex_column : Staff_column {
 
-    Array<Request*> todo_l_arr_;
+    Array<Request*> first_l_arr_;
+    Array<Request*> second_l_arr_;
+
     Complex_staff* staff_l_;
     
     /****************/
index 111945c762d0daef539d550eeb0e3444139a7ad2..fcdb84ef962521d08b688f189b40bd50f28a7630 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef COMPLEXWALKER_HH
 #define COMPLEXWALKER_HH
 
+// this SUX
 #include "proto.hh"
 #include "grouping.hh"
 #include "voicegroup.hh"
@@ -14,6 +15,7 @@
 #include "staffwalker.hh"
 #include "key.hh"
 #include "clef.hh"
+#include "register.hh"
 
 struct Complex_walker: Staff_walker {
     Local_key local_key_;
@@ -29,15 +31,26 @@ struct Complex_walker: Staff_walker {
     
 
     IPointerList<Voice_registers *> voice_reg_list_;
-//    Assoc<Voice*, Voice_registers*> voice_reg_map_;    
-    //IPointerList<Voice_group_registers *> voice_reg_list_;
-    //Assoc<int, Voice_group_registers*> group_reg_map_;
-    Voice_group_registers group_regs_;
+    IPointerList<Voice_group_registers*> group_reg_list_;
+    Assoc<const Voice *, Voice_group_registers *> voice_group_map_;
+
     Local_key_register local_key_reg_;
     Array<Staff_elem_info> announce_info_arr_;
     
     /****************/
+    void  do_change_group(const Voice * v, String group_id_str);
+
     Voice_registers *find_voice_reg(Voice*v_l);
+    Voice_registers *get_voice_reg(Voice*v_l);
+    
+    /// search and return. return 0 if not found.
+    Voice_group_registers *find_voice_group(Voice* v_l);
+    /// search. Create if necessary
+    Voice_group_registers *get_voice_group(Voice* v_l);
+    /// search and return. return 0 if not found
+    Voice_group_registers *find_voice_group(const char* id);
+    /// Create if necessary
+    Voice_group_registers *get_voice_group(const char*);
     
     void regs_process_requests();
     void do_announces();
@@ -50,16 +63,12 @@ struct Complex_walker: Staff_walker {
     virtual void do_post_move();
     virtual void do_pre_move();
     
-    void do_note(CNote_info);
     Complex_walker(Complex_staff*);
     Complex_column *col();
     Complex_staff *staff();
-
-    void do_local_key(Note_req*, Notehead*);
-
 };
 
 
-#endif // SIMPLEWALKER_HH
+#endif // COMPLEXWALKER_HH
 
 
index dce593b4a06401edb837b783c9be86c3f4814981..9c2f3f9ccc40037d0d63c892c9a2d3a85ed4e383 100644 (file)
@@ -8,5 +8,5 @@
 
 const Real EPS=1e-7;           // qlpsolve.hh
 const int MAXITER=100;         // qlpsolve.hh
-const Real INFTY=HUGE;
+const Real INFTY=HUGE_VAL;
 #endif
index a5a7d8d3787f5bdf0abd96c792313f3d10de9ab6..f6855fcabee183aaac65d9a678030075860d0fe3 100644 (file)
@@ -7,6 +7,9 @@
 #include "real.hh"
 #include "proto.hh"
 
+void message( String message_str, char const* context_ch_c_l );
+void warning( String message_str, char const* context_ch_c_l );
+void error( String message_str, char const* context_ch_c_l );
 void error(String s);          // errors
 void error_t(const String& s, Time_description const &  t_tdes);
 void error_t(String const &s, const Moment &when);
diff --git a/hdr/globvars.hh b/hdr/globvars.hh
deleted file mode 100644 (file)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
index 04bee62255fe6053d8c967d6ee51e61db15e6f45..0c9b252afa3eeed26ab48bdd8aa36c11da5a5729 100644 (file)
 struct Idclass : Identifier {\
     virtual const char *classname() { return #Class; }\
     Idclass(String s, Class*st):Identifier(s) { data = st; }\
-    virtual Class* accessor(bool copy=false) {\
+    virtual Class* accessor(bool copy) {\
        if (copy)\
            return new Class(* (Class*) data);\
        else\
            return (Class*) data;\
     }\
-    ~Idclass() { delete accessor(); }\
+    ~Idclass() { delete accessor(false); }\
 }\
 
-
+make_id_class(Real_id, Real, real);
 make_id_class(Script_id, Script_def, script);
 make_id_class(Lookup_id, Lookup, lookup);
 make_id_class(Symtables_id, Symtables, symtables);
index c74be844c878000164f7ba4d5cf29e1101c22f3e..da7ab7012cb88ece848d2dbb1c2e64ccbf99ddbf 100644 (file)
@@ -9,8 +9,10 @@
 
 #include "proto.hh"
 #include "string.hh"
+
+/* boolean argument to accesor is copy_b..*/
 #define IDACCESSOR( Input_staff, staff)\
-    virtual Input_staff * staff(bool = false) { error(#Input_staff); return 0; }
+    virtual Input_staff * staff(bool) { error(#Input_staff); return 0; }
 
 struct Identifier {
     void *data;
@@ -27,6 +29,7 @@ struct Identifier {
     IDACCESSOR(Symtables, symtables)
     IDACCESSOR(Music_general_chord, mchord)
     IDACCESSOR(Lookup,lookup)
+    IDACCESSOR(Real,real)
     IDACCESSOR(Notename_tab, notename_tab)
 private:
     Identifier(Identifier const&){}
index 2654d06b7c8470046d133c2c82d9598d7f3d28b0..d937f9ab8aa13490fc1446d8b96744d7e096da6c 100644 (file)
@@ -30,6 +30,6 @@ Input_command *get_grouping_command(Array<int>);
 Input_command *get_bar_command(String);
 Input_command *get_newmeasure_command();
 Input_command *get_goto_command(String);
-Array<int> get_default_grouping(int count);
+Array<int> get_default_grouping(int count, int onenote);
 #endif // INPUTCOMMAND_HH
 
index 6457c1c686f04aac4f3d594ceff6ba7c3c1abe8b..bd6054f6e9d84ff6f84b52a08fc32d884a7b3f07 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef INPUTCOMMANDS_HH
 #define INPUTCOMMANDS_HH
 
-#include "pcursor.hh"
+//#include "pcursor.hh"
 #include "proto.hh"
 #include "plist.hh"
 #include "real.hh"
index 4ef8eebb464e386f1e39572db671a9e9689aa3ea..7d0dd618ba819c6ee7e3442ede9bff0d12287688 100644 (file)
@@ -18,11 +18,12 @@ struct Voice_list : public PointerList<Voice*> {
 
 /// ABC for input structures
 struct Input_music {
-    virtual Voice_list convert()=0;
-    virtual Moment length()=0;
+    virtual Voice_list convert()const=0;
+    virtual Moment length()const=0;
     virtual void translate_time(Moment dt)=0;
     virtual ~Input_music(){}
     virtual void print() const =0;
+    virtual void set_default_group(String)=0;
     // virtual void transpose(...) const =0;
     
     
@@ -48,8 +49,9 @@ struct Simple_music : Input_music {
     /****/
     virtual Simple_music*simple() { return this; }  
     void add(Voice_element*);
-    virtual Moment length();
-    virtual Voice_list convert();
+    virtual void set_default_group(String g) { voice_.set_default_group(g); }
+    virtual Moment length()const;
+    virtual Voice_list convert()const;
     virtual void translate_time(Moment dt);
     virtual void print() const;
     virtual Input_music *clone() const {
@@ -61,7 +63,8 @@ struct Simple_music : Input_music {
 /// Complex_music consists of multiple voices
 struct Complex_music : Input_music {
     IPointerList<Input_music*> elts;
-
+    /****************/
+    virtual void set_default_group(String g);
     void add(Input_music*);
     Complex_music();
     Complex_music(Complex_music const &);
@@ -75,9 +78,9 @@ struct Music_voice : Complex_music {
  
     
     /****************/
-    Moment length();
+    Moment length()const;
     virtual void translate_time(Moment dt);
-    virtual Voice_list convert();
+    virtual Voice_list convert()const;
     void add_elt(Voice_element*);
     virtual Input_music *clone() const {
        return new Music_voice(*this);
@@ -94,12 +97,12 @@ struct Music_voice : Complex_music {
 
 /// Multiple musicstuff stacked on top of each other
 struct Music_general_chord : Complex_music {
-    IPointerList<Input_music*> chord_;
+
 
     /****************/
 
-    virtual Moment length();
-    virtual Voice_list convert();
+    virtual Moment length()const;
+    virtual Voice_list convert()const;
     virtual void translate_time(Moment dt);
     void add_elt(Voice_element*);
     virtual Input_music *clone() const {
@@ -115,6 +118,16 @@ struct Music_general_chord : Complex_music {
   
   */
 
+struct Multi_voice_chord : Music_general_chord {
+    void set_default_group(String);
+    virtual Input_music *clone() const {
+       return new Multi_voice_chord(*this);
+    }
+};
+struct Voice_group_chord : Music_general_chord {
 
-
+    virtual Input_music *clone() const {
+       return new Voice_group_chord(*this);
+    }
+};
 #endif // INPUTMUSIC_HH
index 973d4814dab5720151249cc7f72ae9f1254121ed..1555456778716758a7655728abd8d3334d2ce0d8 100644 (file)
@@ -10,6 +10,7 @@
 struct Input_score {
     /// defined where?    
     String define_spot_str_;
+    int errorlevel_i_;
     
     /// paper_, staffs_ and commands_ form the problem definition.
     Paperdef *paper_;
index 7cbbbe37475397003f976c3c75efe68f3637f80b..0617b9742cf6547ffbd31339801b0daf858a8865 100644 (file)
@@ -13,7 +13,8 @@ void kill_lexer();
 void set_lexer();
 
 struct Input_file {
-       istream*is;
+       istream* is;
+       Source_file* sourcefile_l_;
        int line;
        String name;
 
@@ -29,9 +30,11 @@ struct My_flex_lexer : yyFlexLexer {
     Assoc<String, Identifier*> *the_id_tab;
     Keyword_table * keytable;
     Notename_tab * defaulttab;
-
+    char const* data_ch_c_l_m;
+    int errorlevel_i_;
     /****************/
-    
+    int ret_notename(int *p, String text, int octave_mod);    
+    char const* here_ch_c_l();
     void set(Notename_tab *n);
     int lookup_keyword(String);
     void lookup_notename(int &large, int &small, String s);
index e73ba2390b338525345ac2fac8d158d00fe0109b..1102833face510097b2b24ba2d195c0193adc171 100644 (file)
@@ -7,7 +7,9 @@ void set_debug(bool);
 void do_scores();
 void add_score(Input_score * s);
 void set_default_output(String s);
+Input_score* current_iscore_l();
 String find_file(String);
 const char *get_version();
+extern Source* source_l;
 
 #endif
index fa8787674814708e5495751e033da6e94ebc15f3..ae288151a27fab8165f7d386703f542b2ddfb464 100644 (file)
@@ -1,11 +1,14 @@
 #ifndef MISC_HH
 #define MISC_HH
 
+#include "proto.hh"
 #include "real.hh"
 #include "moment.hh"
+#include "scalar.hh"
 
 Moment wholes(int dur, int dots);
-    
+
+Rhythmic_grouping parse_grouping(const Array<Scalar> &a);    
 double log_2(double x) ;
 int intlog2(int d);
 inline int
index 7419e203de86dd13bb433d7f450313586975b47b..9f20458fef68a156b285bbd8af9560b4c22e10f0 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef MOLECULE_HH
 #define MOLECULE_HH
 
+#include "proto.hh"
 #include "plist.hh"
 #include "boxes.hh"
 #include "symbol.hh"
index 5f4c47d2d97ad56730ea3c3a048351017955472a..66bed0360e53de71b19d9833bd848dbc51192928 100644 (file)
@@ -11,6 +11,7 @@
 /// ball at the end of the stem
 struct Notehead : Item {
     const char * name() const;
+    const char* defined_ch_c_l_m; //sorry, trying to find error in martien.ly
     int position;
     /// -1 = lowest, 0 = inside, 1 = top
     int extremal;
index 7b0545b78440ffc598cdb5f9b4509c0f8c010255..78d4f84861eb1f9651d201898feaa08ee5ea0ce5 100644 (file)
@@ -9,8 +9,12 @@
 
 #include "proto.hh"
 
+extern char const* defined_ch_c_l;
+extern char const* req_defined_ch_c_l;
 Voice_element*get_mark_element(String);
 void set_default_duration(int *);
+void last_duration(int n);
+void set_duration_mode(String s);
 void get_default_duration(int *);
 void set_default_octave(String);
 void set_plet(int,int);
@@ -25,6 +29,10 @@ Text_def*get_text(String s);
 Request*get_script_req(int d , Script_def*def);
 Request*get_text_req(int d , Text_def*def);
 Voice_element*get_command_element(Input_command*);
-Voice_element*get_barcheck_element();
+Voice_element* get_barcheck_element();
+Voice_element* get_stemdir_element(int);
+
+
+
 #endif // PARSECONSTRUCT_HH
 
index 94304768da9d9f9596cff93f7a2b92f1e3d95d5d..4987a705477a4525174a0ad21ed56435f35fcf9f 100644 (file)
@@ -34,6 +34,8 @@ struct Complex_walker;
 struct Cresc_req;
 struct Decresc_req;
 struct Dynamic;
+struct Group_change_req;
+struct Group_feature_req;
 struct Idealspacing;
 struct Identifier;
 struct Input_command;
@@ -81,10 +83,13 @@ struct Rhythmic_req;
 struct Score;
 struct Score_column;
 struct Script_def;
+struct Script;
 struct Script_req;
 struct Simple_music;
 struct Slur;
 struct Slur_req;
+class Source;
+class Source_file;
 struct Span_req;
 struct Spanner;
 struct Staff;
@@ -97,11 +102,14 @@ struct Staff_elem_info;
 struct Staff_walker;
 struct Stem;
 struct Stem_req;
+struct Stem_beam_register;
 struct String;
 struct Symbol;
 struct Symtable;
 struct Symtables;
 struct Tex_stream;
+struct Terminate_voice_req;
+struct Text_item ;
 struct Text_def;
 struct Text_gob;
 struct Text_req;
index 87bd919c67a7a60604eb5986b533eb2e7c231ceb..2c79427f7868680f01fb730a0524578e41621406 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef PSTAFF_HH
 #define PSTAFF_HH
 
+#include "proto.hh"
 #include "plist.hh"
 #include "item.hh"
 #include "symbol.hh"
index e94faca7cf308a5501ebd4cc05bafdd936103921..42574ed5bcc80f6fc90219d8693d805514db227e 100644 (file)
 /// data container.
 struct Staff_elem_info {
     Staff_elem * elem_p_;
-//    Array<const Request*> requestor_l_arr_;
     Request*req_l_;
     const Voice * voice_l_;
     Voice_group_registers * group_regs_l_;
-    int group;
     Request_register * origin_reg_l_;
 
     /****/
@@ -49,7 +48,7 @@ struct Request_register {
       RETURN
       false: request noted, but not taken.
 
-      true: request swallowed, now owned by this
+      true: request swallowed. Don't try to put elsewhere
 
       (may be we could use C++ exceptions.. :-)
       */
@@ -71,7 +70,7 @@ protected:
   */
 
 struct Notehead_register : Request_register {
-    Item* note_l_;
+    Item* note_p_;
     /****************/
     Notehead_register(Complex_walker*);
     virtual bool try_request(Request *req_l) ;
@@ -80,10 +79,10 @@ struct Notehead_register : Request_register {
 };
 
 struct Slur_register : Request_register {
+    sstack<Slur_req*> requests_arr_;
     sstack<Slur *> slur_l_stack_;
     Array<Slur*> end_slur_l_arr_;
-
-
+    
     /****************/
     ~Slur_register();
     Slur_register(Complex_walker*);
@@ -98,12 +97,15 @@ struct Stem_beam_register : Request_register {
     Beam * beam_p_;
     Beam_req * beam_req_l_;
     Stem_req * stem_req_l_;
+    Beam_req * start_req_l_;
     bool end_beam_b_;
     Rhythmic_grouping *current_grouping;
-
+    int default_dir_i_;
+    
     /****************/
     Stem_beam_register(Complex_walker*);
     ~Stem_beam_register();
+    void set_dir(int dir_i_);
     virtual bool try_request(Request*);
     virtual void process_request();
     virtual void acknowledge_element(Staff_elem_info);
@@ -111,10 +113,11 @@ struct Stem_beam_register : Request_register {
     virtual void do_post_move_process();
 };
 
-#if 0
 struct   Script_register : Request_register {
     Script * script_p_;
+    
     /****************/
+    void set_dir(int dir_i_);
     Script_register(Complex_walker*);
     virtual bool try_request(Request*);
     virtual void process_request();
@@ -122,17 +125,17 @@ struct   Script_register : Request_register {
     virtual void do_pre_move_process();
 };
 
-struct Text_register:Request_register{
+struct Text_register : Request_register{
     Text_item * text_p_;
 
     /****************/
+    void set_dir(int dir_i_);
     Text_register(Complex_walker*);
     virtual bool try_request(Request*);
     virtual void process_request();
-    virtual void acknowledge_element(Staff_elem_info);
     virtual void do_pre_move_process();
 };
-#endif
+
 
 struct Local_key_register : Request_register {
     Local_key_item* key_item_p_;
index 2cc9decef1716d965683563a6186c162b6e53c32..9a01ade3fbab72254b70b4bf67eb0e46037669bb 100644 (file)
@@ -9,6 +9,7 @@
 /// Hungarian postfix: req
 struct Request {
     Voice_element*elt_l_;
+    char const* defined_ch_c_l_m;
     
     /****************/
     Request();
@@ -18,7 +19,7 @@ struct Request {
     virtual const char * name() const { return "Request";}
     virtual Request* clone() const =0;
     void print()const ;
-
+    
     virtual Moment duration() const { return 0; }
 
     /*  accessors for children */
@@ -36,6 +37,9 @@ struct Request {
     virtual Melodic_req *melodic() { return 0; }
     virtual Mark_req * mark() { return 0; }
     virtual Staff_command_req* command() { return 0;}
+    virtual Terminate_voice_req *terminate() {return 0;}
+    virtual Group_change_req * groupchange() { return 0;}
+    virtual Group_feature_req * groupfeature() { return 0; }
 protected:
     virtual void do_print()const ;
 };
@@ -47,7 +51,7 @@ see lilygut page
 
 #define REQUESTMETHODS(T,accessor)     \
 virtual T * accessor() { return this;}\
-virtual const char* name()const { return #T; }\
+virtual const char* name() const { return #T; }\
 virtual Request *clone() const { return  new T(*this); } \
 virtual void do_print() const
        
@@ -55,6 +59,21 @@ struct Barcheck_req : Request {
     REQUESTMETHODS(Barcheck_req,barcheck);
 };
 
+struct Terminate_voice_req : Request {
+    REQUESTMETHODS(Terminate_voice_req,terminate);
+};
+
+struct Group_feature_req : Request {
+    int stemdir_i_;
+    Group_feature_req();
+    REQUESTMETHODS(Group_feature_req, groupfeature);
+};
+
+struct Group_change_req : Request {
+    String newgroup_str_;
+    REQUESTMETHODS(Group_change_req, groupchange);
+};
+
 /// a request with a duration
 struct Rhythmic_req : virtual Request {
     int balltype;
@@ -64,7 +83,7 @@ struct Rhythmic_req : virtual Request {
     static int compare(const Rhythmic_req &, const Rhythmic_req &);
     Moment duration() const;
     Rhythmic_req();
-        Rhythmic_req(int,int);
+    Rhythmic_req(int,int);
     REQUESTMETHODS(Rhythmic_req, rhythmic);
 };
 
@@ -77,6 +96,7 @@ struct Text_req : virtual Request {
     Text_req(int d, Text_def*);
     ~Text_req();
     Text_req(Text_req const&);
+    static int compare(const Text_req&,const Text_req&);
     REQUESTMETHODS(Text_req,text);
 };
 
@@ -125,6 +145,7 @@ Why a request? It might be a good idea to not typeset the rest, if the paper is
 
 /// attach a stem to the noteball
 struct Stem_req : Rhythmic_req {
+    int dir_i_;
     Stem_req(int s, int dots);
     REQUESTMETHODS(Stem_req,stem);
 };
@@ -172,10 +193,11 @@ struct Slur_req : Span_req {
 
 ///Put a script above or below this ``note''    
 struct Script_req : Request {
-    int dir;
-    Script_def *scriptdef;
+    int dir_i_;
+    Script_def *scriptdef_p_;
 
     /****************/
+    static int compare(const Script_req &, const Script_req &);
     Script_req(int d, Script_def*);
     REQUESTMETHODS(Script_req,script);
     ~Script_req();
@@ -294,11 +316,6 @@ struct Spacing_req {
 
 struct Glissando_req : Span_req {
     
-};
-struct Stemdir_req : Request {
-    int which;
-};
-struct Group_change_req : Request {
 };
 #endif
 #endif
index 152e578493ca4c2ac12b7970f44eece2316a6931..61868a471932c1567408814df0bd8060a15c4e55 100644 (file)
@@ -17,6 +17,7 @@ struct Score {
     PScore *pscore_p_;
 
     String define_spot_str_;
+    int errorlevel_i_;
     
     Assoc<String, Moment> markers_assoc_;
     /****************************************************************/
index 26e1285c447b42e0badfb6536e102f00cb5c7b85..3c6ee0de0494e3ba33ed50c2551695adf9098182 100644 (file)
@@ -6,8 +6,8 @@
 
 #ifndef SCORELINE_HH
 #define SCORELINE_HH
-#include "plist.hh"
 #include "proto.hh"
+#include "plist.hh"
 #include "varray.hh"
 
 /// the columns of a score that form one line.
index 27fddc589481cb016852e75807fb6d8647b166c2..2a10e7d49ee4dbde69ad3b2c86fa9ad5530dd37d 100644 (file)
@@ -21,18 +21,19 @@ struct Script : Item {
 
     /****************/
     const char * name() const;    
-    void       set_symdir();
-    void       set_default_dir();
-    void       set_default_pos();
-    Symbol symbol()const;
     Molecule*  brew_molecule_p()const;
     virtual void do_post_processing();
     virtual void do_pre_processing();
-    Script(Script_req*, int);
+    Script(Script_req*, int staffsize);
     void set_support(Item*);
     void set_stem(Stem*);
     Interval support_height()const;
-    virtual Interval width() const;    
+    virtual Interval width() const;
+private:
+    void       set_symdir();
+    void       set_default_dir();
+    void       set_default_pos();
+    Symbol symbol()const;
 };
 
 
index fb1dc4317f07833fe0e0ad715da4b9ec7c78e617..423860a89505245232fd5e291139fe4582373e3a 100644 (file)
@@ -15,6 +15,7 @@ struct Script_def{
     String symidx;
 
     /****************/
+    int compare(Script_def const &);
     void print() const;
     Script_def(String, int, int ,bool);
 };
index e08aabd17ee1c79c44d6227ca014a8e15cd747c4..f44754a5d216af1970cb5199406ebb4bfefdaa0c 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef STAFFLINE_HH
 #define STAFFLINE_HH
 
+#include "proto.hh"
 #include "real.hh"
 #include "plist.hh"
 #include "varray.hh"
index 046538ae16d055c9058b63a1f18198363d329877..e4c3794a8c0e60562852a9b8df9dc855770ae9e7 100644 (file)
@@ -59,6 +59,7 @@ struct Stem : Item {
     Real hpos()const;
     void do_print() const;
     void set_stemend(Real);
+    int get_default_dir();
     void set_default_dir();
     void set_default_stemlen();
     void set_default_extents();
index 6682221761d63d3cb1f4f7e658e795d06db649ff..4e95c93a6e66f2189dcca80419a19073e19867f1 100644 (file)
@@ -14,10 +14,12 @@ struct Text_def  {
     int align_i_;
     String text_str_;
     String style_str_;
-
+    char const* defined_ch_c_l_m;
+  
 
     /*****************/
-    
+    virtual ~Text_def() {};
+    bool compare(const Text_def&);
     Text_def();
     virtual void print() const;
     virtual Atom create_atom(Paperdef*) const;
index ebf7656276a8233fa890436f05f6ac87697066a1..c563fc80ca7f6a2ff070348098b518b79bac41eb 100644 (file)
 #include "item.hh"
   
 struct Text_item : Item {
-    const char * name() const;
     int pos_i_;
     int staffsize_i_;
     int dir_i_;
     Text_def* tdef_l_;
     
     /****************/
-    
+    const char * name() const;    
     virtual void set_default_pos();
     Molecule* brew_molecule_p() const;
     void do_pre_processing();
index 867827f0295f27ae3d4ee43e10a723a3e8d11e53..03ea55b9ee21201bf6e8b82e75e574e26033da45 100644 (file)
@@ -17,6 +17,7 @@ struct Voice {
     Voice(Voice const&);
     void add(Voice_element*);
     void print() const;
+    void set_default_group(String id);
 };
 /**
 
@@ -28,6 +29,7 @@ struct Voice {
 /// one horizontal bit. 
 struct Voice_element {
     Moment duration;
+    char const* defined_ch_c_l_m;
     const Voice *voice_l_;
     IPointerList<Request*> reqs;
 
@@ -37,6 +39,7 @@ struct Voice_element {
     Voice_element();
     Voice_element(Voice_element const & src );
     void print ()const;
+    void set_default_group(String id);
 };
 /** Apart from being a container for the requests, Voice_element is nothing
     */
diff --git a/hdr/voicegroup.hh b/hdr/voicegroup.hh
new file mode 100644 (file)
index 0000000..a6f370e
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+  voicegroup.hh -- part of LilyPond
+
+  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#ifndef VOICEGROUP_HH
+#define VOICEGROUP_HH
+
+#include "proto.hh"
+#include "register.hh"
+#include "varray.hh"
+#include "string.hh"
+
+struct Voice_registers {
+    Notehead_register head_reg_;
+    Slur_register slur_reg_;
+    Voice *voice_l_;
+
+    /****************/
+    static bool acceptable_request(Request*);
+    void pre_move_processing();
+    void post_move_processing();
+    void announce_element(Staff_elem_info info);
+    Voice_registers(Complex_walker*,Voice*);
+    bool try_request(Request*);
+    void process_requests();
+};
+
+
+struct Voice_group_registers {
+    String group_id_str_;
+    Text_register text_reg_;
+    Stem_beam_register stem_beam_reg_;
+    Script_register script_reg_;
+    Complex_walker * walk_l_;
+    int dir_i_;
+    
+    /****************/
+    static bool acceptable_request(Request*);
+    void pre_move_processing();
+    void post_move_processing();
+    void announce_element(Staff_elem_info info);
+    Voice_group_registers(Complex_walker*, String id = "");
+    void process_requests();
+    bool try_request(Request*);
+};
+
+#endif
index bb93a1c6fdb1ccece55f119ef9f187a8d758b877..7aa3964262b3fe9df0b0fbda4152cb932e55317c 100644 (file)
@@ -1,5 +1,5 @@
 DFILES=dutch.ini table_sixteen.ini table_twenty.ini\
-       english.ini script.ini symbol.ini
+       english.ini script.ini symbol.ini bare.ini
 
 default:
        echo huh?
diff --git a/init/bare.ini b/init/bare.ini
new file mode 100644 (file)
index 0000000..be63e67
--- /dev/null
@@ -0,0 +1,5 @@
+
+% enough for the parsing step
+
+include "init/dutch.ini"
+include "init/table_sixteen.ini"
index eaae8fd3ef9fb0423dceffb3b42d49c3010f80f8..61c04f111a4f0d698782a827c7c86dc135232bf6 100644 (file)
@@ -1,7 +1,11 @@
 default: ;
 
 DISTFILES=Makefile  kortjakje.ly pavane.ly  maartje.ly\
-       cadenza.ly scales.ly standchen.ly twinkle.ly
+       cadenza.ly scales.ly standchen.ly twinkle.ly\
+       wohltemperirt.ly error.ly\
+       martien.ly mlalt.ly mlvio1.ly mlvio2.ly mlcello.ly\
+       standchen.tex pavane.tex  scsii-menuetto.tex martien.tex
+
 
 dist:
        ln $(DISTFILES) $(DDIR)/$(SUBDIR)
index 1ca8ba54a5cf4a92d93a22164731496112f86a3e..3f32d19de38c6b0c2308805b082f797c726586cb 100644 (file)
@@ -6,26 +6,28 @@
 
 cad = music { $
        \duration { 8}
-       \textstyle "italic" 
+       \textstyle "italic"
+       \command { \clef \violin }
        'c4._"f" g8
        \textstyle  "roman" 
-                                       ['e^"accel" ()'d 'c b]
+
+       ['e^"accel" ()'d 'c b]
        [b()'c] g-\fermata
-               \mark"br1"
+               \command { \bar \empty }
                        c [c_"rubato" e g 'c]
        \octave{'}
        e4. e [g ()f_"rit" e d]
 
        \duration{16}
        dis4()e4
-               \mark"br2"
+               \command { \bar \empty }
                r8 [c d] [e f g gis]
        \duration{4}
        a-> `f()`e g
        f-> `d()`cis e
        \duration{8}    
        d4^\fermata
-               \mark"br3"
+               \command { \bar \empty }
 
        r8 `a [`b cis]
        \duration{16}   [d cis d e]
@@ -34,10 +36,10 @@ cad = music { $
        \octave{} \plet{2/3} ['d8 'c8 a8]
        \plet{1/1}
        g2
-               \mark "br4"
+               \command { \bar \empty }
        [g c e g] ['c e g 'c]\octave{'} 
        [e `g c e] g4^\fermata %()% BUG!
-               \mark "br5"
+               \command { \bar \empty }
        [g8.(_"a tempo" e g8. )e]
        a4. g8 [f8 e8 d8 c8]
        `g2 d2^"tr"
@@ -47,20 +49,11 @@ cad = music { $
        score {
        staff { melodic
                music { cad }
+               
        }
        commands {
                meter 4*4
                cadenza 1
-               grouping 1
-               goto "br1"
-               bar "empty"
-               goto "br2"
-               bar "empty"
-               goto "br3"
-               bar "empty"
-               goto "br4"
-               bar "empty"
-               goto "br5"
-               bar "empty"
+               grouping 1*4
        }
 }
diff --git a/input/error.ly b/input/error.ly
new file mode 100644 (file)
index 0000000..49dd246
--- /dev/null
@@ -0,0 +1,29 @@
+mwa = music {
+       $
+       ab % ok, warning, still output?
+%      \bla % ok, fatal
+%      &   %  ok, fatal
+%      c d ) ] % ok, fatal
+       c [ d 
+%      c ) d ] e % no location :-(
+       
+       $
+}
+
+bla = music {
+       @ 
+       These Gates will open just like windows.
+       @
+}
+
+score {
+       staff { 
+               lyric music { bla }
+       }
+       staff { 
+               melodic music { mwa }
+       }
+       commands {
+               meter 2*4
+       }
+}
index bfcfebaeb004612cbad243c37a67231fbe458c4e..ba78402109039db5fb9255e604e916af95ca9024 100644 (file)
@@ -4,7 +4,9 @@
 % for lyrics, see twinkle.ly
 
 % the % is a comment.
-
+%
+% copyright: None
+%
 % declare music (which will be in *one* staff ) for the lead voice
 
 melodie = music {
index 1a7925955f2a8d860673e9e83164025c04250bb6..aad85a0fc6e5a291080893f701f24f2a860b3271 100644 (file)
@@ -23,8 +23,8 @@ ritme = staff {
 }
 
 melody=
-staff { melodic
-%      complex
+staff {
+       melodic
        music{$
        c8
        |r4 r4 r4 r4
diff --git a/input/martien.ly b/input/martien.ly
new file mode 100644 (file)
index 0000000..b299340
--- /dev/null
@@ -0,0 +1,110 @@
+% martien.ly
+%
+% Viola Quartet
+% Martien Lohman (194x-????) 
+%
+% quite alive at the time of writing; 
+% copyright by ml
+%
+% lilypond: src/stem.cc:42: void Stem::set_stemend(double): Assertion `(dir > 0 && se >= maxnote) || (se <= minnote && dir <0)' failed.
+% 
+% The purpose of this file is to demonstrate features of LilyPond;
+% respect the copyright.
+%
+% \barnumbering5
+% \barnumberstyle\boxed
+
+include "mlalt.ly"
+include "mlvio1.ly"
+include "mlvio2.ly"
+include "mlcello.ly"
+
+score {
+       staff { 
+               melodic 
+               music { alto }
+               commands {
+%                      meter 2*4
+                       clef "alto"
+                       key $fis$
+                       skip 56:0
+                       key $bes es as$
+                       skip 8:0
+%                      meter 6*8
+                       skip 8:0
+%                      meter 2*4
+                       skip 16:0
+                       key $fis$
+               }
+       }
+       staff { 
+               melodic 
+               music { violin1 }
+               commands {
+%                      meter 2*4
+                       clef "violin"
+                       key $fis$
+                       skip 56:0
+                       key $bes es as$
+                       skip 8:0
+%                      meter 6*8
+                       skip 8:0
+%                      meter 2*4
+                       skip 16:0
+                       key $fis$
+               }
+       }
+       staff { 
+               melodic 
+               music { violin2 }
+               commands {
+%                      meter 2*4
+                       clef "violin"
+                       key $fis$
+                       skip 56:0
+                       key $bes es as$
+                       skip 8:0
+%                      meter 6*8
+                       skip 8:0
+%                      meter 2*4
+                       skip 16:0
+                       key $fis$
+               }
+       } 
+       staff { 
+               melodic 
+               music { cello }
+               commands {
+%                      meter 2*4
+                       clef "bass"
+                       key $fis$
+                       skip 56:0
+                       key $bes es as$
+                       skip 8:0
+%                      meter 6*8
+                       skip 8:0
+%                      meter 2*4
+                       skip 16:0
+                       key $fis$
+               }
+       } 
+       commands {
+               meter 2*4
+               skip 56:0
+               bar "||"
+               skip 8:0
+               meter 6*8
+               bar "||"
+               skip 8:0
+               meter 2*4
+               bar "||"
+               skip 16:0
+               bar "||"
+       }
+       paper {
+%              unitspace 16mm
+               unitspace 24mm
+               width 195mm
+               output "martien.out"
+       }
+}
diff --git a/input/martien.tex b/input/martien.tex
new file mode 100644 (file)
index 0000000..3a1b732
--- /dev/null
@@ -0,0 +1,23 @@
+\documentclass{article}         %UGH
+\usepackage{a4}
+\oddsidemargin-1in\advance\oddsidemargin7.5mm
+\evensidemargin\oddsidemargin
+\textwidth\hsize\advance\textwidth-15mm
+\topmargin-1in\advance\topmargin5mm
+\vsize297mm % so what does a4 do, anyway?
+\textheight\vsize\advance\textheight-30mm
+\pagestyle{empty}
+\begin{document}
+\input lilyponddefs
+\input titledefs
+%\def\interstaffline{\vskip10pt}
+%\def\interscoreline{\vskip12pt}
+\def\interstaffline{\vskip1mm}
+\def\interscoreline{\vskip2mm}
+\vbox to 10mm{\vss}
+\title{Viola Quartet}
+\composer{Martien Lohman}
+\instrument{}
+\maketit
+\input martien.out
+\end{document}
diff --git a/input/mlalt.ly b/input/mlalt.ly
new file mode 100644 (file)
index 0000000..9058f25
--- /dev/null
@@ -0,0 +1,212 @@
+% mlalt.ly
+% 
+% Viola Quartet
+% Martien Lohman (194x-????) 
+%
+% Alto I
+% 
+% quite alive at the time of writing; 
+% copyright by ml
+%
+% The purpose of this file is to demonstrate features of LilyPond;
+% respect the copyright.
+%
+alto = music { 
+       $
+       \duration{16}
+       \octave{}
+%1
+        [ `b8. `a ] [ `g8 `b c ] |
+%2
+       [ d8 g8 ] d4 |
+%3
+       [ e fis g a ] d4 |
+%4
+       [ c `b `a `b ] `b4 |
+%5=1
+       [ `b8. `a ] [ `g8 `b c ] |
+%6=2
+       [ d8 g8 ] d4 |
+%7
+       [ c `b `a `g ] [ `fis `e `d `c ] |
+%8
+       [ `d8. `e ] [ `d `fis `a c ] |
+%9=1
+       [ `b8. `a ] [ `g8 `b c ] |
+%10
+       [ d8 `d8 ] d4 |
+%11=4
+       [ c `b `a `b ] `b4 |
+%12
+       [ `a8 d8 ] `b4 |
+%13
+       [ d8. c ] [ `b8 `a `g ] |
+%14=10
+       [ d8 `d8 ] d4 |
+%15
+       [ e8 fis8 ] [ g8 d8 ] |
+%16
+       \textstyle "italic"
+       [ c `a `fis `d ] `g4_"fine" |
+       \textstyle "roman"
+% \scoreverb{\mulooseness=-1}
+% \newline
+%17
+%=1
+       [ `b8. `a ] [ `g8 `b c ] |
+%18=2
+       [ d8 g8 ] d4 |
+%19=3
+       [ e fis g a ] d4 |
+%20=4
+       [ c `b `a `b ] `b4 |
+%21=5=1
+       [ `b8. `a ] [ `g8 `b c ] |
+%22=6=2
+       [ d8 g8 ] d4 |
+%23=20=4
+       [ c `b `a `b ] `b4 |
+%24
+       [ `a8. `g ] [ `a cis e g ] |
+%first modulation
+%25
+       [ fis8. e ] [ d8 fis g ] |
+%26
+       [ a8 `a8 ] a4 |
+%27
+       [ g fis e fis ] fis4 |
+%28
+       [ e8 a8 ] fis4 |
+%29
+       [ a8. g ] [ fis8 e d ] |
+%30
+       [ a8 `a8 ] a4 |
+%31
+       [ b8 'cis8 ] [ 'd8 a8 ] |
+%32
+       [ g e cis `a ] d4 |
+%variant a
+%33
+       [ `b8 `g `g ] [ `g8 `b c ] |
+%34
+       [ d8 `g `g ] `g4 |
+%35
+       [ e8 `g `g ] [ `g8 e fis ] |
+%36
+       [ g8. fis32 e32 ] d4 |
+%37
+       [ e8 c c ] [ c8 `b `a ] |
+%38
+       [ d8 `b `b ] [ `b8 `a `g ] |
+%39
+       [ c8 `a `a ] [ `a8 `b `a ] |
+%40
+        `a4 `g4 |
+%41
+       [ `g8 `a `g ] [ d8 e d ] |
+%42
+       [ `g8 `a `g ] [ g8 e8 ] |
+%43
+       [ d8 e d ] [ d8 c `b ] |
+%44
+       [ `b8. c32 `b32 ] `a4 |
+%45
+       \plet{ 4/6 } [ `g `a `g `a `g `a ] \plet{ 1/1 } \plet{ 4/6 } [ `g `b c d e fis ] \plet{ 1/1 } |
+%46
+       \plet{ 4/6 } [ g fis e d `b `g ] \plet{ 1/1 } [ `a8 `g8 ] |
+%47
+       \plet{ 4/6 } [ g fis e d c `b ] \plet{ 1/1 } \plet{ 4/6 } [ e d c `b `a `g ] \plet{ 1/1 } |
+%48
+       \plet{ 4/6 } [ d e d d `b `g ] \plet{ 1/1 } [ `a8 `g8 ] |
+%theme 2
+       \duration{8}
+%49
+       \plet{ 2/3 } [ f e d ] \plet{ 1/1 } f4 |
+%50
+       \plet{ 2/3 } [ e d c ] \plet{ 1/1 } e4 |
+%51
+       \plet{ 2/3 } [ d g `g ] \plet{ 1/1 } \plet{ 2/3 } [ `g `a `b ] \plet{ 1/1 } |
+%52
+        d4 e4 |
+%53
+       \plet{ 2/3 } [ f e d ] \plet{ 1/1 } f4 |
+%54
+       \plet{ 2/3 } [ e d c ] \plet{ 1/1 } e4 |
+%55
+       \plet{ 2/3 } [ d g `g ] \plet{ 1/1 } \plet{ 2/3 } [ `g `a `b ] \plet{ 1/1 } |
+%56
+        `b4 c4 | % || \key\Es
+%57
+       [ `b d ] [ `g `b ] |
+%58
+       [ c es ] [ `g c ] |
+%59
+       [ d f ] [ `g f ] |
+%60
+       [ es16 d16 es16 f16 ] g4 |
+%61
+       [ as f ] [ d as ] |
+%62
+       [ g es ] [ c `as ] |
+%63
+       [ `g `b ] [ es d ] |
+%64
+       [ c8. `g32 `es32 ] `c4 | % || \meter{6/8}
+%65
+       es4.( [ )es d c ] |
+%66
+        es2.  |
+%67
+       d4.( [ )d c `b ] |
+%68
+        d2.  |
+%69
+%      g4.\stemdown( [ ) g as g ] |
+       g4.( [ ) g as g ] |
+%70
+%      g4.\stemdown( [ ) g f es ] |
+       g4.( [ )g f es ] |
+%71
+        d2.  |
+%72
+        c r4 r4. | % || \meter{2/4}
+%73
+       \duration{8}
+       [ `b d ] [ `g `b ] |
+%74
+       [ c es ] [ `g c ] |
+%75
+       [ d f ] [ `g f ] |
+%76
+       [ es16 d16 es16 f16 ] g4 |
+%77
+       [ as f ] [ d as ] |
+%78
+       [ g es ] [ c `as ] |
+%79
+       [ `g `b ] [ es d ] |
+%80
+       [ c8. `g32 `es32 ] `c4 |
+%81
+        g4 [ as g ] |
+%82
+       \duration{16}
+       [ g f es f ] g4 |
+%83
+       [ g f e f ] g4 |
+%84
+       [ as g f g ] as4 |
+%85
+        f4 [ f des c `bes ] |
+%86
+        `a2 |
+%87
+        `b2 |
+%88
+       \textstyle "italic"
+        c2_"dacapo" |
+       \textstyle "roman"
+%\scoreverb{\mulooseness=1}
+%      \key\G ||
+       $
+}
diff --git a/input/mlcello.ly b/input/mlcello.ly
new file mode 100644 (file)
index 0000000..5795bb4
--- /dev/null
@@ -0,0 +1,219 @@
+% mlcello.ly
+% 
+% Viola Quartet
+% Martien Lohman (194x-????) 
+%
+% Cello
+% 
+% quite alive at the time of writing; 
+% copyright by ml
+%
+% The purpose of this file is to demonstrate features of LilyPond;
+% respect the copyright.
+%
+cello = music { 
+       $
+       \octave{`}
+       \duration{4}
+%%1
+       g `g |
+%%2
+       [ `g8. `a16 ] ``b |
+%%3
+       c d |
+%%4
+       g( [ ) g16 fis16 e16 fis16 ] |
+%%5=1
+       e2 |
+%%6=2
+       [ `g8. `a16 ] ``b |
+%%7
+       c d |
+%%8
+       `g d |
+%%9=1
+       `g2 |
+%%10
+       `g ``b |
+%%11=4
+       e [ g16 fis16 e16 d16( ] |
+%%12
+       ) d g |
+%%13
+       [ d8 'd8 ] g |
+%%14=10
+       [ d8 'd8 ] g |
+%%15
+       [ c8 e8 ] [ g8 `g8 ] |
+%%16
+       \textstyle "italic"
+       [ d8 'c8 ] b_"fine"
+       \textstyle "roman" |
+% \newline
+%%17=1
+       g `g |
+%%18=2
+       [ `g8. `a16 ] ``b |
+%%19=3
+       c d |
+%%20=4
+       g( [ ) g16 fis16 e16 fis16 ] |
+%%21=5=1
+       e2 |
+%%22=6=2
+       [ `g8. `a16 ] ``b |
+%%23=4
+       c g |
+%%24
+       a `a |
+%%25
+       d2 |
+%%first modulation
+%%26
+       d `fis |
+%%27
+       ``b [ dis16 c16 ``b16 `a16( ] |
+%%28
+       ) `a d |
+%%29
+       \duration{8}
+       [ `a a ] d4 |
+%%30
+       [ `a a ] d4 |
+%%31
+       [ `g ``b ] [ d `d ] |
+%%32
+       [ `a a ] d4 |
+%%variant a
+%%33
+       \duration{16}
+       [ `g8 `g `g ] [ `g8 `g `g ] |
+%%34
+       [ `g8 `g `g ] g4 |
+%%35
+       [ c8 c c ] [ c8 'c 'c ] |
+%%36
+       g4 b4 |
+%%37
+       [ a8 a a ] [ `a8 `a `a ] |
+%%38
+       [ ``b8 ``b ``b ] [ ``b8 ``b ``b ] |
+%%39
+       [ `a8 `a `a ] [ `a8 `a `a ] |
+%%40
+       `d4 `g4 |
+%%41
+       \duration{8}
+       \textstyle "italic"
+       r_"pizz"
+       \textstyle "roman"
+       g r `g |
+%%42
+       r g e4 |
+%%43
+       r b r ``b |
+%%44
+       r e a4 |
+%%45
+       r e r e |
+%%46
+       r ``b [ d g ] |
+%%47
+       r e r `a |
+%%48
+       r ``b
+       [ `d `g ] |
+%%theme 2
+%%49
+       \textstyle "italic"
+       r4_"arco"
+       \plet{ 2/3 } [ `g `g `g ] \plet{ 1/1 } |
+       \textstyle "roman"
+%%50
+       r4 \plet{ 2/3 } [ c c c ] \plet{ 1/1 } |
+%%51
+       g2 |
+%%52
+       c2 |
+%%53
+       r4 \plet{ 2/3 } [ `g `g `g ] \plet{ 1/1 } |
+%%54
+       r4 \plet{ 2/3 } [ c c c ] \plet{ 1/1 } |
+%%55
+       g2 |
+%%56
+       `g4 `c4 |
+% \key\`es ||
+%%57
+       g r g r |
+%%58
+       c r c r |
+%%59
+       `g r `g r |
+%%60
+       c r c r |
+%%61
+       d4. ``b |
+%%62
+       c2 |
+%%63
+       g4 `g4 |
+%%64
+       c4 `c4 |
+% \meter{6/8} ||
+%%65
+       [ c c c ] c4.  |
+%%66
+       [ `c `c `c ] `c4.  |
+%%67
+       [ `g `g `g ] `g4. |
+% \newline     
+%%68
+       [ g g g ] g4.  |
+%%69
+       c2.  |
+%%70
+       c2.  |
+%%71
+       g2.  |
+%%72
+       'c r4 r4. |
+%%73
+% \meter{2/4} ||
+       g r g r |
+%%74
+       c r c r |
+%%75
+       `g r `g r |
+%%76
+       c r c4 |
+%%77
+       d4. ``b |
+%%78
+       c2 |
+%%79
+       g4 `g4 |
+%%80
+       c4 `c4 |
+%%81
+       \duration{2}
+       `c |
+%%82
+       `c |
+%%83
+       `e |
+%%84
+       `f |
+%%85
+       `as |
+%%86
+       c |
+%%87
+       d |
+%%88
+       \textstyle "italic"
+       d_"dacapo"
+       \textstyle "roman"
+% \key\`g ||
+       $
+}
diff --git a/input/mlvio1.ly b/input/mlvio1.ly
new file mode 100644 (file)
index 0000000..7ea613f
--- /dev/null
@@ -0,0 +1,216 @@
+% mlvio1.ly
+% 
+% Viola Quartet
+% Martien Lohman (194x-????) 
+%
+% Violin I
+% 
+% quite alive at the time of writing; 
+% copyright by ml
+% 
+% The purpose of this file is to demonstrate features of LilyPond;
+% respect the copyright.
+%
+violin1 = music { 
+       $
+       \octave{}
+       \duration{4}
+%1
+       g [ b8. a16 ] |
+%2
+       g2 |
+%3
+       g [ a16 b16 'c16 a16 ] |
+%4
+       g2 |
+%5=1
+       g [ b8. a16 ] |
+%6=2
+       g2 |
+%7
+       e fis |
+%8
+       d fis |
+%9=1
+       g [ b8. a16 ] |
+%10
+       g f |
+%11=4
+       e d |
+%12
+       [ fis8 a8 ] [ g8 'd8 ] |
+%13
+       [ 'd8 a8 ] [ 'd8 b8 ] |
+%14=10
+       a b |
+%15
+       'c b |
+%16
+       \textstyle "italic"
+       a g_"fine"
+       \textstyle "roman" |
+%\newline
+%17=1
+       g [ b8. a16 ] |
+%18=2
+       g2 |
+%19=3
+       g [ a16 b16 'c16 a16 ] |
+%20=4
+       g2 |
+%21=5
+       g [ b8. a16 ] |
+%22=6
+       g2 |
+%23=4
+       e [ d16 c16 `b16 c16 ] |
+%24
+       cis 'cis |
+%25
+       'd [ 'fis8. 'e16 ] |
+%first modulation
+%26
+       'd 'c |
+%27
+       b a |
+%28
+       [ a8 b16 'cis16 ] 'd |
+%29
+       'cis 'd |
+%30
+       'cis a |
+%31
+       [ g8 'd8( ] ) 'd |
+%32
+       'cis 'c |
+%variant 'a
+%33
+       \duration{16} [ b8 'd 'd ] [ 'd8 'd 'd ] |
+%34
+       [ 'g8 'd 'd ] b4 |
+%35
+       [ 'c8 'c 'c ] [ 'c8 'c 'c ] |
+%36
+       b2 |
+%37
+       [ 'c8 'e 'e ] [ 'e8 'd 'c ] |
+%38
+       [ b8 'd 'd ] [ 'd8 'd 'd ] |
+%39
+       [ 'e8 'c 'c ] [ 'c8 'd 'c ] |
+%40
+       'c4 { b4 'd4 } |
+%41
+       \textstyle "italic"
+       \duration{8}
+       r_"pizz" d r g
+       \textstyle "roman" |
+%42
+       r d e4 |
+%43
+       r b r 'd |
+%44
+       r 'e 'c4 |
+%45
+       r b r b |
+%46
+       r b [ a b ] |
+%47
+       r b r 'c |
+%48
+       r 'd [ 'd b ] |
+%theme 2
+%49
+       \textstyle "italic"
+       r4_"arco" \plet{ 2/3 } [ b8  b  b ] \plet{ 1/1 }
+       \textstyle "roman" |
+%50
+       r4 \plet{ 2/3 } [ g g g ] \plet{ 1/1 } |
+%51
+       b2 |
+%52
+       'c2 |
+%53
+       r4 \plet{ 2/3 } [ b b b ] \plet{ 1/1 } |
+%54
+       r4 \plet{ 2/3 } [ g g g ] \plet{ 1/1 } |
+%55
+       b2 |
+%56
+       g2 |
+% \key\Es ||
+%57
+       f r f r |
+%58
+       es r 'c r |
+%59
+       b r b r |
+%60
+       'c r 'c4 |
+%61
+       \duration{16}
+       \plet{ 4/6 } [ as f d f as 'd ] \plet{ 1/1 } \plet{ 4/6 } [ as f d `as d f ] \plet{ 1/1 } |
+%62
+       \plet{ 4/6 } [ g es c `g c es ] \plet{ 1/1 } \plet{ 4/6 } [ g 'c 'es 'c g es ] \plet{ 1/1 } |
+%63
+       \plet{ 4/6 } [ g d g bes 'd 'g ] \plet{ 1/1 } \plet{ 4/6 } [ 'f 'd bes g f d ] \plet{ 1/1 } |
+%64
+       \duration{8}
+       [ c g ] g4 |
+% \meter{6/8} ||
+%65
+       [ g g g ] g4.  |
+%66
+       [ c c c ] c4.  |
+%67
+       [ g g g ] g4.  |
+%68
+       [ b8 b  b ] b4.  |
+%69
+       [ 'c g es ] 'c4.  |
+%70
+       'c4. 'es4.  |
+%71
+       [ 'f 'd b ] [ g a8 b ] |
+%72
+       'c r4 r4. |
+% \meter{2/4} ||
+%73
+       f r f r |
+%74
+       es r 'c r |
+%75
+       b r b r |
+%76
+       'c r 'c4 |
+%77
+       \duration{16}
+       \plet{ 4/6 } [ as f d f as 'd ] \plet{ 1/1 } \plet{ 4/6 } [ as f d `as d f ] \plet{ 1/1 } |
+%78
+       \plet{ 4/6 } [ g es c `g c es ] \plet{ 1/1 } \plet{ 4/6 } [ f 'c 'es 'c g es ] \plet{ 1/1 } |
+%79
+       \plet{ 4/6 } [ g d f b 'd 'g ] \plet{ 1/1 } \plet{ 4/6 } [ 'f 'd b g f d ] \plet{ 1/1 } |
+%80
+       [ c8 g8 ] g4 |
+%81
+       \duration{2}
+       'c |
+%82
+       'c |
+%83
+       'des |
+%84
+       'c |
+%85
+       'c |
+%86
+       es |
+%87
+       d |
+%88
+       \textstyle "italic"
+       a_"dacapo"
+       \textstyle "roman"
+% \key\G ||
+       $
+}
diff --git a/input/mlvio2.ly b/input/mlvio2.ly
new file mode 100644 (file)
index 0000000..0a9df42
--- /dev/null
@@ -0,0 +1,217 @@
+% mlvio2.ly
+% 
+% Viola Quartet
+% Martien Lohman (194x-????) 
+%
+% Violin II
+% 
+% quite alive at the time of writing; 
+% copyright by ml
+%
+% The purpose of this file is to demonstrate features of LilyPond;
+% respect the copyright.
+%
+violin2 = music { 
+       $
+       \octave{}
+       \duration{4}
+%1
+       d2 |
+%2
+       [ `b8. `a16 ] `g4 |
+%3
+       [ g8 e8 ] fis |
+%4
+       d2 |
+%5=1
+       e2 |
+%6=2
+       [ `b8. `a16 ] `g4 |
+%7
+       `g `a |
+%8
+       `b `a |
+%9=1
+       d2 |
+%10
+       `b `g |
+%11=4
+       `g2 |
+%12
+       [ d8 e16 fis16 ] g |
+%13
+       fis g |
+%14=10
+       fis d |
+%15
+       c d |
+%16
+       \textstyle "italic"
+       d2_"fine" |
+       \textstyle "roman"
+% \newline
+%17=1
+       d2 |
+%18=2
+       [ `b8. `a16 ] `g4 |
+%19=3
+       [ g8 e8 ] fis |
+%20=4
+       d2 |
+%21=5=1
+       e2 |
+%22=6=2
+       [ `b8. `a16 ] `g4 |
+%23=4
+       `g2 |
+%24
+       cis e |
+%25
+       a2 |
+%first modulation
+%26
+       fis d |
+%27
+       d2 |
+%28
+       [ cis8 e8 ] [ d8 a8 ] |
+%29
+       [ a8 e8 ] [ a8 fis8 ] |
+%30
+       e fis |
+%31
+       g fis |
+%32
+       a fis |
+%variant a
+%33
+       \duration{16}
+       [ g8 b b ] [ b8 g a ] |
+%34
+       [ b8 b b ] f4 |
+%35
+       [ g8 e e ] [ e8 g g ] |
+%36
+        b4 fis4 |
+%37
+       [ a8 a a ] [ a8 a a ] |
+%38
+       [ fis8 fis fis ] [ fis8 fis fis ] |
+%39
+       [ e8 e e ] [ e8 e e ] |
+%40
+       fis4 g4 |
+%41
+       \duration{8}
+       \textstyle "italic"
+       r_"pizz"
+       \textstyle "roman"
+       `b r `b |
+%42
+       r `b `g4 |
+%43
+       r fis r fis |
+%44
+       r g e4 |
+%45
+       r e r g |
+%46
+       r fis [ fis g ] |
+%47
+       r g r e |
+%48
+       r fis [ fis d ] |
+%theme 2
+%49
+       \textstyle "italic"
+       r4_"arco"
+       \textstyle "roman"
+       \plet{ 2/3 } [ d8 d d ] \plet{ 1/1 } |
+%50
+       r4 \plet{ 2/3 } [ g8 g g ] \plet{ 1/1 } |
+%51
+       d2 |
+%52
+       c2 |
+%53
+       r4 \plet{ 2/3 } [ d8 d d ] \plet{ 1/1 } |
+%54
+        r4 \plet{ 2/3 } [ e e e ] \plet{ 1/1 } |
+%55
+       d2 |
+%56
+       f4 e4 |
+% \key\Es ||
+%57
+       d r `b r |
+%58
+       `g r es r |
+%59
+       g r g r |
+%60
+       g r es4 |
+%61
+       f2 |
+%62
+       es2 |
+%63
+       `b d4.  |
+%64
+       es2 |
+% \meter{6/8} ||
+%65
+       \duration{8}
+       [ c c c ] c4.  |
+%66
+       [ `g `g `g ] `g4.  |
+%67
+       [ `b8 `b `b ] `b4.  |
+%68
+       [ g g g ] g4.  |
+%69
+       es2. |
+%70
+       [ c es g ] 'c4.  |
+%71
+       b4 g4 d4 |
+%72
+       es r4 r4. |
+%73
+% \meter{2/4} ||
+       d r `b r |
+%74
+       `g r es r |
+%75
+        g r g r |
+%76
+        g r es4 |
+%77
+       \duration{2}
+       f |
+%78
+       es |
+%79
+       `b8 d4.  |
+%80
+       es |
+%81
+       es |
+%82
+       es |
+%83
+       bes |
+%84
+       f |
+%85
+       f |
+%86
+       ges |
+%87
+%      = g |
+%88
+       \textstyle "italic"
+       fis_"dacapo" |
+       \textstyle "roman"
+% \key\G ||
+       $
+}
index 01d6545e64a787888c1a78d3b5cdf97e85072fae..e3b1e50e0663cf9ff171f6bfb9de542bb07297dc 100644 (file)
 
 horn =
 staff {
-%      melodic
-       complex
+       melodic
        music{  $
        \octave { ' }
-       \duration { 8}
+       \duration { 8 }
 
 % 1
        d2(( [)d e cis `b]              |       
@@ -118,7 +117,6 @@ score {
                bar "|:"
                skip 10:0
                bar ":|"
-               meter 4* 4
                skip 13:0
                bar "||"
        }
diff --git a/input/pavane.tex b/input/pavane.tex
new file mode 100644 (file)
index 0000000..69a1362
--- /dev/null
@@ -0,0 +1,12 @@
+\documentclass{article}         %UGH
+\usepackage{a4}
+\begin{document}
+\input lilyponddefs
+\input titledefs
+\def\interscoreline{\vskip12pt}
+\title{Pavane pour une Infante d\'efunte}
+\composer{Maurice Ravel}
+\instrument{Cor en Fa}
+\maketit
+\input pavane.out
+\end{document}
index 63742f53c92d0ca74509d18e3e7930244794bd3a..97d8dd89cb045899cbb9139330df044ae6b7578b 100644 (file)
@@ -54,11 +54,11 @@ score {
                geometric 1.4
        }
        commands  {
-                meter 6* 8
+                meter 6*8
                 skip 6:0
-               meter 4* 4
+               meter 4*4
                skip 2:0
                skip 11:0
 
        }
-}
\ No newline at end of file
+}
diff --git a/input/scsii-menuetto.tex b/input/scsii-menuetto.tex
new file mode 100644 (file)
index 0000000..4eb7231
--- /dev/null
@@ -0,0 +1,19 @@
+\documentclass{article}         %UGH
+\usepackage{a4}
+\oddsidemargin-1in\advance\oddsidemargin7.5mm
+\evensidemargin\oddsidemargin
+\textwidth\hsize\advance\textwidth-15mm
+\begin{document}
+\input lilyponddefs
+\input titledefs
+\def\interscoreline{\vskip12pt}
+\title{Solo Cello Suites\normalsize\\[2ex]Suite II}
+% \subtitle{Suite II}
+\composer{J.\ S.\ Bach}
+% \lefttitle{Menuetto}
+% \tempo{Moderato}
+% \metron{4=120}
+\instrument{Menuetto I} % heu
+\maketit
+\input scsii-menuetto.out
+\end{document}
index 81ef61d6b6f3d7a20c751ca06eeb6f0e440261e8..87c317b403f9db3b894a97eb445c2005cc9bc5b0 100644 (file)
@@ -1,5 +1,13 @@
-% st\"andchen.lily
-% Franz Schubert (? - ?)
+% standchen.ly
+%
+% St\"andchen (Serenade) "Leise flehen meine Lieder" D.957 No.4
+% Franz Schubert (1797-1828)
+% Text by Ludwig Rellstab (1799-1860)
+%
+% Copyright (c) 1995,1996,1997 Jan Nieuwenhuizen <jan@digicash.com>
+% 
+% The purpose of this file is to demonstrate features of LilyPond.
+% (there is an accompanying LaTeX file, standchen.tex)
 %
 % comments with # note missing stuff
 % heu, make that %#%
 %% LilyPond's naive idealspacing calc.
 %%
 
-%
 %#%%
 %#%\title{St\"andchen}
 %#%\subtitle{Serenade}
 %#%%
-%#%\composer{`franz Schubert}
+%#%\composer{Franz Schubert}
 %#%\tempo{M\"a\ss ig}
 %#%%
 %#%\meter{3/4}
-%#%\key\`f
+%#%\key\F
 %#%\clef\treble
 %#%%
 %#%\barnumbering5
 %%1
 melodie = music { $ 
        \duration{ 8 }
-       r_"pp" { [ d `a-| } f-| { d `a-| } f-| { d `a-| ] }
+%      r_"\pp" { [ d `a-| } f-| { d `a-| } f-| { d `a-| ] }
+       r { [ d `a-|_"\pp" } f-| { d `a-| } f-| { d `a-| ] }
 %%2
        r { [ d `bes-| } f-| { d `bes-| } f-| { d `bes-| ] }
 %%3
+       \textstyle "italic"
        r_"simile" { [ d `bes } e { d `bes } e { d `bes ] }
+       \textstyle "roman"
 %%4
        r { [ `a cis } e { `a cis } e { `a cis ] }
 %#%:|
@@ -51,18 +61,18 @@ melodie = music { $
 %%9
 %#%    { 'a4.( 'cis4.\stemdown_p } { ) 'g 'e_{dolce} }
 %#%    { 'g( 'e } 'f ) 'e
-       'a4.( )g \plet{ 2/3 } { 'g 'e } { 'f } { 'e } \plet{ 1/1 }
+       'a4.( )'g \plet{ 2/3 } { 'g 'e } { 'f } { 'e } \plet{ 1/1 }
 %%10
        { 'f2. 'd2. }
 %%11
-       \plet { 2/3 } [ a_"pp"( )bes a ] \plet { 1/1 } 'f4. a
+       \plet { 2/3 } [ a_"\pp"( )bes a ] \plet { 1/1 } 'f4. a
 %%12
        \plet { 2/3 } [ g( ) a g ] \plet { 1/1 } 'e4. 'd
 %%13
        'c4. bes \plet { 2/3 } [ bes( ) a g ] \plet { 1/1 }
 %%14
 %#%    a2 r { 'd(^ f_p(v }
-       a2 r { 'd f_"p" }
+       a2 r { 'd f_"\p" }
 %%15
 %#%    { ) e4. ) 'c4.\stemup_{dolce} } { bes g }
        { e4. 'c4._"dolce" } { bes g }
@@ -70,12 +80,14 @@ melodie = music { $
 %%16
        { a2. f2. }
 %%17
+       \textstyle "italic"
        [ a8._"cresc." 'cis16 ] 'f4. 'e
+       \textstyle "roman"
 %%18
        [ 'd8. a16 ] f4. d
 %%19
 %#%    'c\grace\stemup
-       \plet { 2/3 } [ bes_"pp"( ) a bes ] \plet { 1/1 } 'd4. bes
+       \plet { 2/3 } [ bes_"\pp"( ) a bes ] \plet { 1/1 } 'd4. bes
 %%20
        a2.
 %%21
@@ -85,23 +97,23 @@ melodie = music { $
 %#%    =f2.
        f2.
 %%23
-       [ a8._"mf" 'cis16 ] 'f4. 'e
+       [ a8._"\mf" 'cis16 ] 'f4. 'e
 %%24
        [ 'd8. a16 ] fis4. d
 %%25
 %#%    'cis\grace\stemup
-       \plet { 2/3 } [ b_"mf"( ) ais b ] \plet { 1/1 } 'd4. b
+       \plet { 2/3 } [ b_"\mf"( ) ais b ] \plet { 1/1 }        'd4. b
 %%26
        { a2. fis2. }
 %#%\tighten\newline
 %%27
-       \plet { 2/3 } [ 'e_"f"( )'dis 'e ] \plet { 1/1 } 'g4. 'cis
+       \plet { 2/3 } [ 'e_"\f"( )'dis 'e ] \plet { 1/1 } 'g4. 'cis
 %%28
        { 'd2. fis2. }
 %#%\volta1
 %%29
 %#%    { bes2(^++++ g2_{mf} } 
-       { bes2 g2_"mf" } 
+       { bes2 g2_"\mf" } 
 %#%    [v { 'd8.( bes8. } { bes16 ) )++ g16 } ]
        { [ 'd8. bes8. } { bes16 g16 ] }
 %%30
@@ -113,7 +125,7 @@ melodie = music { $
 %#%    [ { a cis_.( } { a e_. } { a )- g_. } ]
        { [ a cis_. } { a e_. } { a g_. ] }
 %%32
-       { a2 fis2_"pp" } { a4 fis4 }
+       { a2 fis2_"\pp" } { a4 fis4 }
 %%33
 %#%    { b2(^ g2 } [v { 'd8.( b8. } { b16 ) ) g16 } ]
        { b2( g2 } { [ 'd8. b8. } { b16 g16 ] }
@@ -138,36 +150,37 @@ melodie = music { $
        'cis2 r4
 %%41
 %#%    { > 'fis4. 'cis4._f } 'e [ 'e( ) 'd >! 'cis ] \plet { 1/1 }
-       { 'fis4. 'cis4._"f" } 'e \plet { 2/3 } [ 'e( )'d 'cis ] \plet { 1/1 }
+       { 'fis4. 'cis4._"\f" } 'e \plet { 2/3 } [ 'e( )'d 'cis ] \plet { 1/1 }
 %%42
        [ b8. 'cis16 ] 'd4^> b r
 %%43
 %#%    [^ { b8._{ }_{ }_{ }_{ }_{ }_f g2. } 'cis16 ] 'd4^> b r
-       [ b8._"f" 'cis16 ] 'd4^> b r
+       [ b8._"\f" 'cis16 ] 'd4^> b r
 %%44
 %#%    [^ { > b8. fis2 } 'cis16 ] 'd4^> b >! r
-% typo?
        [ b8. 'cis16 ] 'd4^> b r
 %%45
 %#%    'cis\grace\stemup
-       \plet { 2/3 } [ b_"p"( )ais b ] \plet { 1/1 } 'd4. b
+       \plet { 2/3 } [ b_"\p"( )ais b ] \plet { 1/1 } 'd4. b
 %%46
 %#%    { =a2. fis2. }
        { a2. fis2. }
 %%47
-       \plet { 2/3 } [ 'e_"f"( )'dis 'e ] \plet { 1/1 } 'g4.^> 'cis
+       \plet { 2/3 } [ 'e_"\f"( )'dis 'e ] \plet { 1/1 } 'g4.^> 'cis
 %%48
 %#%    { fis2.(v ='d2.\stemup(^ }
        { fis2. 'd2. }
 %%49
 %#%    { ) 'd4 ) =f2._> } { r4 s4_{decr} } 'd4\stemup
+       \textstyle "italic"
        'd4 r4_"decresc." 'd4
+       \textstyle "roman"
 %%50
        { bes2. e2. }
 %%51
        { a2. cis2. }
 %%52
-       { fis2 d2 } { a4 f4_"pp" }
+       { fis2 d2 } { a4 f4_"\pp" }
 %%53
 %#%    { bes2 g2 } [ { 'd8.^>( bes8. } { ) bes16 g16 } ]
        { bes2 g2 } { [ 'd8.^> bes8. } { bes16 g16 ] }
@@ -178,7 +191,9 @@ melodie = music { $
 %#%    { a4. g4. } [ { a cis_.( } { a e_. } { a )- g_. } ] 
        { a4. g4. } { [ a cis_. } { a e_. } { a g_. ] }
 %%56
+       \textstyle "italic"
        { a2. fis2._"dim." }
+       \textstyle "roman"
 %%57
        { a2. fis2. }
 %%58
@@ -482,10 +497,11 @@ score {
                output "standchen.uit"
                unitspace 2.4 cm
  %             unitspace 4.0 cm % leaves all text stand free
-geometric 1.4
+               geometric 1.4
        }
        staff { 
-               melodic music { melodie }
+               melodic
+               music { melodie }
                commands {
                        key $bes$
                        clef "violin"
@@ -497,7 +513,8 @@ geometric 1.4
                music { tekst2 }
        }
        staff { 
-               melodic music { begeleiding }
+               melodic
+               music { begeleiding }
                commands {
                        key $bes$
                        clef "bass" 
@@ -510,6 +527,14 @@ geometric 1.4
                skip 32:0
                bar ":|"
                skip 22:0
-               bar "||"
+               bar "||"
+       }
+       paper {
+               symboltables { table_sixteen }
+               width 195mm
+               unitspace 20mm
+%              unitspace 4.0 cm % leaves all text stand free
+%              geometric 1.4
+               output "standchen.out"
        }
 }
diff --git a/input/standchen.tex b/input/standchen.tex
new file mode 100644 (file)
index 0000000..9c87c4c
--- /dev/null
@@ -0,0 +1,24 @@
+\documentclass{article}         %UGH
+\usepackage{a4}
+\oddsidemargin-1in\advance\oddsidemargin7.5mm
+\evensidemargin\oddsidemargin
+\textwidth\hsize\advance\textwidth-15mm
+\topmargin-1in\advance\topmargin5mm
+\vsize297mm % so what does a4 do, anyway?
+\textheight\vsize\advance\textheight-30mm
+\pagestyle{empty}
+\begin{document}
+\input lilyponddefs
+\input titledefs
+%\def\interstaffline{\vskip10pt}
+%\def\interscoreline{\vskip12pt}
+\def\interstaffline{\vskip1mm}
+\def\interscoreline{\vskip2mm}
+\vbox to 10mm{\vss}
+\title{St\"andchen\normalsize\\[2ex](Serenade)}
+\composer{Franz Schubert (1797-1828)}
+\instrument{M\"a\ss ig} % heu
+%#%\tempo{M\"a\ss ig}
+\maketit
+\input standchen.out
+\end{document}
index 8664faed17c2b3723e423091f3dcda2efd05450f..80b8be6eee4ed9dc6e4b3f1710eaf50de39c65c8 100644 (file)
@@ -2,7 +2,7 @@
 %  "Altijd is Kortjakje ziek"
 %  "Twinkle twinkle little star"
 % 
-
+% Copyright: none
 
 melodie = music {
        $
@@ -104,15 +104,13 @@ text3 = music {
 }
 
 mstaf = staff {
-%      melodic
-       complex
+       melodic
        music { melodie }
        commands { clef "violin" }
 }
 
 bass_staf = staff {
-%      melodic
-       complex
+       melodic 
        music { begeleiding }
        commands { clef "bass" }
 }
diff --git a/input/wohltemperirt.ly b/input/wohltemperirt.ly
new file mode 100644 (file)
index 0000000..aac7654
--- /dev/null
@@ -0,0 +1,65 @@
+% JS Bach, Das Wohltemperirtes Clavier I, Fuga II (c-minor)
+%
+% a 7 bar fragment
+%
+%      Public Domain -- by HWN
+%
+
+dux = music { $
+       \duration { \last } 
+       \stem{-1}  r8 ['c16 b] ['c8 g] [as 'c16 b] ['c8 'd] |
+       [g 'c16 b] ['c8 'd] [f16 g] as4 [g16 f] |
+       [es 'c b a] [ g f es d] [c8 'es 'd 'c] |
+       [bes a bes 'c] [fis g a fis] |
+       g4 r16 [c d es] [f g as8(] [)as16 d es f ]|
+       [g a bes8(] [)bes16 es f g ] [as g f es] [d8 'c16 b]|
+       'c4 r4 r8 ['f 'es 'd] |
+       r8 [as g f] [g f16 es] [f8 d] | 
+$}
+
+comes = music { $
+       r1 r1
+       \stem{1}
+       \octave {'}
+       r8 [g16 fis] [g8 c] [es g16 f] [g8 a]|
+       [d8 g16 fis] [g8 a] [c16 d] es4 [d16 c] |
+       [`bes8 es16 d] [es8 `g8] [`as f16 es] [f8 `a] |
+       [`bes8 g16 f] [g8 `b] [c8 d16 es] f4( |
+       [) f8 es16 d] [c16 `bes `as `g] [`f8 as g f] |
+       [es d es f] [`b c d `b] |
+       
+$}
+
+bassdux = music { $
+       r1 r1 r1 r1 r1 r1
+       \stem{1}        \octave { }
+       r8 [c16 B] [c8 G] [As c16 Bes] [c8 d] |
+       [G c16 B] [c8 d] [F16 G] As4 [G16 F] | $
+}
+
+% will make it look even uglier
+basstaf = staff { melodic
+       music { bassdux }
+       commands {
+               clef bass
+               key $bes es as$
+       }
+}
+
+score {
+       staff { melodic
+               music { dux }
+               music { comes }
+               
+               commands {
+                       key $bes es as$
+               }
+       }
+       commands { 
+               meter 4*4
+               skip 8:0
+       }
+       paper { unitspace 2.5cm
+               geometric 1.1
+       }
+}
\ No newline at end of file
index 1ad6d5e58cfec46d35322f4f0aec7b658803febc..fd0d0ed0bafe4623857c3d3fef1c83ab02491299 100644 (file)
@@ -20,6 +20,7 @@
 
 %% musix defs
 \parindent=0pt
+\newdimen\smallspace
 \newdimen\interlinedist
         \newcount\n
         \newdimen\balkhoog
@@ -41,6 +42,7 @@
         \font\hslurhfont=xslhz20
         \font\musicfnt=musix20
         \font\italicfont=cmti10
+        \font\dynfont=cmbxti10 scaled \magstep1
         \balkhoog=20pt
         \notewidth=6pt
         \noteheight=5pt
@@ -60,6 +62,7 @@
         \font\hslurdfont=xslhd16
         \font\hslurhfont=xslhz20
         \font\musicfnt=musix16
+        \font\dynfont=cmbxti10
         \balkhoog=16pt
         \staffrulethickness=0.4pt
         \notewidth=5pt
@@ -68,6 +71,8 @@
 }
 
 \def\musixcalc{
+       \interlinedist=\fontdimen5\musicfnt
+       \smallspace=.3\interlinedist
         \interstaffrule=\balkhoog
         \advance\interstaffrule by-\staffrulethickness
         \divide\interstaffrule by 4
                \balkhalf=\balkhoog
  \rationalmultiply\balkhalf*1/2 
 }
-\def\dyn{\italicfont}
+% \def\dyn{\italicfont}
+\def\dyn{\dynfont}
+\def\dynf{f\kern-.1ex}
+\def\dynm{f\kern-.15ex}
+\def\dynp{p\kern-.15ex}
+\def\ppp{\dynfont\dynp\dynp p}
+\def\pp{\dynfont\dynp p}
+\def\p{\dynfont p}
+\def\mp{\dynfont\dynm p}
+\def\mf{\dynfont\dynm f}
+\def\f{\dynfont f}
+\def\ff{\dynfont\dynf f}
+\def\fff{\dynfont\dynf\dynf f}
 
 \def\slurcharh#1{{\slurhfont\char#1}}
 \def\slurcharu#1{{\slurufont\char#1}}
 \mdef\usixteenthflag{41}
 \mdef\uthirtysecondflag{42}
 
-\def\maatstreep{\vrule height\balkhoog}
-\def\finishbar{\vrule height\balkhoog  width 1pt}
 \maccentdef\repeatcolon{55}{2/1}
 \def\emptybar{}
-\def\repeatbar{\rightalign{\repeatcolon\kern 2pt\finishbar}}
-\def\startrepeat{\hbox{\finishbar\kern 2pt\repeatcolon}}
-\def\repeatbarstartrepeat{\hbox{\repeatbar\kern 1pt\startrepeat}}
+
+\def\thinbar{\vrule height\balkhoog}
+%? what-s wrong with rightalign?
+\def\thickbar{\vrule height\balkhoog width 2\smallspace}
+\def\maatstreep{\thinbar}
+% \def\finishbar{\rightalign{\thinbar\kern\smallspace\thickbar}}
+\def\finishbar{\hss\rightalign{\thinbar\kern\smallspace\thickbar}}
+% \def\repeatstopbar{\rightalign{\repeatcolon\hskip2\smallspace\thinbar\hskip\smallspace\thickbar}}
+\def\repeatstopbar{\hss\rightalign{\repeatcolon\hskip2\smallspace\thinbar\hskip\smallspace\thickbar}}
+% \def\repeatstopbar{\kern-3\smallspace\rightalign{\repeatcolon\kern2\smallspace\thinbar\kern\smallspace\thickbar}\kern3\smallspace}
+\def\repeatstartbar{\hbox{\thickbar\kern\smallspace\thinbar\kern2\smallspace\repeatcolon}}
+\def\repeatstopstart{\hbox{\repeatcolon\kern2\smallspace\thinbar\kern\smallspace\thickbar\kern\smallspace\thickbar\kern\smallspace\thinbar\kern2\smallspace\repeatcolon}}
+\def\doublebar{\hbox{\thinbar\hskip\smallspace\thinbar}}
+
+%compatability
+\def\repeatbar{\repeatstopbar}
+\def\startrepeat{\repeatstartbar}
+\def\repeatbarstartrepeat{\repeatstopstart}
 
 \def\generalmeter#1#2{\botalign{\vbox to\balkhalf{\vss \meterfont#1}%
         \nointerlineskip
diff --git a/pavane.tex b/pavane.tex
deleted file mode 100644 (file)
index 69a1362..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-\documentclass{article}         %UGH
-\usepackage{a4}
-\begin{document}
-\input lilyponddefs
-\input titledefs
-\def\interscoreline{\vskip12pt}
-\title{Pavane pour une Infante d\'efunte}
-\composer{Maurice Ravel}
-\instrument{Cor en Fa}
-\maketit
-\input pavane.out
-\end{document}
index 99c4f0a6b4a10f5d6d86706a80c4e19c91fcce07..55fba019b21441427d464c574df332aa01a0673e 100644 (file)
@@ -9,4 +9,4 @@ TAGS: $(mycc)
        etags -CT $(mycc) 
 
 clean:
-       rm -f $(gencc)
\ No newline at end of file
+       rm -f $(gencc)
index abf94d157b284e8acc8e62fae4e74209fb1e4320..52080a39ab4091da451fdbb6483fd02d4f215677 100644 (file)
@@ -1,3 +1,5 @@
+#include "varray.hh"
+
 #include "dimen.hh"
 #include "beam.hh"
 #include "misc.hh"
@@ -72,8 +74,8 @@ Beam::set_default_dir()
     int dirs[2];
     dirs[0]=0; dirs[1] =0;
     for (iter_top(stems,i); i.ok(); i++) {
-       i->set_default_dir();
-       dirs[(i->dir+1)/2] ++;
+       int d = i->get_default_dir();
+       dirs[(d+1)/2] ++;
     }
     dir =  (dirs[0] > dirs[1]) ? -1 : 1;
     for (iter_top(stems,i); i.ok(); i++) {
diff --git a/src/complexmelodicstaff.cc b/src/complexmelodicstaff.cc
deleted file mode 100644 (file)
index 66aa63e..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "keyitem.hh"
-#include "stem.hh"
-#include "rest.hh"
-#include "notehead.hh"
-#include "paper.hh"
-#include "molecule.hh"
-#include "linepstaff.hh"
-#include "complexmelodicstaff.hh"
-#include "sccol.hh" 
-#include "localkeyitem.hh"
-#include "request.hh"
-
-const int NO_LINES=5;
-
-
-void
-Complex_melodic_staff::set_output(PScore*ps)
-{
-    theline_l_ = new Linestaff(NO_LINES,ps); // theline_l_ is added to pscore later.
-    Complex_staff::set_output(ps);
-}
-
-Item *
-Complex_melodic_staff::get_TYPESET_item(Command*com)
-{
-    if (com->args[0] == "KEY") {
-       return new Keyitem(NO_LINES);   // urgh. depends on clef.
-    } else
-       return Complex_staff::get_TYPESET_item(com);
-}
-
index f266f7bed72e4326246dcf6f039735cc6c989b4c..372d86db103aa8ba1a7a41e0e89ba9dd2a09ede4 100644 (file)
@@ -1,13 +1,16 @@
+#include "keyitem.hh"
+
 #include "request.hh"
 #include "pscore.hh"
 #include "paper.hh"
 #include "complexstaff.hh"
 #include "sccol.hh"
 #include "debug.hh"
-
+#include "linepstaff.hh"
 #include "clefitem.hh"
 #include "bar.hh"
 #include "meter.hh"
+const NO_LINES = 5;
 
 Item *
 Complex_staff::get_TYPESET_item(Command *com)
@@ -16,7 +19,9 @@ Complex_staff::get_TYPESET_item(Command *com)
     Array<Scalar> arg( com->args);
     String type =arg[0];
     arg.del(0);
-    if (type ==  "BAR" ) {
+    if (com->args[0] == "KEY") {
+       return new Keyitem(NO_LINES);   // urgh. depends on clef.
+    } else if (type ==  "BAR" ) {
        s = new Bar(com->args[1]);      
     } else if (type == "METER") {
        s = new Meter(arg);
@@ -31,6 +36,7 @@ Complex_staff::get_TYPESET_item(Command *com)
 }
 
 
+
 Interval
 citemlist_width(const Array<Item*> &its)
 {
@@ -91,6 +97,7 @@ Complex_column::typeset_item_directional(Item *i, int dir, int breakst) // UGH!
 void
 Complex_staff::set_output(PScore* ps )
 {
+    theline_l_ = new Linestaff(NO_LINES,ps); // theline_l_ is added to pscore later.
     pscore_l_ = ps;
     pscore_l_->add(theline_l_);
 }
index ffa667ea857300790aa8ce19857fbde518311d2a..8f961b7d7b60baf92e959ef60127d29fe34ff6d4 100644 (file)
@@ -30,7 +30,7 @@ Complex_column::setup_requests()
 
            if (j->barcheck()) {
                if (tdescription_->whole_in_measure) {
-                   error("Barcheck failed, " + tdescription_->str());
+                   error( "Barcheck failed", j->defined_ch_c_l_m );
                }
                continue;
            }
@@ -38,7 +38,10 @@ Complex_column::setup_requests()
                continue;
            if (j->command())
                continue;
-           todo_l_arr_.push(j);
+           if (j->groupchange()) // ugh
+               first_l_arr_.push(j);
+           else
+               second_l_arr_.push(j);
        }
 }
 
index 5cc1b5b6a5f52f50914f04200ab638d09b0a8146..f1a73e0200b02be6ffaca5faf376907aae2fa179 100644 (file)
@@ -5,33 +5,14 @@
 #include "clef.hh"
 #include "pscore.hh"
 #include "complexstaff.hh"
-#include "complexwalker.hh"
 #include "sccol.hh"
 #include "debug.hh"
 #include "keyitem.hh"
 #include "clefitem.hh"
 #include "voicegroup.hh"
 #include "register.hh"
-
-Rhythmic_grouping
-cparse_grouping(Array<Scalar> a, Moment one_beat)
-{
-    Array<int> r;
-    for (int i= 0 ; i < a.size(); i++)
-       r.push(a[i]);
-    Moment here =0.0;
-
-    Array<Rhythmic_grouping*> children;
-    for (int i=0; i < r.size(); i++) {
-       
-       Moment last = here;
-       here += one_beat * r[i];
-       children.push(
-           new Rhythmic_grouping(MInterval(last, here), r[i] )
-           );
-    }
-    return Rhythmic_grouping(children);
-}
+#include "complexwalker.hh"
+#include "misc.hh"
 
 void
 Complex_walker::do_INTERPRET_command(Command*com)
@@ -39,8 +20,7 @@ Complex_walker::do_INTERPRET_command(Command*com)
     Array<Scalar> args(com->args);
     args.del(0);
     if (com->args[0] == "GROUPING") {  
-       default_grouping = cparse_grouping(args,
-                                         col()->tdescription_->one_beat);
+       default_grouping = parse_grouping(args);
     }else if (com->args[0] == "NEWMEASURE") {
        local_key_.reset(key_);
 
@@ -111,19 +91,21 @@ Complex_walker::do_TYPESET_command(Command*com)
 void
 Complex_walker::announce_element(Staff_elem_info info)
 {
+    info.group_regs_l_ = find_voice_group((Voice*)info.voice_l_);
     announce_info_arr_.push(info);
 }
 
 void
 Complex_walker::do_announces()
 {
-
     for (int i = 0; i < announce_info_arr_.size(); i++){
        Staff_elem_info info = announce_info_arr_[i];
        for (iter_top(voice_reg_list_,j); j.ok(); j++) {
            j->announce_element(info);
        }
-       group_regs_.announce_element(info);
+       for (iter_top ( group_reg_list_, j); j.ok(); j++) {
+           j->announce_element(info);
+       }
        local_key_reg_.acknowledge_element(info);
     }
 }
@@ -131,32 +113,97 @@ Complex_walker::do_announces()
 Voice_registers *
 Complex_walker::find_voice_reg(Voice*v_l)
 {
-    for (iter_top(voice_reg_list_, i); i.ok(); i++) {
+   for (iter_top(voice_reg_list_, i); i.ok(); i++) {
        if (i->voice_l_ == v_l)
            return i;
-    }
+   }
+   return 0;
+}
+
+Voice_registers*
+Complex_walker::get_voice_reg(Voice*v_l)
+{
+    Voice_registers *regs_p=find_voice_reg(v_l);
+    if (regs_p)
+       return regs_p;
     
-    Voice_registers *regs_p=new Voice_registers(this,v_l);
+    regs_p = new Voice_registers(this,v_l);
     voice_reg_list_.bottom().add (regs_p);
-    //voice_reg_map_[v_l] = regs_p;
     return regs_p;
 }
 
+Voice_group_registers *
+Complex_walker::find_voice_group(Voice* v_l)
+{
+    if (!voice_group_map_.elt_query(v_l))
+       return 0;
+    else return voice_group_map_[v_l];
+}
+
+Voice_group_registers *
+Complex_walker::find_voice_group(const char *id)
+{
+    for (iter_top(group_reg_list_, i); i.ok(); i++)
+       if (i->group_id_str_ == id)
+           return i;
+    return 0;
+}
+
+
+Voice_group_registers *
+Complex_walker::get_voice_group(Voice *v_l)
+{
+    Voice_group_registers *group_p = find_voice_group(v_l);
+    if (group_p)
+       return group_p;
+    
+    group_p = new Voice_group_registers(this);
+    group_reg_list_.bottom().add(group_p);
+    voice_group_map_[v_l] = group_p;
+    return group_p;
+}
+
+
+Voice_group_registers *
+Complex_walker::get_voice_group(const char* id)
+{
+    Voice_group_registers *group_p = find_voice_group(id);
+    if (group_p)
+       return group_p;
+    group_p = new Voice_group_registers(this,id);
+    group_reg_list_.bottom().add(group_p);
+    return group_p;
+}
+
+void 
+Complex_walker::do_change_group(const Voice * v, String group_id_str)
+{
+    voice_group_map_[v] = get_voice_group(group_id_str);
+}
+
 void
 Complex_walker::try_request(Request*req)
 {
-    bool b;
-    if (req->note() || req->rest()|| req->slur()) {
-       Voice *v_l = req->elt_l_->voice_l_;
-       Voice_registers *vregs_l = find_voice_reg(v_l);
-       
+    bool b=false;
+    Voice *voice_l = req->elt_l_->voice_l_;
+
+    if (req->groupchange()) {
+       do_change_group(voice_l, req->groupchange()->newgroup_str_);
+       b = true;
+    } else if (Voice_registers::acceptable_request(req)) {
+       Voice_registers *vregs_l = get_voice_reg(voice_l);
        b = vregs_l->try_request(req);
-           
-    } else {
-       b = group_regs_.try_request(req);
-       if (!b)
-           b = local_key_reg_.try_request(req);
-    }
+    } else if (Voice_group_registers::acceptable_request(req)){
+       Voice_group_registers* reg_l = get_voice_group(voice_l);
+       b = reg_l->try_request(req);
+#if 0
+       if (!b) {
+           bool please_b = get_voice_group("")->try_request(req);         
+           b |= please_b;
+       }
+#endif
+    } 
+
     if (!b)
        WARN<< "junking request: " <<req->name() <<"\n";
 }
@@ -165,10 +212,13 @@ void
 Complex_walker::process_requests()
 {
     Complex_column*c = col();
-//    Complex_staff *s = staff();
 
-    for (int i=0; i < c->todo_l_arr_.size(); i++) {
-       try_request(c->todo_l_arr_[i]);
+    for (int i=0; i < c->first_l_arr_.size(); i++) {
+       try_request(c->first_l_arr_[i]);
+    }
+
+    for (int i=0; i < c->second_l_arr_.size(); i++) {
+       try_request(c->second_l_arr_[i]);
     }
 
     regs_process_requests();
@@ -178,16 +228,20 @@ Complex_walker::process_requests()
 void
 Complex_walker::regs_process_requests()
 {
-    for (iter_top(voice_reg_list_,j); j.ok(); j++) {
+    for (iter_top(voice_reg_list_, j); j.ok(); j++) {
        j->process_requests();
     }
-    group_regs_.process_requests();
+    for (iter_top(group_reg_list_, j); j.ok(); j++) 
+       j->process_requests();
+    
     local_key_reg_.process_request();
 }
 
 void
 Complex_walker::typeset_element(Staff_elem *elem_p)
 {
+    if (!elem_p)
+       return;
     if (elem_p->spanner())
        pscore_l_->typeset_spanner(elem_p->spanner(), staff()->theline_l_);
     else
@@ -196,7 +250,6 @@ Complex_walker::typeset_element(Staff_elem *elem_p)
 
 Complex_walker::Complex_walker(Complex_staff*s)
     : Staff_walker(s, s->theline_l_->pscore_l_),
-      group_regs_(this),
       local_key_reg_(this)      
 {
     oldkey_undo = 0;
@@ -221,14 +274,15 @@ Complex_walker::do_pre_move()
     for (iter_top(voice_reg_list_,i); i.ok(); i++) {
        i->pre_move_processing();   
     }
-    group_regs_.pre_move_processing();
+    for (iter_top (group_reg_list_, j); j.ok(); j++) 
+       j->pre_move_processing();
     local_key_reg_.pre_move_processing();
 }
 
 void
 Complex_walker::do_post_move()
 {
-    processed_clef =false;    
+    processed_clef = false;    
     processed_key = false;
     processed_bar_priority = 0;
     
@@ -236,6 +290,7 @@ Complex_walker::do_post_move()
        i->post_move_processing();   
     }
     announce_info_arr_.set_size(0);
-    group_regs_.post_move_processing();
+    for (iter_top (group_reg_list_, j); j.ok(); j++) 
+       j->post_move_processing();
     local_key_reg_.post_move_processing();
 }
index 06f906ff9144a064168e1bf2762a6d340b50aa11..91c9a66d0a7d6a78ed8152163021c609a7aabc1d 100644 (file)
@@ -84,7 +84,7 @@ Rhythmic_grouping::intersect(MInterval t)
     
     for (int i=0; i < children.size(); i++) {
        MInterval inter = intersection(t, children[i]->interval());
-       if (inter.empty() || inter.length() <= 0) {
+       if (inter.empty() || inter.length() <= Rational( 0 )) {
            delete children[i];
            children[i] =0;
        } else {
@@ -151,10 +151,10 @@ Rhythmic_grouping::Rhythmic_grouping(MInterval t, int n)
        interval_ = new MInterval(t);
        return;
     }
-    Moment dt = t.length()/n;
+    Moment dt = t.length()/Rational(n);
     MInterval basic = MInterval(t.left, t.left+dt);
     for (int i= 0; i < n; i++)
-       children.push(new Rhythmic_grouping( dt*i + basic ));
+       children.push(new Rhythmic_grouping( dt*Rational(i) + basic ));
 }
 
 
index 64987624490bab60956d6ac4b31261b21cc084aa..ae790ab9c61b59f9a60b7053aacce9224b78fe91 100644 (file)
@@ -1,3 +1,4 @@
+#include "script.hh"
 #include "request.hh"
 #include "beam.hh"
 #include "stem.hh"
@@ -7,6 +8,7 @@
 #include "debug.hh"
 #include "complexstaff.hh"
 #include "textspanner.hh"
+#include "textitem.hh"
 
 Stem_beam_register::Stem_beam_register(Complex_walker*w)
     :Request_register(w)
@@ -14,6 +16,8 @@ Stem_beam_register::Stem_beam_register(Complex_walker*w)
     do_post_move_process();
     current_grouping = 0;
     beam_p_ = 0;
+    set_dir(0);
+    start_req_l_ = 0;
 }
 
 bool
@@ -48,10 +52,12 @@ void
 Stem_beam_register::process_request()
 {
     if (beam_req_l_) {
-       if (beam_req_l_->spantype == Span_req::STOP)
+       if (beam_req_l_->spantype == Span_req::STOP) {
            end_beam_b_ = true;
-       else {
+           start_req_l_ = 0;
+       } else {
            beam_p_ = new Beam;
+           start_req_l_ = beam_req_l_;
 //         walk_l_->announce_element(Staff_elem_info(beam_p_, ))
            current_grouping = new Rhythmic_grouping;
            if (beam_req_l_->nplet) {
@@ -75,7 +81,11 @@ Stem_beam_register::process_request()
        stem_p_->flag = stem_req_l_->balltype;
 
        if (beam_p_) {
-           beam_p_->add(stem_p_);
+           if (stem_req_l_->balltype<= 4)
+               warning( "stem doesn't fit in Beam.",
+                        stem_req_l_->defined_ch_c_l_m);
+           else
+               beam_p_->add(stem_p_);
            stem_p_->print_flag = false;
        } else {
            stem_p_->print_flag = true;
@@ -102,6 +112,9 @@ void
 Stem_beam_register::do_pre_move_process()
 {
     if (stem_p_) {
+       if (default_dir_i_)
+           stem_p_->dir = default_dir_i_;
+       
        walk_l_->typeset_element(stem_p_);
        stem_p_ = 0;
     }
@@ -127,5 +140,105 @@ Stem_beam_register::do_post_move_process()
 Stem_beam_register::~Stem_beam_register()
 {
     if (beam_p_)
-       error("unterminated beam");
+       warning("unterminated beam", start_req_l_->defined_ch_c_l_m);
+}
+
+void
+Stem_beam_register::set_dir(int i)
+{
+    default_dir_i_ = i;
+}
+/****************/
+
+Script_register::Script_register(Complex_walker*w)
+    : Request_register(w)
+{
+    script_p_ = 0;
+}
+
+bool
+Script_register::try_request(Request *r_l)
+{
+    if (!r_l->script())
+       return false ;
+
+    if (accepted_req_arr_.size()
+       && Script_req::compare(
+           *accepted_req_arr_[0]->script(), *r_l->script()))
+       
+       return false;
+
+    accepted_req_arr_.push(r_l);
+    
+    return true;
+}
+void
+Script_register::process_request()
+{
+    if (accepted_req_arr_.size() ) {
+       script_p_ = new Script(accepted_req_arr_[0]->script(), 10);
+       walk_l_->announce_element(
+           Staff_elem_info(script_p_, accepted_req_arr_[0], this));
+    }
+}
+
+void
+Script_register::acknowledge_element(Staff_elem_info info)
+{
+    if (!script_p_)
+       return;
+    if (info.elem_p_->name() == String("Stem"))
+       script_p_->set_stem((Stem*)info.elem_p_);
+    else if (info.req_l_->rhythmic())
+       script_p_->set_support(info.elem_p_->item());
+}
+
+void
+Script_register::do_pre_move_process()
+{
+    if (script_p_){
+       walk_l_->typeset_element(script_p_);
+       script_p_ = 0;
+    }
+}
+/******************/
+
+
+Text_register::Text_register(Complex_walker*w)
+    : Request_register(w)
+{
+    text_p_ = 0;
+}
+
+bool
+Text_register::try_request(Request*req_l)
+{
+    if (!req_l->text())
+       return false;
+    if (accepted_req_arr_.size() &&
+       Text_req::compare(*req_l->text(), *accepted_req_arr_[0]->text()))
+
+       return false;
+
+    accepted_req_arr_.push(req_l);
+    return true;
+}
+
+void
+Text_register::process_request()
+{
+    
+    if (accepted_req_arr_.size()) {
+       text_p_ = new Text_item(accepted_req_arr_[0]->text(), 10);
+       walk_l_->announce_element(Staff_elem_info(text_p_,
+                                                 accepted_req_arr_[0], this));
+    }
+}
+void
+Text_register::do_pre_move_process()
+{
+    if (text_p_) {
+       walk_l_->typeset_element(text_p_);
+       text_p_ = 0;
+    }
 }
index 251adedc8586840569705802f516fb54124a7ff1..aab0ea4a8b8a69ec599ce3da8a52c16611806abb 100644 (file)
@@ -158,18 +158,24 @@ get_bar_command(String w)
 }
 
 Array<int>
-get_default_grouping(int count)
+get_default_grouping(int count, int one_beat_note)
 {
     Array<int> s;
     if (!(count % 3 )) {
-       for (int i=0; i < count/3; i++)
+       for (int i=0; i < count/3; i++) {
            s.push(3);
+           s.push(one_beat_note);
+       }
     } else if (!(count %2)) {
-       for (int i=0; i < count/2; i++)
+       for (int i=0; i < count/2; i++) {
            s.push(2);
+           s.push(one_beat_note);
+       }
+           
     }else {
        s.push(2);
-       s.concat(get_default_grouping(count-2));
+       s.push(one_beat_note);
+       s.concat(get_default_grouping(count-2, one_beat_note));
     }
     return s;
 }
index ef2014604c2a5a1f025189b580986f271c272077..d9f6910cf56caf8e8d77c879579e72994a38db84 100644 (file)
@@ -44,7 +44,7 @@ Commands_at::add(Input_command *i)
        int l = i->args[1];
        int o = i->args[2];
        tdescription_.set_meter(l,o);
-       bottom().add(get_grouping_command( get_default_grouping(l)));
+       bottom().add(get_grouping_command( get_default_grouping(l,o)));
     }
 }
 
index 80f0a258a73b3f0927aee2a2ee1313e806d2a52e..4afb6f855683374e2eb8b3c31f82d2cd5c72398b 100644 (file)
@@ -1,6 +1,7 @@
 #include "debug.hh"
 #include "inputmusic.hh"
 #include "voice.hh"
+#include "request.hh"
 
 void
 Simple_music::add(Voice_element*v)
@@ -9,7 +10,7 @@ Simple_music::add(Voice_element*v)
 }
 
 Moment
-Simple_music::length()
+Simple_music::length()const
 {
     return voice_.last();
 }
@@ -20,7 +21,7 @@ Simple_music::translate_time(Moment t)
 }
 
 Voice_list
-Simple_music::convert()
+Simple_music::convert()const
 {
     Voice_list l;
     l.bottom().add(new Voice(voice_));
@@ -67,7 +68,12 @@ Complex_music::Complex_music(Complex_music const&s)
     for (iter_top(s.elts,i); i.ok(); i++)
        add(i->clone());
 }
-
+void
+Complex_music::set_default_group(String g)
+{
+    for (iter_top(elts,i); i.ok(); i++)
+           i->set_default_group(g);
+}
 /****************************************************************/
 
 void
@@ -94,9 +100,9 @@ Music_voice::add_elt(Voice_element*v)
 }
 
 Moment
-Music_voice::length()
+Music_voice::length()const
 {
-    Moment l = 0.0;
+    Moment l = 0;
     
     for (iter_top(elts,i); i.ok(); i++)
        l += i->length();
@@ -105,10 +111,10 @@ Music_voice::length()
 
     
 Voice_list
-Music_voice::convert()
+Music_voice::convert()const
 {
     Voice_list l;
-    Moment here = 0.0;
+    Moment here = 0;
     
     for (iter_top(elts,i); i.ok(); i++) {
        Moment len = i->length();       
@@ -154,7 +160,7 @@ Music_general_chord::translate_time(Moment t)
 }
 
 Moment
-Music_general_chord::length()
+Music_general_chord::length()const
 {
     Moment l =0.0;
     
@@ -164,7 +170,7 @@ Music_general_chord::length()
 }
 
 Voice_list
-Music_general_chord::convert()
+Music_general_chord::convert()const
 {
     Voice_list l;
     for (iter_top(elts,i); i.ok(); i++) {
@@ -174,6 +180,18 @@ Music_general_chord::convert()
     return l;
 }
 
+/****************/
+
+void
+Multi_voice_chord::set_default_group(String g)
+{
+    int j=0;
+    for (iter_top(elts, i); i.ok(); i++) {
+       i->set_default_group(g + String(j));
+       j++;
+    }
+}
+
 
 /****************/
 
index 6ea13d9b5d78a91ee323fe7913ec6ab1ea77c101..a5d4a31007679d9ee94906bb1656c7a78c0ccf86 100644 (file)
@@ -37,6 +37,7 @@ Input_score::parse()
     Paperdef* paper_p=new Paperdef(*paper_);
     Score *s_p = new Score(paper_p);
     s_p->define_spot_str_ = define_spot_str_;
+    s_p->errorlevel_i_ = errorlevel_i_;
     Array<Staff*> parsed_staffs;
     for (iter_top(staffs_,i); i.ok(); i++) {
        Staff* staf_p=i->parse(s_p);
@@ -60,6 +61,7 @@ Input_score::~Input_score()
 Input_score::Input_score()
 {
     paper_= 0;
+    errorlevel_i_ = 0;
 }
 
 void
index 3c3909468ddfca3faf79f27fd301087874acdc97..6cbed389569050bb0a56fda358be1f0ac0ade584 100644 (file)
@@ -8,8 +8,8 @@
 #include "melodicstaff.hh"
 #include "rhythmstaff.hh"
 #include "lyricstaff.hh"
-#include "complexmelodicstaff.hh"
 #include "staff.hh"
+#include "complexstaff.hh"
 
 void
 Input_staff::add(Array<Input_command*> &s)
@@ -36,10 +36,10 @@ Input_staff::parse(Score*score_l)
 {
     Staff *p=0;
 
-    if (type == "complex")
-       p = new Complex_melodic_staff;
-    else if (type == "melodic")
+    if (type == "simple")
        p = new Melodic_staff;
+    else if (type == "melodic")
+       p = new Complex_staff;
     else if (type == "rhythmic")
        p = new Rhythmic_staff;
     else if (type == "lyric")
index 4446661d8ef426de46d9b525b50f34c33050038a..00b4c70c159e012edeec94402bc9c4eb25329663 100644 (file)
@@ -8,6 +8,8 @@
 #include "varray.hh"
 #include "parser.hh"
 #include "debug.hh"
+#include "inputscore.hh"
+#include "main.hh"
 
 %}
 
@@ -44,7 +46,8 @@ OPTSIGN               !?
 PITCHMOD       ['`]*{OPTSIGN}
 RESTNAME       r|s|p
 NOTECOMMAND    \\{WORD}
-NOTENAME       {ALPHAWORD}
+NOTENAME       [a-z]+
+UNOTENAME      [A-Z][a-z]*
 DOTS           \.+
 LYRICS         {TEX}+
 COMMENT                [%#].*\n
@@ -65,16 +68,14 @@ COMMENT             [%#].*\n
        mtor << "rest:"<< yylval.string;
        return RESTNAME;
 }
+<notes>{UNOTENAME}     {
+       int *p=yylval.ii;
+       return ret_notename(p, YYText(), -1);
+}
 
 <notes>{NOTENAME}      {
        int *p=yylval.ii;
-       lookup_notename(p[0], p[1], YYText());
-       mtor << "notename: "<< YYText()<<eol;
-       if (p[0] < 0) {
-               String e("notename does not exist: ");
-               error(e + YYText());
-       }
-       return NOTENAME;
+       return ret_notename(p, YYText(), 0);
 }
 
 <notes>{NOTECOMMAND}   {
@@ -269,8 +270,9 @@ include           {
        //ignore
 }
 .              {
-       error("lexer error: illegal character '"+String(YYText()[0])+
-         "' encountered");
+//     error( "lexer error: illegal character '"+String(YYText()[0])+ "' encountered");
+       error( String( "illegal character: " ) + String( YYText()[0] ) + ": ",
+               here_ch_c_l() );
        return YYText()[0];
 }
 
index cc69a4a6bbf484f539593db84c41efbe3322f6b4..508c61e30d993ace379110598d5e9bb1aedf8bb6 100644 (file)
@@ -1,7 +1,12 @@
-#include <fstream.h>
+#include <iostream.h>
+#include <strstream.h>
+#include "proto.hh"
+#include "plist.hh"
 #include "lexer.hh"
 #include "debug.hh"
 #include "main.hh"
+#include "sourcefile.hh"
+#include "source.hh"
 
 My_flex_lexer *lexer=0;
 
@@ -27,22 +32,20 @@ Input_file::Input_file(String s)
     name = s;
     line = 1;
     String pf(s);
-    if (pf=="")
+    if (pf=="") {
        is = &cin;
+        sourcefile_l_ = 0;
+    }
     else {
-       pf =find_file(pf);
-       if (pf=="") {
-           String e("can\'t open `"  + s+"\'");
-           error(e);
-       }
-       is = new ifstream(  pf);
+       Source_file* sourcefile_p = new Source_file( pf );
+       source_l->add( sourcefile_p );
+       sourcefile_l_ = sourcefile_p;
+       is = sourcefile_l_->istream_l();
     }
     cout << "["<<pf<<flush;
 }
 
 Input_file::~Input_file()
 {
-  if (is != &cin)
-      delete is;
   cout << "]" << flush;  
 }
index a9c5d187310aca130b5faea6174b8aa8e1cc39f5..fe22149d12c5435b9f722a7780ceb49f38b29a9a 100644 (file)
@@ -5,7 +5,6 @@
 #include "tex.hh"
 #include "scalar.hh"
 
-
 Lookup::Lookup()
 {
     texsetting = "\\unknowntexsetting";
index 45f30836ed301c05f45b5fc59a03dbddd5f45cfd..108d5953ce188b925da36b434216d774df3b9b0b 100644 (file)
@@ -3,12 +3,10 @@
 #include "staffwalker.hh"
 #include "debug.hh"
 #include "staff.hh"
-//#include "command.hh"
 #include "lyricstaff.hh"
 #include "lyriccolumn.hh"
 #include "sccol.hh" 
 #include "pscore.hh"
-//#include "paper.hh"
 
 
 Lyric_column::Lyric_column(Score_column*s, Lyric_staff* lstaff_l)
@@ -25,7 +23,7 @@ Lyric_column::setup_requests()
            Request* req_l = j;
            if (req_l->barcheck()) {
                if (tdescription_->whole_in_measure) {
-                   error("Barcheck failed, " + tdescription_->str());
+                   error( "Barcheck failed ", req_l->defined_ch_c_l_m );
                }
            }
            if (req_l->lreq_l()) {
index b0afc3000b6e4d4770e2bb2f79ecd2b588bbcbfe..81b61552c54f65a2bed8756043fb302e45d3bdc0 100644 (file)
@@ -5,6 +5,10 @@
 #include "molecule.hh"
 #include "lookup.hh"
 #include "textdef.hh"
+#include "sourcefile.hh"
+#include "source.hh"
+#include "debug.hh"
+#include "main.hh"
 
 Lyric_item::Lyric_item(Lyric_req* lreq_l, int voice_count_i)
     : Text_item(lreq_l,0)
@@ -17,4 +21,8 @@ void
 Lyric_item::do_pre_processing()
 {
     // override Text_item
+
+    // test context-error
+    if ( tdef_l_->text_str_.pos( "Gates" ) )// :-)
+       warning( "foul word", tdef_l_->defined_ch_c_l_m );
 }
index 8ac50296eefed0697451d3067b30ade549430faa..7e20c89a70d5d41f10dfbd2fc0bff519c4fcec85 100644 (file)
@@ -1,13 +1,20 @@
 #include <iostream.h>
 #include <assert.h>
+#include "proto.hh"
+#include "plist.hh"
 #include "lgetopt.hh"
 #include "misc.hh"
 #include "string.hh"
 #include "main.hh"
 #include "path.hh"
 #include "config.hh"
+#include "sourcefile.hh"
+#include "source.hh"
 
-extern void parse_file(String s);
+Source source;
+Source* source_l = &source;
+
+extern void parse_file(String,String);
 
 
 void
@@ -17,6 +24,7 @@ long_option_init theopts[] = {
     0, "warranty", 'w',
     0, "help", 'h',
     0, "debug", 'd',
+    1, "init", 'i',
     1, "include", 'I',
     0,0,0
 };
@@ -29,6 +37,7 @@ help()
        "--warranty, -w         show warranty & copyright\n"
        "--output, -o           set default output\n"
        "--debug, -d            enable debug output\n"
+       "--init, -i             set init file\n"
         "--include, -I         add to file search path.\n"
        ;
     
@@ -42,7 +51,7 @@ void notice()
        "Copyright (C) 1996,97 by\n"
        "  Han-Wen Nienhuys <hanwen@stack.nl>\n"
        "Contributors\n"
-       "  Jan-Nieuwenhuizen <jan@digicash.com>\n"
+       "  Jan Nieuwenhuizen <jan@digicash.com>\n"
        "  Mats Bengtsson <matsb@s3.kth.se>\n"
        "\n"
        "    This program is free software; you can redistribute it and/or\n"
@@ -77,6 +86,7 @@ main (int argc, char **argv)
 {    
     Getopt_long oparser(argc, argv,theopts);
     cout << get_version();
+    String init_str("symbol.ini");
     
     while (long_option_init * opt = oparser()) {
        switch ( opt->shortname){
@@ -90,6 +100,9 @@ main (int argc, char **argv)
        case 'I':
            path->push(oparser.optarg);
            break;
+       case 'i':
+           init_str = oparser.optarg;
+           break;
        case 'h':
            help();
            exit(0);
@@ -108,12 +121,12 @@ main (int argc, char **argv)
     while ( (arg= oparser.get_next_arg()) ) {
        String f(arg);
        destill_inname(f);
-       parse_file(f);
+       parse_file(init_str,f);
        do_scores();
        p++;
     }
     if (!p) {
-       parse_file(""); 
+       parse_file(init_str, "");       
        do_scores();
     }
 
index 849a64b2094bbaa43441f0fdd4dcd4990afb3716..df760d6a7afd6a756c77af90d970c099d3660c3f 100644 (file)
@@ -28,6 +28,7 @@ Melodic_staff::get_notehead(Note_req *rq, int bottom)
     Notehead *n =new Notehead((NO_LINES-1)*2);
     n->set_rhythmic(rq->rhythmic());
     n->position = rq->note()->height() + bottom;
+    n->defined_ch_c_l_m = rq->defined_ch_c_l_m;
     return n;
 }
 
index 5618f8ae2a2b766b5519274fe54fcdfcd3982dd4..a8fe2c026dc16f09ba2fc705cb6fd598b1380224 100644 (file)
@@ -11,7 +11,7 @@ wholes(int dur, int dots)
        return 0.0;
 
     // stupid Intel: doesn't crash if !dur
-    Moment f = 1/Moment(dur);
+    Moment f = Rational(1)/Moment(dur);
     Moment delta = f;
 
     while (dots--) {
index acda945d3fe55e7a46d4734820ccdddbc7f53e44..9465279c4a74d1981970e106f5a85bad438a6436 100644 (file)
@@ -1,3 +1,4 @@
+#include <strstream.h>
 #include "interval.hh"
 #include "identparent.hh"
 #include "associter.hh"
@@ -9,6 +10,7 @@
 #include "sstack.hh"
 #include "debug.hh"
 #include "notename.hh"
+#include "sourcefile.hh"
 
 static Keyword_ent the_key_tab[]={
     "bar", BAR,
@@ -25,6 +27,7 @@ static Keyword_ent the_key_tab[]={
     "mark", MARK,
     "meter", METER,
     "mm", MM,
+    "multivoice", MULTIVOICE,
     "octave", OCTAVECOMMAND,
     "output", OUTPUT,
     "partial", PARTIAL,
@@ -36,13 +39,12 @@ static Keyword_ent the_key_tab[]={
     "skip", SKIP,
     "staff", STAFF,
     "start", START_T,
+    "stem", STEM,
     "table", TABLE,
     "symboltables", SYMBOLTABLES,
     "notenames", NOTENAMES,
     "texid", TEXID,
     "textstyle", TEXTSTYLE,
-    "chord", CHORD,
-    "multi", MULTI,
     "unitspace", UNITSPACE,
     "voice", VOICE,
     "voices", VOICES,
@@ -52,11 +54,35 @@ static Keyword_ent the_key_tab[]={
     0,0
 };
 
+int
+My_flex_lexer::ret_notename(int *p, String text, int octave_mod)
+{
+    text.lower();
+    char const* ch_c_l = here_ch_c_l();
+    ch_c_l--;
+    while ( ( *ch_c_l == ' ' ) || ( *ch_c_l == '\t' ) || ( *ch_c_l == '\n' ) )
+       ch_c_l--;
+    ch_c_l++;
+       
+    lookup_notename(p[0], p[1], text);
+    p[2] = octave_mod;
+    mtor << "notename: "<< text <<eol;
+    if (p[0] < 0) {
+
+       errorlevel_i_ |= 1;
+       warning( String( "notename does not exist: " ) +YYText() + ": ", ch_c_l );
+       p[0] = p[1] = 0;
+    }
+    return NOTENAME;
+}
+
 My_flex_lexer::My_flex_lexer()
 {
     keytable = new Keyword_table(the_key_tab);
     the_id_tab = new Assoc<String, Identifier*>;
     defaulttab = 0;
+    data_ch_c_l_m = 0;
+    errorlevel_i_ = 0;
 }
 
 int
@@ -74,6 +100,12 @@ My_flex_lexer::lookup_identifier(String s)
     return (*the_id_tab)[s];
 }
 
+char const*
+My_flex_lexer::here_ch_c_l()
+{
+    return data_ch_c_l_m + yyin->tellg();
+}
+
 void
 My_flex_lexer::add_identifier(Identifier*i)
 {
@@ -95,7 +127,7 @@ My_flex_lexer::~My_flex_lexer()
 String
 My_flex_lexer::spot()const
 {
-    return include_stack.top()->name +  ": " + lineno();
+    return include_stack.top()->name +  ": " + String( lineno() );
 }
 
 void
@@ -103,10 +135,16 @@ My_flex_lexer::LexerError(const char *s)
 {
     if (lexer->include_stack.empty()) {
        *mlog << "error at EOF" << s << '\n';
-    }else 
-       *mlog << spot() << ": error:" << s << '\n';
-     exit(1);
+    } else {
+       char const* ch_c_l = here_ch_c_l();
+       ch_c_l--;
+       while ( ( *ch_c_l == ' ' ) || ( *ch_c_l == '\t' ) || ( *ch_c_l == '\n' ) )
+               ch_c_l--;
+       ch_c_l++;
+       error( s, ch_c_l );
+    }
 }
+
 // set the  new input to s, remember old file.
 void
 My_flex_lexer::new_input(String s)
@@ -117,6 +155,7 @@ My_flex_lexer::new_input(String s)
    Input_file *newin = new Input_file(s);
    include_stack.push(newin);
    switch_streams(newin->is);
+   data_ch_c_l_m = newin->sourcefile_l_->ch_c_l();
    yylineno = 1;
 }
 
index f53b002d864b29ddb9673ffea998917ed8765597..9519371175ecbd335519fe1dfd1b436a6a67ceb2 100644 (file)
@@ -1,4 +1,7 @@
-#include <ctype.h>
+/*
+  could use cleanup
+ */
+  #include <ctype.h>
 #include "lexer.hh"
 #include "string.hh"
 #include "real.hh"
 #include "identparent.hh"
 #include "varray.hh"
 #include "textdef.hh"
-
+#include "parseconstruct.hh"
 
 int default_duration = 4, default_dots=0, default_octave=0;
 int default_plet_type = 1, default_plet_dur = 1;
 String textstyle="roman";              // in lexer?
 
+bool last_duration_mode = false;
+
+void
+set_duration_mode(String s)
+{
+    s.upper();
+    last_duration_mode = (s== "LAST");
+}
+
+void
+last_duration(int n)
+{
+    if (last_duration_mode)
+       default_duration = n;
+}
+
 /* triplet is '2/3' */
 void set_plet(int num,int den)
 {
@@ -29,6 +48,7 @@ get_text(String s) return t;
     t= new Text_def;
     t->text_str_= s;
     t->style_str_ = textstyle;
+    t->defined_ch_c_l_m = defined_ch_c_l;
     return t;
 }
 
@@ -89,6 +109,9 @@ get_note_element(String pitch, int * notename, int * duration )
        v->add(st);
     }
     
+    if ( !defined_ch_c_l )
+        defined_ch_c_l = lexer->here_ch_c_l();
+
     Note_req * rq = new Note_req;
     
     int oct;
@@ -101,9 +124,11 @@ get_note_element(String pitch, int * notename, int * duration )
     rq->balltype = dur;
     rq->dots = dots;
     rq->plet_factor = Moment(default_plet_dur, default_plet_type);
+    rq->defined_ch_c_l_m = defined_ch_c_l;
     rq->print();
 
     v->add(rq);
+    v->defined_ch_c_l_m = defined_ch_c_l;
 
     return v;
 }
@@ -117,6 +142,13 @@ get_word_element(Text_def* tdef_p, int* duration)
     int dur = duration[0];
     int dots=duration[1];
     
+    tdef_p->defined_ch_c_l_m = defined_ch_c_l;
+#if 0
+    char buf[ 21 ];
+    strncpy( buf, tdef_p->defined_ch_c_l_m, 20 );
+    buf[ 20 ] = 0;
+    cout << hex << (void*)tdef_p->defined_ch_c_l_m << dec << buf << endl;
+#endif
     Lyric_req* lreq_p = new Lyric_req(tdef_p);
 
     lreq_p->balltype = dur;
@@ -147,7 +179,7 @@ get_rest_element(String,  int * duration )
 void
 get_default_duration(int *p)
 {
-   *p++ = default_duration;
+    *p++ = default_duration;
     *p = default_dots;
 }
 
@@ -170,10 +202,10 @@ set_default_octave(String d)
 Request*
 get_request(char c)
 {
-    Request* ret=0;
+    Request* req_p=0;
     switch (c) {
     case '|':
-       ret = new Barcheck_req;
+       req_p = new Barcheck_req;
        break;
 
     case '[':
@@ -182,14 +214,14 @@ get_request(char c)
        Beam_req*b = new Beam_req;
        if (default_plet_type != 1)
            b->nplet = default_plet_type;
-       ret = b;
+       req_p = b;
     }
        break;
 
 
     case ')':
     case '(':
-       ret = new Slur_req;
+       req_p = new Slur_req;
        break;
     default:
        assert(false);
@@ -199,18 +231,19 @@ get_request(char c)
     switch (c) {
     case '(':
     case '[':
-       ret->span()->spantype = Span_req::START;
+       req_p->span()->spantype = Span_req::START;
        break;
     case ')':
     case ']':
-       ret->span()->spantype = Span_req::STOP;
+       req_p->span()->spantype = Span_req::STOP;
        break;
        
     default:
        break;
     }
 
-    return ret;
+    req_p->defined_ch_c_l_m = req_defined_ch_c_l;
+    return req_p;
 }
 
 void
@@ -282,3 +315,13 @@ get_barcheck_element()
     
     return v_p;
 }
+
+Voice_element*
+get_stemdir_element(int d)
+{
+    Voice_element*v_p = new Voice_element;
+    Group_feature_req * gfreq_p = new Group_feature_req;
+    gfreq_p->stemdir_i_ =d; 
+    v_p->add(gfreq_p);
+    return v_p;
+}
index fb4e80719b85fb854c5d55d1058d609c6187798a..fc250288c93ce46152842c28fee3d58bb14da522 100644 (file)
@@ -17,12 +17,15 @@ Notehead::Notehead(int ss)
     balltype = 0;
     dots = 0;
     extremal = 0;
+    defined_ch_c_l_m = 0;
 }
 void
 Notehead::set_rhythmic(Rhythmic_req*r_req_l)
 {
     balltype = r_req_l->balltype;
     dots = r_req_l->dots;
+    if ( r_req_l->defined_ch_c_l_m )
+       defined_ch_c_l_m = r_req_l->defined_ch_c_l_m;
 }
     
 void
index f36d153113cfa3272f815382ab9c3c3fe1f34dc2..8d6ac75f0c2cdbe32816f3b0896e6fbc0cda5db0 100644 (file)
@@ -20,8 +20,9 @@
 
 Array<Request*> pre_reqs, post_reqs;
 sstack<String> define_spots;
-extern bool want_beam;
 Paperdef*default_paper();
+char const* defined_ch_c_l;
+char const* req_defined_ch_c_l;
 
 %}
 
@@ -61,10 +62,10 @@ Paperdef*default_paper();
     Text_def * textdef;
 }
 
-%token VOICE STAFF SCORE TITLE  BAR NOTENAME OUTPUT
+%token VOICE STAFF SCORE TITLE  BAR  OUTPUT MULTIVOICE
 %token CM IN PT MM PAPER WIDTH METER UNITSPACE SKIP COMMANDS COMMAND
 %token GEOMETRIC START_T DURATIONCOMMAND OCTAVECOMMAND
-%token KEY CLEF MULTI TABLE CHORD VOICES
+%token KEY CLEF  TABLE  VOICES STEM
 %token PARTIAL MUSIC GROUPING CADENZA
 %token END SYMBOLTABLES TEXID TABLE NOTENAMES SCRIPT TEXTSTYLE PLET
 %token MARK GOTO
@@ -72,25 +73,26 @@ Paperdef*default_paper();
 %token <id>  IDENTIFIER
 %token <string> PITCHMOD DURATION RESTNAME
 %token <ii> NOTENAME 
-%token <real> REAL
+%token <real> REAL 
 %token <string> STRING
 
 %token <i> DOTS INT
 %type <consstr> unit
-%type <intvec> pitch_list
+%type <intvec> pitch_list 
 %type <c> open_request_parens close_request_parens
 %type <id> declaration
 %type <string> declarable_identifier
 %type <paper> paper_block paper_body
-%type <real> dim
-%type <ii> duration
+%type <real> dim real
+%type <ii>  default_duration explicit_duration notemode_duration mudela_duration
+%type <ii> notename
 %type <moment> duration_length
 %type <el> voice_elt full_element lyrics_elt
 %type <command> score_command staff_command position_command
 %type <score> score_block score_body
 %type <staff> staff_block staff_init staff_body
 %type <i> int
-%type <intvec> int_list
+%type <intvec> int_list intastint_list
 %type <commandvec> score_commands_block score_commands_body
 %type <commandvec> staff_commands_block staff_commands_body
 %type <request> post_request pre_request 
@@ -115,8 +117,8 @@ Paperdef*default_paper();
 %%
 
 mudela:        /* empty */
-       | mudela score_block { 
-               add_score($2);
+       | mudela score_block {
+               add_score($2);          
        }
        | mudela add_declaration { }
        | mudela mudela_command  {}
@@ -164,6 +166,13 @@ declaration:
                $$ = new Notetab_id(*$1, $3);
                delete $1;
        }
+       | declarable_identifier '=' real        {
+               $$ = new Real_id(*$1, new Real($3));
+               delete $1;
+       }
+       | declarable_identifier error '}' {
+               warning( "parse error", lexer->here_ch_c_l() );
+       }
        ;
 
 notename_tab:
@@ -192,10 +201,16 @@ score_block: SCORE
                $$->define_spot_str_ = define_spots.pop();
                if (!$$->paper_)
                        $$->paper_ = default_paper();
+
+               /* handle error levels. */
+               $$->errorlevel_i_ = lexer->errorlevel_i_;
+               lexer->errorlevel_i_ = 0;
        }
        ;
 
-score_body:            { $$ = new Input_score; }
+score_body:            { 
+               $$ = new Input_score; 
+       }
        | score_body staff_block        { $$->add($2); }
        | score_body score_commands_block       {
                $$->add(*$2);
@@ -208,6 +223,9 @@ score_body:         { $$ = new Input_score; }
 */
 score_commands_block:
        COMMANDS '{' score_commands_body '}' { $$ =$3;}
+       | COMMANDS '{' error '}' {
+               warning( "parse error", lexer->here_ch_c_l() );
+       }
        ;
 
 score_commands_body:                   { $$ = new Array<Input_command*>; }
@@ -244,15 +262,6 @@ staff_command:
        }
        ;
 
-duration_length:       
-       duration                {
-               $$ = new Moment(wholes($1[0], $1[1]));
-       }
-       |int '*' duration       {
-               $$ = new Moment($1 * wholes($3[0], $3[1]));
-       }
-       ;
-
 position_command:
        SKIP int ':' duration_length            {
                $$ = get_skip_command($2, *$4);
@@ -264,6 +273,14 @@ position_command:
        }
        ;
 
+
+intastint_list:
+       /* */   { $$ =new Array<int>; }
+       | intastint_list int '*' int    {
+               $$->push($2); $$->push($4);
+       }
+       ;
+
 score_command:
        BAR STRING                      {
                $$ = get_bar_command(*$2);
@@ -276,7 +293,7 @@ score_command:
                $$ = get_partial_command(*$2);
                delete $2;
        }
-       | GROUPING int_list             {
+       | GROUPING intastint_list               {
                $$ = get_grouping_command(*$2);
                delete $2;
        }
@@ -307,6 +324,9 @@ paper_body:
        | paper_body symtables          { $$->set($2); }
        | paper_body UNITSPACE dim      { $$->whole_width = $3; }
        | paper_body GEOMETRIC REAL     { $$->geometric_ = $3; }
+       | paper_body error {
+               warning( "parse error", lexer->here_ch_c_l() );
+       }
        ;
 
 /*
@@ -333,12 +353,16 @@ staff_init:
 staff_body:
        staff_init
        | staff_body music      {
+               $2->set_default_group( "staff_music" + String($$->music_.size()));
                $$->add($2);
        }
        | staff_body staff_commands_block {
                $$->add(*$2);
                delete $2;
        }
+       | staff_body error {
+               warning( "parse error", lexer->here_ch_c_l() );
+       }
        ;
 
 /*
@@ -352,11 +376,12 @@ music:
 music_voice:  MUSIC '{' music_voice_body '}'   { $$ = $3; }
        ;
 
-music_voice_body:                      {
+music_voice_body:
+       /* */   {
                $$ = new Music_voice;
        }
        | music_voice_body IDENTIFIER {
-               $$->concatenate($2->mvoice());
+               $$->concatenate($2->mvoice(true));
        }
        | music_voice_body full_element {
                $$->add_elt($2);
@@ -366,16 +391,23 @@ music_voice_body:                 {
        | music_voice_body music        {
                $$->add($2);
        }
+       | music_voice_body error {
+               warning( "parse error", lexer->here_ch_c_l() );
+       }
        ;
 
 music_chord:  '{' music_chord_body '}' { $$ = $2; }
        ;
 
-music_chord_body:              {
-               $$ = new Music_general_chord;
+music_chord_body:
+       /* */   {
+               $$ = new Voice_group_chord;
+       }
+       | MULTIVOICE {
+               $$ = new Multi_voice_chord;
        }
        | music_chord_body IDENTIFIER {
-               $$->concatenate($2->mchord());
+               $$->concatenate($2->mchord(true));
        }
        | music_chord_body music {
                $$ -> add($2);
@@ -383,6 +415,9 @@ music_chord_body:           {
        | music_chord_body full_element {
                $$ ->add_elt($2);
        }
+       | music_chord_body error {
+               warning( "parse error", lexer->here_ch_c_l() );
+       }
        ;
 
 
@@ -402,7 +437,15 @@ full_element:      pre_requests voice_elt post_requests {
        | COMMAND '{' staff_command '}' { $$=get_command_element($3); }
        | COMMAND '{' score_command '}' { $$=get_command_element($3); }
        | '|'                           { $$ = get_barcheck_element(); }
+       | STEM '{' int '}'              {
+               $$ = get_stemdir_element($3);
+       }
        | lyrics_elt
+/*
++      | pre_requests voice_elt post_requests error '|' { 
++              warning( "parse error", lexer->here_ch_c_l() );
++      }
++ */
        ;
                
 post_requests:
@@ -415,19 +458,34 @@ post_requests:
        ;
 
 post_request:
-       close_request_parens            { $$ = get_request($1); }
+       close_request_parens    { 
+               $$ = get_request($1); 
+               req_defined_ch_c_l = lexer->here_ch_c_l();
+       }
        | script_req
        | textscript_req
        ;
 
 close_request_parens:
-       '('     { $$='('; }
-       |']'    { $$=']'; }
+       '('     { 
+               $$='(';
+               req_defined_ch_c_l = lexer->here_ch_c_l();
+       }
+       | ']'   { 
+               $$ = ']';
+               req_defined_ch_c_l = lexer->here_ch_c_l();
+       }
        ;
-
+  
 open_request_parens:
-       ')'     { $$=')'; }
-       |'['    { $$='['; }
+       ')'     { 
+               $$=')';
+               req_defined_ch_c_l = lexer->here_ch_c_l();
+       }
+       | '['   {
+               $$='[';
+               req_defined_ch_c_l = lexer->here_ch_c_l();
+       }
        ;
 
 script_definition:
@@ -446,7 +504,11 @@ textscript_req:
        ;
 
 mudela_text:
-       STRING                  { $$ = get_text(*$1); delete $1; }
+       STRING                  { 
+               $$ = get_text(*$1); 
+               delete $1;
+               defined_ch_c_l = lexer->here_ch_c_l();
+       }
        ;
 
 script_req:
@@ -464,7 +526,8 @@ mudela_script:
        | '>'           { $$ = get_scriptdef('>'); }
        | '.'           { $$ = get_scriptdef('.'); }
        | DOTS          {
-               if ($1>1) error("too many staccato reqs");
+               if ( $1 > 1 ) 
+                   warning( "too many staccato dots", lexer->here_ch_c_l() );
                $$ = get_scriptdef('.');
        }
        ;
@@ -482,16 +545,21 @@ pre_requests:
        ;
 
 pre_request: 
-       open_request_parens             { $$ = get_request($1); }
+       open_request_parens     { 
+               $$ = get_request($1); 
+               defined_ch_c_l = lexer->here_ch_c_l();
+       }
        ;
 
-
-
 voice_command:
        PLET    '{' INT '/' INT '}'             {
                set_plet($3,$5);
        }
-       | DURATIONCOMMAND '{' duration '}'      {
+       | DURATIONCOMMAND '{' STRING '}'        {
+               set_duration_mode(*$3);
+               delete $3;
+       }
+       | DURATIONCOMMAND '{' notemode_duration '}'     {
                set_default_duration($3);
        }
        | OCTAVECOMMAND '{' pitchmod '}'        {
@@ -504,11 +572,22 @@ voice_command:
        }
        ;
 
-duration:              {
-               get_default_duration($$);
+duration_length:       
+       mudela_duration         {
+               $$ = new Moment(wholes($1[0], $1[1]));
        }
-       | int           {
-               get_default_duration($$);
+       |int '*' mudela_duration        {
+               $$ = new Moment(Rational($1) * wholes($3[0], $3[1]));
+       }
+       ;
+
+notemode_duration:
+       explicit_duration
+       | default_duration
+       ;
+
+mudela_duration:
+       int             {
                $$[0] = $1;
                $$[1] = 0;
        }
@@ -516,22 +595,52 @@ duration:         {
                $$[0] = $1;
                $$[1] = $2;
        }
+       ;
+
+
+explicit_duration:
+       INT             {
+               last_duration($1);
+               $$[0] = $1;
+               $$[1] = 0;
+       }
+       | INT DOTS      {
+               last_duration($1);
+               $$[0] = $1;
+               $$[1] = $2;
+       }
        | DOTS  {
                 get_default_duration($$);
                 $$[1] = $1;
        }
        ;
 
-pitchmod:              { $$ = new String; }
-       |PITCHMOD       
+default_duration:
+       {
+               get_default_duration($$);
+       }
+       ;
+
+pitchmod:              { 
+               $$ = new String; 
+               defined_ch_c_l = lexer->here_ch_c_l();
+       }
+       | PITCHMOD      { 
+               $$ = $1;
+               defined_ch_c_l = lexer->here_ch_c_l();
+       }
+       ;
+
+notename:
+       NOTENAME
        ;
 
 voice_elt:
-       pitchmod NOTENAME duration                      {
+       pitchmod notename notemode_duration                     {
                $$ = get_note_element(*$1, $2, $3);
                delete $1;
        }
-       | RESTNAME duration             {
+       | RESTNAME notemode_duration            {
                $$ = get_rest_element(*$1, $2);
                delete $1;
 
@@ -539,7 +648,7 @@ voice_elt:
        ;
 
 lyrics_elt:
-       mudela_text duration                    {
+       mudela_text notemode_duration                   {
                $$ = get_word_element($1, $2);
        };
 
@@ -556,16 +665,27 @@ pitch_list:                       {
        ;
 
 int:
-       REAL                    {
+       real                    {
                $$ = int($1);
                if ( distance($1,Real(int($$)) ) > 1e-8)
-                       error("expecting integer number");
+                       error( "integer expected", lexer->here_ch_c_l() );
        }
-       | INT
        ;
 
-int_list:
-       /* */           {
+real:
+       INT                     {
+               $$ = Real($1);
+       }
+       | REAL          {
+               $$ = $1;
+       }
+       | IDENTIFIER            {
+               $$ = * $1->real(0);             
+       }
+       ;
+       
+
+int_list:              {
                $$ = new Array<int>;
        }
        | int_list int          {
@@ -573,8 +693,9 @@ int_list:
        }
        ;
 
+
 dim:
-       REAL unit       { $$ = convert_dimen($1,$2); }
+       real unit       { $$ = convert_dimen($1,$2); }
        ;
 
 
@@ -650,7 +771,7 @@ dinterval: dim      dim             {
 %%
 
 void
-parse_file(String s)
+parse_file(String init, String s)
 {
    *mlog << "Parsing ... ";
    lexer = new My_flex_lexer;
@@ -660,7 +781,7 @@ parse_file(String s)
    lexer->set_debug( !monitor.silence("InitLexer") && check_debug);
 #endif
 
-   lexer->new_input("symbol.ini");
+   lexer->new_input(init);
    yyparse();
 
 #ifdef YYDEBUG
index 4391855b13866f0a55d8c07a41b4c3aace56164c..d9d3e8a41b5ae3ed200bbb34e9bfaf2d3431ceb2 100644 (file)
@@ -11,14 +11,15 @@ Staff_elem_info::Staff_elem_info(Staff_elem*s_l, Request*r_l,
     elem_p_ = s_l;
     voice_l_ = r_l->elt_l_->voice_l_;
     req_l_ = r_l;
-    group = 0;
+    group_regs_l_ = 0;
     origin_reg_l_ = reg_l;
 }
 Staff_elem_info::Staff_elem_info()
 {
     elem_p_ = 0;
     voice_l_ = 0;
-    group = 0;
+
+    group_regs_l_ = 0;
     origin_reg_l_ = 0;
     req_l_ = 0;
 }
@@ -86,7 +87,7 @@ Local_key_register::acknowledge_element(Staff_elem_info info)
        
 
            if (!key_item_p_) {
-               key_item_p_ = new Local_key_item(-2);
+               key_item_p_ = new Local_key_item(walk_l_->clef_.c0_pos);
                key_item_p_->c0_position = walk_l_->clef_.c0_pos;
            }
            
index 323932a6a9f9a9cc00b5c800c068fdba86916e31..3be4f8260eaf959f9274fee7296ec0b738149834 100644 (file)
@@ -9,12 +9,14 @@
 void
 Stem_req::do_print() const
 {
-    Rhythmic_req::do_print();    
+    Rhythmic_req::do_print();
+    mtor << "dir : " << dir_i_;
 }
 
 Stem_req::Stem_req(int s, int d)
     : Rhythmic_req(s,d)
 {
+    dir_i_ = 0;
 }
 
 /****************/
@@ -56,10 +58,12 @@ Span_req::do_print() const
 Request::Request()
 {
     elt_l_ = 0;
+    defined_ch_c_l_m = 0;
 }
 Request::Request(Request const&)
 {
     elt_l_ = 0;
+    defined_ch_c_l_m = 0;
 }
 /****************/
 Melodic_req::Melodic_req()
@@ -168,32 +172,64 @@ Span_req::Span_req()
     spantype = NOSPAN;
 }
 /****************/
+void
+Group_feature_req::do_print() const
+{
+    mtor << "stemdir " << stemdir_i_;
+}
+Group_feature_req::Group_feature_req()
+{
+    stemdir_i_ = 0;
+}
+void
+Group_change_req::do_print()const
+{
+    mtor << "id : " << newgroup_str_;
+}
+void
+Terminate_voice_req::do_print()const
+{
+}
+/****************/
 Script_req::Script_req(int d , Script_def*def)
 {
-    dir = d;
-    scriptdef = def;
+    dir_i_ = d;
+    scriptdef_p_ = def;
+}
+
+int
+Script_req::compare(const Script_req &d1, const Script_req &d2)
+{
+    return d1.dir_i_ == d2.dir_i_ &&
+       d1.scriptdef_p_->compare(*d2.scriptdef_p_);
 }
 
 Script_req::Script_req(Script_req const &s)
 {
-    dir = s.dir;
-    scriptdef = new Script_def(*s.scriptdef);
+    dir_i_ = s.dir_i_;
+    scriptdef_p_ = new Script_def(*s.scriptdef_p_);
 }
 
 void
 Script_req::do_print() const
 {
-    mtor << " dir " << dir ;
-    scriptdef->print();
+    mtor << " dir " << dir_i_ ;
+    scriptdef_p_->print();
 }
 
 
 Script_req::~Script_req()
 {
-    delete scriptdef;
+    delete scriptdef_p_;
 }
 /****************/
-
+int
+Text_req:: compare(const Text_req &r1, const Text_req &r2)
+{
+    bool b1 = (r1.dir_i_ == r2.dir_i_);
+    bool b2 = (r1.tdef_p_ ->compare(*r2.tdef_p_));
+    return b1 && b2;
+}
 Text_req::~Text_req()
 {
     delete tdef_p_;
index edd26aaf7baf3e9b082b845dd15b7cc3cc9bc70d..feb7db93e727438e65c1a1b176001a5efe5cd350 100644 (file)
@@ -160,6 +160,7 @@ Score::Score(Paperdef*p)
 {
     pscore_p_=0;
     paper_p_ = p;              // ?? safe?
+    errorlevel_i_ = 0;
 }
 
 Score::~Score()
@@ -175,6 +176,12 @@ Score::output(String s)
     if (paper_p_->outfile=="")
        paper_p_->outfile = s;
     
+    if ( errorlevel_i_ ) { 
+       *mlog << "lilypond: warning: no output to: " << paper_p_->outfile 
+       << " (errorlevel=" << errorlevel_i_ << ")" << endl;
+        return;
+    }
+
     *mlog << "output to " << paper_p_->outfile << "...\n";
     
     Tex_stream the_output(paper_p_->outfile);
index 6ebbf18a171e986804d9b06ff8d33c6e103c49fe..06a401fd82d3d26751f263afd6268d8dd2fcf4e6 100644 (file)
@@ -28,6 +28,16 @@ add_score(Input_score * s)
     score_array_global.push(s);
 }
 
+#if 0
+Input_score*
+current_iscore_l()
+{
+    if ( score_array_global.size() )
+       return score_array_global.last(); // UGH
+    else
+       return 0;
+}
+#endif
 
 void
 set_default_output(String s)
index a6c3ee8039fa5b3d3678cbd89c512e8711a70afd..f9155ea0c41e88fe9e1299278227ec6d00d86f05 100644 (file)
@@ -24,11 +24,11 @@ Script::set_support(Item*i)
 Script::Script(Script_req* rq, int staflen)
 {    
     staffsize =staflen;
-    specs_l_ = rq->scriptdef;
+    specs_l_ = rq->scriptdef_p_;
     stem_l_ = 0;
     pos = 0;
     symdir=1;
-    dir =rq->dir;
+    dir =rq->dir_i_;
 }
 
 void
index cc7d70087e311df4ad82381145fd89173bbb9cef..1e11de72c29934611a0ee275584e9e97afb2c432 100644 (file)
@@ -14,3 +14,11 @@ Script_def::print() const
     mtor << "idx: " << symidx;
     mtor << "direction, stem: " << stemdir << " staff : " << staffdir;
 }
+int
+Script_def::compare(Script_def const & c)
+{
+    return (symidx == c.symidx &&
+       stemdir == c.stemdir&&
+       staffdir == c.staffdir&&
+       invertsym == c.invertsym);
+}
index 20f291fa8aac52956675a8e81d2a89f0209276cb..30ef3e84e1831df4bb60604c12c89ee4f8ce9480 100644 (file)
@@ -37,7 +37,8 @@ Simple_column::setup_requests()
            Request *rq= j;
            if (rq->barcheck()) {
                if (tdescription_->whole_in_measure) {
-                   error("Barcheck failed, " + tdescription_->str());
+//                 error("Barcheck failed, " + tdescription_->str());
+                   error( "Barcheck failed", rq->defined_ch_c_l_m );
                }
            }
            if (rq->rhythmic()){
index 05bc76c9b6d6534b75cee1170efc5b7772bfa368..f99d9f52136445d3b3699854f4910de549daf2c2 100644 (file)
 #include "slur.hh"
 #include "localkeyitem.hh"
 #include "textitem.hh"
-
+#include "misc.hh"
 
 Rhythmic_grouping
-parse_grouping(Array<Scalar> a, Moment one_beat)
+parse_grouping(Array<Scalar> const &a)
 {
     Array<int> r;
-    for (int i= 0 ; i < a.size(); i++)
-       r.push(a[i]);
-    Moment here =0.0;
+    Array<Moment> grouplen_arr;
+    for (int i= 0 ; i < a.size()/2; ) {
+       r.push(a[i++]);
+       grouplen_arr.push(Moment(1,(int) a[i++]));
+    }
+    Moment here =0;
 
     Array<Rhythmic_grouping*> children;
     for (int i=0; i < r.size(); i++) {
        
        Moment last = here;
-       here += one_beat * r[i];
+       here += grouplen_arr[i] * Rational(r[i]);
        children.push(
-           new Rhythmic_grouping(MInterval(last, here), r[i] )
-           );
+           new Rhythmic_grouping(MInterval(last, here), r[i] ));
     }
     return Rhythmic_grouping(children);
 }
 
+
+
 void
 Simple_walker::do_INTERPRET_command(Command*com)
 {
     Array<Scalar> args(com->args);
     args.del(0);
     if (com->args[0] == "GROUPING") {  
-       default_grouping = parse_grouping(args,
-                                         col()->tdescription_->one_beat);
+       default_grouping = parse_grouping(args);
     }else if (com->args[0] == "NEWMEASURE") {
        local_key_.reset(key_);
 
@@ -178,8 +181,7 @@ Simple_walker::process_requests()
 
     if (c->beam_ && c->beam_->spantype == Span_req::START) {
        if (beam_)
-           error("Too many beams (t = "
-                         +String(c->when())+")");
+           error("Too many beams (t = " +String(c->when())+")");
        beam_ = new Beam;
        assert(!current_grouping);
        current_grouping = new Rhythmic_grouping;
@@ -190,7 +192,7 @@ Simple_walker::process_requests()
 
        if (sl->spantype == Span_req::START) {
            if  (find_slur(sl->elt_l_->voice_l_)>=0)
-               error_t("Too many slurs in voice", *col()->tdescription_);
+               error( "Too many slurs in voice", sl->defined_ch_c_l_m );
            pending_slur_reqs.push(sl);
            pending_slurs.push(new Slur);
        }
@@ -225,7 +227,7 @@ Simple_walker::process_requests()
 
     if (c->beam_&& c->beam_->spantype == Span_req::STOP) {
        if (!beam_) {
-           error_t("No beam to end", *col()->tdescription_);
+           error( "No beam to end", c->beam_->defined_ch_c_l_m );
        }
        default_grouping.extend(current_grouping->interval());
        beam_->set_grouping(default_grouping, *current_grouping);
@@ -261,7 +263,7 @@ Simple_walker::process_requests()
        if (sl->spantype == Span_req::STOP) {
            int idx = find_slur(sl->elt_l_->voice_l_);
            if (idx < 0)
-               error_t("can't find slur to end; ", *c->tdescription_);
+               error( "can't find slur end", sl->defined_ch_c_l_m );
            
            pscore_l_->typeset_spanner(pending_slurs[idx],
                                     s->theline_l_);
diff --git a/src/source.cc b/src/source.cc
new file mode 100644 (file)
index 0000000..dbdc501
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// source.cc
+//
+
+#include <assert.h>
+
+#include "string.hh"
+#include "proto.hh"
+#include "plist.hh"
+
+#include "sourcefile.hh"
+#include "source.hh"
+
+Source::Source()
+{
+}
+
+Source::~Source()
+{
+}
+
+void
+Source::add( Source_file* sourcefile_p )
+{
+    sourcefile_p_iplist_m.bottom().add( sourcefile_p );
+}
+
+Source_file*
+Source::sourcefile_l( char const* ch_c_l )
+{
+    PCursor<Source_file*> sourcefile_p_pcur( sourcefile_p_iplist_m.top() );
+    for ( ; sourcefile_p_pcur.ok(); sourcefile_p_pcur++ )
+       if ( sourcefile_p_pcur->in_b( ch_c_l ) )        
+           return *sourcefile_p_pcur;
+    return 0;
+}
diff --git a/src/sourcefile.cc b/src/sourcefile.cc
new file mode 100644 (file)
index 0000000..4792483
--- /dev/null
@@ -0,0 +1,176 @@
+//
+// sourcefile.cc
+//
+
+#include <sys/types.h>         // open, mmap
+#include <sys/stat.h>          // open
+#include <sys/mman.h>          // mmap
+#include <limits.h>            // INT_MAX
+#include <fcntl.h>             // open 
+#include <unistd.h>            // close, stat
+#include <stdio.h>             // fdopen
+#include <string.h>            // strerror
+#include <errno.h>             // errno
+#include <assert.h>
+#include <strstream.h>
+
+#include "string.hh"
+#include "proto.hh"
+#include "plist.hh"
+#include "main.hh"                     // find_file
+
+#include "sourcefile.hh"
+
+Source_file::Source_file( String &filename_str )
+{
+    data_caddr_m = 0;
+    fildes_i_m = 0;
+    size_off_m = 0;
+    name_str_m = filename_str;
+    istream_p_m = 0;
+
+    open();
+    map();
+    filename_str = name_str_m;
+}
+
+Source_file::~Source_file()
+{
+    delete istream_p_m;
+    istream_p_m = 0;
+    unmap();
+    close();
+}
+
+char const*
+Source_file::ch_c_l()
+{
+    return (char const*)data_caddr_m;
+}
+
+void
+Source_file::close()
+{
+    if ( fildes_i_m ) {
+       ::close( fildes_i_m );
+       fildes_i_m = 0;
+    }
+}
+
+String
+Source_file::error_str( char const* pos_ch_c_l )
+{
+    if ( !in_b( pos_ch_c_l ) )
+       return "";
+
+    char const* begin_ch_c_l = pos_ch_c_l;
+    char const* data_ch_c_l = ch_c_l();
+    while ( begin_ch_c_l > data_ch_c_l )
+        if ( *--begin_ch_c_l == '\n' ) {
+           begin_ch_c_l++;
+           break;
+       }
+
+    char const* end_ch_c_l = pos_ch_c_l;
+    while ( end_ch_c_l < data_ch_c_l + size_off_m )
+        if ( *end_ch_c_l++ == '\n' ) {
+           break;
+       }
+    end_ch_c_l--;
+
+// String( char const* p, int size ) is missing!?
+//    String line_str( begin_ch_c_l, end_ch_c_l - begin_ch_c_l );
+
+    int size_i = end_ch_c_l - begin_ch_c_l;
+    char* ch_p = new char[ size_i ];
+    strncpy( ch_p, begin_ch_c_l, size_i );
+    ch_p[ size_i ] = 0;
+    String line_str( ch_p );
+    delete ch_p;
+
+    int error_col_i = 0;
+    char const* scan_ch_c_l = begin_ch_c_l;
+    while ( scan_ch_c_l < pos_ch_c_l )
+       if ( *scan_ch_c_l++ == '\t' )
+           error_col_i = ( error_col_i / 8 + 1 ) * 8;
+       else
+           error_col_i++;
+
+    String str = line_str.left( pos_ch_c_l - begin_ch_c_l ) 
+       + String( '\n' )
+       + String( ' ', error_col_i ) 
+       + line_str.mid( pos_ch_c_l - begin_ch_c_l + 1, INT_MAX ); // String::mid should take 0 arg..
+    return str;
+}
+
+bool
+Source_file::in_b( char const* pos_ch_c_l )
+{
+    return ( pos_ch_c_l >= ch_c_l() ) && ( pos_ch_c_l < ch_c_l() + size_off_m );
+}
+
+istream*
+Source_file::istream_l()
+{
+    assert( fildes_i_m );
+    if ( !istream_p_m )
+       istream_p_m = new istrstream( ch_c_l(), size_off_m );
+    return istream_p_m;
+}
+
+int
+Source_file::line_i( char const* pos_ch_c_l )
+{
+    if ( !in_b( pos_ch_c_l ) )
+       return 0;
+
+    int i = 0;
+    char const* scan_ch_c_l = ch_c_l();
+    while ( scan_ch_c_l < pos_ch_c_l )
+       if ( *scan_ch_c_l++ == '\n' )
+               i++;
+    return i;
+}
+
+void
+Source_file::map()
+{
+    data_caddr_m = (caddr_t)mmap( (void*)0, size_off_m, PROT_READ, MAP_FILE | MAP_SHARED, fildes_i_m, 0 );
+
+    if ( (int)data_caddr_m == -1 ) {
+       cerr << "lilypond: can't map: " << name_str_m << ": " << strerror( errno ) << endl;
+       assert( 0 );
+    }
+}
+
+String
+Source_file::name_str()
+{
+    return name_str_m;
+}
+
+void
+Source_file::open()
+{
+    name_str_m = find_file( name_str_m );
+    fildes_i_m = ::open( name_str_m, O_RDONLY );       
+    
+    if ( fildes_i_m == -1 ) {
+       cerr << "lilypond: can't open: " << name_str_m << ": " << strerror( errno ) << endl;
+       assert( 0 );
+    }
+
+    struct stat file_stat;
+    fstat( fildes_i_m, &file_stat );
+    size_off_m = file_stat.st_size;
+}
+
+void
+Source_file::unmap()
+{
+    if ( data_caddr_m ) {
+       munmap( data_caddr_m, size_off_m );
+       data_caddr_m = 0;
+       size_off_m = 0;
+    }
+}
index df46046c1458228e5bc89e5ab010c70b5dded317..d6ddda8f3b6dcdd7e07c4898e16cf6e989daa5ac 100644 (file)
@@ -142,7 +142,8 @@ Staff::setup_staffcols()
            Staff_column *s_l=get_col(now,true);
            s_l->add(j);
            now += j->duration;     
-       }       
+       }
+       
     }
     set_time_descriptions();
 }
index d1bbc45c42812a7d87feb283cb7afd1aa1c09220..517e7d1dd7c0e04416a11c8ff5b3fd47aa9c57b9 100644 (file)
@@ -70,9 +70,11 @@ Staff_commands_at::insert_between(Command victim, PCursor<Command*> firstc,
                                  PCursor<Command*> last)
 {
     PCursor<Command*> c(firstc+1);
-    assert(firstc < last&&last.ok());
+//    assert(firstc < last&&last.ok());
+    assert(firstc->code < last->code && last.ok());
     
-    while (c < last) { 
+//    while (c < last) { 
+    while (c->code < last->code ) { 
        if (c->priority <= victim.priority) {
            c.insert(new Command(victim));
            return;
index 2e602c1cae78974d0352ddfa5daba5c9fc6c9e76..2e0d55474ee1c765c97a30826345370309e7ff6c 100644 (file)
@@ -39,7 +39,8 @@ Stem::set_stemend(Real se)
 {
 
     // todo: margins
-    assert((dir > 0 && se >= maxnote) || (se <= minnote && dir <0));
+    if (!  ((dir > 0 && se >= maxnote) || (se <= minnote && dir <0))  )        
+       WARN << "Weird stem size; check for narrow beams.\n";
     
     top = (dir < 0) ? maxnote           : se;
     bot = (dir < 0) ? se  : minnote;
@@ -63,13 +64,19 @@ Stem::add(Notehead *n)
 }
 
 
+int
+Stem::get_default_dir()
+{
+    if (dir)
+       return dir;
+    Real mean = (minnote+maxnote)/2;
+    return (mean > staff_center) ? -1: 1;
+}
 void
 Stem::set_default_dir()
 {
-    Real mean = (minnote+maxnote)/2;
-    dir = (mean > staff_center) ? -1: 1;
+    dir = get_default_dir();
 }
-
 void
 Stem::set_default_stemlen()
 {
diff --git a/src/table.cc b/src/table.cc
deleted file mode 100644 (file)
index e69de29..0000000
index 106260039aff918cdde3fd36a8252915fcb3b246..bc7e4885a39201eff891318ae5e0202d58b73c0f 100644 (file)
@@ -7,6 +7,7 @@
 #include "inputcommands.hh"
 #include "molecule.hh"
 #include "staffcommands.hh"
+#include "sourcefile.hh"
 
 
 #include "plist.tcc"
@@ -19,3 +20,4 @@ IPL_instantiate(Commands_at);
 IPL_instantiate(Staff_commands_at);
 IPL_instantiate(Input_staff);
 IPL_instantiate(Input_music);
+IPL_instantiate(Source_file);
index c3b25320beb21ae8da1dc3f203566a5c9d1a81bf..69f7513390806572fe75962959ed710704998504 100644 (file)
@@ -1,3 +1,4 @@
+#include "proto.hh"
 #include "list.tcc"
 #include "cursor.tcc"
 
index c3867aeeb073bb29e752719d4bcf36a543d1b3db..880a5fb6e00bb162ace2e21181c2797151a1b2f6 100644 (file)
@@ -5,3 +5,4 @@
 #include "plist.tcc"
 
 IPL_instantiate(Voice_registers);
+IPL_instantiate(Voice_group_registers);
index 4c59ce3263aaa906373b9739449ffd91c8af18d3..a3b38dde9ea1c96a19c95be52e809a52e0d98c5e 100644 (file)
@@ -34,7 +34,7 @@ static int
 slope_index(Real &s)
 {
     if (abs(s) > 0.5) {
-       WARN << "beam steeper than 0.5";
+       WARN << "beam steeper than 0.5\n";
        s = sign(s) * 0.5;
     }
 
index a58a2cf94ca6169529e7d37f340ec8f18022cb2d..a3a29db4444f557bd4795c7adea80347bc0fbc6e 100644 (file)
@@ -50,7 +50,7 @@ Lookup::half_slur_middlepart(Real &dx, int dir)
        idx += 128;
 
 
-    f+=String( "{" ) + idx + "}";
+    f+=String( "{" ) + String( idx ) + "}";
     s.tex = f;
     Atom a(s);
     a.translate(Offset(dx/2,0));
@@ -99,7 +99,7 @@ Lookup::half_slur(int dy, Real &dx, int dir, int xpart)
     if (xpart < 0)
        idx += 128;
     
-    f+=String( "{" ) + idx + "}";
+    f+=String( "{" ) + String( idx ) + "}";
 
     
     s.tex = f;
@@ -144,7 +144,7 @@ Lookup::slur (int dy , Real &dx, int dir)
     s.dim.x = Interval(0,dx);
     s.dim.y = Interval(min(0,dy), max(0,dy));
 
-    String f = String("\\slurchar") + direction_char(y_sign);
+    String f = String("\\slurchar") + String( direction_char(y_sign) );
 
     int idx=-1;
     if (y_sign) {      
@@ -159,7 +159,7 @@ Lookup::slur (int dy , Real &dx, int dir)
            idx += 54;          
     }
     
-    f+=String( "{" ) + idx + "}";
+    f+=String( "{" ) + String( idx ) + "}";
     s.tex = f;
 
     Atom a(s);
index e3829c65db7f8079ad27510d249f401baf8ef40c..5dd44d91a15aede8a1c571e7c14e93a994fade08 100644 (file)
@@ -8,6 +8,13 @@ Text_def::Text_def()
 {   
     align_i_ = 1;                      // right
     style_str_ = "roman";
+    defined_ch_c_l_m = 0;
+}
+bool
+Text_def::compare(const Text_def&def)
+{
+    return align_i_ == def.align_i_ && text_str_ == def.text_str_
+       && style_str_ == def.style_str_;
 }
 
 Atom
index 275a47f0d9b57b1554b1f805435ed5012235b404..cabaeb00cfb093c6a9a07e89c693d5f67f6a267d 100644 (file)
@@ -4,9 +4,12 @@ String
 Time_description::str()const
 {
     String s( "Time_description { ");
-    s+=String( " cadenza: ") + cadenza_b_ + " at ";
+    if (cadenza_b_)
+       s+=String( " (cadenza) ");
+    s+= "at ";
     s+=when;
-    s+="\nmeter " + String(whole_per_measure/one_beat) +":" +(1/one_beat);
+    s+="\nmeter " + String(whole_per_measure/one_beat) +":" +
+       String(Rational(1/one_beat));
     s+= "\nposition "+String( bars) + ":"+ whole_in_measure +"\n}\n";
     return s;
 }
@@ -42,7 +45,7 @@ Time_description::set_cadenza(bool b)
 Time_description::Time_description(Moment dt, Time_description const *prev)
 {
     if (prev) {
-       assert(dt >= 0);
+       assert(dt >= Rational(0));
        *this = *prev;
        when +=  dt;
        whole_in_measure += dt;
@@ -65,7 +68,7 @@ void
 Time_description::set_meter(int l, int o)
 {
     assert(o);
-    one_beat = 1/Moment(o);
+    one_beat = Rational(1)/Moment(o);
     whole_per_measure = Moment(l) * one_beat;
     if(whole_in_measure)
        error_t("Meterchange should be at start of measure", *this);
@@ -76,7 +79,7 @@ Time_description::setpartial(Moment p)
 {
     if (when)
        error_t ("Partial measure only allowed at beginning.", *this);
-    if (p<0||p > whole_per_measure)
+    if (p<Rational(0)||p > whole_per_measure)
        error_t ("Partial measure has incorrect size", *this);
     whole_in_measure = whole_per_measure - p;
 }
index 818e723b42972b35a11c5a42c588c7dacfbc25d3..2e7b0b5111351ebbecb1096595b0d0a0cbb09f53 100644 (file)
@@ -2,6 +2,12 @@
 #include "voice.hh"
 #include "request.hh"
 
+void
+Voice::set_default_group(String s)
+{
+    elts.top()->set_default_group(s);
+}
+
 Voice::Voice(Voice const&src)
 {
     for (iter_top(src.elts, i); i.ok(); i++)
@@ -71,14 +77,26 @@ Voice_element::add(Request*r)
 Voice_element::Voice_element()
 {
     voice_l_ = 0;
-//    group = 0;
-    duration = 0.0;
+    duration = 0;
+    defined_ch_c_l_m = 0;
 }
 
 Voice_element::Voice_element(Voice_element const&src)
 {
+    defined_ch_c_l_m = src.defined_ch_c_l_m;
+               // are you sure? They can be modified after copying.
     voice_l_=0;
     for (iter_top(src.reqs, i); i.ok(); i++)
        add(i->clone());
-//    group=src.group;
+
+}
+void
+Voice_element::set_default_group(String s)
+{
+    for (iter_top(reqs, i); i.ok(); i++)
+       if (i->groupchange())
+           return ;
+    Group_change_req *greq = new Group_change_req;
+    greq->newgroup_str_ = s;
+    add(greq);
 }
index 5dfe5a8a275a58764557b4a99539e833eb1af5fc..f3088d73e2604c2813d958c073aafe4378c06a3b 100644 (file)
@@ -4,51 +4,61 @@
 #include "voicegroup.hh"
 #include "register.hh"
 
-Voice_group_registers::Voice_group_registers(Complex_walker*w_l)
-    : //text_reg_(w_l),
-      stem_beam_reg_(w_l)
-//,      script_reg_(w_l),
-      //    stem_reg_(w_l)
+static int temp_id_count;
+
+Voice_group_registers::Voice_group_registers(Complex_walker*w_l, String id)
+    : text_reg_(w_l),
+      stem_beam_reg_(w_l),
+      script_reg_(w_l)
 {
     walk_l_ = w_l;
+    if (id=="")
+       id = __FUNCTION__ + String(temp_id_count++);
+    group_id_str_ = id;
+    dir_i_ = 0;
 }
 
 void
 Voice_group_registers::pre_move_processing()
 {
     stem_beam_reg_.pre_move_processing();
-//    script_reg_.pre_move_processing();
-//    text_reg_.pre_move_processing();  
+    script_reg_.pre_move_processing();
+    text_reg_.pre_move_processing();  
 }
+
 void
 Voice_group_registers::post_move_processing()
 {
     stem_beam_reg_.post_move_processing();
+    text_reg_.post_move_processing();
+    script_reg_.post_move_processing();
 }
+
 bool
 Voice_group_registers::try_request(Request*r_l)
 {
+    if (r_l->groupfeature()) {
+       dir_i_ = r_l->groupfeature()->stemdir_i_;
+       return true;
+    } 
     bool b = stem_beam_reg_.try_request(r_l);
-/*    if (!b)
-       b|= beam_reg_.try_request(r_l);
     if (!b)
        b|= script_reg_.try_request(r_l);
     if (!b)
        b|=  text_reg_.try_request(r_l);
-       */
+
     return b;
 }
     
 void
 Voice_group_registers::announce_element(Staff_elem_info i)
 {
-/*
-  if (i.group_regs_l_!= this)
+    if (i.group_regs_l_!= this)
        return;
-       */
+       
     stem_beam_reg_.acknowledge_element(i);
-//    text_reg_.announce_element(i);
-    //  script_reg_.announce_element(i);
+    script_reg_.acknowledge_element(i);
+    text_reg_.acknowledge_element(i);
 }
 
 
@@ -56,5 +66,17 @@ void
 Voice_group_registers::process_requests()
 {
     stem_beam_reg_.process_request();
+    if (dir_i_)
+       stem_beam_reg_.set_dir (dir_i_);
+    
+    script_reg_.process_request();
+    text_reg_.process_request();
 }
 
+
+bool
+Voice_group_registers::acceptable_request(Request*r)
+{
+    return (r->stem() || r->beam() || r->text() || r->script() ||
+           r->groupfeature());
+}
index b13fd01652ce53d2f74ee9dd128a7a8be139b695..a70a01a4190f83219dc5df05996c4097e62ecdbd 100644 (file)
@@ -53,12 +53,18 @@ Voice_registers::process_requests()
     slur_reg_.process_request();
 }
 
+bool
+Voice_registers::acceptable_request(Request*r)
+{
+    return (r->rest() || r->note() || r->slur());
+    
+}
 /****************/
 
 Notehead_register::Notehead_register(Complex_walker*w_l)
     :Request_register(w_l)
 {
-    note_l_ = 0;
+    note_p_ = 0;
 }
 
 bool
@@ -75,34 +81,36 @@ Notehead_register::try_request(Request *req_l)
 void
 Notehead_register::process_request()
 {
+    if (!accepted_req_arr_.size())
+       return;
+    
     Request* req_l = accepted_req_arr_.last();
     if (req_l->note()) {
        Notehead*n_p = new Notehead(8); // ugh
-       note_l_ = n_p;
+       note_p_ = n_p;
        n_p->set_rhythmic(req_l->rhythmic());
        n_p->position = req_l->note()->height() + -2;
     } else {
-       note_l_ = new Rest ( req_l->rhythmic()->balltype,
+       note_p_ = new Rest ( req_l->rhythmic()->balltype,
                             req_l->rhythmic()->dots);
        if (req_l->rhythmic()->balltype <= 2)
-           note_l_->translate(
+           note_p_->translate(
                Offset(0,
-                      5 * walk_l_->staff()->paper()->internote()));
+                      6 * walk_l_->staff()->paper()->internote()));
     }
-    Staff_elem_info itinf(note_l_,req_l,this);
+    Staff_elem_info itinf(note_p_,req_l,this);
     walk_l_->announce_element(itinf);
 }
 
 void
 Notehead_register::do_pre_move_process()
 {
-    if (note_l_) {
-       walk_l_->typeset_element(note_l_);
-       note_l_ = 0;
+    if (note_p_) {
+       walk_l_->typeset_element(note_p_);
+       note_p_ = 0;
     }
 }
 
-/****************/
 /****************/
 
 Slur_register::Slur_register(Complex_walker* w)
@@ -131,21 +139,29 @@ Slur_register::acknowledge_element(Staff_elem_info info)
            end_slur_l_arr_[i]->add(head_p);
     }
 }
-
+/*
+  abracadabra
+  */
 void
 Slur_register::process_request()
 {
     Array<Slur*> start_slur_l_arr_;
     for (int i=0; i< accepted_req_arr_.size(); i++) {
        Slur_req* slur_req_l = accepted_req_arr_[i]->slur();
+       // end slur: move the slur to other array
        if (slur_req_l->spantype == Span_req::STOP) {
            if (slur_l_stack_.empty())
-               error_t("can't find slur to end; ", 
-                       *walk_l_->col()->tdescription_);
-           end_slur_l_arr_.push(slur_l_stack_.pop());
-           
+               warning("can't find slur to end; ",
+                     slur_req_l->defined_ch_c_l_m);
+           else {
+               end_slur_l_arr_.push(slur_l_stack_.pop());
+               requests_arr_.pop();
+           }
        } else  if (slur_req_l->spantype == Span_req::START) {
+           // push a new slur onto stack.
+           //(use temp. array to wait for all slur STOPs)
            Slur * s_p =new Slur;
+           requests_arr_.push(slur_req_l);
            start_slur_l_arr_.push(s_p);
            walk_l_->announce_element(Staff_elem_info(s_p, slur_req_l, this));
        }
@@ -164,6 +180,7 @@ Slur_register::do_pre_move_process()
 
 Slur_register::~Slur_register()
 {
-    if (slur_l_stack_.size())
-       error("unterminated slur");
+    for (int i=0; i < requests_arr_.size(); i++) {
+       warning("unterminated slur: ", requests_arr_[i]->defined_ch_c_l_m);
+    }
 }
index b44471201b59f757618200024b29f20be94e6d59..8328f64fb7fd7f8f86e8883ceeaf572f66092ba3 100644 (file)
@@ -2,6 +2,11 @@
 #include "lexer.hh"
 #include "moment.hh"
 #include "timedescription.hh"
+#include "proto.hh"
+#include "plist.hh"
+#include "sourcefile.hh"
+#include "source.hh"
+#include "main.hh"
 
 ostream &warnout (cerr);
 ostream *mlog(&cerr);
@@ -32,10 +37,39 @@ error_t(const String& s, const Moment& r)
     error(e);
 }
 
-
 void
 error_t(const String& s, Time_description const &t_tdes)
 {
-    String e=s+ " (at t=" + t_tdes.bars + ": " + t_tdes.whole_in_measure + ")\n";
+    String e=s+ " (at t=" + String(t_tdes.bars) + ": " + String(t_tdes.whole_in_measure) + ")\n";
     error(e);
 }
+
+void
+message( String message_str, char const* context_ch_c_l )
+{
+    String str = "lilypond: ";
+    Source_file* sourcefile_l = source_l->sourcefile_l( context_ch_c_l );
+    if ( sourcefile_l ) {
+       str += sourcefile_l->name_str() + ": ";
+       str += String( sourcefile_l->line_i( context_ch_c_l ) ) + ": ";
+    }
+    str += message_str;
+    if ( sourcefile_l ) {
+       str += "\n";
+       str += sourcefile_l->error_str( context_ch_c_l );
+    }
+    cerr << endl << str << endl;
+}
+
+void
+warning( String message_str, char const* context_ch_c_l )
+{
+    message( "warning: " + message_str, context_ch_c_l );
+}
+
+void
+error( String message_str, char const* context_ch_c_l )
+{
+    message( message_str, context_ch_c_l );
+    exit( 1 );
+}
diff --git a/src/windhoos-suck-suck-suck-thank-you-cygnus.cc b/src/windhoos-suck-suck-suck-thank-you-cygnus.cc
new file mode 100644 (file)
index 0000000..8ed1d6b
--- /dev/null
@@ -0,0 +1,48 @@
+//
+// windhoos.cc
+//
+#ifdef _WIN32
+
+#include <sys/types.h>
+#include <winbase.h>
+
+/* 
+HANDLE CreateFileMapping(
+    HANDLE hFile,      // handle to file to map 
+    LPSECURITY_ATTRIBUTES lpFileMappingAttributes,     // optional security attributes 
+    DWORD flProtect,   // protection for mapping object 
+    DWORD dwMaximumSizeHigh,   // high-order 32 bits of object size  
+    DWORD dwMaximumSizeLow,    // low-order 32 bits of object size  
+    LPCTSTR lpName     // name of file-mapping object 
+   );  
+
+LPVOID MapViewOfFile(
+    HANDLE hFileMappingObject, // file-mapping object to map into address space  
+    DWORD dwDesiredAccess,     // access mode 
+    DWORD dwFileOffsetHigh,    // high-order 32 bits of file offset 
+    DWORD dwFileOffsetLow,     // low-order 32 bits of file offset 
+    DWORD dwNumberOfBytesToMap         // number of bytes to map 
+   );  
+*/
+
+caddr_t
+mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
+{
+    (void)flags;
+    (void)prot;
+    HANDLE file_handle = CreateFileMapping( fd, (void*)0, PAGE_READONLY,
+       0, len, 0 ); 
+    return (caddr_t)MapViewOfFile( file_handle, addr, 0, offset, len );
+}
+
+
+int
+munmap(caddr_t addr, size_t len)
+{
+    (void)len;
+    return UnmapViewOfFile( addr );
+}
+
+#endif // _WIN32 //
diff --git a/standchen.tex b/standchen.tex
deleted file mode 100644 (file)
index 5ef590b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-\documentclass{article}         %UGH
-\usepackage{a4}
-\begin{document}
-\input lilyponddefs
-\input titledefs
-\def\interscoreline{\vskip12pt}
-\title{St\"andchen}
-\composer{Franz Schubert}
-\instrument{M\"a\ss ig} % heu
-%#%\tempo{M\"a\ss ig}
-\maketit
-\input standchen.uit
-\end{document}