From 86f5d82f2fc08798cf99a947bd87f8d57299689f Mon Sep 17 00:00:00 2001
From: Turchanov Sergey <turchanov@usa.net>
Date: Sun, 18 Oct 1998 11:22:36 +0000
Subject: [PATCH] Implemented DefDriverProc32 from winmm.dll.

---
 if1632/user.spec      |  2 +-
 include/driver.h      |  7 +++++--
 multimedia/audio.c    |  4 ++--
 multimedia/mcianim.c  |  4 ++--
 multimedia/mcicda.c   |  4 ++--
 multimedia/midi.c     |  4 ++--
 multimedia/mmsystem.c | 22 +++++++++++++++++++++-
 relay32/winmm.spec    |  2 +-
 windows/driver.c      |  6 +++---
 9 files changed, 39 insertions(+), 16 deletions(-)

diff --git a/if1632/user.spec b/if1632/user.spec
index e3bc89b1cfb..b9d9b7899e5 100644
--- a/if1632/user.spec
+++ b/if1632/user.spec
@@ -259,7 +259,7 @@ file	user.exe
 252 pascal16 OpenDriver(str str long) OpenDriver16
 253 pascal   CloseDriver(word long long) CloseDriver16
 254 pascal16 GetDriverModuleHandle(word) GetDriverModuleHandle16
-255 pascal   DefDriverProc(long word word long long) DefDriverProc
+255 pascal   DefDriverProc(long word word long long) DefDriverProc16
 256 pascal16 GetDriverInfo(word ptr) GetDriverInfo
 257 pascal16 GetNextDriver(word long) GetNextDriver
 258 pascal16 MapWindowPoints(word word ptr word) MapWindowPoints16
diff --git a/include/driver.h b/include/driver.h
index f40c29c0462..a0f214ae84c 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -79,8 +79,11 @@ typedef struct tagDRIVERITEM32A {
 	DRIVERPROC32		driverproc;
 } DRIVERITEM32A,*LPDRIVERITEM32A;
 
