Added an initial (mostly stub) implementation of MSHTML.DLL.
diff --git a/configure b/configure
index f67b913..ddfc435 100755
--- a/configure
+++ b/configure
@@ -16712,7 +16712,7 @@
MAKE_PROG_RULES=programs/Makeprog.rules
- ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3dx8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/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/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/iphlpapi/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/msi/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvcrtd/Makefile dlls/msvideo/Makefile dlls/msvideo/msrle32/Makefile dlls/mswsock/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/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/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/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/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/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/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/winejack/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/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile libs/Makefile libs/port/Makefile libs/unicode/Makefile libs/uuid/Makefile libs/wine/Makefile libs/wpp/Makefile miscemu/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/winecfg/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemenubuilder/Makefile programs/winemine/Makefile programs/winepath/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/wmc/Makefile tools/wrc/Makefile"
+ ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3dx8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/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/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/iphlpapi/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/mshtml/Makefile dlls/msi/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvcrtd/Makefile dlls/msvideo/Makefile dlls/msvideo/msrle32/Makefile dlls/mswsock/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/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/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/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/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/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/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/winejack/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/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile libs/Makefile libs/port/Makefile libs/unicode/Makefile libs/uuid/Makefile libs/wine/Makefile libs/wpp/Makefile miscemu/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/winecfg/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemenubuilder/Makefile programs/winemine/Makefile programs/winepath/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/wmc/Makefile tools/wrc/Makefile"
cat >confcache <<\_ACEOF
@@ -17302,6 +17302,7 @@
"dlls/msacm/msg711/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msacm/msg711/Makefile" ;;
"dlls/msacm/winemp3/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msacm/winemp3/Makefile" ;;
"dlls/msdmo/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msdmo/Makefile" ;;
+ "dlls/mshtml/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/mshtml/Makefile" ;;
"dlls/msi/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msi/Makefile" ;;
"dlls/msimg32/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msimg32/Makefile" ;;
"dlls/msisys/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/msisys/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index 05a06df..a7df4ca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1452,6 +1452,7 @@
dlls/msacm/msg711/Makefile
dlls/msacm/winemp3/Makefile
dlls/msdmo/Makefile
+dlls/mshtml/Makefile
dlls/msi/Makefile
dlls/msimg32/Makefile
dlls/msisys/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index eea9cd4..1abc45f 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -58,6 +58,7 @@
msacm/msg711 \
msacm/winemp3 \
msdmo \
+ mshtml \
msi \
msimg32 \
msisys \
@@ -248,6 +249,7 @@
msadp32.acm$(DLLEXT) \
msdmo.dll$(DLLEXT) \
msg711.acm$(DLLEXT) \
+ mshtml.dll$(DLLEXT) \
msi.dll$(DLLEXT) \
msimg32.dll$(DLLEXT) \
msisys.ocx$(DLLEXT) \
@@ -484,6 +486,9 @@
msg711.acm$(DLLEXT): msacm/msg711/msg711.acm$(DLLEXT)
$(RM) $@ && $(LN_S) msacm/msg711/msg711.acm$(DLLEXT) $@
+mshtml.dll$(DLLEXT): mshtml/mshtml.dll$(DLLEXT)
+ $(RM) $@ && $(LN_S) mshtml/mshtml.dll$(DLLEXT) $@
+
msi.dll$(DLLEXT): msi/msi.dll$(DLLEXT)
$(RM) $@ && $(LN_S) msi/msi.dll$(DLLEXT) $@
@@ -724,6 +729,7 @@
libmpr \
libmsacm32 \
libmsdmo \
+ libmshtml \
libmsi \
libmsimg32 \
libmsnet32 \
@@ -1000,6 +1006,11 @@
libmsdmo.a: msdmo/msdmo.spec.def
$(DLLTOOL) -k -l $@ -d msdmo/msdmo.spec.def
+libmshtml.def: mshtml/mshtml.spec.def
+ $(RM) $@ && $(LN_S) mshtml/mshtml.spec.def $@
+libmshtml.a: mshtml/mshtml.spec.def
+ $(DLLTOOL) -k -l $@ -d mshtml/mshtml.spec.def
+
libmsi.def: msi/msi.spec.def
$(RM) $@ && $(LN_S) msi/msi.spec.def $@
libmsi.a: msi/msi.spec.def
@@ -1319,6 +1330,7 @@
mpr/mpr.spec.def: $(WINEBUILD)
msacm/msacm32.spec.def: $(WINEBUILD)
msdmo/msdmo.spec.def: $(WINEBUILD)
+mshtml/mshtml.spec.def: $(WINEBUILD)
msi/msi.spec.def: $(WINEBUILD)
msimg32/msimg32.spec.def: $(WINEBUILD)
msnet32/msnet32.spec.def: $(WINEBUILD)
@@ -1436,6 +1448,7 @@
msacm/msadp32/msadp32.acm$(DLLEXT): msacm/msadp32
msdmo/msdmo.dll$(DLLEXT): msdmo
msacm/msg711/msg711.acm$(DLLEXT): msacm/msg711
+mshtml/mshtml.dll$(DLLEXT): mshtml
msi/msi.dll$(DLLEXT): msi
msimg32/msimg32.dll$(DLLEXT): msimg32
msisys/msisys.ocx$(DLLEXT): msisys
diff --git a/dlls/mshtml/.cvsignore b/dlls/mshtml/.cvsignore
new file mode 100644
index 0000000..18b485b4
--- /dev/null
+++ b/dlls/mshtml/.cvsignore
@@ -0,0 +1,4 @@
+Makefile
+mshtml.dll.dbg.c
+mshtml.spec.c
+mshtml.spec.def
diff --git a/dlls/mshtml/Makefile.in b/dlls/mshtml/Makefile.in
new file mode 100644
index 0000000..fcfaa47
--- /dev/null
+++ b/dlls/mshtml/Makefile.in
@@ -0,0 +1,19 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+MODULE = mshtml.dll
+IMPORTS = user32 advapi32 kernel32 ntdll
+EXTRALIBS = $(LIBUNICODE) $(LIBUUID)
+EXTRADEFS = -DCOM_NO_WINDOWS_H
+
+LDDLLFLAGS = @LDDLLFLAGS@
+SYMBOLFILE = $(MODULE).tmp.o
+
+C_SRCS = \
+ document.c \
+ main.c
+
+@MAKE_DLL_RULES@
+
+### Dependencies:
diff --git a/dlls/mshtml/document.c b/dlls/mshtml/document.c
new file mode 100644
index 0000000..ce9e74e
--- /dev/null
+++ b/dlls/mshtml/document.c
@@ -0,0 +1,767 @@
+/*
+ * HTML Document class
+ *
+ * Copyright 2003 Mike McCormack
+ *
+ * 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
+ */
+
+#include "config.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "winnls.h"
+#include "docobj.h"
+#include "ole2.h"
+#include "uuids.h"
+#include "urlmon.h"
+#include "oleidl.h"
+#include "objidl.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+
+typedef struct _HTMLDocument_impl {
+ ICOM_VTABLE(IPersistMoniker) *IPersistMoniker_vtbl;
+ ICOM_VTABLE(IPersistFile) *IPersistFile_vtbl;
+ ICOM_VTABLE(IPersist) *IPersist_vtbl;
+ ICOM_VTABLE(IOleObject) *IOleObject_vtbl;
+ ICOM_VTABLE(IViewObject) *IViewObject_vtbl;
+ ICOM_VTABLE(IOleDocument) *IOleDocument_vtbl;
+ ULONG ref_count;
+ IOleClientSite *site;
+} HTMLDocument_impl;
+
+
+static ULONG WINAPI HTMLDocument_AddRef(HTMLDocument_impl *This)
+{
+ return ++This->ref_count;
+}
+
+static ULONG WINAPI HTMLDocument_Release(HTMLDocument_impl *This)
+{
+ ULONG count;
+
+ count = --This->ref_count ;
+ if( !count )
+ HeapFree( GetProcessHeap(), 0, This );
+
+ return count;
+}
+
+static HRESULT WINAPI HTMLDocument_QueryInterface(
+ HTMLDocument_impl *This, REFIID riid, LPVOID *ppv)
+{
+ TRACE("%p %s %p\n", This, debugstr_guid(riid), ppv);
+
+ if( IsEqualGUID( riid, &IID_IUnknown ) )
+ {
+ TRACE("returning IUnknown\n");
+ HTMLDocument_AddRef(This);
+ *ppv = This;
+ return S_OK;
+ }
+ if( IsEqualGUID( riid, &IID_IPersistMoniker ) )
+ {
+ TRACE("returning IPersistMoniker\n");
+ HTMLDocument_AddRef(This);
+ *ppv = This;
+ return S_OK;
+ }
+ if( IsEqualGUID( riid, &IID_IPersistFile ) )
+ {
+ TRACE("returning IPersistFile\n");
+ HTMLDocument_AddRef(This);
+ *ppv = &(This->IPersistFile_vtbl);
+ return S_OK;
+ }
+ if( IsEqualGUID( riid, &IID_IOleObject ) )
+ {
+ TRACE("returning IOleObject\n");
+ HTMLDocument_AddRef(This);
+ *ppv = &(This->IOleObject_vtbl);
+ return S_OK;
+ }
+ if( IsEqualGUID( riid, &IID_IPersist ) )
+ {
+ TRACE("returning IPersist\n");
+ HTMLDocument_AddRef(This);
+ *ppv = &(This->IPersist_vtbl);
+ return S_OK;
+ }
+ if( IsEqualGUID( riid, &IID_IViewObject ) )
+ {
+ TRACE("returning IViewObject\n");
+ HTMLDocument_AddRef(This);
+ *ppv = &(This->IViewObject_vtbl);
+ return S_OK;
+ }
+ if( IsEqualGUID( riid, &IID_IOleDocument ) )
+ {
+ TRACE("returning IOleDocument\n");
+ HTMLDocument_AddRef(This);
+ *ppv = &(This->IOleDocument_vtbl);
+ return S_OK;
+ }
+ if( IsEqualGUID( riid, &IID_IDispatch ) )
+ {
+ TRACE("returning IDispatch\n");
+ }
+ if( IsEqualGUID( riid, &IID_IOleCommandTarget ) )
+ {
+ TRACE("returning IOleCommandTarget\n");
+ }
+ return E_NOINTERFACE;
+}
+
+static HRESULT WINAPI fnIPersistMoniker_QueryInterface(
+ IPersistMoniker *iface, REFIID riid, LPVOID *ppv)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ return HTMLDocument_QueryInterface(This, riid, ppv);
+}
+
+static ULONG WINAPI fnIPersistMoniker_AddRef(IPersistMoniker *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ return HTMLDocument_AddRef(This);
+}
+
+static ULONG WINAPI fnIPersistMoniker_Release(IPersistMoniker *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ return HTMLDocument_Release(This);
+}
+
+static HRESULT WINAPI fnIPersistMoniker_GetClassID(IPersistMoniker *iface,
+ CLSID *pClassID )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ FIXME("%p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistMoniker_IsDirty(IPersistMoniker *iface )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ FIXME("%p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistMoniker_Load(IPersistMoniker *iface,
+ BOOL fFullyAvailable, IMoniker *pimkName, LPBC pibc, DWORD grfMode )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ IStream *stm;
+ HRESULT r;
+ unsigned char buffer[0x201];
+ ULONG count;
+
+ TRACE("%p %d %p %p %08lx\n", This,
+ fFullyAvailable, pimkName, pibc, grfMode);
+
+ r = IMoniker_BindToStorage( pimkName, pibc, NULL,
+ &IID_IStream, (LPVOID*) &stm );
+ if( FAILED( r ) )
+ {
+ TRACE("IMoniker_BindToStorage failed %08lx\n", r);
+ return r;
+ }
+
+ while( 1 )
+ {
+ r = IStream_Read( stm, buffer, sizeof buffer-1, &count);
+ if( FAILED( r ) )
+ break;
+ if( count == 0 )
+ break;
+ buffer[count]=0;
+ TRACE("%s\n",buffer);
+ }
+
+ IStream_Release( stm );
+
+ return S_OK;
+}
+
+static HRESULT WINAPI fnIPersistMoniker_Save(IPersistMoniker *iface,
+ IMoniker *pinkName, LPBC pibc, BOOL fRemember )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ FIXME("%p %p %p %d\n", This, pinkName, pibc, fRemember);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistMoniker_SaveCompleted(IPersistMoniker *iface,
+ IMoniker *pinkName, LPBC pibc )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ FIXME("%p %p %p\n", This, pinkName, pibc);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistMoniker_GetCurMoniker(IPersistMoniker *iface,
+ IMoniker **pinkName )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistMoniker_vtbl, iface);
+ FIXME("%p\n", This);
+ return E_NOTIMPL;
+}
+
+static ICOM_VTABLE(IPersistMoniker) IPersistMoniker_vtbl =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ fnIPersistMoniker_QueryInterface,
+ fnIPersistMoniker_AddRef,
+ fnIPersistMoniker_Release,
+ fnIPersistMoniker_GetClassID,
+ fnIPersistMoniker_IsDirty,
+ fnIPersistMoniker_Load,
+ fnIPersistMoniker_Save,
+ fnIPersistMoniker_SaveCompleted,
+ fnIPersistMoniker_GetCurMoniker
+};
+
+static ULONG WINAPI fnIPersistFile_AddRef(IPersistFile *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ return HTMLDocument_AddRef(This);
+}
+
+static ULONG WINAPI fnIPersistFile_Release(IPersistFile *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ return HTMLDocument_Release(This);
+}
+
+static HRESULT WINAPI fnIPersistFile_QueryInterface(
+ IPersistFile *iface, REFIID riid, LPVOID *ppv)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ return HTMLDocument_QueryInterface(This, riid, ppv);
+}
+
+static HRESULT WINAPI fnIPersistFile_GetClassID(IPersistFile *iface,
+ CLSID *pClassID )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+
+ TRACE("%p\n", This);
+
+ memcpy( pClassID, &CLSID_HTMLDocument, sizeof CLSID_HTMLDocument);
+ return S_OK;
+}
+
+static HRESULT WINAPI fnIPersistFile_IsDirty(IPersistFile *iface )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ FIXME("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistFile_Load(IPersistFile *iface,
+ LPCOLESTR pszFileName, DWORD grfMode )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ FIXME("%p %s %08lx\n", This, debugstr_w(pszFileName), grfMode);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistFile_Save(IPersistFile *iface,
+ LPCOLESTR pszFileName, BOOL fRemember )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ FIXME("%p %s %d\n", This, debugstr_w(pszFileName), fRemember);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistFile_SaveCompleted(IPersistFile *iface,
+ LPCOLESTR pszFileName )
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ FIXME("%p %s\n", This, debugstr_w(pszFileName));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIPersistFile_GetCurFile(IPersistFile *iface,
+ LPOLESTR* ppszFileName)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersistFile_vtbl, iface);
+ FIXME("%p %p\n",This,ppszFileName);
+ return E_NOTIMPL;
+}
+
+static ICOM_VTABLE(IPersistFile) IPersistFile_vtbl =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ fnIPersistFile_QueryInterface,
+ fnIPersistFile_AddRef,
+ fnIPersistFile_Release,
+ fnIPersistFile_GetClassID,
+ fnIPersistFile_IsDirty,
+ fnIPersistFile_Load,
+ fnIPersistFile_Save,
+ fnIPersistFile_SaveCompleted,
+ fnIPersistFile_GetCurFile,
+};
+
+static ULONG WINAPI fnIOleObject_AddRef(IOleObject *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ return HTMLDocument_AddRef(This);
+}
+
+static ULONG WINAPI fnIOleObject_Release(IOleObject *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ return HTMLDocument_Release(This);
+}
+
+static HRESULT WINAPI fnIOleObject_QueryInterface(
+ IOleObject *iface, REFIID riid, LPVOID *ppv)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ return HTMLDocument_QueryInterface(This, riid, ppv);
+}
+
+static HRESULT WINAPI fnIOleObject_SetClientSite(IOleObject *iface,
+ IOleClientSite *pClientSite)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+
+ TRACE("%p %p\n",This, pClientSite);
+
+ if( This->site )
+ IOleClientSite_Release( This->site );
+ if( pClientSite )
+ IOleClientSite_AddRef(pClientSite);
+ This->site = pClientSite;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI fnIOleObject_GetClientSite(IOleObject *iface,
+ IOleClientSite **ppClientSite)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+
+ TRACE("%p\n",This);
+
+ if( This->site )
+ IOleClientSite_AddRef( This->site );
+ *ppClientSite = This->site;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI fnIOleObject_SetHostNames(IOleObject *iface,
+ LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_Close(IOleObject *iface,
+ DWORD dwSaveOption)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_SetMoniker(IOleObject *iface,
+ DWORD dwWhichMoniker, IMoniker *pmk)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_GetMoniker(IOleObject *iface,
+ DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_InitFromData(IOleObject *iface,
+ IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_GetClipboardData(IOleObject *iface,
+ DWORD dwReserved, IDataObject **ppDataObject)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_DoVerb(IOleObject *iface,
+ LONG iVerb, struct tagMSG *lpmsg, IOleClientSite *pActiveSite,
+ LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+
+ TRACE("%p %ld %p %p %ld %p %p\n", This,
+ iVerb, lpmsg, pActiveSite, lindex, hwndParent, lprcPosRect);
+
+ switch( iVerb )
+ {
+ case OLEIVERB_SHOW:
+ TRACE("OLEIVERB_SHOW r = (%ld,%ld)-(%ld,%ld)\n",
+ lprcPosRect->left, lprcPosRect->top,
+ lprcPosRect->right, lprcPosRect->bottom );
+ break;
+ }
+
+ /*return E_NOTIMPL; */
+ return S_OK;
+}
+
+static HRESULT WINAPI fnIOleObject_EnumVerbs(IOleObject *iface,
+ IEnumOLEVERB **ppEnumOleVerb)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_Update(IOleObject *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_IsUpToDate(IOleObject *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_GetUserClassID(IOleObject *iface,
+ CLSID *pClsid)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_GetUserType(IOleObject *iface,
+ DWORD dwFormOfType, LPOLESTR *pszUserType)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_SetExtent(IOleObject *iface,
+ DWORD dwDrawAspect, SIZEL *psizel)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_GetExtent(IOleObject *iface,
+ DWORD dwDrawAspect, SIZEL *psizel)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_Advise(IOleObject *iface,
+ IAdviseSink *pAdvSink, DWORD *pdwConnection)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_Unadvise(IOleObject *iface,
+ DWORD dwConnection)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_EnumAdvise(IOleObject *iface,
+ IEnumSTATDATA **ppenumAdvise)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_GetMiscStatus(IOleObject *iface,
+ DWORD dwAspect, DWORD *pdwStatus)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleObject_SetColorScheme(IOleObject *iface,
+ struct tagLOGPALETTE *pLogpal)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleObject_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static ICOM_VTABLE(IOleObject) IOleObject_vtbl =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ fnIOleObject_QueryInterface,
+ fnIOleObject_AddRef,
+ fnIOleObject_Release,
+ fnIOleObject_SetClientSite,
+ fnIOleObject_GetClientSite,
+ fnIOleObject_SetHostNames,
+ fnIOleObject_Close,
+ fnIOleObject_SetMoniker,
+ fnIOleObject_GetMoniker,
+ fnIOleObject_InitFromData,
+ fnIOleObject_GetClipboardData,
+ fnIOleObject_DoVerb,
+ fnIOleObject_EnumVerbs,
+ fnIOleObject_Update,
+ fnIOleObject_IsUpToDate,
+ fnIOleObject_GetUserClassID,
+ fnIOleObject_GetUserType,
+ fnIOleObject_SetExtent,
+ fnIOleObject_GetExtent,
+ fnIOleObject_Advise,
+ fnIOleObject_Unadvise,
+ fnIOleObject_EnumAdvise,
+ fnIOleObject_GetMiscStatus,
+ fnIOleObject_SetColorScheme,
+};
+
+static ULONG WINAPI fnIPersist_AddRef(IPersist *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
+ return HTMLDocument_AddRef(This);
+}
+
+static ULONG WINAPI fnIPersist_Release(IPersist *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
+ return HTMLDocument_Release(This);
+}
+
+static HRESULT WINAPI fnIPersist_QueryInterface(
+ IPersist *iface, REFIID riid, LPVOID *ppv)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
+ return HTMLDocument_QueryInterface(This, riid, ppv);
+}
+
+static HRESULT WINAPI fnIPersist_GetClassID(
+ IPersist *iface, CLSID * pClassID)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IPersist_vtbl, iface);
+ TRACE("%p %p\n", This, pClassID );
+ memcpy( pClassID, &CLSID_HTMLDocument, sizeof CLSID_HTMLDocument);
+ return S_OK;
+}
+
+static ICOM_VTABLE(IPersist) IPersist_vtbl =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ fnIPersist_QueryInterface,
+ fnIPersist_AddRef,
+ fnIPersist_Release,
+ fnIPersist_GetClassID,
+};
+
+static ULONG WINAPI fnIViewObject_AddRef(IViewObject *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ return HTMLDocument_AddRef(This);
+}
+
+static ULONG WINAPI fnIViewObject_Release(IViewObject *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ return HTMLDocument_Release(This);
+}
+
+static HRESULT WINAPI fnIViewObject_QueryInterface(
+ IViewObject *iface, REFIID riid, LPVOID *ppv)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ return HTMLDocument_QueryInterface(This, riid, ppv);
+}
+
+static HRESULT WINAPI fnIViewObject_Draw( IViewObject *iface,
+ DWORD dwDrawAspect, LONG lindex, void *pvAspect,
+ DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw,
+ LPCRECTL lprcBounds, LPCRECTL lprcWBounds,
+ BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+ DWORD dwContinue)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ FIXME("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIViewObject_GetColorSet( IViewObject *iface,
+ DWORD dwDrawAspect, LONG lindex, void *pvAspect,
+ DVTARGETDEVICE *ptd, HDC hicTargetDevice,
+ struct tagLOGPALETTE **ppColorSet)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ FIXME("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIViewObject_Freeze( IViewObject *iface,
+ DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ FIXME("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIViewObject_Unfreeze( IViewObject *iface,
+ DWORD dwFreeze)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ FIXME("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIViewObject_SetAdvise( IViewObject *iface,
+ DWORD aspects, DWORD advf, IAdviseSink *pAdvSink)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ FIXME("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIViewObject_GetAdvise( IViewObject *iface,
+ DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IViewObject_vtbl, iface);
+ FIXME("%p\n",This);
+ return E_NOTIMPL;
+}
+
+
+static ICOM_VTABLE(IViewObject) IViewObject_vtbl =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ fnIViewObject_QueryInterface,
+ fnIViewObject_AddRef,
+ fnIViewObject_Release,
+ fnIViewObject_Draw,
+ fnIViewObject_GetColorSet,
+ fnIViewObject_Freeze,
+ fnIViewObject_Unfreeze,
+ fnIViewObject_SetAdvise,
+ fnIViewObject_GetAdvise,
+};
+
+static ULONG WINAPI fnIOleDocument_AddRef(IOleDocument *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
+ return HTMLDocument_AddRef(This);
+}
+
+static ULONG WINAPI fnIOleDocument_Release(IOleDocument *iface)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
+ return HTMLDocument_Release(This);
+}
+
+static HRESULT WINAPI fnIOleDocument_QueryInterface(
+ IOleDocument *iface, REFIID riid, LPVOID *ppv)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
+ return HTMLDocument_QueryInterface(This, riid, ppv);
+}
+
+static HRESULT WINAPI fnIOleDocument_CreateView(IOleDocument *iface,
+ IOleInPlaceSite *pIPSite, IStream *pstm, DWORD dwReserved,
+ IOleDocumentView **ppView)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleDocument_GetDocMiscStatus(IOleDocument *iface,
+ DWORD *pdwStatus)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI fnIOleDocument_EnumViews(IOleDocument *iface,
+ IEnumOleDocumentViews **ppEnum, IOleDocumentView **ppView)
+{
+ ICOM_THIS_MULTI(HTMLDocument_impl, IOleDocument_vtbl, iface);
+ TRACE("%p\n",This);
+ return E_NOTIMPL;
+}
+
+static ICOM_VTABLE(IOleDocument) IOleDocument_vtbl =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ fnIOleDocument_QueryInterface,
+ fnIOleDocument_AddRef,
+ fnIOleDocument_Release,
+ fnIOleDocument_CreateView,
+ fnIOleDocument_GetDocMiscStatus,
+ fnIOleDocument_EnumViews,
+};
+
+HRESULT HTMLDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
+{
+ HTMLDocument_impl *This;
+
+ TRACE("%p %p\n",pUnkOuter,ppObj);
+
+ This = HeapAlloc(GetProcessHeap(), 0, sizeof (HTMLDocument_impl));
+ This->IPersistMoniker_vtbl = &IPersistMoniker_vtbl;
+ This->IPersistFile_vtbl = &IPersistFile_vtbl;
+ This->IOleObject_vtbl = &IOleObject_vtbl;
+ This->IPersist_vtbl = &IPersist_vtbl;
+ This->IViewObject_vtbl = &IViewObject_vtbl;
+ This->IOleDocument_vtbl = &IOleDocument_vtbl;
+ This->ref_count = 1;
+ This->site = NULL;
+
+ *ppObj = (LPVOID) This;
+
+ TRACE("(%p) <- %p\n", ppObj, This);
+
+ return S_OK;
+}
diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c
new file mode 100644
index 0000000..6dad70b
--- /dev/null
+++ b/dlls/mshtml/main.c
@@ -0,0 +1,198 @@
+/*
+ * MSHTML Class Factory
+ *
+ * Copyright 2002 Lionel Ulmer
+ * Copyright 2003 Mike McCormack
+ *
+ * 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
+ */
+
+#include "config.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "ole2.h"
+
+#include "uuids.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+
+extern HRESULT HTMLDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj);
+
+/* For the moment, do nothing here. */
+BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
+{
+ switch(fdwReason) {
+ case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hInstDLL);
+ break;
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
+/******************************************************************************
+ * MSHTML ClassFactory
+ */
+typedef struct {
+ IClassFactory ITF_IClassFactory;
+
+ DWORD ref;
+ HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
+} IClassFactoryImpl;
+
+struct object_creation_info
+{
+ const CLSID *clsid;
+ LPCSTR szClassName;
+ HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
+};
+
+static const struct object_creation_info object_creation[] =
+{
+ { &CLSID_HTMLDocument, "HTMLDocument", HTMLDocument_create },
+};
+
+static HRESULT WINAPI
+HTMLCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
+{
+ ICOM_THIS(IClassFactoryImpl,iface);
+
+ if (IsEqualGUID(riid, &IID_IUnknown)
+ || IsEqualGUID(riid, &IID_IClassFactory))
+ {
+ IClassFactory_AddRef(iface);
+ *ppobj = This;
+ return S_OK;
+ }
+
+ WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI HTMLCF_AddRef(LPCLASSFACTORY iface) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ return ++(This->ref);
+}
+
+static ULONG WINAPI HTMLCF_Release(LPCLASSFACTORY iface) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+
+ ULONG ref = --This->ref;
+
+ if (ref == 0)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+
+static HRESULT WINAPI HTMLCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
+ REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ HRESULT hres;
+ LPUNKNOWN punk;
+
+ TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
+
+ hres = This->pfnCreateInstance(pOuter, (LPVOID *) &punk);
+ if (FAILED(hres)) {
+ *ppobj = NULL;
+ return hres;
+ }
+ hres = IUnknown_QueryInterface(punk, riid, ppobj);
+ if (FAILED(hres)) {
+ *ppobj = NULL;
+ return hres;
+ }
+ IUnknown_Release(punk);
+ return hres;
+}
+
+static HRESULT WINAPI HTMLCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ FIXME("(%p)->(%d),stub!\n",This,dolock);
+ return S_OK;
+}
+
+static ICOM_VTABLE(IClassFactory) HTMLCF_Vtbl =
+{
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ HTMLCF_QueryInterface,
+ HTMLCF_AddRef,
+ HTMLCF_Release,
+ HTMLCF_CreateInstance,
+ HTMLCF_LockServer
+};
+
+
+HRESULT WINAPI MSHTML_DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
+{
+ int i;
+ IClassFactoryImpl *factory;
+
+ TRACE("%s %s %p\n",debugstr_guid(rclsid), debugstr_guid(iid), ppv);
+
+ if ( !IsEqualGUID( &IID_IClassFactory, iid )
+ && ! IsEqualGUID( &IID_IUnknown, iid) )
+ return E_NOINTERFACE;
+
+ for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
+ {
+ if (IsEqualGUID(object_creation[i].clsid, rclsid))
+ break;
+ }
+
+ if (i == sizeof(object_creation)/sizeof(object_creation[0]))
+ {
+ FIXME("%s: no class found.\n", debugstr_guid(rclsid));
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ TRACE("Creating a class factory for %s\n",object_creation[i].szClassName);
+
+ factory = HeapAlloc(GetProcessHeap(), 0, sizeof(*factory));
+ if (factory == NULL) return E_OUTOFMEMORY;
+
+ factory->ITF_IClassFactory.lpVtbl = &HTMLCF_Vtbl;
+ factory->ref = 1;
+
+ factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
+
+ *ppv = &(factory->ITF_IClassFactory);
+
+ TRACE("(%p) <- %p\n", ppv, &(factory->ITF_IClassFactory) );
+
+ return S_OK;
+}
+
+HRESULT WINAPI MSHTML_DllCanUnloadNow(void)
+{
+ FIXME("\n");
+ return S_FALSE;
+}
+
+/* appears to have the same prototype as WinMain */
+INT WINAPI RunHTMLApplication( HINSTANCE hinst, HINSTANCE hPrevInst,
+ LPCSTR szCmdLine, INT nCmdShow )
+{
+ FIXME("%p %p %s %d\n", hinst, hPrevInst, debugstr_a(szCmdLine), nCmdShow );
+ return 0;
+}
diff --git a/dlls/mshtml/mshtml.spec b/dlls/mshtml/mshtml.spec
new file mode 100644
index 0000000..a5effc0
--- /dev/null
+++ b/dlls/mshtml/mshtml.spec
@@ -0,0 +1,22 @@
+
+1 stub PrintHTML
+2 stub SvrTri_ClearCache
+3 stub CreateHTMLPropertyPage
+4 stdcall -private DllCanUnloadNow() MSHTML_DllCanUnloadNow
+5 stub DllEnumClassObjects
+6 stdcall -private DllGetClassObject(ptr ptr ptr) MSHTML_DllGetClassObject
+7 stub DllInstall
+8 stub DllRegisterServer
+9 stub DllUnregisterServer
+10 stub MatchExactGetIDsOfNames
+11 stub RNIGetCompatibleVersion
+12 stdcall RunHTMLApplication()
+13 stub ShowHTMLDialog
+14 stub ShowModalDialog
+15 stub ShowModelessHTMLDialog
+16 stub SvrTri_GetDLText
+17 stub SvrTri_NormalizeUA
+18 stub com_ms_osp_ospmrshl_classInit
+19 stub com_ms_osp_ospmrshl_copyToExternal
+20 stub com_ms_osp_ospmrshl_releaseByValExternal
+21 stub com_ms_osp_ospmrshl_toJava