--- /dev/null
+#!/bin/sh
+# cpgento
+#
+
+if test $# -ne 1
+then
+ echo "Usage: "
+ echo " cpgento LOCATION, e.g.:";
+ echo
+ echo " cpgento /mnt/aix/usr/src/lily"
+ echo " CP=rcp cpgento fred@pcnov095.win.tue.nl:music/lily"
+ exit 1
+fi
+
+MAKE=${MAKE:-make}
+CP=${CP:-cp}
+
+genlily="out/parser.hh out/parser.cc out/lexer.cc"
+echo generating $genlily ...
+$MAKE -C lily $genlily
+
+genm2m="out/midi-parser.hh out/midi-parser.cc out/midi-lexer.cc"
+echo generating $genm2m ...
+$MAKE -C m2m $genm2m
+
+lilydir=`pwd | sed "s/.*\///"`
+todir=$1/$lilydir
+echo "copying $lilydir -> $todir"
+
+cpto() {
+ name=$1
+ tostuff=$todir/$name/out
+ genstuff="$2"
+ if [ "$CP" = "cp" -a \! -d $tostuff ]
+ then
+ echo mkdir -p $tostuff
+ mkdir -p $tostuff
+ fi
+ echo $CP $genstuff $tostuff
+ (cd $name; $CP $genstuff $tostuff)
+}
+
+cpto lily "$genlily"
+cpto m2m "$genm2m"
+
+# if you cannot gen the above, you-ll probably want:
+flexlexerh=/usr/include/FlexLexer.h
+cpto lib $flexlexerh
+
--- /dev/null
+//
+// m2m.hh -- generic m2m include file
+//
+// copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
+
+#ifndef M2M_HH
+#define M2M_HH
+
+// yes, i know this hurts the dependency calc, however,
+// having includes in headers sucks, and long trial and error
+// include lists also suck.
+// if you want less dependecies, break lib/exe down in smaller
+// modules.
+
+#include <assert.h>
+#include <iostream.h>
+#include <fstream.h>
+#include <limits.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "proto.hh"
+#include "plist.hh"
+#include "debug.hh"
+#ifdef mtor
+#undef mtor
+#endif
+
+#include "string.hh"
+#include "string-convert.hh"
+
+#include "lgetopt.hh"
+
+#include "moment.hh"
+#include "duration.hh"
+#include "input-file.hh"
+#include "source-file.hh"
+#include "source.hh"
+
+// mustn-t do, these get touched!
+// #include "fversion.hh"
+// #include "version.hh"
+
+#include "midi-global.hh"
+
+#include "lily-stream.hh"
+#include "midi-event.hh"
+#include "midi-main.hh"
+#include "midi-score.hh"
+#include "midi-track.hh"
+#include "midi-voice.hh"
+#include "my-midi-lexer.hh"
+#include "my-midi-parser.hh"
+#include "track-column.hh"
+
+#endif // M2M_HH
+
--- /dev/null
+//
+// lily-stream.cc
+//
+// source file of the LilyPond music typesetter
+//
+// (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+
+// should i be named Mudela_stream?
+
+#include "m2m.hh"
+
+Lily_stream::Lily_stream( String filename_str )
+{
+ filename_str_ = filename_str;
+ os_p_ = 0;
+ indent_i_ = 0;
+ comment_mode_bo_ = false;
+ column_i_ = 0;
+ wrap_column_i_ = 78;
+ open();
+ header();
+}
+
+Lily_stream::~Lily_stream()
+{
+ delete os_p_;
+ if ( indent_i_ )
+ warning( "lily indent level: " + String( indent_i_ ), 0 );
+}
+
+Lily_stream&
+Lily_stream::operator <<( String str )
+{
+ while ( str.length_i() ) {
+ int max_i = wrap_column_i_ - column_i_;
+ String line = str.left_str( max_i );
+
+ while ( max_i && ( max_i < line.length_i() )
+ && ( isalnum( line[ max_i ] )
+ || ( line[ max_i ] == '\\' ) ) )
+ max_i--;
+ if ( max_i )
+ line = str.left_str( max_i + 1 );
+ else // cannot break neatly...
+ max_i = wrap_column_i_ - column_i_ - 1;
+
+ str = str.mid_str( max_i + 1, INT_MAX );
+ *os_p_ << line;
+ check_comment( line );
+ column_i_ += line.length_i();
+ if ( column_i_ >= wrap_column_i_ ) {
+ //brr.
+ if ( comment_mode_bo_ )
+ str = "%" + str;
+ newline();
+ }
+ }
+ return *this;
+}
+
+Lily_stream&
+Lily_stream::operator <<( Midi_event& midi_event_r )
+{
+ midi_event_r.output_mudela( *this, false );
+ return *this;
+}
+
+void
+Lily_stream::check_comment( String str )
+{
+ int newline_i = str.index_last_i( '\n' );
+ if ( newline_i != -1 ) {
+ str = str.mid_str( newline_i +1, INT_MAX );
+ comment_mode_bo_ = false;
+ }
+ if ( str.index_i( '%' ) != -1 )
+ comment_mode_bo_ = true;
+}
+
+void
+Lily_stream::header()
+{
+ *os_p_ << "% Creator: " << version_str() << "\n";
+ *os_p_ << "% Automatically generated, at ";
+ time_t t( time( 0 ) );
+ *os_p_ << ctime( &t );
+ *os_p_ << "% from input file: ";
+ *os_p_ << midi_parser_l_g->filename_str_;
+ *os_p_ << "\n\n";
+}
+
+void
+Lily_stream::indent()
+{
+ indent_i_++;
+ newline();
+}
+
+void
+Lily_stream::newline()
+{
+ *os_p_ << "\n" << String( '\t', indent_i_ );
+ column_i_ = indent_i_ * 8;
+ comment_mode_bo_ = false;
+}
+
+void
+Lily_stream::open()
+{
+ os_p_ = new ofstream( filename_str_ );
+ if ( !*os_p_ )
+ error ( "can't open `" + filename_str_ + "\'", 0 );
+}
+
+void
+Lily_stream::tnedni()
+{
+ assert( indent_i_ > 0 );
+ indent_i_--;
+ newline();
+}
+