Moved the 16 bit driver functions callout into the dir.
diff --git a/windows/.cvsignore b/windows/.cvsignore index f9bbb55..5b8a0dd 100644 --- a/windows/.cvsignore +++ b/windows/.cvsignore
@@ -1,2 +1,3 @@ Makefile +driver.glue.c hook.glue.c
diff --git a/windows/Makefile.in b/windows/Makefile.in index a35785d..c8fdf3d 100644 --- a/windows/Makefile.in +++ b/windows/Makefile.in
@@ -39,7 +39,8 @@ winpos.c \ winproc.c -GLUE = hook.c +GLUE = hook.c \ + driver.c all: $(MODULE).o
diff --git a/windows/driver.c b/windows/driver.c index 30894c8..9522fe7 100644 --- a/windows/driver.c +++ b/windows/driver.c
@@ -10,11 +10,10 @@ #include <string.h> #include "heap.h" -#include "callback.h" +#include "winuser.h" #include "driver.h" #include "ldt.h" #include "module.h" -#include "mmsystem.h" #include "mmddk.h" #include "debugtools.h" @@ -23,11 +22,17 @@ static LPWINE_DRIVER lpDrvItemList = NULL; /* TODO list : - * - LoadModule count and clean up is not handled correctly (it's not a problem as - * long as FreeLibrary is not working correctly) - * - msacm has some FIXME related to new code here... + * - LoadModule count and clean up is not handled correctly (it's not a + * problem as long as FreeLibrary is not working correctly) + * - shoudln't the allocations be done on a per process basis ? + * - get rid of external function "int DRIVER_GetType(HDRVR hDrvr)" + * - split 16/32 bit functions between DLLs as windows do (16 bit in USER, 32 bit in WINMM) */ +/* ### start build ### */ +extern LONG CALLBACK DRIVER_CallTo16_long_lwwll(FARPROC16,LONG,WORD,WORD,LONG,LONG); +/* ### stop build ### */ + /************************************************************************** * LoadStartupDrivers [internal] */ @@ -115,7 +120,7 @@ /************************************************************************** * DRIVER_GetType [internal] * - * From a hDrvr (being 16 or 32 bits), returns the WINE internal structure. + * From a hDrvr (being 16 or 32 bits), returns TRUE the flags for the driver. */ int DRIVER_GetType(HDRVR hDrvr) { @@ -474,8 +479,8 @@ case WINE_DI_TYPE_16: TRACE("Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n", lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, hDriver, msg, lParam1, lParam2); - retval = Callbacks->CallDriverProc(lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, hDriver, - msg, lParam1, lParam2); + retval = DRIVER_CallTo16_long_lwwll((FARPROC16)lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, + hDriver, msg, lParam1, lParam2); break; case WINE_DI_TYPE_32: mapRet = DRIVER_MapMsg16To32(msg, &lParam1, &lParam2); @@ -523,8 +528,8 @@ if (mapRet >= 0) { TRACE("Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n", lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, lpDrv->hDriver16, msg, lParam1, lParam2); - retval = Callbacks->CallDriverProc(lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, lpDrv->hDriver16, - msg, lParam1, lParam2); + retval = DRIVER_CallTo16_long_lwwll((FARPROC16)lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, + lpDrv->hDriver16, msg, lParam1, lParam2); if (mapRet >= 1) { DRIVER_UnMapMsg32To16(msg, lParam1, lParam2); } @@ -802,6 +807,10 @@ drvName, sizeof(drvName), "SYSTEM.INI") > 0) { hDriver = DRIVER_TryOpenDriver16(drvName, lParam, FALSE); } + if (!hDriver) + ERR("Failed to open driver %s from section %s\n", lpDriverName, lpSectionName); + else + TRACE("=> %08x\n", hDriver); return hDriver; } @@ -847,7 +856,10 @@ } } } - TRACE("retval='%08x'\n", hDriver); + if (!hDriver) + ERR("Failed to open driver %s from section %s\n", lpDriverName, lpSectionName); + else + TRACE("=> %08x\n", hDriver); return hDriver; } @@ -910,6 +922,7 @@ DWORD WINAPI GetDriverFlags(HDRVR hDrvr) { FIXME("(%04x); stub!\n", hDrvr); + /* should I merge it with DRIVER_GetType() ? */ return 0; }