From 4f614af85a13f7a74e96d6b4dbc38a0bfbca1136 Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Sat, 5 Oct 2002 00:08:14 +0000
Subject: [PATCH] * lily/include/midi-stream.hh: use stdio.h iso. iostream.h

* lily/parser.yy: remove \dynamicscript.

* ly/dynamic-scripts-init.ly: redo the dynamic scripts
definitions.
---
 ChangeLog                      |  7 ++++++
 lily/dynamic-engraver.cc       | 10 ++++----
 lily/dynamic-performer.cc      | 11 +++------
 lily/event-chord-iterator.cc   |  2 +-
 lily/include/midi-stream.hh    |  4 +--
 lily/include/music.hh          |  2 +-
 lily/midi-stream.cc            | 14 ++++++++---
 lily/music.cc                  | 14 +++++++++++
 lily/my-lily-lexer.cc          |  2 --
 lily/parser.yy                 | 12 ---------
 lily/span-dynamic-performer.cc |  5 ++--
 ly/dynamic-scripts-init.ly     | 45 +++++++++++++++++++---------------
 scm/music-types.scm            |  9 ++++++-
 13 files changed, 80 insertions(+), 57 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 71699b26c6..f8268e65eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2002-10-05  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
 
+	* lily/include/midi-stream.hh: use stdio.h iso. iostream.h
+
+	* lily/parser.yy: remove \dynamicscript.
+
+	* ly/dynamic-scripts-init.ly: redo the dynamic scripts
+	definitions. 
+
 	* python/midi.c (midi_error): take two arguments.
 
 	* Merge 1.6.5 changes:
diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc
index 1bad82b1f6..660efc4921 100644
--- a/lily/dynamic-engraver.cc
+++ b/lily/dynamic-engraver.cc
@@ -95,11 +95,11 @@ Dynamic_engraver::start_translation_timestep ()
 bool
 Dynamic_engraver::try_music (Music * m)
 {
-  if (m->is_mus_type ("dynamic-event"))
+  if (m->is_mus_type ("absolute-dynamic-event"))
     {
-  /*
-    TODO: probably broken.
-   */
+      /*
+	TODO: probably broken.
+      */
       script_req_ = m;
       return true;
     }
@@ -440,7 +440,7 @@ which takes care of vertical positioning.
 ",
 		  
 /* creats*/       "DynamicLineSpanner DynamicText Hairpin TextSpanner",
-/* accepts */     "text-script-event crescendo-event decrescendo-event",
+/* accepts */     "absolute-dynamic-event crescendo-event decrescendo-event",
 /* acks  */      "note-column-interface script-interface",
 /* reads */       "",
 /* write */       "");
diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc
index cb405a599a..a8940aa288 100644
--- a/lily/dynamic-performer.cc
+++ b/lily/dynamic-performer.cc
@@ -13,11 +13,10 @@
 
 /*
   TODO:
+  
     handle multiple events
- */
 
-/**
-   perform absolute (text) dynamics
+    perform absolute (text) dynamics
  */
 class Dynamic_performer : public Performer
 {
@@ -33,8 +32,6 @@ private:
   Audio_dynamic* audio_;
 };
 
