wined3d: Move FBO based color blits from IWineD3DSurfaceImpl_BltOverride() to wined3d...
[wine] / include / dsdriver.h
1 /*
2  * DirectSound driver
3  * (DirectX 5 version)
4  *
5  * Copyright (C) 2000 Ove Kaaven
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21
22 #ifndef __WINE_DSDRIVER_H
23 #define __WINE_DSDRIVER_H
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 /*****************************************************************************
30  * Predeclare the interfaces
31  */
32 DEFINE_GUID(IID_IDsDriver,              0x8C4233C0l, 0xB4CC, 0x11CE, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
33 typedef struct IDsDriver *PIDSDRIVER;
34
35 DEFINE_GUID(IID_IDsDriverBuffer,        0x8C4233C1l, 0xB4CC, 0x11CE, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
36 typedef struct IDsDriverBuffer *PIDSDRIVERBUFFER;
37
38 DEFINE_GUID(IID_IDsDriverPropertySet,   0x0F6F2E8E0, 0xD842, 0x11D0, 0x8F, 0x75, 0x00, 0xC0, 0x4F, 0xC2, 0x8A, 0xCA);
39 typedef struct IDsDriverPropertySet *PIDSDRIVERPROPERTYSET;
40
41 DEFINE_GUID(IID_IDsDriverNotify,        0x00363EF44, 0x3B57, 0x11D3, 0xAC, 0x79, 0x00, 0x10, 0x5A, 0x01, 0x7f, 0xe1);
42 typedef struct IDsDriverNotify *PIDSDRIVERNOTIFY;
43
44 DEFINE_GUID(IID_IDsCaptureDriver,       0x03DD10C47, 0x74FB, 0x11D3, 0x90, 0x49, 0xCB, 0xB4, 0xB3, 0x2E, 0xAA, 0x08);
45 typedef struct IDsCaptureDriver *PIDSCDRIVER;
46
47 DEFINE_GUID(IID_IDsCaptureDriverBuffer, 0x03DD10C48, 0x74FB, 0x11D3, 0x90, 0x49, 0xCB, 0xB4, 0xB3, 0x2E, 0xAA, 0x08);
48 typedef struct IDsCaptureDriverBuffer *PIDSCDRIVERBUFFER;
49
50 #define DSDDESC_DOMMSYSTEMOPEN          0x00000001
51 #define DSDDESC_DOMMSYSTEMSETFORMAT     0x00000002
52 #define DSDDESC_USESYSTEMMEMORY         0x00000004
53 #define DSDDESC_DONTNEEDPRIMARYLOCK     0x00000008
54 #define DSDDESC_DONTNEEDSECONDARYLOCK   0x00000010
55 #define DSDDESC_DONTNEEDWRITELEAD       0x00000020
56
57 #define DSDHEAP_NOHEAP                  0
58 #define DSDHEAP_CREATEHEAP              1
59 #define DSDHEAP_USEDIRECTDRAWHEAP       2
60 #define DSDHEAP_PRIVATEHEAP             3
61
62 typedef struct _DSDRIVERDESC
63 {
64     DWORD       dwFlags;
65     CHAR        szDesc[256];
66     CHAR        szDrvname[256];
67     DWORD       dnDevNode;
68     WORD        wVxdId;
69     WORD        wReserved;
70     ULONG       ulDeviceNum;
71     DWORD       dwHeapType;
72     LPVOID      pvDirectDrawHeap;
73     DWORD       dwMemStartAddress;
74     DWORD       dwMemEndAddress;
75     DWORD       dwMemAllocExtra;
76     LPVOID      pvReserved1;
77     LPVOID      pvReserved2;
78 } DSDRIVERDESC,*PDSDRIVERDESC;
79
80 typedef struct _DSDRIVERCAPS
81 {
82     DWORD       dwFlags;
83     DWORD       dwMinSecondarySampleRate;
84     DWORD       dwMaxSecondarySampleRate;
85     DWORD       dwPrimaryBuffers;
86     DWORD       dwMaxHwMixingAllBuffers;
87     DWORD       dwMaxHwMixingStaticBuffers;
88     DWORD       dwMaxHwMixingStreamingBuffers;
89     DWORD       dwFreeHwMixingAllBuffers;
90     DWORD       dwFreeHwMixingStaticBuffers;
91     DWORD       dwFreeHwMixingStreamingBuffers;
92     DWORD       dwMaxHw3DAllBuffers;
93     DWORD       dwMaxHw3DStaticBuffers;
94     DWORD       dwMaxHw3DStreamingBuffers;
95     DWORD       dwFreeHw3DAllBuffers;
96     DWORD       dwFreeHw3DStaticBuffers;
97     DWORD       dwFreeHw3DStreamingBuffers;
98     DWORD       dwTotalHwMemBytes;
99     DWORD       dwFreeHwMemBytes;
100     DWORD       dwMaxContigFreeHwMemBytes;
101 } DSDRIVERCAPS,*PDSDRIVERCAPS;
102
103 typedef struct _DSVOLUMEPAN
104 {
105     DWORD       dwTotalLeftAmpFactor;
106     DWORD       dwTotalRightAmpFactor;
107     LONG        lVolume;
108     DWORD       dwVolAmpFactor;
109     LONG        lPan;
110     DWORD       dwPanLeftAmpFactor;
111     DWORD       dwPanRightAmpFactor;
112 } DSVOLUMEPAN,*PDSVOLUMEPAN;
113
114 typedef union _DSPROPERTY
115 {
116     struct {
117         GUID    Set;
118         ULONG   Id;
119         ULONG   Flags;
120         ULONG   InstanceId;
121     } DUMMYSTRUCTNAME;
122     ULONGLONG   Alignment;
123 } DSPROPERTY,*PDSPROPERTY;
124
125 typedef struct _DSCDRIVERCAPS
126 {
127     DWORD       dwSize;
128     DWORD       dwFlags;
129     DWORD       dwFormats;
130     DWORD       dwChannels;
131 } DSCDRIVERCAPS,*PDSCDRIVERCAPS;
132
133 /*****************************************************************************
134  * IDsDriver interface
135  */
136 #define INTERFACE IDsDriver
137 DECLARE_INTERFACE_(IDsDriver,IUnknown)
138 {
139     /*** IUnknown methods ***/
140     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
141     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
142     STDMETHOD_(ULONG,Release)(THIS) PURE;
143     /*** IDsDriver methods ***/
144     STDMETHOD(GetDriverDesc)(THIS_ PDSDRIVERDESC pDsDriverDesc) PURE;
145     STDMETHOD(Open)(THIS) PURE;
146     STDMETHOD(Close)(THIS) PURE;
147     STDMETHOD(GetCaps)(THIS_ PDSDRIVERCAPS pDsDrvCaps) PURE;
148     STDMETHOD(CreateSoundBuffer)(THIS_ LPWAVEFORMATEX pwfx,DWORD dwFlags,DWORD dwCardAddress,LPDWORD pdwcbBufferSize,LPBYTE *ppbBuffer,LPVOID *ppvObj) PURE;
149     STDMETHOD(DuplicateSoundBuffer)(THIS_ PIDSDRIVERBUFFER pIDsDriverBuffer,LPVOID *ppvObj) PURE;
150 };
151 #undef INTERFACE
152
153 #if !defined (__cplusplus) || defined(CINTERFACE)
154     /*** IUnknown methods ***/
155 #define IDsDriver_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)
156 #define IDsDriver_AddRef(p)                     (p)->lpVtbl->AddRef(p)
157 #define IDsDriver_Release(p)                    (p)->lpVtbl->Release(p)
158     /*** IDsDriver methods ***/
159 #define IDsDriver_GetDriverDesc(p,a)            (p)->lpVtbl->GetDriverDesc(p,a)
160 #define IDsDriver_Open(p)                       (p)->lpVtbl->Open(p)
161 #define IDsDriver_Close(p)                      (p)->lpVtbl->Close(p)
162 #define IDsDriver_GetCaps(p,a)                  (p)->lpVtbl->GetCaps(p,a)
163 #define IDsDriver_CreateSoundBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c,d,e,f)
164 #define IDsDriver_DuplicateSoundBuffer(p,a,b)   (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
165 #endif
166
167 /*****************************************************************************
168  * IDsDriverBuffer interface
169  */
170 #define INTERFACE IDsDriverBuffer
171 DECLARE_INTERFACE_(IDsDriverBuffer,IUnknown)
172 {
173     /*** IUnknown methods ***/
174     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
175     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
176     STDMETHOD_(ULONG,Release)(THIS) PURE;
177     /*** IDsDriverBuffer methods ***/
178     STDMETHOD(Lock)(THIS_ LPVOID *ppvAudio1,LPDWORD pdwLen1,LPVOID *pdwAudio2,LPDWORD pdwLen2,DWORD dwWritePosition,DWORD dwWriteLen,DWORD dwFlags) PURE;
179     STDMETHOD(Unlock)(THIS_ LPVOID pvAudio1,DWORD dwLen1,LPVOID pvAudio2,DWORD dwLen2) PURE;
180     STDMETHOD(SetFormat)(THIS_ LPWAVEFORMATEX pwfxToSet) PURE;
181     STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE;
182     STDMETHOD(SetVolumePan)(THIS_ PDSVOLUMEPAN pDsVolumePan) PURE;
183     STDMETHOD(SetPosition)(THIS_ DWORD dwNewPosition) PURE;
184     STDMETHOD(GetPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor,LPDWORD lpdwCurrentWriteCursor) PURE;
185     STDMETHOD(Play)(THIS_ DWORD dwReserved1,DWORD dwReserved2,DWORD dwFlags) PURE;
186     STDMETHOD(Stop)(THIS) PURE;
187 };
188 #undef INTERFACE
189
190 #if !defined (__cplusplus) || defined(CINTERFACE)
191     /*** IUnknown methods ***/
192 #define IDsDriverBuffer_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)
193 #define IDsDriverBuffer_AddRef(p)               (p)->lpVtbl->AddRef(p)
194 #define IDsDriverBuffer_Release(p)              (p)->lpVtbl->Release(p)
195     /*** IDsDriverBuffer methods ***/
196 #define IDsDriverBuffer_Lock(p,a,b,c,d,e,f,g)   (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
197 #define IDsDriverBuffer_Unlock(p,a,b,c,d)       (p)->lpVtbl->Unlock(p,a,b,c,d)
198 #define IDsDriverBuffer_SetFormat(p,a)          (p)->lpVtbl->SetFormat(p,a)
199 #define IDsDriverBuffer_SetFrequency(p,a)       (p)->lpVtbl->SetFrequency(p,a)
200 #define IDsDriverBuffer_SetVolumePan(p,a)       (p)->lpVtbl->SetVolumePan(p,a)
201 #define IDsDriverBuffer_SetPosition(p,a)        (p)->lpVtbl->SetPosition(p,a)
202 #define IDsDriverBuffer_GetPosition(p,a,b)      (p)->lpVtbl->GetPosition(p,a,b)
203 #define IDsDriverBuffer_Play(p,a,b,c)           (p)->lpVtbl->Play(p,a,b,c)
204 #define IDsDriverBuffer_Stop(p)                 (p)->lpVtbl->Stop(p)
205 #endif
206
207 /*****************************************************************************
208  * IDsDriverPropertySet interface
209  */
210 #define INTERFACE IDsDriverPropertySet
211 DECLARE_INTERFACE_(IDsDriverPropertySet,IUnknown)
212 {
213     /*** IUnknown methods ***/
214     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
215     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
216     STDMETHOD_(ULONG,Release)(THIS) PURE;
217     /*** IDsDriverPropertySet methods ***/
218     STDMETHOD(Get)(THIS_ PDSPROPERTY pDsProperty,LPVOID pPropertyParams,ULONG cbPropertyParams,LPVOID pPropertyData,ULONG cbPropertyData,PULONG pcbReturnedData) PURE;
219     STDMETHOD(Set)(THIS_ PDSPROPERTY pDsProperty,LPVOID pPropertyParams,ULONG cbPropertyParams,LPVOID pPropertyData,ULONG cbPropertyData) PURE;
220     STDMETHOD(QuerySupport)(THIS_ REFGUID PropertySetId,ULONG PropertyId,PULONG pSupport) PURE;
221 };
222 #undef INTERFACE
223
224 #if !defined (__cplusplus) || defined(CINTERFACE)
225     /*** IUnknown methods ***/
226 #define IDsDriverPropertySet_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
227 #define IDsDriverPropertySet_AddRef(p)                  (p)->lpVtbl->AddRef(p)
228 #define IDsDriverPropertySet_Release(p)                 (p)->lpVtbl->Release(p)
229     /*** IDsDriverPropertySet methods ***/
230 #define IDsDriverPropertySet_Get(p,a,b,c,d,e,f)         (p)->lpVtbl->Get(p,a,b,c,d,e,f)
231 #define IDsDriverPropertySet_Set(p,a,b,c,d,e)           (p)->lpVtbl->Set(p,a,b,c,d,e)
232 #define IDsDriverPropertySet_QuerySupport(p,a,b,c)      (p)->lpVtbl->QuerySupport(p,a,b,c)
233 #endif
234
235 /* Defined property sets */
236 DEFINE_GUID(DSPROPSETID_DirectSound3DListener,    0x6D047B40, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
237 typedef enum
238 {
239     DSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
240     DSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
241     DSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
242     DSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
243     DSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
244     DSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
245     DSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
246     DSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
247     DSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
248 } DSPROPERTY_DIRECTSOUND3DLISTENER;
249
250 DEFINE_GUID(DSPROPSETID_DirectSound3DBuffer,      0x6D047B41, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
251 typedef enum
252 {
253     DSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
254     DSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
255     DSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
256     DSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
257     DSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
258     DSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
259     DSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
260     DSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
261     DSPROPERTY_DIRECTSOUND3DBUFFER_MODE
262 } DSPROPERTY_DIRECTSOUND3DBUFFER;
263
264 DEFINE_GUID(DSPROPSETID_DirectSoundSpeakerConfig, 0x6D047B42, 0x7AF9, 0x11D0, 0x92, 0x94, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
265 typedef enum
266 {
267     DSPROPERTY_DIRECTSOUNDSPEAKERCONFIG_SPEAKERCONFIG
268 } DSPROPERTY_DIRECTSOUNDSPEAKERCONFIG;
269
270 /*****************************************************************************
271  * IDsDriverNotify interface
272  */
273 #define INTERFACE IDsDriverNotify
274 DECLARE_INTERFACE_(IDsDriverNotify,IUnknown)
275 {
276     /*** IUnknown methods ***/
277     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
278     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
279     STDMETHOD_(ULONG,Release)(THIS) PURE;
280     /*** IDsDriverNotify methods ***/
281     STDMETHOD(SetNotificationPositions)(THIS_ DWORD dwPositionNotifies,LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE;
282 };
283 #undef INTERFACE
284
285 #if !defined (__cplusplus) || defined(CINTERFACE)
286     /*** IUnknown methods ***/
287 #define IDsDriverNotify_QueryInterface(p,a,b)           (p)->lpVtbl->QueryInterface(p,a,b)
288 #define IDsDriverNotify_AddRef(p)                       (p)->lpVtbl->AddRef(p)
289 #define IDsDriverNotify_Release(p)                      (p)->lpVtbl->Release(p)
290     /*** IDsDriverNotify methods ***/
291 #define IDsDriverNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b)
292 #endif
293
294 /*****************************************************************************
295  * IDsCaptureDriver interface
296  */
297 #define INTERFACE IDsCaptureDriver
298 DECLARE_INTERFACE_(IDsCaptureDriver,IUnknown)
299 {
300     /*** IUnknown methods ***/
301     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
302     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
303     STDMETHOD_(ULONG,Release)(THIS) PURE;
304     /*** IDsCaptureDriver methods ***/
305     STDMETHOD(GetDriverDesc)(THIS_ PDSDRIVERDESC pDsDriverDesc) PURE;
306     STDMETHOD(Open)(THIS) PURE;
307     STDMETHOD(Close)(THIS) PURE;
308     STDMETHOD(GetCaps)(THIS_ PDSCDRIVERCAPS pDsDrvCaps) PURE;
309     STDMETHOD(CreateCaptureBuffer)(THIS_ LPWAVEFORMATEX pwfx,DWORD dwFlags,DWORD dwCardAddress,LPDWORD pdwcbBufferSize,LPBYTE *ppbBuffer,LPVOID *ppvObj) PURE;
310 };
311 #undef INTERFACE
312
313 #if !defined (__cplusplus) || defined(CINTERFACE)
314     /*** IUnknown methods ***/
315 #define IDsCaptureDriver_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
316 #define IDsCaptureDriver_AddRef(p)                      (p)->lpVtbl->AddRef(p)
317 #define IDsCaptureDriver_Release(p)                     (p)->lpVtbl->Release(p)
318     /*** IDsCaptureDriver methods ***/
319 #define IDsCaptureDriver_GetDriverDesc(p,a)             (p)->lpVtbl->GetDriverDesc(p,a)
320 #define IDsCaptureDriver_Open(p)                        (p)->lpVtbl->Open(p)
321 #define IDsCaptureDriver_Close(p)                       (p)->lpVtbl->Close(p)
322 #define IDsCaptureDriver_GetCaps(p,a)                   (p)->lpVtbl->GetCaps(p,a)
323 #define IDsCaptureDriver_CreateCaptureBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c,d,e,f)
324 #endif
325
326 /*****************************************************************************
327  * IDsCaptureDriverBuffer interface
328  */
329 #define INTERFACE IDsCaptureDriverBuffer
330 DECLARE_INTERFACE_(IDsCaptureDriverBuffer,IUnknown)
331 {
332     /*** IUnknown methods ***/
333     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
334     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
335     STDMETHOD_(ULONG,Release)(THIS) PURE;
336     /*** IDsCaptureDriverBuffer methods ***/
337     STDMETHOD(Lock)(THIS_ LPVOID *ppvAudio1,LPDWORD pdwLen1,LPVOID *ppvAudio2,LPDWORD pdwLen2,DWORD dwWritePosition,DWORD dwWriteLen,DWORD dwFlags) PURE;
338     STDMETHOD(Unlock)(THIS_ LPVOID pvAudio1,DWORD dwLen1,LPVOID pvAudio2,DWORD dwLen2) PURE;
339     STDMETHOD(SetFormat)(THIS_ LPWAVEFORMATEX pwfxToSet) PURE;
340     STDMETHOD(GetPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor,LPDWORD lpdwCurrentWriteCursor) PURE;
341     STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
342     STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE;
343     STDMETHOD(Stop)(THIS) PURE;
344 };
345 #undef INTERFACE
346
347 #if !defined (__cplusplus) || defined(CINTERFACE)
348     /*** IUnknown methods ***/
349 #define IDsCaptureDriverBuffer_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)
350 #define IDsCaptureDriverBuffer_AddRef(p)                (p)->lpVtbl->AddRef(p)
351 #define IDsCaptureDriverBuffer_Release(p)               (p)->lpVtbl->Release(p)
352     /*** IDsCaptureDriverBuffer methods ***/
353 #define IDsCaptureDriverBuffer_Lock(p,a,b,c,d,e,f,g)    (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
354 #define IDsCaptureDriverBuffer_Unlock(p,a,b,c,d)        (p)->lpVtbl->Unlock(p,a,b,c,d)
355 #define IDsCaptureDriverBuffer_SetFormat(p,a)           (p)->lpVtbl->SetFormat(p,a)
356 #define IDsCaptureDriverBuffer_GetPosition(p,a,b)       (p)->lpVtbl->GetPosition(p,a,b)
357 #define IDsCaptureDriverBuffer_GetStatus(p,a)           (p)->lpVtbl->GetStatus(p,a)
358 #define IDsCaptureDriverBuffer_Start(p,a)               (p)->lpVtbl->Start(p,a)
359 #define IDsCaptureDriverBuffer_Stop(p)                  (p)->lpVtbl->Stop(p)
360 #endif
361
362 #ifdef __cplusplus
363 } /* extern "C" */
364 #endif
365
366 #endif /* __WINE_DSDRIVER_H */