[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