login

<     >

2021-02-01 23:52:48 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

refactor: added separate function to run a single event

diff --git a/qms.c b/qms.c
index 9c103ff..4ccc348 100644
--- a/qms.c
+++ b/qms.c
@@ -165,40 +165,49 @@ qms_advance(unsigned int nsamples)
     }
 }
 
+int
+qms_runevent(Event *ev)
+{
+    EvType ev_type;
+    unsigned int track, voice, arg;
+    int end = 0;
+    track = ev->event >> 28;
+    voice = ev->event >> 24 & 7;
+    ev_type = ev->event >> 16 & 0xFF;
+    arg = ev->event & 0xFFFF;
+    switch (ev_type) {
+    case END:
+        end = 1;
+        break;
+    case PAC:
+        qms_setpac(track, arg);
+        break;
+    case VOL:
+        qms_setvol(track, arg);
+        break;
+    case PAN:
+        qms_setpan(track, arg);
+        break;
+    case VEL:
+        qms_setvelocity(track, voice, arg);
+        break;
+    case PITCH:
+        qms_setnote(track, voice, arg);
+        break;
+    case WHEEL:
+        qms_setwheel(track, voice, arg);
+    }
+    return end;
+}
+
 void
 qms_runevents(Event *evs, unsigned int nevs)
 {
     uint32_t total_samples = 0;
-    EvType ev_type;
-    unsigned int track, voice, arg;
     for (; nevs--; evs++) {
         qms_advance(evs->offset - total_samples);
         total_samples = evs->offset;
-        track = evs->event >> 28;
-        voice = evs->event >> 24 & 7;
-        ev_type = evs->event >> 16 & 0xFF;
-        arg = evs->event & 0xFFFF;
-        switch (ev_type) {
-        case END:
-            nevs = 0;
-            break;
-        case PAC:
-            qms_setpac(track, arg);
-            break;
-        case VOL:
-            qms_setvol(track, arg);
-            break;
-        case PAN:
-            qms_setpan(track, arg);
+        if (qms_runevent(evs))
             break;
-        case VEL:
-            qms_setvelocity(track, voice, arg);
-            break;
-        case PITCH:
-            qms_setnote(track, voice, arg);
-            break;
-        case WHEEL:
-            qms_setwheel(track, voice, arg);
-        }
     }
 }

diff --git a/qms.h b/qms.h
index 5d7b20e..6a63eb0 100644
--- a/qms.h
+++ b/qms.h
@@ -37,6 +37,7 @@ void qms_setvelocity(int track, int voice, int velocity);
 void qms_setnote(int track, int voice, int midipitch);
 void qms_setwheel(int track, int voice, int wheel);
 void qms_advance(unsigned int nsamples);
+int  qms_runevent(Event *ev);
 void qms_runevents(Event *evs, unsigned int nevs);
 void qms_putsample(int16_t left, int16_t right);