static int abcScan(abcScanner *as,abcHandler handler) { if (as) { while (as->state != S_EOF) { abcNextToken(as); switch(abcToken(as)) { case T_FIELD: case T_INFIELD: case T_NONE: break; default: if (handler) { if (handler(as) > 0) m_eof(as); } else { printf("%s\t\t", abcTokenName(as->token)); printf("[%s]\n", as->tokstr); } } } abcClose(as); return 0; } return 1; }
int main(int argc, char *argv[]) { abcScanner *scn; abcToken tok; chs_t abctext = NULL; int k; abctext = chsRead(abctext,stdin,'w'); if (abctext && *abctext) { scn = abcNewScanner(str,abctext); printf("<<\n%s\n>>\n",scn->abc); while ((tok = abcNextToken(scn)) != T_EOF) { printf("%04d %04X %04X ",abcLineNumber(scn), abcCurState(scn), abcToken(scn)); switch (tok) { case T_NOTE: printf("NOTE: "); printf("%c", abcNotePitch(scn)); printf("%.*s", abcNoteSharps(scn), "####"); printf("%.*s", abcNoteFlats(scn), "bbbb"); k = abcNoteDuration(scn); printf(" %d/%d",abcNumerator(k),abcDenominator(k)); printf(" oct: %d",abcNoteOctave(scn)); printf(" MIDI: %d",abcNoteMidi(scn)); printf(" cents: %d",abcNoteCents(scn)); printf("\n"); break; case T_INFIELD: case T_FIELD: switch (*abcTokenStart(scn,1)) { case 'K' : printf("KEY:"); printf(" %.*s", abcKeyTonicLen(scn), abcKeyTonicStart(scn)); printf(" %c", abcKeyMode(scn)); printf(" |%s|", abcKeyAccidentals(scn)); printf(" t=%d", abcKeyTranspose(scn)); printf("\n"); break; default: printf("%.*s", abcTokenLen(scn,0),abcTokenStart(scn,0)); if (tok == T_INFIELD) printf("\n"); } break; default: printf("%.*s\n", abcTokenLen(scn,0),abcTokenStart(scn,0)); } } scn = abcFreeScanner(scn); } return(0); }
static void abcNparse(abcScanner *s) { int t; int a; t=abcToken(s); switch (t) { case T_REST: case T_NOTE: P(Note,s); break; case T_DECOR: P(Decoration,s); break; case T_TIE: case T_OPENSLUR: P(SlurTie,s); break; case T_BAR: P(Bar,s); break; case T_FIELDB: a=abcState(s); if (a & S_CFIELD) { switch (a & 0xFF ) { case 'K' : P(Key,s); break; case 'V' : P(Voice,s); break; case 'M' : P(Meter,s); break; case 'L' : P(Length,s); break; case 'Q' : P(Tempo,s); break; case 'A' : case 'O' : case 'C' : case 'D' : case 'Z' : P(list,s); break; default: P(string,s); break; } } break; default: s->pack[0]='?';s->pack[1]='\0'; } }