int xm_to_text(FILE *fff,struct xm_info_struct *xm, int which1, int which2, int which3) { int i; fprintf(fff,"\'\n"); fprintf(fff,"\' TITLE:\t%s\n",xm->module_name); fprintf(fff,"\'\n"); fprintf(fff,"\' LOOP:\t\t%d\n",xm->restart_position); fprintf(fff,"\' BPM:\t\t%d\n",xm->default_bpm); fprintf(fff,"\' TEMPO:\t%d\n",xm->default_tempo); fprintf(fff,"\' FREQ:\t\t1000000\n"); fprintf(fff,"\' IRQ:\t\t50\n"); fprintf(fff,"\'\n"); fprintf(fff,"\' ENDHEADER\n"); fprintf(fff,"\'\n"); for(i=0;i < xm->song_length;i++) { dump_pattern( fff, xm->pattern_order[i], &(xm->pattern[xm->pattern_order[i]]), xm->number_of_channels, which1,which2,which3); } return 0; }
static void dump_pattern (struct Pattern *pattern, unsigned indent) { printf ("%*s", indent, ""); switch (pattern->type) { case PATTERN_LITERAL: printf ("literal: "); print_char_class (pattern->info.literal); printf ("\n"); break; case PATTERN_CONCAT: printf ("concat:\n"); dump_pattern (pattern->info.concat.a, indent+1); dump_pattern (pattern->info.concat.b, indent+1); break; case PATTERN_ALT: printf ("alternation:\n"); dump_pattern (pattern->info.alternation.a, indent+1); dump_pattern (pattern->info.alternation.b, indent+1); break; case PATTERN_OPTIONAL: printf ("optional:\n"); dump_pattern (pattern->info.optional, indent+1); break; case PATTERN_STAR: printf ("star:\n"); dump_pattern (pattern->info.optional, indent+1); break; case PATTERN_PLUS: printf ("plus:\n"); dump_pattern (pattern->info.optional, indent+1); break; case PATTERN_EMPTY: printf ("[empty]\n"); } }