[1/2] dlls/mmsystem.dll16: Reorder the thread and time functions to avoid the need for forward declarations.

Francois Gouget fgouget at free.fr
Mon Oct 26 03:28:38 CDT 2009


---
 dlls/mmsystem.dll16/mmsystem.c |  563 ++++++++++++++++++++--------------------
 1 files changed, 280 insertions(+), 283 deletions(-)

diff --git a/dlls/mmsystem.dll16/mmsystem.c b/dlls/mmsystem.dll16/mmsystem.c
index a7578e7..b07629b 100644
--- a/dlls/mmsystem.dll16/mmsystem.c
+++ b/dlls/mmsystem.dll16/mmsystem.c
@@ -46,7 +46,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mmsys);
 
-static WINE_MMTHREAD*   WINMM_GetmmThread(HANDLE16);
 
 static CRITICAL_SECTION_DEBUG mmdrv_critsect_debug =
 {
@@ -86,6 +85,190 @@ int WINAPI MMSYSTEM_WEP(HINSTANCE16 hInstance, WORD wDataSeg,
 }
 
 /* ###################################################
+ * #                     TIME                        #
+ * ###################################################
+ */
+
+/******************************************************************
+ *		MMSYSTEM_MMTIME32to16
+ *
+ *
+ */
+void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32)
+{
+    mmt16->wType = mmt32->wType;
+    /* layout of rest is the same for 32/16,
+     * Note: mmt16->u is 2 bytes smaller than mmt32->u, which has padding
+     */
+    memcpy(&(mmt16->u), &(mmt32->u), sizeof(mmt16->u));
+}
+
+/******************************************************************
+ *		MMSYSTEM_MMTIME16to32
+ *
+ *
+ */
+void MMSYSTEM_MMTIME16to32(LPMMTIME mmt32, const MMTIME16* mmt16)
+{
+    mmt32->wType = mmt16->wType;
+    /* layout of rest is the same for 32/16,
+     * Note: mmt16->u is 2 bytes smaller than mmt32->u, which has padding
+     */
+    memcpy(&(mmt32->u), &(mmt16->u), sizeof(mmt16->u));
+}
+
+/**************************************************************************
+ * 				timeGetSystemTime	[MMSYSTEM.601]
+ */
+MMRESULT16 WINAPI timeGetSystemTime16(LPMMTIME16 lpTime, UINT16 wSize)
+{
+    if (wSize >= sizeof(*lpTime)) {
+	lpTime->wType = TIME_MS;
+	lpTime->u.ms = GetTickCount();
+
+	TRACE("=> %u\n", lpTime->u.ms);
+    }
+
+    return 0;
+}
+
+struct timer_entry {
+    struct list         entry;
+    UINT                id;
+    LPTIMECALLBACK16    func16;
+    DWORD               user;
+};
+
+static struct list timer_list = LIST_INIT(timer_list);
+
+static void CALLBACK timeCB3216(UINT id, UINT uMsg, DWORD_PTR user, DWORD_PTR dw1, DWORD_PTR dw2)
+{
+    struct timer_entry* te = (void*)user;
+    WORD                args[8];
+    DWORD               ret;
+
+    args[7] = LOWORD(id);
+    args[6] = LOWORD(uMsg);
+    args[5] = HIWORD(te->user);
+    args[4] = LOWORD(te->user);
+    args[3] = HIWORD(dw1);
+    args[2] = LOWORD(dw2);
+    args[1] = HIWORD(dw2);
+    args[0] = LOWORD(dw2);
+    WOWCallback16Ex((DWORD)te->func16, WCB16_PASCAL, sizeof(args), args, &ret);
+}
+
+/**************************************************************************
+ * 				timeSetEvent		[MMSYSTEM.602]
+ */
+MMRESULT16 WINAPI timeSetEvent16(UINT16 wDelay, UINT16 wResol, LPTIMECALLBACK16 lpFunc,
+				 DWORD dwUser, UINT16 wFlags)
+{
+    MMRESULT16          id;
+    struct timer_entry* te;
+
+    switch (wFlags & (TIME_CALLBACK_EVENT_SET|TIME_CALLBACK_EVENT_PULSE))
+    {
+    case TIME_CALLBACK_EVENT_SET:
+    case TIME_CALLBACK_EVENT_PULSE:
+        id = timeSetEvent(wDelay, wResol, (LPTIMECALLBACK)lpFunc, dwUser, wFlags);
+        break;
+    case TIME_CALLBACK_FUNCTION:
+        te = HeapAlloc(GetProcessHeap(), 0, sizeof(*te));
+        if (!te) return 0;
+        te->func16 = lpFunc;
+        te->user = dwUser;
+        id = te->id = timeSetEvent(wDelay, wResol, timeCB3216, (DWORD_PTR)te, wFlags);
+        if (id)
+        {
+            EnterCriticalSection(&mmdrv_cs);
+            list_add_tail(&timer_list, &te->entry);
+            LeaveCriticalSection(&mmdrv_cs);
+        }
+        else HeapFree(GetProcessHeap(), 0, te);
+        break;
+    default:
+        id = 0;
+        break;
+    }
+    return id;
+}
+
+/**************************************************************************
+ * 				timeKillEvent		[MMSYSTEM.603]
+ */
+MMRESULT16 WINAPI timeKillEvent16(UINT16 wID)
+{
+    MMRESULT16  ret = timeKillEvent(wID);
+    struct timer_entry* te;
+
+    if (ret == TIMERR_NOERROR)
+    {
+        EnterCriticalSection(&mmdrv_cs);
+        LIST_FOR_EACH_ENTRY(te, &timer_list, struct timer_entry, entry)
+        {
+            if (wID == te->id)
+            {
+                list_remove(&te->entry);
+                HeapFree(GetProcessHeap(), 0, te);
+                break;
+            }
+        }
+        LeaveCriticalSection(&mmdrv_cs);
+    }
+    return ret;
+}
+
+/**************************************************************************
+ * 				timeGetDevCaps		[MMSYSTEM.604]
+ */
+MMRESULT16 WINAPI timeGetDevCaps16(LPTIMECAPS16 lpCaps, UINT16 wSize)
+{
+    TIMECAPS    caps;
+    MMRESULT    ret;
+    TRACE("(%p, %u) !\n", lpCaps, wSize);
+
+    if (lpCaps == NULL)	return MMSYSERR_INVALPARAM;
+
+    ret = timeGetDevCaps(&caps, sizeof(caps));
+    if (ret == MMSYSERR_NOERROR) {
+	TIMECAPS16 tc16;
+	tc16.wPeriodMin = caps.wPeriodMin;
+	tc16.wPeriodMax = caps.wPeriodMax;
+	memcpy(lpCaps, &tc16, min(wSize, sizeof(tc16)));
+    }
+    return ret;
+}
+
+/**************************************************************************
+ * 				timeBeginPeriod	[MMSYSTEM.605]
+ */
+MMRESULT16 WINAPI timeBeginPeriod16(UINT16 wPeriod)
+{
+    TRACE("(%u) !\n", wPeriod);
+
+    return timeBeginPeriod(wPeriod);
+}
+
+/**************************************************************************
+ * 				timeEndPeriod		[MMSYSTEM.606]
+ */
+MMRESULT16 WINAPI timeEndPeriod16(UINT16 wPeriod)
+{
+    TRACE("(%u) !\n", wPeriod);
+
+    return timeEndPeriod(wPeriod);
+}
+
+/**************************************************************************
+ * 				timeGetTime    [MMSYSTEM.607]
+ */
+DWORD WINAPI timeGetTime16(void)
+{
+    return timeGetTime();
+}
+
+/* ###################################################
  * #                  PlaySound                      #
  * ###################################################
  */
