void sys_poll_midi(void) { int i, nmess, throttle = 100; PmEvent buffer; for (i = 0; i < mac_nmidiindev; i++) { while (1) { if (!throttle--) goto overload; nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1); if (nmess > 0) { int status = Pm_MessageStatus(buffer.message); int data1 = Pm_MessageData1(buffer.message); int data2 = Pm_MessageData2(buffer.message); int data3 = ((buffer.message >> 24) & 0xff); int msgtype = ((status & 0xf0) == 0xf0 ? status : (status & 0xf0)); if (nd_sysex_mode) nd_sysex_inword(i, status, data1, data2, data3); else switch (msgtype) { case MIDINOTEOFF: case MIDINOTEON: case MIDIPOLYTOUCH: case MIDICONTROLCHANGE: case MIDIPITCHBEND: case MIDISONGPOS: sys_midibytein(i, status); sys_midibytein(i, data1); sys_midibytein(i, data2); break; case MIDIPROGRAMCHANGE: case MIDICHANNELTOUCH: case MIDITIMECODE: case MIDISONGSELECT: sys_midibytein(i, status); sys_midibytein(i, data1); break; case MIDISTARTSYSEX: nd_sysex_mode=1; nd_sysex_inword(i, status, data1, data2, data3); break; default: sys_midibytein(i, status); break; } } else break; }
void sys_poll_midi(void) { int i, nmess, throttle = 100; PmEvent buffer; for (i = 0; i < mac_nmidiindev; i++) { while (1) { if (!throttle--) goto overload; nmess = Pm_Read(mac_midiindevlist[i], &buffer, 1); if (nmess > 0) { int status = Pm_MessageStatus(buffer.message); int data1 = Pm_MessageData1(buffer.message); int data2 = Pm_MessageData2(buffer.message); int data3 = ((buffer.message >> 24) & 0xFF); int msgtype = (status >> 4) - 8; switch (msgtype) { case 0: case 1: case 2: case 3: case 6: sys_midibytein(i, status); sys_midibytein(i, data1); sys_midibytein(i, data2); break; case 4: case 5: sys_midibytein(i, status); sys_midibytein(i, data1); break; case 7: nd_sysex_mode=1; nd_sysex_inword(i, status, data1, data2, data3); break; default: if (nd_sysex_mode) nd_sysex_inword(i, status, data1, data2, data3); } } else break; }