#include #include #include #include #define MSG(s) fprintf(stderr, "%s() %s L%d : %s\n", __func__, __FILE__, __LINE__, s) #define ERR(s) do{ fprintf(stderr, "ERR "); MSG(s); exit(1); }while(0) int bk_buf = -1; int rd(void) { int v; if((v = bk_buf) < 0) return getchar(); bk_buf = -1; return v; } void bk(int v) { if(bk_buf >= 0) ERR("give up"); bk_buf = v; } void rd_str(int n, char *s) { int i; for(i=0; i> 4) & 0xf; low = v & 0xf; }else bk(v); switch(hi){ case 8: case 9: note = rd(); rd(); /* skip velo */ note_onoff(hi == 9, sec, low, note); break; case 0xb: case 0xe: rd(); rd(); break; case 0xc: rd(); break; case 0xf: rd(); switch(low){ case 0: while(rd() != 0xf7); break; case 0xf: n = rd(); for(i=0; i