diff --git a/include/mmsystem.h b/include/mmsystem.h index bf34f1719c481eb128e02bcdab53e3c9a8e72cfe..28affc09f9dd4addb695f8e7715eea9da7194296 100644 --- a/include/mmsystem.h +++ b/include/mmsystem.h @@ -753,8 +753,11 @@ typedef void (CALLBACK *LPTIMECALLBACK16)(UINT16 uTimerID, UINT16 uMessage, DWOR typedef void (CALLBACK *LPTIMECALLBACK32)(UINT32 uTimerID, UINT32 uMessage, DWORD dwUser, DWORD dw1, DWORD dw2); DECL_WINELIB_TYPE(LPTIMECALLBACK) -#define TIME_ONESHOT 0 /* program timer for single event */ -#define TIME_PERIODIC 1 /* program for continuous periodic event */ +#define TIME_ONESHOT 0x0000 /* program timer for single event */ +#define TIME_PERIODIC 0x0001 /* program for continuous periodic event */ +#define TIME_CALLBACK_FUNCTION 0x0000 /* callback is function */ +#define TIME_CALLBACK_EVENT_SET 0x0010 /* callback is event - use SetEvent */ +#define TIME_CALLBACK_EVENT_PULSE 0x0020/* callback is event - use PulseEvent */ typedef struct { UINT16 wPeriodMin; /* minimum period supported */ diff --git a/include/multimedia.h b/include/multimedia.h index 843228dbf8e07fca63c76a591a421de9659eba4d..b1ccca7aff75e108365cdeec4c10cb1c0a47ef52 100644 --- a/include/multimedia.h +++ b/include/multimedia.h @@ -11,7 +11,7 @@ #include "mmsystem.h" -#define MAX_MIDIINDRV (1) +#define MAX_MIDIINDRV (16) /* For now I'm making 16 the maximum number of midi devices one can * have. This should be more than enough for everybody. But as a purist, * I intend to make it unbounded in the future, as soon as I figure diff --git a/multimedia/init.c b/multimedia/init.c index 0e3e0b08e76a30ed939ef93b43022eb51525e780..78e81997e322895b582318469f6370563bb71d1a 100644 --- a/multimedia/init.c +++ b/multimedia/init.c @@ -92,8 +92,8 @@ BOOL32 MULTIMEDIA_Init(void) } if (numsynthdevs > MAX_MIDIOUTDRV) { - ERR(midi, "MAX_MIDIOUTDRV was enough for the number of devices. " - "Some FM devices will not be available.\n"); + ERR(midi, "MAX_MIDIOUTDRV (%d) was enough for the number of devices (%d). " + "Some FM devices will not be available.\n",MAX_MIDIOUTDRV,numsynthdevs); numsynthdevs = MAX_MIDIOUTDRV; } @@ -167,8 +167,8 @@ BOOL32 MULTIMEDIA_Init(void) } if (nummididevs > MAX_MIDIINDRV) { - ERR(midi, "MAX_MIDIINDRV was not enough for the number of devices. " - "Some MIDI devices will not be available.\n"); + ERR(midi, "MAX_MIDIINDRV (%d) was not enough for the number of devices (%d). " + "Some MIDI devices will not be available.\n",MAX_MIDIINDRV,nummididevs); nummididevs = MAX_MIDIINDRV; } diff --git a/multimedia/time.c b/multimedia/time.c index b4b6eb010d630527c8b7280bd9194548a6703115..ce9bc14fdcd5861e9cd9d3e7882658653f84dedc 100644 --- a/multimedia/time.c +++ b/multimedia/time.c @@ -72,13 +72,25 @@ static void TIME_TriggerCallBack(LPTIMERENTRY lpTimer, DWORD dwCurrent) * PostMessage), and must reside in DLL (therefore uses stack of active application). So I * guess current implementation via SetTimer has to be improved upon. */ - if (lpTimer->isWin32) - lpTimer->lpFunc(lpTimer->wTimerID,0,lpTimer->dwUser,0,0); - else - Callbacks->CallTimeFuncProc(lpTimer->lpFunc, - lpTimer->wTimerID,0, - lpTimer->dwUser,0,0); - + switch (lpTimer->wFlags & 0x30) { + case TIME_CALLBACK_FUNCTION: + if (lpTimer->isWin32) + lpTimer->lpFunc(lpTimer->wTimerID,0,lpTimer->dwUser,0,0); + else + Callbacks->CallTimeFuncProc(lpTimer->lpFunc, + lpTimer->wTimerID,0, + lpTimer->dwUser,0,0); + break; + case TIME_CALLBACK_EVENT_SET: + SetEvent((HANDLE32)lpTimer->lpFunc); + break; + case TIME_CALLBACK_EVENT_PULSE: + PulseEvent((HANDLE32)lpTimer->lpFunc); + break; + default: + FIXME(mmtime,"Unknown callback type 0x%04x for mmtime callback (%p),ignored.\n",lpTimer->wFlags,lpTimer->lpFunc); + break; + } TRACE(mmtime, "after CallBack16 !\n"); fflush(stdout); } @@ -327,13 +339,13 @@ MMRESULT16 WINAPI timeEndPeriod16(UINT16 wPeriod) DWORD WINAPI timeGetTime() { DWORD dwNewTick = GetTickCount(); - + + StartMMTime(); #ifdef USE_FAKE_MM_TIMERS if (bUseFakeTimers) { if (wInCallBackLoop++) { DWORD dwDelta; - StartMMTime(); if (dwNewTick < dwLastCBTick) { ERR(mmtime, "dwNewTick(%lu) < dwLastCBTick(%lu)\n", dwNewTick, dwLastCBTick); @@ -357,7 +369,5 @@ DWORD WINAPI timeGetTime() wInCallBackLoop--; } #endif - TRACE(mmtime, "Time = %ld\n", dwNewTick); - return dwNewTick; }