[PATCH 2/3] winmm: Add MCI_INTEGER_PTR return type for DWORD_PTR return values.

Octavian Voicu octavian.voicu at gmail.com
Tue Aug 24 21:55:40 CDT 2010


---
 dlls/winmm/mci.c |   33 +++++++++++++++++++++++++++++++++
 include/mmddk.h  |    1 +
 2 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/dlls/winmm/mci.c b/dlls/winmm/mci.c
index 4c30b55..bff10c7 100644
--- a/dlls/winmm/mci.c
+++ b/dlls/winmm/mci.c
@@ -1153,6 +1153,7 @@ static	DWORD	MCI_HandleReturnValues(DWORD dwRet, LPWINE_MCIDRIVER wmd, DWORD ret
     static const WCHAR wszD4  [] = {'%','d',' ','%','d',' ','%','d',' ','%','d',0};
     static const WCHAR wszCol3[] = {'%','0','2','d',':','%','0','2','d',':','%','0','2','d',0};
     static const WCHAR wszCol4[] = {'%','0','2','d',':','%','0','2','d',':','%','0','2','d',':','%','0','2','d',0};
+    static const WCHAR wszLd  [] = {'%','l','d',0};
 
     if (lpstrRet) {
 	DWORD *ptrRet = (DWORD*)(data + sizeof(DWORD_PTR));
@@ -1191,6 +1192,37 @@ static	DWORD	MCI_HandleReturnValues(DWORD dwRet, LPWINE_MCIDRIVER wmd, DWORD ret
 	    default:	ERR("Ooops (%04X)\n", HIWORD(dwRet));
 	    }
 	    break;
+	case MCI_INTEGER_PTR:
+	    switch (dwRet & 0xFFFF0000ul) {
+	    case 0:
+	    case MCI_INTEGER_RETURNED:
+		snprintfW(lpstrRet, uRetLen, wszLd, *(DWORD_PTR*)ptrRet);
+		break;
+	    case MCI_RESOURCE_RETURNED:
+		/* return string which ID is HIWORD(*(DWORD_PTR*)ptrRet),
+		 * string is loaded from mmsystem.dll */
+		LoadStringW(hWinMM32Instance, HIWORD(*(DWORD_PTR*)ptrRet), lpstrRet, uRetLen);
+		break;
+	    case MCI_RESOURCE_RETURNED|MCI_RESOURCE_DRIVER:
+		/* return string which ID is HIWORD(*(DWORD_PTR*)ptrRet),
+		 * string is loaded from driver */
+		/* FIXME: this is wrong for a 16 bit handle */
+		LoadStringW(GetDriverModuleHandle(wmd->hDriver),
+			    HIWORD(*(DWORD_PTR*)ptrRet), lpstrRet, uRetLen);
+		break;
+	    case MCI_COLONIZED3_RETURN:
+		snprintfW(lpstrRet, uRetLen, wszCol3,
+			  LOBYTE(LOWORD(*(DWORD_PTR*)ptrRet)), HIBYTE(LOWORD(*(DWORD_PTR*)ptrRet)),
+			  LOBYTE(HIWORD(*(DWORD_PTR*)ptrRet)));
+		break;
+	    case MCI_COLONIZED4_RETURN:
+		snprintfW(lpstrRet, uRetLen, wszCol4,
+			  LOBYTE(LOWORD(*(DWORD_PTR*)ptrRet)), HIBYTE(LOWORD(*(DWORD_PTR*)ptrRet)),
+			  LOBYTE(HIWORD(*(DWORD_PTR*)ptrRet)), HIBYTE(HIWORD(*(DWORD_PTR*)ptrRet)));
+		break;
+	    default:	ERR("Ooops (%04X)\n", HIWORD(dwRet));
+	    }
+	    break;
 	case MCI_STRING:
 	    switch (dwRet & 0xFFFF0000ul) {
 	    case 0:
@@ -1394,6 +1426,7 @@ DWORD WINAPI mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrRet,
     case MCI_INTEGER:	offset += sizeof(DWORD); break;
     case MCI_STRING:	offset += sizeof(DWORD_PTR) + sizeof(DWORD); break;
     case MCI_RECT:	offset += 4 * sizeof(DWORD); break;
+    case MCI_INTEGER_PTR:	offset += sizeof(DWORD_PTR); break;
     default:	ERR("oops\n");
     }
 
diff --git a/include/mmddk.h b/include/mmddk.h
index d3593b0..f110c49 100644
--- a/include/mmddk.h
+++ b/include/mmddk.h
@@ -379,6 +379,7 @@ typedef JOYDEVMSGPROC *LPJOYDEVMSGPROC;
 #define MCI_HWND                10
 #define MCI_HPAL                11
 #define MCI_HDC                 12
+#define MCI_INTEGER_PTR         13
 
 #define MAKEMCIRESOURCE(wRet, wRes) MAKELRESULT((wRet), (wRes))
 
-- 
1.7.0.4




More information about the wine-patches mailing list