<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=Content-Type content=text/html;charset=ISO-8859-1>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV><FONT face=Arial size=2>check out the <A 
href="http://wiki.winehq.org/FlattenDllDirectories">http://wiki.winehq.org/FlattenDllDirectories</A>&nbsp;page 
on Wine wiki, you'll get all the correct names (in some cases, windows changed 
from 16 bit drivers to 32 bit drivers)</FONT></DIV>
<DIV><FONT face=Arial size=2>btw, our default settings should also be changed 
accordingly</FONT></DIV>
<DIV><FONT face=Arial size=2>A+</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message -----&nbsp;</DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=remi.assailly@free.fr href="mailto:remi.assailly@free.fr">R�mi 
  Assailly</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=wine-patches@winehq.org 
  href="mailto:wine-patches@winehq.org">wine-patches@winehq.org</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Friday, July 22, 2005 3:43 PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> Move mcicda to the top-level 
  dlls directory</DIV>
  <DIV><BR></DIV><FONT size=-1>Hi all<BR>I saw that WinXP kept mciseq.drv, 
  mciwave.drv and mciavi.drv.<BR>Should we do the same thing or just keep the 
  dlls files ?<BR><BR>Changelog:<BR></FONT><SMALL>Moved mcicda to the top-level 
  dlls directory.</SMALL><BR>
  <P>
  <HR>

  <P></P>diff -Nru wine/configure winedev/configure<BR>--- wine/configure 
  2005-07-21 20:36:42.000000000 +0200<BR>+++ winedev/configure 2005-07-22 
  14:45:10.000000000 +0200<BR>@@ -20203,7 +20203,7 
  @@<BR>&nbsp;MAKE_PROG_RULES=programs/Makeprog.rules<BR>&nbsp;<BR>&nbsp;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules 
  dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile 
  dlls/Makefile dlls/activeds/Makefile dlls/advapi32/Makefile 
  dlls/advapi32/tests/Makefile dlls/advpack/Makefile dlls/advpack/tests/Makefile 
  dlls/amstream/Makefile dlls/atl/Makefile dlls/avicap32/Makefile 
  dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/capi2032/Makefile 
  dlls/cards/Makefile dlls/cfgmgr32/Makefile dlls/comcat/Makefile 
  dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile 
  dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/crypt32/tests/Makefile 
  dlls/cryptdll/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile 
  dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3drm/Makefile dlls/d3dx8/Makefile 
  dlls/d3dxof/Makefile dlls/dbghelp/Makefile dlls/dciman32/Makefile 
  dlls/ddraw/Makefile dlls/ddraw/tests/Makefile dlls/devenum/Makefile 
  dlls/dinput/Makefile dlls/dinput/tests/Makefile dlls/dinput8/Makefile 
  dlls/dmband/Makefile dlls/dmcompos/Makefile dlls/dmime/Makefile 
  dlls/dmloader/Makefile dlls/dmscript/Makefile dlls/dmstyle/Makefile 
  dlls/dmsynth/Makefile dlls/dmusic/Makefile dlls/dmusic32/Makefile 
  dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dpnet/Makefile 
  dlls/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile 
  dlls/dswave/Makefile dlls/dxdiagn/Makefile dlls/dxerr8/Makefile 
  dlls/dxerr9/Makefile dlls/dxguid/Makefile dlls/gdi/Makefile 
  dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/glut32/Makefile 
  dlls/hhctrl.ocx/Makefile dlls/iccvid/Makefile dlls/icmp/Makefile 
  dlls/ifsmgr.vxd/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile 
  dlls/iphlpapi/Makefile dlls/iphlpapi/tests/Makefile dlls/itss/Makefile 
  dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile 
  dlls/lzexpand/tests/Makefile dlls/mapi32/Makefile dlls/mapi32/tests/Makefile 
  dlls/midimap/Makefile dlls/mlang/Makefile dlls/mlang/tests/Makefile 
  dlls/mmdevldr.vxd/Makefile dlls/monodebg.vxd/Makefile dlls/mpr/Makefile 
  dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile 
  dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile 
  dlls/msacm/tests/Makefile dlls/mscms/Makefile dlls/mscms/tests/Makefile 
  dlls/msdmo/Makefile dlls/mshtml/Makefile dlls/mshtml/tests/Makefile 
  dlls/msi/Makefile dlls/msi/tests/Makefile dlls/msimg32/Makefile 
  dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile 
  dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile 
  dlls/msvcrt40/Makefile dlls/msvcrtd/Makefile dlls/msvcrtd/tests/Makefile 
  dlls/msvidc32/Makefile dlls/msvideo/Makefile dlls/mswsock/Makefile 
  dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/newdev/Makefile 
  dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile 
  dlls/odbccp32/Makefile dlls/ole32/Makefile dlls/ole32/tests/Makefile 
  dlls/oleacc/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile 
  dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile 
  dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/powrprof/Makefile 
  dlls/psapi/Makefile dlls/psapi/tests/Makefile dlls/qcap/Makefile 
  dlls/quartz/Makefile dlls/quartz/tests/Makefile dlls/rasapi32/Makefile 
  dlls/riched20/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile 
  dlls/rpcrt4/tests/Makefile dlls/rsabase/Makefile dlls/rsabase/tests/Makefile 
  dlls/rsaenh/Makefile dlls/rsaenh/tests/Makefile dlls/secur32/Makefile 
  dlls/sensapi/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile 
  dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile 
  dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile 
  dlls/snmpapi/Makefile dlls/stdole2.tlb/Makefile dlls/stdole32.tlb/Makefile 
  dlls/sti/Makefile dlls/strmiids/Makefile dlls/tapi32/Makefile 
  dlls/ttydrv/Makefile dlls/twain/Makefile dlls/unicows/Makefile 
  dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile 
  dlls/user/Makefile dlls/user/tests/Makefile dlls/uuid/Makefile 
  dlls/uxtheme/Makefile dlls/vdhcp.vxd/Makefile dlls/vdmdbg/Makefile 
  dlls/version/Makefile dlls/version/tests/Makefile dlls/vmm.vxd/Makefile 
  dlls/vnbt.vxd/Makefile dlls/vnetbios.vxd/Makefile dlls/vtdapi.vxd/Makefile 
  dlls/vwin32.vxd/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile 
  dlls/wined3d/Makefile dlls/winedos/Makefile dlls/wineps/Makefile 
  dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile 
  dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile 
  dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile 
  dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile 
  dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile 
  dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile 
  dlls/winmm/wineaudioio/Makefile dlls/winmm/winejack/Makefile 
  dlls/winmm/winenas/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile 
  dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile 
  dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile 
  dlls/wldap32/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile 
  dlls/wtsapi32/Makefile dlls/x11drv/Makefile documentation/Makefile 
  fonts/Makefile include/Makefile libs/Makefile libs/port/Makefile 
  libs/unicode/Makefile libs/wine/Makefile libs/wpp/Makefile loader/Makefile 
  programs/Makefile programs/avitools/Makefile programs/clock/Makefile 
  programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile 
  programs/hh/Makefile programs/msiexec/Makefile programs/notepad/Makefile 
  programs/progman/Makefile programs/regedit/Makefile programs/regsvr32/Makefile 
  programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile 
  programs/taskmgr/Makefile programs/uninstaller/Makefile programs/view/Makefile 
  programs/wcmd/Makefile programs/wineboot/Makefile 
  programs/winebrowser/Makefile programs/winecfg/Makefile 
  programs/wineconsole/Makefile programs/winedbg/Makefile 
  programs/winefile/Makefile programs/winemenubuilder/Makefile 
  programs/winemine/Makefile programs/winepath/Makefile 
  programs/winetest/Makefile programs/winevdm/Makefile programs/winhelp/Makefile 
  programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile 
  tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile 
  tools/winegcc/Makefile tools/wmc/Makefile 
  tools/wrc/Makefile"<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules 
  dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile 
  dlls/Makefile dlls/activeds/Makefile dlls/advapi32/Makefile 
  dlls/advapi32/tests/Makefile dlls/advpack/Makefile dlls/advpack/tests/Makefile 
  dlls/amstream/Makefile dlls/atl/Makefile dlls/avicap32/Makefile 
  dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/capi2032/Makefile 
  dlls/cards/Makefile dlls/cfgmgr32/Makefile dlls/comcat/Makefile 
  dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile 
  dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/crypt32/tests/Makefile 
  dlls/cryptdll/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile 
  dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3drm/Makefile dlls/d3dx8/Makefile 
  dlls/d3dxof/Makefile dlls/dbghelp/Makefile dlls/dciman32/Makefile 
  dlls/ddraw/Makefile dlls/ddraw/tests/Makefile dlls/devenum/Makefile 
  dlls/dinput/Makefile dlls/dinput/tests/Makefile dlls/dinput8/Makefile 
  dlls/dmband/Makefile dlls/dmcompos/Makefile dlls/dmime/Makefile 
  dlls/dmloader/Makefile dlls/dmscript/Makefile dlls/dmstyle/Makefile 
  dlls/dmsynth/Makefile dlls/dmusic/Makefile dlls/dmusic32/Makefile 
  dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dpnet/Makefile 
  dlls/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile 
  dlls/dswave/Makefile dlls/dxdiagn/Makefile dlls/dxerr8/Makefile 
  dlls/dxerr9/Makefile dlls/dxguid/Makefile dlls/gdi/Makefile 
  dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/glut32/Makefile 
  dlls/hhctrl.ocx/Makefile dlls/iccvid/Makefile dlls/icmp/Makefile 
  dlls/ifsmgr.vxd/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile 
  dlls/iphlpapi/Makefile dlls/iphlpapi/tests/Makefile dlls/itss/Makefile 
  dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile 
  dlls/lzexpand/tests/Makefile dlls/mapi32/Makefile dlls/mapi32/tests/Makefile 
  dlls/mcicda/Makefile dlls/midimap/Makefile dlls/mlang/Makefile 
  dlls/mlang/tests/Makefile dlls/mmdevldr.vxd/Makefile 
  dlls/monodebg.vxd/Makefile dlls/mpr/Makefile dlls/msacm/Makefile 
  dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile 
  dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile 
  dlls/msacm/tests/Makefile dlls/mscms/Makefile dlls/mscms/tests/Makefile 
  dlls/msdmo/Makefile dlls/mshtml/Makefile dlls/mshtml/tests/Makefile 
  dlls/msi/Makefile dlls/msi/tests/Makefile dlls/msimg32/Makefile 
  dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile 
  dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile 
  dlls/msvcrt40/Makefile dlls/msvcrtd/Makefile dlls/msvcrtd/tests/Makefile 
  dlls/msvidc32/Makefile dlls/msvideo/Makefile dlls/mswsock/Makefile 
  dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/newdev/Makefile 
  dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile 
  dlls/odbccp32/Makefile dlls/ole32/Makefile dlls/ole32/tests/Makefile 
  dlls/oleacc/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile 
  dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile 
  dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/powrprof/Makefile 
  dlls/psapi/Makefile dlls/psapi/tests/Makefile dlls/qcap/Makefile 
  dlls/quartz/Makefile dlls/quartz/tests/Makefile dlls/rasapi32/Makefile 
  dlls/riched20/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile 
  dlls/rpcrt4/tests/Makefile dlls/rsabase/Makefile dlls/rsabase/tests/Makefile 
  dlls/rsaenh/Makefile dlls/rsaenh/tests/Makefile dlls/secur32/Makefile 
  dlls/sensapi/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile 
  dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile 
  dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile 
  dlls/snmpapi/Makefile dlls/stdole2.tlb/Makefile dlls/stdole32.tlb/Makefile 
  dlls/sti/Makefile dlls/strmiids/Makefile dlls/tapi32/Makefile 
  dlls/ttydrv/Makefile dlls/twain/Makefile dlls/unicows/Makefile 
  dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile 
  dlls/user/Makefile dlls/user/tests/Makefile dlls/uuid/Makefile 
  dlls/uxtheme/Makefile dlls/vdhcp.vxd/Makefile dlls/vdmdbg/Makefile 
  dlls/version/Makefile dlls/version/tests/Makefile dlls/vmm.vxd/Makefile 
  dlls/vnbt.vxd/Makefile dlls/vnetbios.vxd/Makefile dlls/vtdapi.vxd/Makefile 
  dlls/vwin32.vxd/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile 
  dlls/wined3d/Makefile dlls/winedos/Makefile dlls/wineps/Makefile 
  dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile 
  dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile 
  dlls/winmm/mciavi/Makefile dlls/winmm/mciseq/Makefile 
  dlls/winmm/mciwave/Makefile dlls/winmm/tests/Makefile 
  dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile 
  dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile 
  dlls/winmm/winejack/Makefile dlls/winmm/winenas/Makefile 
  dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile 
  dlls/winsock/tests/Makefile dlls/winspool/Makefile 
  dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile 
  dlls/wldap32/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile 
  dlls/wtsapi32/Makefile dlls/x11drv/Makefile documentation/Makefile 
  fonts/Makefile include/Makefile libs/Makefile libs/port/Makefile 
  libs/unicode/Makefile libs/wine/Makefile libs/wpp/Makefile loader/Makefile 
  programs/Makefile programs/avitools/Makefile programs/clock/Makefile 
  programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile 
  programs/hh/Makefile programs/msiexec/Makefile programs/notepad/Makefile 
  programs/progman/Makefile programs/regedit/Makefile programs/regsvr32/Makefile 
  programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile 
  programs/taskmgr/Makefile programs/uninstaller/Makefile programs/view/Makefile 
  programs/wcmd/Makefile programs/wineboot/Makefile 
  programs/winebrowser/Makefile programs/winecfg/Makefile 
  programs/wineconsole/Makefile programs/winedbg/Makefile 
  programs/winefile/Makefile programs/winemenubuilder/Makefile 
  programs/winemine/Makefile programs/winepath/Makefile 
  programs/winetest/Makefile programs/winevdm/Makefile programs/winhelp/Makefile 
  programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile 
  tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile 
  tools/winegcc/Makefile tools/wmc/Makefile 
  tools/wrc/Makefile"<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;cat &gt;confcache 
  &lt;&lt;\_ACEOF<BR>@@ -20816,6 +20816,7 @@<BR>&nbsp;&nbsp; 
  "dlls/lzexpand/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES 
  dlls/lzexpand/tests/Makefile" ;;<BR>&nbsp;&nbsp; "dlls/mapi32/Makefile" ) 
  CONFIG_FILES="$CONFIG_FILES dlls/mapi32/Makefile" ;;<BR>&nbsp;&nbsp; 
  "dlls/mapi32/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES 
  dlls/mapi32/tests/Makefile" ;;<BR>+&nbsp; "dlls/mcicda/Makefile" ) 
  CONFIG_FILES="$CONFIG_FILES dlls/mcicda/Makefile" ;;<BR>&nbsp;&nbsp; 
  "dlls/midimap/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/midimap/Makefile" 
  ;;<BR>&nbsp;&nbsp; "dlls/mlang/Makefile" ) CONFIG_FILES="$CONFIG_FILES 
  dlls/mlang/Makefile" ;;<BR>&nbsp;&nbsp; "dlls/mlang/tests/Makefile" ) 
  CONFIG_FILES="$CONFIG_FILES dlls/mlang/tests/Makefile" ;;<BR>@@ -20926,7 
  +20927,6 @@<BR>&nbsp;&nbsp; "dlls/winmm/joystick/Makefile" ) 
  CONFIG_FILES="$CONFIG_FILES dlls/winmm/joystick/Makefile" ;;<BR>&nbsp;&nbsp; 
  "dlls/winmm/mcianim/Makefile" ) CONFIG_FILES="$CONFIG_FILES 
  dlls/winmm/mcianim/Makefile" ;;<BR>&nbsp;&nbsp; "dlls/winmm/mciavi/Makefile" ) 
  CONFIG_FILES="$CONFIG_FILES dlls/winmm/mciavi/Makefile" ;;<BR>-&nbsp; 
  "dlls/winmm/mcicda/Makefile" ) CONFIG_FILES="$CONFIG_FILES 
  dlls/winmm/mcicda/Makefile" ;;<BR>&nbsp;&nbsp; "dlls/winmm/mciseq/Makefile" ) 
  CONFIG_FILES="$CONFIG_FILES dlls/winmm/mciseq/Makefile" ;;<BR>&nbsp;&nbsp; 
  "dlls/winmm/mciwave/Makefile" ) CONFIG_FILES="$CONFIG_FILES 
  dlls/winmm/mciwave/Makefile" ;;<BR>&nbsp;&nbsp; "dlls/winmm/tests/Makefile" ) 
  CONFIG_FILES="$CONFIG_FILES dlls/winmm/tests/Makefile" ;;<BR>diff -Nru 
  wine/configure.ac winedev/configure.ac<BR>--- wine/configure.ac 2005-07-21 
  20:36:42.000000000 +0200<BR>+++ winedev/configure.ac 2005-07-22 
  14:44:01.000000000 +0200<BR>@@ -1612,6 +1612,7 
  @@<BR>&nbsp;dlls/lzexpand/tests/Makefile<BR>&nbsp;dlls/mapi32/Makefile<BR>&nbsp;dlls/mapi32/tests/Makefile<BR>+dlls/mcicda/Makefile<BR>&nbsp;dlls/midimap/Makefile<BR>&nbsp;dlls/mlang/Makefile<BR>&nbsp;dlls/mlang/tests/Makefile<BR>@@ 
  -1722,7 +1723,6 
  @@<BR>&nbsp;dlls/winmm/joystick/Makefile<BR>&nbsp;dlls/winmm/mcianim/Makefile<BR>&nbsp;dlls/winmm/mciavi/Makefile<BR>-dlls/winmm/mcicda/Makefile<BR>&nbsp;dlls/winmm/mciseq/Makefile<BR>&nbsp;dlls/winmm/mciwave/Makefile<BR>&nbsp;dlls/winmm/tests/Makefile<BR>diff 
  -Nru wine/dlls/Makefile.in winedev/dlls/Makefile.in<BR>--- 
  wine/dlls/Makefile.in 2005-07-21 20:36:42.000000000 +0200<BR>+++ 
  winedev/dlls/Makefile.in 2005-07-22 14:43:11.000000000 +0200<BR>@@ -70,6 +70,7 
  @@<BR>&nbsp; kernel \<BR>&nbsp; lzexpand \<BR>&nbsp; mapi32 \<BR>+ mcicda 
  \<BR>&nbsp; midimap \<BR>&nbsp; mlang \<BR>&nbsp; mmdevldr.vxd \<BR>@@ -154,7 
  +155,6 @@<BR>&nbsp; winmm/joystick \<BR>&nbsp; winmm/mcianim \<BR>&nbsp; 
  winmm/mciavi \<BR>- winmm/mcicda \<BR>&nbsp; winmm/mciseq \<BR>&nbsp; 
  winmm/mciwave \<BR>&nbsp; winmm/wavemap \<BR>@@ -316,7 +316,7 @@<BR>&nbsp; 
  mapi32.dll.so \<BR>&nbsp; mcianim.drv.so \<BR>&nbsp; mciavi.drv.so \<BR>- 
  mcicda.drv.so \<BR>+ mcicda.dll.so \<BR>&nbsp; mciseq.drv.so \<BR>&nbsp; 
  mciwave.drv.so \<BR>&nbsp; midimap.dll.so \<BR>@@ -647,8 +647,8 
  @@<BR>&nbsp;mciavi.drv.so: winmm/mciavi/mciavi.drv.so<BR>&nbsp; $(RM) $@ 
  &amp;&amp; $(LN_S) winmm/mciavi/mciavi.drv.so $@<BR>&nbsp;<BR>-mcicda.drv.so: 
  winmm/mcicda/mcicda.drv.so<BR>- $(RM) $@ &amp;&amp; $(LN_S) 
  winmm/mcicda/mcicda.drv.so $@<BR>+mcicda.dll.so: 
  winmm/mcicda/mcicda.dll.so<BR>+ $(RM) $@ &amp;&amp; $(LN_S) 
  winmm/mcicda/mcicda.dll.so $@<BR>&nbsp;<BR>&nbsp;mciseq.drv.so: 
  winmm/mciseq/mciseq.drv.so<BR>&nbsp; $(RM) $@ &amp;&amp; $(LN_S) 
  winmm/mciseq/mciseq.drv.so $@<BR>@@ -1717,7 +1717,7 
  @@<BR>&nbsp;mapi32/mapi32.dll.so: 
  mapi32<BR>&nbsp;winmm/mcianim/mcianim.drv.so: 
  winmm/mcianim<BR>&nbsp;winmm/mciavi/mciavi.drv.so: 
  winmm/mciavi<BR>-winmm/mcicda/mcicda.drv.so: 
  winmm/mcicda<BR>+mcicda/mcicda.dll.so: 
  mcicda<BR>&nbsp;winmm/mciseq/mciseq.drv.so: 
  winmm/mciseq<BR>&nbsp;winmm/mciwave/mciwave.drv.so: 
  winmm/mciwave<BR>&nbsp;midimap/midimap.dll.so: midimap<BR>diff -Nru 
  wine/dlls/mcicda/.cvsignore winedev/dlls/mcicda/.cvsignore<BR>--- 
  wine/dlls/mcicda/.cvsignore 1970-01-01 01:00:00.000000000 +0100<BR>+++ 
  winedev/dlls/mcicda/.cvsignore 2005-07-22 14:41:22.000000000 +0200<BR>@@ -0,0 
  +1,2 @@<BR>+Makefile<BR>+mcicda.dll.dbg.c<BR>diff -Nru 
  wine/dlls/mcicda/Makefile.in winedev/dlls/mcicda/Makefile.in<BR>--- 
  wine/dlls/mcicda/Makefile.in 1970-01-01 01:00:00.000000000 +0100<BR>+++ 
  winedev/dlls/mcicda/Makefile.in 2005-07-22 14:41:07.000000000 +0200<BR>@@ -0,0 
  +1,14 @@<BR>+TOPSRCDIR = @top_srcdir@<BR>+TOPOBJDIR = 
  ../..<BR>+SRCDIR&nbsp;&nbsp;&nbsp; = 
  @srcdir@<BR>+VPATH&nbsp;&nbsp;&nbsp;&nbsp; = 
  @srcdir@<BR>+MODULE&nbsp;&nbsp;&nbsp; = mcicda.dll<BR>+IMPORTS&nbsp;&nbsp; = 
  winmm user32 kernel32<BR>+EXTRALIBS = $(LIBUNICODE)<BR>+<BR>+C_SRCS = \<BR>+ 
  mcicda.c<BR>+<BR>+@MAKE_DLL_RULES@<BR>+<BR>+### Dependencies:<BR>diff -Nru 
  wine/dlls/mcicda/mcicda.c winedev/dlls/mcicda/mcicda.c<BR>--- 
  wine/dlls/mcicda/mcicda.c 1970-01-01 01:00:00.000000000 +0100<BR>+++ 
  winedev/dlls/mcicda/mcicda.c 2005-02-09 23:26:26.000000000 +0100<BR>@@ -0,0 
  +1,1053 @@<BR>+/* -*- tab-width: 8; c-basic-offset: 4 -*- */<BR>+/*<BR>+ * MCI 
  driver for audio CD (MCICDA)<BR>+ *<BR>+ * Copyright 1994&nbsp;&nbsp;&nbsp; 
  Martin Ayotte<BR>+ * Copyright 1998-99 Eric Pouech<BR>+ * Copyright 
  2000&nbsp;&nbsp;&nbsp; Andreas Mohr<BR>+ *<BR>+ * This library is free 
  software; you can redistribute it and/or<BR>+ * modify it under the terms of 
  the GNU Lesser General Public<BR>+ * License as published by the Free Software 
  Foundation; either<BR>+ * version 2.1 of the License, or (at your option) any 
  later version.<BR>+ *<BR>+ * This library is distributed in the hope that it 
  will be useful,<BR>+ * but WITHOUT ANY WARRANTY; without even the implied 
  warranty of<BR>+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; 
  See the GNU<BR>+ * Lesser General Public License for more details.<BR>+ *<BR>+ 
  * You should have received a copy of the GNU Lesser General Public<BR>+ * 
  License along with this library; if not, write to the Free Software<BR>+ * 
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA&nbsp; 
  02111-1307&nbsp; USA<BR>+ */<BR>+<BR>+#include "config.h"<BR>+#include 
  &lt;stdarg.h&gt;<BR>+#include &lt;stdio.h&gt;<BR>+#include 
  &lt;string.h&gt;<BR>+<BR>+#include "windef.h"<BR>+#include 
  "winbase.h"<BR>+#include "wingdi.h"<BR>+#include "winuser.h"<BR>+#include 
  "ntstatus.h"<BR>+#include "wownt32.h"<BR>+#include "mmddk.h"<BR>+#include 
  "winioctl.h"<BR>+#include "ntddstor.h"<BR>+#include "ntddcdrm.h"<BR>+#include 
  "wine/debug.h"<BR>+#include 
  "wine/unicode.h"<BR>+<BR>+WINE_DEFAULT_DEBUG_CHANNEL(mcicda);<BR>+<BR>+#define 
  CDFRAMES_PERSEC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  75<BR>+#define 
  CDFRAMES_PERMIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (CDFRAMES_PERSEC * 60)<BR>+#define FRAME_OF_ADDR(a) ((a)[1] * CDFRAMES_PERMIN 
  + (a)[2] * CDFRAMES_PERSEC + (a)[3])<BR>+#define FRAME_OF_TOC(toc, idx)&nbsp; 
  FRAME_OF_ADDR((toc).TrackData[idx - 
  (toc).FirstTrack].Address)<BR>+<BR>+typedef struct {<BR>+&nbsp;&nbsp;&nbsp; 
  UINT wDevID;<BR>+&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp; 
  nUseCount;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 
  Incremented for each shared open */<BR>+&nbsp;&nbsp;&nbsp; BOOL&nbsp; 
  fShareable;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* TRUE if first 
  open was shareable */<BR>+&nbsp;&nbsp;&nbsp; WORD&nbsp;&nbsp;&nbsp; 
  wNotifyDeviceID;&nbsp;&nbsp;&nbsp; /* MCI device ID with a pending 
  notification */<BR>+&nbsp;&nbsp;&nbsp; HANDLE 
  hCallback;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Callback 
  handle for pending notification */<BR>+&nbsp;&nbsp;&nbsp; DWORD 
  dwTimeFormat;<BR>+&nbsp;&nbsp;&nbsp; 
  HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  handle;<BR>+} 
  WINE_MCICDAUDIO;<BR>+<BR>+/*-----------------------------------------------------------------------*/<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_drvOpen [internal]<BR>+ */<BR>+static DWORD MCICDA_drvOpen(LPCWSTR 
  str, LPMCI_OPEN_DRIVER_PARMSW modp)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (!modp) return 
  0xFFFFFFFF;<BR>+<BR>+&nbsp;&nbsp;&nbsp; wmcda = HeapAlloc(GetProcessHeap(), 
  HEAP_ZERO_MEMORY, sizeof(WINE_MCICDAUDIO));<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (!wmcda)<BR>+ return 0;<BR>+<BR>+&nbsp;&nbsp;&nbsp; wmcda-&gt;wDevID = 
  modp-&gt;wDeviceID;<BR>+&nbsp;&nbsp;&nbsp; mciSetDriverData(wmcda-&gt;wDevID, 
  (DWORD)wmcda);<BR>+&nbsp;&nbsp;&nbsp; modp-&gt;wCustomCommandTable = 
  MCI_NO_COMMAND_TABLE;<BR>+&nbsp;&nbsp;&nbsp; modp-&gt;wType = 
  MCI_DEVTYPE_CD_AUDIO;<BR>+&nbsp;&nbsp;&nbsp; return 
  modp-&gt;wDeviceID;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_drvClose [internal]<BR>+ */<BR>+static DWORD MCICDA_drvClose(DWORD 
  dwDevID)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO*&nbsp; wmcda = 
  (WINE_MCICDAUDIO*)mciGetDriverData(dwDevID);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (wmcda) {<BR>+ HeapFree(GetProcessHeap(), 0, wmcda);<BR>+ 
  mciSetDriverData(dwDevID, 0);<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; 
  return (dwDevID == 0xFFFFFFFF) ? 1 : 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_GetOpenDrv [internal]<BR>+ */<BR>+static WINE_MCICDAUDIO*&nbsp; 
  MCICDA_GetOpenDrv(UINT wDevID)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* 
  wmcda = 
  (WINE_MCICDAUDIO*)mciGetDriverData(wDevID);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (wmcda == NULL || wmcda-&gt;nUseCount == 0) {<BR>+ WARN("Invalid wDevID=%u\n", 
  wDevID);<BR>+ return 0;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; return 
  wmcda;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_GetStatus [internal]<BR>+ */<BR>+static DWORD&nbsp;&nbsp;&nbsp; 
  MCICDA_GetStatus(WINE_MCICDAUDIO* wmcda)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  CDROM_SUB_Q_DATA_FORMAT&nbsp;&nbsp;&nbsp;&nbsp; fmt;<BR>+&nbsp;&nbsp;&nbsp; 
  SUB_Q_CHANNEL_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  data;<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  mode = MCI_MODE_NOT_READY;<BR>+<BR>+&nbsp;&nbsp;&nbsp; fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>+&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GetLastError() == 
  STATUS_NO_MEDIA_IN_DEVICE) mode = MCI_MODE_OPEN;<BR>+&nbsp;&nbsp;&nbsp; } else 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch 
  (data.CurrentPosition.Header.AudioStatus)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_IN_PROGRESS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  mode = MCI_MODE_PLAY;&nbsp;&nbsp; 
  break;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_PAUSED:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  mode = MCI_MODE_PAUSE;&nbsp; 
  break;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_NO_STATUS:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_PLAY_COMPLETE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode = 
  MCI_MODE_STOP;&nbsp;&nbsp; 
  break;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_PLAY_ERROR:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_NOT_SUPPORTED:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  default:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  mode;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_GetError [internal]<BR>+ */<BR>+static int 
  MCICDA_GetError(WINE_MCICDAUDIO* wmcda)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; switch 
  (GetLastError())<BR>+&nbsp;&nbsp;&nbsp; {<BR>+&nbsp;&nbsp;&nbsp; case 
  STATUS_NO_MEDIA_IN_DEVICE:&nbsp;&nbsp;&nbsp;&nbsp; return 
  MCIERR_DEVICE_NOT_READY;<BR>+&nbsp;&nbsp;&nbsp; case 
  STATUS_IO_DEVICE_ERROR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  MCIERR_HARDWARE;<BR>+&nbsp;&nbsp;&nbsp; default:<BR>+ FIXME("Unknown mode 
  %lx\n", GetLastError());<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; 
  return 
  MCIERR_DRIVER_INTERNAL;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_CalcFrame [internal]<BR>+ */<BR>+static DWORD 
  MCICDA_CalcFrame(WINE_MCICDAUDIO* wmcda, DWORD 
  dwTime)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; DWORD dwFrame = 0;<BR>+&nbsp;&nbsp;&nbsp; 
  UINT wTrack;<BR>+&nbsp;&nbsp;&nbsp; CDROM_TOC&nbsp;&nbsp; 
  toc;<BR>+&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+&nbsp;&nbsp;&nbsp; BYTE*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  addr;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%p, %08lX, %lu);\n", wmcda, 
  wmcda-&gt;dwTimeFormat, dwTime);<BR>+<BR>+&nbsp;&nbsp;&nbsp; switch 
  (wmcda-&gt;dwTimeFormat) {<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_FORMAT_MILLISECONDS:<BR>+ dwFrame = ((dwTime - 1) * CDFRAMES_PERSEC + 500) 
  / 1000;<BR>+ TRACE("MILLISECONDS %lu\n", dwFrame);<BR>+ 
  break;<BR>+&nbsp;&nbsp;&nbsp; case MCI_FORMAT_MSF:<BR>+ TRACE("MSF 
  %02u:%02u:%02u\n",<BR>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCI_MSF_MINUTE(dwTime), 
  MCI_MSF_SECOND(dwTime), MCI_MSF_FRAME(dwTime));<BR>+ dwFrame += 
  CDFRAMES_PERMIN * MCI_MSF_MINUTE(dwTime);<BR>+ dwFrame += CDFRAMES_PERSEC * 
  MCI_MSF_SECOND(dwTime);<BR>+ dwFrame += MCI_MSF_FRAME(dwTime);<BR>+ 
  break;<BR>+&nbsp;&nbsp;&nbsp; case MCI_FORMAT_TMSF:<BR>+&nbsp;&nbsp;&nbsp; 
  default: /* unknown format ! force TMSF ! ... */<BR>+ wTrack = 
  MCI_TMSF_TRACK(dwTime);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, 
  NULL))<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 0;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (wTrack &lt; 
  toc.FirstTrack || wTrack &gt; 
  toc.LastTrack)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 0;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("MSF 
  %02u-%02u:%02u:%02u\n",<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  MCI_TMSF_TRACK(dwTime), 
  MCI_TMSF_MINUTE(dwTime),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  MCI_TMSF_SECOND(dwTime), 
  MCI_TMSF_FRAME(dwTime));<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addr = 
  toc.TrackData[wTrack - 
  toc.FirstTrack].Address;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  TRACE("TMSF 
  trackpos[%u]=%d:%d:%d\n",<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  wTrack, addr[1], addr[2], 
  addr[3]);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwFrame = 
  CDFRAMES_PERMIN * (addr[1] + MCI_TMSF_MINUTE(dwTime)) 
  +<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  CDFRAMES_PERSEC * (addr[2] + MCI_TMSF_SECOND(dwTime)) 
  +<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  addr[3] + MCI_TMSF_FRAME(dwTime);<BR>+ break;<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  dwFrame;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_CalcTime [internal]<BR>+ */<BR>+static DWORD 
  MCICDA_CalcTime(WINE_MCICDAUDIO* wmcda, DWORD tf, DWORD dwFrame, LPDWORD 
  lpRet)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; DWORD dwTime = 0;<BR>+&nbsp;&nbsp;&nbsp; 
  UINT wTrack;<BR>+&nbsp;&nbsp;&nbsp; UINT wMinutes;<BR>+&nbsp;&nbsp;&nbsp; UINT 
  wSeconds;<BR>+&nbsp;&nbsp;&nbsp; UINT wFrames;<BR>+&nbsp;&nbsp;&nbsp; 
  CDROM_TOC&nbsp;&nbsp; toc;<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br;<BR>+<BR>+&nbsp;&nbsp;&nbsp; 
  TRACE("(%p, %08lX, %lu);\n", wmcda, tf, dwFrame);<BR>+<BR>+&nbsp;&nbsp;&nbsp; 
  switch (tf) {<BR>+&nbsp;&nbsp;&nbsp; case MCI_FORMAT_MILLISECONDS:<BR>+ dwTime 
  = (dwFrame * 1000) / CDFRAMES_PERSEC + 1;<BR>+ TRACE("MILLISECONDS %lu\n", 
  dwTime);<BR>+ *lpRet = 0;<BR>+ break;<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_FORMAT_MSF:<BR>+ wMinutes = dwFrame / CDFRAMES_PERMIN;<BR>+ wSeconds = 
  (dwFrame - CDFRAMES_PERMIN * wMinutes) / CDFRAMES_PERSEC;<BR>+ wFrames = 
  dwFrame - CDFRAMES_PERMIN * wMinutes - CDFRAMES_PERSEC * wSeconds;<BR>+ dwTime 
  = MCI_MAKE_MSF(wMinutes, wSeconds, wFrames);<BR>+ TRACE("MSF %02u:%02u:%02u 
  -&gt; dwTime=%lu\n",<BR>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wMinutes, wSeconds, 
  wFrames, dwTime);<BR>+ *lpRet = MCI_COLONIZED3_RETURN;<BR>+ 
  break;<BR>+&nbsp;&nbsp;&nbsp; case MCI_FORMAT_TMSF:<BR>+&nbsp;&nbsp;&nbsp; 
  default: /* unknown format ! force TMSF ! ... 
  */<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, 
  NULL))<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 0;<BR>+ if (dwFrame &lt; FRAME_OF_TOC(toc, toc.FirstTrack) 
  ||<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  dwFrame &gt; FRAME_OF_TOC(toc, toc.LastTrack + 1)) {<BR>+ &nbsp;&nbsp;&nbsp; 
  ERR("Out of range value %lu [%u,%u]\n",<BR>+ dwFrame, FRAME_OF_TOC(toc, 
  toc.FirstTrack),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  FRAME_OF_TOC(toc, toc.LastTrack + 1));<BR>+ &nbsp;&nbsp;&nbsp; *lpRet = 
  0;<BR>+ &nbsp;&nbsp;&nbsp; return 0;<BR>+ }<BR>+ for (wTrack = toc.FirstTrack; 
  wTrack &lt;= toc.LastTrack; wTrack++) {<BR>+ &nbsp;&nbsp;&nbsp; if 
  (FRAME_OF_TOC(toc, wTrack) &gt; dwFrame)<BR>+ break;<BR>+ 
  }<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wTrack--;<BR>+ dwFrame -= 
  FRAME_OF_TOC(toc, wTrack);<BR>+ wMinutes = dwFrame / CDFRAMES_PERMIN;<BR>+ 
  wSeconds = (dwFrame - CDFRAMES_PERMIN * wMinutes) / CDFRAMES_PERSEC;<BR>+ 
  wFrames = dwFrame - CDFRAMES_PERMIN * wMinutes - CDFRAMES_PERSEC * 
  wSeconds;<BR>+ dwTime = MCI_MAKE_TMSF(wTrack, wMinutes, wSeconds, 
  wFrames);<BR>+ TRACE("%02u-%02u:%02u:%02u\n", wTrack, wMinutes, wSeconds, 
  wFrames);<BR>+ *lpRet = MCI_COLONIZED4_RETURN;<BR>+ 
  break;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; return 
  dwTime;<BR>+}<BR>+<BR>+static DWORD MCICDA_Seek(UINT wDevID, DWORD dwFlags, 
  LPMCI_SEEK_PARMS lpParms);<BR>+static DWORD MCICDA_Stop(UINT wDevID, DWORD 
  dwFlags, LPMCI_GENERIC_PARMS 
  lpParms);<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Open [internal]<BR>+ */<BR>+static DWORD MCICDA_Open(UINT wDevID, 
  DWORD dwFlags, LPMCI_OPEN_PARMSW lpOpenParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD dwDeviceID;<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ret = MCIERR_HARDWARE;<BR>+&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* wmcda = 
  (WINE_MCICDAUDIO*)mciGetDriverData(wDevID);<BR>+&nbsp;&nbsp;&nbsp; 
  WCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  root[7], drive = 0;<BR>+&nbsp;&nbsp;&nbsp; 
  int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  count;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, 
  dwFlags, lpOpenParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (lpOpenParms == NULL) 
  return MCIERR_NULL_PARAMETER_BLOCK;<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) 
  return MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; dwDeviceID = 
  lpOpenParms-&gt;wDeviceID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda-&gt;nUseCount 
  &gt; 0) {<BR>+ /* The driver is already open on this channel */<BR>+ /* If the 
  driver was opened shareable before and this open specifies */<BR>+ /* 
  shareable then increment the use count */<BR>+ if (wmcda-&gt;fShareable 
  &amp;&amp; (dwFlags &amp; MCI_OPEN_SHAREABLE))<BR>+ &nbsp;&nbsp;&nbsp; 
  ++wmcda-&gt;nUseCount;<BR>+ else<BR>+ &nbsp;&nbsp;&nbsp; return 
  MCIERR_MUST_USE_SHAREABLE;<BR>+&nbsp;&nbsp;&nbsp; } else {<BR>+ 
  wmcda-&gt;nUseCount = 1;<BR>+ wmcda-&gt;fShareable = dwFlags &amp; 
  MCI_OPEN_SHAREABLE;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_OPEN_ELEMENT) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_OPEN_ELEMENT_ID) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("MCI_OPEN_ELEMENT_ID %8lx ! Abort\n", 
  (DWORD)lpOpenParms-&gt;lpstrElementName);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCIERR_NO_ELEMENT_ALLOWED;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("MCI_OPEN_ELEMENT 
  element name: %s\n", 
  debugstr_w(lpOpenParms-&gt;lpstrElementName));<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!isalpha(lpOpenParms-&gt;lpstrElementName[0]) || 
  lpOpenParms-&gt;lpstrElementName[1] != ':' 
  ||<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (lpOpenParms-&gt;lpstrElementName[2] &amp;&amp; 
  lpOpenParms-&gt;lpstrElementName[2] != 
  '\\'))<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("MCI_OPEN_ELEMENT unsupported format: %s\n", 
  <BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  debugstr_w(lpOpenParms-&gt;lpstrElementName));<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ret = 
  MCIERR_NO_ELEMENT_ALLOWED;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  goto the_error;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; drive = 
  toupper(lpOpenParms-&gt;lpstrElementName[0]);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  root[0] = drive; root[1] = ':'; root[2] = '\\'; root[3] = 
  '\0';<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GetDriveTypeW(root) 
  != DRIVE_CDROM)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = 
  MCIERR_INVALID_DEVICE_NAME;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  goto the_error;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; else<BR>+&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* drive letter isn't 
  passed... get the dwDeviceID'th cdrom in the system 
  */<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root[0] = 'A'; root[1] = 
  ':'; root[2] = '\\'; root[3] = 
  '\0';<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (count = 0; root[0] 
  &lt;= 'Z'; root[0]++)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (GetDriveTypeW(root) == DRIVE_CDROM &amp;&amp; ++count &gt;= 
  dwDeviceID)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  drive = 
  root[0];<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!drive)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = 
  MCIERR_INVALID_DEVICE_ID;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  goto the_error;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; }<BR>+<BR>+&nbsp;&nbsp;&nbsp; 
  wmcda-&gt;wNotifyDeviceID = dwDeviceID;<BR>+&nbsp;&nbsp;&nbsp; 
  wmcda-&gt;dwTimeFormat = MCI_FORMAT_MSF;<BR>+<BR>+&nbsp;&nbsp;&nbsp; /* now, 
  open the handle */<BR>+&nbsp;&nbsp;&nbsp; root[0] = root[1] = '\\'; root[2] = 
  '.'; root[3] = '\\'; root[4] = drive; root[5] = ':'; root[6] = 
  '\0';<BR>+&nbsp;&nbsp;&nbsp; wmcda-&gt;handle = CreateFileW(root, 
  GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 
  0);<BR>+&nbsp;&nbsp;&nbsp; if (wmcda-&gt;handle != 
  INVALID_HANDLE_VALUE)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  0;<BR>+<BR>+ the_error:<BR>+&nbsp;&nbsp;&nbsp; 
  --wmcda-&gt;nUseCount;<BR>+&nbsp;&nbsp;&nbsp; return 
  ret;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Close [internal]<BR>+ */<BR>+static DWORD MCICDA_Close(UINT wDevID, 
  DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, 
  %p);\n", wDevID, dwParam, lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == 
  NULL) return MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (--wmcda-&gt;nUseCount == 0) {<BR>+ 
  CloseHandle(wmcda-&gt;handle);<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; 
  return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_GetDevCaps [internal]<BR>+ */<BR>+static DWORD MCICDA_GetDevCaps(UINT 
  wDevID, DWORD dwFlags,<BR>+ &nbsp;&nbsp; LPMCI_GETDEVCAPS_PARMS 
  lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; DWORD ret = 
  0;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (lpParms == NULL) return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_GETDEVCAPS_ITEM) {<BR>+ TRACE("MCI_GETDEVCAPS_ITEM dwItem=%08lX;\n", 
  lpParms-&gt;dwItem);<BR>+<BR>+ switch (lpParms-&gt;dwItem) {<BR>+ case 
  MCI_GETDEVCAPS_CAN_RECORD:<BR>+ &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>+ &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_GETDEVCAPS_HAS_AUDIO:<BR>+ &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>+ &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_GETDEVCAPS_HAS_VIDEO:<BR>+ &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>+ &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_GETDEVCAPS_DEVICE_TYPE:<BR>+ &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(MCI_DEVTYPE_CD_AUDIO, MCI_DEVTYPE_CD_AUDIO);<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case MCI_GETDEVCAPS_USES_FILES:<BR>+ &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case MCI_GETDEVCAPS_COMPOUND_DEVICE:<BR>+ &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case MCI_GETDEVCAPS_CAN_EJECT:<BR>+ &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case MCI_GETDEVCAPS_CAN_PLAY:<BR>+ &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case MCI_GETDEVCAPS_CAN_SAVE:<BR>+ &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ default:<BR>+ &nbsp;&nbsp;&nbsp; ERR("Unsupported %lx devCaps 
  item\n", lpParms-&gt;dwItem);<BR>+ &nbsp;&nbsp;&nbsp; return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>+ }<BR>+&nbsp;&nbsp;&nbsp; } else {<BR>+ 
  TRACE("No GetDevCaps-Item !\n");<BR>+ return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; 
  TRACE("lpParms-&gt;dwReturn=%08lX;\n", 
  lpParms-&gt;dwReturn);<BR>+&nbsp;&nbsp;&nbsp; return 
  ret;<BR>+}<BR>+<BR>+static DWORD CDROM_Audio_GetSerial(CDROM_TOC* 
  toc)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; unsigned long serial = 
  0;<BR>+&nbsp;&nbsp;&nbsp; int i;<BR>+&nbsp;&nbsp;&nbsp; WORD 
  wMagic;<BR>+&nbsp;&nbsp;&nbsp; DWORD dwStart, 
  dwEnd;<BR>+<BR>+&nbsp;&nbsp;&nbsp; /*<BR>+&nbsp;&nbsp;&nbsp;&nbsp; * wMagic 
  collects the wFrames from track 1<BR>+&nbsp;&nbsp;&nbsp;&nbsp; * dwStart, 
  dwEnd collect the beginning and end of the disc respectively, 
  in<BR>+&nbsp;&nbsp;&nbsp;&nbsp; * frames.<BR>+&nbsp;&nbsp;&nbsp;&nbsp; * There 
  it is collected for correcting the serial when there are less 
  than<BR>+&nbsp;&nbsp;&nbsp;&nbsp; * 3 tracks.<BR>+&nbsp;&nbsp;&nbsp;&nbsp; 
  */<BR>+&nbsp;&nbsp;&nbsp; wMagic = 
  toc-&gt;TrackData[0].Address[3];<BR>+&nbsp;&nbsp;&nbsp; dwStart = 
  FRAME_OF_TOC(*toc, toc-&gt;FirstTrack);<BR>+<BR>+&nbsp;&nbsp;&nbsp; for (i = 
  0; i &lt;= toc-&gt;LastTrack - toc-&gt;FirstTrack; i++) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serial += 
  (toc-&gt;TrackData[i].Address[1] &lt;&lt; 16) 
  |<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (toc-&gt;TrackData[i].Address[2] &lt;&lt; 8) | 
  toc-&gt;TrackData[i].Address[3];<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; dwEnd = FRAME_OF_TOC(*toc, toc-&gt;LastTrack + 
  1);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (toc-&gt;LastTrack - toc-&gt;FirstTrack + 1 
  &lt; 3)<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serial += wMagic + 
  (dwEnd - dwStart);<BR>+<BR>+&nbsp;&nbsp;&nbsp; return 
  serial;<BR>+}<BR>+<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Info [internal]<BR>+ */<BR>+static DWORD MCICDA_Info(UINT wDevID, 
  DWORD dwFlags, LPMCI_INFO_PARMSW lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; LPCWSTR 
  str = NULL;<BR>+&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; DWORD ret = 
  0;<BR>+&nbsp;&nbsp;&nbsp; WCHAR buffer[16];<BR>+<BR>+&nbsp;&nbsp;&nbsp; 
  TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (lpParms == NULL || 
  lpParms-&gt;lpstrReturn == NULL)<BR>+ return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("buf=%p, 
  len=%lu\n", lpParms-&gt;lpstrReturn, 
  lpParms-&gt;dwRetSize);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_INFO_PRODUCT) {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static 
  const WCHAR wszAudioCd[] = {'W','i','n','e','\'','s',' ','a','u','d','i','o',' 
  ','C','D',0};<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = 
  wszAudioCd;<BR>+&nbsp;&nbsp;&nbsp; } else if (dwFlags &amp; 
  MCI_INFO_MEDIA_UPC) {<BR>+ ret = MCIERR_NO_IDENTITY;<BR>+&nbsp;&nbsp;&nbsp; } 
  else if (dwFlags &amp; MCI_INFO_MEDIA_IDENTITY) {<BR>+ DWORD 
  &nbsp;&nbsp;&nbsp; res = 0;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  CDROM_TOC&nbsp;&nbsp; toc;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br;<BR>+ static const WCHAR wszLu[] 
  = {'%','l','u',0};<BR>+<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) {<BR>+ &nbsp;&nbsp;&nbsp; return 
  MCICDA_GetError(wmcda);<BR>+ }<BR>+<BR>+ res = 
  CDROM_Audio_GetSerial(&amp;toc);<BR>+ sprintfW(buffer, wszLu, res);<BR>+ str = 
  buffer;<BR>+&nbsp;&nbsp;&nbsp; } else {<BR>+ WARN("Don't know this info 
  command (%lu)\n", dwFlags);<BR>+ ret = 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; 
  if (str) {<BR>+ if (lpParms-&gt;dwRetSize &lt;= strlenW(str)) {<BR>+ 
  &nbsp;&nbsp;&nbsp; lstrcpynW(lpParms-&gt;lpstrReturn, str, 
  lpParms-&gt;dwRetSize - 1);<BR>+ &nbsp;&nbsp;&nbsp; ret = 
  MCIERR_PARAM_OVERFLOW;<BR>+ } else {<BR>+ &nbsp;&nbsp;&nbsp; 
  strcpyW(lpParms-&gt;lpstrReturn, str);<BR>+ }<BR>+&nbsp;&nbsp;&nbsp; } else 
  {<BR>+ *lpParms-&gt;lpstrReturn = 0;<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; TRACE("=&gt; %s (%ld)\n", 
  debugstr_w(lpParms-&gt;lpstrReturn), ret);<BR>+&nbsp;&nbsp;&nbsp; return 
  ret;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Status [internal]<BR>+ */<BR>+static DWORD MCICDA_Status(UINT wDevID, 
  DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  idx;<BR>+&nbsp;&nbsp;&nbsp; DWORD 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ret = 0;<BR>+&nbsp;&nbsp;&nbsp; 
  CDROM_SUB_Q_DATA_FORMAT&nbsp;&nbsp;&nbsp;&nbsp; fmt;<BR>+&nbsp;&nbsp;&nbsp; 
  SUB_Q_CHANNEL_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  data;<BR>+&nbsp;&nbsp;&nbsp; 
  CDROM_TOC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  toc;<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (lpParms == NULL) return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_NOTIFY) {<BR>+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", 
  lpParms-&gt;dwCallback);<BR>+ 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>+ 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_STATUS_ITEM) {<BR>+ 
  TRACE("dwItem = %lx\n", lpParms-&gt;dwItem);<BR>+ switch (lpParms-&gt;dwItem) 
  {<BR>+ case 
  MCI_STATUS_CURRENT_TRACK:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, 
  NULL))<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+ return MCICDA_GetError(wmcda);<BR>+ &nbsp;&nbsp;&nbsp; }<BR>+ 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  data.CurrentPosition.TrackNumber;<BR>+ &nbsp;&nbsp;&nbsp; 
  TRACE("CURRENT_TRACK=%lu!\n", lpParms-&gt;dwReturn);<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case 
  MCI_STATUS_LENGTH:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>+ &nbsp;&nbsp;&nbsp; }<BR>+ 
  &nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_TRACK) {<BR>+ TRACE("MCI_TRACK #%lu 
  LENGTH=??? !\n", lpParms-&gt;dwTrack);<BR>+ if (lpParms-&gt;dwTrack &lt; 
  toc.FirstTrack || lpParms-&gt;dwTrack &gt; toc.LastTrack)<BR>+ 
  &nbsp;&nbsp;&nbsp; return 
  MCIERR_OUTOFRANGE;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  idx = lpParms-&gt;dwTrack - toc.FirstTrack;<BR>+ lpParms-&gt;dwReturn = 
  FRAME_OF_TOC(toc, lpParms-&gt;dwTrack + 1) 
  -<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  FRAME_OF_TOC(toc, lpParms-&gt;dwTrack);<BR>+ /* Windows returns one frame less 
  than the total track length for the<BR>+ &nbsp;&nbsp; last track on the 
  CD.&nbsp; See CDDB HOWTO.&nbsp; Verified on Win95OSR2. */<BR>+ if 
  (lpParms-&gt;dwTrack == toc.LastTrack)<BR>+ &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn--;<BR>+ &nbsp;&nbsp;&nbsp; } else {<BR>+ /* Sum of the 
  lengths of all of the tracks.&nbsp; Inherits the<BR>+ &nbsp;&nbsp; 'off by one 
  frame' behavior from the length of the last track.<BR>+ &nbsp;&nbsp; See above 
  comment. */<BR>+ lpParms-&gt;dwReturn = FRAME_OF_TOC(toc, toc.LastTrack + 1) 
  -<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  FRAME_OF_TOC(toc, toc.FirstTrack) - 1;<BR>+ &nbsp;&nbsp;&nbsp; }<BR>+ 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = MCICDA_CalcTime(wmcda,<BR>+ 
  (wmcda-&gt;dwTimeFormat == MCI_FORMAT_TMSF)<BR>+ &nbsp;&nbsp;&nbsp; ? 
  MCI_FORMAT_MSF : wmcda-&gt;dwTimeFormat,<BR>+ lpParms-&gt;dwReturn,<BR>+ 
  &amp;ret);<BR>+ &nbsp;&nbsp;&nbsp; TRACE("LENGTH=%lu !\n", 
  lpParms-&gt;dwReturn);<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_STATUS_MODE:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MCICDA_GetStatus(wmcda);<BR>+ &nbsp;&nbsp;&nbsp; 
  TRACE("MCI_STATUS_MODE=%08lX !\n", lpParms-&gt;dwReturn);<BR>+ 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(lpParms-&gt;dwReturn, lpParms-&gt;dwReturn);<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case MCI_STATUS_MEDIA_PRESENT:<BR>+ &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = (MCICDA_GetStatus(wmcda) == MCI_MODE_OPEN) ?<BR>+ 
  MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>+ 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_MEDIA_PRESENT =%c!\n", 
  LOWORD(lpParms-&gt;dwReturn) ? 'Y' : 'N');<BR>+ &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_STATUS_NUMBER_OF_TRACKS:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>+ &nbsp;&nbsp;&nbsp; }<BR>+ 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = toc.LastTrack - toc.FirstTrack + 
  1;<BR>+ &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n", 
  lpParms-&gt;dwReturn);<BR>+ &nbsp;&nbsp;&nbsp; if (lpParms-&gt;dwReturn == 
  (WORD)-1)<BR>+ return MCICDA_GetError(wmcda);<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case MCI_STATUS_POSITION:<BR>+ &nbsp;&nbsp;&nbsp; if (dwFlags 
  &amp; MCI_STATUS_START) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+ lpParms-&gt;dwReturn = FRAME_OF_TOC(toc, toc.FirstTrack);<BR>+ 
  TRACE("get MCI_STATUS_START !\n");<BR>+ &nbsp;&nbsp;&nbsp; } else if (dwFlags 
  &amp; MCI_TRACK) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+ if (lpParms-&gt;dwTrack &lt; toc.FirstTrack || lpParms-&gt;dwTrack &gt; 
  toc.LastTrack)<BR>+ &nbsp;&nbsp;&nbsp; return MCIERR_OUTOFRANGE;<BR>+ 
  lpParms-&gt;dwReturn = FRAME_OF_TOC(toc, lpParms-&gt;dwTrack);<BR>+ TRACE("get 
  MCI_TRACK #%lu !\n", 
  lpParms-&gt;dwTrack);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  } else 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = 
  FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+ &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = MCICDA_CalcTime(wmcda, 
  wmcda-&gt;dwTimeFormat, lpParms-&gt;dwReturn, &amp;ret);<BR>+ 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_POSITION=%08lX !\n", 
  lpParms-&gt;dwReturn);<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_STATUS_READY:<BR>+ &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_READY 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  switch 
  (MCICDA_GetStatus(wmcda))<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  MCI_MODE_NOT_READY:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  case 
  MCI_MODE_OPEN:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, 
  MCI_FALSE);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  default:<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(TRUE, 
  MCI_TRUE);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+ &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_READY=%u!\n", 
  LOWORD(lpParms-&gt;dwReturn));<BR>+ &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_STATUS_TIME_FORMAT:<BR>+ &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(wmcda-&gt;dwTimeFormat, MCI_FORMAT_RETURN_BASE + 
  wmcda-&gt;dwTimeFormat);<BR>+ &nbsp;&nbsp;&nbsp; 
  TRACE("MCI_STATUS_TIME_FORMAT=%08x!\n", LOWORD(lpParms-&gt;dwReturn));<BR>+ 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ case 4001: /* FIXME: for bogus FullCD */<BR>+ case 
  MCI_CDA_STATUS_TYPE_TRACK:<BR>+ &nbsp;&nbsp;&nbsp; if (!(dwFlags &amp; 
  MCI_TRACK))<BR>+ ret = MCIERR_MISSING_PARAMETER;<BR>+ &nbsp;&nbsp;&nbsp; else 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+ if (lpParms-&gt;dwTrack &lt; toc.FirstTrack || lpParms-&gt;dwTrack &gt; 
  toc.LastTrack)<BR>+ &nbsp;&nbsp;&nbsp; ret = MCIERR_OUTOFRANGE;<BR>+ else<BR>+ 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = (toc.TrackData[lpParms-&gt;dwTrack - 
  toc.FirstTrack].Control &amp; 0x04) 
  ?<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  MCI_CDA_TRACK_OTHER : MCI_CDA_TRACK_AUDIO;<BR>+ &nbsp;&nbsp;&nbsp; }<BR>+ 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_CDA_STATUS_TYPE_TRACK[%ld]=%ld\n", 
  lpParms-&gt;dwTrack, lpParms-&gt;dwReturn);<BR>+ &nbsp;&nbsp;&nbsp; 
  break;<BR>+ default:<BR>+ &nbsp;&nbsp;&nbsp; FIXME("unknown command %08lX 
  !\n", lpParms-&gt;dwItem);<BR>+ &nbsp;&nbsp;&nbsp; return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>+ }<BR>+&nbsp;&nbsp;&nbsp; } else {<BR>+ 
  WARN("not MCI_STATUS_ITEM !\n");<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  ret;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_SkipDataTracks [internal]<BR>+ */<BR>+static DWORD 
  MCICDA_SkipDataTracks(WINE_MCICDAUDIO* wmcda,DWORD *frame)<BR>+{<BR>+&nbsp; 
  int i;<BR>+&nbsp; DWORD br;<BR>+&nbsp; CDROM_TOC toc;<BR>+&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) {<BR>+&nbsp;&nbsp;&nbsp; WARN("error 
  reading TOC !\n");<BR>+&nbsp;&nbsp;&nbsp; return 
  MCICDA_GetError(wmcda);<BR>+&nbsp; }<BR>+&nbsp; /* Locate first track whose 
  starting frame is bigger than frame */<BR>+&nbsp; 
  for(i=toc.FirstTrack;i&lt;=toc.LastTrack+1;i++) <BR>+&nbsp;&nbsp;&nbsp; if ( 
  FRAME_OF_TOC(toc, i) &gt; *frame ) break;<BR>+&nbsp; if (i &lt;= 
  toc.FirstTrack &amp;&amp; i&gt;toc.LastTrack+1) {<BR>+&nbsp;&nbsp;&nbsp; i = 
  0; /* requested address is out of range: go back to start 
  */<BR>+&nbsp;&nbsp;&nbsp; *frame = 
  FRAME_OF_TOC(toc,toc.FirstTrack);<BR>+&nbsp; }<BR>+&nbsp; 
  else<BR>+&nbsp;&nbsp;&nbsp; i--;<BR>+&nbsp; /* i points to last track whose 
  start address is not greater than frame.<BR>+&nbsp;&nbsp; * Now skip non-audio 
  tracks */<BR>+&nbsp; for(;i&lt;=toc.LastTrack+1;i++)<BR>+&nbsp;&nbsp;&nbsp; if 
  ( ! (toc.TrackData[i-toc.FirstTrack].Control &amp; 4) 
  )<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>+&nbsp; /* The frame will be an 
  address in the next audio track or<BR>+&nbsp;&nbsp; * address of lead-out. 
  */<BR>+&nbsp; if ( FRAME_OF_TOC(toc, i) &gt; *frame )<BR>+&nbsp;&nbsp;&nbsp; 
  *frame = FRAME_OF_TOC(toc, i);<BR>+&nbsp; return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Play [internal]<BR>+ */<BR>+static DWORD MCICDA_Play(UINT wDevID, 
  DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; DWORD 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = 0, start, 
  end;<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+&nbsp;&nbsp;&nbsp; 
  CDROM_PLAY_AUDIO_MSF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  play;<BR>+&nbsp;&nbsp;&nbsp; CDROM_SUB_Q_DATA_FORMAT&nbsp;&nbsp;&nbsp;&nbsp; 
  fmt;<BR>+&nbsp;&nbsp;&nbsp; 
  SUB_Q_CHANNEL_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  data;<BR>+&nbsp;&nbsp;&nbsp; CDROM_TOC toc;<BR>+<BR>+&nbsp;&nbsp;&nbsp; 
  TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (lpParms == NULL)<BR>+ return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == 
  NULL)<BR>+ return MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_FROM) {<BR>+ start = MCICDA_CalcFrame(wmcda, 
  lpParms-&gt;dwFrom);<BR>+ if ( (ret=MCICDA_SkipDataTracks(wmcda, &amp;start)) 
  )<BR>+ &nbsp; return ret;<BR>+ TRACE("MCI_FROM=%08lX -&gt; %lu \n", 
  lpParms-&gt;dwFrom, start);<BR>+&nbsp;&nbsp;&nbsp; } else 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start = 
  FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress);<BR>+ if ( 
  (ret=MCICDA_SkipDataTracks(wmcda, &amp;start)) )<BR>+ &nbsp; return 
  ret;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_TO) 
  {<BR>+ end = MCICDA_CalcFrame(wmcda, lpParms-&gt;dwTo);<BR>+ 
  TRACE("MCI_TO=%08lX -&gt; %lu \n", lpParms-&gt;dwTo, 
  end);<BR>+&nbsp;&nbsp;&nbsp; } else 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>+ end = FRAME_OF_TOC(toc, toc.LastTrack + 1) - 1;<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; TRACE("Playing from %lu to %lu\n", start, 
  end);<BR>+&nbsp;&nbsp;&nbsp; play.StartingM = start / 
  CDFRAMES_PERMIN;<BR>+&nbsp;&nbsp;&nbsp; play.StartingS = (start / 
  CDFRAMES_PERSEC) % 60;<BR>+&nbsp;&nbsp;&nbsp; play.StartingF = start % 
  CDFRAMES_PERSEC;<BR>+&nbsp;&nbsp;&nbsp; play.EndingM&nbsp;&nbsp; = end / 
  CDFRAMES_PERMIN;<BR>+&nbsp;&nbsp;&nbsp; play.EndingS&nbsp;&nbsp; = (end / 
  CDFRAMES_PERSEC) % 60;<BR>+&nbsp;&nbsp;&nbsp; play.EndingF&nbsp;&nbsp; = end % 
  CDFRAMES_PERSEC;<BR>+&nbsp;&nbsp;&nbsp; if (!DeviceIoControl(wmcda-&gt;handle, 
  IOCTL_CDROM_PLAY_AUDIO_MSF, &amp;play, 
  sizeof(play),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  NULL, 0, &amp;br, NULL)) {<BR>+ ret = MCIERR_HARDWARE;<BR>+&nbsp;&nbsp;&nbsp; 
  } else if (dwFlags &amp; MCI_NOTIFY) {<BR>+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX 
  !\n", lpParms-&gt;dwCallback);<BR>+ /*<BR>+ &nbsp; 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>+ &nbsp; 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>+ 
  */<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; return 
  ret;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Stop [internal]<BR>+ */<BR>+static DWORD MCICDA_Stop(UINT wDevID, 
  DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_STOP_AUDIO, NULL, 0, NULL, 0, 
  &amp;br, NULL))<BR>+ return MCIERR_HARDWARE;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (lpParms &amp;&amp; (dwFlags &amp; MCI_NOTIFY)) {<BR>+ 
  TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms-&gt;dwCallback);<BR>+ 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>+ 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Pause [internal]<BR>+ */<BR>+static DWORD MCICDA_Pause(UINT wDevID, 
  DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_PAUSE_AUDIO, NULL, 0, NULL, 0, 
  &amp;br, NULL))<BR>+ return MCIERR_HARDWARE;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (lpParms &amp;&amp; (dwFlags &amp; MCI_NOTIFY)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("MCI_NOTIFY_SUCCESSFUL 
  %08lX !\n", lpParms-&gt;dwCallback);<BR>+ 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>+ 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Resume [internal]<BR>+ */<BR>+static DWORD MCICDA_Resume(UINT wDevID, 
  DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_RESUME_AUDIO, NULL, 0, NULL, 
  0, &amp;br, NULL))<BR>+ return MCIERR_HARDWARE;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (lpParms &amp;&amp; (dwFlags &amp; MCI_NOTIFY)) {<BR>+ 
  TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms-&gt;dwCallback);<BR>+ 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>+ 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Seek [internal]<BR>+ */<BR>+static DWORD MCICDA_Seek(UINT wDevID, 
  DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; DWORD 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at;<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; 
  CDROM_SEEK_AUDIO_MSF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  seek;<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br, ret;<BR>+&nbsp;&nbsp;&nbsp; CDROM_TOC toc;<BR>+<BR>+&nbsp;&nbsp;&nbsp; 
  TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>+&nbsp;&nbsp;&nbsp; if (lpParms == NULL) return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WARN("error reading TOC 
  !\n");<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  MCICDA_GetError(wmcda);<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; switch 
  (dwFlags &amp; ~(MCI_NOTIFY|MCI_WAIT)) {<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_SEEK_TO_START:<BR>+ TRACE("Seeking to start\n");<BR>+ at = 
  FRAME_OF_TOC(toc,toc.FirstTrack);<BR>+ if ( (ret=MCICDA_SkipDataTracks(wmcda, 
  &amp;at)) )<BR>+ &nbsp; return ret;<BR>+ break;<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_SEEK_TO_END:<BR>+ TRACE("Seeking to end\n");<BR>+ at = FRAME_OF_TOC(toc, 
  toc.LastTrack + 1) - 1;<BR>+ if ( (ret=MCICDA_SkipDataTracks(wmcda, &amp;at)) 
  )<BR>+ &nbsp; return ret;<BR>+ break;<BR>+&nbsp;&nbsp;&nbsp; case MCI_TO:<BR>+ 
  TRACE("Seeking to %lu\n", 
  lpParms-&gt;dwTo);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at = 
  MCICDA_CalcFrame(wmcda, lpParms-&gt;dwTo);<BR>+ if ( 
  (ret=MCICDA_SkipDataTracks(wmcda, &amp;at)) )<BR>+ &nbsp; return ret;<BR>+ 
  break;<BR>+&nbsp;&nbsp;&nbsp; default:<BR>+ TRACE("Unknown seek action 
  %08lX\n",<BR>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dwFlags &amp; 
  ~(MCI_NOTIFY|MCI_WAIT)));<BR>+ return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; 
  seek.M = at / CDFRAMES_PERMIN;<BR>+&nbsp;&nbsp;&nbsp; seek.S = (at / 
  CDFRAMES_PERSEC) % 60;<BR>+&nbsp;&nbsp;&nbsp; seek.F = at % 
  CDFRAMES_PERSEC;<BR>+&nbsp;&nbsp;&nbsp; if (!DeviceIoControl(wmcda-&gt;handle, 
  IOCTL_CDROM_SEEK_AUDIO_MSF, &amp;seek, 
  sizeof(seek),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  NULL, 0, &amp;br, NULL))<BR>+ return 
  MCIERR_HARDWARE;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_NOTIFY) 
  {<BR>+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms-&gt;dwCallback);<BR>+ 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>+ &nbsp; 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_SetDoor [internal]<BR>+ */<BR>+static DWORD MCICDA_SetDoor(UINT 
  wDevID, BOOL open)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>+&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04x, %s) !\n", wDevID, (open) ? 
  "OPEN" : "CLOSE");<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (open) ? IOCTL_STORAGE_EJECT_MEDIA : 
  IOCTL_STORAGE_LOAD_MEDIA,<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  NULL, 0, NULL, 0, &amp;br, NULL))<BR>+ return 
  MCIERR_HARDWARE;<BR>+<BR>+&nbsp;&nbsp;&nbsp; return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * MCICDA_Set [internal]<BR>+ */<BR>+static DWORD MCICDA_Set(UINT wDevID, DWORD 
  dwFlags, LPMCI_SET_PARMS lpParms)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>+<BR>+&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, 
  %p);\n", wDevID, dwFlags, lpParms);<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (wmcda == 
  NULL) return MCIERR_INVALID_DEVICE_ID;<BR>+<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags 
  &amp; MCI_SET_DOOR_OPEN) {<BR>+ MCICDA_SetDoor(wDevID, 
  TRUE);<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_SET_DOOR_CLOSED) {<BR>+ MCICDA_SetDoor(wDevID, 
  FALSE);<BR>+&nbsp;&nbsp;&nbsp; }<BR>+<BR>+&nbsp;&nbsp;&nbsp; /* only functions 
  which require valid lpParms below this line ! */<BR>+&nbsp;&nbsp;&nbsp; if 
  (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;<BR>+&nbsp;&nbsp;&nbsp; 
  /*<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("dwTimeFormat=%08lX\n", 
  lpParms-&gt;dwTimeFormat);<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  TRACE("dwAudio=%08lX\n", lpParms-&gt;dwAudio);<BR>+&nbsp;&nbsp;&nbsp; 
  */<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_SET_TIME_FORMAT) {<BR>+ switch 
  (lpParms-&gt;dwTimeFormat) {<BR>+ case MCI_FORMAT_MILLISECONDS:<BR>+ 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_FORMAT_MILLISECONDS !\n");<BR>+ 
  &nbsp;&nbsp;&nbsp; break;<BR>+ case MCI_FORMAT_MSF:<BR>+ &nbsp;&nbsp;&nbsp; 
  TRACE("MCI_FORMAT_MSF !\n");<BR>+ &nbsp;&nbsp;&nbsp; break;<BR>+ case 
  MCI_FORMAT_TMSF:<BR>+ &nbsp;&nbsp;&nbsp; TRACE("MCI_FORMAT_TMSF !\n");<BR>+ 
  &nbsp;&nbsp;&nbsp; break;<BR>+ default:<BR>+ &nbsp;&nbsp;&nbsp; WARN("bad time 
  format !\n");<BR>+ &nbsp;&nbsp;&nbsp; return MCIERR_BAD_TIME_FORMAT;<BR>+ 
  }<BR>+ wmcda-&gt;dwTimeFormat = 
  lpParms-&gt;dwTimeFormat;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_SET_VIDEO) return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION;<BR>+&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_SET_OFF) return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>+&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_NOTIFY) {<BR>+ TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",<BR>+ 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpParms-&gt;dwCallback);<BR>+ 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>+ 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>+&nbsp;&nbsp;&nbsp; 
  }<BR>+&nbsp;&nbsp;&nbsp; return 
  0;<BR>+}<BR>+<BR>+/**************************************************************************<BR>+ 
  * DriverProc (MCICDA.@)<BR>+ */<BR>+LONG CALLBACK MCICDA_DriverProc(DWORD 
  dwDevID, HDRVR hDriv, DWORD wMsg,<BR>+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD 
  dwParam1, DWORD dwParam2)<BR>+{<BR>+&nbsp;&nbsp;&nbsp; switch(wMsg) 
  {<BR>+&nbsp;&nbsp;&nbsp; case DRV_LOAD: return 1;<BR>+&nbsp;&nbsp;&nbsp; case 
  DRV_FREE: return 1;<BR>+&nbsp;&nbsp;&nbsp; case DRV_OPEN: return 
  MCICDA_drvOpen((LPCWSTR)dwParam1, 
  (LPMCI_OPEN_DRIVER_PARMSW)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case DRV_CLOSE: 
  return MCICDA_drvClose(dwDevID);<BR>+&nbsp;&nbsp;&nbsp; case DRV_ENABLE: 
  return 1;<BR>+&nbsp;&nbsp;&nbsp; case DRV_DISABLE: return 
  1;<BR>+&nbsp;&nbsp;&nbsp; case DRV_QUERYCONFIGURE: return 
  1;<BR>+&nbsp;&nbsp;&nbsp; case DRV_CONFIGURE: MessageBoxA(0, "MCI audio CD 
  driver !", "Wine Driver", MB_OK); return 1;<BR>+&nbsp;&nbsp;&nbsp; case 
  DRV_INSTALL: return DRVCNF_RESTART;<BR>+&nbsp;&nbsp;&nbsp; case DRV_REMOVE: 
  return DRVCNF_RESTART;<BR>+&nbsp;&nbsp;&nbsp; }<BR>+<BR>+&nbsp;&nbsp;&nbsp; if 
  (dwDevID == 0xFFFFFFFF) return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>+<BR>+&nbsp;&nbsp;&nbsp; switch (wMsg) 
  {<BR>+&nbsp;&nbsp;&nbsp; case MCI_OPEN_DRIVER: return MCICDA_Open(dwDevID, 
  dwParam1, (LPMCI_OPEN_PARMSW)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_CLOSE_DRIVER: return MCICDA_Close(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_GETDEVCAPS: 
  return MCICDA_GetDevCaps(dwDevID, dwParam1, 
  (LPMCI_GETDEVCAPS_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_INFO: 
  return MCICDA_Info(dwDevID, dwParam1, 
  (LPMCI_INFO_PARMSW)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_STATUS: return 
  MCICDA_Status(dwDevID, dwParam1, 
  (LPMCI_STATUS_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_SET: return 
  MCICDA_Set(dwDevID, dwParam1, 
  (LPMCI_SET_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_PLAY: return 
  MCICDA_Play(dwDevID, dwParam1, 
  (LPMCI_PLAY_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_STOP: return 
  MCICDA_Stop(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_PAUSE: return 
  MCICDA_Pause(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_RESUME: return 
  MCICDA_Resume(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; case MCI_SEEK: return 
  MCICDA_Seek(dwDevID, dwParam1, 
  (LPMCI_SEEK_PARMS)dwParam2);<BR>+&nbsp;&nbsp;&nbsp; /* commands that should 
  report an error as they are not supported in<BR>+&nbsp;&nbsp;&nbsp;&nbsp; * 
  the native version */<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_SET_DOOR_CLOSED:<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_SET_DOOR_OPEN:<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_LOAD:<BR>+&nbsp;&nbsp;&nbsp; case MCI_SAVE:<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_FREEZE:<BR>+&nbsp;&nbsp;&nbsp; case MCI_PUT:<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_REALIZE:<BR>+&nbsp;&nbsp;&nbsp; case MCI_UNFREEZE:<BR>+&nbsp;&nbsp;&nbsp; 
  case MCI_UPDATE:<BR>+&nbsp;&nbsp;&nbsp; case MCI_WHERE:<BR>+&nbsp;&nbsp;&nbsp; 
  case MCI_STEP:<BR>+&nbsp;&nbsp;&nbsp; case MCI_SPIN:<BR>+&nbsp;&nbsp;&nbsp; 
  case MCI_ESCAPE:<BR>+&nbsp;&nbsp;&nbsp; case MCI_COPY:<BR>+&nbsp;&nbsp;&nbsp; 
  case MCI_CUT:<BR>+&nbsp;&nbsp;&nbsp; case MCI_DELETE:<BR>+&nbsp;&nbsp;&nbsp; 
  case MCI_PASTE:<BR>+&nbsp;&nbsp;&nbsp; case MCI_WINDOW:<BR>+ 
  TRACE("Unsupported command [0x%lx]\n", wMsg);<BR>+ 
  break;<BR>+&nbsp;&nbsp;&nbsp; case MCI_OPEN:<BR>+&nbsp;&nbsp;&nbsp; case 
  MCI_CLOSE:<BR>+ ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");<BR>+ 
  break;<BR>+&nbsp;&nbsp;&nbsp; default:<BR>+ TRACE("Sending msg [0x%lx] to 
  default driver proc\n", wMsg);<BR>+ return DefDriverProc(dwDevID, hDriv, wMsg, 
  dwParam1, dwParam2);<BR>+&nbsp;&nbsp;&nbsp; }<BR>+&nbsp;&nbsp;&nbsp; return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>+}<BR>+<BR>+/*-----------------------------------------------------------------------*/<BR>diff 
  -Nru wine/dlls/mcicda/mcicda.spec winedev/dlls/mcicda/mcicda.spec<BR>--- 
  wine/dlls/mcicda/mcicda.spec 1970-01-01 01:00:00.000000000 +0100<BR>+++ 
  winedev/dlls/mcicda/mcicda.spec 2002-06-21 21:15:50.000000000 +0200<BR>@@ -0,0 
  +1 @@<BR>+@ stdcall DriverProc(long long long long long) 
  MCICDA_DriverProc<BR>diff -Nru wine/dlls/winmm/mcicda/.cvsignore 
  winedev/dlls/winmm/mcicda/.cvsignore<BR>--- wine/dlls/winmm/mcicda/.cvsignore 
  2004-03-24 04:36:45.000000000 +0100<BR>+++ 
  winedev/dlls/winmm/mcicda/.cvsignore 1970-01-01 01:00:00.000000000 +0100<BR>@@ 
  -1,2 +0,0 @@<BR>-Makefile<BR>-mcicda.drv.dbg.c<BR>diff -Nru 
  wine/dlls/winmm/mcicda/Makefile.in 
  winedev/dlls/winmm/mcicda/Makefile.in<BR>--- 
  wine/dlls/winmm/mcicda/Makefile.in 2005-02-09 23:26:26.000000000 +0100<BR>+++ 
  winedev/dlls/winmm/mcicda/Makefile.in 1970-01-01 01:00:00.000000000 
  +0100<BR>@@ -1,14 +0,0 @@<BR>-TOPSRCDIR = @top_srcdir@<BR>-TOPOBJDIR = 
  ../../..<BR>-SRCDIR&nbsp;&nbsp;&nbsp; = 
  @srcdir@<BR>-VPATH&nbsp;&nbsp;&nbsp;&nbsp; = 
  @srcdir@<BR>-MODULE&nbsp;&nbsp;&nbsp; = mcicda.drv<BR>-IMPORTS&nbsp;&nbsp; = 
  winmm user32 kernel32<BR>-EXTRALIBS = $(LIBUNICODE)<BR>-<BR>-C_SRCS = \<BR>- 
  mcicda.c<BR>-<BR>-@MAKE_DLL_RULES@<BR>-<BR>-### Dependencies:<BR>diff -Nru 
  wine/dlls/winmm/mcicda/mcicda.c winedev/dlls/winmm/mcicda/mcicda.c<BR>--- 
  wine/dlls/winmm/mcicda/mcicda.c 2005-02-09 23:26:26.000000000 +0100<BR>+++ 
  winedev/dlls/winmm/mcicda/mcicda.c 1970-01-01 01:00:00.000000000 +0100<BR>@@ 
  -1,1053 +0,0 @@<BR>-/* -*- tab-width: 8; c-basic-offset: 4 -*- */<BR>-/*<BR>- 
  * MCI driver for audio CD (MCICDA)<BR>- *<BR>- * Copyright 
  1994&nbsp;&nbsp;&nbsp; Martin Ayotte<BR>- * Copyright 1998-99 Eric Pouech<BR>- 
  * Copyright 2000&nbsp;&nbsp;&nbsp; Andreas Mohr<BR>- *<BR>- * This library is 
  free software; you can redistribute it and/or<BR>- * modify it under the terms 
  of the GNU Lesser General Public<BR>- * License as published by the Free 
  Software Foundation; either<BR>- * version 2.1 of the License, or (at your 
  option) any later version.<BR>- *<BR>- * This library is distributed in the 
  hope that it will be useful,<BR>- * but WITHOUT ANY WARRANTY; without even the 
  implied warranty of<BR>- * MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  PURPOSE.&nbsp; See the GNU<BR>- * Lesser General Public License for more 
  details.<BR>- *<BR>- * You should have received a copy of the GNU Lesser 
  General Public<BR>- * License along with this library; if not, write to the 
  Free Software<BR>- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
  MA&nbsp; 02111-1307&nbsp; USA<BR>- */<BR>-<BR>-#include 
  "config.h"<BR>-#include &lt;stdarg.h&gt;<BR>-#include 
  &lt;stdio.h&gt;<BR>-#include &lt;string.h&gt;<BR>-<BR>-#include 
  "windef.h"<BR>-#include "winbase.h"<BR>-#include "wingdi.h"<BR>-#include 
  "winuser.h"<BR>-#include "ntstatus.h"<BR>-#include "wownt32.h"<BR>-#include 
  "mmddk.h"<BR>-#include "winioctl.h"<BR>-#include "ntddstor.h"<BR>-#include 
  "ntddcdrm.h"<BR>-#include "wine/debug.h"<BR>-#include 
  "wine/unicode.h"<BR>-<BR>-WINE_DEFAULT_DEBUG_CHANNEL(mcicda);<BR>-<BR>-#define 
  CDFRAMES_PERSEC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  75<BR>-#define 
  CDFRAMES_PERMIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (CDFRAMES_PERSEC * 60)<BR>-#define FRAME_OF_ADDR(a) ((a)[1] * CDFRAMES_PERMIN 
  + (a)[2] * CDFRAMES_PERSEC + (a)[3])<BR>-#define FRAME_OF_TOC(toc, idx)&nbsp; 
  FRAME_OF_ADDR((toc).TrackData[idx - 
  (toc).FirstTrack].Address)<BR>-<BR>-typedef struct {<BR>-&nbsp;&nbsp;&nbsp; 
  UINT wDevID;<BR>-&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp; 
  nUseCount;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 
  Incremented for each shared open */<BR>-&nbsp;&nbsp;&nbsp; BOOL&nbsp; 
  fShareable;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* TRUE if first 
  open was shareable */<BR>-&nbsp;&nbsp;&nbsp; WORD&nbsp;&nbsp;&nbsp; 
  wNotifyDeviceID;&nbsp;&nbsp;&nbsp; /* MCI device ID with a pending 
  notification */<BR>-&nbsp;&nbsp;&nbsp; HANDLE 
  hCallback;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Callback 
  handle for pending notification */<BR>-&nbsp;&nbsp;&nbsp; DWORD 
  dwTimeFormat;<BR>-&nbsp;&nbsp;&nbsp; 
  HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  handle;<BR>-} 
  WINE_MCICDAUDIO;<BR>-<BR>-/*-----------------------------------------------------------------------*/<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_drvOpen [internal]<BR>- */<BR>-static DWORD MCICDA_drvOpen(LPCWSTR 
  str, LPMCI_OPEN_DRIVER_PARMSW modp)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (!modp) return 
  0xFFFFFFFF;<BR>-<BR>-&nbsp;&nbsp;&nbsp; wmcda = HeapAlloc(GetProcessHeap(), 
  HEAP_ZERO_MEMORY, sizeof(WINE_MCICDAUDIO));<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (!wmcda)<BR>- return 0;<BR>-<BR>-&nbsp;&nbsp;&nbsp; wmcda-&gt;wDevID = 
  modp-&gt;wDeviceID;<BR>-&nbsp;&nbsp;&nbsp; mciSetDriverData(wmcda-&gt;wDevID, 
  (DWORD)wmcda);<BR>-&nbsp;&nbsp;&nbsp; modp-&gt;wCustomCommandTable = 
  MCI_NO_COMMAND_TABLE;<BR>-&nbsp;&nbsp;&nbsp; modp-&gt;wType = 
  MCI_DEVTYPE_CD_AUDIO;<BR>-&nbsp;&nbsp;&nbsp; return 
  modp-&gt;wDeviceID;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_drvClose [internal]<BR>- */<BR>-static DWORD MCICDA_drvClose(DWORD 
  dwDevID)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO*&nbsp; wmcda = 
  (WINE_MCICDAUDIO*)mciGetDriverData(dwDevID);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (wmcda) {<BR>- HeapFree(GetProcessHeap(), 0, wmcda);<BR>- 
  mciSetDriverData(dwDevID, 0);<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; 
  return (dwDevID == 0xFFFFFFFF) ? 1 : 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_GetOpenDrv [internal]<BR>- */<BR>-static WINE_MCICDAUDIO*&nbsp; 
  MCICDA_GetOpenDrv(UINT wDevID)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* 
  wmcda = 
  (WINE_MCICDAUDIO*)mciGetDriverData(wDevID);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (wmcda == NULL || wmcda-&gt;nUseCount == 0) {<BR>- WARN("Invalid wDevID=%u\n", 
  wDevID);<BR>- return 0;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; return 
  wmcda;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_GetStatus [internal]<BR>- */<BR>-static DWORD&nbsp;&nbsp;&nbsp; 
  MCICDA_GetStatus(WINE_MCICDAUDIO* wmcda)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  CDROM_SUB_Q_DATA_FORMAT&nbsp;&nbsp;&nbsp;&nbsp; fmt;<BR>-&nbsp;&nbsp;&nbsp; 
  SUB_Q_CHANNEL_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  data;<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  mode = MCI_MODE_NOT_READY;<BR>-<BR>-&nbsp;&nbsp;&nbsp; fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>-&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GetLastError() == 
  STATUS_NO_MEDIA_IN_DEVICE) mode = MCI_MODE_OPEN;<BR>-&nbsp;&nbsp;&nbsp; } else 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch 
  (data.CurrentPosition.Header.AudioStatus)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_IN_PROGRESS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  mode = MCI_MODE_PLAY;&nbsp;&nbsp; 
  break;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_PAUSED:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  mode = MCI_MODE_PAUSE;&nbsp; 
  break;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_NO_STATUS:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_PLAY_COMPLETE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode = 
  MCI_MODE_STOP;&nbsp;&nbsp; 
  break;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_PLAY_ERROR:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  AUDIO_STATUS_NOT_SUPPORTED:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  default:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  mode;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_GetError [internal]<BR>- */<BR>-static int 
  MCICDA_GetError(WINE_MCICDAUDIO* wmcda)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; switch 
  (GetLastError())<BR>-&nbsp;&nbsp;&nbsp; {<BR>-&nbsp;&nbsp;&nbsp; case 
  STATUS_NO_MEDIA_IN_DEVICE:&nbsp;&nbsp;&nbsp;&nbsp; return 
  MCIERR_DEVICE_NOT_READY;<BR>-&nbsp;&nbsp;&nbsp; case 
  STATUS_IO_DEVICE_ERROR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  MCIERR_HARDWARE;<BR>-&nbsp;&nbsp;&nbsp; default:<BR>- FIXME("Unknown mode 
  %lx\n", GetLastError());<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; 
  return 
  MCIERR_DRIVER_INTERNAL;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_CalcFrame [internal]<BR>- */<BR>-static DWORD 
  MCICDA_CalcFrame(WINE_MCICDAUDIO* wmcda, DWORD 
  dwTime)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; DWORD dwFrame = 0;<BR>-&nbsp;&nbsp;&nbsp; 
  UINT wTrack;<BR>-&nbsp;&nbsp;&nbsp; CDROM_TOC&nbsp;&nbsp; 
  toc;<BR>-&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-&nbsp;&nbsp;&nbsp; BYTE*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  addr;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%p, %08lX, %lu);\n", wmcda, 
  wmcda-&gt;dwTimeFormat, dwTime);<BR>-<BR>-&nbsp;&nbsp;&nbsp; switch 
  (wmcda-&gt;dwTimeFormat) {<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_FORMAT_MILLISECONDS:<BR>- dwFrame = ((dwTime - 1) * CDFRAMES_PERSEC + 500) 
  / 1000;<BR>- TRACE("MILLISECONDS %lu\n", dwFrame);<BR>- 
  break;<BR>-&nbsp;&nbsp;&nbsp; case MCI_FORMAT_MSF:<BR>- TRACE("MSF 
  %02u:%02u:%02u\n",<BR>- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCI_MSF_MINUTE(dwTime), 
  MCI_MSF_SECOND(dwTime), MCI_MSF_FRAME(dwTime));<BR>- dwFrame += 
  CDFRAMES_PERMIN * MCI_MSF_MINUTE(dwTime);<BR>- dwFrame += CDFRAMES_PERSEC * 
  MCI_MSF_SECOND(dwTime);<BR>- dwFrame += MCI_MSF_FRAME(dwTime);<BR>- 
  break;<BR>-&nbsp;&nbsp;&nbsp; case MCI_FORMAT_TMSF:<BR>-&nbsp;&nbsp;&nbsp; 
  default: /* unknown format ! force TMSF ! ... */<BR>- wTrack = 
  MCI_TMSF_TRACK(dwTime);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, 
  NULL))<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 0;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (wTrack &lt; 
  toc.FirstTrack || wTrack &gt; 
  toc.LastTrack)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 0;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("MSF 
  %02u-%02u:%02u:%02u\n",<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  MCI_TMSF_TRACK(dwTime), 
  MCI_TMSF_MINUTE(dwTime),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  MCI_TMSF_SECOND(dwTime), 
  MCI_TMSF_FRAME(dwTime));<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addr = 
  toc.TrackData[wTrack - 
  toc.FirstTrack].Address;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  TRACE("TMSF 
  trackpos[%u]=%d:%d:%d\n",<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  wTrack, addr[1], addr[2], 
  addr[3]);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwFrame = 
  CDFRAMES_PERMIN * (addr[1] + MCI_TMSF_MINUTE(dwTime)) 
  +<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  CDFRAMES_PERSEC * (addr[2] + MCI_TMSF_SECOND(dwTime)) 
  +<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  addr[3] + MCI_TMSF_FRAME(dwTime);<BR>- break;<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  dwFrame;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_CalcTime [internal]<BR>- */<BR>-static DWORD 
  MCICDA_CalcTime(WINE_MCICDAUDIO* wmcda, DWORD tf, DWORD dwFrame, LPDWORD 
  lpRet)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; DWORD dwTime = 0;<BR>-&nbsp;&nbsp;&nbsp; 
  UINT wTrack;<BR>-&nbsp;&nbsp;&nbsp; UINT wMinutes;<BR>-&nbsp;&nbsp;&nbsp; UINT 
  wSeconds;<BR>-&nbsp;&nbsp;&nbsp; UINT wFrames;<BR>-&nbsp;&nbsp;&nbsp; 
  CDROM_TOC&nbsp;&nbsp; toc;<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br;<BR>-<BR>-&nbsp;&nbsp;&nbsp; 
  TRACE("(%p, %08lX, %lu);\n", wmcda, tf, dwFrame);<BR>-<BR>-&nbsp;&nbsp;&nbsp; 
  switch (tf) {<BR>-&nbsp;&nbsp;&nbsp; case MCI_FORMAT_MILLISECONDS:<BR>- dwTime 
  = (dwFrame * 1000) / CDFRAMES_PERSEC + 1;<BR>- TRACE("MILLISECONDS %lu\n", 
  dwTime);<BR>- *lpRet = 0;<BR>- break;<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_FORMAT_MSF:<BR>- wMinutes = dwFrame / CDFRAMES_PERMIN;<BR>- wSeconds = 
  (dwFrame - CDFRAMES_PERMIN * wMinutes) / CDFRAMES_PERSEC;<BR>- wFrames = 
  dwFrame - CDFRAMES_PERMIN * wMinutes - CDFRAMES_PERSEC * wSeconds;<BR>- dwTime 
  = MCI_MAKE_MSF(wMinutes, wSeconds, wFrames);<BR>- TRACE("MSF %02u:%02u:%02u 
  -&gt; dwTime=%lu\n",<BR>- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wMinutes, wSeconds, 
  wFrames, dwTime);<BR>- *lpRet = MCI_COLONIZED3_RETURN;<BR>- 
  break;<BR>-&nbsp;&nbsp;&nbsp; case MCI_FORMAT_TMSF:<BR>-&nbsp;&nbsp;&nbsp; 
  default: /* unknown format ! force TMSF ! ... 
  */<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, 
  NULL))<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 0;<BR>- if (dwFrame &lt; FRAME_OF_TOC(toc, toc.FirstTrack) 
  ||<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  dwFrame &gt; FRAME_OF_TOC(toc, toc.LastTrack + 1)) {<BR>- &nbsp;&nbsp;&nbsp; 
  ERR("Out of range value %lu [%u,%u]\n",<BR>- dwFrame, FRAME_OF_TOC(toc, 
  toc.FirstTrack),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  FRAME_OF_TOC(toc, toc.LastTrack + 1));<BR>- &nbsp;&nbsp;&nbsp; *lpRet = 
  0;<BR>- &nbsp;&nbsp;&nbsp; return 0;<BR>- }<BR>- for (wTrack = toc.FirstTrack; 
  wTrack &lt;= toc.LastTrack; wTrack++) {<BR>- &nbsp;&nbsp;&nbsp; if 
  (FRAME_OF_TOC(toc, wTrack) &gt; dwFrame)<BR>- break;<BR>- 
  }<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wTrack--;<BR>- dwFrame -= 
  FRAME_OF_TOC(toc, wTrack);<BR>- wMinutes = dwFrame / CDFRAMES_PERMIN;<BR>- 
  wSeconds = (dwFrame - CDFRAMES_PERMIN * wMinutes) / CDFRAMES_PERSEC;<BR>- 
  wFrames = dwFrame - CDFRAMES_PERMIN * wMinutes - CDFRAMES_PERSEC * 
  wSeconds;<BR>- dwTime = MCI_MAKE_TMSF(wTrack, wMinutes, wSeconds, 
  wFrames);<BR>- TRACE("%02u-%02u:%02u:%02u\n", wTrack, wMinutes, wSeconds, 
  wFrames);<BR>- *lpRet = MCI_COLONIZED4_RETURN;<BR>- 
  break;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; return 
  dwTime;<BR>-}<BR>-<BR>-static DWORD MCICDA_Seek(UINT wDevID, DWORD dwFlags, 
  LPMCI_SEEK_PARMS lpParms);<BR>-static DWORD MCICDA_Stop(UINT wDevID, DWORD 
  dwFlags, LPMCI_GENERIC_PARMS 
  lpParms);<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Open [internal]<BR>- */<BR>-static DWORD MCICDA_Open(UINT wDevID, 
  DWORD dwFlags, LPMCI_OPEN_PARMSW lpOpenParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD dwDeviceID;<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ret = MCIERR_HARDWARE;<BR>-&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* wmcda = 
  (WINE_MCICDAUDIO*)mciGetDriverData(wDevID);<BR>-&nbsp;&nbsp;&nbsp; 
  WCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  root[7], drive = 0;<BR>-&nbsp;&nbsp;&nbsp; 
  int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  count;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, 
  dwFlags, lpOpenParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (lpOpenParms == NULL) 
  return MCIERR_NULL_PARAMETER_BLOCK;<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) 
  return MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; dwDeviceID = 
  lpOpenParms-&gt;wDeviceID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda-&gt;nUseCount 
  &gt; 0) {<BR>- /* The driver is already open on this channel */<BR>- /* If the 
  driver was opened shareable before and this open specifies */<BR>- /* 
  shareable then increment the use count */<BR>- if (wmcda-&gt;fShareable 
  &amp;&amp; (dwFlags &amp; MCI_OPEN_SHAREABLE))<BR>- &nbsp;&nbsp;&nbsp; 
  ++wmcda-&gt;nUseCount;<BR>- else<BR>- &nbsp;&nbsp;&nbsp; return 
  MCIERR_MUST_USE_SHAREABLE;<BR>-&nbsp;&nbsp;&nbsp; } else {<BR>- 
  wmcda-&gt;nUseCount = 1;<BR>- wmcda-&gt;fShareable = dwFlags &amp; 
  MCI_OPEN_SHAREABLE;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_OPEN_ELEMENT) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_OPEN_ELEMENT_ID) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("MCI_OPEN_ELEMENT_ID %8lx ! Abort\n", 
  (DWORD)lpOpenParms-&gt;lpstrElementName);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCIERR_NO_ELEMENT_ALLOWED;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("MCI_OPEN_ELEMENT 
  element name: %s\n", 
  debugstr_w(lpOpenParms-&gt;lpstrElementName));<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!isalpha(lpOpenParms-&gt;lpstrElementName[0]) || 
  lpOpenParms-&gt;lpstrElementName[1] != ':' 
  ||<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (lpOpenParms-&gt;lpstrElementName[2] &amp;&amp; 
  lpOpenParms-&gt;lpstrElementName[2] != 
  '\\'))<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("MCI_OPEN_ELEMENT unsupported format: %s\n", 
  <BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  debugstr_w(lpOpenParms-&gt;lpstrElementName));<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ret = 
  MCIERR_NO_ELEMENT_ALLOWED;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  goto the_error;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; drive = 
  toupper(lpOpenParms-&gt;lpstrElementName[0]);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  root[0] = drive; root[1] = ':'; root[2] = '\\'; root[3] = 
  '\0';<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GetDriveTypeW(root) 
  != DRIVE_CDROM)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = 
  MCIERR_INVALID_DEVICE_NAME;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  goto the_error;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; else<BR>-&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* drive letter isn't 
  passed... get the dwDeviceID'th cdrom in the system 
  */<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root[0] = 'A'; root[1] = 
  ':'; root[2] = '\\'; root[3] = 
  '\0';<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (count = 0; root[0] 
  &lt;= 'Z'; root[0]++)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (GetDriveTypeW(root) == DRIVE_CDROM &amp;&amp; ++count &gt;= 
  dwDeviceID)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  drive = 
  root[0];<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!drive)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = 
  MCIERR_INVALID_DEVICE_ID;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  goto the_error;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; }<BR>-<BR>-&nbsp;&nbsp;&nbsp; 
  wmcda-&gt;wNotifyDeviceID = dwDeviceID;<BR>-&nbsp;&nbsp;&nbsp; 
  wmcda-&gt;dwTimeFormat = MCI_FORMAT_MSF;<BR>-<BR>-&nbsp;&nbsp;&nbsp; /* now, 
  open the handle */<BR>-&nbsp;&nbsp;&nbsp; root[0] = root[1] = '\\'; root[2] = 
  '.'; root[3] = '\\'; root[4] = drive; root[5] = ':'; root[6] = 
  '\0';<BR>-&nbsp;&nbsp;&nbsp; wmcda-&gt;handle = CreateFileW(root, 
  GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 
  0);<BR>-&nbsp;&nbsp;&nbsp; if (wmcda-&gt;handle != 
  INVALID_HANDLE_VALUE)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  0;<BR>-<BR>- the_error:<BR>-&nbsp;&nbsp;&nbsp; 
  --wmcda-&gt;nUseCount;<BR>-&nbsp;&nbsp;&nbsp; return 
  ret;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Close [internal]<BR>- */<BR>-static DWORD MCICDA_Close(UINT wDevID, 
  DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, 
  %p);\n", wDevID, dwParam, lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == 
  NULL) return MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (--wmcda-&gt;nUseCount == 0) {<BR>- 
  CloseHandle(wmcda-&gt;handle);<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; 
  return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_GetDevCaps [internal]<BR>- */<BR>-static DWORD MCICDA_GetDevCaps(UINT 
  wDevID, DWORD dwFlags,<BR>- &nbsp;&nbsp; LPMCI_GETDEVCAPS_PARMS 
  lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; DWORD ret = 
  0;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (lpParms == NULL) return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_GETDEVCAPS_ITEM) {<BR>- TRACE("MCI_GETDEVCAPS_ITEM dwItem=%08lX;\n", 
  lpParms-&gt;dwItem);<BR>-<BR>- switch (lpParms-&gt;dwItem) {<BR>- case 
  MCI_GETDEVCAPS_CAN_RECORD:<BR>- &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>- &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_GETDEVCAPS_HAS_AUDIO:<BR>- &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>- &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_GETDEVCAPS_HAS_VIDEO:<BR>- &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>- &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_GETDEVCAPS_DEVICE_TYPE:<BR>- &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(MCI_DEVTYPE_CD_AUDIO, MCI_DEVTYPE_CD_AUDIO);<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case MCI_GETDEVCAPS_USES_FILES:<BR>- &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case MCI_GETDEVCAPS_COMPOUND_DEVICE:<BR>- &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case MCI_GETDEVCAPS_CAN_EJECT:<BR>- &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case MCI_GETDEVCAPS_CAN_PLAY:<BR>- &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case MCI_GETDEVCAPS_CAN_SAVE:<BR>- &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- default:<BR>- &nbsp;&nbsp;&nbsp; ERR("Unsupported %lx devCaps 
  item\n", lpParms-&gt;dwItem);<BR>- &nbsp;&nbsp;&nbsp; return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>- }<BR>-&nbsp;&nbsp;&nbsp; } else {<BR>- 
  TRACE("No GetDevCaps-Item !\n");<BR>- return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; 
  TRACE("lpParms-&gt;dwReturn=%08lX;\n", 
  lpParms-&gt;dwReturn);<BR>-&nbsp;&nbsp;&nbsp; return 
  ret;<BR>-}<BR>-<BR>-static DWORD CDROM_Audio_GetSerial(CDROM_TOC* 
  toc)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; unsigned long serial = 
  0;<BR>-&nbsp;&nbsp;&nbsp; int i;<BR>-&nbsp;&nbsp;&nbsp; WORD 
  wMagic;<BR>-&nbsp;&nbsp;&nbsp; DWORD dwStart, 
  dwEnd;<BR>-<BR>-&nbsp;&nbsp;&nbsp; /*<BR>-&nbsp;&nbsp;&nbsp;&nbsp; * wMagic 
  collects the wFrames from track 1<BR>-&nbsp;&nbsp;&nbsp;&nbsp; * dwStart, 
  dwEnd collect the beginning and end of the disc respectively, 
  in<BR>-&nbsp;&nbsp;&nbsp;&nbsp; * frames.<BR>-&nbsp;&nbsp;&nbsp;&nbsp; * There 
  it is collected for correcting the serial when there are less 
  than<BR>-&nbsp;&nbsp;&nbsp;&nbsp; * 3 tracks.<BR>-&nbsp;&nbsp;&nbsp;&nbsp; 
  */<BR>-&nbsp;&nbsp;&nbsp; wMagic = 
  toc-&gt;TrackData[0].Address[3];<BR>-&nbsp;&nbsp;&nbsp; dwStart = 
  FRAME_OF_TOC(*toc, toc-&gt;FirstTrack);<BR>-<BR>-&nbsp;&nbsp;&nbsp; for (i = 
  0; i &lt;= toc-&gt;LastTrack - toc-&gt;FirstTrack; i++) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serial += 
  (toc-&gt;TrackData[i].Address[1] &lt;&lt; 16) 
  |<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (toc-&gt;TrackData[i].Address[2] &lt;&lt; 8) | 
  toc-&gt;TrackData[i].Address[3];<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; dwEnd = FRAME_OF_TOC(*toc, toc-&gt;LastTrack + 
  1);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (toc-&gt;LastTrack - toc-&gt;FirstTrack + 1 
  &lt; 3)<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serial += wMagic + 
  (dwEnd - dwStart);<BR>-<BR>-&nbsp;&nbsp;&nbsp; return 
  serial;<BR>-}<BR>-<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Info [internal]<BR>- */<BR>-static DWORD MCICDA_Info(UINT wDevID, 
  DWORD dwFlags, LPMCI_INFO_PARMSW lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; LPCWSTR 
  str = NULL;<BR>-&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; DWORD ret = 
  0;<BR>-&nbsp;&nbsp;&nbsp; WCHAR buffer[16];<BR>-<BR>-&nbsp;&nbsp;&nbsp; 
  TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (lpParms == NULL || 
  lpParms-&gt;lpstrReturn == NULL)<BR>- return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("buf=%p, 
  len=%lu\n", lpParms-&gt;lpstrReturn, 
  lpParms-&gt;dwRetSize);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_INFO_PRODUCT) {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static 
  const WCHAR wszAudioCd[] = {'W','i','n','e','\'','s',' ','a','u','d','i','o',' 
  ','C','D',0};<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = 
  wszAudioCd;<BR>-&nbsp;&nbsp;&nbsp; } else if (dwFlags &amp; 
  MCI_INFO_MEDIA_UPC) {<BR>- ret = MCIERR_NO_IDENTITY;<BR>-&nbsp;&nbsp;&nbsp; } 
  else if (dwFlags &amp; MCI_INFO_MEDIA_IDENTITY) {<BR>- DWORD 
  &nbsp;&nbsp;&nbsp; res = 0;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  CDROM_TOC&nbsp;&nbsp; toc;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; br;<BR>- static const WCHAR wszLu[] 
  = {'%','l','u',0};<BR>-<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) {<BR>- &nbsp;&nbsp;&nbsp; return 
  MCICDA_GetError(wmcda);<BR>- }<BR>-<BR>- res = 
  CDROM_Audio_GetSerial(&amp;toc);<BR>- sprintfW(buffer, wszLu, res);<BR>- str = 
  buffer;<BR>-&nbsp;&nbsp;&nbsp; } else {<BR>- WARN("Don't know this info 
  command (%lu)\n", dwFlags);<BR>- ret = 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; 
  if (str) {<BR>- if (lpParms-&gt;dwRetSize &lt;= strlenW(str)) {<BR>- 
  &nbsp;&nbsp;&nbsp; lstrcpynW(lpParms-&gt;lpstrReturn, str, 
  lpParms-&gt;dwRetSize - 1);<BR>- &nbsp;&nbsp;&nbsp; ret = 
  MCIERR_PARAM_OVERFLOW;<BR>- } else {<BR>- &nbsp;&nbsp;&nbsp; 
  strcpyW(lpParms-&gt;lpstrReturn, str);<BR>- }<BR>-&nbsp;&nbsp;&nbsp; } else 
  {<BR>- *lpParms-&gt;lpstrReturn = 0;<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; TRACE("=&gt; %s (%ld)\n", 
  debugstr_w(lpParms-&gt;lpstrReturn), ret);<BR>-&nbsp;&nbsp;&nbsp; return 
  ret;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Status [internal]<BR>- */<BR>-static DWORD MCICDA_Status(UINT wDevID, 
  DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  idx;<BR>-&nbsp;&nbsp;&nbsp; DWORD 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ret = 0;<BR>-&nbsp;&nbsp;&nbsp; 
  CDROM_SUB_Q_DATA_FORMAT&nbsp;&nbsp;&nbsp;&nbsp; fmt;<BR>-&nbsp;&nbsp;&nbsp; 
  SUB_Q_CHANNEL_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  data;<BR>-&nbsp;&nbsp;&nbsp; 
  CDROM_TOC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  toc;<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (lpParms == NULL) return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_NOTIFY) {<BR>- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", 
  lpParms-&gt;dwCallback);<BR>- 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>- 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_STATUS_ITEM) {<BR>- 
  TRACE("dwItem = %lx\n", lpParms-&gt;dwItem);<BR>- switch (lpParms-&gt;dwItem) 
  {<BR>- case 
  MCI_STATUS_CURRENT_TRACK:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, 
  NULL))<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>- return MCICDA_GetError(wmcda);<BR>- &nbsp;&nbsp;&nbsp; }<BR>- 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  data.CurrentPosition.TrackNumber;<BR>- &nbsp;&nbsp;&nbsp; 
  TRACE("CURRENT_TRACK=%lu!\n", lpParms-&gt;dwReturn);<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case 
  MCI_STATUS_LENGTH:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>- &nbsp;&nbsp;&nbsp; }<BR>- 
  &nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_TRACK) {<BR>- TRACE("MCI_TRACK #%lu 
  LENGTH=??? !\n", lpParms-&gt;dwTrack);<BR>- if (lpParms-&gt;dwTrack &lt; 
  toc.FirstTrack || lpParms-&gt;dwTrack &gt; toc.LastTrack)<BR>- 
  &nbsp;&nbsp;&nbsp; return 
  MCIERR_OUTOFRANGE;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  idx = lpParms-&gt;dwTrack - toc.FirstTrack;<BR>- lpParms-&gt;dwReturn = 
  FRAME_OF_TOC(toc, lpParms-&gt;dwTrack + 1) 
  -<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  FRAME_OF_TOC(toc, lpParms-&gt;dwTrack);<BR>- /* Windows returns one frame less 
  than the total track length for the<BR>- &nbsp;&nbsp; last track on the 
  CD.&nbsp; See CDDB HOWTO.&nbsp; Verified on Win95OSR2. */<BR>- if 
  (lpParms-&gt;dwTrack == toc.LastTrack)<BR>- &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn--;<BR>- &nbsp;&nbsp;&nbsp; } else {<BR>- /* Sum of the 
  lengths of all of the tracks.&nbsp; Inherits the<BR>- &nbsp;&nbsp; 'off by one 
  frame' behavior from the length of the last track.<BR>- &nbsp;&nbsp; See above 
  comment. */<BR>- lpParms-&gt;dwReturn = FRAME_OF_TOC(toc, toc.LastTrack + 1) 
  -<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  FRAME_OF_TOC(toc, toc.FirstTrack) - 1;<BR>- &nbsp;&nbsp;&nbsp; }<BR>- 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = MCICDA_CalcTime(wmcda,<BR>- 
  (wmcda-&gt;dwTimeFormat == MCI_FORMAT_TMSF)<BR>- &nbsp;&nbsp;&nbsp; ? 
  MCI_FORMAT_MSF : wmcda-&gt;dwTimeFormat,<BR>- lpParms-&gt;dwReturn,<BR>- 
  &amp;ret);<BR>- &nbsp;&nbsp;&nbsp; TRACE("LENGTH=%lu !\n", 
  lpParms-&gt;dwReturn);<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_STATUS_MODE:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MCICDA_GetStatus(wmcda);<BR>- &nbsp;&nbsp;&nbsp; 
  TRACE("MCI_STATUS_MODE=%08lX !\n", lpParms-&gt;dwReturn);<BR>- 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(lpParms-&gt;dwReturn, lpParms-&gt;dwReturn);<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case MCI_STATUS_MEDIA_PRESENT:<BR>- &nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = (MCICDA_GetStatus(wmcda) == MCI_MODE_OPEN) ?<BR>- 
  MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE);<BR>- 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_MEDIA_PRESENT =%c!\n", 
  LOWORD(lpParms-&gt;dwReturn) ? 'Y' : 'N');<BR>- &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_STATUS_NUMBER_OF_TRACKS:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>- &nbsp;&nbsp;&nbsp; }<BR>- 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = toc.LastTrack - toc.FirstTrack + 
  1;<BR>- &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n", 
  lpParms-&gt;dwReturn);<BR>- &nbsp;&nbsp;&nbsp; if (lpParms-&gt;dwReturn == 
  (WORD)-1)<BR>- return MCICDA_GetError(wmcda);<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case MCI_STATUS_POSITION:<BR>- &nbsp;&nbsp;&nbsp; if (dwFlags 
  &amp; MCI_STATUS_START) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>- lpParms-&gt;dwReturn = FRAME_OF_TOC(toc, toc.FirstTrack);<BR>- 
  TRACE("get MCI_STATUS_START !\n");<BR>- &nbsp;&nbsp;&nbsp; } else if (dwFlags 
  &amp; MCI_TRACK) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>- if (lpParms-&gt;dwTrack &lt; toc.FirstTrack || lpParms-&gt;dwTrack &gt; 
  toc.LastTrack)<BR>- &nbsp;&nbsp;&nbsp; return MCIERR_OUTOFRANGE;<BR>- 
  lpParms-&gt;dwReturn = FRAME_OF_TOC(toc, lpParms-&gt;dwTrack);<BR>- TRACE("get 
  MCI_TRACK #%lu !\n", 
  lpParms-&gt;dwTrack);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  } else 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = 
  FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>- &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = MCICDA_CalcTime(wmcda, 
  wmcda-&gt;dwTimeFormat, lpParms-&gt;dwReturn, &amp;ret);<BR>- 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_POSITION=%08lX !\n", 
  lpParms-&gt;dwReturn);<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_STATUS_READY:<BR>- &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_READY 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  switch 
  (MCICDA_GetStatus(wmcda))<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 
  MCI_MODE_NOT_READY:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  case 
  MCI_MODE_OPEN:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(FALSE, 
  MCI_FALSE);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  default:<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  lpParms-&gt;dwReturn = MAKEMCIRESOURCE(TRUE, 
  MCI_TRUE);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>- &nbsp;&nbsp;&nbsp; TRACE("MCI_STATUS_READY=%u!\n", 
  LOWORD(lpParms-&gt;dwReturn));<BR>- &nbsp;&nbsp;&nbsp; ret = 
  MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_STATUS_TIME_FORMAT:<BR>- &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = 
  MAKEMCIRESOURCE(wmcda-&gt;dwTimeFormat, MCI_FORMAT_RETURN_BASE + 
  wmcda-&gt;dwTimeFormat);<BR>- &nbsp;&nbsp;&nbsp; 
  TRACE("MCI_STATUS_TIME_FORMAT=%08x!\n", LOWORD(lpParms-&gt;dwReturn));<BR>- 
  &nbsp;&nbsp;&nbsp; ret = MCI_RESOURCE_RETURNED;<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- case 4001: /* FIXME: for bogus FullCD */<BR>- case 
  MCI_CDA_STATUS_TYPE_TRACK:<BR>- &nbsp;&nbsp;&nbsp; if (!(dwFlags &amp; 
  MCI_TRACK))<BR>- ret = MCIERR_MISSING_PARAMETER;<BR>- &nbsp;&nbsp;&nbsp; else 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 
  MCICDA_GetError(wmcda);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>- if (lpParms-&gt;dwTrack &lt; toc.FirstTrack || lpParms-&gt;dwTrack &gt; 
  toc.LastTrack)<BR>- &nbsp;&nbsp;&nbsp; ret = MCIERR_OUTOFRANGE;<BR>- else<BR>- 
  &nbsp;&nbsp;&nbsp; lpParms-&gt;dwReturn = (toc.TrackData[lpParms-&gt;dwTrack - 
  toc.FirstTrack].Control &amp; 0x04) 
  ?<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  MCI_CDA_TRACK_OTHER : MCI_CDA_TRACK_AUDIO;<BR>- &nbsp;&nbsp;&nbsp; }<BR>- 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_CDA_STATUS_TYPE_TRACK[%ld]=%ld\n", 
  lpParms-&gt;dwTrack, lpParms-&gt;dwReturn);<BR>- &nbsp;&nbsp;&nbsp; 
  break;<BR>- default:<BR>- &nbsp;&nbsp;&nbsp; FIXME("unknown command %08lX 
  !\n", lpParms-&gt;dwItem);<BR>- &nbsp;&nbsp;&nbsp; return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>- }<BR>-&nbsp;&nbsp;&nbsp; } else {<BR>- 
  WARN("not MCI_STATUS_ITEM !\n");<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  ret;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_SkipDataTracks [internal]<BR>- */<BR>-static DWORD 
  MCICDA_SkipDataTracks(WINE_MCICDAUDIO* wmcda,DWORD *frame)<BR>-{<BR>-&nbsp; 
  int i;<BR>-&nbsp; DWORD br;<BR>-&nbsp; CDROM_TOC toc;<BR>-&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) {<BR>-&nbsp;&nbsp;&nbsp; WARN("error 
  reading TOC !\n");<BR>-&nbsp;&nbsp;&nbsp; return 
  MCICDA_GetError(wmcda);<BR>-&nbsp; }<BR>-&nbsp; /* Locate first track whose 
  starting frame is bigger than frame */<BR>-&nbsp; 
  for(i=toc.FirstTrack;i&lt;=toc.LastTrack+1;i++) <BR>-&nbsp;&nbsp;&nbsp; if ( 
  FRAME_OF_TOC(toc, i) &gt; *frame ) break;<BR>-&nbsp; if (i &lt;= 
  toc.FirstTrack &amp;&amp; i&gt;toc.LastTrack+1) {<BR>-&nbsp;&nbsp;&nbsp; i = 
  0; /* requested address is out of range: go back to start 
  */<BR>-&nbsp;&nbsp;&nbsp; *frame = 
  FRAME_OF_TOC(toc,toc.FirstTrack);<BR>-&nbsp; }<BR>-&nbsp; 
  else<BR>-&nbsp;&nbsp;&nbsp; i--;<BR>-&nbsp; /* i points to last track whose 
  start address is not greater than frame.<BR>-&nbsp;&nbsp; * Now skip non-audio 
  tracks */<BR>-&nbsp; for(;i&lt;=toc.LastTrack+1;i++)<BR>-&nbsp;&nbsp;&nbsp; if 
  ( ! (toc.TrackData[i-toc.FirstTrack].Control &amp; 4) 
  )<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>-&nbsp; /* The frame will be an 
  address in the next audio track or<BR>-&nbsp;&nbsp; * address of lead-out. 
  */<BR>-&nbsp; if ( FRAME_OF_TOC(toc, i) &gt; *frame )<BR>-&nbsp;&nbsp;&nbsp; 
  *frame = FRAME_OF_TOC(toc, i);<BR>-&nbsp; return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Play [internal]<BR>- */<BR>-static DWORD MCICDA_Play(UINT wDevID, 
  DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; DWORD 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = 0, start, 
  end;<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-&nbsp;&nbsp;&nbsp; 
  CDROM_PLAY_AUDIO_MSF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  play;<BR>-&nbsp;&nbsp;&nbsp; CDROM_SUB_Q_DATA_FORMAT&nbsp;&nbsp;&nbsp;&nbsp; 
  fmt;<BR>-&nbsp;&nbsp;&nbsp; 
  SUB_Q_CHANNEL_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  data;<BR>-&nbsp;&nbsp;&nbsp; CDROM_TOC toc;<BR>-<BR>-&nbsp;&nbsp;&nbsp; 
  TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (lpParms == NULL)<BR>- return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == 
  NULL)<BR>- return MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_FROM) {<BR>- start = MCICDA_CalcFrame(wmcda, 
  lpParms-&gt;dwFrom);<BR>- if ( (ret=MCICDA_SkipDataTracks(wmcda, &amp;start)) 
  )<BR>- &nbsp; return ret;<BR>- TRACE("MCI_FROM=%08lX -&gt; %lu \n", 
  lpParms-&gt;dwFrom, start);<BR>-&nbsp;&nbsp;&nbsp; } else 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmt.Format = 
  IOCTL_CDROM_CURRENT_POSITION;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_Q_CHANNEL, &amp;fmt, 
  sizeof(fmt),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;data, sizeof(data), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start = 
  FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress);<BR>- if ( 
  (ret=MCICDA_SkipDataTracks(wmcda, &amp;start)) )<BR>- &nbsp; return 
  ret;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_TO) 
  {<BR>- end = MCICDA_CalcFrame(wmcda, lpParms-&gt;dwTo);<BR>- 
  TRACE("MCI_TO=%08lX -&gt; %lu \n", lpParms-&gt;dwTo, 
  end);<BR>-&nbsp;&nbsp;&nbsp; } else 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  WARN("error reading TOC 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return MCICDA_GetError(wmcda);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  }<BR>- end = FRAME_OF_TOC(toc, toc.LastTrack + 1) - 1;<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; TRACE("Playing from %lu to %lu\n", start, 
  end);<BR>-&nbsp;&nbsp;&nbsp; play.StartingM = start / 
  CDFRAMES_PERMIN;<BR>-&nbsp;&nbsp;&nbsp; play.StartingS = (start / 
  CDFRAMES_PERSEC) % 60;<BR>-&nbsp;&nbsp;&nbsp; play.StartingF = start % 
  CDFRAMES_PERSEC;<BR>-&nbsp;&nbsp;&nbsp; play.EndingM&nbsp;&nbsp; = end / 
  CDFRAMES_PERMIN;<BR>-&nbsp;&nbsp;&nbsp; play.EndingS&nbsp;&nbsp; = (end / 
  CDFRAMES_PERSEC) % 60;<BR>-&nbsp;&nbsp;&nbsp; play.EndingF&nbsp;&nbsp; = end % 
  CDFRAMES_PERSEC;<BR>-&nbsp;&nbsp;&nbsp; if (!DeviceIoControl(wmcda-&gt;handle, 
  IOCTL_CDROM_PLAY_AUDIO_MSF, &amp;play, 
  sizeof(play),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  NULL, 0, &amp;br, NULL)) {<BR>- ret = MCIERR_HARDWARE;<BR>-&nbsp;&nbsp;&nbsp; 
  } else if (dwFlags &amp; MCI_NOTIFY) {<BR>- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX 
  !\n", lpParms-&gt;dwCallback);<BR>- /*<BR>- &nbsp; 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>- &nbsp; 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>- 
  */<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; return 
  ret;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Stop [internal]<BR>- */<BR>-static DWORD MCICDA_Stop(UINT wDevID, 
  DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_STOP_AUDIO, NULL, 0, NULL, 0, 
  &amp;br, NULL))<BR>- return MCIERR_HARDWARE;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (lpParms &amp;&amp; (dwFlags &amp; MCI_NOTIFY)) {<BR>- 
  TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms-&gt;dwCallback);<BR>- 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>- 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Pause [internal]<BR>- */<BR>-static DWORD MCICDA_Pause(UINT wDevID, 
  DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_PAUSE_AUDIO, NULL, 0, NULL, 0, 
  &amp;br, NULL))<BR>- return MCIERR_HARDWARE;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (lpParms &amp;&amp; (dwFlags &amp; MCI_NOTIFY)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("MCI_NOTIFY_SUCCESSFUL 
  %08lX !\n", lpParms-&gt;dwCallback);<BR>- 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>- 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Resume [internal]<BR>- */<BR>-static DWORD MCICDA_Resume(UINT wDevID, 
  DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_RESUME_AUDIO, NULL, 0, NULL, 
  0, &amp;br, NULL))<BR>- return MCIERR_HARDWARE;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (lpParms &amp;&amp; (dwFlags &amp; MCI_NOTIFY)) {<BR>- 
  TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms-&gt;dwCallback);<BR>- 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>- 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Seek [internal]<BR>- */<BR>-static DWORD MCICDA_Seek(UINT wDevID, 
  DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; DWORD 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at;<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; 
  CDROM_SEEK_AUDIO_MSF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  seek;<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br, ret;<BR>-&nbsp;&nbsp;&nbsp; CDROM_TOC toc;<BR>-<BR>-&nbsp;&nbsp;&nbsp; 
  TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, 
  lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>-&nbsp;&nbsp;&nbsp; if (lpParms == NULL) return 
  MCIERR_NULL_PARAMETER_BLOCK;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle, IOCTL_CDROM_READ_TOC, NULL, 
  0,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  &amp;toc, sizeof(toc), &amp;br, NULL)) 
  {<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WARN("error reading TOC 
  !\n");<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
  MCICDA_GetError(wmcda);<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; switch 
  (dwFlags &amp; ~(MCI_NOTIFY|MCI_WAIT)) {<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_SEEK_TO_START:<BR>- TRACE("Seeking to start\n");<BR>- at = 
  FRAME_OF_TOC(toc,toc.FirstTrack);<BR>- if ( (ret=MCICDA_SkipDataTracks(wmcda, 
  &amp;at)) )<BR>- &nbsp; return ret;<BR>- break;<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_SEEK_TO_END:<BR>- TRACE("Seeking to end\n");<BR>- at = FRAME_OF_TOC(toc, 
  toc.LastTrack + 1) - 1;<BR>- if ( (ret=MCICDA_SkipDataTracks(wmcda, &amp;at)) 
  )<BR>- &nbsp; return ret;<BR>- break;<BR>-&nbsp;&nbsp;&nbsp; case MCI_TO:<BR>- 
  TRACE("Seeking to %lu\n", 
  lpParms-&gt;dwTo);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at = 
  MCICDA_CalcFrame(wmcda, lpParms-&gt;dwTo);<BR>- if ( 
  (ret=MCICDA_SkipDataTracks(wmcda, &amp;at)) )<BR>- &nbsp; return ret;<BR>- 
  break;<BR>-&nbsp;&nbsp;&nbsp; default:<BR>- TRACE("Unknown seek action 
  %08lX\n",<BR>- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dwFlags &amp; 
  ~(MCI_NOTIFY|MCI_WAIT)));<BR>- return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; 
  seek.M = at / CDFRAMES_PERMIN;<BR>-&nbsp;&nbsp;&nbsp; seek.S = (at / 
  CDFRAMES_PERSEC) % 60;<BR>-&nbsp;&nbsp;&nbsp; seek.F = at % 
  CDFRAMES_PERSEC;<BR>-&nbsp;&nbsp;&nbsp; if (!DeviceIoControl(wmcda-&gt;handle, 
  IOCTL_CDROM_SEEK_AUDIO_MSF, &amp;seek, 
  sizeof(seek),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  NULL, 0, &amp;br, NULL))<BR>- return 
  MCIERR_HARDWARE;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_NOTIFY) 
  {<BR>- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms-&gt;dwCallback);<BR>- 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>- &nbsp; 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_SetDoor [internal]<BR>- */<BR>-static DWORD MCICDA_SetDoor(UINT 
  wDevID, BOOL open)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>-&nbsp;&nbsp;&nbsp; 
  DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  br;<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04x, %s) !\n", wDevID, (open) ? 
  "OPEN" : "CLOSE");<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == NULL) return 
  MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (!DeviceIoControl(wmcda-&gt;handle,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  (open) ? IOCTL_STORAGE_EJECT_MEDIA : 
  IOCTL_STORAGE_LOAD_MEDIA,<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  NULL, 0, NULL, 0, &amp;br, NULL))<BR>- return 
  MCIERR_HARDWARE;<BR>-<BR>-&nbsp;&nbsp;&nbsp; return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * MCICDA_Set [internal]<BR>- */<BR>-static DWORD MCICDA_Set(UINT wDevID, DWORD 
  dwFlags, LPMCI_SET_PARMS lpParms)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; 
  WINE_MCICDAUDIO* wmcda = 
  MCICDA_GetOpenDrv(wDevID);<BR>-<BR>-&nbsp;&nbsp;&nbsp; TRACE("(%04X, %08lX, 
  %p);\n", wDevID, dwFlags, lpParms);<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (wmcda == 
  NULL) return MCIERR_INVALID_DEVICE_ID;<BR>-<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags 
  &amp; MCI_SET_DOOR_OPEN) {<BR>- MCICDA_SetDoor(wDevID, 
  TRUE);<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_SET_DOOR_CLOSED) {<BR>- MCICDA_SetDoor(wDevID, 
  FALSE);<BR>-&nbsp;&nbsp;&nbsp; }<BR>-<BR>-&nbsp;&nbsp;&nbsp; /* only functions 
  which require valid lpParms below this line ! */<BR>-&nbsp;&nbsp;&nbsp; if 
  (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;<BR>-&nbsp;&nbsp;&nbsp; 
  /*<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRACE("dwTimeFormat=%08lX\n", 
  lpParms-&gt;dwTimeFormat);<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  TRACE("dwAudio=%08lX\n", lpParms-&gt;dwAudio);<BR>-&nbsp;&nbsp;&nbsp; 
  */<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; MCI_SET_TIME_FORMAT) {<BR>- switch 
  (lpParms-&gt;dwTimeFormat) {<BR>- case MCI_FORMAT_MILLISECONDS:<BR>- 
  &nbsp;&nbsp;&nbsp; TRACE("MCI_FORMAT_MILLISECONDS !\n");<BR>- 
  &nbsp;&nbsp;&nbsp; break;<BR>- case MCI_FORMAT_MSF:<BR>- &nbsp;&nbsp;&nbsp; 
  TRACE("MCI_FORMAT_MSF !\n");<BR>- &nbsp;&nbsp;&nbsp; break;<BR>- case 
  MCI_FORMAT_TMSF:<BR>- &nbsp;&nbsp;&nbsp; TRACE("MCI_FORMAT_TMSF !\n");<BR>- 
  &nbsp;&nbsp;&nbsp; break;<BR>- default:<BR>- &nbsp;&nbsp;&nbsp; WARN("bad time 
  format !\n");<BR>- &nbsp;&nbsp;&nbsp; return MCIERR_BAD_TIME_FORMAT;<BR>- 
  }<BR>- wmcda-&gt;dwTimeFormat = 
  lpParms-&gt;dwTimeFormat;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_SET_VIDEO) return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION;<BR>-&nbsp;&nbsp;&nbsp; if 
  (dwFlags &amp; MCI_SET_OFF) return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>-&nbsp;&nbsp;&nbsp; if (dwFlags &amp; 
  MCI_NOTIFY) {<BR>- TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",<BR>- 
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpParms-&gt;dwCallback);<BR>- 
  mciDriverNotify(HWND_32(LOWORD(lpParms-&gt;dwCallback)),<BR>- 
  wmcda-&gt;wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);<BR>-&nbsp;&nbsp;&nbsp; 
  }<BR>-&nbsp;&nbsp;&nbsp; return 
  0;<BR>-}<BR>-<BR>-/**************************************************************************<BR>- 
  * DriverProc (MCICDA.@)<BR>- */<BR>-LONG CALLBACK MCICDA_DriverProc(DWORD 
  dwDevID, HDRVR hDriv, DWORD wMsg,<BR>- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD 
  dwParam1, DWORD dwParam2)<BR>-{<BR>-&nbsp;&nbsp;&nbsp; switch(wMsg) 
  {<BR>-&nbsp;&nbsp;&nbsp; case DRV_LOAD: return 1;<BR>-&nbsp;&nbsp;&nbsp; case 
  DRV_FREE: return 1;<BR>-&nbsp;&nbsp;&nbsp; case DRV_OPEN: return 
  MCICDA_drvOpen((LPCWSTR)dwParam1, 
  (LPMCI_OPEN_DRIVER_PARMSW)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case DRV_CLOSE: 
  return MCICDA_drvClose(dwDevID);<BR>-&nbsp;&nbsp;&nbsp; case DRV_ENABLE: 
  return 1;<BR>-&nbsp;&nbsp;&nbsp; case DRV_DISABLE: return 
  1;<BR>-&nbsp;&nbsp;&nbsp; case DRV_QUERYCONFIGURE: return 
  1;<BR>-&nbsp;&nbsp;&nbsp; case DRV_CONFIGURE: MessageBoxA(0, "MCI audio CD 
  driver !", "Wine Driver", MB_OK); return 1;<BR>-&nbsp;&nbsp;&nbsp; case 
  DRV_INSTALL: return DRVCNF_RESTART;<BR>-&nbsp;&nbsp;&nbsp; case DRV_REMOVE: 
  return DRVCNF_RESTART;<BR>-&nbsp;&nbsp;&nbsp; }<BR>-<BR>-&nbsp;&nbsp;&nbsp; if 
  (dwDevID == 0xFFFFFFFF) return 
  MCIERR_UNSUPPORTED_FUNCTION;<BR>-<BR>-&nbsp;&nbsp;&nbsp; switch (wMsg) 
  {<BR>-&nbsp;&nbsp;&nbsp; case MCI_OPEN_DRIVER: return MCICDA_Open(dwDevID, 
  dwParam1, (LPMCI_OPEN_PARMSW)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_CLOSE_DRIVER: return MCICDA_Close(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_GETDEVCAPS: 
  return MCICDA_GetDevCaps(dwDevID, dwParam1, 
  (LPMCI_GETDEVCAPS_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_INFO: 
  return MCICDA_Info(dwDevID, dwParam1, 
  (LPMCI_INFO_PARMSW)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_STATUS: return 
  MCICDA_Status(dwDevID, dwParam1, 
  (LPMCI_STATUS_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_SET: return 
  MCICDA_Set(dwDevID, dwParam1, 
  (LPMCI_SET_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_PLAY: return 
  MCICDA_Play(dwDevID, dwParam1, 
  (LPMCI_PLAY_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_STOP: return 
  MCICDA_Stop(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_PAUSE: return 
  MCICDA_Pause(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_RESUME: return 
  MCICDA_Resume(dwDevID, dwParam1, 
  (LPMCI_GENERIC_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; case MCI_SEEK: return 
  MCICDA_Seek(dwDevID, dwParam1, 
  (LPMCI_SEEK_PARMS)dwParam2);<BR>-&nbsp;&nbsp;&nbsp; /* commands that should 
  report an error as they are not supported in<BR>-&nbsp;&nbsp;&nbsp;&nbsp; * 
  the native version */<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_SET_DOOR_CLOSED:<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_SET_DOOR_OPEN:<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_LOAD:<BR>-&nbsp;&nbsp;&nbsp; case MCI_SAVE:<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_FREEZE:<BR>-&nbsp;&nbsp;&nbsp; case MCI_PUT:<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_REALIZE:<BR>-&nbsp;&nbsp;&nbsp; case MCI_UNFREEZE:<BR>-&nbsp;&nbsp;&nbsp; 
  case MCI_UPDATE:<BR>-&nbsp;&nbsp;&nbsp; case MCI_WHERE:<BR>-&nbsp;&nbsp;&nbsp; 
  case MCI_STEP:<BR>-&nbsp;&nbsp;&nbsp; case MCI_SPIN:<BR>-&nbsp;&nbsp;&nbsp; 
  case MCI_ESCAPE:<BR>-&nbsp;&nbsp;&nbsp; case MCI_COPY:<BR>-&nbsp;&nbsp;&nbsp; 
  case MCI_CUT:<BR>-&nbsp;&nbsp;&nbsp; case MCI_DELETE:<BR>-&nbsp;&nbsp;&nbsp; 
  case MCI_PASTE:<BR>-&nbsp;&nbsp;&nbsp; case MCI_WINDOW:<BR>- 
  TRACE("Unsupported command [0x%lx]\n", wMsg);<BR>- 
  break;<BR>-&nbsp;&nbsp;&nbsp; case MCI_OPEN:<BR>-&nbsp;&nbsp;&nbsp; case 
  MCI_CLOSE:<BR>- ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");<BR>- 
  break;<BR>-&nbsp;&nbsp;&nbsp; default:<BR>- TRACE("Sending msg [0x%lx] to 
  default driver proc\n", wMsg);<BR>- return DefDriverProc(dwDevID, hDriv, wMsg, 
  dwParam1, dwParam2);<BR>-&nbsp;&nbsp;&nbsp; }<BR>-&nbsp;&nbsp;&nbsp; return 
  MCIERR_UNRECOGNIZED_COMMAND;<BR>-}<BR>-<BR>-/*-----------------------------------------------------------------------*/<BR>diff 
  -Nru wine/dlls/winmm/mcicda/mcicda.drv.spec 
  winedev/dlls/winmm/mcicda/mcicda.drv.spec<BR>--- 
  wine/dlls/winmm/mcicda/mcicda.drv.spec 2002-06-21 21:15:50.000000000 
  +0200<BR>+++ winedev/dlls/winmm/mcicda/mcicda.drv.spec 1970-01-01 
  01:00:00.000000000 +0100<BR>@@ -1 +0,0 @@<BR>-@ stdcall DriverProc(long long 
  long long long) MCICDA_DriverProc<BR>diff -Nru wine/tools/winapi/win32.api 
  winedev/tools/winapi/win32.api<BR>--- wine/tools/winapi/win32.api 2005-07-21 
  20:36:44.000000000 +0200<BR>+++ winedev/tools/winapi/win32.api 2005-07-22 
  14:47:09.000000000 +0200<BR>@@ -1806,7 +1806,7 
  @@<BR>&nbsp;HDRVR<BR>&nbsp;LONG<BR>&nbsp;<BR>-%%mcicda.drv<BR>+%%mcicda.dll<BR>&nbsp;<BR>&nbsp;%long<BR>&nbsp;<BR>diff 
  -Nru wine/tools/wine.inf winedev/tools/wine.inf<BR>--- wine/tools/wine.inf 
  2005-06-29 20:29:00.000000000 +0200<BR>+++ winedev/tools/wine.inf 2005-07-22 
  14:46:50.000000000 +0200<BR>@@ -208,7 +208,7 
  @@<BR>&nbsp;<BR>&nbsp;[MCI]<BR>&nbsp;HKLM,%Mci32Str%,"AVIVideo",,"mciavi.drv"<BR>-HKLM,%Mci32Str%,"CDAudio",,"mcicda.drv"<BR>+HKLM,%Mci32Str%,"CDAudio",,"mcicda.dll"<BR>&nbsp;HKLM,%Mci32Str%,"Sequencer",,"mciseq.drv"<BR>&nbsp;HKLM,%Mci32Str%,"WaveAudio",,"mciwave.drv"<BR>&nbsp;<BR>@@ 
  -2065,7 +2065,7 @@<BR>&nbsp;system.ini, mci,,"MPEGVideo=mciqtz.drv" 
  <BR>&nbsp;system.ini, mci,,"MPEGVideo2=mciqtz.drv" <BR>&nbsp;system.ini, 
  mci,,"avivideo=mciavi.drv" <BR>-system.ini, mci,,"cdaudio=mcicda.drv" 
  <BR>+system.ini, mci,,"cdaudio=mcicda.dll" <BR>&nbsp;system.ini, 
  mci,,"sequencer=mciseq.drv" <BR>&nbsp;system.ini, mci,,"vcr=mcivisca.drv" 
  <BR>&nbsp;system.ini, mci,,"; videodisc=mcipionr.drv" 
<BR></BLOCKQUOTE></BODY></HTML>