login

<     >

2020-09-23 22:40:07 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

basic skeleton for track syncing

diff --git a/seqt.c b/seqt.c
index f0c4fbd..a688c9f 100644
--- a/seqt.c
+++ b/seqt.c
@@ -7,11 +7,60 @@ int ntracks;
 char map[MAPSIZE][RECSIZE];
 unsigned char matrix[MAXINDEX][MAXTRACK][MAXVOICE];
 
+void
+print_tracks()
+{
+    int index[MAXTRACK] = {0};
+    int count[MAXTRACK] = {0};
+    int active_tracks = MAXTRACK-1;
+    int i, min_count;
+    unsigned char duration;
+    while (active_tracks) {
+        for (i = 1; i < MAXTRACK; i++) {
+            if (index[i] == MAXINDEX) {
+                /* TODO: output blank */
+                printf("~");
+                continue;
+            }
+            if (!count[i]) {
+                duration = matrix[index[i]][0][i >> 1];
+                duration = i & 1 ? duration & 0x0F : duration >> 4;
+                if (!duration) {
+                    index[i] = MAXINDEX;
+                    active_tracks--;
+                    /* TODO: output blank */
+                    printf("~");
+                    continue;
+                }
+                /* head */
+                /* TODO: output head */
+                printf("*");
+                count[i] = 0x40 >> (duration - 1);
+            } else {
+                /* tail */
+                /* TODO: output tail */
+                printf("|");
+            }
+        }
+        printf("\n");
+        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]++;
+        }
+    }
+}
+
 int
 main()
 {
     if (load_txt(stdin) < 0)
         return 1;
+    print_tracks();
     if (save_txt(stdout) < 0)
         return 2;
     return 0;