login

#include <stdlib.h>
#include <stdio.h>

#include "seqt.h"

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;
}