login

<     >

2020-09-28 21:38:24 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

add horizontal scrolling in print_tracks()

diff --git a/seqt.c b/seqt.c
index 439e245..6f60740 100644
--- a/seqt.c
+++ b/seqt.c
@@ -7,19 +7,26 @@ 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_tracks(int vscroll, int lines)
+print_tracks(int vscroll, int lines, int hscroll, int tracks)
 {
     int index[MAXTRACK] = {0};
     int count[MAXTRACK] = {0};
     int active_tracks = MAXTRACK-1;
+    int min_track, max_track;
     int i, 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 */
-                if (!vscroll && lines)
+                if (inside_view)
                     printf("~");
                 continue;
             }
@@ -30,19 +37,19 @@ print_tracks(int vscroll, int lines)
                     index[i] = MAXINDEX;
                     active_tracks--;
                     /* TODO: output blank */
-                    if (!vscroll && lines)
+                    if (inside_view)
                         printf("~");
                     continue;
                 }
                 /* head */
                 /* TODO: output head */
-                if (!vscroll && lines)
+                if (inside_view)
                     printf("*");
                 count[i] = 0x40 >> (duration - 1);
             } else {
                 /* tail */
                 /* TODO: output tail */
-                if (!vscroll && lines)
+                if (inside_view)
                     printf("|");
             }
         }
@@ -69,7 +76,7 @@ main()
 {
     if (load_txt(stdin) < 0)
         return 1;
-    print_tracks(2, 3);
+    print_tracks(2, 3, 1, 3);
     if (save_txt(stdout) < 0)
         return 2;
     return 0;