OSDN Git Service

* [TCK33067] ReFactoring for smf.c ( a part of auto-add midi-reset code)
authorkoinec(Koine Yuusuke) <koinec@users.sourceforge.jp>
Mon, 3 Feb 2014 12:14:11 +0000 (21:14 +0900)
committerkoinec(Koine Yuusuke) <koinec@users.sourceforge.jp>
Mon, 3 Feb 2014 12:14:11 +0000 (21:14 +0900)
    ( Merge from branch TCK33067 )

src/smf.c

index fbe3f7c..024d840 100644 (file)
--- a/src/smf.c
+++ b/src/smf.c
@@ -330,110 +330,146 @@ int     CheckSMFTrack(
 }
 
 
+
+
 /* ===================================================================*/
-int ReadSMFTrack(
+int SMF_SetMidiResetEvent(
+               DWord   *pdw_varsize,
+               DWord   *pdw_first_delta,
                Word    w_dataflag )
 {
-       int                             i_result;
-       int                             i_now_track;
-       int                             i_endtracks;
-       int                             i_cnt;
-       MidiEventInfo   *p_midievent;
-       MidiEventInfo   *p_now_event;
+       int                             i_events;
+       MidiEventInfo   *p_mevent;
        Byte                    *pb_vardata;
-       Byte                    *pb_now_vardata;
-       Byte                    b_data;
        Byte                    b_reset_gs[]    = MIDI_RESET_GS;
        Byte                    b_reset_gm[]    = MIDI_RESET_GM;
        Byte                    b_reset_xg[]    = MIDI_RESET_XG;
        DWord                   dw_events;
-       DWord                   dw_now_varsize;
-       DWord                   dw_delta;
+       DWord                   dw_varsize;
        DWord                   dw_first_delta;
-       DWord                   dw_temp;
-       TrackInfo               *p_now_track;
-       TrackInfo               *p_track;
-       size_t                  sz_size;
        MidiInfo                t_midi;
 
+
        MidiEvent_GetMidiInfo( &t_midi );
-       p_midievent             = t_midi.p_event;
+       p_mevent                = t_midi.p_event;
        pb_vardata              = t_midi.pb_vardata;
        dw_events               = t_midi.dw_max_events;
 
-       assert( NULL != p_midievent );
-
+       assert( NULL != p_mevent );
        assert( NULL != pb_vardata );
 
-       p_now_event             = p_midievent;
-       pb_now_vardata  = pb_vardata;
-       dw_now_varsize  = 0;
-
-       i_now_track             = 0;
-       p_now_track     = (gp_trackinfo + 0);
-
-       i_endtracks             = 0;
-
-       dw_delta                = 0;
+       i_events                = 0;
+       dw_varsize              = 0;
        dw_first_delta  = 0;
 
        if( !(w_dataflag & DATAFLAG_MASK_RESET) )               {
                if( w_dataflag & DATAFLAG_XG )  {
-                       p_now_event->b_data[0]  = SMF_EVENT_SYSEX_F0;
-                       p_now_event->dw_delta   = 0;
-                       p_now_event->dw_dataptr = dw_now_varsize;
-                       p_now_event->dw_length  = MIDI_RESETSIZE_GM;
-
-                       memcpy( pb_now_vardata, b_reset_gm, MIDI_RESETSIZE_GM );
-
-                       pb_now_vardata  += MIDI_RESETSIZE_GM;
-                       dw_now_varsize  += MIDI_RESETSIZE_GM;
-                       p_now_event++;
-                       dw_events--;
+                       /* GM Reset ------------------------------*/
+                       p_mevent->b_data[0]             = SMF_EVENT_SYSEX_F0;
+                       p_mevent->dw_delta              = 0;
+                       p_mevent->dw_dataptr    = dw_varsize;
+                       p_mevent->dw_length             = MIDI_RESETSIZE_GM;
+
+                       memcpy( pb_vardata, b_reset_gm, MIDI_RESETSIZE_GM );
+
+                       pb_vardata              += MIDI_RESETSIZE_GM;
+                       dw_varsize              += MIDI_RESETSIZE_GM;
+                       p_mevent++;
+                       i_events++;
                        puts(" GM reset");
 
-                       p_now_event->b_data[0]  = SMF_EVENT_SYSEX_F0;
-                       p_now_event->dw_delta   = (DWord)(t_midi.uw_division) / 10;     /* = 50ms */
-                       p_now_event->dw_dataptr = dw_now_varsize;
-                       p_now_event->dw_length  = MIDI_RESETSIZE_XG;
+                       /* XG Reset ------------------------------*/
+                       p_mevent->b_data[0]             = SMF_EVENT_SYSEX_F0;
+                       p_mevent->dw_delta              = (DWord)(t_midi.uw_division) / 10;     /* = 50ms */
+                       p_mevent->dw_dataptr    = dw_varsize;
+                       p_mevent->dw_length             = MIDI_RESETSIZE_XG;
 
-                       memcpy( pb_now_vardata, b_reset_xg, MIDI_RESETSIZE_XG );
+                       memcpy( pb_vardata, b_reset_xg, MIDI_RESETSIZE_XG );
 
-                       pb_now_vardata  += MIDI_RESETSIZE_XG;
-                       dw_now_varsize  += MIDI_RESETSIZE_XG;
+                       pb_vardata              += MIDI_RESETSIZE_XG;
+                       dw_varsize              += MIDI_RESETSIZE_XG;
                        puts(" XG reset");
-
                }
                else if( w_dataflag & DATAFLAG_GS )     {
-                       p_now_event->b_data[0]  = SMF_EVENT_SYSEX_F0;
-                       p_now_event->dw_delta   = 0;
-                       p_now_event->dw_dataptr = dw_now_varsize;
-                       p_now_event->dw_length  = MIDI_RESETSIZE_GS;
+                       /* GS Reset ------------------------------*/
+                       p_mevent->b_data[0]             = SMF_EVENT_SYSEX_F0;
+                       p_mevent->dw_delta              = 0;
+                       p_mevent->dw_dataptr    = dw_varsize;
+                       p_mevent->dw_length             = MIDI_RESETSIZE_GS;
 
-                       memcpy( pb_now_vardata, b_reset_gs, MIDI_RESETSIZE_GS );
+                       memcpy( pb_vardata, b_reset_gs, MIDI_RESETSIZE_GS );
 
-                       pb_now_vardata  += MIDI_RESETSIZE_GS;
-                       dw_now_varsize  += MIDI_RESETSIZE_GS;
+                       pb_vardata              += MIDI_RESETSIZE_GS;
+                       dw_varsize              += MIDI_RESETSIZE_GS;
                        puts(" GS reset");
                }
                else    {
-                       p_now_event->b_data[0]  = SMF_EVENT_SYSEX_F0;
-                       p_now_event->dw_delta   = 0;
-                       p_now_event->dw_dataptr = dw_now_varsize;
-                       p_now_event->dw_length  = MIDI_RESETSIZE_GM;
+                       /* GM Reset ------------------------------*/
+                       p_mevent->b_data[0]             = SMF_EVENT_SYSEX_F0;
+                       p_mevent->dw_delta              = 0;
+                       p_mevent->dw_dataptr    = dw_varsize;
+                       p_mevent->dw_length             = MIDI_RESETSIZE_GM;
 
-                       memcpy( pb_now_vardata, b_reset_gm, MIDI_RESETSIZE_GM );
+                       memcpy( pb_vardata, b_reset_gm, MIDI_RESETSIZE_GM );
 
-                       pb_now_vardata  += MIDI_RESETSIZE_GM;
-                       dw_now_varsize  += MIDI_RESETSIZE_GM;
+                       pb_vardata              += MIDI_RESETSIZE_GM;
+                       dw_varsize              += MIDI_RESETSIZE_GM;
                        puts(" GM reset");
                }
 
-               p_now_event++;
-               dw_events--;
+               p_mevent++;
+               i_events++;
                dw_first_delta  = (DWord)(t_midi.uw_division) / 10;             /* = 50ms */
        }
 
+       *pdw_varsize            = dw_varsize;
+       *pdw_first_delta        = dw_first_delta;
+
+       return i_events;
+}
+
+
+/* ===================================================================*/
+int ReadSMFTrack(
+               Word    w_dataflag )
+{
+       int                             i_result;
+       int                             i_now_track                     = 0;
+       int                             i_endtracks                     = 0;
+       int                             i_cnt;
+       MidiEventInfo   *p_midievent;
+       MidiEventInfo   *p_now_event;
+       Byte                    *pb_vardata;
+       Byte                    *pb_now_vardata;
+       Byte                    b_data;
+       DWord                   dw_events;
+       DWord                   dw_now_varsize          = 0;
+       DWord                   dw_delta                        = 0;
+       DWord                   dw_first_delta          = 0;
+       DWord                   dw_temp;
+       TrackInfo               *p_now_track;
+       TrackInfo               *p_track;
+       size_t                  sz_size;
+       MidiInfo                t_midi;
+
+       MidiEvent_GetMidiInfo( &t_midi );
+       p_midievent             = t_midi.p_event;
+       pb_vardata              = t_midi.pb_vardata;
+       dw_events               = t_midi.dw_max_events;
+
+       assert( NULL != p_midievent );
+       assert( NULL != pb_vardata );
+
+       p_now_event             = p_midievent;
+       pb_now_vardata  = pb_vardata;
+       p_now_track     = (gp_trackinfo + 0);
+
+       i_result        = SMF_SetMidiResetEvent( &dw_now_varsize, &dw_first_delta, w_dataflag );
+       pb_now_vardata  += dw_now_varsize;
+       p_now_event             += i_result;
+       dw_events               -= i_result;
+       
+
        do      {
 
 #ifndef        NDEBUG