コード例 #1
0
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; 
}
コード例 #2
0
ファイル: abcp_test1.c プロジェクト: bhinesley/pynthesizer
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);
}
コード例 #3
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'; 
  }
}