Author: dchapyshev
Date: Sat Aug 15 11:34:24 2009
New Revision: 42683
URL:
http://svn.reactos.org/svn/reactos?rev=42683&view=rev
Log:
- Add msgsm32.acm from Wine
- Add some MCI Extensions to registry
Added:
trunk/reactos/dll/win32/msgsm32.acm/ (with props)
trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.rbuild (with props)
trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.spec (with props)
trunk/reactos/dll/win32/msgsm32.acm/msgsm32.c (with props)
Modified:
trunk/reactos/baseaddress.rbuild
trunk/reactos/boot/bootdata/hivesft_arm.inf
trunk/reactos/boot/bootdata/hivesft_i386.inf
trunk/reactos/boot/bootdata/system.ini
trunk/reactos/dll/win32/win32.rbuild
trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/baseaddress.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/baseaddress.rbuild?rev=426…
==============================================================================
--- trunk/reactos/baseaddress.rbuild [iso-8859-1] (original)
+++ trunk/reactos/baseaddress.rbuild [iso-8859-1] Sat Aug 15 11:34:24 2009
@@ -21,6 +21,7 @@
<property name="BASEADDRESS_SRCLIENT" value="0x512C0000" />
<property name="BASEADDRESS_PSTOREC" value="0x513D0000" />
<property name="BASEADDRESS_LPK" value="0x516C0000" />
+ <property name="BASEADDRESS_MSGSM32ACM" value="0x56db0000"
/>
<property name="BASEADDRESS_MSG711ACM" value="0x584f0000" />
<property name="BASEADDRESS_IMAADP32ACM" value="0x585e0000"
/>
<property name="BASEADDRESS_TELEPHON" value="0x58750000" />
Modified: trunk/reactos/boot/bootdata/hivesft_arm.inf
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesft_arm.…
==============================================================================
--- trunk/reactos/boot/bootdata/hivesft_arm.inf [iso-8859-1] (original)
+++ trunk/reactos/boot/bootdata/hivesft_arm.inf [iso-8859-1] Sat Aug 15 11:34:24 2009
@@ -61,6 +61,7 @@
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","midi",0x00000000,"beepmidi.dll"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.msadpcm",0x00000000,"msadp32.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.msg711",0x00000000,"msg711.acm"
+HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.msgsm610",0x00000000,"msgsm32.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.imaadpcm",0x00000000,"imaadp32.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.winemp3",0x00000000,"winemp3.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","vidc.cvid",0x00000000,"iccvid.dll"
@@ -72,11 +73,38 @@
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\MCI32","Sequencer",0x00000002,"mciseq.dll"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\MCI32","WaveAudio",0x00000002,"mciwave.dll"
-HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","avi",0x00000002,"avivideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","aifc",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","asf",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","asx",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","au",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","avi",0x00000002,"AVIVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","cda",0x00000002,"CDAudio"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","lsf",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","lsx",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","m1v",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","m3u",0x00000002,"MPEGVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mid",0x00000002,"Sequencer"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","midi",0x00000002,"Sequencer"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mp2",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mp2v",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mp3",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpa",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpe",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpeg",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpg",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpv",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpv2",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","rmi",0x00000002,"MPEGVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","rmi",0x00000002,"Sequencer"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","snd",0x00000002,"MPEGVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wav",0x00000002,"WaveAudio"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wax",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wm",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wma",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wmp",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wmv",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wmx",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wvx",0x00000002,"MPEGVideo"
; Mesa OpenGL Driver
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\OpenGLDrivers","DefaultDriver",0x00000000,"Mesa"
Modified: trunk/reactos/boot/bootdata/hivesft_i386.inf
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesft_i386…
==============================================================================
--- trunk/reactos/boot/bootdata/hivesft_i386.inf [iso-8859-1] (original)
+++ trunk/reactos/boot/bootdata/hivesft_i386.inf [iso-8859-1] Sat Aug 15 11:34:24 2009
@@ -66,6 +66,7 @@
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","midi",0x00000000,"beepmidi.dll"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.msadpcm",0x00000000,"msadp32.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.msg711",0x00000000,"msg711.acm"
+HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.msgsm610",0x00000000,"msgsm32.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.imaadpcm",0x00000000,"imaadp32.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","msacm.winemp3",0x00000000,"winemp3.acm"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Drivers32","vidc.cvid",0x00000000,"iccvid.dll"
@@ -77,11 +78,38 @@
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\MCI32","Sequencer",0x00000002,"mciseq.dll"
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\MCI32","WaveAudio",0x00000002,"mciwave.dll"
-HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","avi",0x00000002,"avivideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","aifc",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","asf",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","asx",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","au",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","avi",0x00000002,"AVIVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","cda",0x00000002,"CDAudio"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","lsf",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","lsx",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","m1v",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","m3u",0x00000002,"MPEGVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mid",0x00000002,"Sequencer"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","midi",0x00000002,"Sequencer"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mp2",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mp2v",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mp3",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpa",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpe",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpeg",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpg",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpv",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","mpv2",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","rmi",0x00000002,"MPEGVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","rmi",0x00000002,"Sequencer"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","snd",0x00000002,"MPEGVideo"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wav",0x00000002,"WaveAudio"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wax",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wm",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wma",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wmp",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wmv",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wmx",0x00000002,"MPEGVideo"
+HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI
Extensions","wvx",0x00000002,"MPEGVideo"
; Mesa OpenGL Driver
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\OpenGLDrivers","DefaultDriver",0x00000000,"Mesa"
@@ -1101,6 +1129,9 @@
; deskmon.dll shell extension
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls
Folder\Device\shellex\PropertySheetHandlers\Display Monitor CPL
Extension","",0x00000000,"{42071713-76d4-11d1-8b24-00a0c9068ff3}"
+HKLM,"SOFTWARE\Microsoft\Ole","EnableDCOM",0x00000000,"Y"
+HKLM,"SOFTWARE\Microsoft\Ole","EnableRemoteConnect",0x00000000,"N"
+
; Keyboard layout switcher
;HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","kbswitch",0x00000000,"kbswitch.exe"
Modified: trunk/reactos/boot/bootdata/system.ini
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/system.ini?r…
==============================================================================
--- trunk/reactos/boot/bootdata/system.ini [iso-8859-1] (original)
+++ trunk/reactos/boot/bootdata/system.ini [iso-8859-1] Sat Aug 15 11:34:24 2009
@@ -2,6 +2,7 @@
msacm.imaadpcm=imaadp32.acm
msacm.msadpcm=msadp32.acm
msacm.msg711=msg711.acm
+msacm.msgsm610=msgsm32.acm
msacm.winemp3=winemp3.acm
vidc.mrle=msrle32.dll
vidc.msvc=msvidc32.dll
Propchange: trunk/reactos/dll/win32/msgsm32.acm/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Sat Aug 15 11:34:24 2009
@@ -1,0 +1,2 @@
+([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))?
+(\d+)
Propchange: trunk/reactos/dll/win32/msgsm32.acm/
------------------------------------------------------------------------------
bugtraq:message = See issue #%BUGID% for more details.
Propchange: trunk/reactos/dll/win32/msgsm32.acm/
------------------------------------------------------------------------------
bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/dll/win32/msgsm32.acm/
------------------------------------------------------------------------------
tsvn:logminsize = 10
Added: trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msgsm32.acm/msgs…
==============================================================================
--- trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.rbuild (added)
+++ trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.rbuild [iso-8859-1] Sat Aug 15
11:34:24 2009
@@ -1,0 +1,11 @@
+<module name="msgsm32.acm" type="win32dll"
baseaddress="${BASEADDRESS_MSGSM32ACM}" installbase="system32"
installname="msgsm32.acm" allowwarnings="true"
entrypoint="0">
+ <importlibrary definition="msgsm32.acm.spec" />
+ <include base="msgsm32.acm">.</include>
+ <include base="ReactOS">include/reactos/wine</include>
+ <define name="__WINESRC__" />
+ <file>msgsm32.c</file>
+ <library>wine</library>
+ <library>winmm</library>
+ <library>user32</library>
+ <library>kernel32</library>
+</module>
Propchange: trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.rbuild
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.spec
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msgsm32.acm/msgs…
==============================================================================
--- trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.spec (added)
+++ trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.spec [iso-8859-1] Sat Aug 15 11:34:24
2009
@@ -1,0 +1,1 @@
+@ stdcall -private DriverProc(long long long long long) GSM_DriverProc
Propchange: trunk/reactos/dll/win32/msgsm32.acm/msgsm32.acm.spec
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/win32/msgsm32.acm/msgsm32.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msgsm32.acm/msgs…
==============================================================================
--- trunk/reactos/dll/win32/msgsm32.acm/msgsm32.c (added)
+++ trunk/reactos/dll/win32/msgsm32.acm/msgsm32.c [iso-8859-1] Sat Aug 15 11:34:24 2009
@@ -1,0 +1,645 @@
+/*
+ * GSM 06.10 codec handling
+ * Copyright (C) 2009 Maarten Lankhorst
+ *
+ * Based on msg711.acm
+ * Copyright (C) 2002 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "config.h"
+#include <wine/port.h>
+
+#include <assert.h>
+#include <stdarg.h>
+#include <string.h>
+
+#ifdef HAVE_GSM_GSM_H
+#include <gsm/gsm.h>
+#elif defined(HAVE_GSM_H)
+#include <gsm.h>
+#endif
+
+#include "windef.h"
+#include "winbase.h"
+#include "wingdi.h"
+#include "winuser.h"
+#include "winnls.h"
+#include "mmsystem.h"
+#include "mmreg.h"
+#include "msacm.h"
+#include "msacmdrv.h"
+#include "wine/library.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(gsm);
+
+#ifdef SONAME_LIBGSM
+
+static void *libgsm_handle;
+#define FUNCPTR(f) static typeof(f) * p##f
+FUNCPTR(gsm_create);
+FUNCPTR(gsm_destroy);
+FUNCPTR(gsm_option);
+FUNCPTR(gsm_encode);
+FUNCPTR(gsm_decode);
+
+#define LOAD_FUNCPTR(f) \
+ if((p##f = wine_dlsym(libgsm_handle, #f, NULL, 0)) == NULL) { \
+ wine_dlclose(libgsm_handle, NULL, 0); \
+ libgsm_handle = NULL; \
+ return 0; \
+ }
+
+/***********************************************************************
+ * GSM_drvLoad
+ */
+static LRESULT GSM_drvLoad(void)
+{
+ char error[128];
+
+ libgsm_handle = wine_dlopen(SONAME_LIBGSM, RTLD_NOW, error, sizeof(error));
+ if (libgsm_handle)
+ {
+ LOAD_FUNCPTR(gsm_create);
+ LOAD_FUNCPTR(gsm_destroy);
+ LOAD_FUNCPTR(gsm_option);
+ LOAD_FUNCPTR(gsm_encode);
+ LOAD_FUNCPTR(gsm_decode);
+ return 1;
+ }
+ else
+ {
+ ERR("Couldn't load " SONAME_LIBGSM ": %s\n", error);
+ return 0;
+ }
+}
+
+/***********************************************************************
+ * GSM_drvFree
+ */
+static LRESULT GSM_drvFree(void)
+{
+ if (libgsm_handle)
+ wine_dlclose(libgsm_handle, NULL, 0);
+ return 1;
+}
+
+#else
+
+static LRESULT GSM_drvFree(void)
+{
+ return 1;
+}
+
+#endif
+
+/***********************************************************************
+ * GSM_DriverDetails
+ *
+ */
+static LRESULT GSM_DriverDetails(PACMDRIVERDETAILSW add)
+{
+ add->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
+ add->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
+ /* Details found from probing native msgsm32.acm */
+ add->wMid = MM_MICROSOFT;
+ add->wPid = 36;
+ add->vdwACM = 0x3320000;
+ add->vdwDriver = 0x4000000;
+ add->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
+ add->cFormatTags = 2;
+ add->cFilterTags = 0;
+ add->hicon = NULL;
+ MultiByteToWideChar( CP_ACP, 0, "Wine GSM 6.10", -1,
+ add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR)
);
+ MultiByteToWideChar( CP_ACP, 0, "Wine GSM 6.10 libgsm codec", -1,
+ add->szLongName, sizeof(add->szLongName)/sizeof(WCHAR) );
+ MultiByteToWideChar( CP_ACP, 0, "Brought to you by the Wine team...", -1,
+ add->szCopyright, sizeof(add->szCopyright)/sizeof(WCHAR)
);
+ MultiByteToWideChar( CP_ACP, 0, "Refer to LICENSE file", -1,
+ add->szLicensing, sizeof(add->szLicensing)/sizeof(WCHAR)
);
+ add->szFeatures[0] = 0;
+ return MMSYSERR_NOERROR;
+}
+
+/* Validate a WAVEFORMATEX structure */
+static DWORD GSM_FormatValidate(const WAVEFORMATEX *wfx)
+{
+ if (wfx->nChannels != 1)
+ return 0;
+
+ switch (wfx->wFormatTag)
+ {
+ case WAVE_FORMAT_PCM:
+ if (wfx->wBitsPerSample != 16)
+ {
+ WARN("PCM wBitsPerSample %u\n", wfx->wBitsPerSample);
+ return 0;
+ }
+ if (wfx->nBlockAlign != 2)
+ {
+ WARN("PCM nBlockAlign %u\n", wfx->nBlockAlign);
+ return 0;
+ }
+ if (wfx->nAvgBytesPerSec != wfx->nBlockAlign * wfx->nSamplesPerSec)
+ {
+ WARN("PCM nAvgBytesPerSec %u/%u\n",
+ wfx->nAvgBytesPerSec,
+ wfx->nBlockAlign * wfx->nSamplesPerSec);
+ return 0;
+ }
+ return 1;
+ case WAVE_FORMAT_GSM610:
+ if (wfx->cbSize < sizeof(WORD))
+ {
+ WARN("GSM cbSize %u\n", wfx->cbSize);
+ return 0;
+ }
+ if (wfx->wBitsPerSample != 0)
+ {
+ WARN("GSM wBitsPerSample %u\n", wfx->wBitsPerSample);
+ return 0;
+ }
+ if (wfx->nBlockAlign != 65)
+ {
+ WARN("GSM nBlockAlign %u\n", wfx->nBlockAlign);
+ return 0;
+ }
+ if (((GSM610WAVEFORMAT*)wfx)->wSamplesPerBlock != 320)
+ {
+ WARN("GSM wSamplesPerBlock %u\n",
+ ((GSM610WAVEFORMAT*)wfx)->wSamplesPerBlock);
+ return 0;
+ }
+ if (wfx->nAvgBytesPerSec != wfx->nSamplesPerSec * 65 / 320)
+ {
+ WARN("GSM nAvgBytesPerSec %d / %d\n",
+ wfx->nAvgBytesPerSec, wfx->nSamplesPerSec * 65 / 320);
+ return 0;
+ }
+ return 1;
+ default:
+ return 0;
+ }
+ return 0;
+}
+
+static const DWORD gsm_rates[] = { 8000, 11025, 22050, 44100, 48000, 96000 };
+#define NUM_RATES (sizeof(gsm_rates)/sizeof(*gsm_rates))
+
+/***********************************************************************
+ * GSM_FormatTagDetails
+ *
+ */
+static LRESULT GSM_FormatTagDetails(PACMFORMATTAGDETAILSW aftd, DWORD dwQuery)
+{
+ static const WCHAR szPcm[]={'P','C','M',0};
+ static const WCHAR szGsm[]={'G','S','M','
','6','.','1','0',0};
+
+ switch (dwQuery)
+ {
+ case ACM_FORMATTAGDETAILSF_INDEX:
+ if (aftd->dwFormatTagIndex > 1) return ACMERR_NOTPOSSIBLE;
+ break;
+ case ACM_FORMATTAGDETAILSF_LARGESTSIZE:
+ if (aftd->dwFormatTag == WAVE_FORMAT_UNKNOWN)
+ {
+ aftd->dwFormatTagIndex = 1;
+ break;
+ }
+ /* fall thru */
+ case ACM_FORMATTAGDETAILSF_FORMATTAG:
+ switch (aftd->dwFormatTag)
+ {
+ case WAVE_FORMAT_PCM: aftd->dwFormatTagIndex = 0; break;
+ case WAVE_FORMAT_GSM610: aftd->dwFormatTagIndex = 1; break;
+ default: return ACMERR_NOTPOSSIBLE;
+ }
+ break;
+ default:
+ WARN("Unsupported query %08x\n", dwQuery);
+ return MMSYSERR_NOTSUPPORTED;
+ }
+
+ aftd->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
+ switch (aftd->dwFormatTagIndex)
+ {
+ case 0:
+ aftd->dwFormatTag = WAVE_FORMAT_PCM;
+ aftd->cbFormatSize = sizeof(PCMWAVEFORMAT);
+ aftd->cStandardFormats = NUM_RATES;
+ lstrcpyW(aftd->szFormatTag, szPcm);
+ break;
+ case 1:
+ aftd->dwFormatTag = WAVE_FORMAT_GSM610;
+ aftd->cbFormatSize = sizeof(GSM610WAVEFORMAT);
+ aftd->cStandardFormats = NUM_RATES;
+ lstrcpyW(aftd->szFormatTag, szGsm);
+ break;
+ }
+ return MMSYSERR_NOERROR;
+}
+
+/***********************************************************************
+ * GSM_FormatDetails
+ *
+ */
+static LRESULT GSM_FormatDetails(PACMFORMATDETAILSW afd, DWORD dwQuery)
+{
+ switch (dwQuery)
+ {
+ case ACM_FORMATDETAILSF_FORMAT:
+ if (!GSM_FormatValidate(afd->pwfx)) return ACMERR_NOTPOSSIBLE;
+ break;
+ case ACM_FORMATDETAILSF_INDEX:
+ afd->pwfx->wFormatTag = afd->dwFormatTag;
+ switch (afd->dwFormatTag)
+ {
+ case WAVE_FORMAT_PCM:
+ if (afd->dwFormatIndex >= NUM_RATES) return ACMERR_NOTPOSSIBLE;
+ afd->pwfx->nChannels = 1;
+ afd->pwfx->nSamplesPerSec = gsm_rates[afd->dwFormatIndex];
+ afd->pwfx->wBitsPerSample = 16;
+ afd->pwfx->nBlockAlign = 2;
+ afd->pwfx->nAvgBytesPerSec = afd->pwfx->nSamplesPerSec *
afd->pwfx->nBlockAlign;
+ break;
+ case WAVE_FORMAT_GSM610:
+ if (afd->dwFormatIndex >= NUM_RATES) return ACMERR_NOTPOSSIBLE;
+ afd->pwfx->nChannels = 1;
+ afd->pwfx->nSamplesPerSec = gsm_rates[afd->dwFormatIndex];
+ afd->pwfx->wBitsPerSample = 0;
+ afd->pwfx->nBlockAlign = 65;
+ afd->pwfx->nAvgBytesPerSec = afd->pwfx->nSamplesPerSec * 65 /
320;
+ afd->pwfx->cbSize = sizeof(WORD);
+ ((GSM610WAVEFORMAT*)afd->pwfx)->wSamplesPerBlock = 320;
+ break;
+ default:
+ WARN("Unsupported tag %08x\n", afd->dwFormatTag);
+ return MMSYSERR_INVALPARAM;
+ }
+ break;
+ default:
+ WARN("Unsupported query %08x\n", dwQuery);
+ return MMSYSERR_NOTSUPPORTED;
+ }
+ afd->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
+ afd->szFormat[0] = 0; /* let MSACM format this for us... */
+
+ return MMSYSERR_NOERROR;
+}
+
+/***********************************************************************
+ * GSM_FormatSuggest
+ *
+ */
+static LRESULT GSM_FormatSuggest(PACMDRVFORMATSUGGEST adfs)
+{
+ /* some tests ... */
+ if (adfs->cbwfxSrc < sizeof(PCMWAVEFORMAT) ||
+ adfs->cbwfxDst < sizeof(PCMWAVEFORMAT) ||
+ !GSM_FormatValidate(adfs->pwfxSrc)) return ACMERR_NOTPOSSIBLE;
+ /* FIXME: should do those tests against the real size (according to format tag */
+
+ /* If no suggestion for destination, then copy source value */
+ if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_NCHANNELS))
+ adfs->pwfxDst->nChannels = adfs->pwfxSrc->nChannels;
+ if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_NSAMPLESPERSEC))
+ adfs->pwfxDst->nSamplesPerSec = adfs->pwfxSrc->nSamplesPerSec;
+
+ if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WBITSPERSAMPLE))
+ {
+ if (adfs->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM)
+ adfs->pwfxDst->wBitsPerSample = 0;
+ else
+ adfs->pwfxDst->wBitsPerSample = 16;
+ }
+ if (!(adfs->fdwSuggest & ACM_FORMATSUGGESTF_WFORMATTAG))
+ {
+ switch (adfs->pwfxSrc->wFormatTag)
+ {
+ case WAVE_FORMAT_PCM: adfs->pwfxDst->wFormatTag = WAVE_FORMAT_GSM610;
break;
+ case WAVE_FORMAT_GSM610: adfs->pwfxDst->wFormatTag = WAVE_FORMAT_PCM;
break;
+ }
+ }
+
+ /* recompute other values */
+ switch (adfs->pwfxDst->wFormatTag)
+ {
+ case WAVE_FORMAT_PCM:
+ adfs->pwfxDst->nBlockAlign = 2;
+ adfs->pwfxDst->nAvgBytesPerSec = adfs->pwfxDst->nSamplesPerSec * 2;
+ break;
+ case WAVE_FORMAT_GSM610:
+ if (adfs->pwfxDst->cbSize < sizeof(WORD))
+ return ACMERR_NOTPOSSIBLE;
+ adfs->pwfxDst->nBlockAlign = 65;
+ adfs->pwfxDst->nAvgBytesPerSec = adfs->pwfxDst->nSamplesPerSec * 65 /
320;
+ ((GSM610WAVEFORMAT*)adfs->pwfxDst)->wSamplesPerBlock = 320;
+ break;
+ default:
+ return ACMERR_NOTPOSSIBLE;
+ }
+
+ /* check if result is ok */
+ if (!GSM_FormatValidate(adfs->pwfxDst)) return ACMERR_NOTPOSSIBLE;
+ return MMSYSERR_NOERROR;
+}
+
+#ifdef SONAME_LIBGSM
+/***********************************************************************
+ * GSM_StreamOpen
+ *
+ */
+static LRESULT GSM_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
+{
+ int used = 1;
+ gsm r;
+ if (!GSM_FormatValidate(adsi->pwfxSrc) || !GSM_FormatValidate(adsi->pwfxDst))
+ return MMSYSERR_NOTSUPPORTED;
+
+ if (adsi->pwfxSrc->nSamplesPerSec != adsi->pwfxDst->nSamplesPerSec)
+ return MMSYSERR_NOTSUPPORTED;
+
+ if (!GSM_drvLoad()) return MMSYSERR_NOTSUPPORTED;
+
+ r = pgsm_create();
+ if (!r)
+ return MMSYSERR_NOMEM;
+ if (pgsm_option(r, GSM_OPT_WAV49, &used) < 0)
+ {
+ FIXME("Your libgsm library is doesn't support GSM_OPT_WAV49\n");
+ FIXME("Please recompile libgsm with WAV49 support\n");
+ pgsm_destroy(r);
+ return MMSYSERR_NOTSUPPORTED;
+ }
+ adsi->dwDriver = (DWORD_PTR)r;
+ return MMSYSERR_NOERROR;
+}
+
+/***********************************************************************
+ * GSM_StreamClose
+ *
+ */
+static LRESULT GSM_StreamClose(PACMDRVSTREAMINSTANCE adsi)
+{
+ pgsm_destroy((gsm)adsi->dwDriver);
+ return MMSYSERR_NOERROR;
+}
+
+/***********************************************************************
+ * GSM_StreamSize
+ *
+ */
+static LRESULT GSM_StreamSize(const ACMDRVSTREAMINSTANCE *adsi, PACMDRVSTREAMSIZE adss)
+{
+ switch (adss->fdwSize)
+ {
+ case ACM_STREAMSIZEF_DESTINATION:
+ /* cbDstLength => cbSrcLength */
+ if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
+ adsi->pwfxDst->wFormatTag == WAVE_FORMAT_GSM610)
+ {
+ adss->cbSrcLength = adss->cbDstLength / 65 * 640;
+ }
+ else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_GSM610 &&
+ adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
+ {
+ adss->cbSrcLength = adss->cbDstLength / 640 * 65;
+ }
+ else
+ {
+ return MMSYSERR_NOTSUPPORTED;
+ }
+ return MMSYSERR_NOERROR;
+ case ACM_STREAMSIZEF_SOURCE:
+ /* cbSrcLength => cbDstLength */
+ if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
+ adsi->pwfxDst->wFormatTag == WAVE_FORMAT_GSM610)
+ {
+ adss->cbDstLength = (adss->cbSrcLength + 639) / 640 * 65;
+ }
+ else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_GSM610 &&
+ adsi->pwfxDst->wFormatTag == WAVE_FORMAT_PCM)
+ {
+ adss->cbDstLength = adss->cbSrcLength / 65 * 640;
+ }
+ else
+ {
+ return MMSYSERR_NOTSUPPORTED;
+ }
+ return MMSYSERR_NOERROR;
+ default:
+ WARN("Unsupported query %08x\n", adss->fdwSize);
+ return MMSYSERR_NOTSUPPORTED;
+ }
+}
+
+/***********************************************************************
+ * GSM_StreamConvert
+ *
+ */
+static LRESULT GSM_StreamConvert(PACMDRVSTREAMINSTANCE adsi, PACMDRVSTREAMHEADER adsh)
+{
+ gsm r = (gsm)adsi->dwDriver;
+ DWORD nsrc = 0;
+ DWORD ndst = 0;
+ BYTE *src = adsh->pbSrc;
+ BYTE *dst = adsh->pbDst;
+ int odd = 0;
+
+ if (adsh->fdwConvert &
+ ~(ACM_STREAMCONVERTF_BLOCKALIGN|
+ ACM_STREAMCONVERTF_END|
+ ACM_STREAMCONVERTF_START))
+ {
+ FIXME("Unsupported fdwConvert (%08x), ignoring it\n", adsh->fdwConvert);
+ }
+
+ /* Reset the index to 0, just to be sure */
+ pgsm_option(r, GSM_OPT_FRAME_INDEX, &odd);
+
+ /* The native ms codec writes 65 bytes, and this requires 2 libgsm calls.
+ * First 32 bytes are written, or 33 bytes read
+ * Second 33 bytes are written, or 32 bytes read
+ */
+
+ /* Decode */
+ if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_GSM610)
+ {
+ if (adsh->cbSrcLength / 65 * 640 > adsh->cbDstLength)
+ {
+ return ACMERR_NOTPOSSIBLE;
+ }
+
+ while (nsrc + 65 <= adsh->cbSrcLength)
+ {
+ /* Decode data */
+ if (pgsm_decode(r, src + nsrc, (gsm_signal*)(dst + ndst)) < 0)
+ FIXME("Couldn't decode data\n");
+ ndst += 320;
+ nsrc += 33;
+
+ if (pgsm_decode(r, src + nsrc, (gsm_signal*)(dst + ndst)) < 0)
+ FIXME("Couldn't decode data\n");
+ ndst += 320;
+ nsrc += 32;
+ }
+ }
+ else
+ {
+ /* Testing a little seems to reveal that despite being able to fit
+ * inside the buffer if ACM_STREAMCONVERTF_BLOCKALIGN is set
+ * it still rounds up
+ */
+ if ((adsh->cbSrcLength + 639) / 640 * 65 > adsh->cbDstLength)
+ {
+ return ACMERR_NOTPOSSIBLE;
+ }
+
+ /* The packing algorythm writes 32 bytes, then 33 bytes,
+ * and it seems to pad to align to 65 bytes always
+ * adding extra data where necessary
+ */
+ while (nsrc + 640 <= adsh->cbSrcLength)
+ {
+ /* Encode data */
+ pgsm_encode(r, (gsm_signal*)(src+nsrc), dst+ndst);
+ nsrc += 320;
+ ndst += 32;
+ pgsm_encode(r, (gsm_signal*)(src+nsrc), dst+ndst);
+ nsrc += 320;
+ ndst += 33;
+ }
+
+ /* If ACM_STREAMCONVERTF_BLOCKALIGN isn't set pad with zeros */
+ if (!(adsh->fdwConvert & ACM_STREAMCONVERTF_BLOCKALIGN) &&
+ nsrc < adsh->cbSrcLength)
+ {
+ char emptiness[320];
+ int todo = adsh->cbSrcLength - nsrc;
+
+ if (todo > 320)
+ {
+ pgsm_encode(r, (gsm_signal*)(src+nsrc), dst+ndst);
+ ndst += 32;
+ todo -= 320;
+ nsrc += 320;
+
+ memcpy(emptiness, src+nsrc, todo);
+ memset(emptiness + todo, 0, 320 - todo);
+ pgsm_encode(r, (gsm_signal*)emptiness, dst+ndst);
+ ndst += 33;
+ }
+ else
+ {
+ memcpy(emptiness, src+nsrc, todo);
+ memset(emptiness + todo, 0, 320 - todo);
+ pgsm_encode(r, (gsm_signal*)emptiness, dst+ndst);
+ ndst += 32;
+
+ memset(emptiness, 0, todo);
+ pgsm_encode(r, (gsm_signal*)emptiness, dst+ndst);
+ ndst += 33;
+ }
+ nsrc = adsh->cbSrcLength;
+ }
+ }
+
+ adsh->cbSrcLengthUsed = nsrc;
+ adsh->cbDstLengthUsed = ndst;
+ TRACE("%d(%d) -> %d(%d)\n", nsrc, adsh->cbSrcLength, ndst,
adsh->cbDstLength);
+ return MMSYSERR_NOERROR;
+}
+
+#endif
+
+/**************************************************************************
+ * GSM_DriverProc [exported]
+ */
+LRESULT CALLBACK GSM_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
+ LPARAM dwParam1, LPARAM dwParam2)
+{
+ TRACE("(%08lx %p %04x %08lx %08lx);\n",
+ dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+
+ switch (wMsg)
+ {
+ case DRV_LOAD: return 1;
+ case DRV_FREE: return GSM_drvFree();
+ case DRV_OPEN: return 1;
+ case DRV_CLOSE: return 1;
+ case DRV_ENABLE: return 1;
+ case DRV_DISABLE: return 1;
+ case DRV_QUERYCONFIGURE: return 1;
+ case DRV_CONFIGURE: MessageBoxA(0, "GSM 06.10 codec", "Wine
Driver", MB_OK); return 1;
+ case DRV_INSTALL: return DRVCNF_RESTART;
+ case DRV_REMOVE: return DRVCNF_RESTART;
+
+ case ACMDM_DRIVER_NOTIFY:
+ /* no caching from other ACM drivers is done so far */
+ return MMSYSERR_NOERROR;
+
+ case ACMDM_DRIVER_DETAILS:
+ return GSM_DriverDetails((PACMDRIVERDETAILSW)dwParam1);
+
+ case ACMDM_FORMATTAG_DETAILS:
+ return GSM_FormatTagDetails((PACMFORMATTAGDETAILSW)dwParam1, dwParam2);
+
+ case ACMDM_FORMAT_DETAILS:
+ return GSM_FormatDetails((PACMFORMATDETAILSW)dwParam1, dwParam2);
+
+ case ACMDM_FORMAT_SUGGEST:
+ return GSM_FormatSuggest((PACMDRVFORMATSUGGEST)dwParam1);
+
+#ifdef SONAME_LIBGSM
+ case ACMDM_STREAM_OPEN:
+ return GSM_StreamOpen((PACMDRVSTREAMINSTANCE)dwParam1);
+
+ case ACMDM_STREAM_CLOSE:
+ return GSM_StreamClose((PACMDRVSTREAMINSTANCE)dwParam1);
+
+ case ACMDM_STREAM_SIZE:
+ return GSM_StreamSize((PACMDRVSTREAMINSTANCE)dwParam1, (PACMDRVSTREAMSIZE)dwParam2);
+
+ case ACMDM_STREAM_CONVERT:
+ return GSM_StreamConvert((PACMDRVSTREAMINSTANCE)dwParam1,
(PACMDRVSTREAMHEADER)dwParam2);
+#else
+ case ACMDM_STREAM_OPEN: ERR("libgsm support not compiled in!\n");
+ case ACMDM_STREAM_CLOSE:
+ case ACMDM_STREAM_SIZE:
+ case ACMDM_STREAM_CONVERT:
+ return MMSYSERR_NOTSUPPORTED;
+#endif
+
+ case ACMDM_HARDWARE_WAVE_CAPS_INPUT:
+ case ACMDM_HARDWARE_WAVE_CAPS_OUTPUT:
+ /* this converter is not a hardware driver */
+ case ACMDM_FILTERTAG_DETAILS:
+ case ACMDM_FILTER_DETAILS:
+ /* this converter is not a filter */
+ case ACMDM_STREAM_RESET:
+ /* only needed for asynchronous driver... we aren't, so just say it */
+ return MMSYSERR_NOTSUPPORTED;
+ case ACMDM_STREAM_PREPARE:
+ case ACMDM_STREAM_UNPREPARE:
+ /* nothing special to do here... so don't do anything */
+ return MMSYSERR_NOERROR;
+
+ default:
+ return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
+ }
+}
Propchange: trunk/reactos/dll/win32/msgsm32.acm/msgsm32.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/win32/win32.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/win32.rbuild?rev…
==============================================================================
--- trunk/reactos/dll/win32/win32.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/win32.rbuild [iso-8859-1] Sat Aug 15 11:34:24 2009
@@ -253,6 +253,9 @@
<directory name="msgina">
<xi:include href="msgina/msgina.rbuild" />
</directory>
+<directory name="msgsm32.acm">
+ <xi:include href="msgsm32.acm/msgsm32.acm.rbuild" />
+</directory>
<directory name="mshtml">
<xi:include href="mshtml/mshtml.rbuild" />
</directory>
Modified: trunk/reactos/media/doc/README.WINE
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
==============================================================================
--- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original)
+++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sat Aug 15 11:34:24 2009
@@ -94,6 +94,7 @@
reactos/dll/win32/msctf # Autosync
reactos/dll/win32/msftedit # Autosync
reactos/dll/win32/msg711.acm # Autosync
+reactos/dll/win32/msgsm32.acm # Autosync
reactos/dll/win32/mshtml # Autosync
reactos/dll/win32/msimg32 # Autosync
reactos/dll/win32/msi # Autosync