1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */
3 /*****************************************************************************
4 * Copyright 1998, Luiz Otavio L. Zorzella
8 * Purpose: multimedia declarations (internal to WINMM & MMSYSTEM DLLs)
10 *****************************************************************************
15 typedef DWORD
WINAPI (*MessageProc16
)(UINT16 wDevID
, UINT16 wMsg
, DWORD dwUser
, DWORD dwParam1
, DWORD dwParam2
);
16 typedef DWORD
WINAPI (*MessageProc32
)(UINT wDevID
, UINT wMsg
, DWORD dwUser
, DWORD dwParam1
, DWORD dwParam2
);
18 /* Who said goofy boy ? */
19 #define WINE_DI_MAGIC 0x900F1B01
21 typedef struct tagWINE_DRIVER
24 /* as usual LPWINE_DRIVER == hDriver32 */
36 struct tagWINE_DRIVER
* lpPrevItem
;
37 struct tagWINE_DRIVER
* lpNextItem
;
38 } WINE_DRIVER
, *LPWINE_DRIVER
;
40 typedef struct tagWINE_MLD
{
41 /* EPP struct tagWINE_MLD* lpNext; */ /* not used so far */
44 UINT mmdIndex
; /* index to low-level driver in MMDrvs table */
45 DWORD dwDriverInstance
; /* this value is driver related, as opposed to
46 * opendesc.dwInstance which is client (callback) related */
50 DWORD dwClientInstance
;
51 } WINE_MLD
, *LPWINE_MLD
;
55 } WINE_WAVE
, *LPWINE_WAVE
;
59 MIDIOPENDESC mod
; /* FIXME: should be removed */
60 } WINE_MIDI
, *LPWINE_MIDI
;
64 } WINE_MIXER
, *LPWINE_MIXER
;
66 extern BOOL
MMDRV_Init(void);
67 extern UINT
MMDRV_GetNum(UINT
);
68 extern LPWINE_MLD
MMDRV_Alloc(UINT size
, UINT type
, LPHANDLE hndl
, DWORD
* dwFlags
,
69 DWORD
* dwCallback
, DWORD
* dwInstance
, BOOL bFrom32
);
70 extern void MMDRV_Free(HANDLE hndl
, LPWINE_MLD mld
);
71 extern DWORD
MMDRV_Open(LPWINE_MLD mld
, UINT wMsg
, DWORD dwParam1
, DWORD dwParam2
);
72 extern DWORD
MMDRV_Close(LPWINE_MLD mld
, UINT wMsg
);
73 extern LPWINE_MLD
MMDRV_Get(HANDLE hndl
, UINT type
, BOOL bCanBeID
);
74 extern LPWINE_MLD
MMDRV_GetRelated(HANDLE hndl
, UINT srcType
, BOOL bSrcCanBeID
, UINT dstTyped
);
75 extern DWORD
MMDRV_Message(LPWINE_MLD mld
, WORD wMsg
, DWORD dwParam1
, DWORD dwParam2
, BOOL bFrom32
);
76 extern UINT
MMDRV_PhysicalFeatures(LPWINE_MLD mld
, UINT uMsg
, DWORD dwParam1
, DWORD dwParam2
);
80 #define MMDRV_MIDIIN 2
81 #define MMDRV_MIDIOUT 3
82 #define MMDRV_WAVEIN 4
83 #define MMDRV_WAVEOUT 5
86 #define WINE_MMTHREAD_CREATED 0x4153494C /* "BSIL" */
87 #define WINE_MMTHREAD_DELETED 0xDEADDEAD
90 DWORD dwSignature
; /* 00 "BSIL" when ok, 0xDEADDEAD when being deleted */
91 DWORD dwCounter
; /* 04 > 1 when in mmThread functions */
92 HANDLE hThread
; /* 08 hThread */
93 DWORD dwThreadID
; /* 0C */
94 FARPROC16 fpThread
; /* 10 address of thread proc (segptr or lin depending on dwFlags) */
95 DWORD dwThreadPmt
; /* 14 parameter to be passed upon thread creation to fpThread */
96 DWORD dwSignalCount
; /* 18 counter used for signaling */
97 HANDLE hEvent
; /* 1C event */
98 HANDLE hVxD
; /* 20 return from OpenVxDHandle */
99 DWORD dwStatus
; /* 24 0x00, 0x10, 0x20, 0x30 */
100 DWORD dwFlags
; /* 28 dwFlags upon creation */
101 HANDLE16 hTask
; /* 2C handle to created task */
104 typedef struct tagWINE_MCIDRIVER
{
107 LPSTR lpstrElementName
;
108 LPSTR lpstrDeviceType
;
111 DRIVERPROC16 driverProc
;
113 YIELDPROC lpfnYieldProc
;
116 HTASK16 hCreatorTask
;
118 UINT uSpecificCmdTable
;
119 struct tagWINE_MCIDRIVER
*lpNext
;
120 } WINE_MCIDRIVER
, *LPWINE_MCIDRIVER
;
122 #define WINE_TIMER_IS32 0x80
124 typedef struct tagWINE_TIMERENTRY
{
132 struct tagWINE_TIMERENTRY
* lpNext
;
133 } WINE_TIMERENTRY
, *LPWINE_TIMERENTRY
;
135 typedef struct tagWINE_MMIO
{
137 struct IOProcList
* ioProc
;
141 struct tagWINE_MMIO
* lpNext
;
143 } WINE_MMIO
, *LPWINE_MMIO
;
145 typedef struct tagWINE_MM_IDATA
{
146 /* iData reference */
148 struct tagWINE_MM_IDATA
* lpNextIData
;
150 HANDLE hWinMM32Instance
;
151 HANDLE hWinMM16Instance
;
157 LPWINE_TIMERENTRY lpTimerList
;
159 LPWINE_TIMERENTRY lpTimers
;
161 LPWINE_MCIDRIVER lpMciDrvs
;
162 /* low level drivers (unused yet) */
163 /* LPWINE_WAVE lpWave; */
164 /* LPWINE_MIDI lpMidi; */
165 /* LPWINE_MIXER lpMixer; */
168 } WINE_MM_IDATA
, *LPWINE_MM_IDATA
;
170 /* function prototypes */
172 typedef LONG (*MCIPROC16
)(DWORD
, HDRVR16
, WORD
, DWORD
, DWORD
);
173 typedef LONG (*MCIPROC
)(DWORD
, HDRVR
, DWORD
, DWORD
, DWORD
);
175 extern LPWINE_DRIVER
DRIVER_FindFromHDrvr(HDRVR hDrvr
);
176 extern BOOL
DRIVER_GetLibName(LPCSTR keyName
, LPCSTR sectName
, LPSTR buf
, int sz
);
177 extern LPWINE_DRIVER
DRIVER_TryOpenDriver32(LPCSTR fn
, LPARAM lParam2
);
179 extern LPWINE_MCIDRIVER
MCI_GetDriver(UINT16 uDevID
);
180 extern UINT
MCI_GetDriverFromString(LPCSTR str
);
181 extern DWORD
MCI_WriteString(LPSTR lpDstStr
, DWORD dstSize
, LPCSTR lpSrcStr
);
182 extern const char* MCI_MessageToString(UINT16 wMsg
);
184 extern UINT WINAPI
MCI_DefYieldProc(MCIDEVICEID wDevID
, DWORD data
);
186 extern LRESULT
MCI_CleanUp(LRESULT dwRet
, UINT wMsg
, DWORD dwParam2
, BOOL bIs32
);
188 extern DWORD
MCI_SendCommand(UINT wDevID
, UINT16 wMsg
, DWORD dwParam1
, DWORD dwParam2
, BOOL bFrom32
);
189 extern DWORD
MCI_SendCommandFrom32(UINT wDevID
, UINT16 wMsg
, DWORD dwParam1
, DWORD dwParam2
);
190 extern DWORD
MCI_SendCommandFrom16(UINT wDevID
, UINT16 wMsg
, DWORD dwParam1
, DWORD dwParam2
);
191 extern DWORD
MCI_SendCommandAsync(UINT wDevID
, UINT wMsg
, DWORD dwParam1
, DWORD dwParam2
, UINT size
);
193 void CALLBACK
WINE_mmThreadEntryPoint(DWORD _pmt
);
195 void MMSYSTEM_MMTIME16to32(LPMMTIME mmt32
, const MMTIME16
* mmt16
);
196 void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16
, const MMTIME
* mmt32
);
198 BOOL
MULTIMEDIA_MciInit(void);
199 LPWINE_MM_IDATA
MULTIMEDIA_GetIData(void);
201 LPWINE_MM_IDATA
TIME_MMTimeStart(void);
202 void TIME_MMTimeStop(void);