From 813f755b266e091c9a9e66d09c45810aa1e060b7 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 12 Mar 1997 14:45:33 +0100 Subject: [PATCH] release: 0.0.41 --- .dstreamrc | 9 +- .version | 2 +- Documentation/CodingStyle.pod | 2 +- Documentation/language.pod | 12 + INSTALL | 3 +- NEWS | 36 +- TODO | 15 +- configure | 16 +- flower/.version | 2 +- flower/Makefile | 108 +++--- flower/NEWS | 8 + flower/Sources.make | 21 - flower/TODO | 2 - flower/Variables.make | 45 --- flower/assoc-iter.hh | 39 -- flower/assoc.hh | 78 ---- flower/choleski.cc | 91 ----- flower/choleski.hh | 46 --- flower/compare.hh | 55 --- flower/cursor.hh | 113 ------ flower/cursor.inl | 113 ------ flower/cursor.tcc | 107 ----- flower/data-file.cc | 95 ----- flower/data-file.hh | 59 --- flower/dstream.cc | 158 -------- flower/dstream.hh | 54 --- flower/fproto.hh | 44 --- flower/handle.hh | 58 --- flower/interval.hh | 125 ------ flower/interval.tcc | 106 ----- flower/iterate.hh | 22 -- flower/lgetopt.cc | 222 ----------- flower/lgetopt.hh | 94 ----- flower/lib/Makefile | 33 +- flower/lib/dstream.cc | 5 +- flower/lib/include/flower-config.hh | 0 flower/lib/include/fproto.hh | 11 +- flower/lib/include/pqueue.hh | 36 +- flower/lib/include/string-convert.hh | 6 +- flower/lib/string-convert.cc | 37 +- flower/libc-extension.cc | 113 ------ flower/libc-extension.hh | 32 -- flower/link.hh | 38 -- flower/link.inl | 102 ----- flower/list.hh | 98 ----- flower/list.inl | 56 --- flower/list.tcc | 112 ------ flower/make_version | 11 - flower/matdebug.cc | 63 --- flower/matrix.cc | 240 ------------ flower/matrix.hh | 135 ------- flower/path.cc | 77 ---- flower/path.hh | 32 -- flower/pcursor.hh | 67 ---- flower/pcursor.tcc | 16 - flower/plist.hh | 72 ---- flower/plist.inl | 21 - flower/plist.tcc | 21 - flower/pqueue.hh | 46 --- flower/rational.hh | 1 - flower/real.hh | 16 - flower/scalar.cc | 57 --- flower/scalar.hh | 34 -- flower/smat.cc | 181 --------- flower/smat.hh | 93 ----- flower/string-convert.cc | 234 ----------- flower/string-convert.hh | 43 --- flower/string-data.hh | 95 ----- flower/string-data.inl | 209 ---------- flower/string-handle.hh | 70 ---- flower/string-handle.inl | 156 -------- flower/string.cc | 365 ------------------ flower/string.hh | 193 --------- flower/stringtest.cc | 114 ------ flower/stringutil.cc | 33 -- flower/text-db.cc | 48 --- flower/text-db.hh | 55 --- flower/text-stream.cc | 31 -- flower/text-stream.hh | 74 ---- flower/unionfind.cc | 35 -- flower/unionfind.hh | 25 -- flower/varray.hh | 186 --------- flower/vector.cc | 25 -- flower/vector.hh | 111 ------ flower/vsmat.hh | 141 ------- init/dutch.ini | 87 ++++- init/dynamic.ini | 2 +- init/swedish.ini | 48 ++- input/fugue1.midi.ly | 199 ++++++---- input/pre1.midi.ly | 180 +++++---- input/standchen.ly | 18 +- lib/duration.cc | 131 ++++++- lib/include/duration.hh | 33 +- lib/include/proto.hh | 3 +- lily/bar-reg.cc | 2 +- lily/beam.cc | 3 +- lily/break.cc | 2 +- lily/calcideal.cc | 2 +- lily/clef-reg.cc | 2 +- .../{commandrequest.cc => command-request.cc} | 4 +- lily/complex-staff.cc | 2 +- lily/complex-walker.cc | 6 +- lily/crescendo.cc | 36 ++ lily/dynamic-reg.cc | 2 +- lily/headreg.cc | 2 +- lily/idealspacing.cc | 6 +- lily/identifier.cc | 6 - lily/include/command-request.hh | 117 ++++++ lily/include/commandrequest.hh | 117 ------ lily/include/crescendo.hh | 27 ++ lily/include/identifier.hh | 2 - lily/include/identparent.hh | 1 - lily/include/input-music.hh | 2 - lily/include/lexer.hh | 11 +- lily/include/midi-def.hh | 4 + lily/include/midi-item.hh | 11 + lily/include/midi-output.hh | 2 +- .../{musicalrequest.hh => musical-request.hh} | 23 +- lily/include/{pcol.hh => p-col.hh} | 2 +- lily/include/{pscore.hh => p-score.hh} | 4 +- lily/include/parseconstruct.hh | 2 +- lily/include/pstaff.hh | 25 -- lily/include/slur.hh | 3 +- lily/include/staffline.hh | 2 +- lily/input-music.cc | 2 +- lily/key-reg.cc | 4 +- lily/lexer.l | 68 ++-- lily/linespace.cc | 2 +- lily/local-key-item.cc | 2 +- lily/local-key-reg.cc | 4 +- lily/lyric-item.cc | 2 +- lily/lyric-staff.cc | 4 +- lily/lyric-walker.cc | 4 +- lily/meter-reg.cc | 2 +- lily/midi-def.cc | 5 + lily/midi-item.cc | 25 +- lily/midi-output.cc | 35 +- lily/midi-walker.cc | 4 +- lily/molecule.cc | 4 + lily/{request.cc => musical-request.cc} | 17 +- lily/mylexer.cc | 73 ++-- lily/note.cc | 33 +- lily/notehead.cc | 2 +- lily/notename.cc | 3 + lily/{pcol.cc => p-col.cc} | 6 +- lily/{pscore.cc => p-score.cc} | 2 +- lily/{pstaff.cc => p-staff.cc} | 2 +- lily/parser.y | 339 +++++++++------- lily/register.cc | 2 +- lily/score-column.cc | 2 +- lily/score.cc | 2 +- lily/scoreline.cc | 4 +- lily/script-reg.cc | 2 +- lily/script.cc | 2 +- lily/slur-reg.cc | 2 +- lily/slur.cc | 2 +- lily/spanner.cc | 2 +- lily/staff-column.cc | 8 +- lily/staff-elem.cc | 4 +- lily/staff-walker.cc | 4 +- lily/staff.cc | 4 +- lily/staffline.cc | 4 +- lily/stem-beam-reg.cc | 2 +- lily/stem.cc | 2 +- lily/template1.cc | 4 +- lily/template2.cc | 2 +- lily/text-item.cc | 2 +- lily/text-reg.cc | 2 +- lily/voice-elt.cc | 4 +- lily/voice-group-regs.cc | 4 +- lily/voice-regs.cc | 4 +- lily/voice.cc | 4 +- lily/walk-regs.cc | 2 +- lily/wordwrap.cc | 2 +- make/Rules.make | 2 +- make/configure.in | 19 +- mi2mu/.version | 2 +- mi2mu/include/midi-event.hh | 3 + mi2mu/include/midi-global.hh | 1 - mi2mu/include/midi-track.hh | 5 + mi2mu/include/my-midi-parser.hh | 2 +- mi2mu/lily-stream.cc | 27 +- mi2mu/main.cc | 16 +- mi2mu/midi-event.cc | 43 +-- mi2mu/midi-parser.y | 8 +- mi2mu/midi-score.cc | 6 +- mi2mu/midi-track.cc | 27 +- mi2mu/my-midi-parser.cc | 18 +- 188 files changed, 1424 insertions(+), 6673 deletions(-) delete mode 100644 flower/Sources.make delete mode 100644 flower/Variables.make delete mode 100644 flower/assoc-iter.hh delete mode 100644 flower/assoc.hh delete mode 100644 flower/choleski.cc delete mode 100644 flower/choleski.hh delete mode 100644 flower/compare.hh delete mode 100644 flower/cursor.hh delete mode 100644 flower/cursor.inl delete mode 100644 flower/cursor.tcc delete mode 100644 flower/data-file.cc delete mode 100644 flower/data-file.hh delete mode 100644 flower/dstream.cc delete mode 100644 flower/dstream.hh delete mode 100644 flower/fproto.hh delete mode 100644 flower/handle.hh delete mode 100644 flower/interval.hh delete mode 100644 flower/interval.tcc delete mode 100644 flower/iterate.hh delete mode 100644 flower/lgetopt.cc delete mode 100644 flower/lgetopt.hh create mode 100644 flower/lib/include/flower-config.hh delete mode 100644 flower/libc-extension.cc delete mode 100644 flower/libc-extension.hh delete mode 100644 flower/link.hh delete mode 100644 flower/link.inl delete mode 100644 flower/list.hh delete mode 100644 flower/list.inl delete mode 100644 flower/list.tcc delete mode 100755 flower/make_version delete mode 100644 flower/matdebug.cc delete mode 100644 flower/matrix.cc delete mode 100644 flower/matrix.hh delete mode 100644 flower/path.cc delete mode 100644 flower/path.hh delete mode 100644 flower/pcursor.hh delete mode 100644 flower/pcursor.tcc delete mode 100644 flower/plist.hh delete mode 100644 flower/plist.inl delete mode 100644 flower/plist.tcc delete mode 100644 flower/pqueue.hh delete mode 100644 flower/rational.hh delete mode 100644 flower/real.hh delete mode 100644 flower/scalar.cc delete mode 100644 flower/scalar.hh delete mode 100644 flower/smat.cc delete mode 100644 flower/smat.hh delete mode 100644 flower/string-convert.cc delete mode 100644 flower/string-convert.hh delete mode 100644 flower/string-data.hh delete mode 100644 flower/string-data.inl delete mode 100644 flower/string-handle.hh delete mode 100644 flower/string-handle.inl delete mode 100644 flower/string.cc delete mode 100644 flower/string.hh delete mode 100644 flower/stringtest.cc delete mode 100644 flower/stringutil.cc delete mode 100644 flower/text-db.cc delete mode 100644 flower/text-db.hh delete mode 100644 flower/text-stream.cc delete mode 100644 flower/text-stream.hh delete mode 100644 flower/unionfind.cc delete mode 100644 flower/unionfind.hh delete mode 100644 flower/varray.hh delete mode 100644 flower/vector.cc delete mode 100644 flower/vector.hh delete mode 100644 flower/vsmat.hh rename lily/{commandrequest.cc => command-request.cc} (97%) create mode 100644 lily/crescendo.cc create mode 100644 lily/include/command-request.hh create mode 100644 lily/include/crescendo.hh rename lily/include/{musicalrequest.hh => musical-request.hh} (91%) rename lily/include/{pcol.hh => p-col.hh} (99%) rename lily/include/{pscore.hh => p-score.hh} (98%) delete mode 100644 lily/include/pstaff.hh rename lily/{request.cc => musical-request.cc} (95%) rename lily/{pcol.cc => p-col.cc} (96%) rename lily/{pscore.cc => p-score.cc} (99%) rename lily/{pstaff.cc => p-staff.cc} (87%) diff --git a/.dstreamrc b/.dstreamrc index 2b36f41544..c7b8c24c77 100644 --- a/.dstreamrc +++ b/.dstreamrc @@ -1,4 +1,5 @@ # class name silence? +Dstream 1 My_flex_lexer 1 yyFlexLexer 1 @@ -23,9 +24,9 @@ Lexer 1 parse_duration 1 parse_pitchmod 1 Col_configuration 1 -Request 1 -Note_req 1 -Rhythmic_req 1 +Request 0 +Note_req 0 +Rhythmic_req 0 Rest_req 1 delete_identifiers 1 Command 1 @@ -39,7 +40,7 @@ Input_cursor 1 Commands_at 1 Input_command 1 Time_description 1 -Melodic_req 1 +Melodic_req 0 Midi_walker 1 Stem_req 1 Group_change_req 1 diff --git a/.version b/.version index 60504f1847..6bdeb26877 100644 --- a/.version +++ b/.version @@ -1,6 +1,6 @@ TOPLEVEL_MAJOR_VERSION = 0 TOPLEVEL_MINOR_VERSION = 0 -TOPLEVEL_PATCH_LEVEL = 40 +TOPLEVEL_PATCH_LEVEL = 41 # use to send patches, always empty for released version: # include separator: ".postfix", "-pl" makes rpm barf diff --git a/Documentation/CodingStyle.pod b/Documentation/CodingStyle.pod index 9bf71c3810..a23cd5f46e 100644 --- a/Documentation/CodingStyle.pod +++ b/Documentation/CodingStyle.pod @@ -211,7 +211,7 @@ with the parts of the names separated by underscores. =item C unsigned char. (The postfix _by is ambiguous) -=item C +=item C bool =item C diff --git a/Documentation/language.pod b/Documentation/language.pod index e316fdc14e..88a008ca23 100644 --- a/Documentation/language.pod +++ b/Documentation/language.pod @@ -1,3 +1,4 @@ + =head1 NAME language.pod -- state of the art mudela-vapourware. @@ -129,6 +130,17 @@ voices on one staff? We might be able to do without the staff{} construct, but I doubt if it will make things easier. +=head1 CONCRETE PROPOSAL + +Any optional request/modifier should follow the note/rest-name/lyric: + + old new + ''!a a!'' + [a()a]()a a[( a)]( a) + +the []() construct doesn't look nice. We might make an exception for +spanning requests. + =head1 THOUGHTS =head2 Typing diff --git a/INSTALL b/INSTALL index e6fe95267a..c36823be78 100644 --- a/INSTALL +++ b/INSTALL @@ -41,7 +41,8 @@ SUPPORT * linux 2.0.28, g++ 2.7.2[.1] * aix 4.1, g++ 2.7.2 * windows-nt 4.0, cygnus gnu-win32 beta17.1 (~=g++ 2.7.2) - * linux 2.0.28 X to doze, gcc-go32 (~=g++ 2.7.2) + * linux 2.0.28 X to doze, gcc-go32 (~=g++ 2.7.2), but segfaults + in 16 bit subsystem %-/ Have fun! diff --git a/NEWS b/NEWS index 999d01b5a6..d62e32a4d2 100644 --- a/NEWS +++ b/NEWS @@ -1,8 +1,42 @@ +pl 41 + - release +pl 40.3 + - all of the above + - hw's configure.in + - p-name.xx fixes + +pl 40.hwn1 + - hairpin dynamics + - notename now as identifier. Parser/lexer cleanup + - ''!a now a!'' (NOT!?) + +pl 40.2 + - mi2mu --blonde-durations, --no-silly options. + - mi2mu starts to look promising, see examples +Examples + - pre1.midi.ly, fugue.midi.ly +Internal + - Duration handles blonde midi-durations + - More settings for Duration_convert + - lily writes meter too (ugh, howto?) +Bugfix + - mi2mu auto track number fix + - mi2mu / lily Midi_tempo fixed/added + +pl 40.1 +Bugfix + - lily midi output track 0 name + - mi2mu tempo fixed + - make out/make and out/make/Site.make in configure script! + - mi2mu double newline fix + + +****** pl 40 - release pl 39-5 - - own versioning for mi2mu + - own versioning for mi2mu: 0.0.10 - some file renaming mi2mu pl 39-4 - all of the above diff --git a/TODO b/TODO index b3d03f91ba..89b5570bf1 100644 --- a/TODO +++ b/TODO @@ -14,12 +14,12 @@ before 0.1 * caching of Register_group_register hierarchies. - * midi esp.: use I32 iso int where 32 bits are needed (or assumed...) - This is an assorted collection of stuff that will be done, might be done, or is an idea that I want to think about STUFF + * midi esp.: use I32 iso int where 32 bits are needed (or assumed...) + * generate all (.hh) files into out dirs * sort out headers, see m2m @@ -29,9 +29,6 @@ STUFF * make install. BUGS - - * barf if no score_wde_music - * plet bugs: scales.ly * key at clef change. @@ -46,12 +43,12 @@ BUGS * Group_feature at start of music. + * parser error handling (can you say Segfault?) + SEVERELY LACKING: * grace notes - * dynamics (hairpins) - INPUTLANGUAGE * lose the $ and @ ? @@ -134,7 +131,9 @@ FUTURE * implement better breaking algorithm - * Implement all requests + * Text_crescendo + + * clean solution for staffsize in items. * merge key{item} & localkey{item}? diff --git a/configure b/configure index 2e50a3fbf4..bf45d57827 100755 --- a/configure +++ b/configure @@ -2,7 +2,7 @@ # # project LilyPond -- the musical typesetter # title (bash/sh/ksh) script to setup library and auto generated files -# file configure +# file configure-broken-system # # Copyright (c) 1997 by # Han-Wen Nienhuys @@ -32,6 +32,7 @@ fi do_outdir() { if [ \! -d $1/out ] then + touch $1/.GENERATE mkdir $1/out echo 0 > $1/.build fi @@ -39,17 +40,8 @@ do_outdir() { echo using PREFIX=$PREFIX -#ugh # dist ze dan!, nou stiekem wordt "out" later toch "loes" of "doze" -# do_outdir flower/lib -# now all make rules! - -echo Configuring Flower Library - -#ugh, now all make rules -# the _real_ config stuff should be generated here, though. -# echo '#define LIBDIR "'$PREFIX'/"'> lib/out/config.hh -# touch flower/lib/out/flower-config.hh -# touch make/out/Site.make +do_outdir make +touch make/out/Site.make $MAKE -C make -f Initial.make diff --git a/flower/.version b/flower/.version index 45d4ace492..6c589619a0 100644 --- a/flower/.version +++ b/flower/.version @@ -1,6 +1,6 @@ MAJOR_VERSION = 1 MINOR_VERSION = 1 -PATCH_LEVEL = 7 +PATCH_LEVEL = 6 # use to send patches, always empty for released version: MY_PATCH_LEVEL = # include separator: "-1" or ".a" # diff --git a/flower/Makefile b/flower/Makefile index f4ab0e668f..abca493fbd 100644 --- a/flower/Makefile +++ b/flower/Makefile @@ -1,54 +1,56 @@ -include Variables.make +# +# project FlowerSoft C++ library +# title top level makefile for FlowerLib +# file flower/Makefile +# +# Copyright (c) 1997 by +# Jan Nieuwenhuizen +# Han-Wen Nienhuys +# ...your sort order here, or how to comment-out a comment + +# subdir level: +# +depth = .. +# + +# identify module: +# +NAME = flower +MODULE_NAME = flower +# +# edit .version only +include ./$(depth)/flower/.version +include ./$(depth)/.version +build = ./$(depth)/flower/lib/.build +# + +# generic variables: +# +include ./$(depth)/make/Variables.make +# + +# descent order into subdirectories: +# +SUBDIRS = lib +# + +# list of distribution files: +# +SCRIPTS = # make_version make_patch genheader clearlily configure +README_FILES = NEWS README TODO +DISTFILES= Makefile .version $(README_FILES) $(SCRIPTS) +# + +# generic targets and rules: +# +include ./$(depth)/make/Targets.make +# include ./$(depth)/make/Rules.make +# + +# version: +# +flower-version: $(flower-version) +$(flower-version): ./$(depth)/flower/.version ./$(bindir)/make_fversion $(build) + ./$(bindir)/make_fversion "$(MAJOR_VERSION)" "$(MINOR_VERSION)" "$(PATCH_LEVEL)" "$(MY_PATCH_LEVEL)" "$(BUILD)" "$(CXX) $(CXXVER)" > $@ +# -$(staticlib): $(obs) fversion.hh - $(AR) cr libflower.a $(obs) - -include deps/*.dep - -flower-config.hh: - touch flower-config.hh - -deps/*.dep: - touch deps/dummy.dep - -depend: Sources.make - $(CXX) $(CXXFLAGS) -MM $(cc) > depend - - -$(OBJECTDIR)/%.o: $(CCDIR)/%.cc - $(DODEP)\ - $(CXX) -c $(CXXFLAGS) $(OUTPUT_OPTION) - - -clean: - rm -f $(obs) $(staticlib) fversion.hh - -realclean: clean - rm -f depend - -fversion.hh: Variables.make make_version - make_version $(MAJVER) $(MINVER) $(PATCHLEVEL) "$(CXX) `$(CXXVER)`" > $@ - -.PHONY: docxx -docxx: $(hh) $(cc) $(templatecc) $(inl) - doc++ -p -d docxx $(hh) $(cc) $(templatecc) $(inl) - -dist: - -mkdir $(DDIR) - ln $(DFILES) $(DDIR)/ - -for SUBDIR in $(SUBDIRS); \ - do mkdir $(DDIR)/$$SUBDIR; \ - $(MAKE) SUBDIR=$$SUBDIR -C $$SUBDIR dist;\ - done - tar cfz $(DNAME).tar.gz $(DNAME)/ - rm -rf $(DDIR)/ - -TAGS: $(ALLSOURCES) - etags -CT $(inl) $(cc) $(hh) - - - -test: stringtest - -stringtest: $(OBJECTDIR)/stringtest.o - g++ -o $@ $< -L. -lflower \ No newline at end of file diff --git a/flower/NEWS b/flower/NEWS index faa08528d7..836eccbee0 100644 --- a/flower/NEWS +++ b/flower/NEWS @@ -1,7 +1,15 @@ +pl 1.1.6 + - all of 1.1.4-1 and 1.1.5 +Bugfix + - null_terminated -> is_binary test + pl 1.1.5 - memmem interface, conditional compilation - snprintf +pl 1.1.4-1 + - included in new make structure + pl 1.1.4 - great file-renaming. - String cleanup (binary <-> null terminate), several bugfixes diff --git a/flower/Sources.make b/flower/Sources.make deleted file mode 100644 index 4e08bec735..0000000000 --- a/flower/Sources.make +++ /dev/null @@ -1,21 +0,0 @@ - -cc=choleski.cc data-file.cc dstream.cc lgetopt.cc libc-extension.cc matdebug.cc\ - matrix.cc\ - path.cc scalar.cc smat.cc string.cc string-convert.cc stringutil.cc\ - text-db.cc text-stream.cc unionfind.cc vector.cc - -templatecc=cursor.tcc list.tcc plist.tcc interval.tcc\ - pcursor.tcc - -inl=link.inl list.inl cursor.inl plist.inl string-data.inl string-handle.inl - -hh=assoc.hh assoc-iter.hh choleski.hh compare.hh cursor.hh data-file.hh \ - dstream.hh\ - fproto.hh handle.hh interval.hh iterate.hh lgetopt.hh \ - libc-extension.hh link.hh list.hh\ - matrix.hh path.hh pcursor.hh plist.hh rational.hh real.hh scalar.hh\ - smat.hh string.hh string-convert.hh string-handle.hh string-data.hh\ - text-db.hh text-stream.hh unionfind.hh pqueue.hh\ - varray.hh vector.hh vsmat.hh - -extra=stringtest.cc diff --git a/flower/TODO b/flower/TODO index 26061b740c..822cd0287f 100644 --- a/flower/TODO +++ b/flower/TODO @@ -2,8 +2,6 @@ * LGPL? - * integrate Make mechanisms of flower & lily - * disable this auto conv: const pointer -> bool -> string * PointerVec ? diff --git a/flower/Variables.make b/flower/Variables.make deleted file mode 100644 index 23a14e903a..0000000000 --- a/flower/Variables.make +++ /dev/null @@ -1,45 +0,0 @@ -MAJVER=1 -MINVER=1 -PATCHLEVEL=5 - -PACKAGENAME=flower - -#PROFILEFLAG=-pg -#DEBUGFLAG= -g -OPTIFLAG= -DNPRINT -O2 -DSTRING_UTILS_INLINED # -DNDEBUG - -######################################### - -ifdef PROFILEFLAG - DEFINES+=$(OPTIFLAG) $(PROFILEFLAG) - EXTRALIB+=-pg -endif - -ifndef DEBUGFLAG - DEFINES+=$(OPTIFLAG) -else - DEFINES+=$(DEBUGFLAG) -endif - - -CXXFLAGS+=$(DEFINES) -Wall -W -CXXVER=$(CXX) --version - -VERSION=$(MAJVER).$(MINVER).$(PATCHLEVEL) -DNAME=$(PACKAGENAME)-$(VERSION) - -include Sources.make -OBJECTDIR=objects -CCDIR=. -obs=$(addprefix $(OBJECTDIR)/,$(cc:.cc=.o)) - -staticlib=libflower.a -ALLSOURCES=$(hh) $(cc) $(inl) $(templatecc) $(extra) -DFILES=$(ALLSOURCES) Makefile Variables.make make_version\ - Sources.make TODO README NEWS -DDIR=$(DNAME) - -depfile=deps/$(subst .o,.dep,$(notdir $@)) -DODEP=rm -f $(depfile); DEPENDENCIES_OUTPUT="$(depfile) $(OBJECTDIR)/$(notdir $@)" -OUTPUT_OPTION=$< -o $@ -SUBDIRS=deps objects diff --git a/flower/assoc-iter.hh b/flower/assoc-iter.hh deleted file mode 100644 index 34b88df22d..0000000000 --- a/flower/assoc-iter.hh +++ /dev/null @@ -1,39 +0,0 @@ -/* - associter.hh -- part of flowerlib - - (c) 1996 Han-Wen Nienhuys -*/ - -#ifndef ASSOCITER_HH -#define ASSOCITER_HH - -#include "assoc.hh" - -/// an iterator for the #Assoc# class -template -struct Assoc_iter { - int i; - Assoc &assoc_; - /// we don't want to be bothered by const correctness - Assoc_iter(const Assoc &a) : - assoc_((Assoc &)a) - { - i= next(0); - } - int next(int j) { - while (j < assoc_.arr.size() && assoc_.arr[j].free) - j++; - return j; - } - bool ok() const { - return i < assoc_.arr.size(); - } - void OK()const { - assert(!ok() || !assoc_.arr[i].free); - } - void operator++(int) { i++; i = next(i); } - K key() { return assoc_.arr[i].key; } - V &val() { return assoc_.arr[i].val; } -}; - -#endif diff --git a/flower/assoc.hh b/flower/assoc.hh deleted file mode 100644 index 99e20914b7..0000000000 --- a/flower/assoc.hh +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef ASSOC_HH -#define ASSOC_HH - -#include "varray.hh" -#include - -/** - A helper for Assoc - */ -template -struct Assoc_ent_ { - bool free; - K key; - V val; -}; - - -/** mindblowingly stupid Associative array implementation. - Hungarian: map - */ -template -struct Assoc { - Array< Assoc_ent_ > arr; - - /* ************** */ - - int find(K key) const { - for (int i = 0; i < arr.size(); i++) { - if (!arr[i].free && key == arr[i].key) - return i; - } - return -1; - } - int find_creat(K key) { - int free = -1; - for (int i = 0; i < arr.size(); i++) { - if (key == arr[i].key) { - return i; - } else if (arr[i].free ) { - free = i; - } - } - if (free >= 0){ - arr[free].free = false; - arr[free].key = key; - return free; - } - - Assoc_ent_ ae; - ae.free = false; - ae.key = key; - arr.push(ae); - return arr.size() -1; - } -public: - bool elt_query(K key) const { - return find(key) >= 0; - } - void del(K key) { - assert(elt_query(key)); - int i= find(key); - arr[i].free = true; - } - void - add(K key, V val) { - int i = find_creat(key); - arr[i].val = val; - } - V& operator[](K key) { - return arr[find_creat(key)].val; - } - const V& operator[](K key) const { - assert(elt_query(key)); - return arr[find(key)].val; - } -}; - -#endif diff --git a/flower/choleski.cc b/flower/choleski.cc deleted file mode 100644 index 1d64f949ac..0000000000 --- a/flower/choleski.cc +++ /dev/null @@ -1,91 +0,0 @@ -#include "choleski.hh" -const Real EPS = 1e-7; // so sue me. Hard coded - -Vector -Choleski_decomposition::solve(Vector rhs)const -{ - int n= rhs.dim(); - assert(n == L.dim()); - Vector y(n); - - // forward substitution - for (int i=0; i < n; i++) { - Real sum(0.0); - for (int j=0; j < i; j++) - sum += y(j) * L(i,j); - y(i) = (rhs(i) - sum)/L(i,i); - } - for (int i=0; i < n; i++) - y(i) /= D(i); - - // backward subst - Vector &x(rhs); // using input as return val. - for (int i=n-1; i >= 0; i--) { - Real sum(0.0); - for (int j=i+1; j < n; j++) - sum += L(j,i)*x(j); - x(i) = (y(i) - sum)/L(i,i); - } - return x; -} - -/* - Standard matrix algorithm. - */ - -Choleski_decomposition::Choleski_decomposition(Matrix P) - : L(P.dim()), D(P.dim()) -{ - int n = P.dim(); - assert((P-P.transposed()).norm()/P.norm() < EPS); - - L.unit(); - for (int k= 0; k < n; k++) { - for (int j = 0; j < k; j++){ - Real sum(0.0); - for (int l=0; l < j; l++) - sum += L(k,l)*L(j,l)*D(l); - L(k,j) = (P(k,j) - sum)/D(j); - } - Real sum=0.0; - - for (int l=0; l < k; l++) - sum += sqr(L(k,l))*D(l); - Real d = P(k,k) - sum; - D(k) = d; - } - -#ifdef NDEBUG - assert((original()-P).norm() / P.norm() < EPS); -#endif -} - -Matrix -Choleski_decomposition::original() const -{ - Matrix T(L.dim()); - T.set_diag(D); - return L*T*L.transposed(); -} - -Matrix -Choleski_decomposition::inverse() const -{ - int n=L.dim(); - Matrix invm(n); - Vector e_i(n); - for (int i = 0; i < n; i++) { - e_i.set_unit(i); - Vector inv(solve(e_i)); - for (int j = 0 ; j?, >) -#else -#define gpp_minmax(type, prefix) -#endif - -/** handy notations for a signed comparison. - make the operators{<,<=,==,>=,>} and the MAX and MIN of two. - Please fill a & in the type argument if necessary. - */ -#define template_instantiate_compare(type, function, prefix) \ -prefix one_operator(type, function, >)\ -prefix one_operator(type, function, >=)\ -prefix one_operator(type, function, ==)\ -prefix one_operator(type, function, !=)\ -prefix one_operator(type, function, <)\ -prefix one_operator(type, function, <=)\ -gpp_minmax(type, prefix)\ -prefix inline type max(type t1, type t2) { return (t1 > t2 )? t1 : t2; }\ -prefix inline type min(type t1, type t2) { return (t1 < t2 )? t1 : t2; }\ - \ -prefix bool operator<(type t1, type t2) /* stupid fix to allow ; */ - - - -#define instantiate_compare(type, func) template_instantiate_compare(type,func, ) - - - -#endif - diff --git a/flower/cursor.hh b/flower/cursor.hh deleted file mode 100644 index 0ea99037f9..0000000000 --- a/flower/cursor.hh +++ /dev/null @@ -1,113 +0,0 @@ -// cursor.hh - -#ifndef __CURSOR_HH -#define __CURSOR_HH - -#include "link.hh" -template class List; - -/** iterator to List. - add and insert extend the list - items are always stored as copies in List, but: - List : copies of String stored - List : copies of String* stored! - - the operations add and insert actually delegate the work to List class. - */ -template -class Cursor -{ - public: - /** create cursor, set at top. The const part isn't true, actually, #list# - surely isn't const, but I get tired of the warning messages. */ - Cursor( const List& list, Link* pointer = 0 ); - - Cursor( const Cursor& cursor ); - - T& thing(); - - /// return current T - T& operator *() { return thing(); } - operator T() { return thing(); } - Cursor operator =( const Cursor& c ); - - /// make cursor with #no# items back - Cursor operator -( int no) const; - - /// make cursor with #no# items further - Cursor operator +( int no) const; - int operator -(Cursor op) const; - Cursor operator -=(int); - Cursor operator +=(int); - - /// return current and move one down - Cursor operator ++( int ); - - /// return current and move one up - Cursor operator --( int ); - - /// point to link? - bool ok(); - - /// ++ items left? - bool forward(); - - /// -- items left? - bool backward(); - - /** put (copy) after me in List. - analogously to editor. ok() interpreted as at end - of line. - - PRE: !ok, POST: added to bottom() - - PRE: ok, POST: added after me - - cursor points to same object, cursor.next() is newly added - object. - */ - void add( const T& thing ); - - /** put (copy) before me in List. - analogously to editor. ok() interpreted as at begin of - line. - - PRE: !ok, POST: add to top() - - PRE: ok, POST: add before me - - cursor points to same object, cursor.previous() - is newly inserted object. - */ - - void insert( const T& thing ); - /// - void backspace(); - - /// - void del(); - - /// access the list this came from - List& list() const ; - Link* pointer(); - static int compare(Cursor a,Cursorb) { return a-b; } -private: - List& list_; - Link* pointer_; -}; - - -/* - comparisons. - */ -#include "compare.hh" - - -template_instantiate_compare(Cursor, Cursor::compare, template); - -#include "pcursor.hh" -#include "list.hh" -#include "cursor.inl" -#include "iterate.hh" - -#endif // CURSOR_HH diff --git a/flower/cursor.inl b/flower/cursor.inl deleted file mode 100644 index 54d3703e60..0000000000 --- a/flower/cursor.inl +++ /dev/null @@ -1,113 +0,0 @@ - // cursor.inl -*-c++-*- -#ifndef CURSOR_INL -#define CURSOR_INL -#include - - -template -inline -Cursor::Cursor( const List& list, Link* pointer ) : - list_((List&) list ) -{ - if ( list.size() ) - pointer_ = pointer ? pointer : list.top_; - else - pointer_ = pointer; -} - -template -inline -Cursor::Cursor( const Cursor& cursor ) : - list_( cursor.list_ ) -{ - pointer_ = cursor.pointer_; -} - -template -inline T& -Cursor::thing() -{ - assert( pointer_ ); - return pointer_->thing(); -} - -template -Cursor -Cursor::operator =( const Cursor& c ) -{ - assert( &list_ == &c.list_ ); - pointer_ = c.pointer_; - return *this; -} - -template -inline void -Cursor::add( const T& th ) -{ - list_.add( th, *this ); -} - -template -inline void -Cursor::insert( const T& th ) -{ - list_.insert( th, *this ); -} - -template -inline List& -Cursor::list() const -{ - return list_; -} - -template -inline Link* -Cursor::pointer() -{ - return pointer_; -} - -template -inline bool -Cursor::backward() -{ - return ( pointer_ != 0 ); -} - -template -inline bool -Cursor::forward() -{ - return ( pointer_ != 0 ); -} - -template -inline bool -Cursor::ok() -{ - return ( pointer_ != 0 ); -} - - -template -inline Cursor -Cursor::operator ++( int ) -{ - Cursor r (*this); - assert( pointer_ ); - pointer_ = pointer_->next(); - return r; -} - -template -inline Cursor -Cursor::operator --( int ) -{ - Cursor r (*this); - assert( pointer_ ); - pointer_ = pointer_->previous(); - return r; -} - -#endif diff --git a/flower/cursor.tcc b/flower/cursor.tcc deleted file mode 100644 index 3d2116c46f..0000000000 --- a/flower/cursor.tcc +++ /dev/null @@ -1,107 +0,0 @@ -#ifndef CURSOR_CC -#define CURSOR_CC - -#include "cursor.hh" -#include - -template - void -Cursor::backspace() -{ - Cursor c(*this); - c--; - list_.remove( *this ); -} - -template - void -Cursor::del() -{ - Cursor c(*this); - c++; - list_.remove( *this ); - *this = c; -} - - -template -Cursor -Cursor::operator -=( int j ) -{ - while (j--) - (*this)--; - return *this; -} -template -Cursor -Cursor::operator +=( int j ) -{ - while (j++) - (*this)++; - return *this; -} - -template -Cursor -Cursor::operator +( int i ) const -{ - Cursor r = *this; - - if (i<0) - return r -(-i); - - while (i--) - r++; - - return r; -} - -template -Cursor -Cursor::operator -( int i ) const -{ - Cursor r = *this; - if (i<0) - return r +(-i); - - while (i--) - r--; - - return r; -} -/* - warning: can't use Cursor::operator == (Cursor), - since it uses Cursor::operator-(Cursor) - */ -template -int -Cursor::operator-(Cursor rhs) const -{ - assert(rhs.list == list); - int dif = 0; - - // search from *this on further up (positive difference) - Cursor c(*this); - while (c.ok() && c.pointer_ != rhs.pointer_) { - c--; - dif++; - } - - if (c.ok()) - goto gotcha; // so, sue me. - - // search in direction of bottom. (negative diff) - dif =0; - c=*this; - while (c.ok() && c.pointer_ !=rhs.pointer_) { - dif --; - c++; - } - assert(c.ok()); - -gotcha: - assert((*this - dif).pointer_ == c.pointer_); - return dif; -} - -#endif diff --git a/flower/data-file.cc b/flower/data-file.cc deleted file mode 100644 index 0dad79c91f..0000000000 --- a/flower/data-file.cc +++ /dev/null @@ -1,95 +0,0 @@ -#include -#include - -#include "data-file.hh" - -void -Data_file::gobble_white() -{ - char c; - - while ((c=data_get()) == ' ' ||c == '\t') - if (eof()) - break; - - data_unget(c); -} - -String -Data_file::get_word() -{// should handle escape seq's - String s; - - while (1) - { - char c = data_get(); - - if (isspace(c) || eof()) - { - data_unget(c); - break; - } - - - if (c == '\"') - { - rawmode= true; - - while ((c = data_get()) != '\"') - if (eof()) - error("EOF in a string"); - else - s += c; - - - rawmode= false; - } - else - s += c; - } - - return s; -} - -/** get a char - Only class member who uses text_file::get - */ -char -Data_file::data_get() { - char c = get(); - if (!rawmode && c == '#') // gobble comment - { - while ((c = get()) != '\n' && !eof()) - ; - return '\n'; - } - - return c; -} - -/// read line, gobble '\n' -String Data_file::get_line() -{ - char c; - String s; - - while ((c = data_get()) != '\n' && !eof()) - s += c; - return s; -} - -/// gobble stuff before first entry on a line. -void -Data_file::gobble_leading_white() -{ - // eat blank lines. - while (!eof()) { - char c = data_get(); - if (!isspace(c)) { - data_unget(c); - break; - } - } -} - - diff --git a/flower/data-file.hh b/flower/data-file.hh deleted file mode 100644 index dae9e56347..0000000000 --- a/flower/data-file.hh +++ /dev/null @@ -1,59 +0,0 @@ -/* - data-file.hh -- declare Data_file - - source file of the LilyPond music typesetter - - (c) 1997 Han-Wen Nienhuys -*/ - - -#ifndef DATAFILE_HH -#define DATAFILE_HH - -#include "text-stream.hh" - -/// read a data file -class Data_file : private Text_stream -{ - - public: - bool rawmode; - - Text_stream::line; - Text_stream::eof; - Text_stream::get_name; - - char data_get(); - void data_unget(char c) { - unget(c); - } - - /// read line, eat #\n# - String get_line(); - - /// read a word till next space, leave space. Also does quotes - String get_word(); - - /// gobble horizontal white stuff. - void gobble_white(); - - /// gobble empty stuff before first field. - void gobble_leading_white(); - Data_file(String s) : Text_stream(s) { - //*mlog << "(" << s << flush; - rawmode= false; - } - - ~Data_file() { - // *mlog << ")"< -#include "assoc.hh" -#include "dstream.hh" -#include "scalar.hh" -#include "text-db.hh" -#include "string-convert.hh" - -/// indent of each level -const INDTAB = 2; - -/* - should use Regexp library. - */ -static String -strip_pretty(String pretty_str) -{ - int i = pretty_str.index_i('('); - if (i>=0) - pretty_str = pretty_str.left_str(i); - - int l = pretty_str.index_last_i(' '); // strip until last ' ' - if (l>=0) - pretty_str = pretty_str.nomid_str(0,l+1); - return pretty_str; -} - -static String -strip_member(String pret) -{ - int l=pret.index_last_i(':')-1; - if (l>=0) - pret = pret.left_str(l ); - return pret; -} - -Dstream& -Dstream::identify_as(String name) -{ - if (!os) - return *this; - - String mem(strip_pretty(name)); - String cl(strip_member(mem)); - String idx = cl; - - if (silent->elt_query(mem)) - idx = mem; - else if (silent->elt_query(cl)) - idx = cl; - else { - (*silent)[idx] = false; - } - local_silence = (*silent)[idx]; - if (classname != idx && !local_silence) { - classname=idx; -// *os << "[" << classname << ":]"; // messy. - } - return *this; -} - -bool -Dstream::silence(String s) -{ - if (!silent->elt_query(s)) - return false; - return (*silent)[s]; -} - -/** Output a string via the Dstream. This is the only output - interface. It delegates all conversion to String class. */ -Dstream & -Dstream::operator<<(String s) -{ - output(s); - return *this; -} - -Dstream & -Dstream::operator<<(const void *v_l) -{ - output(String_convert::pointer_str(v_l)); - return *this; -} - -Dstream & -Dstream::operator<<(const char *ch_l) -{ - output(ch_l); - return *this; -} - -void -Dstream::output(String s) -{ - if (local_silence|| !os) - return ; - - for (const char *cp = s ; *cp; cp++) - switch(*cp) { - case '{': - case '[': - case '(': indentlvl += INDTAB; - *os << *cp; - break; - - case ')': - case ']': - case '}': - indentlvl -= INDTAB; - *os << *cp ; - - assert (indentlvl>=0) ; - break; - - case '\n': - *os << '\n' << String (' ', indentlvl) << flush; - break; - default: - *os << *cp; - break; - } - return ; -} - - -Dstream::Dstream(ostream *r, const char * cfg_nm ) -{ - os = r; - silent = new Assoc; - indentlvl = 0; - if (!os) - return; - - const char * fn =cfg_nm ? cfg_nm : ".dstreamrc"; - { - ifstream ifs(fn); // can't open - if (!ifs) - return; - } - - Text_db cfg(fn); - while (! cfg.eof()){ - Text_record r( cfg++); - if (r.size() != 2) { - r.message("not enough fields in Dstream init."); - continue; - } - (*silent)[r[0]] = (bool)(int)(Scalar(r[1])); - } - -} - - -Dstream::~Dstream() -{ - delete silent; - assert(!indentlvl) ; -} diff --git a/flower/dstream.hh b/flower/dstream.hh deleted file mode 100644 index 5375304d85..0000000000 --- a/flower/dstream.hh +++ /dev/null @@ -1,54 +0,0 @@ - -#ifndef DSTREAM_HH -#define DSTREAM_HH - -#include "string.hh" - -const char eol= '\n'; - -template -struct Assoc; - -/** debug stream. - a class for providing debug output of nested structures, - with indents according to \{\}()[]. - - One can turn on and off specific messages using the Assoc silent. - This can be done automatically: - - #define DEBUG dstream_.identify_as(__PRETTY_FUNCTION__) - - DEBUG << "a message\n"; - - Init for the class names which should be silent can be given in a rc file. - - */ -class Dstream -{ - ostream *os; - int indentlvl; - bool local_silence; - String classname; - void output(String s); - Assoc *silent; -public: - - bool silence(String); - - /** - if rcfile == 0, then do not read any rc file. - */ - - Dstream(ostream *r, const char * rcfile); - virtual ~Dstream(); - Dstream &identify_as(String s); - - Dstream &operator << (String s); - /** - Output memory locations. - */ - Dstream &operator << (void const *); - Dstream &operator << (char const *); -}; -#endif - diff --git a/flower/fproto.hh b/flower/fproto.hh deleted file mode 100644 index 8c6fda680e..0000000000 --- a/flower/fproto.hh +++ /dev/null @@ -1,44 +0,0 @@ -/* - fproto.hh -- typenames in flowerlib - - (c) 1996 Han-Wen Nienhuys -*/ - -#ifndef FPROTO_HH -#define FPROTO_HH - -#include "flower-config.hh" - -template struct Array; -template struct sstack; -template struct Assoc; -template struct List; -template struct PointerList; -template struct IPointerList; -template struct Cursor; -template struct PCursor; -template struct Link; -template struct Handle; -templatestruct Interval_t; -#include "real.hh" - -typedef Interval_t Interval; - -struct Choleski_decomposition; - -struct Long_option_init; -struct Getopt_long; -struct Matrix; -struct String_data; -struct String_handle; -struct String_convert; -struct String; -struct virtual_smat; -struct Vector ; -struct Text_stream; -struct Data_file; -struct Text_db; -struct Scalar; -typedef unsigned char Byte; -#endif // FPROTO_HH - diff --git a/flower/handle.hh b/flower/handle.hh deleted file mode 100644 index 63c17ef1d2..0000000000 --- a/flower/handle.hh +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef HANDLE_HH -#define HANDLE_HH - -/// reference counting handle -template -class Handle { - T *obj; - int *refs; - - /// let go of ref. Delete if necessary - void down() { - if (!(*refs--)) { - delete obj; - delete refs; - } - obj = 0; - refs = 0; - } - /// point to new object. - void up(T *t, int *r) { - if (!r) { - refs = new int; - *refs = 1; - } else { - refs =r; - *refs++; - } - obj = t; - } - /// POST: *refs == 1 - void copy() { - if(*refs != 1){ - T * newobj = new T(*obj ); - down(); - up(newobj); - } - } - Handle(Handle const &src) { - up(src.obj, src.refs); - } - Handle(T & o) { - up (&o); - } - void operator=(Handle const& src) { - if (this == &src) - return; - down(); - up(src.o, src.refs); - } - operator const T&() { - return *obj; - } - operator T&() { - copy(); - return *obj; - } -} -#endif diff --git a/flower/interval.hh b/flower/interval.hh deleted file mode 100644 index aae16381db..0000000000 --- a/flower/interval.hh +++ /dev/null @@ -1,125 +0,0 @@ -/* - interval.hh -- part of flowerlib - - (c) 1996 Han-Wen Nienhuys -*/ - -#ifndef INTERVAL_HH -#define INTERVAL_HH - -#include -#include "fproto.hh" -#include "real.hh" - - -/** a T interval. - this represents the closed interval [left,right]. - No invariants. T must be a totally ordered ring - */ -template -struct Interval_t { - T left, right; - - /* ************** */ - - T center() { return (left + right) / T(2);} - void translate(T t) { - left += t; - right += t; - } - T& idx(int j) { - if (j==-1) - return left; - else if (j==1) - return right; - else - assert(false); - return left; - } - T& operator[](int j) { - return idx(j); - } - T operator[](int j) const { - return ((Interval_t *)this)->idx(j); - } - T &max() { return right;} - T max()const { return right;} - T min()const{ return left; } - T &min(){ return left; } - /** - PRE - *this and h are comparable - */ - void unite(Interval_t h); - void intersect(Interval_t h); - - T length() const; - void set_empty() ; - bool empty() const { return left > right; } - Interval_t() { - set_empty(); - } - Interval_t(T m, T M) { - left =m; - right = M; - } - Interval_t &operator += (T r) { - left += r; - right +=r; - return *this; - } - String str() const; - bool elt_q(T r); -}; - - -/** - inclusion ordering. Crash if not comparable. - */ -template -int Interval__compare(const Interval_t&,Interval_t const&); - -/* - INLINE - */ - -#include "compare.hh" - -template_instantiate_compare(Interval_t&, Interval__compare, template); - - -template -inline Interval_t -intersection(Interval_t a, Interval_t const&b) -{ - a.intersect(b); - return a; - -} - - -template -inline -Interval_t operator +(T a,Interval_t i ) -{ - i += a; - return i; -} - -template -inline -Interval_t operator +(Interval_t i,T a ){ - return a+i; -} - -typedef Interval_t Interval; - - -#define Interval__instantiate(T) template struct Interval_t;\ - template int Interval__compare(const Interval_t&,Interval_t const&) - - -#endif // INTERVAL_HH - - - diff --git a/flower/interval.tcc b/flower/interval.tcc deleted file mode 100644 index 6e7b0b1279..0000000000 --- a/flower/interval.tcc +++ /dev/null @@ -1,106 +0,0 @@ -#include -#include -#include "interval.hh" -#include "string.hh" - - -template -int -_Interval__compare(const Interval_t&a,Interval_t const&b) -{ - if (a.left == b.left && a.right == b.right) - return 0; - - if (a.left <= b.left && a.right >= b.right) - return 1; - - if (a.left >= b.left && a.right <= b.right) - return -1; - - return -2; -} - - -template -int -Interval__compare(const Interval_t&a,Interval_t const&b) -{ - int i = _Interval__compare(a,b); - if (i < -1) - assert(false); - return i; -} - -#ifdef AIX -const Real INFTY = 1e8; // ARGh. AIX sucks -#else -const Real INFTY = HUGE_VAL; -#endif - -template -void -Interval_t::set_empty() -{ - left = INFTY; - right = -INFTY; -} - -template -T -Interval_t::length() const { - assert(right >= left); - return right-left; -} - -template -void -Interval_t::unite(Interval_t h) -{ - if (h.leftright) - right = h.right; -} - -/** - smallest Interval which includes *this and #h# - */ - -template -void -Interval_t::intersect(Interval_t h) -{ -#if defined (__GNUG__) && ! defined (__STRICT_ANSI__) - left = h.left >? left; - right = h.right -Interval_t -intersect(Interval_t x, Interval_t const &y) -{ - x.intersect(y); - return x; -} - -template -String -Interval_t::str() const -{ - if (empty()) - return "[empty]"; - String s("["); - - return s + left + "," + right +"]"; -} - -template -bool -Interval_t::elt_q(T r) -{ - return r >= left && r <= right; -} diff --git a/flower/iterate.hh b/flower/iterate.hh deleted file mode 100644 index 1e924f0790..0000000000 --- a/flower/iterate.hh +++ /dev/null @@ -1,22 +0,0 @@ -/* - iterate.hh -- define some list macros - - source file of the flowerlib - - (c) 1997 Han-Wen Nienhuys -*/ - - -#ifndef ITERATE_HH -#define ITERATE_HH - - - -#define iterator(set) typeof((set).top()) -#define iterator_bot(set) typeof((set).bottom()) - -// should use top() -#define iter_top(set,var) iterator(set) var(set) -#define iter_bot(set,var) iterator(set) var(set.bottom()) - -#endif // ITERATE_HH diff --git a/flower/lgetopt.cc b/flower/lgetopt.cc deleted file mode 100644 index a56c64c6db..0000000000 --- a/flower/lgetopt.cc +++ /dev/null @@ -1,222 +0,0 @@ -/* - process command line, GNU style. - - this is (Copyleft) 1996, Han-Wen Nienhuys, - */ -#include -#include -#include -#include "lgetopt.hh" - -long -Getopt_long::intarg() -{ - long l; - if (sscanf(optarg, "%ld", &l) != 1) - report(E_ILLEGALARG); - - return l; -} - -Long_option_init * -Getopt_long::parselong() -{ - const char *optnm = argv[optind] + 2 ; - assert(*optnm); - - char *endopt = strchr(optnm, '='); - int searchlen = (endopt) ? endopt - optnm : strlen(optnm); - - beet=0; - for (int i=0; i< table_len; i++) { - const char *ln = the_opts[i].longname; - - if (ln && !strncmp(ln, optnm, searchlen)) { - beet = the_opts+i; - break; - } - } - - if (!beet) { - report(E_UNKNOWNOPTION); - return 0; - } - optind++; - optindind = 0; - - - if (beet->take_arg) { - if (endopt) - optarg = endopt +1; // a '=' - else { - optarg = argv[optind]; - optind++; - } - if (!optarg) - report(E_ARGEXPECT); - - } else { - optarg = 0; - if (endopt) - report(E_NOARGEXPECT); - } - - return beet; -} - - -ostream & -Long_option_init::printon(ostream &errorout) -{ - if (shortname) - errorout <<"-" << shortname; - if (shortname && longname) - errorout << ", "; - if (longname) - errorout << "`--" << longname << "'"; - return errorout; -} - -// report an error, GNU style. -void -Getopt_long::report(Errorcod c) -{ - error = c; - if (!errorout) - return; - - *errorout << argv[0] << ": "; - switch (c) { - case E_ARGEXPECT: - *errorout<< "option "; - beet->printon(*errorout); - *errorout << "requires an argument"<longname << "' does not allow an argument"<printon(*errorout); - *errorout << '\n'; - default: - assert(false); - } - exit(2); -} - -Long_option_init * -Getopt_long::parseshort() -{ - char c=argv[optind][optindind]; - beet=0; - assert(c); - - for (int i=0; i < table_len; i++) - if (the_opts[i].shortname == c) { - beet = the_opts+i; - break; - } - - if (!beet){ - report(E_UNKNOWNOPTION); - return 0; - } - - optindind++; - if (!beet->take_arg){ - optarg = 0; - return beet; - } - optarg = argv[optind] + optindind; - - optind ++; - optindind = 0; - - if (!optarg[0]) { - optarg = argv[optind]; - optind ++; - } - if (!optarg) { - report(E_ARGEXPECT); - } - - return beet; -} - -Long_option_init * -Getopt_long::operator()() { - if (!next()) - return 0; - - if (optindind) - return parseshort(); - - if (argv[optind][0] != '-') - return 0; - - if (argv[optind][1] == '-') {// what to do with "command -- bla" - return parselong(); - } else { - optindind = 1; - return parseshort(); - } -} - -Getopt_long::Getopt_long(int c, char **v, Long_option_init *lo) -{ - the_opts = lo; - errorout = &cerr; - argv = v; - argc = c; - optind = 1; - optindind = 0; - - // reached end of option table? - int i; - for (i = 0; the_opts[i].longname ||the_opts[i].shortname; i++) - ; - table_len = i; -} - -bool -Getopt_long::next() -{ - - error = E_NOERROR; - while (optind < argc && !argv[optind][optindind]) { - optind++; - optindind = 0; - } - return (optind < argc); -} - -char * -Getopt_long::current_arg() -{ - if (optind >= argc) - return 0; - char * a = argv[optind]; - return a + optindind; -} - -char * -Getopt_long::get_next_arg() -{ - char * a = current_arg(); - if ( a) { - optind ++; - optindind = 0; - } - return a; -} diff --git a/flower/lgetopt.hh b/flower/lgetopt.hh deleted file mode 100644 index 3b2b0348b3..0000000000 --- a/flower/lgetopt.hh +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef LGETOPT_HH -#define LGETOPT_HH - -#include - - -class ostream; - -/** - a struct this for initialising the commandline options. - */ -struct Long_option_init { - bool take_arg; - const char* longname; - char shortname; - - ostream &printon(ostream &errorout); -}; - - -/** C++ for version of long_getopt. For processing GNU style command - line arguments. No pointer (return values, arguments) contents are - copied. */ -class Getopt_long { -public: - /** errorcodes: no error, argument expected, no argument expected, - unknown option, illegal argument (eg. int expected). */ - enum Errorcod { E_NOERROR = 0, E_ARGEXPECT, E_NOARGEXPECT, E_UNKNOWNOPTION, - E_ILLEGALARG } ; - - -private: - - /// the option info. - Long_option_init *the_opts; - int table_len; - - /// if doing short option, argv[optind][optindind] is processed next. - int optindind; - - /// the option found - Long_option_init *beet; - - /// get ready for processing next error. - bool next(); - Long_option_init *parselong(); - Long_option_init *parseshort(); - - ostream *errorout; - - /// report an error and abort - void report(Errorcod c); -public: - - /// argument. Set to 0 if not present - char* optarg; - - /// current error status - Errorcod error; - - /// return an integer (with err. detect) - long intarg(); - /// argv[optind] will be processed next. - int optind; - - /// the arguments - char **argv; - - /// the arg. count - int argc; - - /* *************** */ - - /** - What to do with errors. - report messages on #*os#, and abort. - if #os# is null, then do not report nor abort, just set #error# - */ - - void seterror(ostream *os); - - /// construct: pass arguments and option info. - Getopt_long(int c, char **v, Long_option_init *lo); - - /** get the next option. - @return pointer to next option found. - 0 if error occurred, or next argument is no option. - */ - Long_option_init *operator()(); - - char *current_arg(); - char * get_next_arg(); -}; -#endif diff --git a/flower/lib/Makefile b/flower/lib/Makefile index 9bb2cfff69..893c30f922 100644 --- a/flower/lib/Makefile +++ b/flower/lib/Makefile @@ -13,11 +13,6 @@ depth = ../.. # -# generic variables: -# -include ./$(depth)/make/Variables.make -# - # identify module: # NAME = flower @@ -26,29 +21,34 @@ include ./$(depth)/flower/.version build = ./$(depth)/flower/lib/.build # +# generic variables: +# +include ./$(depth)/make/Variables.make +# + # descent order into subdirectories: # -SUBDIRS = include +SUBDIRS = include # # to be remade each build: # -VERSION_DEPENDENCY =# +VERSION_DEPENDENCY = include/fversion.hh # # list of c++ header files: # -HHFILES = $(shell ls *.hh $(ERROR_LOG)) +HHFILES = # $(shell ls include/*.hh) # # list of c++ source files: # -CCFILES = $(shell ls *.cc $(ERROR_LOG)) +CCFILES = $(shell ls *.cc) # # list of other source files: # -EXTRA_SOURCE_FILES = $(shell ls *.y *.l $(ERROR_LOG)) +EXTRA_SOURCE_FILES =# $(shell ls *.y *.l) # # list of distribution files: @@ -75,9 +75,9 @@ MAINTARGET = $(libdir)/$(LIBRARY)# huh? default: $(MAINTARGET) # -# # sic. -# $(include-flower)/flower-config.hh: -# touch $@ +# sic. +$(include-flower)/flower-config.hh: + touch $@ # generic targets and rules: # @@ -85,13 +85,8 @@ include ./$(depth)/make/Targets.make include ./$(depth)/make/Rules.make # -# list of depend files: -# -DEPFILES = $(shell ls $(depdir)/*.dep $(ERROR_LOG)) -# - # auto dependencies: # --include $(DEPFILES) +-include ./$(outdir)/*.dep # diff --git a/flower/lib/dstream.cc b/flower/lib/dstream.cc index 1197dd79e7..e6fdbc0e4d 100644 --- a/flower/lib/dstream.cc +++ b/flower/lib/dstream.cc @@ -1,5 +1,3 @@ - - #include #include "assoc.hh" #include "dstream.hh" @@ -55,8 +53,7 @@ Dstream::identify_as(String name) local_silence = (*silent)[idx]; if (classname != idx && !local_silence) { classname=idx; - if (!(*silent)["Dstream"]) - *os << "[" << classname << ":]"; // messy. +// *os << "[" << classname << ":]"; // messy. } return *this; } diff --git a/flower/lib/include/flower-config.hh b/flower/lib/include/flower-config.hh new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flower/lib/include/fproto.hh b/flower/lib/include/fproto.hh index bf8a22211c..8c6fda680e 100644 --- a/flower/lib/include/fproto.hh +++ b/flower/lib/include/fproto.hh @@ -7,13 +7,6 @@ #ifndef FPROTO_HH #define FPROTO_HH -// what the F*** is "int" ? -// depreciate int, long, etc., use i32, i64, remember: linux-16/linux-64 ? -/// (i32) -typedef int i32; -/// (i64) -typedef long long I64; - #include "flower-config.hh" template struct Array; @@ -26,9 +19,7 @@ template struct Cursor; template struct PCursor; template struct Link; template struct Handle; -template struct Interval_t; -template struct PQueue; - +templatestruct Interval_t; #include "real.hh" typedef Interval_t Interval; diff --git a/flower/lib/include/pqueue.hh b/flower/lib/include/pqueue.hh index c8dfe1bea6..195232317e 100644 --- a/flower/lib/include/pqueue.hh +++ b/flower/lib/include/pqueue.hh @@ -15,8 +15,6 @@ /** Stupid Prioq. Should use Lists and STL. Smallest is put at the front. - -Actually, this sux. Should use a template struct PQuee_ent */ template @@ -24,47 +22,23 @@ struct PQueue { Array value_arr_; Array indices_arr_; - void OK() const - { - - assert(value_arr_.size() == indices_arr_.size()); - } - + void enter(V v, I idx) { int j=0; for (; j < value_arr_.size(); j++) if (indices_arr_[j] > idx) break; - insert(j,v,idx); - + value_arr_.insert(v, j); + indices_arr_.insert(idx, j); } int size() { return value_arr_.size(); } V front_val() { return value_arr_[0]; } I front_idx() { return indices_arr_[0]; } - void del(int i) - { - value_arr_.del(i); - indices_arr_.del(i); - } - int size() const - { - OK(); - return value_arr_.size(); - } - - - void insert(int j, V v, I idx) - { - value_arr_.insert(v, j); - indices_arr_.insert(idx, j); - } - - - V get() { V retval = front_val(); - del(0); + value_arr_.del(0); + indices_arr_.del(0); return retval; } diff --git a/flower/lib/include/string-convert.hh b/flower/lib/include/string-convert.hh index f6bcfa7fae..bcf461f8f3 100644 --- a/flower/lib/include/string-convert.hh +++ b/flower/lib/include/string-convert.hh @@ -30,16 +30,14 @@ public: static int dec2_i( String dec_str ); static double dec2_f( String dec_str ); static String double_str(double f, char const* fmt=0); - static int hex2_i( String str ); - static unsigned hex2_u( String str ); + static int hex2int_i( String str ); static String hex2bin_str( String str ); static String int_str(int i, char const *fmt=0 ); static String i2hex_str( int i, int length_i, char ch ); - static String u2hex_str( unsigned u, int length_i, char ch ); static String i2dec_str( int i, int length_i, char ch ); static String rational_str(Rational); static String pointer_str(const void *); - static String i64_str(I64, char const * fmt = 0); + static String longlong_str(long long , char const * fmt = 0); }; #endif // __STRING_CONVERT_HH // diff --git a/flower/lib/string-convert.cc b/flower/lib/string-convert.cc index 0e2566f087..47649dcc88 100644 --- a/flower/lib/string-convert.cc +++ b/flower/lib/string-convert.cc @@ -6,7 +6,6 @@ #include -#include #include "libc-extension.hh" #include "string.hh" #include "string-convert.hh" @@ -63,11 +62,11 @@ String_convert::dec2_i( String dec_str ) } String -String_convert::i64_str( I64 i64, char const* fmt) +String_convert::longlong_str(long long ll, char const* fmt) { char buffer[STRING_BUFFER_LEN]; snprintf(buffer, STRING_BUFFER_LEN, - (fmt ? fmt : "%Ld"), i64 ); // assume radix 10 + (fmt ? fmt : "%Ld"), ll ); // assume radix 10 return String(buffer); } @@ -144,34 +143,20 @@ String_convert::i2dec_str( int i, int length_i, char ch ) // stupido. Should use int_str() String -String_convert::u2hex_str( unsigned u, int length_i, char fill_ch ) +String_convert::i2hex_str( int i, int length_i, char ch ) { String str; - if ( !u ) + if ( !i ) str = "0"; - -#if 1 // both go... - while ( u ) { - str = String( (char)( ( u % 16 )["0123456789abcdef"] ) ) + str; - u /= 16; + while ( i ) { + str = String( ( i % 16 )["0123456789abcdef"] ) + str; + i /= 16; } -#else - str += int_str( u, "%x" ); -#endif - - str = String( fill_ch, length_i - str.length_i() ) + str; - while ( ( str.length_i() > length_i ) && ( str[ 0 ] == 'f' ) ) - str = str.mid_str( 2, INT_MAX ); - + if ( str.length_i() < length_i ) + str = String( ch, length_i - str.length_i() ) + str; return str; } -String -String_convert::i2hex_str( int i, int length_i, char fill_ch ) -{ - return u2hex_str( (unsigned)i, length_i, fill_ch ); -} - Byte String_convert::nibble2hex_byte( Byte byte ) { @@ -245,6 +230,6 @@ String_convert::rational_str(Rational r) String String_convert::pointer_str(const void *l) { - I64 i64 = (I64)l; - return String_convert::i64_str(i64, "0x%0Lx"); + long long int ill = (long long int )l; + return String_convert::longlong_str(ill, "0x%0Lx"); } diff --git a/flower/libc-extension.cc b/flower/libc-extension.cc deleted file mode 100644 index f9a255683e..0000000000 --- a/flower/libc-extension.cc +++ /dev/null @@ -1,113 +0,0 @@ -/* - libc-extension.cc -- implement some string.h extensions - - source file of the flowerlib - - (c) 1997 Han-Wen Nienhuys -*/ -#include -#include -#include -#include "libc-extension.hh" - -/* - compensate for lacking libc functions. - */ -char* -strnlwr( char* start_l ,int n) -{ - char * p = start_l + n; - while ( --p >= start_l) { - *p = tolower( *p ); /* a macro on some compilers */ - } - return start_l; -} - -char* -strnupr( char* start_l, int n) -{ - char * p = start_l + n; - while ( --p >= start_l) { - *p = toupper( *p ); /* a macro on some compilers */ - } - return start_l; -} - -#ifndef HAVE_MEMMEM - -/** locate a substring. #memmem# finds the first occurrence of - #needle# in #haystack# - */ - -char * -memmem(const Byte * haystack, int haystack_len, - const Byte *needle,int needle_len) -{ - const Byte * end_haystack = haystack + haystack_len - needle_len; - const Byte * end_needle = needle + needle_len ; - - /* Ahhh ... Some minimal lowlevel stuff. This *is* nice; Varation - is the spice of life */ - while (haystack < end_haystack) { - const Byte *subneedle_l = needle; - const Byte *subhaystack_l = haystack; - while (subneedle_l < end_needle) { - if (*subneedle_l++ != *subhaystack_l++) - goto next; // yeah. I should be prosecuted. - } - - // completed the needle. Gotcha. - return (char*) haystack; - next: - haystack++; - } - return 0; -} -#endif - -Byte * -memrchr(const Byte * p, int n, char c) -{ - const Byte * q = p+n; - while (q > p) { - if (*--q == c) - return (Byte*)q; - } - return 0; -} - - -template -inline void -my_swap(T &t1, T &t2, T &tmp) -{ - tmp = t1; - t1 = t2; - t2 = tmp; -} - -Byte* -strrev( Byte* byte_l, int length_i ) -{ - Byte tmp_byte; - - Byte* left_l = byte_l; - Byte* right_l = byte_l + length_i; - - while ( right_l > left_l ) { - my_swap(*right_l-- , *left_l++ , tmp_byte); - } - return byte_l; -} - -#ifndef HAVE_SNPRINTF -int snprintf ( char *str, size_t n, - const char *format, ... ) -{ - va_list ap; - va_start(ap, format); - int i = vsprintf(str, format, ap); - va_end(ap); - return i; -} -#endif diff --git a/flower/libc-extension.hh b/flower/libc-extension.hh deleted file mode 100644 index e71037c41e..0000000000 --- a/flower/libc-extension.hh +++ /dev/null @@ -1,32 +0,0 @@ -/* - libc-extension.hh -- declare some string.h extensions - - source file of the flowerlib - - (c) 1997 Han-Wen Nienhuys -*/ - - -#ifndef LIBC_EXTENSION_HH -#define LIBC_EXTENSION_HH -#include "fproto.hh" - -char* strnlwr( char* start_l ,int n); -char* strnupr( char* start_l, int n); - -#ifndef HAVE_MEMMEM // GNU extension. -char *memmem(const Byte * haystack, int haystack_len, - const Byte *needle, int needle_len); -#endif HAVE_MEMMEM - -#ifndef HAVE_SNPRINTF // GNU extension. -int snprintf (char *str, size_t n, - const char *format, ... ); -#endif - - -Byte *memrchr(const Byte * p, int n, char c); -Byte *strrev( Byte* byte_l, int length_i ); - - -#endif // LIBC_EXTENSION_HH diff --git a/flower/link.hh b/flower/link.hh deleted file mode 100644 index 6f9c75a411..0000000000 --- a/flower/link.hh +++ /dev/null @@ -1,38 +0,0 @@ -// link.hh - -#ifndef __LINK_HH -#define __LINK_HH -template -class List; - - -/// class for List -template -class Link -{ -// friend class Cursor; -public: - Link( const T& thing ); - - Link* previous(); - Link* next(); - - /// put new Link item after me in list - void add( const T& thing ); - /// put new Link item before me in list - void insert( const T& thing ); - void remove(List &l); - - T& thing(); - void OK() const; -private: - Link( Link* previous, Link* next, const T& thing ); - - T thing_; - Link* previous_; - Link* next_; -}; - -#include "link.inl" - -#endif // __LINK_HH // diff --git a/flower/link.inl b/flower/link.inl deleted file mode 100644 index 3926d6bc2a..0000000000 --- a/flower/link.inl +++ /dev/null @@ -1,102 +0,0 @@ -// link.inl -*-c++-*- -#ifndef LINK_INL -#define LINK_INL -#include -template -inline -void -Link::OK() const -{ -#ifndef NDEBUG - if (previous_) { - assert(previous_->next_ == this); - } - if (next_) { - assert(next_->previous_ == this); - } -#endif -} - -template -inline -Link::Link( const T& thing ) : - thing_( thing ) -{ - previous_ = next_ = 0; -} - -template -inline -Link::Link( Link* previous, Link* next, const T& thing ) : - thing_( thing ) -{ - previous_ = previous; - next_ = next; -} - -template -inline -Link* -Link::next() -{ - return next_; -} - -template -inline -Link* -Link::previous() -{ - return previous_; -} - -template -inline -void -Link::add( const T& thing ) -{ - - Link* l = new Link( this, next_, thing ); - if ( next_ ) - next_->previous_ = l; - next_ = l; -} - -template -inline void -Link::insert( const T& thing ) -{ - // Link* l = new Link( next_, this, thing ); - // bugfix hwn 16/9/96 - Link* l = new Link( previous_, this, thing ); - if ( previous_ ) - previous_->next_ = l; - previous_ = l; -} - -/* - don't forget to adjust #l#'s top_ and bottom_. - */ -template -inline void -Link::remove(List &l) -{ - if ( previous_ ) - previous_->next_ = next_; - else - l.top_ = next_; - - if ( next_ ) - next_->previous_ = previous_; - else - l.bottom_ = previous_; -} - -template -inline -T& -Link::thing() -{ - return thing_; -} -#endif diff --git a/flower/list.hh b/flower/list.hh deleted file mode 100644 index ec59fbff07..0000000000 --- a/flower/list.hh +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef __LIST_HH -#define __LIST_HH - -class ostream; -template class Cursor; -template class Link; - -/** all-purpose doubly linked list. - - List can be seen as all items written down on paper, - from top to bottom - - class Cursor is used to extend List - - items are always stored as copies in List, but: - #List# : copies of #String# stored - #List# : copies of #String*# stored! - (do not use, use \Ref{PointerList} ## instead.) - - {\bf note:} - retrieving "invalid" cursors, i.e. - #top()/bottom()# from empty list, #find()# without success, - results in a nonvalid Cursor ( #!ok()# ) - - - INVARIANTEN! -*/ - -template -class List -{ - public: - List(List const&src); - - /// construct empty list - List(); - virtual ~List(); - - int size() const; - - Cursor bottom() const; // const sucks. - Cursor top() const; - - void OK() const; // check list - - protected: - friend class Cursor; - friend class Link; - - void concatenate(List const &s); - - /** make *this empty. - - POST: - size == 0 - - WARNING: - contents lost, and not deleted. - */ - void set_empty(); - - void add( const T& thing, Cursor &after_me ); - - /// put thing before #before_me# - void insert( const T& thing, Cursor &before_me ); - - /** Remove link pointed to by me. Destructor of contents called - (nop for pointers) - - POST - none; - - - WARNING: do not use #me# after calling - */ - void remove( Cursor me ); - - - /* ************** */ - - int size_; - Link* top_; - Link* bottom_; -}; - -#include "list.inl" -#include "cursor.hh" - -// instantiate a template: explicit instantiation. -#define L_instantiate(a) template class List; template class Cursor; \ - template class Link - - -#endif // __LIST_HH // - - - - diff --git a/flower/list.inl b/flower/list.inl deleted file mode 100644 index df0687b7c8..0000000000 --- a/flower/list.inl +++ /dev/null @@ -1,56 +0,0 @@ -// -*-c++-*- - -#ifndef LIST_INL -#define LIST_INL - -template -inline -List::List() -{ - set_empty(); -} - -template -inline void -List::set_empty() -{ - top_ = bottom_ = 0; - size_ = 0; -} - -template -inline void -List::remove( Cursor me ) -{ - if ( me.ok() ){ - Link *lp = me.pointer(); - lp->remove(*this); - delete lp; - size_--; - } -} - -template -inline int -List::size() const -{ - return size_; -} - -template -inline Cursor -List::top()const -{ - return Cursor( *this, top_ ); -} - - -template -inline Cursor -List::bottom()const -{ - return Cursor( *this, bottom_ ); -} - - -#endif diff --git a/flower/list.tcc b/flower/list.tcc deleted file mode 100644 index 16e12a31f1..0000000000 --- a/flower/list.tcc +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef LIST_CC -#define LIST_CC - -#include "list.hh" - -template -List::List(List const&src) -{ - set_empty(); - // probably el stupido - for (Cursor c(src); c.ok(); c++) - bottom().add(c); -} - -template -void -List::OK() const -{ - int i = size_; - Link *lp = top_; - while (i--) { - assert(lp); - lp->OK(); - lp = lp->next(); - } - assert(!lp); - i = size_; - lp = bottom_; - while (i--) { - assert(lp); - lp->OK(); - lp = lp->previous(); - } - assert(!lp); -} - - -template -List::~List() -{ - Cursor c(*this); - while (c.ok()) - c.del(); -} - -/** - - add after after_me. - - Procedure: - \begin{itemize} - \item if #after_me# is #ok()#, add after #after_me#, else - \item if list !empty simply add to bottom, else - \item list is empty: create first \Ref{Link} and initialize - #bottom_# and #top_#. - \end{itemize} -*/ -template -void -List::add( const T& thing, Cursor &after_me ) -{ - if (!size_) { // not much choice if list is empty - bottom_ = top_ = new Link( thing ); - if (!after_me.ok()) - after_me = bottom(); - } else { // add at aprioprate place - if (!after_me.ok()) - after_me = bottom(); - Link *p =after_me.pointer(); - p->add(thing); - if (p == bottom_) // adjust bottom_ if necessary. - bottom_ = p->next(); - } - - size_++; -} - -template -void -List::insert( const T& thing, Cursor &before_me ) -{ - if (!size_) { - bottom_ = top_ = new Link( thing ); - if (!before_me.ok()) - before_me = top(); - - } else { - if (!before_me.ok()) - before_me = top(); - - Link *p = before_me.pointer() ; - - p->insert(thing); - if (p == top_) - top_ = p->previous(); - } - - size_++; -} - - -template -void -List::concatenate(List const&s) -{ - Cursor b(bottom()); - for (Cursor c(s); c.ok(); c++) { - b.add(c); - b++; - } -} -#endif diff --git a/flower/make_version b/flower/make_version deleted file mode 100755 index f584d272a9..0000000000 --- a/flower/make_version +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -echo '#ifndef FVERSION_HH' -echo '#define FVERSION_HH' - -echo '#define FMAJORVERSION ' $1 -echo '#define FMINORVERSION ' $2 -echo '#define FPATCHLEVEL ' $3 -echo '#define FVERSIONSTR "'$1.$2.$3'"' -echo '#define FCOMPILER "'$4'"' -echo '#endif' diff --git a/flower/matdebug.cc b/flower/matdebug.cc deleted file mode 100644 index bcc2843bca..0000000000 --- a/flower/matdebug.cc +++ /dev/null @@ -1,63 +0,0 @@ -#include "dstream.hh" -#include "matrix.hh" - -static Dstream *dout = 0; - -/** - Set the debugging output. Will not delete/swallow argument. - */ -void set_matrix_debug(Dstream&ds) -{ - dout = &ds; -} - -Matrix::operator String() const -{ - String s; -#ifndef NPRINT - s="matrix {\n"; - for (int i=0; i< rows(); i++){ - for (int j = 0; j < cols(); j++) { - s+= String(dat->elem(i,j), "%6f "); - } - s+="\n"; - } - s+="}\n"; -#endif - return s; -} - - -void -Matrix::print() const -{ -#ifndef NPRINT - if (!dout) - return; - *dout << *this; -#endif -} - -Vector::operator String() const -{ - String s; -#ifndef NPRINT - s="vector ["; - for (int i=0; i < dim(); i++) { - s += String(dat[i], "%6f") + String(' '); - } - s+="]"; -#endif - return s; -} - - -void -Vector::print() const -{ -#ifndef NDEBUG - if (!dout) - return; - *dout << *this<<'\n'; -#endif -} diff --git a/flower/matrix.cc b/flower/matrix.cc deleted file mode 100644 index 63bd85a33c..0000000000 --- a/flower/matrix.cc +++ /dev/null @@ -1,240 +0,0 @@ -#include "matrix.hh" - -Real -Matrix::norm() const -{ - Real r =0.0; - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - r += sqr(dat->elem(i,j)); - return sqrt(r); -} - -void -Matrix::fill(Real r) -{ - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dat->elem(i,j)=r; -} - -void -Matrix::set_diag(Real r) -{ - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dat->elem(i,j)=(i==j) ? r: 0.0; -} - -void -Matrix::set_diag(Vector d) -{ - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dat->elem(i,j)=(i==j) ? d(i): 0.0; -} - -void -Matrix::operator+=(const Matrix&m) -{ - assert(m.cols() == cols()); - assert(m.rows() == rows()); - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dat->elem(i,j) += m(i,j); -} - -void -Matrix::operator-=(const Matrix&m) -{ - assert(m.cols() == cols()); - assert(m.rows() == rows()); - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dat->elem(i,j) -= m(i,j); -} - - -void -Matrix::operator*=(Real a) -{ - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dat->elem(i,j) *= a; -} - -void -Matrix::operator=(const Matrix&m) -{ - if (&m == this) - return ; - delete dat; - dat = m.dat->clone(); -} - -Matrix::Matrix(const Matrix &m) -{ - m.OK(); - - dat = m.dat->clone(); -} - - -Matrix::Matrix(int n, int m) -{ - dat = virtual_smat::get_full(n,m); - fill(0); -} - -Matrix::Matrix(int n) -{ - dat = virtual_smat::get_full(n,n); - fill(0); -} - -Matrix::Matrix(Vector v, Vector w) -{ - dat = virtual_smat::get_full(v.dim(), w.dim()); - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dat->elem(i,j)=v(i)*w(j); -} - - -Vector -Matrix::row(int k) const -{ - int n=cols(); - - - Vector v(n); - for(int i=0; i < n; i++) - v(i)=dat->elem(k,i); - - return v; -} - -Vector -Matrix::col(int k) const -{ - int n=rows(); - Vector v(n); - for(int i=0; i < n; i++) - v(i)=dat->elem(i,k); - return v; -} - -Vector -Matrix::left_multiply(const Vector& v) const -{ - Vector dest(v.dim()); - assert(dat->cols()==v.dim()); - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dest(i)+= dat->elem(j,i)*v(j); - return dest; -} - -Vector -Matrix::operator *(const Vector& v) const -{ - Vector dest(rows()); - assert(dat->cols()==v.dim()); - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) - dest(i)+= dat->elem(i,j)*v(j); - return dest; -} - -Matrix -operator /(Matrix const& m1,Real a) -{ - Matrix m(m1); - m /= a; - return m; -} - -void -Matrix::transpose() // delegate to storage? -{ - for (int i=0, j=0; dat->mult_ok(i,j); dat->mult_next(i,j)) { - if (i >= j) - continue; - Real r=dat->elem(i,j); - dat->elem(i,j) = dat->elem(j,i); - dat->elem(j,i)=r; - } -} - -Matrix -Matrix::operator-() const -{ - OK(); - Matrix m(*this); - m*=-1.0; - return m; -} - -Matrix -Matrix::transposed() const -{ - Matrix m(*this); - m.transpose(); - return m; -} - - -/* should do something smarter: bandmatrix * bandmatrix is also banded matrix. */ -Matrix -operator *(const Matrix &m1, const Matrix &m2) -{ - Matrix result(m1.rows(), m2.cols()); - result.set_product(m1,m2); - return result; -} - -void -Matrix::set_product(const Matrix &m1, const Matrix &m2) -{ - assert(m1.cols()==m2.rows()); - assert(cols()==m2.cols() && rows()==m1.rows()); - - for (int i=0, j=0; dat->mult_ok(i,j); - dat->mult_next(i,j)) { - Real r=0.0; - for (int k = 0; k < m1.cols(); k++) - r += m1(i,k)*m2(k,j); - dat->elem(i,j)=r; - } -} - -void -Matrix::insert_row(Vector v, int k) -{ - assert(v.dim()==cols()); - dat->insert_row(k); - for (int j=0; j < cols(); j++) - dat->elem(k,j)=v(j); -} - - -void -Matrix::swap_columns(int c1, int c2) -{ - assert(c1>=0&& c1 < cols()&&c2 < cols() && c2 >=0); - for (int i=0; i< rows(); i++) { - Real r=dat->elem(i,c1); - dat->elem(i,c1) = dat->elem(i,c2); - dat->elem(i,c2)=r; - } -} - -void -Matrix::swap_rows(int c1, int c2) -{ - assert(c1>=0&& c1 < rows()&&c2 < rows() && c2 >=0); - for (int i=0; i< cols(); i++) { - Real r=dat->elem(c1,i); - dat->elem(c1,i) = dat->elem(c2,i); - dat->elem(c2,i)=r; - } -} - - -int -Matrix::dim() const -{ - assert(cols() == rows()); - return rows(); -} - diff --git a/flower/matrix.hh b/flower/matrix.hh deleted file mode 100644 index a633d6657a..0000000000 --- a/flower/matrix.hh +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef MATRIX_HH -#define MATRIX_HH - - -#include "vsmat.hh" -#include "vector.hh" - -/** a Real matrix. This is a class for a nonsquare block of #Real#s. The - implementation of sparse matrices is done in the appropriate #smat# - class. Matrix only does the mathematical actions (adding, - multiplying, etc.) - - - TODO - implement ref counting? */ - - -class Matrix { - virtual_smat *dat; - -public: - void OK() const { dat->OK(); } - int cols() const { return dat->cols(); } - int rows() const { return dat->rows(); } - - /** return the size of a matrix. - PRE - the matrix needs to be square. - */ - int dim() const; - - // Matrix() { dat = 0; } - ~Matrix() { delete dat; } - - /// set entries to r - void fill(Real r); - - /// set diagonal to d - void set_diag(Real d); - - void set_diag(Vector d); - /// set unit matrix - void unit() { set_diag(1.0); } - - void operator+=(const Matrix&m); - void operator-=(const Matrix&m); - void operator*=(Real a); - void operator/=(Real a) { (*this) *= 1/a; } - - /** add a row. - add a row to the matrix before row k - - PRE - v.dim() == cols() - 0 <= k <= rows() - */ - void insert_row(Vector v,int k); - /** . - delete a row from this matrix. - - PRE - 0 <= k < rows(); - */ - void delete_row(int k) { dat->delete_row(k); } - void delete_column(int k) { dat->delete_column(k); } - - /** - square n matrix, initialised to null - */ - Matrix(int n); - - /** - n x m matrix, init to 0 - */ - Matrix(int n, int m); - Matrix(const Matrix &m); - - /// dyadic product: v * w.transpose - Matrix(Vector v, Vector w); - void operator=(const Matrix&m); - - /// access an element - Real operator()(int i,int j) const { return dat->elem(i,j); } - - /// access an element - Real &operator()(int i, int j) { return dat->elem(i,j); } - - /// Matrix multiply with vec (from right) - Vector operator *(const Vector &v) const; - - /// set this to m1*m2. - void set_product(const Matrix &m1, const Matrix &m2); - - - Vector left_multiply(Vector const &) const; - - Matrix operator-() const; - - /// transpose this. - void transpose(); - - /// return a transposed copy. - Matrix transposed() const ; - - Real norm() const; - /** swap. - PRE - 0 <= c1,c2 < cols() - */ - void swap_columns(int c1, int c2); - - /** swap. - PRE - 0 <= c1,c2 < rows() - */ - void swap_rows(int c1, int c2); - - - Vector row(int ) const; - Vector col(int) const; - - operator String() const; - void print() const; -}; - -inline Vector -operator *(Vector &v, const Matrix& m) { return m.left_multiply(v); } -Matrix operator *(const Matrix& m1,const Matrix &m2); -Matrix operator /(const Matrix &m1,Real a); -inline Matrix operator -(Matrix m1,const Matrix m2) -{ - m1 -= m2; - return m1; -} -#endif diff --git a/flower/path.cc b/flower/path.cc deleted file mode 100644 index c79962f00f..0000000000 --- a/flower/path.cc +++ /dev/null @@ -1,77 +0,0 @@ -/* - path.cc - manipulation of paths and filenames. -*/ -#include -#include "path.hh" - -#ifndef PATHSEP -#define PATHSEP '/' -#endif - -/** - @param path the original full filename - @return 4 components of the path. They can be empty -*/ -void -split_path(String path, - String &drive, String &dirs, String &filebase, String &extension) -{ - // peel off components, one by one. - int di = path.index_i(':'); - if (di >= 0) - { - drive = path.left_str(di + 1); - path = path.right_str(path.len() - di -1); - } - else - drive = ""; - - di = path.index_last_i(PATHSEP); - if (di >=0) - { - dirs = path.left_str(di + 1); - path = path.right_str(path.len()-di -1); - } - else - dirs = ""; - - di = path.index_last_i('.'); - if (di >= 0) - { - filebase = path.left_str(di); - extension =path.right_str(path.len()-di); - } - else - { - extension = ""; - filebase = path; - } -} - -File_path::File_path(String pref) -{ - add("."); - add(pref); -} - - -/** find a file. - It will search in the current dir, in the construction-arg, and - in any other added path, in this order. - */ -String -File_path::find(String nm) -{ - for (int i=0; i < size(); i++) { - String path = (*this)[i]; - path+= "/"+nm; - - - FILE *f = fopen(path, "r"); // ugh! - if (f) { - fclose(f); - return path; - } - } - return ""; -} diff --git a/flower/path.hh b/flower/path.hh deleted file mode 100644 index bc4d9f3776..0000000000 --- a/flower/path.hh +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef PATH_HH -#define PATH_HH -#include "string.hh" -#include "varray.hh" - - -/** searching directory for file. - - Abstraction of PATH variable. An interface for searching input files. - Search a number of dirs for a file. - - Should use kpathsea? - -*/ - -class File_path : private Array -{ -public: - /// locate a file in the search path - String find(String nm); - - /// construct using prefix. Normally argv[0]. - File_path(String); - - /// add to end of path. - Array::push; - void add(String str) { push(str); } -}; -/// split path into its components -void split_path(String path, String &drive, String &dirs, String &filebase, String &extension); - -#endif diff --git a/flower/pcursor.hh b/flower/pcursor.hh deleted file mode 100644 index ea360078d1..0000000000 --- a/flower/pcursor.hh +++ /dev/null @@ -1,67 +0,0 @@ -/* - pcursor.hh -- part of flowerlib - - (c) 1996 Han-Wen Nienhuys&Jan Nieuwenhuizen -*/ - -#ifndef PCURSOR_HH -#define PCURSOR_HH - -#include "plist.hh" -#include "cursor.hh" - -/** cursor to go with PointerList. - don't create PointerList's. - This cursor is just an interface class for Cursor. It takes care of the - appropriate type casts - */ -template -class PCursor : private Cursor { - friend class IPointerList; - - /// delete contents - void junk(); -public: - Cursor::ok; - Cursor::del; - Cursor::backspace; - T get_p() { - T p = ptr(); - Cursor::del(); - return p; - } - T get_prev() { - (*this)--; - return get_p(); - } - - PointerList &list() { return (PointerList&)Cursor::list(); } - PCursor operator++(int) { return Cursor::operator++(0);} - PCursor operator--(int) { return Cursor::operator--(0); } - PCursor operator+=(int i) { return Cursor::operator+=(i);} - PCursor operator-=(int i) { return Cursor::operator-=(i); } - PCursor operator -(int no) const { return Cursor::operator-(no);} - int operator -(PCursor op) const { return Cursor::operator-(op);} - PCursor operator +( int no) const {return Cursor::operator+(no);} PCursor(const PointerList & l) : Cursor (l) {} - - PCursor( const Cursor& cursor ) : Cursor(cursor) { } - void* vptr() const { return *((Cursor &) *this); } - - // should return T& ? - T ptr() const { return (T) vptr(); } - T operator ->() const { return ptr(); } - operator T() { return ptr(); } - T operator *() { return ptr(); } - void add(const T& p ) { Cursor::add((void*) p); } - void insert(const T& p ) { Cursor::insert((void*) p);} - static int compare(PCursor a,PCursorb) { - return Cursor::compare(a,b); - } -}; - - - -#include "compare.hh" -template_instantiate_compare(PCursor, PCursor::compare, template); - -#endif diff --git a/flower/pcursor.tcc b/flower/pcursor.tcc deleted file mode 100644 index ffb01bcfe8..0000000000 --- a/flower/pcursor.tcc +++ /dev/null @@ -1,16 +0,0 @@ -#include "pcursor.hh" - -template -void -PCursor::junk() -{ -#if !defined(NDEBUG) && defined(PARANOID) - list().OK(); -#endif - - delete ptr(); -#if !defined(NDEBUG)&&defined(PARANOID) - thing() = 0; - list().OK(); -#endif -} diff --git a/flower/plist.hh b/flower/plist.hh deleted file mode 100644 index 426b861c02..0000000000 --- a/flower/plist.hh +++ /dev/null @@ -1,72 +0,0 @@ -/* - list.hh -- part of flowerlib - - (c) 1996 Han-Wen Nienhuys & Jan Nieuwenhuizen -*/ - -#ifndef PLIST_HH -#define PLIST_HH - -#include "list.hh" - -/** - A list of pointers. - - Use for list of pointers, e.g. PointerList. - This class does no deletion of the pointers, but it knows how to - copy itself (shallow copy). We could have derived it from List, - but this design saves a lot of code dup; for all PointerLists in the - program only one parent List is instantiated. - */ -template -class PointerList : public List -{ - public: - PCursor top() const{ - return PCursor (List::top()); - } - PCursor bottom() const { - return PCursor (List::bottom()); - } - PCursor find(T) const; - void concatenate(PointerList const &s) { List::concatenate(s); } - PointerList() {} -}; - -/** PointerList which deletes pointers given to it. - NOTE: - - The copy constructor doesn't do what you'd want: - Since T might have a virtual ctor, we don't try to do a - - new T(*cursor) - - You have to copy this yourself, or use the macro PointerList__copy - - */ -template -class IPointerList : public PointerList { -public: - IPointerList(const IPointerList&) { set_empty(); } - IPointerList() { } - ~IPointerList(); -}; - -#define IPointerList__copy(T, to, from, op) \ - for (PCursor _pc_(from); _pc_.ok(); _pc_++)\ - to.bottom().add(_pc_->op)\ - \ - - -template -void PL_copy(IPointerList &dst,IPointerList const&src); - - -#define PL_instantiate(a) template class PointerList; \ - template class PCursor; -#define IPL_instantiate(a) PL_instantiate(a); \ - template class IPointerList - -#include "plist.inl" - -#endif diff --git a/flower/plist.inl b/flower/plist.inl deleted file mode 100644 index 82be364334..0000000000 --- a/flower/plist.inl +++ /dev/null @@ -1,21 +0,0 @@ -/* -*-c++-*- - plist.inl -- part of flowerlib - - (c) 1996 Han-Wen Nienhuys& Jan Nieuwenhuizen -*/ - -#ifndef PLIST_INL -#define PLIST_INL - -template -void -PL_copy(IPointerList &to, IPointerList const&src) -{ - for (PCursor pc(src); pc.ok(); pc++) { - T *q = pc; - T *p=new T(*q) ; - to.bottom().add(p); - } -} - -#endif diff --git a/flower/plist.tcc b/flower/plist.tcc deleted file mode 100644 index 2ceed2e9c7..0000000000 --- a/flower/plist.tcc +++ /dev/null @@ -1,21 +0,0 @@ -#include "plist.hh" - -template -IPointerList::~IPointerList() -{ - PCursor c( *this ); - while (c.ok()) { - delete c.get_p(); - } -} - -template -PCursor -PointerList::find(T what ) const -{ - PCursor i(*this); - for (; i.ok(); i++) - if (i.ptr() == what) - break; - return i; -} diff --git a/flower/pqueue.hh b/flower/pqueue.hh deleted file mode 100644 index 195232317e..0000000000 --- a/flower/pqueue.hh +++ /dev/null @@ -1,46 +0,0 @@ -/* - pqueue.hh -- declare - - source file of the LilyPond music typesetter - - (c) 1997 Han-Wen Nienhuys -*/ - - -#ifndef PQUEUE_HH -#define PQUEUE_HH - -#include "varray.hh" - -/** - Stupid Prioq. Should use Lists and STL. - Smallest is put at the front. - */ - -template -struct PQueue -{ - Array value_arr_; - Array indices_arr_; - - void enter(V v, I idx) { - int j=0; - for (; j < value_arr_.size(); j++) - if (indices_arr_[j] > idx) - break; - - value_arr_.insert(v, j); - indices_arr_.insert(idx, j); - } - int size() { return value_arr_.size(); } - V front_val() { return value_arr_[0]; } - I front_idx() { return indices_arr_[0]; } - V get() { - V retval = front_val(); - value_arr_.del(0); - indices_arr_.del(0); - return retval; - } - -}; -#endif // PQUEUE_HH diff --git a/flower/rational.hh b/flower/rational.hh deleted file mode 100644 index 30fa2cb6d6..0000000000 --- a/flower/rational.hh +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/flower/real.hh b/flower/real.hh deleted file mode 100644 index 0533af2111..0000000000 --- a/flower/real.hh +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef REAL_HH -#define REAL_HH - - -#include -#include -#include - -typedef double Real; - -inline Real -distance(Real x,Real y) -{ - return abs(x-y); -} -#endif diff --git a/flower/scalar.cc b/flower/scalar.cc deleted file mode 100644 index 5edd9e997f..0000000000 --- a/flower/scalar.cc +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include "scalar.hh" - -Scalar::Scalar(Rational r) - :String(r) -{ - -} - -Scalar::operator Rational() -{ - int p = index_i('/'); - if (p == -1) - return int(*this); - - String s2 = right_str(len()-p-1); - String s1 = left_str(p); - - return Rational(s1.value_i(), s2.value_i()); -} - -bool -Scalar::isnum() -{ - int conv = false; - if (len()) { - long l =0; - conv = sscanf(strh_.ch_c_l(), "%ld", &l); - } - return len() && conv; -} - -Scalar::operator Real() -{ - assert (isnum()); - return value_f(); -} - -Scalar::operator int() -{ - assert (isnum()); - return value_i(); -} - - -Scalar::operator bool() const -{ - if (!len()) - return false; - if (*this == "0") - return false; - String u (*this); - if ( u.upper_str() == "FALSE") - return false; - return true; -} diff --git a/flower/scalar.hh b/flower/scalar.hh deleted file mode 100644 index 5cdfa427da..0000000000 --- a/flower/scalar.hh +++ /dev/null @@ -1,34 +0,0 @@ -/* - scalar.hh -- part of LilyPond - - (c) 1996 Han-Wen Nienhuys -*/ - -#ifndef SCALAR_HH -#define SCALAR_HH -#include "string.hh" -#include "real.hh" - -/// Perl -like scalar type. -struct Scalar : public String { - - Scalar(Real r) : String(r) {} - Scalar(int i) : String(i) {} - Scalar(char c) : String(c) {} - Scalar(const char *c) : String(c) {} - Scalar(String s ):String(s) {} - Scalar(Rational ); - operator Rational(); - Scalar() {} - bool isnum(); - operator Real(); - operator int(); - - /** perl -like string to bool conversion. - */ - operator bool() const; - -}; - -#endif // SCALAR_HH - diff --git a/flower/smat.cc b/flower/smat.cc deleted file mode 100644 index dcc61ce44e..0000000000 --- a/flower/smat.cc +++ /dev/null @@ -1,181 +0,0 @@ -#include "smat.hh" - -void -Full_storage::operator=(Full_storage const &fs) -{ - resize(fs.h, fs.w); - OK(); - fs.OK(); - for (int i=0; i= h && maxw >= w); - assert(h >= 0 && w >= 0); - assert(els||!maxh); -#endif -} -void -Full_storage::resize_cols(int newh) -{ - if (newh <= maxh) { - h=newh; - return; - } - - Real ** newa=new Real*[newh]; - int j=0; - for (; j < h; j++) - newa[j] = els[j]; - for (; j < newh; j++) - newa[j] = new Real[maxw]; - delete[] els; - els=newa; - - h = maxh = newh; -} - -void -Full_storage::resize_rows(int neww) -{ - if (neww <= maxw) { - w=neww; - return; - } - for (int i=0; i < maxh ; i++) { - Real* newa = new Real[neww]; - for (int k=0; k < w; k++) - newa[k] = els[i][k]; - - delete[] els[i]; - els[i] = newa; - } - w = maxw = neww; -} - -Full_storage::~Full_storage() { - for (int i=0; i < maxh; i++) - delete [] els[i]; - delete[] els; -} - -void -Full_storage::resize(int rows, int cols) -{ - OK(); - resize_cols(rows); - resize_rows(cols); - -} - - -bool -Full_storage::mult_ok(int i, int j) const -{ - return valid(i,j); -} - -bool -Full_storage::trans_ok(int i, int j) const -{ - return valid(i,j); -} - - -void -Full_storage::trans_next(int &i, int &j) const -{ - assert(trans_ok(i,j)); - i++; - if (i >= h) { - i=0; - j ++; - } -} - -void -Full_storage::mult_next(int &i, int &j) const -{ - assert(mult_ok(i,j)); - j++; - if (j >= w) { - j=0; - i++; - } -} - -void -Full_storage::delete_column(int k) -{ - assert(0 <= k &&k k ; i--) - for (int j=0; j -Full_storage::row(int n) const -{ - Array r; - for (int j = 0; j < w; j++) - r.push(els[n][j]); - return r; -} - -Array -Full_storage::column(int n) const -{ - - Array r; - for (int i = 0; i=0 && i < h) - && (j < w && j >=0); - } - - - void resize_rows(int); - void resize_cols(int); - -public: - virtual int rows() const { - return h; - } - virtual int cols() const { - return w; - } - - - virtual void set_size(int i, int j) - { - resize(i,j); //this could be more efficient. - } - - virtual void set_size(int i) { - set_size(i,i); - } - virtual void resize(int i, int j); - virtual void resize(int i) { - resize(i,i); - } - - virtual Real& elem(int i,int j) { - assert(valid(i,j)); - return els[i][j]; - } - virtual const Real& elem(int i, int j) const { - assert(valid(i,j)); - return els[i][j]; - } - virtual Array row(int i) const; - virtual Array column(int j) const; - - Full_storage() { - init(); - } - Full_storage(int i, int j) { - init(); - set_size(i,j); - } - Full_storage(Full_storage&); - Full_storage(int i) { - init(); - set_size(i); - } - void OK() const; - void operator=(Full_storage const &); - - virtual void insert_row(int k); - virtual void delete_row(int k); - virtual void delete_column(int k); - - - ~Full_storage(); - virtual bool mult_ok(int i, int j)const; - virtual void mult_next(int &i, int &j) const ; - virtual bool trans_ok(int i, int j) const; - virtual void trans_next(int &i, int &j) const; - virtual virtual_smat * clone(); -}; - -#endif diff --git a/flower/string-convert.cc b/flower/string-convert.cc deleted file mode 100644 index 36c98dd490..0000000000 --- a/flower/string-convert.cc +++ /dev/null @@ -1,234 +0,0 @@ -/* - PROJECT: FlowerSoft C++ library - FILE : string-convert.cc - ---*/ - - -#include -#include "string.hh" -#include "string-convert.hh" - -/** - a safe length for stringconversion buffers - - worst case would be %f printing HUGE (or 1/HUGE), which is approx - 2e318, this number would have approx 318 zero's in its string. - - Should enlarge buff dynamically. - @see - man 3 snprintf - */ -static const int STRING_BUFFER_LEN=1024; - -String -String_convert::bin2hex_str( String bin_str ) -{ - String str; - Byte const* byte_c_l = bin_str.byte_c_l(); - for ( int i = 0; i < bin_str.length_i(); i++ ) { - str += (char)nibble2hex_byte( *byte_c_l >> 4 ); - str += (char)nibble2hex_byte( *byte_c_l++ ); - } - return str; -} - -int -String_convert::bin2_i( String bin_str ) -{ - assert( bin_str.length_i() <= 4 ); - - int result_i = 0; - for ( int i = 0; i < bin_str.length_i(); i++ ) { - result_i <<= 8; - result_i += (Byte)bin_str[ i ]; - } - return result_i; -} - -// breendet imp from String -int -String_convert::dec2_i( String dec_str ) -{ - if ( !dec_str.length_i() ) - return 0; - - long l = 0; - int conv = sscanf( dec_str.ch_c_l(), "%ld", &l ); - assert( conv ); - - return (int)l; -} - -String -String_convert::longlong_str(long long ll, char const* fmt) -{ - char buffer[STRING_BUFFER_LEN]; - snprintf(buffer, STRING_BUFFER_LEN, - (fmt ? fmt : "%Ld"), ll ); // assume radix 10 - return String(buffer); - -} -// breendet imp from String -double -String_convert::dec2_f( String dec_str ) -{ - if ( !dec_str.length_i() ) - return 0; - double d = 0; - int conv = sscanf( dec_str.ch_c_l(), "%lf", &d ); - assert( conv ); - return d; -} - -int -String_convert::hex2bin_i( String hex_str, String& bin_str_r ) -{ - if ( hex_str.length_i() % 2 ) - hex_str = "0" + hex_str; - - bin_str_r = ""; - Byte const* byte_c_l= hex_str.byte_c_l(); - int i = 0; - while ( i < hex_str.length_i() ) { - int high_i = hex2nibble_i( *byte_c_l++ ); - int low_i = hex2nibble_i( *byte_c_l++ ); - if ( high_i < 0 || low_i < 0 ) - return 1; // illegal char - bin_str_r += String( (char)( high_i << 4 | low_i ), 1 ); - i += 2; - } - return 0; -} - -String -String_convert::hex2bin_str( String hex_str ) -{ - String str; -// silly, asserts should alway be "on"! -// assert( !hex2bin_i( hex_str, str ) ); - int error_i = hex2bin_i( hex_str, str ); - assert( !error_i ); - return str; -} - -int -String_convert::hex2nibble_i( Byte byte ) -{ - if ( byte >= '0' && byte <= '9' ) - return byte - '0'; - if ( byte >= 'A' && byte <= 'F' ) - return byte - 'A' + 10; - if ( byte >= 'a' && byte <= 'f') - return byte - 'a' + 10; - return -1; -} - -// stupido. Should use int_str() -String -String_convert::i2dec_str( int i, int length_i, char ch ) -{ - char fill_ch = ch; - if ( fill_ch) - fill_ch = '0'; - - // ugh - String dec_str( i ); - - // ugh - return String( fill_ch, length_i - dec_str.length_i() ) + dec_str; -} - - -// stupido. Should use int_str() -String -String_convert::i2hex_str( int i, int length_i, char ch ) -{ - String str; - if ( !i ) - str = "0"; - while ( i ) { - str = ( i % 16 )["0123456789abcdef"] + str; - i /= 16; - } - if ( str.length_i() < length_i ) - str = String( ch, length_i - str.length_i() ) + str; - return str; -} - -Byte -String_convert::nibble2hex_byte( Byte byte ) -{ - if ( ( byte & 0x0f ) <= 9 ) - return ( byte & 0x0f ) + '0'; - else - return ( byte & 0x0f ) - 10 + 'a'; -} -/** - Convert an integer to a string - - @param - #fmt# is a printf style format, default assumes "%d" as format. - */ -String -String_convert::int_str(int i, char const* fmt) -{ - char buffer[STRING_BUFFER_LEN]; - snprintf(buffer, STRING_BUFFER_LEN, - (fmt ? fmt : "%d"), i ); // assume radix 10 - return String(buffer); -} - -/** - Convert a double to a string. - - @param #fmt# is a printf style format, default assumes "%lf" as format - */ -String -String_convert::double_str(double f, char const* fmt) -{ - char buf[STRING_BUFFER_LEN]; - - snprintf(buf, STRING_BUFFER_LEN, fmt ? fmt : "%f", f); - return buf; -} - -/** - Make a string from a single character. - - @param - #n# is a repetition count, default value is 1 - */ -String -String_convert::char_str(char c, int n) -{ - n = n >= 0 ? n : 0; - char* ch_p = new char[ n ]; - memset( ch_p, c, n ); - String s((Byte*)ch_p, n); - delete ch_p; - return s; -} - -String -String_convert::rational_str(Rational r) -{ - char * n = Itoa(r.numerator()); // LEAK???? - - String s = n; - if (r.denominator() != 1) { - char * d = Itoa(r.denominator()); - s += String( '/' ) + String(d); - //delete d; - } -/* delete n; - */ - return s; -} - -String -String_convert::pointer_str(const void *l) -{ - long long int ill = (long long int )l; - return String_convert::longlong_str(ill, "0x%0Lx"); -} diff --git a/flower/string-convert.hh b/flower/string-convert.hh deleted file mode 100644 index bcf461f8f3..0000000000 --- a/flower/string-convert.hh +++ /dev/null @@ -1,43 +0,0 @@ -/* - PROJECT: FlowerSoft C++ library - FILE : string-convert.hh - -*/ - -#ifndef STRING_CONVERT_HH -#define STRING_CONVERT_HH - -/* - ///a class which only has functions. -//#define functor class // cute. docxx fucks up -*/ - -/** - The functor String_convert handles all conversions to/from String (some - time, anyway). - The class is quite empty from data view. - */ -class String_convert { - static int hex2bin_i( String hex_str, String& bin_str_r ); - static int hex2nibble_i( Byte byte ); - static Byte nibble2hex_byte( Byte byte ); -public: - static String bin2dec_str( String bin_str ); - static String bin2hex_str( String bin_str ); - static String dec2bin_str( String str ); - static int bin2_i( String str ); - static String char_str(char c, int n); - static int dec2_i( String dec_str ); - static double dec2_f( String dec_str ); - static String double_str(double f, char const* fmt=0); - static int hex2int_i( String str ); - static String hex2bin_str( String str ); - static String int_str(int i, char const *fmt=0 ); - static String i2hex_str( int i, int length_i, char ch ); - static String i2dec_str( int i, int length_i, char ch ); - static String rational_str(Rational); - static String pointer_str(const void *); - static String longlong_str(long long , char const * fmt = 0); -}; - -#endif // __STRING_CONVERT_HH // diff --git a/flower/string-data.hh b/flower/string-data.hh deleted file mode 100644 index d4f4b6b5b9..0000000000 --- a/flower/string-data.hh +++ /dev/null @@ -1,95 +0,0 @@ -/* - string-data.hh -- declare String_data - - source file of the LilyPond music typesetter - - (c) 1997 Han-Wen Nienhuys -*/ - - -#ifndef STRINGDATA_HH -#define STRINGDATA_HH - - -/**Internal String struct. - the data itself. Handles simple tasks (resizing, resetting) - */ -class String_data { - // GNU malloc: storage overhead is 8 bytes anyway. - -friend class String_handle; - int maxlen; // maxlen is arraysize-1 - - int length_i_; - Byte* data_byte_p_; - int references; - - /// init to "" - String_data(); - - /// init from src. Conservative allocation. - String_data(String_data const &src); - - ~String_data(); - - /** POST: maxlen >= j. - @param j, maximum stringlength_i_. - contents thrown away. - */ - void setmax(int j); - - /** POST: maxlen >= j. - @param j, maximum stringlength_i_. - contents are kept if it grows. - */ - void remax(int j); - - /// check if writeable. - void OKW(); - - /// check state. - void OK(); - - /// reduce memory usage. - void tighten(); - - // assignment. - void set( Byte const* byte_c_l, int length_i ); - - void set( char const* ch_c_l ); - - /// concatenation. - void append( Byte const* byte_c_l, int length_i ); - - void operator += ( char const* ch_c_l ); - - char const* ch_c_l() const; - - char* ch_l(); - - Byte const* byte_c_l() const; - - // idem, non const - Byte* byte_l(); - - void trunc(int j); - - /** access element. not really safe. Can alter length_i_ without - #String_data# knowing it. */ - Byte &operator [](int j); - Byte operator [](int j) const; - bool null_terminated_b()const; -}; - - - -#ifdef STRING_UTILS_INLINED -#ifndef INLINE -#define INLINE inline -#endif -#include "string-data.inl" - -#endif - - -#endif // STRING_DATA_HH diff --git a/flower/string-data.inl b/flower/string-data.inl deleted file mode 100644 index f5bdc86c38..0000000000 --- a/flower/string-data.inl +++ /dev/null @@ -1,209 +0,0 @@ -/* -*-C++-*- - String_data.inl -- implement String_data - - source file of Flower lib - - (c) 1997 Han-Wen Nienhuys -*/ - -#ifndef STRINGDATA_INL -#define STRINGDATA_INL - -#include -#include - -#include "string-data.hh" -const int INITIALMAX=8; - -#include - -INLINE void -String_data::OKW() -{ - assert (references == 1); -} - -INLINE void -String_data::OK() -{ - assert(maxlen >= length_i_); - assert(bool(data_byte_p_)); - assert(references >= 1); -} - - -INLINE -String_data::String_data() -{ - references=0; - maxlen = INITIALMAX; - data_byte_p_ = new Byte[maxlen + 1]; - data_byte_p_[0] = 0; - length_i_ = 0; -} - -INLINE -String_data::String_data(String_data const &src) -{ - references=0; - maxlen = length_i_ = src.length_i_; - data_byte_p_ = new Byte[maxlen+1]; // should calc GNU 8byte overhead. - memcpy( data_byte_p_, src.data_byte_p_, length_i_ + 1 ); -} - -INLINE -String_data::~String_data() -{ - assert(references == 0); - delete[] data_byte_p_; -} - -INLINE void -String_data::setmax(int j) -{ - OKW(); - if (j > maxlen) { - delete data_byte_p_; - maxlen = j; - data_byte_p_ = new Byte[maxlen + 1]; - - data_byte_p_[0] = 0; - length_i_ = 0; - } -} - -/* this is all quite hairy: - update of length_i_ - update of maxlen - alloc of buffer - copying of buffer - needs blondification: - split tasks - define change authority -*/ -INLINE void -String_data::remax(int j) -{ - OKW(); - if (j > maxlen) { - Byte *p = new Byte[j + 1]; - memcpy( p, data_byte_p_, ( maxlen = 0 && j <= length_i_); - data_byte_p_[j] = 0; - length_i_ = j; -} - -INLINE bool -String_data::null_terminated_b()const -{ - return !memchr(data_byte_p_, length_i_, 0); -} - -INLINE Byte& -String_data::operator [](int j) -{ - assert(j >= 0 && j <= length_i_); - return data_byte_p_[j] ; -} - -INLINE Byte -String_data::operator [](int j) const -{ - assert(j >= 0 && j <= length_i_); - return data_byte_p_[j]; -} - - - - -#endif // __STRING_UTIL_CC // diff --git a/flower/string-handle.hh b/flower/string-handle.hh deleted file mode 100644 index fe109d8842..0000000000 --- a/flower/string-handle.hh +++ /dev/null @@ -1,70 +0,0 @@ -/* - string-handle.hh -- declare String_handle - - source file of the LilyPond music typesetter - - (c) 1997 Han-Wen Nienhuys -*/ - - -#ifndef STRINGHANDLE_HH -#define STRINGHANDLE_HH -#include "fproto.hh" - - -/** - Reference counting for strings. - - handles ref. counting, and provides a very thin interface using - Byte * - - */ -class String_handle { - String_data* data; - - /// decrease ref count. Named kind of like a Tanenbaum semafore - void down(); - - /// increase ref count - void up(String_data *d); - - /** make sure data has only one reference. - POST: data->references == 1 - */ - void copy(); - -public: - String_handle(); - ~String_handle(); - String_handle(String_handle const & src); - - Byte const* byte_c_l() const; - char const* ch_c_l() const; - Byte* byte_l(); - char* ch_l(); - bool null_terminated_b()const; - void operator =(String_handle const &src); - void operator += (char const *s); - Byte operator[](int j) const; - - /** Access elements. WARNING: NOT SAFE - don't use this for loops. Use byte_c_l() - */ - Byte &operator[](int j); - void append( Byte const* byte_c_l, int length_i ); - void set( Byte const* byte_c_l, int length_i ); - void operator = (char const *p); - void trunc(int j); - int length_i() const; -}; - -#ifdef STRING_UTILS_INLINED -#ifndef INLINE -#define INLINE inline -#endif -#include "string-handle.inl" -/* we should be resetting INLINE. oh well. */ -#endif - - -#endif // STRINGHANDLE_HH diff --git a/flower/string-handle.inl b/flower/string-handle.inl deleted file mode 100644 index 7286fd6d20..0000000000 --- a/flower/string-handle.inl +++ /dev/null @@ -1,156 +0,0 @@ -/* -*-c++-*- - - stringhandle.inl -- implement String_handle - - source file of Flower lib - - (c) 1997 Han-Wen Nienhuys -*/ - -#ifndef STRINGHANDLE_INL -#define STRINGHANDLE_INL - -#include -#include - -#include "string-data.hh" -#include "string-handle.hh" - -INLINE void -String_handle::down() -{ - if (!(--data->references)) delete data; data = 0; -} - -/// increase ref count -INLINE void -String_handle::up(String_data *d) -{ - data=d; data->references ++; -} - -INLINE void -String_handle::copy() -{ - if (data->references !=1){ - String_data *newdata = new String_data(*data); - down(); - up(newdata); - } -} - -INLINE -String_handle::String_handle() -{ - up(new String_data); -} - -INLINE -String_handle::~String_handle() -{ - down(); -} - -INLINE -String_handle::String_handle(String_handle const & src) -{ - up(src.data); -} - -INLINE Byte* -String_handle::byte_l() -{ - copy(); - return data->byte_l(); -} - -INLINE char* -String_handle::ch_l() -{ - copy(); - return (char*)data->byte_l(); -} - -INLINE Byte -const* String_handle::byte_c_l() const -{ - return data->byte_c_l(); -} - -INLINE char const* -String_handle::ch_c_l() const -{ - return (char const*)data->byte_c_l(); -} - -INLINE void -String_handle::operator =(String_handle const &src) -{ - if (this == &src) - return; - down(); - up(src.data); -} - -INLINE void -String_handle::operator += (char const *s) -{ - copy(); - *data += s; -} - - -INLINE Byte -String_handle::operator[](int j) const -{ - return (*data)[j]; -} - -// !NOT SAFE! -// don't use this for loops. Use byte_c_l() -INLINE Byte & -String_handle::operator[](int j) -{ - copy(); // hmm. Not efficient - return data->byte_l()[j]; -} - -INLINE void -String_handle::append( Byte const* byte_c_l, int length_i ) -{ - copy(); - data->append( byte_c_l, length_i ); -} - -INLINE void -String_handle::set( Byte const* byte_c_l, int length_i ) -{ - copy(); - data->set( byte_c_l, length_i ); -} - -INLINE void -String_handle::operator = (char const *p) -{ - copy(); - data->set( p ); -} - -INLINE void -String_handle::trunc(int j) -{ - copy(); data->trunc(j); -} - -INLINE int -String_handle::length_i() const -{ - return data->length_i_; -} - -INLINE bool -String_handle::null_terminated_b() const { - return data->null_terminated_b(); -} - -#endif diff --git a/flower/string.cc b/flower/string.cc deleted file mode 100644 index 60038f6a55..0000000000 --- a/flower/string.cc +++ /dev/null @@ -1,365 +0,0 @@ -/* - - string.cc - implement String - - (c) 1997 Han-Wen Nienhuys & Jan Nieuwenhuizen - - */ - -#include -#include - -#include -#include - -#include "string.hh" -#include "libc-extension.hh" -#include "string-convert.hh" - -#ifdef STRING_DEBUG -void* mymemmove( void* dest, void const* src, size_t n ); -#define memmove mymemmove -#endif - -// return array, alloced with new. -Byte* -String::copy_byte_p() const -{ - Byte const* src = strh_.byte_c_l(); - Byte* dest = new Byte[strh_.length_i() + 1]; - memcpy( dest, src, strh_.length_i() + 1 ); - return dest; -} -void -String::print_on(ostream& os) const -{ - if (strh_.null_terminated_b()) - os << ch_c_l(); - else - for ( int i = 0; i < length_i(); i++ ) - os << (Byte)(*this)[ i ]; -} - -/* - copying, constructing. - */ -String& -String::operator = (String const&source ) -{ - strh_ = source.strh_; - return *this; -} - - -String::String(Rational r) -{ - *this = String_convert::rational_str(r); -} - -String::String (double f, char const* fmt) -{ - *this= String_convert::double_str(f,fmt); -} - -String::String( char c, int n ) -{ - *this = String_convert::char_str (c,n); -} - -/** - @see - String_convert::int_str - */ -String::String(int i, const char * format ) -{ - *this = String_convert::int_str(i,format); -} - -String::String (bool b) -{ - *this = (char const* ) (b ? "true" : "false"); -} - -String::String( char const* source ) -{ - assert(source); - strh_ = source; -} - -String::String( Byte const* byte_l, int length_i ) -{ - strh_.set( byte_l, length_i ); -} - -void -String::append(String s) -{ - strh_.append( s.byte_c_l(), s.length_i() ); -} -void -String::operator +=(String s) -{ - append(s); -} - -void -String::prepend(String s) -{ - s += *this; - *this = s; -} - -int -String::length_i() const -{ - return strh_.length_i(); -} - -Byte const* -String::byte_c_l() const -{ - return strh_.byte_c_l(); -} - -char const* -String::ch_c_l() const -{ - return strh_.ch_c_l(); -} - -Byte* -String::byte_l() -{ - return strh_.byte_l(); -} - -char* -String::ch_l() -{ - return strh_.ch_l(); -} - -/** - Do a signed comparison, analogous to memcmp; - */ -int -String::compare_i(String const& s1, String const& s2 ) -{ - Byte const* p1 = s1.byte_c_l(); - Byte const* p2 = s2.byte_c_l(); - if ( p1 == p2 ) - return 0; - - int i1 = s1.length_i(); - int i2 = s2.length_i(); - - int result= memcmp( p1, p2, i1 = 0 ) { - index_i += next_i; - next_i = right_str( length_i() - index_i - length ).index_i( string ); - } - return index_i; -} - -/** find a character. - - @return - the index of the leftmost character #c# (0 <= return < length_i()), - or -1 if not found. - - ? should return length_i()?, as in string.left_str(index_i(delimiter)) -*/ -int -String::index_i(char c ) const -{ - char const* me = strh_.ch_c_l(); - char const* p = (char const *) memchr( me,c, length_i()); - if ( p ) - return p - me; - return -1; -} - -/** - find the substring. - - @return - index of leftmost occurrence of #searchfor# - */ -int -String::index_i( String searchfor ) const -{ - char const* me = strh_.ch_c_l(); - char const* p = (char const *) memmem( - me, length_i(), searchfor.ch_c_l(), searchfor.length_i()); - - if ( p ) - return p - me; - else - return -1; -} - -/** find chars of a set. - - @return - the index of the leftmost occurance of an element of #set# - */ -int -String::index_any_i( String set ) const -{ - int n = length_i(); - if ( !n ) - return -1; - - const void * me_l = (const void*) strh_.ch_c_l(); - for (int i=0; i < set.length_i(); i++) { - char * found=(char*) memchr(me_l, set[i], n ); - if (found) { - return found - me_l; - } - } - return -1; -} - -String -String::left_str( int n ) const -{ - if (n >= length_i()) - return *this; - - String retval; - if (n < 1) - return retval; - - retval = *this; - retval.strh_.trunc(n); - return retval; -} - -String -String::right_str( int n ) const -{ - if (n > length_i()) - return *this; - - if ( n < 1) - return ""; - - return String( strh_.byte_c_l() + length_i() - n, n ); -} - - -String -String::nomid_str( int index_i, int n ) const -{ - if ( index_i < 0 ) { - n += index_i; - index_i = 0; - } - if ( n <= 0) - return *this; - - return - left_str( index_i ) + - right_str( length_i() - index_i - n ) ; -} - -/* - proposal: change to "cut()" - */ -String -String::mid_str( int index_i, int n ) const -{ - if (index_i <0) { - n += index_i; - index_i=0; - } - - if ( !length_i() || ( index_i < 0 ) || ( index_i >= length_i() ) || ( n < 1 ) ) - return String(); - - if ( ( n > length_i() ) || ( index_i + n > length_i() ) ) - n = length_i() - index_i; - - return String( byte_c_l() + index_i, n ); -} - -String -String::upper_str() const -{ - String str = *this; - str.to_upper(); - return str; -} -void -String::to_upper() -{ - char *s = (char*)strh_.byte_l(); - strnupr( s ,length_i()); -} - -void -String::to_lower() -{ - char* s = strh_.ch_l(); - strnlwr(s,length_i()); -} - - -String -String::lower_str() const -{ - String str = *this; - str.to_lower(); - return str; -} -String -String::reversed_str() const -{ - String str = *this; - strrev( str.byte_l(), str.length_i() ); - return str; -} - -int -String::value_i() const -{ - return String_convert::dec2_i( *this ); -} - -double -String::value_f() const -{ - return String_convert::dec2_f( *this ); -} - - diff --git a/flower/string.hh b/flower/string.hh deleted file mode 100644 index 8cef141169..0000000000 --- a/flower/string.hh +++ /dev/null @@ -1,193 +0,0 @@ -/* - - FILE : string.hh -- declare String - - Rehacked by HWN 3/nov/95 - removed String & 's - introduced Class String_handle - */ - -#ifndef STRING_HH -#define STRING_HH - - -#include -#include -#include - -#include "string-handle.hh" - -/** - - Intuitive string class. provides -\begin{itemize} -\item - ref counting through #String_handle# -\item - conversion from bool, int, double, char* , char. -\item - to be moved to String_convert: - conversion to int, upcase, downcase - -\item - printable. - -\item - indexing (index_i, index_any_i, last_index_i) - -\item - cutting (left_str, right_str, mid_str) - -\item - concat (+=, +) - -\item - signed comparison (<, >, ==, etc) - -\item - No operator[] is provided, since this would be enormously slow. If needed, - convert to char const* . -\end{itemize} - -*/ -class String -{ -protected: - String_handle strh_; - - bool null_terminated(); - -public: - - /** init to empty string. This is needed because other - constructors are provided.*/ - String() { } - String(Rational); - - /// String s = "abc"; - String( char const* source ); - String( Byte const* byte_c_l, int length_i ); - - /// "ccccc" - String( char c, int n = 1 ); - - String( int i , char const *fmt=0); - String ( double f , char const* fmt =0); - /// 'true' or 'false' - String(bool ); - - /// return a "new"-ed copy of contents - Byte* copy_byte_p() const; // return a "new"-ed copy of contents - - char const* ch_c_l() const; - Byte const* byte_c_l() const; - char* ch_l(); - Byte* byte_l(); - - /// deprecated; use ch_c_l() - operator char const* () const { return ch_c_l(); } - - String &operator =( const String & source ); - - /// concatenate s - void operator += (char const* s) { strh_ += s; } - void operator += (String s); - - void append(String); - void prepend(String); - - char operator []( int n ) const { return strh_[n]; } - - /// return n leftmost chars - String left_str( int n ) const; - - /// return n rightmost chars - String right_str( int n ) const; - - /// return uppercase of *this - String upper_str() const; - - /// return lowercase of *this - String lower_str() const; - - /// return the "esrever" of *this - String reversed_str() const; - - - /// return a piece starting at index_i (first char = index_i 0), length n - String mid_str(int index_i, int n ) const; - - /// cut out a middle piece, return remainder - String nomid_str(int index_i, int n ) const; - - /// signed comparison, analogous to memcmp; - static int compare_i(const String& s1,const String& s2); - - /// index of rightmost c - int index_last_i( char c) const; - - /// index of rightmost element of string - int index_last_i( char const* string ) const; - - int index_i(char c ) const; - int index_i(String ) const; - int index_any_i(String ) const; - - void to_upper(); - void to_lower(); - /// provide Stream output - void print_on(ostream& os) const; - - /// the length of the string - int length_i() const; - - // ***** depreciated - int len() const { - return length_i(); - } - - /// convert to an integer - int value_i() const; - - /// convert to a double - double value_f() const; -}; - -#include "compare.hh" - -instantiate_compare(const String &, String::compare_i); - -// because char const* also has an operator ==, this is for safety: -inline bool operator==(String s1, char const* s2){ - return s1 == String(s2); -} -inline bool operator==(char const* s1, String s2) -{ - return String(s1)==s2; -} -inline bool operator!=(String s1, char const* s2 ) { - return s1!=String(s2); -} -inline bool operator!=(char const* s1,String s2) { - return String(s2) !=s1; -} - - -inline String -operator + (String s1, String s2) -{ - s1 += s2; - return s1; -} - -inline ostream & -operator << ( ostream& os, String d ) -{ - d.print_on(os); - return os; -} - - -// String quoteString(String message, String quote); - -#endif diff --git a/flower/stringtest.cc b/flower/stringtest.cc deleted file mode 100644 index 2f085a26d7..0000000000 --- a/flower/stringtest.cc +++ /dev/null @@ -1,114 +0,0 @@ -/* - stupid test program to verify stringlib - stringtest.cc - */ -#include -#include "string.hh" -#include "varray.hh" -#include "string-convert.hh" - -void -ctors() -{ - cout << "constructors"< a; - a.push("abcd"); - a.push("zxy"); - a.push("abc"); - a.push(""); - a.sort(String::compare_i); - cout << "compares: "< -*/ - -#ifdef STRING_DEBUG -#include -#include -void* -mymemmove( void* dest, void const* src, size_t n ) -{ - return memcpy( dest, src, n ); // wohltempererit: 69006 -} -#define memmove mymemmove -#endif - -#ifdef STRING_UTILS_INLINED -#undef STRING_UTILS_INLINED -#endif - -#ifdef INLINE -#undef INLINE -#endif - -#define INLINE - -#include "string-handle.hh" -#include "string-data.hh" -#include "string-data.inl" -#include "string-handle.inl" diff --git a/flower/text-db.cc b/flower/text-db.cc deleted file mode 100644 index ebfc992ff2..0000000000 --- a/flower/text-db.cc +++ /dev/null @@ -1,48 +0,0 @@ -#include "text-db.hh" -bool -Text_db::eof() -{ - Data_file::gobble_leading_white(); - return Data_file::eof(); -} - -void -Text_db::gobble_leading_white() -{ - while (1) { - Data_file::gobble_leading_white(); - if (eof()) - return ; - char c; - if ((c = data_get()) !='\n'){ - data_unget (c); - return ; - } - } -} - - -Text_record -Text_db::get_record() -{ - while (1) { - String s; - Array fields; - assert(!eof()); - - while ((s = get_word()) != "") - { - fields.push(s); - gobble_white(); - } - - - if (get_line() != "") - assert(false); - - assert (fields.size()); - return Text_record(fields, get_name(), line()); - } -} - - diff --git a/flower/text-db.hh b/flower/text-db.hh deleted file mode 100644 index 3535a84f8f..0000000000 --- a/flower/text-db.hh +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef TEXTDB_HH -#define TEXTDB_HH - -#include "data-file.hh" - -/**a "const" Array. Contents can't be changed. do "#" comments, read quote enclosed fields */ - -class Text_record : Array -{ - int line_no; - String filename; - -public: - Text_record() { } // needed because of other ctor - - /// report an error in this line. - message(String s) { - cerr << '\n'<< filename << ": "<< line_no << s << "\n"; - } - String operator[](int j) { - return Array::operator[](j); - } - - Text_record(Array s, String fn, int j) : Array(s) { - filename = fn; line_no = j; - } - Array::size; -}; - -/** abstraction for a datafile. - add a subrec/fieldsep/record separator - */ - -class Text_db : private Data_file -{ - void gobble_leading_white(); -public: - /// get a line with records - Text_record get_record(); - - Text_db(String fn):Data_file(fn) { } - Data_file::error; - bool eof(); - - /// get next line. - Text_record operator++(int) { - return get_record(); - } - /// are we done yet? - operator bool() { - return !eof(); - } -}; - -#endif diff --git a/flower/text-stream.cc b/flower/text-stream.cc deleted file mode 100644 index a2d3e4b119..0000000000 --- a/flower/text-stream.cc +++ /dev/null @@ -1,31 +0,0 @@ -#include "text-stream.hh" - -Text_stream::Text_stream(String fn) -{ - ios::sync_with_stdio(); - if (fn == "") - { - name = ""; - f = stdin; - } - - else - { - name = fn; - f = fopen(fn, "r"); - } - - if (!f) { - cerr <<__FUNCTION__<< ": can't open `" << fn << "'\n"; - exit(1); - } - - line_no = 1; - } - -void -Text_stream::message(String s) -{ - cerr << "\n"< -#include -#include "string.hh" -#include "varray.hh" - -/** - line counting input stream. - a stream for textfiles. linecounting. Thin interface getchar and - ungetchar. (ungetc is unlimited) - - should protect get and unget against improper use -*/ - - -class Text_stream -{ - int line_no; - - // could just have used streams. - FILE *f; - Array pushback; - String name; - - public: - Text_stream(String fn); - String get_name() { return name; } - bool eof() { - return feof(f); - } - bool eol() { - return (peek() == '\n'); - } - char peek() { - char c = get(); - unget(c); - return c; - } - int line(){ - return line_no; - } - - char get() { - char c; - - if (pushback.empty()) - c = getc(f); - else - c = pushback.pop(); - - if (c =='\n') - line_no++; - return c; - } - void unget(char c) { - if (c =='\n') - line_no--; - pushback.push(c); - } - ~Text_stream (){ - if (!eof()) - cerr <<__FUNCTION__<< ": closing unended file"; - - fclose(f); - } - - /// GNU format message. - void message(String s); -}; - -#endif diff --git a/flower/unionfind.cc b/flower/unionfind.cc deleted file mode 100644 index e7b0831dd1..0000000000 --- a/flower/unionfind.cc +++ /dev/null @@ -1,35 +0,0 @@ -#include "unionfind.hh" -/* - see a book on data structures - */ - -Union_find::Union_find(int n) -{ - classes.set_size(n); - - for (int i=0; i < n; i++) { - classes[i] = i; - } -} - -int -Union_find::find(int i) -{ - int rep = i; - while (classes[rep] != rep) - rep = classes[rep]; - while (classes[i] != rep) { - int next =classes[i]; - classes[i] = rep; - i = next; - } - return rep; -} - -void -Union_find::connect(int i, int j) -{ - i = find(i); - j = find(j); - classes[i] = j; -} diff --git a/flower/unionfind.hh b/flower/unionfind.hh deleted file mode 100644 index fbaa51e731..0000000000 --- a/flower/unionfind.hh +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef UNIONFIND_HH -#define UNIONFIND_HH -#include "varray.hh" - -/* - which points of a graph are connected?. - Union find, a standard algorithm: - - Union_find represents an undirected graph of N points. You can - connect two points using #connect()#. #find(i)# finds a uniquely - determined representant of the equivalence class of points - connected to #i#. - - */ -struct Union_find { - void connect(int i, int j); - int find(int i); - bool equiv(int i, int j) { return find(i) == find(j); } - Union_find(int sz); - -private: - Array classes; - -}; -#endif diff --git a/flower/varray.hh b/flower/varray.hh deleted file mode 100644 index febf3e7601..0000000000 --- a/flower/varray.hh +++ /dev/null @@ -1,186 +0,0 @@ -/* - (c) Han-Wen Nienhuys 1995,96 - - Distributed under GNU GPL -*/ - -#ifndef ARRAY_H -#define ARRAY_H -#include - -/// copy a bare (C-)array from #src# to #dest# sized #count# -template -inline void arrcpy(T*dest, T*src, int count) { - for (int i=0; i < count ; i++) - *dest++ = *src++; -} - - -/** - Scaleable array/stack template, for a type T with default constructor. - - - This template implements a scaleable vector. With (or without) range - checking. It may be flaky for objects with complicated con- and - destructors. The type T should have a default constructor. It is - best suited for simple types, such as int, double or String, it - provides a paranoidly safe replacement for the new T[int] construct. - - It uses stack terminology, (push, pop, top), and can be used as a stack. - - - */ -template -class Array { -protected: - /// maximum length of array. - int max; - - /// the data itself - T *thearray; - - /// stretch or shrink array. - void remax(int newmax) { - T* newarr = new T[newmax]; - size_ = (newmax < size_) ? newmax : size_; - arrcpy(newarr, thearray, size_); - - delete[] thearray; - thearray = newarr; - max = newmax; - } - int size_; - -public: - /// check invariants - void OK() const { - assert(max >= size_ && size_ >=0); - if (max) assert(thearray); - } - /** report the size_. - @see {setsize_} - */ - int size() const { return size_; } - - /// POST: size() == 0 - void clear() { size_ = 0; } - - Array() { thearray = 0; max =0; size_ =0; } - - - /** set the size_ to #s#. - POST: size() == s. - Warning: contents are unspecified */ - void set_size(int s) { - if (s >= max) remax(s); - size_ = s; - } - - ~Array() { delete[] thearray; } - - /// return a "new"ed copy of array - T* copy_array() const { - T* Tarray = new T[size_]; - arrcpy(Tarray, thearray, size_); - return Tarray; - } - // depracated - operator T* () const { - return copy_array(); - } - void operator=(Array const & src) { - set_size (src.size_); - arrcpy(thearray,src.thearray, size_); - } - Array(const Array & src) { - thearray = src.copy_array(); - max = size_ = src.size_; - } - - /// tighten array size_. - void precompute () { remax(size_); } - - /// this makes Array behave like an array - T &operator[] (const int i) const { - assert(i >=0&&i=0 && j<= size_); - set_size(size_+1); - for (int i=size_-1; i > j; i--) - thearray[i] = thearray[i-1]; - thearray[j] = k; - } - void del(int i) { - assert(i >=0&& i < size_); - arrcpy(thearray+i, thearray+i+1, size_-i-1); - size_--; - } - // quicksort. - void sort (int (*compare)( T const&,T const&), - int lower = -1, int upper = -1 ) { - if (lower < 0) { - lower = 0 ; - upper = size()-1; - } - if (lower >= upper) - return; - swap(lower, (lower+upper)/2); - int last = lower; - for (int i= lower +1; i <= upper; i++) - if (compare(thearray[i], thearray[lower]) < 0 ) - swap( ++last,i); - swap(lower, last); - sort(compare, lower, last-1); - sort(compare, last+1, upper); - } - void concat(Array const &src) { - int s = size_; - set_size(size_ + src.size_); - arrcpy(thearray+s,src.thearray, src.size_); - } - Array subvec(int lower, int upper) { - assert(lower >= 0 && lower <=upper&& upper <= size_); - Array r; - int s =upper-lower; - r.set_size(s); - arrcpy(r.thearray, thearray + lower, s); - return r; - } -}; - -#endif diff --git a/flower/vector.cc b/flower/vector.cc deleted file mode 100644 index 5cc76bfd7b..0000000000 --- a/flower/vector.cc +++ /dev/null @@ -1,25 +0,0 @@ -#include "vector.hh" -Vector::Vector(Array d) - : dat(d) -{ - -} -Vector::Vector(const Vector&n) - : dat(n.dat) -{ -} - -Vector -Vector::operator-() const -{ - Vector v(*this); - v*=-1; - return v; -} - -void -Vector::set_unit(int j) -{ - fill(0.0); - dat[j] = 1.0; -} diff --git a/flower/vector.hh b/flower/vector.hh deleted file mode 100644 index 4d91397cc6..0000000000 --- a/flower/vector.hh +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef VECTOR_HH -#define VECTOR_HH - -#include -#include "real.hh" -#include "varray.hh" - -class Dstream; -class String; -void set_matrix_debug(Dstream&ds); - -/** a row of numbers. - a vector. Storage is handled in Array, Vector only does the mathematics. - */ -class Vector { - Array dat; -public: - void OK() const { dat.OK();} - int dim() const { return dat.size(); } - Vector() { } - Vector(Array d ); - Vector(const Vector&n); - Vector(int n) { - dat.set_size(n); - fill(0); - } - void insert(Real v, int i) { - dat.insert(v,i); - } - void del(int i) { dat.del(i); } - operator String() const; - void fill(Real r) { - for (int i=0; i < dim(); i++) - dat[i] =r; - } - - void operator +=(Vector v) { - assert(v.dim() == dim()); - for (int i=0; i < dim(); i++) - dat[i] += v.dat[i]; - } - - void operator /=(Real a) { - (*this) *= 1/a; - } - - void operator *=(Real a) { - for (int i=0; i < dim(); i++) - dat[i] *= a; - } - - void operator -=(Vector v) { - assert(v.dim() == dim()); - for (int i=0; i < dim(); i++) - dat[i] -= v(i); - } - - Real &operator()(int i) { return dat[i]; } - Real operator()(int i) const { return dat[i]; } - Real elem(int i) { return dat[i]; } - Real operator *(Vector v) const { - Real ip=0; - assert(v.dim() == dim()); - for (int i=0; i < dim(); i++) - ip += dat[i] *v(i); - return ip; - } - Vector operator-() const; - Real norm() { - return sqrt(norm_sq() ); - } - Real norm_sq() { - return ((*this) * (*this)); - } - operator Array () { return dat; } - void print() const; - /// set to j-th element of unit-base - void set_unit(int j) ; -}; - -inline Vector -operator+(Vector a, Vector const &b) { - a += b; - return a; -} - -inline Vector -operator-(Vector a, Vector const &b) { - a -= b; - return a; -} - -inline Vector -operator*(Vector v, Real a) { - v *= a; - return v; -} - -inline Vector -operator*( Real a,Vector v) { - v *= a; - return v; -} - -inline Vector -operator/(Vector v,Real a) { - v *= 1/a; - return v; -} - -#endif diff --git a/flower/vsmat.hh b/flower/vsmat.hh deleted file mode 100644 index 283b1e567b..0000000000 --- a/flower/vsmat.hh +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef VSMAT_HH -#define VSMAT_HH -#include "varray.hh" -#include "real.hh" -/** base class for interface with matrix storageclasses. There are no - iterators for matrixclasses, since matrices are (like arrays) - explicitly int-indexed. - - Iteration is provided by *_next, *_ok, which update and check both - index variables simultaneously. - - TODO - determine type of product matrix. - -*/ -class virtual_smat { - - -public: - /// check invariants - virtual void OK() const=0; - - /// height of matrix - virtual int rows() const = 0; - - /// width of matrix - virtual int cols() const = 0; - - - /** set the size. contents lost. - PRE - i >=0, j>=0 - */ - virtual void set_size(int i, int j) = 0; - - /**set the size to square dimen. contents lost - PRE - i>=0 - */ - virtual void set_size(int i) = 0; - /**set the size to i. - - keep contents. If enlarged contents unspecified - - PRE - i>=0, j>=0 - - */ - virtual void resize(int i, int j) = 0; - - /** - set the size to square dimen. contents kept - Keep contents. If enlarged contents are unspecified - - PRE - i>=0 - */ - virtual void resize(int i) = 0; - - - /** - access an element. - - Generate an errormessage, if this happens - in the 0-part of a sparse matrix. - */ - - virtual Real& elem(int i,int j) = 0; - - /// access a element, no modify - virtual const Real& elem(int i, int j) const = 0; - -#if 1 - virtual Array row(int i) const = 0; - virtual Array column(int j) const = 0; -#endif - - - /** - add a row to the matrix before row k. Contents - of added row are unspecified - - 0 <= k <= rows() - */ - virtual void insert_row(int k)=0; - - - /** - delete a row from this matrix. - - PRE - 0 <= k < rows(); - */ - virtual void delete_row(int k)=0; - virtual void delete_column(int k)=0; - virtual ~virtual_smat() { } - virtual virtual_smat *clone()=0; - - - - /** - at end of matrix?. when doing loop - - for(i=0; i 'fis4. 'cis4._f } 'e [ 'e( ) 'd >! 'cis ] | - { 'fis4. 'cis4.\f } 'e [ 'e( )'d 'cis ]2/3 | + { 'fis4. 'cis4.\df } 'e [ 'e( )'d 'cis ]2/3 | %%42 [ b8. 'cis16 ] 'd4^> b r | %%43 %#% [^ { b8._{ }_{ }_{ }_{ }_{ }_f g2. } 'cis16 ] 'd4^> b r | - [ b8.\f 'cis16 ] 'd4^> b r | + [ b8.\df 'cis16 ] 'd4^> b r | %%44 %#% [^ { > b8. fis2 } 'cis16 ] 'd4^> b >! r | [ b8. 'cis16 ] 'd4^> b r | @@ -157,7 +157,7 @@ melodie = music { $ \clef\violin %#% { =a2. fis2. } | { a2. fis2. } | %%47 - [ 'e\f( )'dis 'e ]2/3 'g4.^> 'cis | + [ 'e\df( )'dis 'e ]2/3 'g4.^> 'cis | %%48 %#% { fis2.(v ='d2.\stemup(^ } % { fis2. 'd2. } | @@ -171,7 +171,7 @@ melodie = music { $ \clef\violin %%51 { a2. cis2. } | %%52 - { fis2 d2 } { a4 fis4_\pp } | + { fis2 d2 } { a4 fis4\pp } | %%53 %#% { bes2 g2 } [ { 'd8.^>( bes8. } { ) bes16 g16 } ] | { bes2 g2 } { [ 'd8.^> bes8. } { bes16 g16 ] } | diff --git a/lib/duration.cc b/lib/duration.cc index b078b78c85..f737d660d1 100644 --- a/lib/duration.cc +++ b/lib/duration.cc @@ -14,11 +14,15 @@ #include "duration.hh" #include "debug.hh" //ugh +// statics Duration +int Duration::division_1_i_s = 384 * 4; + Duration::Duration( int type_i, int dots_i = 0, Plet* plet_l ) { type_i_ = type_i; dots_i_ = dots_i; plet_p_ = 0; + ticks_i_ = 0; set_plet( plet_l ); } @@ -27,6 +31,7 @@ Duration::Duration( Duration const& dur_c_r ) type_i_ = 0; dots_i_ = 0; plet_p_ = 0; + ticks_i_ = 0; *this = dur_c_r; } @@ -43,6 +48,7 @@ Duration::operator =( Duration const& dur_c_r ) type_i_ = dur_c_r.type_i_; dots_i_ = dur_c_r.dots_i_; + ticks_i_ = dur_c_r.ticks_i_; set_plet( dur_c_r.plet_p_ ); return *this; @@ -57,6 +63,15 @@ Duration::set_plet( Plet* plet_l ) plet_p_ = new Plet( *plet_l ); } +void +Duration::set_ticks( int ticks_i ) +{ + assert( !type_i_ ); + assert( !dots_i_ ); + assert( !plet_p_ ); + ticks_i_ = ticks_i; +} + Plet::Plet( int iso_i, int type_i ) { iso_i_ = iso_i; @@ -69,9 +84,18 @@ Plet::Plet( Plet const& plet_c_r ) type_i_ = plet_c_r.type_i_; } +// statics Duration_convert +bool Duration_convert::be_blonde_b_s = false; +bool Duration_convert::no_double_dots_b_s = false; +bool Duration_convert::no_triplets_b_s = false; +int Duration_convert::no_smaller_than_i_s = 0; + String Duration_convert::dur2_str( Duration dur ) { + if ( dur.ticks_i_ ) + return String( "[" ) + String( dur.ticks_i_ ) + "]"; + String str( dur.type_i_ ); str += String( '.', dur.dots_i_ ); if ( dur.plet_p_ ) @@ -80,17 +104,31 @@ Duration_convert::dur2_str( Duration dur ) return str; } +#if 0 int Duration_convert::dur2_i( Duration dur, int division_1_i ) { - return dur2_mom( dur ) * Moment( division_1_i ); + return dur2_mom( dur ) * Moment( division_1_i ); +} +#endif + +int +Duration_convert::dur2ticks_i( Duration dur ) +{ + if ( dur.ticks_i_ ) + return dur.ticks_i_; + return dur2_mom( dur ) * Moment( Duration::division_1_i_s ); } Moment Duration_convert::dur2_mom( Duration dur ) { + if ( dur.ticks_i_ ) + return Moment( dur.ticks_i_, Duration::division_1_i_s ); + + // or simply assert? if ( !dur.type_i_ ) - return 0; + return Moment( 0 ); Moment mom = Moment( 1 , dur.type_i_ ); @@ -103,6 +141,21 @@ Duration_convert::dur2_mom( Duration dur ) return mom * plet_factor_mom( dur ); } +#if 0 +Moment +Duration_convert::i2_mom( int time_i, int division_1_i ) +{ + if ( !time_i ) + return Moment( 0 ); + + if ( division_1_i > 0 ) + return Moment( time_i, division_1_i ); + else + return Moment( -division_1_i, time_i ); +} +#endif + +#if 0 Duration Duration_convert::mom2_dur( Moment mom ) { @@ -134,6 +187,7 @@ Duration_convert::mom2_dur( Moment mom ) } return Duration( 0 ); } +#endif Moment Duration_convert::plet_factor_mom( Duration dur ) @@ -149,21 +203,67 @@ Duration_convert::sync_f( Duration dur, Moment mom ) return mom / dur2_mom( dur ); } -Moment -Duration_convert::i2_mom( int time_i, int division_1_i ) +Duration +Duration_convert::ticks2_dur( int ticks_i ) { - if ( !time_i ) - return Moment( 0 ); + /* this is cute, + but filling an array using Duration_iterator + might speed things up, a little + */ + Moment mom( ticks_i, Duration::division_1_i_s ); + Duration_iterator iter_dur; + assert( iter_dur ); + while ( iter_dur ) { + Duration dur = iter_dur++; + if ( mom == dur2_mom( dur ) ) + return dur; + } + Duration dur( 0 ); + dur.set_ticks( ticks_i ); + return dur; +} - if ( division_1_i > 0 ) - return Moment( time_i, division_1_i ); - else - return Moment( -division_1_i, time_i ); +Duration +Duration_convert::ticks2standardised_dur( int ticks_i ) +{ + /* this is cute, + but filling an array using Duration_iterator + might speed things up, a little + */ + Moment mom( ticks_i, Duration::division_1_i_s ); + Duration_iterator iter_dur; + assert( iter_dur ); + while ( iter_dur ) { + Duration lower_dur = iter_dur++; +// Duration upper_dur( 0 ); + Duration upper_dur( 1, 1 ); + if ( iter_dur ) + upper_dur = iter_dur(); + Moment lower_mom = dur2_mom( lower_dur ); + Moment upper_mom = dur2_mom( upper_dur ); + if ( mom < lower_mom ) + return lower_dur; + if ( mom == lower_mom ) + return lower_dur; + if ( mom == upper_mom ) // don-t miss last (sic) + return upper_dur; + if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) { + warning( String( "duration not exact: " ) + String( (Real)mom ) , 0 ); + if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) ) + return lower_dur; + else + return upper_dur; + } + lower_dur = upper_dur; + } + return iter_dur(); } Duration_iterator::Duration_iterator() { cursor_dur_.type_i_ = 128; + if ( Duration_convert::no_smaller_than_i_s ) + cursor_dur_.type_i_ = Duration_convert::no_smaller_than_i_s; cursor_dur_.set_plet( 0 ); } @@ -232,8 +332,15 @@ Duration_iterator::forward_dur() cursor_dur_.type_i_ /= 2; } - // ugh - if ( no_triplets_bo_g && cursor_dur_.plet_p_ && ok() ) + if ( Duration_convert::no_triplets_b_s && cursor_dur_.plet_p_ && ok() ) + forward_dur(); + if ( Duration_convert::no_double_dots_b_s && ( cursor_dur_.dots_i_ == 2 ) && ok() ) + forward_dur(); + if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.type_i_ > Duration_convert::no_smaller_than_i_s ) && ok() ) + forward_dur(); + if ( Duration_convert::no_smaller_than_i_s && cursor_dur_.dots_i_ && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s ) && ok() ) + forward_dur(); + if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.dots_i_ == 2 ) && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s / 2 ) && ok() ) forward_dur(); return dur; diff --git a/lib/include/duration.hh b/lib/include/duration.hh index 66bbde1ccd..c642ce6eda 100644 --- a/lib/include/duration.hh +++ b/lib/include/duration.hh @@ -24,11 +24,14 @@ struct Duration { Duration const& operator =( Duration const& dur_c_r ); void set_plet( Plet* plet_l ); // handiger: newt zelf + void set_ticks( int ticks_i ); + static int division_1_i_s; // int i_; // balltype -> type! int type_i_; int dots_i_; Plet* plet_p_; + int ticks_i_; }; /// (plet) @@ -54,11 +57,19 @@ struct Plet { When Staff_column::when(), Moment Voice_element::mom(). */ struct Duration_convert { - /// Most used division in MIDI, all fine with me. - static int const division_1_c_i = 384; + static bool be_blonde_b_s; + static bool no_double_dots_b_s; + static bool no_triplets_b_s; + static int no_smaller_than_i_s; - /// Return (integer, division) representation. - static int dur2_i( Duration dur, int division_1_i = division_1_c_i ); +// /// Most used division in MIDI, all fine with me. +// static int const division_1_c_i = 384; + +// /// Return (integer, division) representation. +// static int dur2_i( Duration dur, int division_1_i = division_1_c_i ); + + /// Return number of ticks in (ticks, division_1) representation + static int dur2ticks_i( Duration dur ); /// Return Moment representation (fraction of whole note). static Moment dur2_mom( Duration dur ); @@ -66,11 +77,11 @@ struct Duration_convert { /// Return Mudela string representation. static String dur2_str( Duration dur ); - /// Return Moment from (integer, division) representation. - static Moment i2_mom( int i, int division_1_i = division_1_c_i ); +// /// Return Moment from (integer, division) representation. +// static Moment i2_mom( int i, int division_1_i = division_1_c_i ); - /// Return Moment (fraction of whole) representation, best guess. - static Duration mom2_dur( Moment mom ); +// /// Return Moment (fraction of whole) representation, best guess. +// static Duration mom2_dur( Moment mom ); /// Return plet factor (not a Moment: should use Rational?). static Moment plet_factor_mom( Duration dur ); @@ -79,6 +90,12 @@ struct Duration_convert { mom2_dur( mom / sync_f ) will return the duration dur. */ static Real sync_f( Duration dur, Moment mom ); + + /// Return exact duration, in midi-ticks if not-exact. + static Duration ticks2_dur( int ticks_i ); + + /// Return standardised duration, best guess if not exact. + static Duration ticks2standardised_dur( int ticks_i ); }; /// (iter_dur) diff --git a/lib/include/proto.hh b/lib/include/proto.hh index 4b3a8f91c5..a58e2969c1 100644 --- a/lib/include/proto.hh +++ b/lib/include/proto.hh @@ -1,3 +1,4 @@ + /* proto.hh -- part of LilyPond @@ -100,7 +101,6 @@ struct Command_req; struct Note_req; struct Notehead; struct Notehead_register; -struct Notename_tab; struct Offset; struct Output; struct PCol; @@ -135,6 +135,7 @@ struct Source; struct Source_file; struct Spacing_req ; struct Span_req; +struct Span_dynamic_req; struct Spanner; struct Subtle_req; struct Staff; diff --git a/lily/bar-reg.cc b/lily/bar-reg.cc index b72eca8755..c7c0d05e3d 100644 --- a/lily/bar-reg.cc +++ b/lily/bar-reg.cc @@ -8,7 +8,7 @@ #include "bar-reg.hh" #include "bar.hh" -#include "commandrequest.hh" +#include "command-request.hh" #include "score-column.hh" #include "time-description.hh" diff --git a/lily/beam.cc b/lily/beam.cc index b9fbd0a28c..87e9114caf 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -1,5 +1,6 @@ #include "varray.hh" +#include "proto.hh" #include "dimen.hh" #include "beam.hh" #include "misc.hh" @@ -7,7 +8,7 @@ #include "symbol.hh" #include "molecule.hh" #include "leastsquares.hh" -#include "pcol.hh" +#include "p-col.hh" #include "stem.hh" #include "paper-def.hh" #include "lookup.hh" diff --git a/lily/break.cc b/lily/break.cc index 7d21918637..cc588e6b0f 100644 --- a/lily/break.cc +++ b/lily/break.cc @@ -6,7 +6,7 @@ #include "linespace.hh" #include "debug.hh" #include "scoreline.hh" -#include "pscore.hh" +#include "p-score.hh" /* diff --git a/lily/calcideal.cc b/lily/calcideal.cc index 5ead08dd39..474015e3cc 100644 --- a/lily/calcideal.cc +++ b/lily/calcideal.cc @@ -1,6 +1,6 @@ #include "idealspacing.hh" #include "score.hh" -#include "pscore.hh" +#include "p-score.hh" #include "paper-def.hh" #include "score-column.hh" #include "dimen.hh" diff --git a/lily/clef-reg.cc b/lily/clef-reg.cc index 2d9dcc112b..791b724083 100644 --- a/lily/clef-reg.cc +++ b/lily/clef-reg.cc @@ -10,7 +10,7 @@ #include "clef-reg.hh" #include "clef-item.hh" #include "debug.hh" -#include "commandrequest.hh" +#include "command-request.hh" #include "time-description.hh" #include "staff-column.hh" diff --git a/lily/commandrequest.cc b/lily/command-request.cc similarity index 97% rename from lily/commandrequest.cc rename to lily/command-request.cc index 5cf0912417..769d522ba5 100644 --- a/lily/commandrequest.cc +++ b/lily/command-request.cc @@ -6,9 +6,9 @@ (c) 1997 Han-Wen Nienhuys */ -#include "commandrequest.hh" +#include "command-request.hh" #include "debug.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" void diff --git a/lily/complex-staff.cc b/lily/complex-staff.cc index bb13274449..661d8332ed 100644 --- a/lily/complex-staff.cc +++ b/lily/complex-staff.cc @@ -1,7 +1,7 @@ #include "complex-staff.hh" #include "complex-walker.hh" #include "score.hh" -#include "pscore.hh" +#include "p-score.hh" #include "staffsym.hh" #include "score-column.hh" diff --git a/lily/complex-walker.cc b/lily/complex-walker.cc index 0a76c81d0e..09773b1503 100644 --- a/lily/complex-walker.cc +++ b/lily/complex-walker.cc @@ -6,17 +6,17 @@ (c) 1997 Han-Wen Nienhuys */ -#include "musicalrequest.hh" +#include "musical-request.hh" #include "staff-column.hh" #include "voice.hh" -#include "pscore.hh" +#include "p-score.hh" #include "complex-staff.hh" #include "debug.hh" #include "voice-group-regs.hh" #include "voice-regs.hh" #include "complex-walker.hh" //#include "misc.hh" -#include "commandrequest.hh" +#include "command-request.hh" #include "walk-regs.hh" void diff --git a/lily/crescendo.cc b/lily/crescendo.cc new file mode 100644 index 0000000000..9b2a169631 --- /dev/null +++ b/lily/crescendo.cc @@ -0,0 +1,36 @@ +/* + crescendo.cc -- implement Crescendo + + source file of the LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + +#include "crescendo.hh" +#include "lookup.hh" +#include "paper-def.hh" + +Crescendo::Crescendo(int s) +{ + staff_size_i_ = s; + grow_dir_i_ =0; + dir_i_ = -1 ; +} + +Spanner* +Crescendo::do_break_at(PCol*, PCol*)const +{ + return new Crescendo(*this); +} + + +Molecule* +Crescendo::brew_molecule_p() const return m_p ; +{ + m_p = new Molecule; + Real w_f = width().length(); + Symbol s( paper()->lookup_l()->hairpin(w_f, grow_dir_i_ < 0) ); + m_p->add(Atom(s)); + int pos = (dir_i_ >0) ? staff_size_i_ + 4 : - 4 ; + m_p->translate(Offset(0,pos * paper()->internote())); +} diff --git a/lily/dynamic-reg.cc b/lily/dynamic-reg.cc index 88f0b502f4..0ea23ac689 100644 --- a/lily/dynamic-reg.cc +++ b/lily/dynamic-reg.cc @@ -7,7 +7,7 @@ */ #include "dynamic-reg.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" #include "text-item.hh" #include "lookup.hh" #include "paper-def.hh" diff --git a/lily/headreg.cc b/lily/headreg.cc index dc5d72d572..7f1a9bbae8 100644 --- a/lily/headreg.cc +++ b/lily/headreg.cc @@ -8,7 +8,7 @@ #include "headreg.hh" #include "paper-def.hh" #include "complex-walker.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" Notehead_register::Notehead_register() { diff --git a/lily/idealspacing.cc b/lily/idealspacing.cc index 3ceaff1e6d..805cb3bebb 100644 --- a/lily/idealspacing.cc +++ b/lily/idealspacing.cc @@ -1,7 +1,7 @@ #include "idealspacing.hh" -#include "pcol.hh" -#include "pscore.hh" -#include "pstaff.hh" +#include "p-col.hh" +#include "p-score.hh" +#include "p-staff.hh" #include "debug.hh" void diff --git a/lily/identifier.cc b/lily/identifier.cc index fbf806edf7..e4712f8a5a 100644 --- a/lily/identifier.cc +++ b/lily/identifier.cc @@ -49,9 +49,3 @@ Real_id::do_print() const mtor << *((Real_id*)this)->real(false)<< "\n"; } -void -Notetab_id::do_print() const -{ - mtor << "unknown" << "\n"; -} - diff --git a/lily/include/command-request.hh b/lily/include/command-request.hh new file mode 100644 index 0000000000..3d5a1eb18d --- /dev/null +++ b/lily/include/command-request.hh @@ -0,0 +1,117 @@ +/* + command-request.hh -- declare Non musical requests + + source file of the LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + + +#ifndef COMMANDREQUEST_HH +#define COMMANDREQUEST_HH + +#include "request.hh" +#include "varray.hh" + +/** Request which are assumed to be "happening" before the + musical requests. */ +struct Command_req : virtual Request { + REQUESTMETHODS(Command_req, command); + + virtual Measure_grouping_req * measuregrouping() { return 0; } + virtual Clef_change_req * clefchange() { return 0; } + virtual Key_change_req * keychange() { return 0; } + virtual Partial_measure_req * partial() { return 0; } + virtual Meter_change_req * meterchange() { return 0; } + virtual Bar_req *bar() { return 0; } + virtual Cadenza_req *cadenza() { return 0; } + virtual Timing_req*timing() { return 0; } +}; + + +/** Baseclass for meter/partial req. It has to be handled by + Staff_{walker,column} baseclass. */ +struct Timing_req : Command_req { + REQUESTMETHODS(Timing_req, timing); +}; + + +struct Partial_measure_req : Timing_req { + Moment duration_; + + Partial_measure_req(Moment); + REQUESTMETHODS(Partial_measure_req, partial); +}; + +/** + todo: allow C meter + */ +struct Meter_change_req : Timing_req { + int beats_i_, one_beat_i_; + + Meter_change_req(); + void set(int,int); + REQUESTMETHODS(Meter_change_req, meterchange); +}; + +/// toggle Cadenza mode +struct Cadenza_req : Timing_req { + /// turn on? + bool on_b_; + Cadenza_req(bool); + REQUESTMETHODS(Cadenza_req,cadenza); +}; + +/// check if we're at start of a measure. +struct Barcheck_req : Timing_req { + + REQUESTMETHODS(Barcheck_req,barcheck); +}; + +struct Measure_grouping_req: Timing_req { + Array beat_i_arr_; + Array elt_length_arr_; + + REQUESTMETHODS(Measure_grouping_req, measuregrouping); +}; + +struct Group_change_req : Command_req { + String newgroup_str_; + REQUESTMETHODS(Group_change_req, groupchange); +}; + +/** draw a (repeat)-bar. This something different than #Barcheck_req#, + the latter should only happen at the start of a measure. */ +struct Bar_req : Command_req { + String type_str_; + Bar_req(String); + int compare(const Bar_req&)const; + REQUESTMETHODS(Bar_req,bar); +}; +struct Terminate_voice_req : Command_req { + REQUESTMETHODS(Terminate_voice_req,terminate); +}; + +struct Group_feature_req : Command_req { + int stemdir_i_; + Group_feature_req(); + REQUESTMETHODS(Group_feature_req, groupfeature); +}; + + +struct Key_change_req : Command_req { + Array melodic_p_arr_; + + Key_change_req(); + Key_change_req(Key_change_req const&); + ~Key_change_req(); + REQUESTMETHODS(Key_change_req, keychange); +}; + +struct Clef_change_req : Command_req { + String clef_str_; + Clef_change_req(String); + REQUESTMETHODS(Clef_change_req, clefchange); +}; + +#endif // COMMANDREQUEST_HH diff --git a/lily/include/commandrequest.hh b/lily/include/commandrequest.hh index 71b8331661..e69de29bb2 100644 --- a/lily/include/commandrequest.hh +++ b/lily/include/commandrequest.hh @@ -1,117 +0,0 @@ -/* - commandrequest.hh -- declare Non musical requests - - source file of the LilyPond music typesetter - - (c) 1997 Han-Wen Nienhuys -*/ - - -#ifndef COMMANDREQUEST_HH -#define COMMANDREQUEST_HH - -#include "request.hh" -#include "varray.hh" - -/** Request which are assumed to be "happening" before the - musical requests. */ -struct Command_req : virtual Request { - REQUESTMETHODS(Command_req, command); - - virtual Measure_grouping_req * measuregrouping() { return 0; } - virtual Clef_change_req * clefchange() { return 0; } - virtual Key_change_req * keychange() { return 0; } - virtual Partial_measure_req * partial() { return 0; } - virtual Meter_change_req * meterchange() { return 0; } - virtual Bar_req *bar() { return 0; } - virtual Cadenza_req *cadenza() { return 0; } - virtual Timing_req*timing() { return 0; } -}; - - -/** Baseclass for meter/partial req. It has to be handled by - Staff_{walker,column} baseclass. */ -struct Timing_req : Command_req { - REQUESTMETHODS(Timing_req, timing); -}; - - -struct Partial_measure_req : Timing_req { - Moment duration_; - - Partial_measure_req(Moment); - REQUESTMETHODS(Partial_measure_req, partial); -}; - -/** - todo: allow C meter - */ -struct Meter_change_req : Timing_req { - int beats_i_, one_beat_i_; - - Meter_change_req(); - void set(int,int); - REQUESTMETHODS(Meter_change_req, meterchange); -}; - -/// toggle Cadenza mode -struct Cadenza_req : Timing_req { - /// turn on? - bool on_b_; - Cadenza_req(bool); - REQUESTMETHODS(Cadenza_req,cadenza); -}; - -/// check if we're at start of a measure. -struct Barcheck_req : Timing_req { - - REQUESTMETHODS(Barcheck_req,barcheck); -}; - -struct Measure_grouping_req: Timing_req { - Array beat_i_arr_; - Array elt_length_arr_; - - REQUESTMETHODS(Measure_grouping_req, measuregrouping); -}; - -struct Group_change_req : Command_req { - String newgroup_str_; - REQUESTMETHODS(Group_change_req, groupchange); -}; - -/** draw a (repeat)-bar. This something different than #Barcheck_req#, - the latter should only happen at the start of a measure. */ -struct Bar_req : Command_req { - String type_str_; - Bar_req(String); - int compare(const Bar_req&)const; - REQUESTMETHODS(Bar_req,bar); -}; -struct Terminate_voice_req : Command_req { - REQUESTMETHODS(Terminate_voice_req,terminate); -}; - -struct Group_feature_req : Command_req { - int stemdir_i_; - Group_feature_req(); - REQUESTMETHODS(Group_feature_req, groupfeature); -}; - - -struct Key_change_req : Command_req { - Array melodic_p_arr_; - - Key_change_req(); - Key_change_req(Key_change_req const&); - ~Key_change_req(); - REQUESTMETHODS(Key_change_req, keychange); -}; - -struct Clef_change_req : Command_req { - String clef_str_; - Clef_change_req(String); - REQUESTMETHODS(Clef_change_req, clefchange); -}; - -#endif // COMMANDREQUEST_HH diff --git a/lily/include/crescendo.hh b/lily/include/crescendo.hh new file mode 100644 index 0000000000..858cd44075 --- /dev/null +++ b/lily/include/crescendo.hh @@ -0,0 +1,27 @@ +/* + crescendo.hh -- declare Crescendo + + source file of the LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + + +#ifndef CRESCENDO_HH +#define CRESCENDO_HH + +#include "spanner.hh" + +class Crescendo : public Spanner { + int staff_size_i_; +public: + int grow_dir_i_; + int dir_i_; + Crescendo(int staff_size_i); +private: + Spanner* do_break_at( PCol*, PCol*) const; + Molecule*brew_molecule_p()const; + NAME_MEMBERS(Crescendo); +}; + +#endif // CRESCENDO_HH diff --git a/lily/include/identifier.hh b/lily/include/identifier.hh index aa8d110012..6312582bf0 100644 --- a/lily/include/identifier.hh +++ b/lily/include/identifier.hh @@ -12,7 +12,6 @@ #include "symtable.hh" #include "input-staff.hh" #include "input-music.hh" -#include "notename.hh" #include "lookup.hh" #include "script-def.hh" #include "request.hh" @@ -38,7 +37,6 @@ make_id_class(Symtables_id, Symtables, symtables); make_id_class(Staff_id, Input_staff, staff); make_id_class(M_chord_id, Music_general_chord, mchord); make_id_class(M_voice_id, Music_voice, mvoice); -make_id_class(Notetab_id, Notename_tab, notename_tab); make_id_class(Request_id, Request, request); #endif // IDENTIFIER_HH diff --git a/lily/include/identparent.hh b/lily/include/identparent.hh index 8071dcd4f5..a8b75b0fd3 100644 --- a/lily/include/identparent.hh +++ b/lily/include/identparent.hh @@ -34,7 +34,6 @@ struct Identifier { IDACCESSOR(Music_general_chord, mchord) IDACCESSOR(Lookup,lookup) IDACCESSOR(Real,real) - IDACCESSOR(Notename_tab, notename_tab) IDACCESSOR(Request, request) protected: diff --git a/lily/include/input-music.hh b/lily/include/input-music.hh index 1d7a8caa66..7a35bbfd19 100644 --- a/lily/include/input-music.hh +++ b/lily/include/input-music.hh @@ -61,7 +61,6 @@ struct Simple_music : Input_music { virtual Input_music *clone() const { return new Simple_music(*this); } - }; /// Complex_music consists of multiple voices @@ -76,7 +75,6 @@ struct Complex_music : Input_music { void concatenate(Complex_music*); virtual bool find_plet_start_bo(char c, Moment& moment_r); virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i); - }; diff --git a/lily/include/lexer.hh b/lily/include/lexer.hh index 6a9d21a98e..8a55f1a585 100644 --- a/lily/include/lexer.hh +++ b/lily/include/lexer.hh @@ -23,15 +23,14 @@ void set_lexer(); /// lexer with provisions for include files. struct My_flex_lexer : yyFlexLexer { - Array include_stack; - Assoc *the_id_tab; - Keyword_table * keytable; - Notename_tab * defaulttab; + Array include_stack_; + Assoc *identifier_assoc_p_; + Keyword_table * keytable_p_; 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); void LexerError(const char *); diff --git a/lily/include/midi-def.hh b/lily/include/midi-def.hh index 7a559adf58..1e04e5df4c 100644 --- a/lily/include/midi-def.hh +++ b/lily/include/midi-def.hh @@ -18,6 +18,10 @@ /** */ struct Midi_def { + // ugh! + static int den_i_s; + static int num_i_s; + /// output file name String outfile_str_; diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index 6f10572457..1aaf181d27 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -94,6 +94,17 @@ struct Midi_tempo : Midi_item { int per_minute_4_i_; }; +struct Midi_time : Midi_item { + /* *************** */ + Midi_time( int num_i, int den_i, int clocks_per_1_i ); + + virtual String str() const; + + int num_i_; + int den_i_; + int clocks_per_1_i_; +}; + struct Midi_track : Midi_chunk { /* *************** */ int number_i_; diff --git a/lily/include/midi-output.hh b/lily/include/midi-output.hh index 19457172cd..d5e9481f25 100644 --- a/lily/include/midi-output.hh +++ b/lily/include/midi-output.hh @@ -9,7 +9,7 @@ #ifndef MIDIOUTPUT_HH #define MIDIOUTPUT_HH -#include "pscore.hh" +#include "p-score.hh" struct Midi_output { Midi_output(Score* score_l, Midi_def* ); diff --git a/lily/include/musicalrequest.hh b/lily/include/musical-request.hh similarity index 91% rename from lily/include/musicalrequest.hh rename to lily/include/musical-request.hh index 208e3dc295..6d96117ff2 100644 --- a/lily/include/musicalrequest.hh +++ b/lily/include/musical-request.hh @@ -1,5 +1,5 @@ /* - musicalrequests.hh -- declare Musical requests + musical-request.hh -- declare Musical requests source file of the LilyPond music typesetter @@ -18,10 +18,12 @@ Base class only */ struct Musical_req : virtual Request { + virtual Skip_req* skip() { return 0; } virtual Dynamic_req* dynamic() { return 0; } virtual Absolute_dynamic_req * absdynamic() { return 0; } virtual Subtle_req * subtle() { return 0; } + virtual Span_dynamic_req * span_dynamic() { return 0; } REQUESTMETHODS(Musical_req, musical); }; @@ -137,7 +139,7 @@ struct Stem_req : Rhythmic_req { Requests to start or stop something. This type of request typically results in the creation of a #Spanner# */ -struct Span_req : Musical_req { +struct Span_req : virtual Musical_req { /// should the spanner start or stop, or is it unwanted? enum { NOSPAN, START, STOP @@ -149,8 +151,12 @@ struct Span_req : Musical_req { }; -/// request for backward plet generation -struct Plet_req : Request { +/** + request for backward plet generation. + + ugr. Place in hierarchy? + */ +struct Plet_req : virtual Request { char type_c_; int dur_i_; int type_i_; @@ -158,8 +164,6 @@ struct Plet_req : Request { REQUESTMETHODS(Plet_req,plet); }; -/** -*/ /** Start / stop a beam at this note. if #nplet# is set, the staff will try to put an appropriate number over the beam @@ -222,4 +226,11 @@ struct Absolute_dynamic_req : Dynamic_req { REQUESTMETHODS(Absolute_dynamic_req, absdynamic); }; +struct Span_dynamic_req : Dynamic_req, Span_req { + /// Grow or shrink the volume: 1=cresc, -1 = decresc + int dynamic_dir_i_; + Span_dynamic_req(); + REQUESTMETHODS(Span_dynamic_req, span_dynamic); +}; + #endif // MUSICALREQUESTS_HH diff --git a/lily/include/pcol.hh b/lily/include/p-col.hh similarity index 99% rename from lily/include/pcol.hh rename to lily/include/p-col.hh index 4fac246e49..2641e64008 100644 --- a/lily/include/pcol.hh +++ b/lily/include/p-col.hh @@ -20,7 +20,7 @@ \end{itemize} */ -struct PCol { +struct PCol { PointerList its; PointerList stoppers, starters; diff --git a/lily/include/pscore.hh b/lily/include/p-score.hh similarity index 98% rename from lily/include/pscore.hh rename to lily/include/p-score.hh index b7ad49c0e1..eeec67e2fb 100644 --- a/lily/include/pscore.hh +++ b/lily/include/p-score.hh @@ -5,8 +5,8 @@ #include "colhpos.hh" #include "varray.hh" -#include "pcol.hh" -#include "pstaff.hh" +#include "p-col.hh" +#include "p-staff.hh" /** all stuff which goes onto paper. notes, signs, symbols in a score can be grouped in two ways: diff --git a/lily/include/parseconstruct.hh b/lily/include/parseconstruct.hh index 7b9e3e3ec2..ff47bdcbad 100644 --- a/lily/include/parseconstruct.hh +++ b/lily/include/parseconstruct.hh @@ -17,7 +17,7 @@ void set_duration_mode(String s); void get_default_duration(int *); void set_default_octave(String); void set_plet(int,int); -Voice_element * get_note_element(String,int * ,int *); +Voice_element * get_note_element(Note_req * ,int *); Voice_element* get_rest_element(String,int *); Voice_element* get_word_element(Text_def*, int*); void add_requests( Voice_element*v, Array&req); diff --git a/lily/include/pstaff.hh b/lily/include/pstaff.hh deleted file mode 100644 index 50a7f0c719..0000000000 --- a/lily/include/pstaff.hh +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef PSTAFF_HH -#define PSTAFF_HH - -#include "proto.hh" -#include "plist.hh" -#include "item.hh" -#include "symbol.hh" - -/// items grouped horizontally -struct PStaff { - PScore * pscore_l_; - - - PointerList spans; - PointerList its; - - /* *************** */ - void add(Item*i); - PStaff(PScore*); - -private: - PStaff(PStaff const&); -}; - -#endif diff --git a/lily/include/slur.hh b/lily/include/slur.hh index 87f1fe855e..c8363075c4 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -25,8 +25,7 @@ struct Slur : Directional_spanner { void add(Notehead*); void set_default_dir(); - Spanner* do_break_at( PCol*, PCol*) const; - void process(); + Spanner* do_break_at( PCol*, PCol*) const; private: Molecule*brew_molecule_p()const; NAME_MEMBERS(Slur); diff --git a/lily/include/staffline.hh b/lily/include/staffline.hh index 9fbe3ec917..107d360c79 100644 --- a/lily/include/staffline.hh +++ b/lily/include/staffline.hh @@ -12,7 +12,7 @@ #include "plist.hh" #include "varray.hh" #include "glob.hh" -#include "pstaff.hh" +#include "p-staff.hh" /// one broken line of staff. struct Line_of_staff { diff --git a/lily/input-music.cc b/lily/input-music.cc index f1047e8bf9..8ccc9071b8 100644 --- a/lily/input-music.cc +++ b/lily/input-music.cc @@ -1,7 +1,7 @@ #include "debug.hh" #include "input-music.hh" #include "voice.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" #include "voice-element.hh" void diff --git a/lily/key-reg.cc b/lily/key-reg.cc index 84b0e268c6..24189a532b 100644 --- a/lily/key-reg.cc +++ b/lily/key-reg.cc @@ -11,10 +11,10 @@ #include "time-description.hh" #include "key-reg.hh" #include "key-item.hh" -#include "commandrequest.hh" +#include "command-request.hh" #include "staff-column.hh" #include "local-key-reg.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" Key_register::Key_register() { diff --git a/lily/lexer.l b/lily/lexer.l index 10c5ee6b03..29738a70aa 100644 --- a/lily/lexer.l +++ b/lily/lexer.l @@ -4,7 +4,6 @@ #include "string.hh" #include "string-convert.hh" -#include "notename.hh" #include "lexer.hh" #include "varray.hh" #include "parser.hh" @@ -14,6 +13,11 @@ #include "main.hh" #include "identparent.hh" +#define start_quote() \ + yy_push_state(quote);\ + yylval.string = new String + + %} %option c++ @@ -35,8 +39,8 @@ A [a-zA-Z] AA {A}|_ N [0-9] AN {AA}|{N} -PUNCT [?!,.:;] -ACCENT [\\'"^] +PUNCT [?!,.:;'] +ACCENT \\[`'"^] NATIONAL [\241-\377] TEX {AA}|-|{PUNCT}|{ACCENT}|{NATIONAL} @@ -49,8 +53,6 @@ OPTSIGN !? PITCHMOD ['`]*{OPTSIGN} RESTNAME r|s|p NOTECOMMAND \\{WORD} -NOTENAME [a-z]+ -UNOTENAME [A-Z][a-z]* DOTS \.+ LYRICS {TEX}+ COMMENT [%#].*\n @@ -71,16 +73,18 @@ COMMENT [%#].*\n mtor << "rest:"<< yylval.string; return RESTNAME; } -{UNOTENAME} { - int *p=yylval.ii; - return ret_notename(p, YYText(), -1); -} +{ALPHAWORD} { + String str = YYText(); + mtor << "word: " << str<< eol; + Identifier * id = lookup_identifier(str); + if (id) { + yylval.id = id; + return id->token_code_i_; + } -{NOTENAME} { - int *p=yylval.ii; - return ret_notename(p, YYText(), 0); + yylval.string=new String( str ); + return STRING; } - {NOTECOMMAND} { String c = YYText() +1; mtor << "\\word: " << YYText()+1<{PITCHMOD} { - const char *s = YYText(); - mtor << "pitchmod:"<< YYText()<{DOTS} { yylval.i = strlen(YYText()); return DOTS; @@ -119,28 +117,29 @@ COMMENT [%#].*\n \$ { yy_pop_state(); } -\"[^"]*\" { - String s (YYText()+1); - s = s.left_str(s.length_i()-1); - yylval.string = new String(s); - return STRING; +\" { + start_quote(); } . { return yylval.c = YYText()[0]; } + \" { - yy_push_state(quote); + start_quote(); } -[^"]* { - yylval.string = new String (YYText()); +[^"]+ { + *yylval.string += YYText(); } \" { - mtor << "quoted string\n"; + mtor << "quoted string: `" << *yylval.string << "'\n"; yy_pop_state(); return STRING; } +\" { + start_quote(); +} {DOTS} { yylval.i = strlen(YYText()); return DOTS; @@ -157,7 +156,9 @@ COMMENT [%#].*\n return l; /* let's try passing tex's typesetting macros like \ss \alpha \c */ - String* str_p = new String(YYText());//huh? + String* str_p = new String(YYText()); + yylval.string=str_p; + mtor << "\\word: `" << *str_p << "'\n"; return STRING; /* and skip identifiers... @@ -169,16 +170,12 @@ COMMENT [%#].*\n String *sp = new String( c); yylval.string=sp; + return STRING; */ } -\"[^"]*\" { - String s (YYText()+1); - s = s.left_str(s.length_i()-1); - yylval.string = new String(s); - return STRING; -} {LYRICS} { + /* ugr. This sux. */ String s (YYText()); int i = 0; while ((i=s.index_i("_")) != -1) // change word binding "_" to " " @@ -189,6 +186,7 @@ COMMENT [%#].*\n s = s.left_str(i+2) + " " + s.right_str(s.length_i()-i-2); } yylval.string = new String(s); + mtor << "lyric : `" << s << "'\n"; return STRING; } \| { diff --git a/lily/linespace.cc b/lily/linespace.cc index a7bfa1df9b..750487cff7 100644 --- a/lily/linespace.cc +++ b/lily/linespace.cc @@ -1,6 +1,6 @@ #include #include "linespace.hh" -#include "pcol.hh" +#include "p-col.hh" #include "debug.hh" #include "qlp.hh" #include "unionfind.hh" diff --git a/lily/local-key-item.cc b/lily/local-key-item.cc index a0152c9f3c..ff0814f216 100644 --- a/lily/local-key-item.cc +++ b/lily/local-key-item.cc @@ -3,7 +3,7 @@ #include "scalar.hh" #include "lookup.hh" #include "paper-def.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" #include "notehead.hh" #include "misc.hh" diff --git a/lily/local-key-reg.cc b/lily/local-key-reg.cc index f13ec98b9f..ddbd8dc5f8 100644 --- a/lily/local-key-reg.cc +++ b/lily/local-key-reg.cc @@ -4,8 +4,8 @@ (c) 1997 Han-Wen Nienhuys */ -#include "musicalrequest.hh" -#include "commandrequest.hh" +#include "musical-request.hh" +#include "command-request.hh" #include "local-key-reg.hh" #include "local-key-item.hh" #include "complex-walker.hh" diff --git a/lily/lyric-item.cc b/lily/lyric-item.cc index cb8c7547e4..6e3fdf02b8 100644 --- a/lily/lyric-item.cc +++ b/lily/lyric-item.cc @@ -1,4 +1,4 @@ -#include "musicalrequest.hh" +#include "musical-request.hh" #include "paper-def.hh" #include "lyric-item.hh" #include "stem.hh" diff --git a/lily/lyric-staff.cc b/lily/lyric-staff.cc index 8414f4ecaf..77d276187c 100644 --- a/lily/lyric-staff.cc +++ b/lily/lyric-staff.cc @@ -1,11 +1,11 @@ -#include "musicalrequest.hh" +#include "musical-request.hh" #include "voice.hh" #include "staff-walker.hh" #include "debug.hh" #include "staff.hh" #include "lyric-staff.hh" #include "lyric-walker.hh" -#include "pscore.hh" +#include "p-score.hh" void Lyric_staff::set_output(PScore*pscore_l) diff --git a/lily/lyric-walker.cc b/lily/lyric-walker.cc index 614e258be7..6643215ea3 100644 --- a/lily/lyric-walker.cc +++ b/lily/lyric-walker.cc @@ -6,9 +6,9 @@ (c) 1997 Jan Nieuwenhuizen */ -#include "musicalrequest.hh" +#include "musical-request.hh" #include "voice.hh" -#include "pscore.hh" +#include "p-score.hh" #include "lyric-staff.hh" #include "lyric-walker.hh" #include "debug.hh" diff --git a/lily/meter-reg.cc b/lily/meter-reg.cc index a27737c076..f15e5ddb09 100644 --- a/lily/meter-reg.cc +++ b/lily/meter-reg.cc @@ -8,7 +8,7 @@ #include "meter-reg.hh" #include "meter.hh" -#include "commandrequest.hh" +#include "command-request.hh" Meter_register::Meter_register() diff --git a/lily/midi-def.cc b/lily/midi-def.cc index 5bc6b8fa78..163105ab3c 100644 --- a/lily/midi-def.cc +++ b/lily/midi-def.cc @@ -16,6 +16,11 @@ // destructor // routines, alphasorted +// statics Midi_def +// ugh +int Midi_def::den_i_s = 4; +int Midi_def::num_i_s = 4; + Midi_def::Midi_def() { set_tempo( Moment( 1, 4 ), 60 ); diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 9a63d93e5a..2bc00a3a0f 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -8,13 +8,13 @@ #include #include "proto.hh" #include "plist.hh" -#include "pcol.hh" +#include "p-col.hh" #include "debug.hh" #include "misc.hh" #include "string.hh" #include "string-convert.hh" #include "request.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" #include "voice.hh" #include "midi-item.hh" #include "midi-stream.hh" @@ -161,6 +161,24 @@ Midi_tempo::str() const return String_convert::hex2bin_str( str ); } +Midi_time::Midi_time( int num_i, int den_i, int clocks_per_1_i ) +{ + num_i_ = num_i; + den_i_ = den_i; + clocks_per_1_i_ = clocks_per_1_i; +} + +String +Midi_time::str() const +{ + String str = "ff5804"; + str += String_convert::i2hex_str( num_i_, 2, '0' ); + str += String_convert::i2hex_str( intlog2( den_i_ ) , 2, '0' ); + str += String_convert::i2hex_str( clocks_per_1_i_, 2, '0' ); + str += String_convert::i2hex_str( 8, 2, '0' ); + return String_convert::hex2bin_str( str ); +} + Midi_text::Midi_text( Midi_text::Type type, String text_str ) { type_ = type; @@ -195,7 +213,8 @@ Midi_track::Midi_track( int number_i ) number_i_ = number_i; - char const* data_ch_c_l = "00" "ff58" "0404" "0218" "08" + char const* data_ch_c_l = "" +// "00" "ff58" "0404" "0218" "08" // "00" "ff51" "0307" "a120" // why a key at all, in midi? // key: C diff --git a/lily/midi-output.cc b/lily/midi-output.cc index ec3b727400..9d2407244c 100644 --- a/lily/midi-output.cc +++ b/lily/midi-output.cc @@ -23,7 +23,7 @@ #include "midi-walker.hh" #include "midi-item.hh" #include "staff-column.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" Midi_output::Midi_output(Score* score_l, Midi_def* midi_l ) @@ -74,6 +74,9 @@ Midi_output::do_staff(Staff*st_l,int track_i) Midi_tempo midi_tempo( midi_l_->get_tempo_i( Moment( 1, 4 ) ) ); midi_track.add( Moment( 0.0 ), &midi_tempo ); + Midi_time midi_time( Midi_def::num_i_s, Midi_def::den_i_s, 18 ); + midi_track.add( Moment( 0.0 ), &midi_time ); + for (Midi_walker w (st_l, &midi_track); w.ok(); w++) w.process_requests(); @@ -89,24 +92,38 @@ Midi_output::header() // perhaps multiple text events? String str = String( "Creator: " ) + get_version() + "\n"; - str += "Generated, at "; - str += ctime( &t ); - str += ", from musical definition: " + infile_str_g; - str += "\n"; Midi_text creator( Midi_text::TEXT, str ); midi_track.add( Moment( 0.0 ), &creator ); + str = "Generated, at "; + str += ctime( &t ); + str = str.left_str( str.length_i() - 1 ); + str += ",\n"; + Midi_text generate( Midi_text::TEXT, str ); + midi_track.add( Moment( 0.0 ), &generate ); + + str = "from musical definition: " + infile_str_g + "\n"; + Midi_text from( Midi_text::TEXT, str ); + midi_track.add( Moment( 0.0 ), &from ); + + // set track name + Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( 0, 0, '0' ) ); + midi_track.add( Moment( 0.0 ), &track_name ); + struct tm* tm_l = gmtime( &t ); String year_str = String_convert::i2dec_str( 1900 + tm_l->tm_year, 4, '0' ); // your copyleft here - str = " Copyleft (o) " + year_str; - str += " Han-Wen Nienhuys , " - " Jan Nieuwenhuizen \n"; - + str = " Copyleft (o) " + year_str + "by\n"; Midi_text copyleft( Midi_text::COPYRIGHT, str ); midi_track.add( Moment( 0.0 ), ©left ); + + str = " Han-Wen Nienhuys ," + " Jan Nieuwenhuizen \n"; + + Midi_text authors( Midi_text::COPYRIGHT, str ); + midi_track.add( Moment( 0.0 ), &authors ); *midi_stream_l_ << midi_track; } diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc index 4a1674c7f7..88cd6b724d 100644 --- a/lily/midi-walker.cc +++ b/lily/midi-walker.cc @@ -6,8 +6,8 @@ (c) 1997 Han-Wen Nienhuys , Jan Nieuwenhuizen */ -#include "musicalrequest.hh" -#include "pscore.hh" +#include "musical-request.hh" +#include "p-score.hh" #include "staff.hh" #include "midi-walker.hh" #include "midi-item.hh" diff --git a/lily/molecule.cc b/lily/molecule.cc index c52fdc7b32..bfd298bfac 100644 --- a/lily/molecule.cc +++ b/lily/molecule.cc @@ -30,6 +30,10 @@ Atom::Atom(Symbol s) String Atom::TeXstring() const { + /* infinity checks. */ + assert( abs(off.x) < 100 CM); + assert( abs(off.y) < 100 CM); + // whugh.. Hard coded... String s("\\placebox{%}{%}{%}"); Array a; diff --git a/lily/request.cc b/lily/musical-request.cc similarity index 95% rename from lily/request.cc rename to lily/musical-request.cc index d6bae873b7..be9667c1a0 100644 --- a/lily/request.cc +++ b/lily/musical-request.cc @@ -6,7 +6,7 @@ (c) 1997 Han-Wen Nienhuys */ -#include "musicalrequest.hh" +#include "musical-request.hh" #include "misc.hh" #include "debug.hh" #include "script-def.hh" @@ -342,3 +342,18 @@ Absolute_dynamic_req::Absolute_dynamic_req() { loudness_ = MF; } + + +Span_dynamic_req::Span_dynamic_req() +{ + dynamic_dir_i_ = 0; +} + +void +Span_dynamic_req::do_print()const +{ +#ifndef NPRINT + Span_req::do_print(); + mtor << "louder/louder: " <; - defaulttab = 0; + keytable_p_ = new Keyword_table(the_key_tab); + identifier_assoc_p_ = new Assoc; errorlevel_i_ = 0; } int My_flex_lexer::lookup_keyword(String s) { - return keytable->lookup(s); + return keytable_p_->lookup(s); } Identifier* My_flex_lexer::lookup_identifier(String s) { - if (!the_id_tab->elt_query(s)) + if (!identifier_assoc_p_->elt_query(s)) return 0; - return (*the_id_tab)[s]; + return (*identifier_assoc_p_)[s]; } char const* My_flex_lexer::here_ch_c_l() { - return include_stack.top()->sourcefile_l_->ch_c_l() + yyin->tellg(); + return include_stack_.top()->sourcefile_l_->ch_c_l() + yyin->tellg(); } void My_flex_lexer::add_identifier(Identifier*i) { delete lookup_identifier(i->name); - (*the_id_tab)[i->name] = i; + (*identifier_assoc_p_)[i->name] = i; } My_flex_lexer::~My_flex_lexer() { - delete keytable; - delete defaulttab; - for (Assoc_iter ai(*the_id_tab); ai.ok(); ai++) { + delete keytable_p_; + + for (Assoc_iter + ai(*identifier_assoc_p_); ai.ok(); ai++) { mtor << "deleting: " << ai.key()<<'\n'; delete ai.val(); } - delete the_id_tab; + delete identifier_assoc_p_; } void My_flex_lexer::print_declarations()const { - for (Assoc_iter ai(*the_id_tab); ai.ok(); ai++) { + for (Assoc_iter ai(*identifier_assoc_p_); ai.ok(); ai++) { ai.val()->print(); } } @@ -140,13 +115,13 @@ My_flex_lexer::print_declarations()const String My_flex_lexer::spot()const { - return include_stack.top()->name + ": " + String( lineno() ); + return include_stack_.top()->name + ": " + String( lineno() ); } void My_flex_lexer::LexerError(const char *s) { - if (lexer->include_stack.empty()) { + if (lexer->include_stack_.empty()) { *mlog << "error at EOF" << s << '\n'; } else { char const* ch_c_l = here_ch_c_l(); @@ -165,14 +140,14 @@ My_flex_lexer::LexerError(const char *s) void My_flex_lexer::new_input(String s) { - if (!include_stack.empty()) { - include_stack.top()->line = lineno(); + if (!include_stack_.empty()) { + include_stack_.top()->line = lineno(); // should this be saved at all? - include_stack.top()->defined_ch_c_l_ = defined_ch_c_l; + include_stack_.top()->defined_ch_c_l_ = defined_ch_c_l; } Input_file *newin = new Input_file(s); - include_stack.push(newin); + include_stack_.push(newin); switch_streams(newin->is); yylineno = 1; @@ -182,12 +157,12 @@ My_flex_lexer::new_input(String s) bool My_flex_lexer::close_input() { - Input_file *old = include_stack.pop(); + Input_file *old = include_stack_.pop(); bool ok = true; - if (include_stack.empty()) { + if (include_stack_.empty()) { ok = false; } else { - Input_file *i = include_stack.top(); + Input_file *i = include_stack_.top(); switch_streams(i->is); yylineno = i->line; defined_ch_c_l = i->defined_ch_c_l_; diff --git a/lily/note.cc b/lily/note.cc index 496d892e5b..475e3e08ba 100644 --- a/lily/note.cc +++ b/lily/note.cc @@ -6,10 +6,10 @@ #include "string.hh" #include "real.hh" #include "debug.hh" -#include "musicalrequest.hh" -#include "commandrequest.hh" +#include "musical-request.hh" +#include "command-request.hh" #include "voice.hh" -#include "notename.hh" + #include "identparent.hh" #include "varray.hh" #include "text-def.hh" @@ -77,30 +77,11 @@ parse_octave (const char *a, int &j, int &oct) } } -void -parse_pitch( const char *a, Melodic_req* mel_l) -{ - int j=0; - - // octave - mel_l->octave_i_ = default_octave; - parse_octave(a,j,mel_l->octave_i_); - - // accidental - mel_l->forceacc_b_ = false; - - if (a[j] == '!'){ - mel_l->forceacc_b_ = true; - j++; - } -} - Voice_element * -get_note_element(String pitch, int * notename, int * duration ) +get_note_element(Note_req *rq, int * duration ) { Voice_element*v = new Voice_element; v->defined_ch_c_l_ = defined_ch_c_l; - int dur = duration[0]; int dots = duration[1]; @@ -115,12 +96,6 @@ get_note_element(String pitch, int * notename, int * duration ) if ( !defined_ch_c_l ) defined_ch_c_l = lexer->here_ch_c_l(); - Note_req * rq = new Note_req; - rq->notename_i_ =notename[0]; - rq->accidental_i_ = notename[1]; - parse_pitch(pitch, rq); - rq->octave_i_ += notename[2]; - rq->balltype = dur; rq->dots = dots; rq->plet_factor = Moment(default_plet_dur, default_plet_type); diff --git a/lily/notehead.cc b/lily/notehead.cc index 4d0157abe9..fb0c1166c1 100644 --- a/lily/notehead.cc +++ b/lily/notehead.cc @@ -5,7 +5,7 @@ #include "paper-def.hh" #include "lookup.hh" #include "molecule.hh" -#include "musicalrequest.hh" +#include "musical-request.hh" diff --git a/lily/notename.cc b/lily/notename.cc index e6d62644b2..99abaf605f 100644 --- a/lily/notename.cc +++ b/lily/notename.cc @@ -29,6 +29,8 @@ Notename_tab::set(int l, int s, String n) notetab[l * 5 + s +2] = n; } /* *************** */ + +#if 0 void My_flex_lexer::set(Notename_tab *n) { @@ -45,3 +47,4 @@ My_flex_lexer::lookup_notename(int &large, int &small, String s) defaulttab->lookup(large, small, s); } +#endif diff --git a/lily/pcol.cc b/lily/p-col.cc similarity index 96% rename from lily/pcol.cc rename to lily/p-col.cc index 4f1b65dcd7..2bfa097431 100644 --- a/lily/pcol.cc +++ b/lily/p-col.cc @@ -1,6 +1,6 @@ -#include "pcol.hh" -#include "pscore.hh" -#include "pstaff.hh" +#include "p-col.hh" +#include "p-score.hh" +#include "p-staff.hh" #include "debug.hh" Interval diff --git a/lily/pscore.cc b/lily/p-score.cc similarity index 99% rename from lily/pscore.cc rename to lily/p-score.cc index 989a0f92d7..582a3148ef 100644 --- a/lily/pscore.cc +++ b/lily/p-score.cc @@ -6,7 +6,7 @@ #include "molecule.hh" #include "dimen.hh" #include "scoreline.hh" -#include "pscore.hh" +#include "p-score.hh" #include "tex-stream.hh" #include "item.hh" #include "break.hh" diff --git a/lily/pstaff.cc b/lily/p-staff.cc similarity index 87% rename from lily/pstaff.cc rename to lily/p-staff.cc index ce7f7b0da0..f8ba2bb146 100644 --- a/lily/pstaff.cc +++ b/lily/p-staff.cc @@ -1,4 +1,4 @@ -#include "pstaff.hh" +#include "p-staff.hh" #include "molecule.hh" PStaff::PStaff(PScore*ps) diff --git a/lily/parser.y b/lily/parser.y index ebec63fbef..bc8876b5e4 100644 --- a/lily/parser.y +++ b/lily/parser.y @@ -13,8 +13,8 @@ #include "parseconstruct.hh" #include "dimen.hh" #include "identifier.hh" -#include "commandrequest.hh" -#include "musicalrequest.hh" +#include "command-request.hh" +#include "musical-request.hh" #include "voice-element.hh" #ifndef NDEBUG @@ -32,90 +32,127 @@ int fatal_error_i = 0; %union { - Request * request; - Real real; - Identifier *id; - Voice *voice; - Voice_element *el; - String *string; - const char *consstr; - Paper_def *paper; - Midi_def* midi; - Input_music *music; - Music_general_chord *chord; - Music_voice *mvoice; - int i; - char c; - int ii[10]; - Moment *moment; - + Array *melreqvec; Array * strvec; Array *intvec; - Array *melreqvec; - Input_staff *staff; + Box *box; + Identifier *id; + Input_music *music; Input_score *score; - Symtables * symtables; - Symtable * symtable; - Symbol * symbol; - Lookup*lookup; + Input_staff *staff; Interval *interval; - Box *box; - Notename_tab *notename_tab; + Lookup*lookup; + Melodic_req * melreq; + Midi_def* midi; + Moment *moment; + Music_general_chord *chord; + Music_voice *mvoice; + Note_req *notereq; + Paper_def *paper; + Real real; + Request * request; Script_def * script; + String *string; + Symbol * symbol; + Symtable * symtable; + Symtables * symtables; Text_def * textdef; + Voice *voice; + Voice_element *el; + char c; + const char *consstr; + int i; + int ii[10]; } -%token VOICE STAFF SCORE TITLE BAR OUTPUT MULTIVOICE DYNAMIC -%token CM_T IN_T PT_T MM_T PAPER WIDTH METER UNITSPACE SKIP COMMANDS COMMAND -%token GEOMETRIC START_T DURATIONCOMMAND OCTAVECOMMAND -%token KEY CLEF TABLE VOICES STEM -%token PARTIAL MUSIC GROUPING CADENZA -%token END SYMBOLTABLES TEXID TABLE NOTENAMES SCRIPT TEXTSTYLE PLET -%token GOTO -%token MIDI TEMPO - -%token IDENTIFIER REAL_IDENTIFIER REQUEST_IDENTIFIER -%token PITCHMOD DURATION RESTNAME -%token NOTENAME -%token REAL -%token STRING - -%token DOTS INT -%type unit -%type pitch_list -%type open_request_parens close_request_parens close_plet_parens -%type declaration -%type declarable_identifier -%type paper_block paper_body -%type midi_block midi_body -%type dim real -%type default_duration explicit_duration notemode_duration mudela_duration -%type notename -%type duration_length -%type voice_elt full_element lyrics_elt command_elt - -%type score_block score_body -%type staff_block staff_init staff_body -%type int -%type intastint_list -%type post_request pre_request command_req -%type pitchmod -%type music -%type music_chord music_chord_body - -%type music_voice_body music_voice - -%type dinterval -%type box -%type symtable symtable_body -%type symtables symtables_body -%type symboldef -%type notename_tab notename_tab_body -%type script_dir -%type