-
-
 Dynamic_performer::Dynamic_performer ()
 {
   script_req_ = 0;
@@ -124,7 +121,7 @@ Dynamic_performer::try_music (Music* r)
 {
   if (!script_req_)
     {
-      if (r->is_mus_type ("dynamic-event")) // fixme.
+      if (r->is_mus_type ("absolute-dynamic-event")) // fixme.
 	{
 	  script_req_ = r;
 	  return true;
@@ -136,7 +133,7 @@ Dynamic_performer::try_music (Music* r)
 ENTER_DESCRIPTION(Dynamic_performer,
 		  /*descr*/		  "",
 		  /* creats*/ "",
-		  /* accepts */     "note-column-interface script-interface",
+		  /* accepts */     "absolute-dynamic-event",
 		  /* acks */ "",
 		  /*reads */"dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer",
 		  /*writes*/"");
diff --git a/lily/event-chord-iterator.cc b/lily/event-chord-iterator.cc
index ea9636d3b9..7216d2aa38 100644
--- a/lily/event-chord-iterator.cc
+++ b/lily/event-chord-iterator.cc
@@ -73,7 +73,7 @@ Event_chord_iterator::process (Moment m)
 
 	  bool gotcha = try_music (mus);
 	  if (!gotcha)
-	    mus->origin ()->warning (_f ("Junking event: `%s'", classname (mus)));
+	    mus->origin ()->warning (_f ("Junking event: `%s'", mus->name()));
 	}
     }
   skip (m);
diff --git a/lily/include/midi-stream.hh b/lily/include/midi-stream.hh
index 67a5bac7a1..879f744740 100644
--- a/lily/include/midi-stream.hh
+++ b/lily/include/midi-stream.hh
@@ -7,7 +7,7 @@
 #ifndef MIDI_STREAM_HH
 #define MIDI_STREAM_HH
 
-#include <iostream>
+#include <stdio.h>
 #include "string.hh"
 
 /// Midi outputfile
@@ -21,7 +21,7 @@ struct Midi_stream {
 
   void open ();
 
-  std::ostream* os_;
+  FILE *out_file_;
   String filename_string_;
 };
 
diff --git a/lily/include/music.hh b/lily/include/music.hh
index ac462525ee..d804cfa685 100644
--- a/lily/include/music.hh
+++ b/lily/include/music.hh
@@ -47,7 +47,7 @@ public:
   bool internal_is_music_type (SCM) const;
   
   virtual Pitch to_relative_octave (Pitch);
-
+  String name ()const;
   /// The duration of this piece of music
   virtual Moment get_length () const;
   virtual Moment start_mom () const;
diff --git a/lily/midi-stream.cc b/lily/midi-stream.cc
index 95f956dea5..a89622fa00 100644
--- a/lily/midi-stream.cc
+++ b/lily/midi-stream.cc
@@ -20,12 +20,12 @@
 Midi_stream::Midi_stream (String filename)
 {
   filename_string_ = filename;
-  os_ = open_file_stream (filename, std::ios::out|std::ios::binary);
+  out_file_ = fopen (filename.to_str0(), "wb");
 }
 
 Midi_stream::~Midi_stream ()
 {
-  close_file_stream (os_);
+  fclose (out_file_);
 }
 
 Midi_stream&
@@ -33,7 +33,10 @@ Midi_stream::operator << (String str)
 {
   Byte * b = str.get_bytes ();
   for (int sz = str.length (); sz--;)
-    *os_ << *b ++;
+    {
+      fputc (*b, out_file_);
+      b++;
+    }
   return *this;
 }
 
@@ -59,7 +62,10 @@ Midi_stream::operator << (Midi_item const& midi_c_r)
     {
       Byte * b = str.get_bytes ();
       for (int sz = str.length (); sz--;)
-	*os_ << *b++;
+	{
+	  fputc (*b, out_file_);
+	  b++;
+	}
     }
   
   return *this;
diff --git a/lily/music.cc b/lily/music.cc
index 2b85a4f423..4dcaee74a2 100644
--- a/lily/music.cc
+++ b/lily/music.cc
@@ -39,6 +39,20 @@ Music::internal_is_music_type (SCM k)const
   return scm_memq (k, ifs) != SCM_BOOL_F;
 }
 
+String
+Music::name ()const
+{
+  SCM nm = get_mus_property ("name");
+  if (gh_string_p (nm))
+    {
+      return ly_scm2string (nm);
+    }
+  else
+    {
+      return classname (this);
+    }
+}
+
 void
 Music::transpose (Pitch)
 {
diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc
index 925cc607d8..39ffb03042 100644
--- a/lily/my-lily-lexer.cc
+++ b/lily/my-lily-lexer.cc
@@ -7,7 +7,6 @@
 */
 
 #include <ctype.h>
-
 #include <sstream>
 
 #include "lily-proto.hh"
@@ -50,7 +49,6 @@ static Keyword_ent the_key_tab[]={
   {"default", DEFAULT},
   {"denies", DENIES},
   {"duration", DURATION},
-  {"dynamicscript", DYNAMICSCRIPT},
   {"grobdescriptions", GROBDESCRIPTIONS},
   {"figures",FIGURES},
   {"grace", GRACE},
diff --git a/lily/parser.yy b/lily/parser.yy
index ed572e7182..981c221005 100644
--- a/lily/parser.yy
+++ b/lily/parser.yy
@@ -159,7 +159,6 @@ yylex (YYSTYPE *s,  void * v)
 %token ALIAS
 %token APPLY
 %token ARPEGGIO
-%token DYNAMICSCRIPT
 %token ACCEPTS
 %token ALTERNATIVE
 %token BAR
@@ -1399,17 +1398,6 @@ verbose_event:
 		$$ = unsmob_music ($1)->clone ();
 		$$->set_spot (THIS->here_input ());
 	}
-	| DYNAMICSCRIPT embedded_scm {
-		/*
-			TODO: junkme, use text-type == dynamic
-		*/
-		Music *d = MY_MAKE_MUSIC("TextScriptEvent");
-		SCM dyn = ly_symbol2scm ("dynamic");
-		d->set_mus_property ("text-type" , dyn);
-		d->set_mus_property ("text", $2);
-		d->set_spot (THIS->here_input ());
-		$$ = d;
-	}
 	| SPANREQUEST bare_int STRING {
 
  		Music * sp = make_span_req ($3);
diff --git a/lily/span-dynamic-performer.cc b/lily/span-dynamic-performer.cc
index db2523d289..89f236ade3 100644
--- a/lily/span-dynamic-performer.cc
+++ b/lily/span-dynamic-performer.cc
@@ -173,7 +173,8 @@ Span_dynamic_performer::start_translation_timestep ()
 bool
 Span_dynamic_performer::try_music (Music* r)
 {
-  if (r->is_mus_type ("dynamic-event"))	// fixme.
+  if (r->is_mus_type ("crescendo-event")
+      || r->is_mus_type ("decrescendo-event"))
     {
       Direction d = to_dir (r->get_mus_property ("span-direction"));
       span_req_l_drul_[d] = r;
@@ -183,5 +184,5 @@ Span_dynamic_performer::try_music (Music* r)
 }
 ENTER_DESCRIPTION (Span_dynamic_performer,
 		   "", "",
-		   "dynamic-event", 
+		   "crescendo-event decrescendo-event", 
 		   "", "", "");
diff --git a/ly/dynamic-scripts-init.ly b/ly/dynamic-scripts-init.ly
index 42cfe49641..7e1b3e35dc 100644
--- a/ly/dynamic-scripts-init.ly
+++ b/ly/dynamic-scripts-init.ly
@@ -3,25 +3,30 @@
 %
 % declare the standard dynamic identifiers.
 %
-ppppp = \dynamicscript #"ppppp"
-pppp = \dynamicscript #"pppp"
-ppp = \dynamicscript #"ppp"
-pp = \dynamicscript #"pp"
-p = \dynamicscript #"p"
-mp = \dynamicscript #"mp"
-mf = \dynamicscript #"mf"
-f = \dynamicscript #"f"
-ff = \dynamicscript #"ff"
-fff = \dynamicscript #"fff"
-ffff = \dynamicscript #"ffff"
-fp = \dynamicscript #"fp"
 
-sf = \dynamicscript #"sf"
-sfp = \dynamicscript #"sfp"
-sff = \dynamicscript #"sff"
-sfz = \dynamicscript #"sfz"
-fz = \dynamicscript #"fz"
-sp = \dynamicscript #"sp"
-spp = \dynamicscript #"spp"
-rfz = \dynamicscript #"rfz"
+#(define (make-dynamic-script str)
+  (let* ((m (make-music-by-name  'AbsoluteDynamicEvent)))
+  (ly-set-mus-property! m 'text str)
+  m
+  ))
+ppppp = #(make-dynamic-script "pppp")
+pppp = #(make-dynamic-script "pppp")
+ppp = #(make-dynamic-script "ppp")
+pp = #(make-dynamic-script "pp")
+p = #(make-dynamic-script "p")
+mp = #(make-dynamic-script "mp")
+mf = #(make-dynamic-script "mf")
+f = #(make-dynamic-script "f")
+ff = #(make-dynamic-script "ff")
+fff = #(make-dynamic-script "fff")
+ffff = #(make-dynamic-script "ffff")
+fp = #(make-dynamic-script "fp")
+sf = #(make-dynamic-script "sf")
+sfp = #(make-dynamic-script "sfp")
+sff = #(make-dynamic-script "sff")
+sfz = #(make-dynamic-script "sfz")
+fz = #(make-dynamic-script "fz")
+sp = #(make-dynamic-script "sp")
+spp = #(make-dynamic-script "spp")
+rfz = #(make-dynamic-script "rfz")
 
diff --git a/scm/music-types.scm b/scm/music-types.scm
index 32522e672a..9c69c6f0f2 100644
--- a/scm/music-types.scm
+++ b/scm/music-types.scm
@@ -8,6 +8,12 @@
 	(span-type . "abort")
 	(types . (general-music event abort-event))
 	))
+    (AbsoluteDynamicEvent
+     . (
+	(description . "")
+	(internal-class-name . "Event")
+	(types . (general-music event dynamic-event absolute-dynamic-event))
+	))
     (ArpeggioEvent 
      . (
 	(description .  "Make an arpeggio on this note. Syntax:
@@ -95,7 +101,8 @@
 
 	(internal-class-name . "Event")
 	(types . (general-music dynamic-event decrescendo-event event))
-	)) 
+	))
+ 
     (ExtenderEvent
      . (
 	(description .  "")
-- 
2.39.5