Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
d19d25a0
Commit
d19d25a0
authored
Sep 27, 1999
by
Eric Pouech
Committed by
Alexandre Julliard
Sep 27, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed last dependancies between MCI drivers and WINMM/MMSYSTEM
DLLs.
parent
c26cccbe
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
224 additions
and
106 deletions
+224
-106
mmddk.h
include/mmddk.h
+0
-8
mci.c
multimedia/mci.c
+0
-76
mcianim.c
multimedia/mcianim.c
+14
-3
mciavi.c
multimedia/mciavi.c
+15
-4
mcicda.c
multimedia/mcicda.c
+17
-6
mcimidi.c
multimedia/mcimidi.c
+96
-6
mciwave.c
multimedia/mciwave.c
+82
-3
No files found.
include/mmddk.h
View file @
d19d25a0
...
...
@@ -353,14 +353,6 @@ BOOL16 WINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev,
BOOL
WINAPI
DriverCallback
(
DWORD
dwCallBack
,
UINT
uFlags
,
HANDLE
hDev
,
UINT
wMsg
,
DWORD
dwUser
,
DWORD
dwParam1
,
DWORD
dwParam2
);
/* FIXME: the Wine builtin MCI drivers still use those winmm internal functions
* remove them ASAP
*/
extern
DWORD
MCI_WriteString
(
LPSTR
lpDstStr
,
DWORD
dstSize
,
LPCSTR
lpSrcStr
);
extern
const
char
*
MCI_MessageToString
(
UINT16
wMsg
);
extern
DWORD
MCI_SendCommandAsync
(
UINT
wDevID
,
UINT
wMsg
,
DWORD
dwParam1
,
DWORD
dwParam2
,
UINT
size
);
#include "poppack.h"
#endif
/* __MMDDK_H */
...
...
multimedia/mci.c
View file @
d19d25a0
...
...
@@ -2362,82 +2362,6 @@ DWORD MCI_SendCommand(UINT wDevID, UINT16 wMsg, DWORD dwParam1,
return
dwRet
;
}
/* FIXME: should be using the new mmThreadXXXX functions from WINMM
* instead of those
* it would require to add a wine internal flag to mmThreadCreate
* in order to pass a 32 bit function instead of a 16 bit
*/
struct
SCA
{
UINT
wDevID
;
UINT
wMsg
;
DWORD
dwParam1
;
DWORD
dwParam2
;
BOOL
allocatedCopy
;
};
DWORD
WINAPI
mciSendCommandA
(
UINT
wDevID
,
UINT
wMsg
,
DWORD
dwParam1
,
DWORD
dwParam2
);
/**************************************************************************
* MCI_SCAStarter [internal]
*/
static
DWORD
CALLBACK
MCI_SCAStarter
(
LPVOID
arg
)
{
struct
SCA
*
sca
=
(
struct
SCA
*
)
arg
;
DWORD
ret
;
TRACE
(
"In thread before async command (%08x,%s,%08lx,%08lx)
\n
"
,
sca
->
wDevID
,
MCI_MessageToString
(
sca
->
wMsg
),
sca
->
dwParam1
,
sca
->
dwParam2
);
ret
=
mciSendCommandA
(
sca
->
wDevID
,
sca
->
wMsg
,
sca
->
dwParam1
|
MCI_WAIT
,
sca
->
dwParam2
);
TRACE
(
"In thread after async command (%08x,%s,%08lx,%08lx)
\n
"
,
sca
->
wDevID
,
MCI_MessageToString
(
sca
->
wMsg
),
sca
->
dwParam1
,
sca
->
dwParam2
);
if
(
sca
->
allocatedCopy
)
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
sca
->
dwParam2
);
HeapFree
(
GetProcessHeap
(),
0
,
sca
);
ExitThread
(
ret
);
WARN
(
"Should not happen ? what's wrong
\n
"
);
/* should not go after this point */
return
ret
;
}
/**************************************************************************
* MCI_SendCommandAsync [internal]
*/
DWORD
MCI_SendCommandAsync
(
UINT
wDevID
,
UINT
wMsg
,
DWORD
dwParam1
,
DWORD
dwParam2
,
UINT
size
)
{
struct
SCA
*
sca
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
struct
SCA
));
if
(
sca
==
0
)
return
MCIERR_OUT_OF_MEMORY
;
sca
->
wDevID
=
wDevID
;
sca
->
wMsg
=
wMsg
;
sca
->
dwParam1
=
dwParam1
;
if
(
size
)
{
sca
->
dwParam2
=
(
DWORD
)
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
if
(
sca
->
dwParam2
==
0
)
{
HeapFree
(
GetProcessHeap
(),
0
,
sca
);
return
MCIERR_OUT_OF_MEMORY
;
}
sca
->
allocatedCopy
=
TRUE
;
/* copy structure passed by program in dwParam2 to be sure
* we can still use it whatever the program does
*/
memcpy
((
LPVOID
)
sca
->
dwParam2
,
(
LPVOID
)
dwParam2
,
size
);
}
else
{
sca
->
dwParam2
=
dwParam2
;
sca
->
allocatedCopy
=
FALSE
;
}
if
(
CreateThread
(
NULL
,
0
,
MCI_SCAStarter
,
sca
,
0
,
NULL
)
==
0
)
{
WARN
(
"Couldn't allocate thread for async command handling, sending synchonously
\n
"
);
return
MCI_SCAStarter
(
&
sca
);
}
return
0
;
}
/**************************************************************************
* MCI_CleanUp [internal]
*
...
...
multimedia/mcianim.c
View file @
d19d25a0
...
...
@@ -325,6 +325,7 @@ static DWORD ANIM_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS16 lpPar
{
WINE_MCIANIM
*
wma
=
ANIM_mciGetOpenDrv
(
wDevID
);
LPSTR
str
=
0
;
DWORD
ret
=
0
;
TRACE
(
"(%u, %08lX, %p);
\n
"
,
wDevID
,
dwFlags
,
lpParms
);
...
...
@@ -351,7 +352,17 @@ static DWORD ANIM_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS16 lpPar
return
MCIERR_UNRECOGNIZED_COMMAND
;
}
return
MCI_WriteString
(
lpParms
->
lpstrReturn
,
lpParms
->
dwRetSize
,
str
);
if
(
str
)
{
if
(
lpParms
->
dwRetSize
<=
strlen
(
str
))
{
lstrcpynA
(
lpParms
->
lpstrReturn
,
str
,
lpParms
->
dwRetSize
-
1
);
ret
=
MCIERR_PARAM_OVERFLOW
;
}
else
{
strcpy
(
lpParms
->
lpstrReturn
,
str
);
}
}
else
{
*
lpParms
->
lpstrReturn
=
0
;
}
return
ret
;
}
/**************************************************************************
...
...
@@ -661,14 +672,14 @@ LONG CALLBACK MCIANIM_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
case
MCI_CUT
:
case
MCI_DELETE
:
case
MCI_PASTE
:
FIXME
(
"Unsupported message
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
FIXME
(
"Unsupported message
[%lu]
\n
"
,
wMsg
);
break
;
case
MCI_OPEN
:
case
MCI_CLOSE
:
ERR
(
"Shouldn't receive a MCI_OPEN or CLOSE message
\n
"
);
break
;
default:
TRACE
(
"Sending msg
=%s to default driver proc
\n
"
,
MCI_MessageToString
(
wMsg
)
);
TRACE
(
"Sending msg
[%lu] to default driver proc
\n
"
,
wMsg
);
return
DefDriverProc
(
dwDevID
,
hDriv
,
wMsg
,
dwParam1
,
dwParam2
);
}
return
MCIERR_UNRECOGNIZED_COMMAND
;
...
...
multimedia/mciavi.c
View file @
d19d25a0
...
...
@@ -502,7 +502,8 @@ static DWORD AVI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSA lpP
{
LPSTR
str
=
0
;
WINE_MCIAVI
*
wma
=
AVI_mciGetOpenDev
(
wDevID
);
DWORD
ret
=
0
;
TRACE
(
"(%04X, %08lX, %p) : stub;
\n
"
,
wDevID
,
dwFlags
,
lpParms
);
if
(
lpParms
==
NULL
||
lpParms
->
lpstrReturn
==
NULL
)
...
...
@@ -529,7 +530,17 @@ static DWORD AVI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSA lpP
WARN
(
"Don't know this info command (%lu)
\n
"
,
dwFlags
);
return
MCIERR_UNRECOGNIZED_COMMAND
;
}
return
MCI_WriteString
(
lpParms
->
lpstrReturn
,
lpParms
->
dwRetSize
,
str
);
if
(
str
)
{
if
(
lpParms
->
dwRetSize
<=
strlen
(
str
))
{
lstrcpynA
(
lpParms
->
lpstrReturn
,
str
,
lpParms
->
dwRetSize
-
1
);
ret
=
MCIERR_PARAM_OVERFLOW
;
}
else
{
strcpy
(
lpParms
->
lpstrReturn
,
str
);
}
}
else
{
*
lpParms
->
lpstrReturn
=
0
;
}
return
ret
;
}
/***************************************************************************
...
...
@@ -1025,14 +1036,14 @@ LONG CALLBACK MCIAVI_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
case
MCI_SPIN
:
case
MCI_ESCAPE
:
WARN
(
"Unsupported command
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
WARN
(
"Unsupported command
[%lu]
\n
"
,
wMsg
);
break
;
case
MCI_OPEN
:
case
MCI_CLOSE
:
FIXME
(
"Shouldn't receive a MCI_OPEN or CLOSE message
\n
"
);
break
;
default:
TRACE
(
"Sending msg
=%s to default driver proc
\n
"
,
MCI_MessageToString
(
wMsg
)
);
TRACE
(
"Sending msg
[%lu] to default driver proc
\n
"
,
wMsg
);
return
DefDriverProc
(
dwDevID
,
hDriv
,
wMsg
,
dwParam1
,
dwParam2
);
}
return
MCIERR_UNRECOGNIZED_COMMAND
;
...
...
multimedia/mcicda.c
View file @
d19d25a0
...
...
@@ -338,7 +338,8 @@ static DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpPar
{
LPSTR
str
=
0
;
WINE_MCICDAUDIO
*
wmcda
=
CDAUDIO_mciGetOpenDrv
(
wDevID
);
DWORD
ret
=
0
;
TRACE
(
"(%04X, %08lX, %p);
\n
"
,
wDevID
,
dwFlags
,
lpParms
);
if
(
lpParms
==
NULL
||
lpParms
->
lpstrReturn
==
NULL
)
...
...
@@ -355,7 +356,17 @@ static DWORD CDAUDIO_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpPar
WARN
(
"Don't know this info command (%lu)
\n
"
,
dwFlags
);
return
MCIERR_UNRECOGNIZED_COMMAND
;
}
return
MCI_WriteString
(
lpParms
->
lpstrReturn
,
lpParms
->
dwRetSize
,
str
);
if
(
str
)
{
if
(
lpParms
->
dwRetSize
<=
strlen
(
str
))
{
lstrcpynA
(
lpParms
->
lpstrReturn
,
str
,
lpParms
->
dwRetSize
-
1
);
ret
=
MCIERR_PARAM_OVERFLOW
;
}
else
{
strcpy
(
lpParms
->
lpstrReturn
,
str
);
}
}
else
{
*
lpParms
->
lpstrReturn
=
0
;
}
return
ret
;
}
/**************************************************************************
...
...
@@ -417,7 +428,7 @@ static DWORD CDAUDIO_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lp
return
CDAUDIO_mciGetError
(
wmcda
);
lpParms
->
dwReturn
=
(
wmcda
->
wcda
.
nTracks
==
0
)
?
MAKEMCIRESOURCE
(
FALSE
,
MCI_FALSE
)
:
MAKEMCIRESOURCE
(
TRUE
,
MCI_TRUE
);
TRACE
(
"MCI_STATUS_MEDIA_PRESENT =%
s!
\n
"
,
LOWORD
(
lpParms
->
dwReturn
)
?
"Y"
:
"N"
);
TRACE
(
"MCI_STATUS_MEDIA_PRESENT =%
c!
\n
"
,
LOWORD
(
lpParms
->
dwReturn
)
?
'Y'
:
'N'
);
ret
=
MCI_RESOURCE_RETURNED
;
break
;
case
MCI_STATUS_NUMBER_OF_TRACKS
:
...
...
@@ -751,18 +762,18 @@ LONG CALLBACK MCICDAUDIO_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
case
MCI_CUT
:
case
MCI_DELETE
:
case
MCI_PASTE
:
FIXME
(
"Unsupported yet command
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
FIXME
(
"Unsupported yet command
[%lu]
\n
"
,
wMsg
);
break
;
/* commands that should report an error */
case
MCI_WINDOW
:
FIXME
(
"Unsupported command
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
FIXME
(
"Unsupported command
[%lu]
\n
"
,
wMsg
);
break
;
case
MCI_OPEN
:
case
MCI_CLOSE
:
ERR
(
"Shouldn't receive a MCI_OPEN or CLOSE message
\n
"
);
break
;
default:
TRACE
(
"Sending msg
=%s to default driver proc
\n
"
,
MCI_MessageToString
(
wMsg
)
);
TRACE
(
"Sending msg
[%lu] to default driver proc
\n
"
,
wMsg
);
return
DefDriverProc
(
dwDevID
,
hDriv
,
wMsg
,
dwParam1
,
dwParam2
);
}
return
MCIERR_UNRECOGNIZED_COMMAND
;
...
...
multimedia/mcimidi.c
View file @
d19d25a0
...
...
@@ -61,6 +61,85 @@ typedef struct tagWINE_MCIMIDI {
DWORD
dwStartTicks
;
}
WINE_MCIMIDI
;
/* ===================================================================
* ===================================================================
* FIXME: should be using the new mmThreadXXXX functions from WINMM
* instead of those
* it would require to add a wine internal flag to mmThreadCreate
* in order to pass a 32 bit function instead of a 16 bit
* ===================================================================
* =================================================================== */
struct
SCA
{
UINT
wDevID
;
UINT
wMsg
;
DWORD
dwParam1
;
DWORD
dwParam2
;
BOOL
allocatedCopy
;
};
/* EPP DWORD WINAPI mciSendCommandA(UINT wDevID, UINT wMsg, DWORD dwParam1, DWORD dwParam2); */
/**************************************************************************
* MCI_SCAStarter [internal]
*/
static
DWORD
CALLBACK
MCI_SCAStarter
(
LPVOID
arg
)
{
struct
SCA
*
sca
=
(
struct
SCA
*
)
arg
;
DWORD
ret
;
TRACE
(
"In thread before async command (%08x,%u,%08lx,%08lx)
\n
"
,
sca
->
wDevID
,
sca
->
wMsg
,
sca
->
dwParam1
,
sca
->
dwParam2
);
ret
=
mciSendCommandA
(
sca
->
wDevID
,
sca
->
wMsg
,
sca
->
dwParam1
|
MCI_WAIT
,
sca
->
dwParam2
);
TRACE
(
"In thread after async command (%08x,%u,%08lx,%08lx)
\n
"
,
sca
->
wDevID
,
sca
->
wMsg
,
sca
->
dwParam1
,
sca
->
dwParam2
);
if
(
sca
->
allocatedCopy
)
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
sca
->
dwParam2
);
HeapFree
(
GetProcessHeap
(),
0
,
sca
);
ExitThread
(
ret
);
WARN
(
"Should not happen ? what's wrong
\n
"
);
/* should not go after this point */
return
ret
;
}
/**************************************************************************
* MCI_SendCommandAsync [internal]
*/
static
DWORD
MCI_SendCommandAsync
(
UINT
wDevID
,
UINT
wMsg
,
DWORD
dwParam1
,
DWORD
dwParam2
,
UINT
size
)
{
struct
SCA
*
sca
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
struct
SCA
));
if
(
sca
==
0
)
return
MCIERR_OUT_OF_MEMORY
;
sca
->
wDevID
=
wDevID
;
sca
->
wMsg
=
wMsg
;
sca
->
dwParam1
=
dwParam1
;
if
(
size
)
{
sca
->
dwParam2
=
(
DWORD
)
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
if
(
sca
->
dwParam2
==
0
)
{
HeapFree
(
GetProcessHeap
(),
0
,
sca
);
return
MCIERR_OUT_OF_MEMORY
;
}
sca
->
allocatedCopy
=
TRUE
;
/* copy structure passed by program in dwParam2 to be sure
* we can still use it whatever the program does
*/
memcpy
((
LPVOID
)
sca
->
dwParam2
,
(
LPVOID
)
dwParam2
,
size
);
}
else
{
sca
->
dwParam2
=
dwParam2
;
sca
->
allocatedCopy
=
FALSE
;
}
if
(
CreateThread
(
NULL
,
0
,
MCI_SCAStarter
,
sca
,
0
,
NULL
)
==
0
)
{
WARN
(
"Couldn't allocate thread for async command handling, sending synchonously
\n
"
);
return
MCI_SCAStarter
(
&
sca
);
}
return
0
;
}
/*======================================================================*
* MCI MIDI implemantation *
*======================================================================*/
...
...
@@ -835,7 +914,7 @@ static DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
doPlay
=
(
wmm
->
dwPositionMS
>=
dwStartMS
&&
wmm
->
dwPositionMS
<=
dwEndMS
);
TRACE
(
"wmm->dwStatus=%d, doPlay=%
s
\n
"
,
wmm
->
dwStatus
,
doPlay
?
"T"
:
"F"
);
TRACE
(
"wmm->dwStatus=%d, doPlay=%
c
\n
"
,
wmm
->
dwStatus
,
doPlay
?
'T'
:
'F'
);
if
((
mmt
=
MIDI_mciFindNextEvent
(
wmm
,
&
hiPulse
))
==
NULL
)
break
;
/* no more event on tracks */
...
...
@@ -1416,7 +1495,8 @@ static DWORD MIDI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
{
LPCSTR
str
=
0
;
WINE_MCIMIDI
*
wmm
=
MIDI_mciGetOpenDev
(
wDevID
);
DWORD
ret
=
0
;
TRACE
(
"(%04X, %08lX, %p);
\n
"
,
wDevID
,
dwFlags
,
lpParms
);
if
(
lpParms
==
NULL
||
lpParms
->
lpstrReturn
==
NULL
)
...
...
@@ -1443,7 +1523,17 @@ static DWORD MIDI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
WARN
(
"Don't know this info command (%lu)
\n
"
,
dwFlags
);
return
MCIERR_UNRECOGNIZED_COMMAND
;
}
return
MCI_WriteString
(
lpParms
->
lpstrReturn
,
lpParms
->
dwRetSize
,
str
);
if
(
str
)
{
if
(
lpParms
->
dwRetSize
<=
strlen
(
str
))
{
lstrcpynA
(
lpParms
->
lpstrReturn
,
str
,
lpParms
->
dwRetSize
-
1
);
ret
=
MCIERR_PARAM_OVERFLOW
;
}
else
{
strcpy
(
lpParms
->
lpstrReturn
,
str
);
}
}
else
{
*
lpParms
->
lpstrReturn
=
0
;
}
return
ret
;
}
/**************************************************************************
...
...
@@ -1534,18 +1624,18 @@ LONG CALLBACK MCIMIDI_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
case
MCI_CUT
:
case
MCI_DELETE
:
case
MCI_PASTE
:
WARN
(
"Unsupported command
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
WARN
(
"Unsupported command
[%lu]
\n
"
,
wMsg
);
break
;
/* commands that should report an error */
case
MCI_WINDOW
:
TRACE
(
"Unsupported command
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
TRACE
(
"Unsupported command
[%lu]
\n
"
,
wMsg
);
break
;
case
MCI_OPEN
:
case
MCI_CLOSE
:
FIXME
(
"Shouldn't receive a MCI_OPEN or CLOSE message
\n
"
);
break
;
default:
TRACE
(
"Sending msg
=%s to default driver proc
\n
"
,
MCI_MessageToString
(
wMsg
)
);
TRACE
(
"Sending msg
[%lu] to default driver proc
\n
"
,
wMsg
);
return
DefDriverProc
(
dwDevID
,
hDriv
,
wMsg
,
dwParam1
,
dwParam2
);
}
return
MCIERR_UNRECOGNIZED_COMMAND
;
...
...
multimedia/mciwave.c
View file @
d19d25a0
...
...
@@ -39,6 +39,85 @@ typedef struct {
DWORD
dwPosition
;
/* position in bytes in chunk for playing */
}
WINE_MCIWAVE
;
/* ===================================================================
* ===================================================================
* FIXME: should be using the new mmThreadXXXX functions from WINMM
* instead of those
* it would require to add a wine internal flag to mmThreadCreate
* in order to pass a 32 bit function instead of a 16 bit
* ===================================================================
* =================================================================== */
struct
SCA
{
UINT
wDevID
;
UINT
wMsg
;
DWORD
dwParam1
;
DWORD
dwParam2
;
BOOL
allocatedCopy
;
};
/* EPP DWORD WINAPI mciSendCommandA(UINT wDevID, UINT wMsg, DWORD dwParam1, DWORD dwParam2); */
/**************************************************************************
* MCI_SCAStarter [internal]
*/
static
DWORD
CALLBACK
MCI_SCAStarter
(
LPVOID
arg
)
{
struct
SCA
*
sca
=
(
struct
SCA
*
)
arg
;
DWORD
ret
;
TRACE
(
"In thread before async command (%08x,%u,%08lx,%08lx)
\n
"
,
sca
->
wDevID
,
sca
->
wMsg
,
sca
->
dwParam1
,
sca
->
dwParam2
);
ret
=
mciSendCommandA
(
sca
->
wDevID
,
sca
->
wMsg
,
sca
->
dwParam1
|
MCI_WAIT
,
sca
->
dwParam2
);
TRACE
(
"In thread after async command (%08x,%u,%08lx,%08lx)
\n
"
,
sca
->
wDevID
,
sca
->
wMsg
,
sca
->
dwParam1
,
sca
->
dwParam2
);
if
(
sca
->
allocatedCopy
)
HeapFree
(
GetProcessHeap
(),
0
,
(
LPVOID
)
sca
->
dwParam2
);
HeapFree
(
GetProcessHeap
(),
0
,
sca
);
ExitThread
(
ret
);
WARN
(
"Should not happen ? what's wrong
\n
"
);
/* should not go after this point */
return
ret
;
}
/**************************************************************************
* MCI_SendCommandAsync [internal]
*/
static
DWORD
MCI_SendCommandAsync
(
UINT
wDevID
,
UINT
wMsg
,
DWORD
dwParam1
,
DWORD
dwParam2
,
UINT
size
)
{
struct
SCA
*
sca
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
struct
SCA
));
if
(
sca
==
0
)
return
MCIERR_OUT_OF_MEMORY
;
sca
->
wDevID
=
wDevID
;
sca
->
wMsg
=
wMsg
;
sca
->
dwParam1
=
dwParam1
;
if
(
size
)
{
sca
->
dwParam2
=
(
DWORD
)
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
if
(
sca
->
dwParam2
==
0
)
{
HeapFree
(
GetProcessHeap
(),
0
,
sca
);
return
MCIERR_OUT_OF_MEMORY
;
}
sca
->
allocatedCopy
=
TRUE
;
/* copy structure passed by program in dwParam2 to be sure
* we can still use it whatever the program does
*/
memcpy
((
LPVOID
)
sca
->
dwParam2
,
(
LPVOID
)
dwParam2
,
size
);
}
else
{
sca
->
dwParam2
=
dwParam2
;
sca
->
allocatedCopy
=
FALSE
;
}
if
(
CreateThread
(
NULL
,
0
,
MCI_SCAStarter
,
sca
,
0
,
NULL
)
==
0
)
{
WARN
(
"Couldn't allocate thread for async command handling, sending synchonously
\n
"
);
return
MCI_SCAStarter
(
&
sca
);
}
return
0
;
}
/*======================================================================*
* MCI WAVE implemantation *
*======================================================================*/
...
...
@@ -1009,17 +1088,17 @@ LONG CALLBACK MCIWAVE_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
case
MCI_CUT
:
case
MCI_DELETE
:
case
MCI_PASTE
:
FIXME
(
"Unsupported yet command
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
FIXME
(
"Unsupported yet command
[%lu]
\n
"
,
wMsg
);
break
;
case
MCI_WINDOW
:
TRACE
(
"Unsupported command
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
TRACE
(
"Unsupported command
[%lu]
\n
"
,
wMsg
);
break
;
case
MCI_OPEN
:
case
MCI_CLOSE
:
ERR
(
"Shouldn't receive a MCI_OPEN or CLOSE message
\n
"
);
break
;
default:
FIXME
(
"is probably wrong msg
=%s
\n
"
,
MCI_MessageToString
(
wMsg
)
);
FIXME
(
"is probably wrong msg
[%lu]
\n
"
,
wMsg
);
return
DefDriverProc
(
dwDevID
,
hDriv
,
wMsg
,
dwParam1
,
dwParam2
);
}
return
MCIERR_UNRECOGNIZED_COMMAND
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment