Replaced VERSION_* calls by exported API equivalents.
[wine] / dlls / msacm / msacm32_main.c
1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */
2
3 /*
4  *      MSACM32 library
5  *
6  *      Copyright 1998  Patrik Stridvall
7  *                1999  Eric Pouech
8  */
9
10 #include "winbase.h"
11 #include "winerror.h"
12 #include "windef.h"
13 #include "debugtools.h"
14 #include "msacm.h"
15 #include "msacmdrv.h"
16 #include "wineacm.h"
17
18 DEFAULT_DEBUG_CHANNEL(msacm);
19         
20 /**********************************************************************/
21         
22 static DWORD MSACM_dwProcessesAttached = 0;
23
24 /***********************************************************************
25  *           MSACM_LibMain (MSACM32.init) 
26  */
27 BOOL WINAPI MSACM32_LibMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
28 {
29     TRACE("0x%x 0x%lx %p\n", hInstDLL, fdwReason, lpvReserved);
30
31     switch (fdwReason) {
32     case DLL_PROCESS_ATTACH:
33         if (MSACM_dwProcessesAttached == 0) {
34             MSACM_hHeap = HeapCreate(0, 0x10000, 0);
35             MSACM_RegisterAllDrivers();
36         }
37         MSACM_dwProcessesAttached++;
38         break;
39     case DLL_PROCESS_DETACH:
40         MSACM_dwProcessesAttached--;
41         if (MSACM_dwProcessesAttached == 0) {
42             MSACM_UnregisterAllDrivers();
43             HeapDestroy(MSACM_hHeap);
44             MSACM_hHeap = (HANDLE) NULL;
45         }
46         break;
47     case DLL_THREAD_ATTACH:
48         break;
49     case DLL_THREAD_DETACH:
50         break;
51     default:
52         break;
53     }
54     return TRUE;
55 }
56
57 /***********************************************************************
58  *           XRegThunkEntry (MSACM32.1)
59  * FIXME
60  *   No documentation found.
61  */
62
63 /***********************************************************************
64  *           acmGetVersion (MSACM32.34)
65  */
66 DWORD WINAPI acmGetVersion(void)
67 {
68     OSVERSIONINFOA version;
69     GetVersionExA( &version );
70     switch(version.dwPlatformId)
71     {
72     case VER_PLATFORM_WIN32_NT:
73         return 0x04000565; /* 4.0.1381 */
74     default:
75         FIXME("%ld not supported",version.dwPlatformId);
76     case VER_PLATFORM_WIN32_WINDOWS:
77         return 0x04000000; /* 4.0.0 */
78   }
79 }
80
81 /***********************************************************************
82  *           acmMessage32 (MSACM32.35)
83  * FIXME
84  *   No documentation found.
85  */
86
87 /***********************************************************************
88  *           acmMetrics (MSACM32.36)
89  */
90 MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID  pMetric)
91 {
92     PWINE_ACMOBJ        pao = MSACM_GetObj(hao);
93     BOOL                bLocal = TRUE;
94     PWINE_ACMDRIVERID   padid;
95     DWORD               val = 0;
96
97     FIXME("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
98     
99     switch (uMetric) {
100     case ACM_METRIC_COUNT_DRIVERS:
101         bLocal = FALSE;
102         /* fall thru */
103     case ACM_METRIC_COUNT_LOCAL_DRIVERS:
104         if (!pao)
105             return MMSYSERR_INVALHANDLE;
106         for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
107             if (padid->bEnabled /* && (local(padid) || !bLocal) */)
108                 val++;
109         *(LPDWORD)pMetric = val;
110         return 0;
111
112     case ACM_METRIC_COUNT_CODECS:
113         if (!pao)
114             return MMSYSERR_INVALHANDLE;
115         bLocal = FALSE;
116         /* fall thru */
117     case ACM_METRIC_COUNT_LOCAL_CODECS:
118         /* FIXME: don't know how to differentiate codec, converters & filters yet */
119         for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
120             if (padid->bEnabled /* && (local(padid) || !bLocal) */)
121                 val++;
122         *(LPDWORD)pMetric = val;
123         return 0;
124
125     case ACM_METRIC_COUNT_CONVERTERS:
126         bLocal = FALSE;
127         /* fall thru */
128     case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
129         /* FIXME: don't know how to differentiate codec, converters & filters yet */
130         for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
131             if (padid->bEnabled /* && (local(padid) || !bLocal) */)
132                 val++;
133         *(LPDWORD)pMetric = val;
134         return 0;
135
136     case ACM_METRIC_COUNT_FILTERS:
137         bLocal = FALSE;
138         /* fall thru */
139     case ACM_METRIC_COUNT_LOCAL_FILTERS:
140         /* FIXME: don't know how to differentiate codec, converters & filters yet */
141         for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
142             if (padid->bEnabled /* && (local(padid) || !bLocal) */)
143                 val++;
144         *(LPDWORD)pMetric = val;
145         return 0;
146
147     case ACM_METRIC_COUNT_DISABLED:
148         bLocal = FALSE;
149         /* fall thru */
150     case ACM_METRIC_COUNT_LOCAL_DISABLED:
151         if (!pao)
152             return MMSYSERR_INVALHANDLE;  
153         for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
154             if (!padid->bEnabled /* && (local(padid) || !bLocal) */)
155                 val++;
156         *(LPDWORD)pMetric = val;
157         return 0;
158     
159     case ACM_METRIC_MAX_SIZE_FORMAT:
160         /* FIXME: According to MSDN, this should return the size of the largest WAVEFORMATEX
161            structure in the system. How is this calculated? */
162         *(LPDWORD)pMetric = sizeof (WAVEFORMATEX);   
163         return 0;
164         
165     case ACM_METRIC_COUNT_HARDWARE:
166     case ACM_METRIC_HARDWARE_WAVE_INPUT:
167     case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
168     case ACM_METRIC_MAX_SIZE_FILTER:
169     case ACM_METRIC_DRIVER_SUPPORT:
170     case ACM_METRIC_DRIVER_PRIORITY:
171     default:
172         return MMSYSERR_NOTSUPPORTED;
173     }
174     return MMSYSERR_NOERROR;
175 }