--- np2/win9x/cmmidi.cpp 2003/10/21 11:22:05 1.2 +++ np2/win9x/cmmidi.cpp 2003/12/25 05:07:49 1.4 @@ -83,6 +83,13 @@ struct _cmmidi; typedef struct _cmmidi _CMMIDI; typedef struct _cmmidi *CMMIDI; +typedef struct { + BYTE prog; + BYTE press; + UINT16 bend; + BYTE ctrl[28]; +} _MIDICH, *MIDICH; + struct _cmmidi { UINT opened; void (*outfn)(CMMIDI self, UINT32 msg); @@ -336,7 +343,7 @@ static void midisetparam(CMMIDI midi) { // ---- -static UINT midiread(COMMNG self, BYTE *data) { +static UINT midiread(COMMNG self, BYTE *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, BYTE 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 BYTE 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); }