Nikolay Sivov : scrrun: Improve OpenTextFile stub.
Alexandre Julliard
julliard at winehq.org
Mon Nov 12 14:14:40 CST 2012
Module: wine
Branch: master
Commit: 49a8d4ecb0cb868451c7ba3ded34d4e69248d8c4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=49a8d4ecb0cb868451c7ba3ded34d4e69248d8c4
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Nov 10 11:43:39 2012 -0500
scrrun: Improve OpenTextFile stub.
---
dlls/scrrun/filesystem.c | 247 +++++++++++++++++++++++++++++++++++++++++-
dlls/scrrun/scrrun_private.h | 1 +
2 files changed, 242 insertions(+), 6 deletions(-)
diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c
index 5a10aa8..cd94c43 100644
--- a/dlls/scrrun/filesystem.c
+++ b/dlls/scrrun/filesystem.c
@@ -38,11 +38,247 @@ struct folder {
LONG ref;
};
+struct textstream {
+ ITextStream ITextStream_iface;
+ LONG ref;
+};
+
static inline struct folder *impl_from_IFolder(IFolder *iface)
{
return CONTAINING_RECORD(iface, struct folder, IFolder_iface);
}
+static inline struct textstream *impl_from_ITextStream(ITextStream *iface)
+{
+ return CONTAINING_RECORD(iface, struct textstream, ITextStream_iface);
+}
+
+static HRESULT WINAPI textstream_QueryInterface(ITextStream *iface, REFIID riid, void **obj)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
+
+ if (IsEqualIID(riid, &IID_ITextStream) ||
+ IsEqualIID(riid, &IID_IDispatch) ||
+ IsEqualIID(riid, &IID_IUnknown))
+ {
+ *obj = iface;
+ ITextStream_AddRef(iface);
+ return S_OK;
+ }
+
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI textstream_AddRef(ITextStream *iface)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+ TRACE("(%p)->(%d)\n", This, ref);
+ return ref;
+}
+
+static ULONG WINAPI textstream_Release(ITextStream *iface)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+ TRACE("(%p)->(%d)\n", This, ref);
+
+ if (!ref)
+ heap_free(This);
+
+ return ref;
+}
+
+static HRESULT WINAPI textstream_GetTypeInfoCount(ITextStream *iface, UINT *pctinfo)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ TRACE("(%p)->(%p)\n", This, pctinfo);
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI textstream_GetTypeInfo(ITextStream *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+ return get_typeinfo(ITextStream_tid, ppTInfo);
+}
+
+static HRESULT WINAPI textstream_GetIDsOfNames(ITextStream *iface, REFIID riid,
+ LPOLESTR *rgszNames, UINT cNames,
+ LCID lcid, DISPID *rgDispId)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
+
+ hr = get_typeinfo(ITextStream_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI textstream_Invoke(ITextStream *iface, DISPID dispIdMember,
+ REFIID riid, LCID lcid, WORD wFlags,
+ DISPPARAMS *pDispParams, VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ ITypeInfo *typeinfo;
+ HRESULT hr;
+
+ TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ hr = get_typeinfo(ITextStream_tid, &typeinfo);
+ if(SUCCEEDED(hr))
+ {
+ hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+ ITypeInfo_Release(typeinfo);
+ }
+
+ return hr;
+}
+
+static HRESULT WINAPI textstream_get_Line(ITextStream *iface, LONG *line)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%p): stub\n", This, line);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_get_Column(ITextStream *iface, LONG *column)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%p): stub\n", This, column);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_get_AtEndOfStream(ITextStream *iface, VARIANT_BOOL *eos)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%p): stub\n", This, eos);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_get_AtEndOfLine(ITextStream *iface, VARIANT_BOOL *eol)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%p): stub\n", This, eol);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_Read(ITextStream *iface, LONG len, BSTR *text)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%p): stub\n", This, text);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_ReadLine(ITextStream *iface, BSTR *text)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%p): stub\n", This, text);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_ReadAll(ITextStream *iface, BSTR *text)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%p): stub\n", This, text);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_Write(ITextStream *iface, BSTR text)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%s): stub\n", This, debugstr_w(text));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_WriteLine(ITextStream *iface, BSTR text)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%s): stub\n", This, debugstr_w(text));
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_WriteBlankLines(ITextStream *iface, LONG lines)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%d): stub\n", This, lines);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_Skip(ITextStream *iface, LONG count)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p)->(%d): stub\n", This, count);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_SkipLine(ITextStream *iface)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p): stub\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI textstream_Close(ITextStream *iface)
+{
+ struct textstream *This = impl_from_ITextStream(iface);
+ FIXME("(%p): stub\n", This);
+ return E_NOTIMPL;
+}
+
+static const ITextStreamVtbl textstreamvtbl = {
+ textstream_QueryInterface,
+ textstream_AddRef,
+ textstream_Release,
+ textstream_GetTypeInfoCount,
+ textstream_GetTypeInfo,
+ textstream_GetIDsOfNames,
+ textstream_Invoke,
+ textstream_get_Line,
+ textstream_get_Column,
+ textstream_get_AtEndOfStream,
+ textstream_get_AtEndOfLine,
+ textstream_Read,
+ textstream_ReadLine,
+ textstream_ReadAll,
+ textstream_Write,
+ textstream_WriteLine,
+ textstream_WriteBlankLines,
+ textstream_Skip,
+ textstream_SkipLine,
+ textstream_Close
+};
+
+static HRESULT create_textstream(ITextStream **ret)
+{
+ struct textstream *stream;
+
+ stream = heap_alloc(sizeof(struct textstream));
+ if (!stream) return E_OUTOFMEMORY;
+
+ stream->ITextStream_iface.lpVtbl = &textstreamvtbl;
+ stream->ref = 1;
+
+ *ret = &stream->ITextStream_iface;
+ return S_OK;
+}
+
static HRESULT WINAPI folder_QueryInterface(IFolder *iface, REFIID riid, void **obj)
{
struct folder *This = impl_from_IFolder(iface);
@@ -651,13 +887,12 @@ static HRESULT WINAPI filesys_CreateTextFile(IFileSystem3 *iface, BSTR FileName,
return E_NOTIMPL;
}
-static HRESULT WINAPI filesys_OpenTextFile(IFileSystem3 *iface, BSTR FileName,
- IOMode IOMode, VARIANT_BOOL Create,
- Tristate Format, ITextStream **ppts)
+static HRESULT WINAPI filesys_OpenTextFile(IFileSystem3 *iface, BSTR filename,
+ IOMode mode, VARIANT_BOOL create,
+ Tristate format, ITextStream **stream)
{
- FIXME("%p %s %d %d %d %p\n", iface, debugstr_w(FileName), IOMode, Create, Format, ppts);
-
- return E_NOTIMPL;
+ FIXME("(%p)->(%s %d %d %d %p)\n", iface, debugstr_w(filename), mode, create, format, stream);
+ return create_textstream(stream);
}
static HRESULT WINAPI filesys_GetStandardStream(IFileSystem3 *iface,
diff --git a/dlls/scrrun/scrrun_private.h b/dlls/scrrun/scrrun_private.h
index 4578c41..adf5317 100644
--- a/dlls/scrrun/scrrun_private.h
+++ b/dlls/scrrun/scrrun_private.h
@@ -27,6 +27,7 @@ typedef enum tid_t
IDictionary_tid,
IFileSystem3_tid,
IFolder_tid,
+ ITextStream_tid,
LAST_tid
} tid_t;
More information about the wine-cvs
mailing list