-LRESULT WINAPI DefDriverProc(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, 
-                             LPARAM dwParam1, LPARAM dwParam2);
+LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, 
+                               LPARAM dwParam1, LPARAM dwParam2);
+LRESULT WINAPI DefDriverProc32(DWORD dwDriverIdentifier, HDRVR32 hdrvr,
+                               UINT32 Msg, LPARAM lParam1, LPARAM lParam2);
+#define DefDriverProc WINELIB_NAME(DefDriverProc)
 HDRVR16 WINAPI OpenDriver16(LPCSTR szDriverName, LPCSTR szSectionName,
                             LPARAM lParam2);
 HDRVR32 WINAPI OpenDriver32A(LPCSTR szDriverName, LPCSTR szSectionName,
diff --git a/multimedia/audio.c b/multimedia/audio.c
index bade5c73684..64cf6aee4f6 100644
--- a/multimedia/audio.c
+++ b/multimedia/audio.c
@@ -1760,7 +1760,7 @@ LONG WAVE_DriverProc16(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
     case MCI_PASTE:		return MMSYSERR_NOTSUPPORTED;
 	
     default:
-	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+	return DefDriverProc16(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
     return MMSYSERR_NOTENABLED;
 }
@@ -1817,7 +1817,7 @@ LONG WAVE_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg,
 	
     default:
 	FIXME(mciwave, "is probably wrong\n");
-	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+	return DefDriverProc32(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
     return MMSYSERR_NOTENABLED;
 }
diff --git a/multimedia/mcianim.c b/multimedia/mcianim.c
index 76dff47b003..a12af8ef0e5 100644
--- a/multimedia/mcianim.c
+++ b/multimedia/mcianim.c
@@ -570,7 +570,7 @@ LONG ANIM_DriverProc16(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
     case MCI_PAUSE:		return ANIM_mciPause(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)PTR_SEG_TO_LIN(dwParam2));
     case MCI_RESUME:		return ANIM_mciResume(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)PTR_SEG_TO_LIN(dwParam2));
     case MCI_SEEK:		return ANIM_mciSeek(dwDevID, dwParam1, (LPMCI_SEEK_PARMS)PTR_SEG_TO_LIN(dwParam2));
-    default:			return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+    default:			return DefDriverProc16(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
 }
 /**************************************************************************
@@ -603,7 +603,7 @@ LONG ANIM_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg,
     case MCI_PAUSE:		return ANIM_mciPause(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
     case MCI_RESUME:		return ANIM_mciResume(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
     case MCI_SEEK:		return ANIM_mciSeek(dwDevID, dwParam1, (LPMCI_SEEK_PARMS)dwParam2);
-    default:			return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+    default:			return DefDriverProc32(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
 }
 
diff --git a/multimedia/mcicda.c b/multimedia/mcicda.c
index 9d02747baeb..5ddc6bac469 100644
--- a/multimedia/mcicda.c
+++ b/multimedia/mcicda.c
@@ -1075,7 +1075,7 @@ LONG CDAUDIO_DriverProc16(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
 	CDADev[dwDevID].nTracks = 0;
 	return 0;
     default:
-	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+	return DefDriverProc16(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
 #else
     return MCIERR_HARDWARE;
@@ -1133,7 +1133,7 @@ LONG CDAUDIO_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg,
 	CDADev[dwDevID].nTracks = 0;
 	return 0;
     default:
-	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+	return DefDriverProc32(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
 #else
     return MCIERR_HARDWARE;
diff --git a/multimedia/midi.c b/multimedia/midi.c
index c0e969a3e08..1ecd34711d3 100644
--- a/multimedia/midi.c
+++ b/multimedia/midi.c
@@ -2662,7 +2662,7 @@ LONG MIDI_DriverProc16(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
     case MCI_STATUS:		return MIDI_mciStatus(dwDevID, dwParam1, (LPMCI_STATUS_PARMS)PTR_SEG_TO_LIN(dwParam2));
     case MCI_GETDEVCAPS:	return MIDI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)PTR_SEG_TO_LIN(dwParam2));
     case MCI_INFO:		return MIDI_mciInfo(dwDevID, dwParam1, (LPMCI_INFO_PARMS16)PTR_SEG_TO_LIN(dwParam2));
-    default:			return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+    default:			return DefDriverProc16(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
 }
 
@@ -2696,7 +2696,7 @@ LONG MIDI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg,
     case MCI_STATUS:		return MIDI_mciStatus(dwDevID, dwParam1, (LPMCI_STATUS_PARMS)dwParam2);
     case MCI_GETDEVCAPS:	return MIDI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
     case MCI_INFO:		return MIDI_mciInfo(dwDevID, dwParam1, (LPMCI_INFO_PARMS16)dwParam2);
-    default:			return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+    default:			return DefDriverProc32(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
     }
 }
 /*-----------------------------------------------------------------------*/
diff --git a/multimedia/mmsystem.c b/multimedia/mmsystem.c
index 236c5e86940..bf1e4f17805 100644
--- a/multimedia/mmsystem.c
+++ b/multimedia/mmsystem.c
@@ -4262,7 +4262,27 @@ HANDLE16 WINAPI DrvGetModuleHandle16(HDRVR16 hDrvr)
 LRESULT WINAPI DrvDefDriverProc(DWORD dwDriverID, HDRVR16 hDriv, WORD wMsg, 
                                 DWORD dwParam1, DWORD dwParam2)
 {
-    return DefDriverProc(dwDriverID, hDriv, wMsg, dwParam1, dwParam2);
+    return DefDriverProc16(dwDriverID, hDriv, wMsg, dwParam1, dwParam2);
+}
+
+/**************************************************************************
+ * 				DefDriverProc32  [WINMM.5]
+ */
+LRESULT WINAPI DefDriverProc32(DWORD dwDriverIdentifier, HDRVR32 hdrvr,
+                               UINT32 Msg, LPARAM lParam1, LPARAM lParam2)
+{
+    switch (Msg) {
+      case DRV_LOAD:
+      case DRV_DISABLE:
+      case DRV_INSTALL:
+        return 0;
+      case DRV_ENABLE:
+      case DRV_FREE:
+      case DRV_REMOVE:
+        return 1;
+      default:
+        return 0;
+    }
 }
 
 /**************************************************************************
diff --git a/relay32/winmm.spec b/relay32/winmm.spec
index 08d30e99897..35c7f8ce707 100644
--- a/relay32/winmm.spec
+++ b/relay32/winmm.spec
@@ -5,7 +5,7 @@ type win32
   2 stdcall WINMM_2(ptr long long) PlaySound32A
   3 stub WINMM_3
   4 stub CloseDriver
-  5 stdcall DefDriverProc(long long long long long) DefDriverProc
+  5 stdcall DefDriverProc(long long long long long) DefDriverProc32
   6 stub DriverCallback
   7 stub DrvClose
   8 stub DrvDefDriverProc
diff --git a/windows/driver.c b/windows/driver.c
index e38fecfa17b..4ec9c3de92b 100644
--- a/windows/driver.c
+++ b/windows/driver.c
@@ -335,10 +335,10 @@ HMODULE32 WINAPI GetDriverModuleHandle32(HDRVR32 hDrvr)
 }
 
 /**************************************************************************
- *				DefDriverProc			[USER.255]
+ *				DefDriverProc16			[USER.255]
  */
-LRESULT WINAPI DefDriverProc(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, 
-                             LPARAM lParam1, LPARAM lParam2)
+LRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg, 
+                               LPARAM lParam1, LPARAM lParam2)
 {
     switch(wMsg)
     {
-- 
GitLab