foxygit / doom Log in
commit 833d0c2aa176356a362099b24899a69d86f56b1e
Author:     ceski <56656010+ceski-1@users.noreply.github.com>
AuthorDate: Mon May 15 11:44:08 2023 -0700
Commit:     ceski <56656010+ceski-1@users.noreply.github.com>
CommitDate: Tue May 16 09:10:20 2023 -0700

    Move EMIDI message handling
---
 src/i_winmusic.c | 263 ++++++++++++++++++++++++++++++-------------------------
 1 file changed, 144 insertions(+), 119 deletions(-)

diff --git a/src/i_winmusic.c b/src/i_winmusic.c
index e9bb6d7a..2162ab68 100644
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -623,12 +623,153 @@ static void CheckFFLoop(const midi_event_t *event)
     }
 }

-static boolean AddToBuffer(unsigned int delta_time, const midi_event_t *event,
-                           win_midi_track_t *track)
+static void SendEMIDI(unsigned int delta_time, const midi_event_t *event,
+                      win_midi_track_t *track, const midi_fallback_t *fallback)
 {
     unsigned int i;
     unsigned int flag;
     int count;
+
+    switch ((int) event->event_type)
+    {
+        case EMIDI_CONTROLLER_TRACK_DESIGNATION:
+            if (track->elapsed_time < timediv)
+            {
+                flag = event->data.channel.param2;
+
+                if (flag == EMIDI_DEVICE_ALL)
+                {
+                    track->emidi_device_flags = UINT_MAX;
+                    track->emidi_designated = true;
+                }
+                else if (flag <= EMIDI_DEVICE_ULTRASOUND)
+                {
+                    track->emidi_device_flags |= 1 << flag;
+                    track->emidi_designated = true;
+                }
+            }
+            SendNOPMsg(delta_time);
+            break;
+
+        case EMIDI_CONTROLLER_TRACK_EXCLUSION:
+            if (song.rpg_loop)
+            {
+                SetLoopPoint();
+            }
+            else if (track->elapsed_time < timediv)
+            {
+                flag = event->data.channel.param2;
+
+                if (!track->emidi_designated)
+                {
+                    track->emidi_device_flags = UINT_MAX;
+                    track->emidi_designated = true;
+                }
+
+                if (flag <= EMIDI_DEVICE_ULTRASOUND)
+                {
+                    track->emidi_device_flags &= ~(1 << flag);
+                }
+            }
+            SendNOPMsg(delta_time);
+            break;
+
+        case EMIDI_CONTROLLER_PROGRAM_CHANGE:
+            if (track->emidi_program || track->elapsed_time < timediv)
+            {
+                track->emidi_program = true;
+                SendProgramMsg(delta_time, event->data.channel.channel,
+                               event->data.channel.param2, fallback);
+            }
+            else
+            {
+                SendNOPMsg(delta_time);
+            }
+            break;
+
+        case EMIDI_CONTROLLER_VOLUME:
+            if (track->emidi_volume || track->elapsed_time < timediv)
+            {
+                track->emidi_volume = true;
+                SendVolumeMsg(delta_time, event);
+            }
+            else
+            {
+                SendNOPMsg(delta_time);
+            }
+            break;
+
+        case EMIDI_CONTROLLER_LOOP_BEGIN:
+            count = event->data.channel.param2;
+            count = (count == 0) ? (-1) : count;
+            track->emidi_loop_count = count;
+            MIDI_SetLoopPoint(track->iter);
+            SendNOPMsg(delta_time);
+            break;
+
+        case EMIDI_CONTROLLER_LOOP_END:
+            if (event->data.channel.param2 == EMIDI_LOOP_FLAG)
+            {
+                if (track->emidi_loop_count != 0)
+                {
+                    MIDI_RestartAtLoopPoint(track->iter);
+                }
+
+                if (track->emidi_loop_count > 0)
+                {
+                    track->emidi_loop_count--;
+                }
+            }
+            SendNOPMsg(delta_time);
+            break;
+
+        case EMIDI_CONTROLLER_GLOBAL_LOOP_BEGIN:
+            count = event->data.channel.param2;
+            count = (count == 0) ? (-1) : count;
+            for (i = 0; i < song.num_tracks; ++i)
+            {
+                song.tracks[i].emidi_loop_count = count;
+                MIDI_SetLoopPoint(song.tracks[i].iter);
+                song.tracks[i].saved_end_of_track = song.tracks[i].end_of_track;
+                song.tracks[i].saved_elapsed_time = song.tracks[i].elapsed_time;
+            }
+            song.saved_elapsed_time = song.elapsed_time;
+            SendNOPMsg(delta_time);
+            break;
+
+        case EMIDI_CONTROLLER_GLOBAL_LOOP_END:
+            if (event->data.channel.param2 == EMIDI_LOOP_FLAG)
+            {
+                for (i = 0; i < song.num_tracks; ++i)
+                {
+                    if (song.tracks[i].emidi_loop_count != 0)
+                    {
+                        MIDI_RestartAtLoopPoint(song.tracks[i].iter);
+                        song.tracks[i].end_of_track =
+                            song.tracks[i].saved_end_of_track;
+                        song.tracks[i].elapsed_time =
+                            song.tracks[i].saved_elapsed_time;
+                        song.elapsed_time = song.saved_elapsed_time;
+                    }
+
+                    if (song.tracks[i].emidi_loop_count > 0)
+                    {
+                        song.tracks[i].emidi_loop_count--;
+                    }
+                }
+            }
+            SendNOPMsg(delta_time);
+            break;
+
+        default:
+            SendNOPMsg(delta_time);
+            break;
+    }
+}
+
+static boolean AddToBuffer(unsigned int delta_time, const midi_event_t *event,
+                           win_midi_track_t *track)
+{
     midi_fallback_t fallback = {FALLBACK_NONE, 0};

     if (use_fallback)
@@ -726,130 +867,14 @@ static boolean AddToBuffer(unsigned int delta_time, const midi_event_t *event,
                     break;

                 case EMIDI_CONTROLLER_TRACK_DESIGNATION:
-                    if (track->elapsed_time < timediv)
-                    {
-                        flag = event->data.channel.param2;
-
-                        if (flag == EMIDI_DEVICE_ALL)
-                        {
-                            track->emidi_device_flags = UINT_MAX;
-                            track->emidi_designated = true;
-                        }
-                        else if (flag <= EMIDI_DEVICE_ULTRASOUND)
-                        {
-                            track->emidi_device_flags |= 1 << flag;
-                            track->emidi_designated = true;
-                        }
-                    }
-                    SendNOPMsg(delta_time);
-                    break;
-
                 case EMIDI_CONTROLLER_TRACK_EXCLUSION:
-                    if (song.rpg_loop)
-                    {
-                        SetLoopPoint();
-                    }
-                    else if (track->elapsed_time < timediv)
-                    {
-                        flag = event->data.channel.param2;
-
-                        if (!track->emidi_designated)
-                        {
-                            track->emidi_device_flags = UINT_MAX;
-                            track->emidi_designated = true;
-                        }
-
-                        if (flag <= EMIDI_DEVICE_ULTRASOUND)
-                        {
-                            track->emidi_device_flags &= ~(1 << flag);
-                        }
-                    }
-                    SendNOPMsg(delta_time);
-                    break;
-
                 case EMIDI_CONTROLLER_PROGRAM_CHANGE:
-                    if (track->emidi_program || track->elapsed_time < timediv)
-                    {
-                        track->emidi_program = true;
-                        SendProgramMsg(delta_time, event->data.channel.channel,
-                                       event->data.channel.param2, &fallback);
-                    }
-                    else
-                    {
-                        SendNOPMsg(delta_time);
-                    }
-                    break;
-
                 case EMIDI_CONTROLLER_VOLUME:
-                    if (track->emidi_volume || track->elapsed_time < timediv)
-                    {
-                        track->emidi_volume = true;
-                        SendVolumeMsg(delta_time, event);
-                    }
-                    else
-                    {
-                        SendNOPMsg(delta_time);
-                    }
-                    break;
-
                 case EMIDI_CONTROLLER_LOOP_BEGIN:
-                    count = event->data.channel.param2;
-                    count = (count == 0) ? (-1) : count;
-                    track->emidi_loop_count = count;
-                    MIDI_SetLoopPoint(track->iter);
-                    SendNOPMsg(delta_time);
-                    break;
-
                 case EMIDI_CONTROLLER_LOOP_END:
-                    if (event->data.channel.param2 == EMIDI_LOOP_FLAG)
-                    {
-                        if (track->emidi_loop_count != 0)
-                        {
-                            MIDI_RestartAtLoopPoint(track->iter);
-                        }
-
-                        if (track->emidi_loop_count > 0)
-                        {
-                            track->emidi_loop_count--;
-                        }
-                    }
-                    SendNOPMsg(delta_time);
-                    break;
-
                 case EMIDI_CONTROLLER_GLOBAL_LOOP_BEGIN:
-                    count = event->data.channel.param2;
-                    count = (count == 0) ? (-1) : count;
-                    for (i = 0; i < song.num_tracks; ++i)
-                    {
-                        song.tracks[i].emidi_loop_count = count;
-                        MIDI_SetLoopPoint(song.tracks[i].iter);
-                        song.tracks[i].saved_end_of_track = song.tracks[i].end_of_track;
-                        song.tracks[i].saved_elapsed_time = song.tracks[i].elapsed_time;
-                    }
-                    song.saved_elapsed_time = song.elapsed_time;
-                    SendNOPMsg(delta_time);
-                    break;
-
                 case EMIDI_CONTROLLER_GLOBAL_LOOP_END:
-                    if (event->data.channel.param2 == EMIDI_LOOP_FLAG)
-                    {
-                        for (i = 0; i < song.num_tracks; ++i)
-                        {
-                            if (song.tracks[i].emidi_loop_count != 0)
-                            {
-                                MIDI_RestartAtLoopPoint(song.tracks[i].iter);
-                                song.tracks[i].end_of_track = song.tracks[i].saved_end_of_track;
-                                song.tracks[i].elapsed_time = song.tracks[i].saved_elapsed_time;
-                                song.elapsed_time = song.saved_elapsed_time;
-                            }
-
-                            if (song.tracks[i].emidi_loop_count > 0)
-                            {
-                                song.tracks[i].emidi_loop_count--;
-                            }
-                        }
-                    }
-                    SendNOPMsg(delta_time);
+                    SendEMIDI(delta_time, event, track, &fallback);
                     break;

                 case MIDI_CONTROLLER_RESET_ALL_CTRLS: