Commit ed18ce6b authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

Make it (almost) 32 bit only.

Reflected creation of WINEOSS module. No longer using ERR when no MIDI card is present.
parent bfa66f71
......@@ -35,7 +35,7 @@ typedef struct {
DWORD bufsize;
LPMIDIOPENDESC midiDesc;
WORD wFlags;
LPMIDIHDR16 lpQueueHdr;
LPMIDIHDR lpQueueHdr;
DWORD dwTotalPlayed;
unsigned char incoming[3];
unsigned char incPrev;
......@@ -48,7 +48,7 @@ typedef struct {
DWORD bufsize;
LPMIDIOPENDESC midiDesc;
WORD wFlags;
LPMIDIHDR16 lpQueueHdr;
LPMIDIHDR lpQueueHdr;
DWORD dwTotalPlayed;
void* lpExtra; /* according to port type (MIDI, FM...), extra data when needed */
} WINE_MIDIOUT;
......@@ -76,13 +76,12 @@ static int numStartedMidiIn = 0;
/* this structure holds pointers with information for each MIDI
* out device found.
*/
static LPMIDIOUTCAPS16 midiOutDevices[MAX_MIDIOUTDRV];
static LPMIDIOUTCAPSA midiOutDevices[MAX_MIDIOUTDRV];
/* this structure holds pointers with information for each MIDI
* in device found.
*/
static LPMIDIINCAPS16 midiInDevices [MAX_MIDIINDRV];
#endif
static LPMIDIINCAPSA midiInDevices [MAX_MIDIINDRV];
/*
* FIXME : all tests on device ID for midXXX and modYYY are made against
......@@ -94,8 +93,6 @@ static LPMIDIINCAPS16 midiInDevices [MAX_MIDIINDRV];
* Low level MIDI implementation *
*======================================================================*/
#ifdef HAVE_OSS_MIDI
static int midiOpenSeq(void);
static int midiCloseSeq(void);
......@@ -128,23 +125,24 @@ static int MIDI_UnixToWindowsDeviceType(int type)
}
return MOD_FMSYNTH;
}
#endif
/**************************************************************************
* OSS_MidiInit [internal]
*
* Initializes the MIDI devices information variables
*
*/
/* FIXME: this function shall be moved to the OSS drivers DLL entry point */
BOOL OSS_MidiInit(void)
static BOOL OSS_MidiInit(void)
{
#ifdef HAVE_OSS_MIDI
int i, status, numsynthdevs = 255, nummididevs = 255;
struct synth_info sinfo;
struct midi_info minfo;
static BOOL bInitDone = FALSE;
if (bInitDone)
return TRUE;
TRACE("Initializing the MIDI variables.\n");
bInitDone = TRUE;
/* try to open device */
if (midiOpenSeq() == -1) {
......@@ -167,7 +165,7 @@ BOOL OSS_MidiInit(void)
}
for (i = 0; i < numsynthdevs; i++) {
LPMIDIOUTCAPS16 tmplpCaps;
LPMIDIOUTCAPSA tmplpCaps;
sinfo.device = i;
status = ioctl(midiSeqFD, SNDCTL_SYNTH_INFO, &sinfo);
......@@ -177,7 +175,7 @@ BOOL OSS_MidiInit(void)
return TRUE;
}
tmplpCaps = HeapAlloc(SystemHeap, 0, sizeof(MIDIOUTCAPS16));
tmplpCaps = HeapAlloc(SystemHeap, 0, sizeof(MIDIOUTCAPSA));
if (!tmplpCaps)
break;
/* We also have the information sinfo.synth_subtype, not used here
......@@ -245,8 +243,8 @@ BOOL OSS_MidiInit(void)
}
for (i = 0; i < nummididevs; i++) {
LPMIDIOUTCAPS16 tmplpOutCaps;
LPMIDIINCAPS16 tmplpInCaps;
LPMIDIOUTCAPSA tmplpOutCaps;
LPMIDIINCAPSA tmplpInCaps;
minfo.device = i;
status = ioctl(midiSeqFD, SNDCTL_MIDI_INFO, &minfo);
......@@ -256,7 +254,7 @@ BOOL OSS_MidiInit(void)
return TRUE;
}
tmplpOutCaps = HeapAlloc(SystemHeap, 0, sizeof(MIDIOUTCAPS16));
tmplpOutCaps = HeapAlloc(SystemHeap, 0, sizeof(MIDIOUTCAPSA));
if (!tmplpOutCaps)
break;
/* This whole part is somewhat obscure to me. I'll keep trying to dig
......@@ -282,7 +280,7 @@ BOOL OSS_MidiInit(void)
midiOutDevices[numsynthdevs + i] = tmplpOutCaps;
tmplpInCaps = HeapAlloc(SystemHeap, 0, sizeof(MIDIOUTCAPS16));
tmplpInCaps = HeapAlloc(SystemHeap, 0, sizeof(MIDIOUTCAPSA));
if (!tmplpInCaps)
break;
/* This whole part is somewhat obscure to me. I'll keep trying to dig
......@@ -319,22 +317,19 @@ BOOL OSS_MidiInit(void)
/* close file and exit */
midiCloseSeq();
#endif /* HAVE_OSS_MIDI */
return TRUE;
}
#ifdef HAVE_OSS_MIDI
/**************************************************************************
* MIDI_NotifyClient [internal]
*/
static DWORD MIDI_NotifyClient(UINT16 wDevID, WORD wMsg,
static DWORD MIDI_NotifyClient(UINT wDevID, WORD wMsg,
DWORD dwParam1, DWORD dwParam2)
{
DWORD dwCallBack;
UINT16 uFlags;
HANDLE16 hDev;
UINT uFlags;
HANDLE hDev;
DWORD dwInstance;
TRACE("wDevID = %04X wMsg = %d dwParm1 = %04lX dwParam2 = %04lX\n",
......@@ -370,7 +365,7 @@ static DWORD MIDI_NotifyClient(UINT16 wDevID, WORD wMsg,
return MCIERR_INTERNAL;
}
return DriverCallback16(dwCallBack, uFlags, hDev, wMsg, dwInstance, dwParam1, dwParam2) ?
return DriverCallback(dwCallBack, uFlags, hDev, wMsg, dwInstance, dwParam1, dwParam2) ?
0 : MCIERR_INTERNAL;
}
......@@ -382,7 +377,12 @@ static int midiOpenSeq(void)
if (numOpenMidiSeq == 0) {
midiSeqFD = open(MIDI_SEQ, O_RDWR, 0);
if (midiSeqFD == -1) {
ERR("can't open '%s' ! (%d)\n", MIDI_SEQ, errno);
/* don't bark when we're facing a config without midi driver available */
if (errno != ENODEV && errno != ENXIO) {
ERR("can't open '%s' ! (%d)\n", MIDI_SEQ, errno);
} else {
TRACE("No midi device present\n");
}
return -1;
}
if (fcntl(midiSeqFD, F_SETFL, O_NONBLOCK) < 0) {
......@@ -449,7 +449,7 @@ static void midReceiveChar(WORD wDevID, unsigned char value, DWORD dwTime)
}
if (MidiInDev[wDevID].state & 2) { /* system exclusive */
LPMIDIHDR16 lpMidiHdr = MidiInDev[wDevID].lpQueueHdr;
LPMIDIHDR lpMidiHdr = MidiInDev[wDevID].lpQueueHdr;
WORD sbfb = FALSE;
if (lpMidiHdr) {
......@@ -469,7 +469,7 @@ static void midReceiveChar(WORD wDevID, unsigned char value, DWORD dwTime)
lpMidiHdr = MidiInDev[wDevID].lpQueueHdr;
lpMidiHdr->dwFlags &= ~MHDR_INQUEUE;
lpMidiHdr->dwFlags |= MHDR_DONE;
MidiInDev[wDevID].lpQueueHdr = (LPMIDIHDR16)lpMidiHdr->lpNext;
MidiInDev[wDevID].lpQueueHdr = (LPMIDIHDR)lpMidiHdr->lpNext;
if (MIDI_NotifyClient(wDevID, MIM_LONGDATA, (DWORD)lpMidiHdr->reserved, dwTime) != MMSYSERR_NOERROR) {
WARN("Couldn't notify client\n");
}
......@@ -586,9 +586,9 @@ static VOID WINAPI midTimeCallback(HWND hwnd, UINT msg, UINT id, DWORD dwTime)
/**************************************************************************
* midGetDevCaps [internal]
*/
static DWORD midGetDevCaps(WORD wDevID, LPMIDIINCAPS16 lpCaps, DWORD dwSize)
static DWORD midGetDevCaps(WORD wDevID, LPMIDIINCAPSA lpCaps, DWORD dwSize)
{
LPMIDIINCAPS16 tmplpCaps;
LPMIDIINCAPSA tmplpCaps;
TRACE("(%04X, %p, %08lX);\n", wDevID, lpCaps, dwSize);
......@@ -604,10 +604,10 @@ static DWORD midGetDevCaps(WORD wDevID, LPMIDIINCAPS16 lpCaps, DWORD dwSize)
lpCaps->wPid = tmplpCaps->wPid;
lpCaps->vDriverVersion = tmplpCaps->vDriverVersion;
strcpy(lpCaps->szPname, tmplpCaps->szPname);
if (dwSize == sizeof(MIDIINCAPS16)) {
if (dwSize == sizeof(MIDIINCAPSA)) {
/* we should run win 95, so make use of dwSupport */
lpCaps->dwSupport = tmplpCaps->dwSupport;
} else if (dwSize != sizeof(MIDIINCAPS16) - sizeof(DWORD)) {
} else if (dwSize != sizeof(MIDIINCAPSA) - sizeof(DWORD)) {
TRACE("bad size for lpCaps\n");
return MMSYSERR_INVALPARAM;
}
......@@ -720,12 +720,12 @@ static DWORD midClose(WORD wDevID)
/**************************************************************************
* midAddBuffer [internal]
*/
static DWORD midAddBuffer(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
static DWORD midAddBuffer(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
{
TRACE("(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize);
if (lpMidiHdr == NULL) return MMSYSERR_INVALPARAM;
if (sizeof(MIDIHDR16) > dwSize) return MMSYSERR_INVALPARAM;
if (sizeof(MIDIHDR) > dwSize) return MMSYSERR_INVALPARAM;
if (lpMidiHdr->dwBufferLength == 0) return MMSYSERR_INVALPARAM;
if (lpMidiHdr->dwFlags & MHDR_INQUEUE) return MIDIERR_STILLPLAYING;
if (!(lpMidiHdr->dwFlags & MHDR_PREPARED)) return MIDIERR_UNPREPARED;
......@@ -733,11 +733,11 @@ static DWORD midAddBuffer(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
if (MidiInDev[wDevID].lpQueueHdr == 0) {
MidiInDev[wDevID].lpQueueHdr = lpMidiHdr;
} else {
LPMIDIHDR16 ptr;
LPMIDIHDR ptr;
for (ptr = MidiInDev[wDevID].lpQueueHdr;
ptr->lpNext != 0;
ptr = (LPMIDIHDR16)ptr->lpNext);
ptr = (LPMIDIHDR)ptr->lpNext);
ptr->lpNext = (struct midihdr_tag*)lpMidiHdr;
}
return MMSYSERR_NOERROR;
......@@ -746,11 +746,11 @@ static DWORD midAddBuffer(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
/**************************************************************************
* midPrepare [internal]
*/
static DWORD midPrepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
static DWORD midPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
{
TRACE("(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize);
if (dwSize < sizeof(MIDIHDR16) || lpMidiHdr == 0 ||
if (dwSize < sizeof(MIDIHDR) || lpMidiHdr == 0 ||
lpMidiHdr->lpData == 0 || lpMidiHdr->dwFlags != 0 ||
lpMidiHdr->dwBufferLength >= 0x10000ul)
return MMSYSERR_INVALPARAM;
......@@ -765,11 +765,11 @@ static DWORD midPrepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
/**************************************************************************
* midUnprepare [internal]
*/
static DWORD midUnprepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
static DWORD midUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
{
TRACE("(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize);
if (dwSize < sizeof(MIDIHDR16) || lpMidiHdr == 0 ||
if (dwSize < sizeof(MIDIHDR) || lpMidiHdr == 0 ||
lpMidiHdr->lpData == 0 || lpMidiHdr->dwBufferLength >= 0x10000ul)
return MMSYSERR_INVALPARAM;
......@@ -798,7 +798,7 @@ static DWORD midReset(WORD wDevID)
(DWORD)MidiInDev[wDevID].lpQueueHdr, dwTime) != MMSYSERR_NOERROR) {
WARN("Couldn't notify client\n");
}
MidiInDev[wDevID].lpQueueHdr = (LPMIDIHDR16)MidiInDev[wDevID].lpQueueHdr->lpNext;
MidiInDev[wDevID].lpQueueHdr = (LPMIDIHDR)MidiInDev[wDevID].lpQueueHdr->lpNext;
}
return MMSYSERR_NOERROR;
......@@ -948,7 +948,7 @@ static void modFMReset(WORD wDevID)
/**************************************************************************
* modGetDevCaps [internal]
*/
static DWORD modGetDevCaps(WORD wDevID, LPMIDIOUTCAPS16 lpCaps,
static DWORD modGetDevCaps(WORD wDevID, LPMIDIOUTCAPSA lpCaps,
DWORD dwSize)
{
TRACE("(%04X, %p, %08lX);\n", wDevID, lpCaps, dwSize);
......@@ -964,7 +964,7 @@ static DWORD modGetDevCaps(WORD wDevID, LPMIDIOUTCAPS16 lpCaps,
/* FIXME Does it make any difference ? */
lpCaps->dwSupport = MIDICAPS_VOLUME|MIDICAPS_LRVOLUME;
} else {
LPMIDIOUTCAPS16 tmplpCaps;
LPMIDIOUTCAPSA tmplpCaps;
if (wDevID >= MODM_NUMDEVS) {
TRACE("MAX_MIDIOUTDRV reached !\n");
......@@ -1406,7 +1406,7 @@ static DWORD modData(WORD wDevID, DWORD dwParam)
/**************************************************************************
* modLongData [internal]
*/
static DWORD modLongData(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
static DWORD modLongData(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
{
int count;
LPBYTE lpData;
......@@ -1484,7 +1484,7 @@ static DWORD modLongData(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
/**************************************************************************
* modPrepare [internal]
*/
static DWORD modPrepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
static DWORD modPrepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
{
TRACE("(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize);
......@@ -1497,11 +1497,11 @@ static DWORD modPrepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
* asks to prepare MIDIHDR which dwFlags != 0.
* So at least check for the inqueue flag
*/
if (dwSize < sizeof(MIDIHDR16) || lpMidiHdr == 0 ||
if (dwSize < sizeof(MIDIHDR) || lpMidiHdr == 0 ||
lpMidiHdr->lpData == 0 || (lpMidiHdr->dwFlags & MHDR_INQUEUE) != 0 ||
lpMidiHdr->dwBufferLength >= 0x10000ul) {
WARN("%p %p %08lx %d/%ld\n", lpMidiHdr, lpMidiHdr->lpData,
lpMidiHdr->dwFlags, sizeof(MIDIHDR16), dwSize);
lpMidiHdr->dwFlags, sizeof(MIDIHDR), dwSize);
return MMSYSERR_INVALPARAM;
}
......@@ -1514,7 +1514,7 @@ static DWORD modPrepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
/**************************************************************************
* modUnprepare [internal]
*/
static DWORD modUnprepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
static DWORD modUnprepare(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
{
TRACE("(%04X, %p, %08lX);\n", wDevID, lpMidiHdr, dwSize);
......@@ -1523,7 +1523,7 @@ static DWORD modUnprepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
return MMSYSERR_NOTENABLED;
}
if (dwSize < sizeof(MIDIHDR16) || lpMidiHdr == 0)
if (dwSize < sizeof(MIDIHDR) || lpMidiHdr == 0)
return MMSYSERR_INVALPARAM;
if (lpMidiHdr->dwFlags & MHDR_INQUEUE)
return MIDIERR_STILLPLAYING;
......@@ -1536,12 +1536,22 @@ static DWORD modUnprepare(WORD wDevID, LPMIDIHDR16 lpMidiHdr, DWORD dwSize)
*/
static DWORD modReset(WORD wDevID)
{
unsigned chn;
TRACE("(%04X);\n", wDevID);
/* FIXME: this function should :
* turn off every note, remove sustain on all channels
* remove any pending buffers
/* stop all notes */
/* FIXME: check if 0x78B0 is channel dependant or not. I coded it so that
* it's channel dependent...
*/
return MMSYSERR_NOTENABLED;
for (chn = 0; chn < 16; chn++) {
/* turn off every note */
modData(wDevID, 0x7800 | MIDI_CTL_CHANGE | chn);
/* remove sustain on all channels */
modData(wDevID, (CTL_SUSTAIN << 8) | MIDI_CTL_CHANGE | chn);
}
/* FIXME: the LongData buffers must also be returned to the app */
return MMSYSERR_NOERROR;
}
#endif /* HAVE_OSS_MIDI */
......@@ -1551,27 +1561,35 @@ static DWORD modReset(WORD wDevID)
*======================================================================*/
/**************************************************************************
* midMessage [sample driver]
* OSS_midMessage [sample driver]
*/
DWORD WINAPI midMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
DWORD WINAPI OSS_midMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
{
TRACE("(%04X, %04X, %08lX, %08lX, %08lX);\n",
wDevID, wMsg, dwUser, dwParam1, dwParam2);
switch (wMsg) {
#ifdef HAVE_OSS_MIDI
case DRVM_INIT:
OSS_MidiInit();
/* fall thru */
case DRVM_EXIT:
case DRVM_ENABLE:
case DRVM_DISABLE:
/* FIXME: Pretend this is supported */
return 0;
case MIDM_OPEN:
return midOpen(wDevID,(LPMIDIOPENDESC)dwParam1, dwParam2);
return midOpen(wDevID, (LPMIDIOPENDESC)dwParam1, dwParam2);
case MIDM_CLOSE:
return midClose(wDevID);
case MIDM_ADDBUFFER:
return midAddBuffer(wDevID,(LPMIDIHDR16)dwParam1, dwParam2);
return midAddBuffer(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
case MIDM_PREPARE:
return midPrepare(wDevID,(LPMIDIHDR16)dwParam1, dwParam2);
return midPrepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
case MIDM_UNPREPARE:
return midUnprepare(wDevID,(LPMIDIHDR16)dwParam1, dwParam2);
return midUnprepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
case MIDM_GETDEVCAPS:
return midGetDevCaps(wDevID,(LPMIDIINCAPS16)dwParam1,dwParam2);
return midGetDevCaps(wDevID, (LPMIDIINCAPSA)dwParam1,dwParam2);
case MIDM_GETNUMDEVS:
return MIDM_NUMDEVS;
case MIDM_RESET:
......@@ -1588,16 +1606,24 @@ DWORD WINAPI midMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
}
/**************************************************************************
* modMessage [sample driver]
* OSS_modMessage [sample driver]
*/
DWORD WINAPI modMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
DWORD WINAPI OSS_modMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
{
TRACE("(%04X, %04X, %08lX, %08lX, %08lX);\n",
wDevID, wMsg, dwUser, dwParam1, dwParam2);
switch (wMsg) {
#ifdef HAVE_OSS_MIDI
case DRVM_INIT:
OSS_MidiInit();
/* fall thru */
case DRVM_EXIT:
case DRVM_ENABLE:
case DRVM_DISABLE:
/* FIXME: Pretend this is supported */
return 0;
case MODM_OPEN:
return modOpen(wDevID, (LPMIDIOPENDESC)dwParam1, dwParam2);
case MODM_CLOSE:
......@@ -1605,13 +1631,13 @@ DWORD WINAPI modMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
case MODM_DATA:
return modData(wDevID, dwParam1);
case MODM_LONGDATA:
return modLongData(wDevID, (LPMIDIHDR16)dwParam1, dwParam2);
return modLongData(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
case MODM_PREPARE:
return modPrepare(wDevID, (LPMIDIHDR16)dwParam1, dwParam2);
return modPrepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
case MODM_UNPREPARE:
return modUnprepare(wDevID, (LPMIDIHDR16)dwParam1, dwParam2);
return modUnprepare(wDevID, (LPMIDIHDR)dwParam1, dwParam2);
case MODM_GETDEVCAPS:
return modGetDevCaps(wDevID, (LPMIDIOUTCAPS16)dwParam1, dwParam2);
return modGetDevCaps(wDevID, (LPMIDIOUTCAPSA)dwParam1, dwParam2);
case MODM_GETNUMDEVS:
return MODM_NUMDEVS;
case MODM_GETVOLUME:
......@@ -1627,50 +1653,4 @@ DWORD WINAPI modMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
return MMSYSERR_NOTSUPPORTED;
}
/**************************************************************************
* MIDI_DriverProc32 [sample driver]
*/
LONG CALLBACK MIDI_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg,
DWORD dwParam1, DWORD dwParam2)
{
switch (wMsg) {
case DRV_LOAD: return 1;
case DRV_FREE: return 1;
case DRV_OPEN: return 1;
case DRV_CLOSE: return 1;
case DRV_ENABLE: return 1;
case DRV_DISABLE: return 1;
case DRV_QUERYCONFIGURE: return 1;
case DRV_CONFIGURE: MessageBoxA(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1;
case DRV_INSTALL: return DRVCNF_RESTART;
case DRV_REMOVE: return DRVCNF_RESTART;
default:
TRACE("Sending msg=%lu to default driver proc\n", wMsg);
return DefDriverProc16(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
}
/**************************************************************************
* MIDI_DriverProc16 [sample driver]
*/
LONG CALLBACK MIDI_DriverProc16(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
DWORD dwParam1, DWORD dwParam2)
{
switch (wMsg) {
case DRV_LOAD: return 1;
case DRV_FREE: return 1;
case DRV_OPEN: return 1;
case DRV_CLOSE: return 1;
case DRV_ENABLE: return 1;
case DRV_DISABLE: return 1;
case DRV_QUERYCONFIGURE: return 1;
case DRV_CONFIGURE: MessageBoxA(0, "Sample Midi Linux Driver !", "MMLinux Driver", MB_OK); return 1;
case DRV_INSTALL: return DRVCNF_RESTART;
case DRV_REMOVE: return DRVCNF_RESTART;
default:
TRACE("Sending msg=%u to default driver proc\n", wMsg);
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
}
/*-----------------------------------------------------------------------*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment