--- np2/win9x/cmmidi.cpp 2003/10/21 11:22:05 1.2 +++ np2/win9x/cmmidi.cpp 2005/02/07 14:46:14 1.5 @@ -34,15 +34,15 @@ enum { MIDI_MT32 = 0, MIDI_CM32L, MIDI MIDI_SC55, MIDI_SC88, MIDI_LA, MIDI_GM, MIDI_GS, MIDI_XG, MIDI_OTHER}; -static const BYTE EXCV_MTRESET[] = { +static const UINT8 EXCV_MTRESET[] = { 0xfe, 0xfe, 0xfe}; -static const BYTE EXCV_GMRESET[] = { +static const UINT8 EXCV_GMRESET[] = { 0xf0, 0x7e, 0x7f, 0x09, 0x01, 0xf7}; -static const BYTE EXCV_GSRESET[] = { +static const UINT8 EXCV_GSRESET[] = { 0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7}; -static const BYTE EXCV_XGRESET[] = { +static const UINT8 EXCV_XGRESET[] = { 0xf0, 0x43, 0x10, 0x4C, 0x00, 0x00, 0x7E, 0x00, 0xf7}; -static const BYTE EXCV_GMVOLUME[] = { +static const UINT8 EXCV_GMVOLUME[] = { 0xf0, 0x7F, 0x7F, 0x04, 0x01, 0x00, 0x00, 0xF7}; enum { @@ -83,6 +83,13 @@ struct _cmmidi; typedef struct _cmmidi _CMMIDI; typedef struct _cmmidi *CMMIDI; +typedef struct { + UINT8 prog; + UINT8 press; + UINT16 bend; + UINT8 ctrl[28]; +} _MIDICH, *MIDICH; + struct _cmmidi { UINT opened; void (*outfn)(CMMIDI self, UINT32 msg); @@ -97,21 +104,21 @@ struct _cmmidi { UINT midisyscnt; UINT mpos; - BYTE midilast; - BYTE midiexcvwait; - BYTE midimodule; + UINT8 midilast; + UINT8 midiexcvwait; + UINT8 midimodule; - BYTE buffer[MIDI_BUFFER]; + UINT8 buffer[MIDI_BUFFER]; _MIDICH mch[16]; - BYTE excvbuf[MIDI_BUFFER]; + UINT8 excvbuf[MIDI_BUFFER]; - BYTE def_en; + UINT8 def_en; MIMPIDEF def; UINT recvpos; UINT recvsize; - BYTE recvbuf[MIDI_BUFFER]; - BYTE midiinbuf[MIDI_BUFFER]; + UINT8 recvbuf[MIDI_BUFFER]; + UINT8 midiinbuf[MIDI_BUFFER]; }; typedef struct { @@ -122,12 +129,12 @@ typedef struct { static UINT midiinhdls; static MIDIINHDL midiinhdl[MIDIIN_MAX]; -static const BYTE midictrltbl[] = { 0, 1, 5, 7, 10, 11, 64, +static const UINT8 midictrltbl[] = { 0, 1, 5, 7, 10, 11, 64, 65, 66, 67, 84, 91, 93, 94, // for SC-88 71, 72, 73, 74}; // for XG -static BYTE midictrlindex[128]; +static UINT8 midictrlindex[128]; // ---- @@ -178,7 +185,7 @@ static UINT module2number(const char *mo UINT i; - for (i=0; i<(sizeof(cmmidi_mdlname)/sizeof(char *)); i++) { + for (i=0; iexcvbuf, buf, leng); midi->hmidiouthdr.lpData = (char *)midi->excvbuf; @@ -249,9 +256,9 @@ const SINT32 *ptr; static void midireset(CMMIDI midi) { -const BYTE *excv; +const UINT8 *excv; UINT excvsize; - BYTE work[4]; + UINT8 work[4]; switch(midi->midimodule) { case MIDI_GM: @@ -309,7 +316,7 @@ const BYTE *excv; static void midisetparam(CMMIDI midi) { - BYTE i; + UINT8 i; UINT j; MIDICH mch; @@ -321,7 +328,7 @@ static void midisetparam(CMMIDI midi) { if (mch->bend != 0xffff) { midi->outfn(midi, (mch->bend << 8) + 0xe0+i); } - for (j=0; jctrl[j+1] != 0xff) { midi->outfn(midi, MIDIOUTS(0xb0+i, midictrltbl[j], mch->ctrl[j+1])); @@ -336,7 +343,7 @@ static void midisetparam(CMMIDI midi) { // ---- -static UINT midiread(COMMNG self, BYTE *data) { +static UINT midiread(COMMNG self, UINT8 *data) { CMMIDI midi; @@ -350,7 +357,7 @@ static UINT midiread(COMMNG self, BYTE * return(0); } -static UINT midiwrite(COMMNG self, BYTE data) { +static UINT midiwrite(COMMNG self, UINT8 data) { CMMIDI midi; MIDICH mch; @@ -463,12 +470,12 @@ static UINT midiwrite(COMMNG self, BYTE if (midi->buffer[1] == 123) { mch->press = 0; mch->bend = 0x4000; - mch->ctrl[1] = 0; // Modulation - mch->ctrl[5] = 127; // Explession - mch->ctrl[6] = 0; // Hold - mch->ctrl[7] = 0; // Portament - mch->ctrl[8] = 0; // Sostenute - mch->ctrl[9] = 0; // Soft + mch->ctrl[1+1] = 0; // Modulation + mch->ctrl[5+1] = 127; // Explession + mch->ctrl[6+1] = 0; // Hold + mch->ctrl[7+1] = 0; // Portament + mch->ctrl[8+1] = 0; // Sostenute + mch->ctrl[9+1] = 0; // Soft } else { mch->ctrl[midictrlindex[midi->buffer[1]]] @@ -529,14 +536,15 @@ static UINT midiwrite(COMMNG self, BYTE return(0); } -static BYTE midigetstat(COMMNG self) { +static UINT8 midigetstat(COMMNG self) { return(0x00); } -static UINT midimsg(COMMNG self, UINT msg, long param) { +static long midimsg(COMMNG self, UINT msg, long param) { CMMIDI midi; + COMFLAG flag; midi = (CMMIDI)(self + 1); switch(msg) { @@ -544,6 +552,30 @@ static UINT midimsg(COMMNG self, UINT ms midireset(midi); return(1); + case COMMSG_SETFLAG: + flag = (COMFLAG)param; + if ((flag) && + (flag->size == sizeof(_COMFLAG) + sizeof(midi->mch)) && + (flag->sig == COMSIG_MIDI)) { + CopyMemory(midi->mch, flag + 1, sizeof(midi->mch)); + midisetparam(midi); + return(1); + } + break; + + case COMMSG_GETFLAG: + flag = (COMFLAG)_MALLOC(sizeof(_COMFLAG) + sizeof(midi->mch), + "MIDI FLAG"); + if (flag) { + flag->size = sizeof(_COMFLAG) + sizeof(midi->mch); + flag->sig = COMSIG_MIDI; + flag->ver = 0; + flag->param = 0; + CopyMemory(flag + 1, midi->mch, sizeof(midi->mch)); + return((long)flag); + } + break; + case COMMSG_MIMPIDEFFILE: mimpidef_load(&midi->def, (char *)param); return(1); @@ -551,15 +583,6 @@ static UINT midimsg(COMMNG self, UINT ms case COMMSG_MIMPIDEFEN: midi->def_en = (param)?TRUE:FALSE; return(1); - - case COMMSG_MIDISTATSET: - CopyMemory(midi->mch, (void *)param, sizeof(midi->mch)); - midisetparam(midi); - return(1); - - case COMMSG_MIDISTATGET: - CopyMemory((void *)param, midi->mch, sizeof(midi->mch)); - return(1); } return(0); } @@ -643,8 +666,8 @@ void cmmidi_initailize(void) { UINT i; ZeroMemory(midictrlindex, sizeof(midictrlindex)); - for (i=0; imidilast = 0x80; // midi->midiexcvwait = 0; - midi->midimodule = (BYTE)module2number(module); + midi->midimodule = (UINT8)module2number(module); FillMemory(midi->mch, sizeof(midi->mch), 0xff); return(ret); @@ -754,7 +777,7 @@ cmcre_err1: // ---- midiin callback -static void midiinrecv(CMMIDI midi, const BYTE *data, UINT size) { +static void midiinrecv(CMMIDI midi, const UINT8 *data, UINT size) { UINT wpos; UINT wsize; @@ -808,7 +831,7 @@ void cmmidi_recvdata(HMIDIIN hdr, UINT32 break; #endif } - midiinrecv(midi, (BYTE *)&data, databytes); + midiinrecv(midi, (UINT8 *)&data, databytes); } } @@ -818,7 +841,7 @@ void cmmidi_recvexcv(HMIDIIN hdr, MIDIHD midi = midiinhdlget(hdr); if (midi) { - midiinrecv(midi, (BYTE *)data->lpData, data->dwBytesRecorded); + midiinrecv(midi, (UINT8 *)data->lpData, data->dwBytesRecorded); midiInUnprepareHeader(midi->hmidiin, &midi->hmidiinhdr, sizeof(MIDIHDR)); midiInPrepareHeader(midi->hmidiin,