Damjan Jovanovic : mmsystem: Improve 16 bit mapping for MCI_WHERE/PUT/ FREEZE/UNFREEZE.

Alexandre Julliard julliard at winehq.org
Wed Apr 20 11:05:16 CDT 2011


Module: wine
Branch: master
Commit: 0e3204389ef1e3f00c5c67ba89c8927487155d4b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0e3204389ef1e3f00c5c67ba89c8927487155d4b

Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date:   Tue Apr 19 22:55:44 2011 +0200

mmsystem: Improve 16 bit mapping for MCI_WHERE/PUT/FREEZE/UNFREEZE.

---

 dlls/mmsystem.dll16/mci16.c |   45 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/dlls/mmsystem.dll16/mci16.c b/dlls/mmsystem.dll16/mci16.c
index 80be9ef..2e90bbf 100644
--- a/dlls/mmsystem.dll16/mci16.c
+++ b/dlls/mmsystem.dll16/mci16.c
@@ -148,7 +148,6 @@ static MMSYSTEM_MapType	MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l
     case MCI_CUE:
     case MCI_CUT:
     case MCI_DELETE:
-    case MCI_FREEZE:
     case MCI_GETDEVCAPS:
 	/* case MCI_INDEX: */
 	/* case MCI_MARK: */
@@ -156,7 +155,6 @@ static MMSYSTEM_MapType	MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l
     case MCI_PASTE:
     case MCI_PAUSE:
     case MCI_PLAY:
-    case MCI_PUT:
     case MCI_REALIZE:
     case MCI_RECORD:
     case MCI_RESUME:
@@ -169,11 +167,31 @@ static MMSYSTEM_MapType	MCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* l
     case MCI_STEP:
     case MCI_STOP:
 	/* case MCI_UNDO: */
-    case MCI_UNFREEZE:
     case MCI_UPDATE:
-    case MCI_WHERE:
 	*lParam = (DWORD)MapSL(*lParam);
 	return MMSYSTEM_MAP_OK;
+    case MCI_WHERE:
+    case MCI_FREEZE:
+    case MCI_UNFREEZE:
+    case MCI_PUT:
+        {
+            LPMCI_DGV_RECT_PARMS mdrp32 = HeapAlloc(GetProcessHeap(), 0,
+                sizeof(LPMCI_DGV_RECT_PARMS16) + sizeof(MCI_DGV_RECT_PARMS));
+            LPMCI_DGV_RECT_PARMS16 mdrp16 = MapSL(*lParam);
+            if (mdrp32) {
+                *(LPMCI_DGV_RECT_PARMS16*)(mdrp32) = mdrp16;
+                mdrp32 = (LPMCI_DGV_RECT_PARMS)((char*)mdrp32 + sizeof(LPMCI_DGV_RECT_PARMS16));
+                mdrp32->dwCallback = mdrp16->dwCallback;
+                mdrp32->rc.left = mdrp16->rc.left;
+                mdrp32->rc.top = mdrp16->rc.top;
+                mdrp32->rc.right = mdrp16->rc.right;
+                mdrp32->rc.bottom = mdrp16->rc.bottom;
+            } else {
+                return MMSYSTEM_MAP_NOMEM;
+            }
+            *lParam = (DWORD)mdrp32;
+        }
+        return MMSYSTEM_MAP_OKMEM;
     case MCI_WINDOW:
 	/* in fact, I would also need the dwFlags... to see
 	 * which members of lParam are effectively used
@@ -343,7 +361,6 @@ static  MMSYSTEM_MapType	MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR
     case MCI_CUE:
     case MCI_CUT:
     case MCI_DELETE:
-    case MCI_FREEZE:
     case MCI_GETDEVCAPS:
 	/* case MCI_INDEX: */
 	/* case MCI_MARK: */
@@ -351,7 +368,6 @@ static  MMSYSTEM_MapType	MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR
     case MCI_PASTE:
     case MCI_PAUSE:
     case MCI_PLAY:
-    case MCI_PUT:
     case MCI_REALIZE:
     case MCI_RECORD:
     case MCI_RESUME:
@@ -364,11 +380,24 @@ static  MMSYSTEM_MapType	MCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR
     case MCI_STEP:
     case MCI_STOP:
 	/* case MCI_UNDO: */
-    case MCI_UNFREEZE:
     case MCI_UPDATE:
-    case MCI_WHERE:
 	return MMSYSTEM_MAP_OK;
 
+    case MCI_WHERE:
+    case MCI_FREEZE:
+    case MCI_UNFREEZE:
+    case MCI_PUT:
+        if (lParam) {
+            LPMCI_DGV_RECT_PARMS16 mdrp16 = (LPMCI_DGV_RECT_PARMS16)lParam;
+            LPMCI_DGV_RECT_PARMS mdrp32 = (LPMCI_DGV_RECT_PARMS)((char*)lParam + sizeof(LPMCI_DGV_RECT_PARMS16));
+            mdrp16->dwCallback = mdrp32->dwCallback;
+            mdrp16->rc.left = mdrp32->rc.left;
+            mdrp16->rc.top = mdrp32->rc.top;
+            mdrp16->rc.right = mdrp32->rc.right;
+            mdrp16->rc.bottom = mdrp32->rc.bottom;
+            HeapFree(GetProcessHeap(), 0, (LPVOID)lParam);
+        }
+        return MMSYSTEM_MAP_OK;
     case MCI_WINDOW:
 	/* FIXME ?? see Map function */
 	return MMSYSTEM_MAP_OK;




More information about the wine-cvs mailing list