mirror of
https://github.com/sshlien/abcmidi.git
synced 2025-12-05 22:35:06 +00:00
252 lines
6.5 KiB
C
252 lines
6.5 KiB
C
/* debug.c */
|
|
/* part of yaps - abc to PostScript converter */
|
|
/* print tune data structure to screen for debugging purposes only */
|
|
|
|
#include <stdio.h>
|
|
#include "abc.h"
|
|
#include "structs.h"
|
|
|
|
void showfeature(struct feature *ft)
|
|
{
|
|
char* astring;
|
|
struct fract* afract;
|
|
struct key* akey;
|
|
struct rest* arest;
|
|
struct tuple* atuple;
|
|
struct note* anote;
|
|
cleftype_t* theclef; /* [JA] 2020-10-19 */
|
|
switch (ft->type) {
|
|
case SINGLE_BAR: printf("SINGLE_BAR\n");
|
|
break;
|
|
case DOUBLE_BAR: printf("DOUBLE_BAR\n");
|
|
break;
|
|
case BAR_REP: printf("BAR_REP\n");
|
|
break;
|
|
case REP_BAR: printf("REP_BAR\n");
|
|
break;
|
|
case REP1: printf("REP1\n");
|
|
break;
|
|
case REP2: printf("REP2\n");
|
|
break;
|
|
case PLAY_ON_REP:
|
|
printf("PLAY_ON_REP %s\n", (char*)ft->item.voidptr);
|
|
break;
|
|
case BAR1: printf("BAR1\n");
|
|
break;
|
|
case REP_BAR2: printf("REP_BAR2\n");
|
|
break;
|
|
case DOUBLE_REP: printf("DOUBLE_REP\n");
|
|
break;
|
|
case THICK_THIN: printf("THICK_THIN\n");
|
|
break;
|
|
case THIN_THICK: printf("THIN_THICK\n");
|
|
break;
|
|
case PART: printf("PART\n");
|
|
astring = ft->item.voidptr;
|
|
break;
|
|
case TEMPO: printf("TEMPO\n");
|
|
break;
|
|
case TIME:
|
|
afract = ft->item.voidptr;
|
|
printf("TIME %d / %d\n", afract->num, afract->denom);
|
|
break;
|
|
case KEY: printf("KEY\n");
|
|
akey = ft->item.voidptr;
|
|
break;
|
|
case REST: printf("REST\n");
|
|
arest = ft->item.voidptr;
|
|
break;
|
|
case TUPLE: printf("TUPLE\n");
|
|
atuple = ft->item.voidptr;
|
|
break;
|
|
case NOTE:
|
|
anote = ft->item.voidptr;
|
|
printf("NOTE %c%c %d / %d\n", anote->accidental, anote->pitch,
|
|
anote->len.num, anote->len.denom);
|
|
if (anote->gchords != NULL) {
|
|
astring = firstitem(anote->gchords);
|
|
while (astring != NULL) {
|
|
printf("gchord: %s\n", astring);
|
|
astring = nextitem(anote->gchords);
|
|
};
|
|
};
|
|
if (anote->syllables != NULL) {
|
|
astring = firstitem(anote->syllables);
|
|
while (astring != NULL) {
|
|
printf("syllable: %s\n", astring);
|
|
astring = nextitem(anote->syllables);
|
|
};
|
|
};
|
|
printf("stemup=%d beaming=%d base =%d base_exp=%d x=%.1f left=%.1f right=%.1f\n",
|
|
anote->stemup, anote->beaming, anote->base, anote->base_exp,
|
|
ft->x, ft->xleft, ft->xright);
|
|
break;
|
|
case CHORDNOTE:
|
|
anote = ft->item.voidptr;
|
|
printf("CHORDNOTE %c%c %d / %d\n", anote->accidental, anote->pitch,
|
|
anote->len.num, anote->len.denom);
|
|
printf("stemup=%d beaming=%d base =%d base_exp=%d x=%.1f left=%.1f right=%.1f\n",
|
|
anote->stemup, anote->beaming, anote->base, anote->base_exp,
|
|
ft->x, ft->xleft, ft->xright);
|
|
printf("x=%.1f\n", ft->x);
|
|
break;
|
|
case NONOTE: printf("NONOTE\n");
|
|
break;
|
|
case OLDTIE: printf("OLDTIE\n");
|
|
break;
|
|
case TEXT: printf("TEXT\n");
|
|
break;
|
|
case SLUR_ON: printf("SLUR_ON\n");
|
|
break;
|
|
case SLUR_OFF: printf("SLUR_OFF\n");
|
|
break;
|
|
case TIE: printf("TIE\n");
|
|
break;
|
|
case CLOSE_TIE: printf("CLOSE_TIE\n");
|
|
break;
|
|
case TITLE: printf("TITLE\n");
|
|
break;
|
|
case CHANNEL: printf("CHANNEL\n");
|
|
break;
|
|
case TRANSPOSE: printf("TRANSPOSE\n");
|
|
break;
|
|
case RTRANSPOSE: printf("RTRANSPOSE\n");
|
|
break;
|
|
case GRACEON: printf("GRACEON\n");
|
|
break;
|
|
case GRACEOFF: printf("GRACEOFF\n");
|
|
break;
|
|
case SETGRACE: printf("SETGRACE\n");
|
|
break;
|
|
case SETC: printf("SETC\n");
|
|
break;
|
|
case GCHORD: printf("GCHORD\n");
|
|
break;
|
|
case GCHORDON: printf("GCHORDON\n");
|
|
break;
|
|
case GCHORDOFF: printf("GCHORDOFF\n");
|
|
break;
|
|
case VOICE: printf("VOICE\n");
|
|
break;
|
|
case CHORDON: printf("CHORDON\n");
|
|
break;
|
|
case CHORDOFF: printf("CHORDOFF\n");
|
|
break;
|
|
case SLUR_TIE: printf("SLUR_TIE\n");
|
|
break;
|
|
case TNOTE: printf("TNOTE\n");
|
|
break;
|
|
case LT: printf("LT\n");
|
|
break;
|
|
case GT: printf("GT\n");
|
|
break;
|
|
case DYNAMIC: printf("DYNAMIC\n");
|
|
break;
|
|
case LINENUM:
|
|
printf("LINENUM %d\n", ft->item.number);
|
|
break;
|
|
case MUSICLINE: printf("MUSICLINE\n");
|
|
break;
|
|
case PRINTLINE: printf("PRINTLINE\n");
|
|
break;
|
|
case MUSICSTOP: printf("MUSICSTOP\n");
|
|
break;
|
|
case WORDLINE: printf("WORDLINE\n");
|
|
break;
|
|
case WORDSTOP: printf("WORDSTOP\n");
|
|
break;
|
|
case INSTRUCTION: printf("INSTRUCTION\n");
|
|
break;
|
|
case NOBEAM: printf("NOBEAM\n");
|
|
break;
|
|
case CLEF: printf("CLEF\n");
|
|
theclef = ft->item.voidptr;
|
|
break;
|
|
case SPLITVOICE: printf("SPLITVOICE\n");
|
|
default:
|
|
printf("unknown type: %d\n", (int)ft->type);
|
|
break;
|
|
};
|
|
}
|
|
|
|
|
|
static int showline(v)
|
|
struct voice* v;
|
|
/* draws one line of music from specified voice */
|
|
{
|
|
struct feature* ft;
|
|
/* struct note* anote;
|
|
struct key* akey;
|
|
char* astring;
|
|
struct fract* afract;
|
|
struct rest* arest;
|
|
struct tuple* atuple;
|
|
cleftype_t* theclef; /* [JA] 2020-10-19 */
|
|
int sharps;
|
|
struct chord* thischord;
|
|
int chordcount;
|
|
int printedline;
|
|
|
|
if (v->place == NULL) {
|
|
return(0);
|
|
};
|
|
chordcount = 0;
|
|
v->beamed_tuple_pending = 0;
|
|
thischord = NULL;
|
|
if (v->keysig == NULL) {
|
|
event_error("Voice has no key signature");
|
|
} else {
|
|
sharps = v->keysig->sharps;
|
|
};
|
|
ft = v->place;
|
|
printedline = 0;
|
|
while ((ft != NULL) && (!printedline)) {
|
|
/* printf("type = %d\n", ft->type); */
|
|
showfeature(ft);
|
|
ft = ft->next;
|
|
};
|
|
v->place = ft;
|
|
return(1);
|
|
}
|
|
|
|
void showtune(struct tune* t)
|
|
/* print abc structure to the screen */
|
|
{
|
|
char* atitle;
|
|
int notesdone;
|
|
struct voice* thisvoice;
|
|
|
|
notesdone = 0;
|
|
atitle = firstitem(&t->title);
|
|
while (atitle != NULL) {
|
|
printf("TITLE: %s\n", atitle);
|
|
atitle = nextitem(&t->title);
|
|
};
|
|
if (t->composer != NULL) {
|
|
printf("COMPOSER: %s\n", t->composer); /* [SDG] 2020-06-03 */
|
|
};
|
|
if (t->origin != NULL) {
|
|
printf("ORIGIN: %s\n", t->origin);
|
|
};
|
|
if (t->parts != NULL) {
|
|
printf("PARTS: %s\n", t->parts);
|
|
};
|
|
thisvoice = firstitem(&t->voices);
|
|
while (thisvoice != NULL) {
|
|
thisvoice->place = thisvoice->first;
|
|
thisvoice = nextitem(&t->voices);
|
|
};
|
|
/*
|
|
doneline = 1;
|
|
while(doneline) {
|
|
*/
|
|
thisvoice = firstitem(&t->voices);
|
|
while (thisvoice != NULL) {
|
|
printf("-----------(voice %d)-------\n", thisvoice->voiceno);
|
|
showline(thisvoice);
|
|
thisvoice = nextitem(&t->voices);
|
|
};
|
|
/* }; */
|
|
}
|
|
|