Index: dlls/msdmo/.cvsignore
===================================================================
RCS file: /home/wine/wine/dlls/msdmo/.cvsignore,v
retrieving revision 1.3
diff -d -u -r1.3 .cvsignore
--- dlls/msdmo/.cvsignore	12 Dec 2002 22:04:06 -0000	1.3
+++ dlls/msdmo/.cvsignore	20 Jul 2003 17:47:38 -0000
@@ -2,3 +2,4 @@
 msdmo.dll.dbg.c
 msdmo.spec.c
 msdmo.spec.def
+rsrc.res
\ No newline at end of file
Index: dlls/msdmo/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/msdmo/Makefile.in,v
retrieving revision 1.6
diff -d -u -r1.6 Makefile.in
--- dlls/msdmo/Makefile.in	17 May 2002 03:37:13 -0000	1.6
+++ dlls/msdmo/Makefile.in	20 Jul 2003 17:47:38 -0000
@@ -3,6 +3,7 @@
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = msdmo.dll
+IMPORTS   = ole32 kernel32
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
@@ -11,6 +12,9 @@
 	dmoreg.c \
 	dmort.c \
 	msdmo_main.c
+
+RC_SRCS = \
+	rsrc.rc
 
 @MAKE_DLL_RULES@
 
Index: dlls/msdmo/dmoreg.c
===================================================================
RCS file: /home/wine/wine/dlls/msdmo/dmoreg.c,v
retrieving revision 1.2
diff -d -u -r1.2 dmoreg.c
--- dlls/msdmo/dmoreg.c	22 Mar 2002 19:19:23 -0000	1.2
+++ dlls/msdmo/dmoreg.c	20 Jul 2003 17:47:39 -0000
@@ -1 +1,83 @@
-/* Code removed because of Microsoft EULA concerns. */
+/*
+ * Copyright (C) 2003 Michael Günnewig
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define COM_NO_WINDOWS_H
+#include "winbase.h"
+#include "objbase.h"
+#include "mediaobj.h"
+#include "dmoreg.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msdmo);
+
+/***********************************************************************/
+
+HRESULT WINAPI DMORegister(LPCWSTR a, REFCLSID b, REFGUID c, DWORD d, DWORD e,
+			   const DMO_PARTIAL_MEDIATYPE* f,
+                           DWORD g, const DMO_PARTIAL_MEDIATYPE* h)
+{
+  FIXME("(%p,%p,%p,%lu,%lu,%p,%lu,%p),stub!\n",a,b,c,d,e,f,g,h);
+
+  return E_NOTIMPL;
+}
+
+HRESULT WINAPI DMOUnregister(REFCLSID a,REFGUID b)
+{
+  FIXME("(%p,%p),stub!\n",a,b);
+
+  return E_NOTIMPL;
+}
+
+HRESULT WINAPI DMOEnum(REFGUID guidCategory, DWORD dwFlags, DWORD cInTypes,
+		       const DMO_PARTIAL_MEDIATYPE*pInTypes, DWORD cOutTypes,
+		       const DMO_PARTIAL_MEDIATYPE*pOutTypes,IEnumDMO**ppEnum)
+{
+  FIXME("(%s,0x%lX,%lu,%p,%lu,%p,%p),stub!\n",debugstr_guid(guidCategory),
+	dwFlags,cInTypes,pInTypes,cOutTypes,pOutTypes,ppEnum);
+
+  if (guidCategory == NULL || ppEnum == NULL)
+    return E_FAIL;
+  if (dwFlags != 0 && dwFlags != DMO_ENUMF_INCLUDE_KEYED)
+    return E_FAIL;
+
+  *ppEnum = NULL;
+
+  return E_NOTIMPL;
+}
+
+HRESULT WINAPI DMOGetTypes(REFCLSID a, unsigned long b, unsigned long* c,
+			   DMO_PARTIAL_MEDIATYPE* d, unsigned long e,
+			   unsigned long* f, DMO_PARTIAL_MEDIATYPE* g)
+{
+  FIXME("(%p,%lu,%p,%p,%lu,%p,%p),stub!\n",a,b,c,d,e,f,g);
+
+  return E_NOTIMPL;
+}
+
+HRESULT WINAPI DMOGetName(REFCLSID pclsid, WCHAR* pstr)
+{
+  FIXME("(%s,%p),stub!\n", debugstr_guid(pclsid), pstr);
+
+  if (pclsid == NULL || pstr == NULL)
+    return E_FAIL;
+
+  pstr[0] = '\0';
+
+  return E_NOTIMPL;
+}
Index: dlls/msdmo/dmort.c
===================================================================
RCS file: /home/wine/wine/dlls/msdmo/dmort.c,v
retrieving revision 1.2
diff -d -u -r1.2 dmort.c
--- dlls/msdmo/dmort.c	22 Mar 2002 19:19:23 -0000	1.2
+++ dlls/msdmo/dmort.c	20 Jul 2003 17:47:40 -0000
@@ -1 +1,178 @@
-/* Code removed because of Microsoft EULA concerns. */
+/*
+ * Copyright (C) 2003 Michael Günnewig
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define COM_NO_WINDOWS_H
+#include "winbase.h"
+#include "objbase.h"
+#include "mediaobj.h"
+#include "dmort.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msdmo);
+
+/***********************************************************************
+ *		MoCreateMediaType	(MSDMO.@)
+ */
+HRESULT WINAPI MoCreateMediaType(DMO_MEDIA_TYPE** ppmedia, DWORD cbFormat)
+{
+  HRESULT hr;
+
+  TRACE("(%p,%lu)\n", ppmedia, cbFormat);
+
+  if (ppmedia == NULL)
+    return E_POINTER;
+
+  *ppmedia = CoTaskMemAlloc(sizeof(DMO_MEDIA_TYPE));
+  if (*ppmedia == NULL)
+    return E_OUTOFMEMORY;
+
+  hr = MoInitMediaType(*ppmedia, cbFormat);
+  if (FAILED(hr)) {
+    CoTaskMemFree(*ppmedia);
+    *ppmedia = NULL;
+  }
+
+  return hr;
+}
+
+/***********************************************************************
+ *		MoInitMediaType		(MSDMO.@)
+ */
+HRESULT WINAPI MoInitMediaType(DMO_MEDIA_TYPE* pmedia, DWORD cbFormat)
+{
+  TRACE("(%p,%lu)\n", pmedia,cbFormat);
+
+  if (pmedia == NULL)
+    return E_POINTER;
+
+  memset(pmedia, 0, sizeof(DMO_MEDIA_TYPE));
+
+  if (cbFormat > 0) {
+    pmedia->pbFormat = CoTaskMemAlloc(cbFormat);
+    if (pmedia->pbFormat == NULL)
+      return E_OUTOFMEMORY;
+
+    pmedia->cbFormat = cbFormat;
+  }
+
+  return S_OK;
+}
+
+/***********************************************************************
+ *		MoDeleteMediaType	(MSDMO.@)
+ */
+HRESULT WINAPI MoDeleteMediaType(DMO_MEDIA_TYPE* pmedia)
+{
+  TRACE("(%p)\n", pmedia);
+
+  if (pmedia == NULL)
+    return E_POINTER;
+
+  MoFreeMediaType(pmedia);
+  CoTaskMemFree(pmedia);
+
+  return S_OK;
+}
+
+/***********************************************************************
+ *		MoFreeMediaType		(MSDMO.@)
+ */
+HRESULT WINAPI MoFreeMediaType(DMO_MEDIA_TYPE* pmedia)
+{
+  TRACE("(%p)\n", pmedia);
+
+  if (pmedia == NULL)
+    return E_POINTER;
+
+  if (pmedia->pUnk != NULL) {
+    IUnknown_Release(pmedia->pUnk);
+    pmedia->pUnk = NULL;
+  }
+
+  if (pmedia->pbFormat != NULL) {
+    CoTaskMemFree(pmedia->pbFormat);
+    pmedia->pbFormat = NULL;
+  }
+
+  return S_OK;
+}
+
+/***********************************************************************
+ *		MoDuplicateMediaType	(MSDMO.@)
+ */
+HRESULT WINAPI MoDuplicateMediaType(DMO_MEDIA_TYPE** ppdst,
+				    const DMO_MEDIA_TYPE* psrc)
+{
+  HRESULT hr;
+
+  TRACE("(%p,%p)\n", ppdst, psrc);
+
+  if (ppdst == NULL || psrc == NULL)
+    return E_POINTER;
+
+  *ppdst = CoTaskMemAlloc(sizeof(DMO_MEDIA_TYPE));
+  if (*ppdst == NULL)
+    return E_OUTOFMEMORY;
+
+  hr = MoCopyMediaType(*ppdst, psrc);
+  if (FAILED(hr)) {
+    MoFreeMediaType(*ppdst);
+    *ppdst = NULL;
+  }
+
+  return hr;
+}
+
+/***********************************************************************
+ *		MoCopyMediaType		(MSDMO.@)
+ */
+HRESULT WINAPI MoCopyMediaType(DMO_MEDIA_TYPE* pdst,
+			       const DMO_MEDIA_TYPE* psrc)
+{
+  TRACE("(%p,%p)\n", pdst, psrc);
+
+  if (pdst == NULL || psrc == NULL)
+    return E_POINTER;
+
+  memcpy(&pdst->majortype,  &psrc->majortype,  sizeof(psrc->majortype));
+  memcpy(&pdst->subtype,    &psrc->subtype,    sizeof(psrc->subtype));
+  memcpy(&pdst->formattype, &psrc->formattype, sizeof(psrc->formattype));
+
+  pdst->bFixedSizeSamples    = psrc->bFixedSizeSamples;
+  pdst->bTemporalCompression = psrc->bTemporalCompression;
+  pdst->lSampleSize          = psrc->lSampleSize;
+  pdst->cbFormat             = psrc->cbFormat;
+
+  if (psrc->pbFormat != NULL && psrc->cbFormat > 0) {
+    pdst->pbFormat = CoTaskMemAlloc(psrc->cbFormat);
+    if (pdst->pbFormat == NULL)
+      return E_OUTOFMEMORY;
+
+    memcpy(pdst->pbFormat, psrc->pbFormat, psrc->cbFormat);
+  } else
+    pdst->pbFormat = NULL;
+
+  if (psrc->pUnk != NULL) {
+    pdst->pUnk = psrc->pUnk;
+    IUnknown_AddRef(pdst->pUnk);
+  } else
+    pdst->pUnk = NULL;
+
+  return S_OK;
+}
Index: dlls/msdmo/msdmo.spec
===================================================================
RCS file: /home/wine/wine/dlls/msdmo/msdmo.spec,v
retrieving revision 1.6
diff -d -u -r1.6 msdmo.spec
--- dlls/msdmo/msdmo.spec	21 Jun 2002 19:15:47 -0000	1.6
+++ dlls/msdmo/msdmo.spec	20 Jul 2003 17:47:40 -0000
@@ -1,15 +1,15 @@
-@ stub DMOEnum
-@ stub DMOGetName
-@ stub DMOGetTypes
-@ stub DMOGuidToStrA
-@ stub DMOGuidToStrW
-@ stub DMORegister
-@ stub DMOStrToGuidA
-@ stub DMOStrToGuidW
-@ stub DMOUnregister
-@ stub MoCopyMediaType
-@ stub MoCreateMediaType
-@ stub MoDeleteMediaType
-@ stub MoDuplicateMediaType
-@ stub MoFreeMediaType
-@ stub MoInitMediaType
+@ stdcall DMOEnum(ptr long long ptr long ptr ptr)
+@ stdcall DMOGetName(ptr wstr)
+@ stdcall DMOGetTypes(ptr long ptr ptr long ptr ptr)
+@ stub    DMOGuidToStrA
+@ stub    DMOGuidToStrW
+@ stdcall DMORegister(wstr ptr ptr long long ptr long ptr)
+@ stub    DMOStrToGuidA
+@ stub    DMOStrToGuidW
+@ stdcall DMOUnregister(ptr ptr)
+@ stdcall MoCopyMediaType(ptr ptr)
+@ stdcall MoCreateMediaType(ptr long)
+@ stdcall MoDeleteMediaType(ptr)
+@ stdcall MoDuplicateMediaType(ptr ptr)
+@ stdcall MoFreeMediaType(ptr)
+@ stdcall MoInitMediaType(ptr long)
