diff --git a/dlls/msacm32/msacm32_main.c b/dlls/msacm32/msacm32_main.c
index 34fc13d..d46ce27 100644
--- a/dlls/msacm32/msacm32_main.c
+++ b/dlls/msacm32/msacm32_main.c
@@ -1,7 +1,10 @@
+/* -*- tab-width: 8; c-basic-offset: 4 -*- */
+
 /*
  *      MSACM32 library
  *
  *      Copyright 1998  Patrik Stridvall
+ *		  1999	Eric Pouech
  */
 
 #include "winbase.h"
@@ -10,47 +13,46 @@
 #include "debugtools.h"
 #include "msacm.h"
 #include "msacmdrv.h"
+#include "wineacm.h"
 #include "winversion.h"
 
 DEFAULT_DEBUG_CHANNEL(msacm)
-
+	
 /**********************************************************************/
-
+	
 static DWORD MSACM_dwProcessesAttached = 0;
 
 /***********************************************************************
  *           MSACM_LibMain32 (MSACM32.init) 
  */
-BOOL WINAPI MSACM32_LibMain(
-  HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+BOOL WINAPI MSACM32_LibMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
 {
-  switch(fdwReason)
-    {
+    TRACE("0x%x 0x%lx %p\n", hInstDLL, fdwReason, lpvReserved);
+
+    switch (fdwReason) {
     case DLL_PROCESS_ATTACH:
-      if(MSACM_dwProcessesAttached == 0)
-	{
-	  MSACM_hHeap = HeapCreate(0, 0x10000, 0);
-	  MSACM_RegisterAllDrivers();
+	if (MSACM_dwProcessesAttached == 0) {
+	    MSACM_hHeap = HeapCreate(0, 0x10000, 0);
+	    MSACM_RegisterAllDrivers();
 	}
-      MSACM_dwProcessesAttached++;
-      break;
+	MSACM_dwProcessesAttached++;
+	break;
     case DLL_PROCESS_DETACH:
-      MSACM_dwProcessesAttached--;
-      if(MSACM_dwProcessesAttached == 0)
-	{
-	  MSACM_UnregisterAllDrivers();
-	  HeapDestroy(MSACM_hHeap);
-	  MSACM_hHeap = (HANDLE) NULL;
+	MSACM_dwProcessesAttached--;
+	if (MSACM_dwProcessesAttached == 0) {
+	    MSACM_UnregisterAllDrivers();
+	    HeapDestroy(MSACM_hHeap);
+	    MSACM_hHeap = (HANDLE) NULL;
 	}
-      break;
+	break;
     case DLL_THREAD_ATTACH:
-      break;
+	break;
     case DLL_THREAD_DETACH:
-      break;
+	break;
     default:
-      break;
+	break;
     }
-  return TRUE;
+    return TRUE;
 }
 
 /***********************************************************************
@@ -62,16 +64,15 @@
 /***********************************************************************
  *           acmGetVersion32 (MSACM32.34)
  */
-DWORD WINAPI acmGetVersion()
+DWORD WINAPI acmGetVersion(void)
 {
-  switch(VERSION_GetVersion()) 
-    {
+    switch (VERSION_GetVersion()) {
     default: 
-      FIXME("%s not supported\n", VERSION_GetVersionName());
+	FIXME("%s not supported\n", VERSION_GetVersionName());
     case WIN95:
-      return 0x04000000; /* 4.0.0 */
+	return 0x04000000; /* 4.0.0 */
     case NT40:
-      return 0x04000565; /* 4.0.1381 */
+	return 0x04000565; /* 4.0.1381 */
     }
 }
 
@@ -84,40 +85,38 @@
 /***********************************************************************
  *           acmMetrics (MSACM32.36)
  */
-MMRESULT WINAPI acmMetrics(
-  HACMOBJ hao, UINT uMetric, LPVOID  pMetric)
+MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID  pMetric)
 {
-  PWINE_ACMOBJ pao = MSACM_GetObj(hao);
-  BOOL bLocal = TRUE;
-
-  FIXME("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
-
-  switch(uMetric)
-    {
+    PWINE_ACMOBJ pao = MSACM_GetObj(hao);
+    BOOL bLocal = TRUE;
+    
+    FIXME("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
+    
+    switch (uMetric) {
     case ACM_METRIC_COUNT_DRIVERS:
-      bLocal = FALSE;
+	bLocal = FALSE;
     case ACM_METRIC_COUNT_LOCAL_DRIVERS:
-      if(!pao)
-	return MMSYSERR_INVALHANDLE;  
-      return MMSYSERR_NOTSUPPORTED;
+	if (!pao)
+	    return MMSYSERR_INVALHANDLE;  
+	return MMSYSERR_NOTSUPPORTED;
     case ACM_METRIC_COUNT_CODECS:
-      bLocal = FALSE;
+	bLocal = FALSE;
     case ACM_METRIC_COUNT_LOCAL_CODECS:
-      return MMSYSERR_NOTSUPPORTED;
+	return MMSYSERR_NOTSUPPORTED;
     case ACM_METRIC_COUNT_CONVERTERS:
-      bLocal = FALSE;
+	bLocal = FALSE;
     case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
-      return MMSYSERR_NOTSUPPORTED;
+	return MMSYSERR_NOTSUPPORTED;
     case ACM_METRIC_COUNT_FILTERS:
-      bLocal = FALSE;
+	bLocal = FALSE;
     case ACM_METRIC_COUNT_LOCAL_FILTERS:
-      return MMSYSERR_NOTSUPPORTED;
+	return MMSYSERR_NOTSUPPORTED;
     case ACM_METRIC_COUNT_DISABLED:
-      bLocal = FALSE;
+	bLocal = FALSE;
     case ACM_METRIC_COUNT_LOCAL_DISABLED:
-      if(!pao)
-	return MMSYSERR_INVALHANDLE;  
-      return MMSYSERR_NOTSUPPORTED;
+	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:
@@ -126,7 +125,7 @@
     case ACM_METRIC_DRIVER_SUPPORT:
     case ACM_METRIC_DRIVER_PRIORITY:
     default:
-      return MMSYSERR_NOTSUPPORTED;
+	return MMSYSERR_NOTSUPPORTED;
     }
-  return MMSYSERR_NOERROR;
+    return MMSYSERR_NOERROR;
 }
