winmm 16/32 split (#7)
Eric Pouech
eric.pouech at wanadoo.fr
Tue Oct 29 09:29:01 CST 2002
this is the final round of patches (split in 9 small parts from 7 to 15)
let them roll!!
ChangeLog:
- finish mmio separation
- no longer storing function pointers in global IData
A+
-------------- next part --------------
--- winmm_ref/mmio.c Sat Oct 26 15:06:40 2002
+++ winmm_7/mmio.c Tue Oct 29 11:43:03 2002
@@ -44,6 +44,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(mmio);
+LRESULT (*pFnMmioCallback16)(SEGPTR,LPMMIOINFO,UINT,LPARAM,LPARAM) /* = NULL */;
+
/**************************************************************************
* mmioDosIOProc [internal]
*/
@@ -71,9 +73,7 @@
}
/* if filename NULL, assume open file handle in adwInfo[0] */
- if (!szFileName) {
- lpmmioinfo->adwInfo[0] = DosFileHandleToWin32Handle(lpmmioinfo->adwInfo[0]);
- } else {
+ if (szFileName) {
OFSTRUCT ofs;
lpmmioinfo->adwInfo[0] = (DWORD)OpenFile(szFileName, &ofs, lpmmioinfo->dwFlags & 0xFFFF);
}
@@ -352,9 +352,9 @@
switch (ioProc->type) {
case MMIO_PROC_16:
- if (WINMM_IData && WINMM_IData->pFnMmioCallback16)
- result = WINMM_IData->pFnMmioCallback16((SEGPTR)ioProc->pIOProc,
- mmioinfo, wMsg, lp1, lp2);
+ if (pFnMmioCallback16)
+ result = pFnMmioCallback16((SEGPTR)ioProc->pIOProc,
+ mmioinfo, wMsg, lp1, lp2);
break;
case MMIO_PROC_32A:
case MMIO_PROC_32W:
@@ -579,9 +579,6 @@
wm->info.pchBuffer = NULL;
}
- if (wm->ioProc->type == MMIO_PROC_16)
- wm->info.dwReserved1 = MapLS(wm->info.pchBuffer);
-
wm->info.cchBuffer = cchBuffer;
wm->info.pchNext = wm->info.pchBuffer;
wm->info.pchEndRead = wm->info.pchBuffer;
@@ -1350,3 +1347,4 @@
HeapFree(GetProcessHeap(),0,sznFn);
return ret;
}
+
--- winmm_ref/mmsystem.c Tue Oct 29 09:54:09 2002
+++ winmm_7/mmsystem.c Tue Oct 29 12:03:44 2002
@@ -49,9 +49,7 @@
extern LONG CALLBACK MMSYSTEM_CallTo16_long_lwll (LPMMIOPROC16,LONG,WORD,LONG,LONG);
/* ### stop build ### */
-static LRESULT CALLBACK mmioCallback16(SEGPTR cb16,
- LPMMIOINFO lpmmioinfo, UINT uMessage,
- LPARAM lParam1, LPARAM lParam2);
+static LRESULT MMIO_Callback16(SEGPTR, LPMMIOINFO, UINT, LPARAM, LPARAM);
/* ###################################################
* # LIBRARY #
@@ -85,10 +83,12 @@
}
WINMM_IData->hWinMM16Instance = hinstDLL;
WINMM_IData->h16Module32 = hndl;
- WINMM_IData->pFnMmioCallback16 = mmioCallback16;
+ /* hook in our 16 bit function pointers */
+ pFnMmioCallback16 = MMIO_Callback16;
break;
case DLL_PROCESS_DETACH:
FreeLibrary(WINMM_IData->h16Module32);
+ pFnMmioCallback16 = NULL;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
@@ -2511,13 +2511,12 @@
}
/******************************************************************
- * mmioCallback16
+ * MMIO_Callback16
*
*
*/
-static LRESULT CALLBACK mmioCallback16(SEGPTR cb16,
- LPMMIOINFO lpmmioinfo, UINT uMessage,
- LPARAM lParam1, LPARAM lParam2)
+static LRESULT MMIO_Callback16(SEGPTR cb16, LPMMIOINFO lpmmioinfo, UINT uMessage,
+ LPARAM lParam1, LPARAM lParam2)
{
LRESULT result;
MMIOINFO16 mmioInfo16;
@@ -2552,8 +2551,6 @@
/******************************************************************
* MMIO_ResetSegmentedData
*
- *
- *
*/
static LRESULT MMIO_SetSegmentedBuffer(HMMIO hmmio, SEGPTR ptr)
{
@@ -2583,7 +2580,10 @@
mmioinfo.pIOProc = (LPMMIOPROC)lpmmioinfo16->pIOProc;
mmioinfo.cchBuffer = lpmmioinfo16->cchBuffer;
mmioinfo.pchBuffer = MapSL((DWORD)lpmmioinfo16->pchBuffer);
- mmioinfo.adwInfo[0] = lpmmioinfo16->adwInfo[0];
+ mmioinfo.adwInfo[0] = lpmmioinfo16->adwInfo[0];
+ /* if we don't have a file name, it's likely a passed open file descriptor */
+ if (!szFileName)
+ mmioinfo.adwInfo[0] = DosFileHandleToWin32Handle(mmioinfo.adwInfo[0]);
mmioinfo.adwInfo[1] = lpmmioinfo16->adwInfo[1];
mmioinfo.adwInfo[2] = lpmmioinfo16->adwInfo[2];
mmioinfo.adwInfo[3] = lpmmioinfo16->adwInfo[3];
--- winmm_ref/winemm.h Tue Oct 29 16:13:57 2002
+++ winmm_7/winemm.h Tue Oct 29 16:09:10 2002
@@ -217,7 +217,6 @@
/* LPWINE_MIXER lpMixer; */
/* mmio part */
LPWINE_MMIO lpMMIO;
- LRESULT (CALLBACK* pFnMmioCallback16)(SEGPTR,LPMMIOINFO,UINT,LPARAM,LPARAM);
/* playsound and sndPlaySound */
WINE_PLAYSOUND* lpPlaySound;
HANDLE psLastEvent;
@@ -340,6 +339,11 @@
/* Global variables */
extern LPWINE_MM_IDATA WINMM_IData;
+
+/* pointers to 16 bit functions (if sibling MMSYSTEM.DLL is loaded
+ * NULL otherwise
+ */
+extern LRESULT (*pFnMmioCallback16)(SEGPTR,LPMMIOINFO,UINT,LPARAM,LPARAM);
/* HANDLE16 -> HANDLE conversions */
#define HDRVR_32(h16) ((HDRVR)(ULONG_PTR)(h16))
More information about the wine-patches
mailing list