@@ -1684,8 +1867,6 @@ void	WINAPI	mmTaskYield16(void)
     }
 }
 
-extern DWORD	WINAPI	GetProcessFlags(DWORD);
-
 /******************************************************************
  *		WINMM_GetmmThread
  *
@@ -1696,7 +1877,102 @@ static  WINE_MMTHREAD*	WINMM_GetmmThread(HANDLE16 h)
     return MapSL(MAKESEGPTR(h, 0));
 }
 
-DWORD WINAPI WINE_mmThreadEntryPoint(LPVOID);
+static	void	MMSYSTEM_ThreadBlock(WINE_MMTHREAD* lpMMThd)
+{
+    MSG		msg;
+    DWORD	ret;
+
+    if (lpMMThd->dwThreadID != GetCurrentThreadId())
+	ERR("Not called by thread itself\n");
+
+    for (;;) {
+	ResetEvent(lpMMThd->hEvent);
+	if (InterlockedDecrement(&lpMMThd->dwSignalCount) >= 0)
+	    break;
+	InterlockedIncrement(&lpMMThd->dwSignalCount);
+
+	TRACE("S1\n");
+
+	ret = MsgWaitForMultipleObjects(1, &lpMMThd->hEvent, FALSE, INFINITE, QS_ALLINPUT);
+	switch (ret) {
+	case WAIT_OBJECT_0:	/* Event */
+	    TRACE("S2.1\n");
+	    break;
+	case WAIT_OBJECT_0 + 1:	/* Msg */
+	    TRACE("S2.2\n");
+	    if (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) {
+		TranslateMessage(&msg);
+		DispatchMessageA(&msg);
+	    }
+	    break;
+	default:
+	    WARN("S2.x unsupported ret val 0x%08x\n", ret);
+	}
+	TRACE("S3\n");
+    }
+}
+
+/**************************************************************************
+ * 				mmThreadBlock		[MMSYSTEM.1122]
+ */
+void	WINAPI mmThreadBlock16(HANDLE16 hndl)
+{
+    TRACE("(%04x)!\n", hndl);
+
+    if (hndl) {
+	WINE_MMTHREAD*	lpMMThd = WINMM_GetmmThread(hndl);
+
+	if (lpMMThd->hThread != 0) {
+	    DWORD	lc;
+
+	    ReleaseThunkLock(&lc);
+	    MMSYSTEM_ThreadBlock(lpMMThd);
+	    RestoreThunkLock(lc);
+	} else {
+	    mmTaskBlock16(lpMMThd->hTask);
+	}
+    }
+    TRACE("done\n");
+}
+
+/**************************************************************************
+ * 			        __wine_mmThreadEntryPoint (MMSYSTEM.2047)
+ */
+DWORD WINAPI WINE_mmThreadEntryPoint(LPVOID p)
+{
+    HANDLE16		hndl = (HANDLE16)(DWORD_PTR)p;
+    WINE_MMTHREAD*	lpMMThd = WINMM_GetmmThread(hndl);
+
+    TRACE("(%04x %p)\n", hndl, lpMMThd);
+
+    lpMMThd->hTask = LOWORD(GetCurrentTask());
+    TRACE("[10-%p] setting hTask to 0x%08x\n", lpMMThd->hThread, lpMMThd->hTask);
+    lpMMThd->dwStatus = 0x10;
+    MMSYSTEM_ThreadBlock(lpMMThd);
+    TRACE("[20-%p]\n", lpMMThd->hThread);
+    lpMMThd->dwStatus = 0x20;
+    if (lpMMThd->fpThread) {
+	WOWCallback16(lpMMThd->fpThread, lpMMThd->dwThreadPmt);
+    }
+    lpMMThd->dwStatus = 0x30;
+    TRACE("[30-%p]\n", lpMMThd->hThread);
+    while (lpMMThd->dwCounter) {
+	Sleep(1);
+	/* WOWYield16();*/
+    }
+    TRACE("[XX-%p]\n", lpMMThd->hThread);
+    /* paranoia */
+    lpMMThd->dwSignature = WINE_MMTHREAD_DELETED;
+    /* close lpMMThread->hVxD directIO */
+    if (lpMMThd->hEvent)
+	CloseHandle(lpMMThd->hEvent);
+    GlobalFree16(hndl);
+    TRACE("done\n");
+
+    return 0;
+}
+
+extern DWORD	WINAPI	GetProcessFlags(DWORD);
 
 /**************************************************************************
  * 				mmThreadCreate		[MMSYSTEM.1120]
@@ -1821,64 +2097,6 @@ void WINAPI mmThreadSignal16(HANDLE16 hndl)
     }
 }
 
-static	void	MMSYSTEM_ThreadBlock(WINE_MMTHREAD* lpMMThd)
-{
-    MSG		msg;
-    DWORD	ret;
-
-    if (lpMMThd->dwThreadID != GetCurrentThreadId())
-	ERR("Not called by thread itself\n");
-
-    for (;;) {
-	ResetEvent(lpMMThd->hEvent);
-	if (InterlockedDecrement(&lpMMThd->dwSignalCount) >= 0)
-	    break;
-	InterlockedIncrement(&lpMMThd->dwSignalCount);
-
-	TRACE("S1\n");
-
-	ret = MsgWaitForMultipleObjects(1, &lpMMThd->hEvent, FALSE, INFINITE, QS_ALLINPUT);
-	switch (ret) {
-	case WAIT_OBJECT_0:	/* Event */
-	    TRACE("S2.1\n");
-	    break;
-	case WAIT_OBJECT_0 + 1:	/* Msg */
-	    TRACE("S2.2\n");
-	    if (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) {
-		TranslateMessage(&msg);
-		DispatchMessageA(&msg);
-	    }
-	    break;
-	default:
-	    WARN("S2.x unsupported ret val 0x%08x\n", ret);
-	}
-	TRACE("S3\n");
-    }
-}
-
-/**************************************************************************
- * 				mmThreadBlock		[MMSYSTEM.1122]
- */
-void	WINAPI mmThreadBlock16(HANDLE16 hndl)
-{
-    TRACE("(%04x)!\n", hndl);
-
-    if (hndl) {
-	WINE_MMTHREAD*	lpMMThd = WINMM_GetmmThread(hndl);
-
-	if (lpMMThd->hThread != 0) {
-	    DWORD	lc;
-
-	    ReleaseThunkLock(&lc);
-	    MMSYSTEM_ThreadBlock(lpMMThd);
-	    RestoreThunkLock(lc);
-	} else {
-	    mmTaskBlock16(lpMMThd->hTask);
-	}
-    }
-    TRACE("done\n");
-}
-
 /**************************************************************************
  * 				mmThreadIsCurrent	[MMSYSTEM.1123]
  */
