Started the implementation of MSACM.DLL and MSACM32.DLL.

diff --git a/dlls/msacm32/msacm32_main.c b/dlls/msacm32/msacm32_main.c
new file mode 100644
index 0000000..f1dc476
--- /dev/null
+++ b/dlls/msacm32/msacm32_main.c
@@ -0,0 +1,131 @@
+/*
+ *      MSACM32 library
+ *
+ *      Copyright 1998  Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "debug.h"
+#include "mmsystem.h"
+#include "msacm.h"
+#include "msacmdrv.h"
+#include "winversion.h"
+
+/**********************************************************************/
+
+static DWORD MSACM_dwProcessesAttached32 = 0;
+
+/***********************************************************************
+ *           MSACM_LibMain32 (MSACM32.init) 
+ */
+BOOL32 WINAPI MSACM32_LibMain(
+  HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+  switch(fdwReason)
+    {
+    case DLL_PROCESS_ATTACH:
+      if(MSACM_dwProcessesAttached32 == 0)
+	{
+	  MSACM_hHeap32 = HeapCreate(0, 0x10000, 0);
+	  MSACM_RegisterAllDrivers32();
+	}
+      MSACM_dwProcessesAttached32++;
+      break;
+    case DLL_PROCESS_DETACH:
+      MSACM_dwProcessesAttached32--;
+      if(MSACM_dwProcessesAttached32 == 0)
+	{
+	  MSACM_UnregisterAllDrivers32();
+	  HeapDestroy(MSACM_hHeap32);
+	  MSACM_hHeap32 = (HANDLE32) NULL;
+	}
+      break;
+    case DLL_THREAD_ATTACH:
+      break;
+    case DLL_THREAD_DETACH:
+      break;
+    default:
+      break;
+    }
+  return TRUE;
+}
+
+/***********************************************************************
+ *           XRegThunkEntry (MSACM32.1)
+ * FIXME
+ *   No documentation found.
+ */
+
+/***********************************************************************
+ *           acmGetVersion32 (MSACM32.34)
+ */
+DWORD WINAPI acmGetVersion32()
+{
+  switch(VERSION_GetVersion()) 
+    {
+    default: 
+      FIXME(msacm, "%s not supported\n", VERSION_GetVersionName());
+    case WIN95:
+      return 0x04000000; /* 4.0.0 */
+    case NT40:
+      return 0x04000565; /* 4.0.1381 */
+    }
+}
+
+/***********************************************************************
+ *           acmMessage32 (MSACM32.35)
+ * FIXME
+ *   No documentation found.
+ */
+
+/***********************************************************************
+ *           acmMetrics (MSACM32.36)
+ */
+MMRESULT32 WINAPI acmMetrics32(
+  HACMOBJ32 hao, UINT32 uMetric, LPVOID  pMetric)
+{
+  PWINE_ACMOBJ32 pao = MSACM_GetObj32(hao);
+  BOOL32 bLocal = TRUE;
+
+  FIXME(msacm, "(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
+
+  switch(uMetric)
+    {
+    case ACM_METRIC_COUNT_DRIVERS:
+      bLocal = FALSE;
+    case ACM_METRIC_COUNT_LOCAL_DRIVERS:
+      if(!pao)
+	return MMSYSERR_INVALHANDLE;  
+      return MMSYSERR_NOTSUPPORTED;
+    case ACM_METRIC_COUNT_CODECS:
+      bLocal = FALSE;
+    case ACM_METRIC_COUNT_LOCAL_CODECS:
+      return MMSYSERR_NOTSUPPORTED;
+    case ACM_METRIC_COUNT_CONVERTERS:
+      bLocal = FALSE;
+    case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
+      return MMSYSERR_NOTSUPPORTED;
+    case ACM_METRIC_COUNT_FILTERS:
+      bLocal = FALSE;
+    case ACM_METRIC_COUNT_LOCAL_FILTERS:
+      return MMSYSERR_NOTSUPPORTED;
+    case ACM_METRIC_COUNT_DISABLED:
+      bLocal = FALSE;
+    case ACM_METRIC_COUNT_LOCAL_DISABLED:
+      if(!pao)
+	return MMSYSERR_INVALHANDLE;  
+      return MMSYSERR_NOTSUPPORTED;
+    case ACM_METRIC_COUNT_HARDWARE:
+    case ACM_METRIC_HARDWARE_WAVE_INPUT:
+    case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
+    case ACM_METRIC_MAX_SIZE_FORMAT:
+    case ACM_METRIC_MAX_SIZE_FILTER:
+    case ACM_METRIC_DRIVER_SUPPORT:
+    case ACM_METRIC_DRIVER_PRIORITY:
+    default:
+      return MMSYSERR_NOTSUPPORTED;
+    }
+  return MMSYSERR_NOERROR;
+}