login

<     >

2020-10-03 16:09:31 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

actually print voices (pitches/rest/cont)

diff --git a/seqt.c b/seqt.c
index 6f60740..ea36f83 100644
--- a/seqt.c
+++ b/seqt.c
@@ -7,7 +7,33 @@ int ntracks;
 char map[MAPSIZE][RECSIZE];
 unsigned char matrix[MAXINDEX][MAXTRACK][MAXVOICE];
 
-#define inside_view (!vscroll && lines && i >= min_track && i < max_track)
+void
+print_blank()
+{
+    int voice;
+    for (voice = 0; voice < MAXVOICE; voice++)
+        printf("--");
+}
+
+void
+print_notes(int track, int index, int head)
+{
+    int voice;
+    unsigned char cell;
+    for (voice = 0; voice < MAXVOICE; voice++) {
+        cell = matrix[index][track][voice];
+        if (cell & 0x80)
+            head ? printf("%2u", cell & 0x7F) : printf("||");
+        else if (cell == REST)
+            printf("--");
+        else if (cell == CONT)
+            printf("||");
+        else
+            printf("??");
+    }
+}
+
+#define inside_view (!vscroll && lines && track >= min_track && track < max_track)
 
 void
 print_tracks(int vscroll, int lines, int hscroll, int tracks)
@@ -16,41 +42,39 @@ print_tracks(int vscroll, int lines, int hscroll, int tracks)
     int count[MAXTRACK] = {0};
     int active_tracks = MAXTRACK-1;
     int min_track, max_track;
-    int i, min_count;
+    int track, min_count;
     unsigned char duration;
     min_track = hscroll + 1;            /* inclusive */
     max_track = hscroll + tracks + 1;   /* exclusive */
     if (max_track > MAXTRACK)
         max_track = MAXTRACK;
     while (active_tracks) {
-        for (i = 1; i < MAXTRACK; i++) {
-            if (index[i] == MAXINDEX) {
-                /* TODO: output blank */
+        for (track = 1; track < MAXTRACK; track++) {
+            if (inside_view)
+                printf(" ");
+            if (index[track] == MAXINDEX) {
                 if (inside_view)
-                    printf("~");
+                    print_blank();
                 continue;
             }
-            if (!count[i]) {
-                duration = matrix[index[i]][0][i >> 1];
-                duration = i & 1 ? duration & 0x0F : duration >> 4;
+            if (!count[track]) {
+                duration = matrix[index[track]][0][track >> 1];
+                duration = track & 1 ? duration & 0x0F : duration >> 4;
                 if (!duration) {
-                    index[i] = MAXINDEX;
+                    index[track] = MAXINDEX;
                     active_tracks--;
-                    /* TODO: output blank */
                     if (inside_view)
-                        printf("~");
+                        print_blank();
                     continue;
                 }
                 /* head */
-                /* TODO: output head */
                 if (inside_view)
-                    printf("*");
-                count[i] = 0x40 >> (duration - 1);
+                    print_notes(track, index[track], 1);
+                count[track] = 0x40 >> (duration - 1);
             } else {
                 /* tail */
-                /* TODO: output tail */
                 if (inside_view)
-                    printf("|");
+                    print_notes(track, index[track], 0);
             }
         }
         if (vscroll) {
@@ -60,13 +84,13 @@ print_tracks(int vscroll, int lines, int hscroll, int tracks)
             lines--;
         }
         min_count = 0x40;
-        for (i = 1; i < MAXTRACK; i++)
-            if (index[i] != MAXINDEX && count[i] < min_count)
-                min_count = count[i];
-        for (i = 1; i < MAXTRACK; i++) {
-            count[i] -= min_count;
-            if (!count[i])
-                index[i]++;
+        for (track = 1; track < MAXTRACK; track++)
+            if (index[track] != MAXINDEX && count[track] < min_count)
+                min_count = count[track];
+        for (track = 1; track < MAXTRACK; track++) {
+            count[track] -= min_count;
+            if (!count[track])
+                index[track]++;
         }
     }
 }