@@ -1944,43 +2162,6 @@ HANDLE16 WINAPI mmThreadGetTask16(HANDLE16 hndl)
     return ret;
 }
 
-/**************************************************************************
- * 			        __wine_mmThreadEntryPoint (MMSYSTEM.2047)
- */
-DWORD WINAPI WINE_mmThreadEntryPoint(LPVOID p)
-{
-    HANDLE16		hndl = (HANDLE16)(DWORD_PTR)p;
-    WINE_MMTHREAD*	lpMMThd = WINMM_GetmmThread(hndl);
-
-    TRACE("(%04x %p)\n", hndl, lpMMThd);
-
-    lpMMThd->hTask = LOWORD(GetCurrentTask());
-    TRACE("[10-%p] setting hTask to 0x%08x\n", lpMMThd->hThread, lpMMThd->hTask);
-    lpMMThd->dwStatus = 0x10;
-    MMSYSTEM_ThreadBlock(lpMMThd);
-    TRACE("[20-%p]\n", lpMMThd->hThread);
-    lpMMThd->dwStatus = 0x20;
-    if (lpMMThd->fpThread) {
-	WOWCallback16(lpMMThd->fpThread, lpMMThd->dwThreadPmt);
-    }
-    lpMMThd->dwStatus = 0x30;
-    TRACE("[30-%p]\n", lpMMThd->hThread);
-    while (lpMMThd->dwCounter) {
-	Sleep(1);
-	/* WOWYield16();*/
-    }
-    TRACE("[XX-%p]\n", lpMMThd->hThread);
-    /* paranoia */
-    lpMMThd->dwSignature = WINE_MMTHREAD_DELETED;
-    /* close lpMMThread->hVxD directIO */
-    if (lpMMThd->hEvent)
-	CloseHandle(lpMMThd->hEvent);
-    GlobalFree16(hndl);
-    TRACE("done\n");
-
-    return 0;
-}
-
 typedef	BOOL16 (WINAPI *MMCPLCALLBACK)(HWND, LPCSTR, LPCSTR, LPCSTR);
 
 /**************************************************************************
@@ -2094,190 +2275,6 @@ LRESULT WINAPI DriverProc16(DWORD dwDevID, HDRVR16 hDrv, WORD wMsg,
 }
 
 /* ###################################################
- * #                     TIME                        #
- * ###################################################
- */
-
-/******************************************************************
- *		MMSYSTEM_MMTIME32to16
- *
- *
- */
-void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32)
-{
-    mmt16->wType = mmt32->wType;
-    /* layout of rest is the same for 32/16,
-     * Note: mmt16->u is 2 bytes smaller than mmt32->u, which has padding
-     */
-    memcpy(&(mmt16->u), &(mmt32->u), sizeof(mmt16->u));
-}
-
-/******************************************************************
- *		MMSYSTEM_MMTIME16to32
- *
- *
- */
-void MMSYSTEM_MMTIME16to32(LPMMTIME mmt32, const MMTIME16* mmt16)
-{
-    mmt32->wType = mmt16->wType;
-    /* layout of rest is the same for 32/16,
-     * Note: mmt16->u is 2 bytes smaller than mmt32->u, which has padding
-     */
-    memcpy(&(mmt32->u), &(mmt16->u), sizeof(mmt16->u));
-}
-
-/**************************************************************************
- * 				timeGetSystemTime	[MMSYSTEM.601]
- */
-MMRESULT16 WINAPI timeGetSystemTime16(LPMMTIME16 lpTime, UINT16 wSize)
-{
-    if (wSize >= sizeof(*lpTime)) {
-	lpTime->wType = TIME_MS;
-	lpTime->u.ms = GetTickCount();
-
-	TRACE("=> %u\n", lpTime->u.ms);
-    }
-
-    return 0;
-}
-
-struct timer_entry {
-    struct list         entry;
-    UINT                id;
-    LPTIMECALLBACK16    func16;
-    DWORD               user;
-};
-
-static struct list timer_list = LIST_INIT(timer_list);
-
-static void CALLBACK timeCB3216(UINT id, UINT uMsg, DWORD_PTR user, DWORD_PTR dw1, DWORD_PTR dw2)
-{
-    struct timer_entry* te = (void*)user;
-    WORD                args[8];
-    DWORD               ret;
-
-    args[7] = LOWORD(id);
-    args[6] = LOWORD(uMsg);
-    args[5] = HIWORD(te->user);
-    args[4] = LOWORD(te->user);
-    args[3] = HIWORD(dw1);
-    args[2] = LOWORD(dw2);
-    args[1] = HIWORD(dw2);
-    args[0] = LOWORD(dw2);
-    WOWCallback16Ex((DWORD)te->func16, WCB16_PASCAL, sizeof(args), args, &ret);
-}
-
-/**************************************************************************
- * 				timeSetEvent		[MMSYSTEM.602]
- */
-MMRESULT16 WINAPI timeSetEvent16(UINT16 wDelay, UINT16 wResol, LPTIMECALLBACK16 lpFunc,
-				 DWORD dwUser, UINT16 wFlags)
-{
-    MMRESULT16          id;
-    struct timer_entry* te;
-
-    switch (wFlags & (TIME_CALLBACK_EVENT_SET|TIME_CALLBACK_EVENT_PULSE))
-    {
-    case TIME_CALLBACK_EVENT_SET:
-    case TIME_CALLBACK_EVENT_PULSE:
-        id = timeSetEvent(wDelay, wResol, (LPTIMECALLBACK)lpFunc, dwUser, wFlags);
-        break;
-    case TIME_CALLBACK_FUNCTION:
-        te = HeapAlloc(GetProcessHeap(), 0, sizeof(*te));
-        if (!te) return 0;
-        te->func16 = lpFunc;
-        te->user = dwUser;
-        id = te->id = timeSetEvent(wDelay, wResol, timeCB3216, (DWORD_PTR)te, wFlags);
-        if (id)
-        {
-            EnterCriticalSection(&mmdrv_cs);
-            list_add_tail(&timer_list, &te->entry);
-            LeaveCriticalSection(&mmdrv_cs);
-        }
-        else HeapFree(GetProcessHeap(), 0, te);
-        break;
-    default:
-        id = 0;
-        break;
-    }
-    return id;
-}
-
-/**************************************************************************
- * 				timeKillEvent		[MMSYSTEM.603]
- */
-MMRESULT16 WINAPI timeKillEvent16(UINT16 wID)
-{
-    MMRESULT16  ret = timeKillEvent(wID);
-    struct timer_entry* te;
-
-    if (ret == TIMERR_NOERROR)
-    {
-        EnterCriticalSection(&mmdrv_cs);
-        LIST_FOR_EACH_ENTRY(te, &timer_list, struct timer_entry, entry)
-        {
-            if (wID == te->id)
-            {
-                list_remove(&te->entry);
-                HeapFree(GetProcessHeap(), 0, te);
-                break;
-            }
-        }
-        LeaveCriticalSection(&mmdrv_cs);
-    }
-    return ret;
-}
-
-/**************************************************************************
- * 				timeGetDevCaps		[MMSYSTEM.604]
- */
-MMRESULT16 WINAPI timeGetDevCaps16(LPTIMECAPS16 lpCaps, UINT16 wSize)
-{
-    TIMECAPS    caps;
-    MMRESULT    ret;
-    TRACE("(%p, %u) !\n", lpCaps, wSize);
-
-    if (lpCaps == NULL)	return MMSYSERR_INVALPARAM;
-
-    ret = timeGetDevCaps(&caps, sizeof(caps));
-    if (ret == MMSYSERR_NOERROR) {
-	TIMECAPS16 tc16;
-	tc16.wPeriodMin = caps.wPeriodMin;
-	tc16.wPeriodMax = caps.wPeriodMax;
-	memcpy(lpCaps, &tc16, min(wSize, sizeof(tc16)));
-    }
-    return ret;
-}
-
-/**************************************************************************
- * 				timeBeginPeriod	[MMSYSTEM.605]
- */
-MMRESULT16 WINAPI timeBeginPeriod16(UINT16 wPeriod)
-{
-    TRACE("(%u) !\n", wPeriod);
-
-    return timeBeginPeriod(wPeriod);
-}
-
-/**************************************************************************
- * 				timeEndPeriod		[MMSYSTEM.606]
- */
-MMRESULT16 WINAPI timeEndPeriod16(UINT16 wPeriod)
-{
-    TRACE("(%u) !\n", wPeriod);
-
-    return timeEndPeriod(wPeriod);
-}
-
-/**************************************************************************
- * 				timeGetTime    [MMSYSTEM.607]
- */
-DWORD WINAPI timeGetTime16(void)
-{
-    return timeGetTime();
-}
-
-/* ###################################################
  * #                     JOYSTICK                    #
  * ###################################################
  */
-- 
1.6.3.3




More information about the wine-patches mailing list