Fix an issue where the pattern doesn't advance,
[quincer.git] / test / lexdump.c
blobd9ad76d38c8bf81ed429132d280707388ca8d7d0
1 #include <stdio.h>
2 #include "../src/context.h"
3 #include "../src/lex.h"
5 static void usage() {
6 char* usage = "usage: lexdump <filename>\n\n"
7 "After parsing a quincer input file, dump the parse\n"
8 "results to output for test compliance\n\n"
9 "The output might be valid YAML.";
10 fprintf(stderr,usage);
13 int main(int argc, char** argv) {
14 if(argc < 2) {
15 usage();
16 return 1;
19 printf("input:\n");
21 qn_config_t* config = parse_config(argv[1]);
23 int i;
24 for(i=0; i<config->noutports; i++) {
25 if(!i) {
26 printf(" ports:\n");
28 printf(" - %s\n",config->outports[i]);
31 for(i=0; i<config->nvoices; i++) {
32 if(!i) {
33 printf(" voices:\n");
35 qn_voice_t* v = config->voices+i;
36 printf(" - name: %s\n",v->name);
37 printf(" portname: %s\n", v->portname);
38 printf(" channel: %d\n", v->channel+1);
41 for(i=0; i<config->npatterns; i++) {
42 if(!i) {
43 printf(" patterns:\n");
45 qn_pattern_t* p = config->patterns+i;
46 printf(" - bpm: %d\n",p->beats_per_minute);
47 printf(" bpm_relationship: %s\n",
48 (p->bpm_relation==Absolute) ? "absolute" : "relative");
49 printf(" swing: %f\n", p->swing_value);
50 printf(" ticks_per_beat: %d\n", p->tbm_ticks_per_beat);
51 printf(" beats_per_bar: %f\n", p->tbm_beats_per_bar);
52 printf(" patternvoices:\n");
53 int j;
54 for(j=0;j<p->npatternvoices;j++) {
55 qn_patternvoice_t* pv = p->patternvoices + j;
56 printf(" - voice: %s\n",pv->voice->name);
57 printf(" nbeats: %d\n",pv->nbeats);
58 printf(" nevents: %d\n",pv->nevents);
59 printf(" events:\n");
60 int k;
61 for(k=0;k<pv->nevents;k++) {
62 qn_event_t* evt = pv->events+k;
63 printf(" - start: %d\n",evt->start_tick);
64 printf(" data:\n");
65 int l;
66 for(l=0;l<NBYTES_MIDI;l++) {
67 unsigned char c = evt->data[l];
68 printf(" - byte %d: %d\n",l,c);
69 } // loop data bytes
70 } // loop events
71 } // loop patternvoices
72 } // loop patterns
74 return 0;