Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
December 2019
- 73 participants
- 1394 messages
[PATCH 09/10] jscript: Implement ScriptTypeComp_BindType.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 37e851e..999ea56 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -1073,10 +1073,25 @@ static HRESULT WINAPI ScriptTypeComp_BindType(ITypeComp *iface, LPOLESTR szName,
ITypeInfo **ppTInfo, ITypeComp **ppTComp)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ ITypeInfo *disp_typeinfo;
+ ITypeComp *disp_typecomp;
+ HRESULT hr;
- FIXME("(%p)->(%s %08x %p %p)\n", This, debugstr_w(szName), lHashVal, ppTInfo, ppTComp);
+ TRACE("(%p)->(%s %08x %p %p)\n", This, debugstr_w(szName), lHashVal, ppTInfo, ppTComp);
- return E_NOTIMPL;
+ if (!szName || !ppTInfo || !ppTComp)
+ return E_INVALIDARG;
+
+ /* Look into the inherited IDispatch */
+ hr = get_dispatch_typeinfo(&disp_typeinfo);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeInfo_GetTypeComp(disp_typeinfo, &disp_typecomp);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeComp_BindType(disp_typecomp, szName, lHashVal, ppTInfo, ppTComp);
+ ITypeComp_Release(disp_typecomp);
+ return hr;
}
static const ITypeCompVtbl ScriptTypeCompVtbl = {
--
2.21.0
Dec. 9, 2019
[PATCH 08/10] jscript: Implement ScriptTypeComp_Bind.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 49 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 47 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index f7ad023..37e851e 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -1017,11 +1017,56 @@ static HRESULT WINAPI ScriptTypeComp_Bind(ITypeComp *iface, LPOLESTR szName, ULO
ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ UINT flags = wFlags ? wFlags : ~0;
+ ITypeInfo *disp_typeinfo;
+ ITypeComp *disp_typecomp;
+ HRESULT hr;
+ UINT i;
- FIXME("(%p)->(%s %08x %d %p %p %p)\n", This, debugstr_w(szName), lHashVal,
+ TRACE("(%p)->(%s %08x %d %p %p %p)\n", This, debugstr_w(szName), lHashVal,
wFlags, ppTInfo, pDescKind, pBindPtr);
- return E_NOTIMPL;
+ if (!szName || !ppTInfo || !pDescKind || !pBindPtr)
+ return E_INVALIDARG;
+
+ for (i = 0; i < This->num_funcs; i++)
+ {
+ if (wcsicmp(szName, This->funcs[i].prop->name)) continue;
+ if (!(flags & INVOKE_FUNC)) return TYPE_E_TYPEMISMATCH;
+
+ hr = ITypeInfo_GetFuncDesc(&This->ITypeInfo_iface, i, &pBindPtr->lpfuncdesc);
+ if (FAILED(hr)) return hr;
+
+ *pDescKind = DESCKIND_FUNCDESC;
+ *ppTInfo = &This->ITypeInfo_iface;
+ ITypeInfo_AddRef(*ppTInfo);
+ return S_OK;
+ }
+
+ for (i = 0; i < This->num_vars; i++)
+ {
+ if (wcsicmp(szName, This->vars[i]->name)) continue;
+ if (!(flags & INVOKE_PROPERTYGET)) return TYPE_E_TYPEMISMATCH;
+
+ hr = ITypeInfo_GetVarDesc(&This->ITypeInfo_iface, i, &pBindPtr->lpvardesc);
+ if (FAILED(hr)) return hr;
+
+ *pDescKind = DESCKIND_VARDESC;
+ *ppTInfo = &This->ITypeInfo_iface;
+ ITypeInfo_AddRef(*ppTInfo);
+ return S_OK;
+ }
+
+ /* Look into the inherited IDispatch */
+ hr = get_dispatch_typeinfo(&disp_typeinfo);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeInfo_GetTypeComp(disp_typeinfo, &disp_typecomp);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeComp_Bind(disp_typecomp, szName, lHashVal, wFlags, ppTInfo, pDescKind, pBindPtr);
+ ITypeComp_Release(disp_typecomp);
+ return hr;
}
static HRESULT WINAPI ScriptTypeComp_BindType(ITypeComp *iface, LPOLESTR szName, ULONG lHashVal,
--
2.21.0
Dec. 9, 2019
[PATCH 07/10] jscript: Implement ScriptTypeInfo_GetTypeComp.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 64 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 62 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index ddea563..f7ad023 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -613,6 +613,7 @@ struct typeinfo_func {
typedef struct {
ITypeInfo ITypeInfo_iface;
+ ITypeComp ITypeComp_iface;
LONG ref;
UINT num_funcs;
@@ -628,12 +629,19 @@ static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeInfo(ITypeInfo *iface)
return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeInfo_iface);
}
+static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeComp(ITypeComp *iface)
+{
+ return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeComp_iface);
+}
+
static HRESULT WINAPI ScriptTypeInfo_QueryInterface(ITypeInfo *iface, REFIID riid, void **ppv)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ITypeInfo, riid))
*ppv = &This->ITypeInfo_iface;
+ else if (IsEqualGUID(&IID_ITypeComp, riid))
+ *ppv = &This->ITypeComp_iface;
else
{
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
@@ -711,9 +719,13 @@ static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **p
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, ppTComp);
+ TRACE("(%p)->(%p)\n", This, ppTComp);
- return E_NOTIMPL;
+ if (!ppTComp) return E_INVALIDARG;
+
+ *ppTComp = &This->ITypeComp_iface;
+ ITypeInfo_AddRef(iface);
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, FUNCDESC **ppFuncDesc)
@@ -983,6 +995,53 @@ static const ITypeInfoVtbl ScriptTypeInfoVtbl = {
ScriptTypeInfo_ReleaseVarDesc
};
+static HRESULT WINAPI ScriptTypeComp_QueryInterface(ITypeComp *iface, REFIID riid, void **ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ return ITypeInfo_QueryInterface(&This->ITypeInfo_iface, riid, ppv);
+}
+
+static ULONG WINAPI ScriptTypeComp_AddRef(ITypeComp *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ return ITypeInfo_AddRef(&This->ITypeInfo_iface);
+}
+
+static ULONG WINAPI ScriptTypeComp_Release(ITypeComp *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+ return ITypeInfo_Release(&This->ITypeInfo_iface);
+}
+
+static HRESULT WINAPI ScriptTypeComp_Bind(ITypeComp *iface, LPOLESTR szName, ULONG lHashVal, WORD wFlags,
+ ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+
+ FIXME("(%p)->(%s %08x %d %p %p %p)\n", This, debugstr_w(szName), lHashVal,
+ wFlags, ppTInfo, pDescKind, pBindPtr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeComp_BindType(ITypeComp *iface, LPOLESTR szName, ULONG lHashVal,
+ ITypeInfo **ppTInfo, ITypeComp **ppTComp)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeComp(iface);
+
+ FIXME("(%p)->(%s %08x %p %p)\n", This, debugstr_w(szName), lHashVal, ppTInfo, ppTComp);
+
+ return E_NOTIMPL;
+}
+
+static const ITypeCompVtbl ScriptTypeCompVtbl = {
+ ScriptTypeComp_QueryInterface,
+ ScriptTypeComp_AddRef,
+ ScriptTypeComp_Release,
+ ScriptTypeComp_Bind,
+ ScriptTypeComp_BindType
+};
+
static inline jsdisp_t *impl_from_IDispatchEx(IDispatchEx *iface)
{
return CONTAINING_RECORD(iface, jsdisp_t, IDispatchEx_iface);
@@ -1029,6 +1088,7 @@ static HRESULT create_script_typeinfo(jsdisp_t *jsdisp, ITypeInfo **out)
}
typeinfo->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
+ typeinfo->ITypeComp_iface.lpVtbl = &ScriptTypeCompVtbl;
typeinfo->ref = 1;
typeinfo->num_vars = num_vars;
typeinfo->num_funcs = num_funcs;
--
2.21.0
Dec. 9, 2019
[PATCH 06/10] jscript: Implement ScriptTypeInfo_GetIDsOfNames.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 51 +++++++++++++++++++++++++++++++++++--
dlls/jscript/jscript.h | 1 +
dlls/jscript/jscript_main.c | 25 ++++++++++++++++++
3 files changed, 75 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 7847ad6..ddea563 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -802,10 +802,57 @@ static HRESULT WINAPI ScriptTypeInfo_GetIDsOfNames(ITypeInfo *iface, LPOLESTR *r
MEMBERID *pMemId)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ ITypeInfo *disp_typeinfo;
+ const WCHAR *name;
+ HRESULT hr = S_OK;
+ int i, j, arg;
- FIXME("(%p)->(%p %u %p)\n", This, rgszNames, cNames, pMemId);
+ TRACE("(%p)->(%p %u %p)\n", This, rgszNames, cNames, pMemId);
- return E_NOTIMPL;
+ if (!rgszNames || !cNames || !pMemId) return E_INVALIDARG;
+
+ for (i = 0; i < cNames; i++) pMemId[i] = MEMBERID_NIL;
+ name = rgszNames[0];
+
+ for (i = 0; i < This->num_funcs; i++)
+ {
+ struct typeinfo_func *func = &This->funcs[i];
+ unsigned num_args;
+ BSTR *args;
+
+ if (wcsicmp(name, func->prop->name)) continue;
+ pMemId[0] = prop_to_id(This->jsdisp, func->prop);
+
+ args = get_source_function_params(func->disp, &num_args);
+
+ for (j = 1; j < cNames; j++)
+ {
+ name = rgszNames[j];
+ for (arg = num_args; --arg >= 0;)
+ if (!wcsicmp(name, args[arg]))
+ break;
+ if (arg >= 0)
+ pMemId[j] = arg;
+ else
+ hr = DISP_E_UNKNOWNNAME;
+ }
+ return hr;
+ }
+
+ for (i = 0; i < This->num_vars; i++)
+ {
+ dispex_prop_t *var = This->vars[i];
+
+ if (wcsicmp(name, var->name)) continue;
+ pMemId[0] = prop_to_id(This->jsdisp, var);
+ return S_OK;
+ }
+
+ /* Look into the inherited IDispatch */
+ hr = get_dispatch_typeinfo(&disp_typeinfo);
+ if (FAILED(hr)) return hr;
+
+ return ITypeInfo_GetIDsOfNames(disp_typeinfo, rgszNames, cNames, pMemId);
}
static HRESULT WINAPI ScriptTypeInfo_Invoke(ITypeInfo *iface, PVOID pvInstance, MEMBERID memid, WORD wFlags,
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 09ecfb4..6066772 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -87,6 +87,7 @@ static inline LPWSTR heap_strdupW(LPCWSTR str)
typedef struct jsdisp_t jsdisp_t;
extern HINSTANCE jscript_hinstance DECLSPEC_HIDDEN;
+HRESULT get_dispatch_typeinfo(ITypeInfo**) DECLSPEC_HIDDEN;
#define PROPF_ARGMASK 0x00ff
#define PROPF_METHOD 0x0100
diff --git a/dlls/jscript/jscript_main.c b/dlls/jscript/jscript_main.c
index 9f9f412..532cdf9 100644
--- a/dlls/jscript/jscript_main.c
+++ b/dlls/jscript/jscript_main.c
@@ -37,6 +37,30 @@ LONG module_ref = 0;
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
HINSTANCE jscript_hinstance;
+static ITypeInfo *dispatch_typeinfo;
+
+HRESULT get_dispatch_typeinfo(ITypeInfo **out)
+{
+ ITypeInfo *typeinfo;
+ ITypeLib *typelib;
+ HRESULT hr;
+
+ if (!dispatch_typeinfo)
+ {
+ hr = LoadRegTypeLib(&IID_StdOle, STDOLE_MAJORVERNUM, STDOLE_MINORVERNUM, STDOLE_LCID, &typelib);
+ if (FAILED(hr)) return hr;
+
+ hr = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IDispatch, &typeinfo);
+ ITypeLib_Release(typelib);
+ if (FAILED(hr)) return hr;
+
+ if (InterlockedCompareExchangePointer((void**)&dispatch_typeinfo, typeinfo, NULL))
+ ITypeInfo_Release(typeinfo);
+ }
+
+ *out = dispatch_typeinfo;
+ return S_OK;
+}
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
{
@@ -145,6 +169,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
break;
case DLL_PROCESS_DETACH:
if (lpv) break;
+ if (dispatch_typeinfo) ITypeInfo_Release(dispatch_typeinfo);
free_strings();
}
--
2.21.0
Dec. 9, 2019
[PATCH 05/10] jscript: Implement ScriptTypeInfo_GetVarDesc.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 5db7da6..7847ad6 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -752,10 +752,22 @@ static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, F
static HRESULT WINAPI ScriptTypeInfo_GetVarDesc(ITypeInfo *iface, UINT index, VARDESC **ppVarDesc)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ VARDESC *desc;
- FIXME("(%p)->(%u %p)\n", This, index, ppVarDesc);
+ TRACE("(%p)->(%u %p)\n", This, index, ppVarDesc);
- return E_NOTIMPL;
+ if (!ppVarDesc) return E_INVALIDARG;
+ if (index >= This->num_vars) return TYPE_E_ELEMENTNOTFOUND;
+
+ desc = heap_alloc_zero(sizeof(*desc));
+ if (!desc) return E_OUTOFMEMORY;
+
+ desc->memid = prop_to_id(This->jsdisp, This->vars[index]);
+ desc->varkind = VAR_DISPATCH;
+ desc->elemdescVar.tdesc.vt = VT_VARIANT;
+
+ *ppVarDesc = desc;
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetNames(ITypeInfo *iface, MEMBERID memid, BSTR *rgBstrNames,
@@ -894,7 +906,9 @@ static void WINAPI ScriptTypeInfo_ReleaseVarDesc(ITypeInfo *iface, VARDESC *pVar
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, pVarDesc);
+ TRACE("(%p)->(%p)\n", This, pVarDesc);
+
+ heap_free(pVarDesc);
}
static const ITypeInfoVtbl ScriptTypeInfoVtbl = {
--
2.21.0
Dec. 9, 2019
[PATCH 04/10] jscript: Implement ScriptTypeInfo_GetFuncDesc.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 32 +++++++++++++++++++++++++++++---
dlls/jscript/function.c | 8 ++++++++
dlls/jscript/jscript.h | 1 +
3 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 1f28538..5db7da6 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -719,10 +719,34 @@ static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **p
static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, FUNCDESC **ppFuncDesc)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ struct typeinfo_func *func;
+ unsigned num_args, i;
+ FUNCDESC *desc;
- FIXME("(%p)->(%u %p)\n", This, index, ppFuncDesc);
+ TRACE("(%p)->(%u %p)\n", This, index, ppFuncDesc);
- return E_NOTIMPL;
+ if (!ppFuncDesc) return E_INVALIDARG;
+ if (index >= This->num_funcs) return TYPE_E_ELEMENTNOTFOUND;
+ func = &This->funcs[index];
+ get_source_function_params(func->disp, &num_args);
+
+ /* Store the parameter array after the FUNCDESC structure */
+ desc = heap_alloc_zero(sizeof(*desc) + sizeof(ELEMDESC) * num_args);
+ if (!desc) return E_OUTOFMEMORY;
+
+ desc->memid = prop_to_id(This->jsdisp, func->prop);
+ desc->funckind = FUNC_DISPATCH;
+ desc->invkind = INVOKE_FUNC;
+ desc->callconv = CC_STDCALL;
+ desc->cParams = num_args;
+ desc->elemdescFunc.tdesc.vt = VT_VARIANT;
+
+ if (num_args) desc->lprgelemdescParam = (ELEMDESC*)(desc + 1);
+ for (i = 0; i < num_args; i++)
+ desc->lprgelemdescParam[i].tdesc.vt = VT_VARIANT;
+
+ *ppFuncDesc = desc;
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetVarDesc(ITypeInfo *iface, UINT index, VARDESC **ppVarDesc)
@@ -861,7 +885,9 @@ static void WINAPI ScriptTypeInfo_ReleaseFuncDesc(ITypeInfo *iface, FUNCDESC *pF
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, pFuncDesc);
+ TRACE("(%p)->(%p)\n", This, pFuncDesc);
+
+ heap_free(pFuncDesc);
}
static void WINAPI ScriptTypeInfo_ReleaseVarDesc(ITypeInfo *iface, VARDESC *pVarDesc)
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 98d1259..c2d058b 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -808,6 +808,14 @@ BOOL is_source_function(jsdisp_t *jsdisp)
return function_from_jsdisp(jsdisp)->vtbl == &InterpretedFunctionVtbl;
}
+BSTR *get_source_function_params(jsdisp_t *jsdisp, unsigned *param_cnt)
+{
+ InterpretedFunction *func = (InterpretedFunction*)function_from_jsdisp(jsdisp);
+
+ *param_cnt = func->func_code->param_cnt;
+ return func->func_code->params;
+}
+
static HRESULT BindFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDispatch *this_obj, unsigned flags,
unsigned argc, jsval_t *argv, jsval_t *r)
{
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 91923f8..09ecfb4 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -304,6 +304,7 @@ HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const WCHAR*,cons
HRESULT create_builtin_constructor(script_ctx_t*,builtin_invoke_t,const WCHAR*,const builtin_info_t*,DWORD,
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN;
BOOL is_source_function(jsdisp_t*) DECLSPEC_HIDDEN;
+BSTR *get_source_function_params(jsdisp_t*,unsigned*) DECLSPEC_HIDDEN;
HRESULT Function_invoke(jsdisp_t*,IDispatch*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
HRESULT Function_value(script_ctx_t*,vdisp_t*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
--
2.21.0
Dec. 9, 2019
[PATCH 03/10] jscript: Implement ScriptTypeInfo_GetTypeAttr.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 36 +++++++++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 2c309cd..1f28538 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -24,6 +24,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+static const GUID GUID_JScriptTypeInfo = {0xc59c6b12,0xf6c1,0x11cf,{0x88,0x35,0x00,0xa0,0xc9,0x11,0xe8,0xb2}};
+
#define FDEX_VERSION_MASK 0xf0000000
#define GOLDEN_RATIO 0x9E3779B9U
@@ -677,10 +679,32 @@ static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface)
static HRESULT WINAPI ScriptTypeInfo_GetTypeAttr(ITypeInfo *iface, TYPEATTR **ppTypeAttr)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
-
- FIXME("(%p)->(%p)\n", This, ppTypeAttr);
-
- return E_NOTIMPL;
+ TYPEATTR *attr;
+
+ TRACE("(%p)->(%p)\n", This, ppTypeAttr);
+
+ if (!ppTypeAttr) return E_INVALIDARG;
+
+ attr = heap_alloc_zero(sizeof(*attr));
+ if (!attr) return E_OUTOFMEMORY;
+
+ attr->guid = GUID_JScriptTypeInfo;
+ attr->lcid = LOCALE_USER_DEFAULT;
+ attr->memidConstructor = MEMBERID_NIL;
+ attr->memidDestructor = MEMBERID_NIL;
+ attr->cbSizeInstance = 4;
+ attr->typekind = TKIND_DISPATCH;
+ attr->cFuncs = This->num_funcs;
+ attr->cVars = This->num_vars;
+ attr->cImplTypes = 1;
+ attr->cbSizeVft = sizeof(IDispatchVtbl);
+ attr->cbAlignment = 4;
+ attr->wTypeFlags = TYPEFLAG_FDISPATCHABLE;
+ attr->wMajorVerNum = JSCRIPT_MAJOR_VERSION;
+ attr->wMinorVerNum = JSCRIPT_MINOR_VERSION;
+
+ *ppTypeAttr = attr;
+ return S_OK;
}
static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **ppTComp)
@@ -828,7 +852,9 @@ static void WINAPI ScriptTypeInfo_ReleaseTypeAttr(ITypeInfo *iface, TYPEATTR *pT
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
- FIXME("(%p)->(%p)\n", This, pTypeAttr);
+ TRACE("(%p)->(%p)\n", This, pTypeAttr);
+
+ heap_free(pTypeAttr);
}
static void WINAPI ScriptTypeInfo_ReleaseFuncDesc(ITypeInfo *iface, FUNCDESC *pFuncDesc)
--
2.21.0
Dec. 9, 2019
[PATCH 02/10] jscript: Store the necessary function and variable info in the script TypeInfo.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 109 ++++++++++++++++++++++++++++++++++++++++
dlls/jscript/function.c | 5 ++
dlls/jscript/jscript.h | 1 +
3 files changed, 115 insertions(+)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 68e4e1c..2c309cd 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -70,6 +70,20 @@ static inline dispex_prop_t *get_prop(jsdisp_t *This, DISPID id)
return This->props+id;
}
+static inline BOOL is_function_prop(dispex_prop_t *prop)
+{
+ BOOL ret = FALSE;
+
+ if (is_object_instance(prop->u.val))
+ {
+ jsdisp_t *jsdisp = iface_to_jsdisp(get_object(prop->u.val));
+
+ if (jsdisp) ret = is_class(jsdisp, JSCLASS_FUNCTION);
+ jsdisp_release(jsdisp);
+ }
+ return ret;
+}
+
static DWORD get_flags(jsdisp_t *This, dispex_prop_t *prop)
{
if(prop->type == PROP_PROTREF) {
@@ -590,9 +604,21 @@ static HRESULT fill_protrefs(jsdisp_t *This)
return S_OK;
}
+struct typeinfo_func {
+ dispex_prop_t *prop;
+ jsdisp_t *disp;
+};
+
typedef struct {
ITypeInfo ITypeInfo_iface;
LONG ref;
+
+ UINT num_funcs;
+ UINT num_vars;
+ struct typeinfo_func *funcs;
+ dispex_prop_t **vars;
+
+ jsdisp_t *jsdisp;
} ScriptTypeInfo;
static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeInfo(ITypeInfo *iface)
@@ -632,11 +658,17 @@ static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface)
{
ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
LONG ref = InterlockedDecrement(&This->ref);
+ UINT i;
TRACE("(%p) ref=%d\n", This, ref);
if (!ref)
{
+ for (i = This->num_funcs; i--;)
+ IDispatchEx_Release(&This->funcs[i].disp->IDispatchEx_iface);
+ IDispatchEx_Release(&This->jsdisp->IDispatchEx_iface);
+ heap_free(This->funcs);
+ heap_free(This->vars);
heap_free(This);
}
return ref;
@@ -845,13 +877,90 @@ static inline jsdisp_t *impl_from_IDispatchEx(IDispatchEx *iface)
static HRESULT create_script_typeinfo(jsdisp_t *jsdisp, ITypeInfo **out)
{
+ dispex_prop_t *prop, *cur, *end, **typevar;
+ UINT num_funcs = 0, num_vars = 0;
+ struct typeinfo_func *typefunc;
ScriptTypeInfo *typeinfo;
+ jsdisp_t *fn;
+ unsigned pos;
if (!(typeinfo = heap_alloc(sizeof(*typeinfo))))
return E_OUTOFMEMORY;
+ for (prop = jsdisp->props, end = prop + jsdisp->prop_cnt; prop != end; prop++)
+ {
+ if (!prop->name || prop->type != PROP_JSVAL || !(prop->flags & PROPF_ENUMERABLE))
+ continue;
+
+ /* If two identifiers differ only by case, the TypeInfo fails */
+ pos = jsdisp->props[get_props_idx(jsdisp, prop->hash)].bucket_head;
+ while (pos)
+ {
+ cur = jsdisp->props + pos;
+
+ if (prop->hash == cur->hash && prop != cur &&
+ cur->type == PROP_JSVAL && (cur->flags & PROPF_ENUMERABLE) &&
+ !wcsicmp(prop->name, cur->name))
+ {
+ return TYPE_E_AMBIGUOUSNAME;
+ }
+ pos = cur->bucket_next;
+ }
+
+ if (is_function_prop(prop))
+ {
+ fn = impl_from_IDispatchEx((IDispatchEx*)get_object(prop->u.val));
+ if (is_source_function(fn)) num_funcs++;
+ }
+ else num_vars++;
+ }
+
typeinfo->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
typeinfo->ref = 1;
+ typeinfo->num_vars = num_vars;
+ typeinfo->num_funcs = num_funcs;
+ typeinfo->jsdisp = jsdisp;
+
+ typeinfo->funcs = heap_alloc(sizeof(*typeinfo->funcs) * num_funcs);
+ if (!typeinfo->funcs)
+ {
+ heap_free(typeinfo);
+ return E_OUTOFMEMORY;
+ }
+
+ typeinfo->vars = heap_alloc(sizeof(*typeinfo->vars) * num_vars);
+ if (!typeinfo->vars)
+ {
+ heap_free(typeinfo->funcs);
+ heap_free(typeinfo);
+ return E_OUTOFMEMORY;
+ }
+
+ typefunc = typeinfo->funcs;
+ typevar = typeinfo->vars;
+ for (prop = jsdisp->props; prop != end; prop++)
+ {
+ if (!prop->name || prop->type != PROP_JSVAL || !(prop->flags & PROPF_ENUMERABLE))
+ continue;
+
+ if (is_function_prop(prop))
+ {
+ fn = impl_from_IDispatchEx((IDispatchEx*)get_object(prop->u.val));
+ if (!is_source_function(fn)) continue;
+
+ typefunc->prop = prop;
+ typefunc->disp = fn;
+ typefunc++;
+
+ /* The function's object may be deleted, so keep it alive */
+ IDispatchEx_AddRef(&fn->IDispatchEx_iface);
+ }
+ else
+ *typevar++ = prop;
+ }
+
+ /* Keep a ref to the props and their names */
+ IDispatchEx_AddRef(&jsdisp->IDispatchEx_iface);
*out = &typeinfo->ITypeInfo_iface;
return S_OK;
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 7a44f50..98d1259 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -803,6 +803,11 @@ HRESULT create_source_function(script_ctx_t *ctx, bytecode_t *code, function_cod
return S_OK;
}
+BOOL is_source_function(jsdisp_t *jsdisp)
+{
+ return function_from_jsdisp(jsdisp)->vtbl == &InterpretedFunctionVtbl;
+}
+
static HRESULT BindFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDispatch *this_obj, unsigned flags,
unsigned argc, jsval_t *argv, jsval_t *r)
{
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 5d635b7..91923f8 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -303,6 +303,7 @@ HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const WCHAR*,cons
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN;
HRESULT create_builtin_constructor(script_ctx_t*,builtin_invoke_t,const WCHAR*,const builtin_info_t*,DWORD,
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN;
+BOOL is_source_function(jsdisp_t*) DECLSPEC_HIDDEN;
HRESULT Function_invoke(jsdisp_t*,IDispatch*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
HRESULT Function_value(script_ctx_t*,vdisp_t*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
--
2.21.0
Dec. 9, 2019
[PATCH 01/10] jscript: Add script TypeInfo stub.
by Gabriel Ivăncescu
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
---
dlls/jscript/dispex.c | 272 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 271 insertions(+), 1 deletion(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 463fd2f..68e4e1c 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -590,11 +590,273 @@ static HRESULT fill_protrefs(jsdisp_t *This)
return S_OK;
}
+typedef struct {
+ ITypeInfo ITypeInfo_iface;
+ LONG ref;
+} ScriptTypeInfo;
+
+static inline ScriptTypeInfo *ScriptTypeInfo_from_ITypeInfo(ITypeInfo *iface)
+{
+ return CONTAINING_RECORD(iface, ScriptTypeInfo, ITypeInfo_iface);
+}
+
+static HRESULT WINAPI ScriptTypeInfo_QueryInterface(ITypeInfo *iface, REFIID riid, void **ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ITypeInfo, riid))
+ *ppv = &This->ITypeInfo_iface;
+ else
+ {
+ WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI ScriptTypeInfo_AddRef(ITypeInfo *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ LONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI ScriptTypeInfo_Release(ITypeInfo *iface)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+ LONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ if (!ref)
+ {
+ heap_free(This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetTypeAttr(ITypeInfo *iface, TYPEATTR **ppTypeAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTypeAttr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetTypeComp(ITypeInfo *iface, ITypeComp **ppTComp)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, ppTComp);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetFuncDesc(ITypeInfo *iface, UINT index, FUNCDESC **ppFuncDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, ppFuncDesc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetVarDesc(ITypeInfo *iface, UINT index, VARDESC **ppVarDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, ppVarDesc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetNames(ITypeInfo *iface, MEMBERID memid, BSTR *rgBstrNames,
+ UINT cMaxNames, UINT *pcNames)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p %u %p)\n", This, memid, rgBstrNames, cMaxNames, pcNames);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetRefTypeOfImplType(ITypeInfo *iface, UINT index, HREFTYPE *pRefType)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, pRefType);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetImplTypeFlags(ITypeInfo *iface, UINT index, INT *pImplTypeFlags)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%u %p)\n", This, index, pImplTypeFlags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetIDsOfNames(ITypeInfo *iface, LPOLESTR *rgszNames, UINT cNames,
+ MEMBERID *pMemId)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %u %p)\n", This, rgszNames, cNames, pMemId);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_Invoke(ITypeInfo *iface, PVOID pvInstance, MEMBERID memid, WORD wFlags,
+ DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %d %d %p %p %p %p)\n", This, pvInstance, memid, wFlags,
+ pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetDocumentation(ITypeInfo *iface, MEMBERID memid, BSTR *pBstrName,
+ BSTR *pBstrDocString, DWORD *pdwHelpContext, BSTR *pBstrHelpFile)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p %p %p %p)\n", This, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetDllEntry(ITypeInfo *iface, MEMBERID memid, INVOKEKIND invKind,
+ BSTR *pBstrDllName, BSTR *pBstrName, WORD *pwOrdinal)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %d %p %p %p)\n", This, memid, invKind, pBstrDllName, pBstrName, pwOrdinal);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetRefTypeInfo(ITypeInfo *iface, HREFTYPE hRefType, ITypeInfo **ppTInfo)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%x %p)\n", This, hRefType, ppTInfo);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_AddressOfMember(ITypeInfo *iface, MEMBERID memid, INVOKEKIND invKind, PVOID *ppv)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %d %p)\n", This, memid, invKind, ppv);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_CreateInstance(ITypeInfo *iface, IUnknown *pUnkOuter, REFIID riid, PVOID *ppvObj)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %s %p)\n", This, pUnkOuter, debugstr_guid(riid), ppvObj);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetMops(ITypeInfo *iface, MEMBERID memid, BSTR *pBstrMops)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%d %p)\n", This, memid, pBstrMops);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ScriptTypeInfo_GetContainingTypeLib(ITypeInfo *iface, ITypeLib **ppTLib, UINT *pIndex)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p %p)\n", This, ppTLib, pIndex);
+
+ return E_NOTIMPL;
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseTypeAttr(ITypeInfo *iface, TYPEATTR *pTypeAttr)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pTypeAttr);
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseFuncDesc(ITypeInfo *iface, FUNCDESC *pFuncDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pFuncDesc);
+}
+
+static void WINAPI ScriptTypeInfo_ReleaseVarDesc(ITypeInfo *iface, VARDESC *pVarDesc)
+{
+ ScriptTypeInfo *This = ScriptTypeInfo_from_ITypeInfo(iface);
+
+ FIXME("(%p)->(%p)\n", This, pVarDesc);
+}
+
+static const ITypeInfoVtbl ScriptTypeInfoVtbl = {
+ ScriptTypeInfo_QueryInterface,
+ ScriptTypeInfo_AddRef,
+ ScriptTypeInfo_Release,
+ ScriptTypeInfo_GetTypeAttr,
+ ScriptTypeInfo_GetTypeComp,
+ ScriptTypeInfo_GetFuncDesc,
+ ScriptTypeInfo_GetVarDesc,
+ ScriptTypeInfo_GetNames,
+ ScriptTypeInfo_GetRefTypeOfImplType,
+ ScriptTypeInfo_GetImplTypeFlags,
+ ScriptTypeInfo_GetIDsOfNames,
+ ScriptTypeInfo_Invoke,
+ ScriptTypeInfo_GetDocumentation,
+ ScriptTypeInfo_GetDllEntry,
+ ScriptTypeInfo_GetRefTypeInfo,
+ ScriptTypeInfo_AddressOfMember,
+ ScriptTypeInfo_CreateInstance,
+ ScriptTypeInfo_GetMops,
+ ScriptTypeInfo_GetContainingTypeLib,
+ ScriptTypeInfo_ReleaseTypeAttr,
+ ScriptTypeInfo_ReleaseFuncDesc,
+ ScriptTypeInfo_ReleaseVarDesc
+};
+
static inline jsdisp_t *impl_from_IDispatchEx(IDispatchEx *iface)
{
return CONTAINING_RECORD(iface, jsdisp_t, IDispatchEx_iface);
}
+static HRESULT create_script_typeinfo(jsdisp_t *jsdisp, ITypeInfo **out)
+{
+ ScriptTypeInfo *typeinfo;
+
+ if (!(typeinfo = heap_alloc(sizeof(*typeinfo))))
+ return E_OUTOFMEMORY;
+
+ typeinfo->ITypeInfo_iface.lpVtbl = &ScriptTypeInfoVtbl;
+ typeinfo->ref = 1;
+
+ *out = &typeinfo->ITypeInfo_iface;
+ return S_OK;
+}
+
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
{
jsdisp_t *This = impl_from_IDispatchEx(iface);
@@ -649,7 +911,15 @@ static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LC
ITypeInfo **ppTInfo)
{
jsdisp_t *This = impl_from_IDispatchEx(iface);
- FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+
+ TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+
+ if (iTInfo != 0) return DISP_E_BADINDEX;
+
+ if (This == This->ctx->global)
+ return create_script_typeinfo(This, ppTInfo);
+
+ FIXME("non-global not implemented\n");
return E_NOTIMPL;
}
--
2.21.0
Dec. 9, 2019
[PATCH] comctl32/listview: Use wcsnicmp() instead of a local helper.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/comctl32/listview.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index eb42526f57..2dd25908db 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -539,12 +539,6 @@ static inline int textcmpWT(LPCWSTR aw, LPCWSTR bt, BOOL isW)
return 1;
}
-
-static inline int lstrncmpiW(LPCWSTR s1, LPCWSTR s2, int n)
-{
- n = min(min(n, lstrlenW(s1)), lstrlenW(s2));
- return CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNORECASE, s1, n, s2, n) - CSTR_EQUAL;
-}
/******** Debugging functions *****************************************/
@@ -1953,7 +1947,7 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L
item.cchTextMax = MAX_PATH;
if (!LISTVIEW_GetItemW(infoPtr, &item)) return 0;
- if (!lstrncmpiW(item.pszText, infoPtr->szSearchParam, infoPtr->nSearchParamLength))
+ if (!wcsnicmp(item.pszText, infoPtr->szSearchParam, infoPtr->nSearchParamLength))
{
nItem = i;
break;
@@ -1961,7 +1955,7 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L
/* this is used to find first char match when search string is not available yet,
otherwise every WM_CHAR will search to next item by first char, ignoring that we're
already waiting for user to complete a string */
- else if (nItem == -1 && infoPtr->nSearchParamLength == 1 && !lstrncmpiW(item.pszText, infoPtr->szSearchParam, 1))
+ else if (nItem == -1 && infoPtr->nSearchParamLength == 1 && !wcsnicmp(item.pszText, infoPtr->szSearchParam, 1))
{
/* this would work but we must keep looking for a longer match */
nItem = i;
--
2.24.0
Dec. 9, 2019
[PATCH] wbemprox: Use a terminated string in parse_resource.
by Hans Leidekker
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48245
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/wbemprox/wbemlocator.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/wbemprox/wbemlocator.c b/dlls/wbemprox/wbemlocator.c
index 99d90c357f..18c37275ed 100644
--- a/dlls/wbemprox/wbemlocator.c
+++ b/dlls/wbemprox/wbemlocator.c
@@ -98,7 +98,7 @@ static BOOL is_local_machine( const WCHAR *server )
static HRESULT parse_resource( const WCHAR *resource, WCHAR **server, WCHAR **namespace )
{
- static const WCHAR rootW[] = {'R','O','O','T'};
+ static const WCHAR rootW[] = {'R','O','O','T',0};
static const WCHAR cimv2W[] = {'C','I','M','V','2',0};
static const WCHAR defaultW[] = {'D','E','F','A','U','L','T',0};
HRESULT hr = WBEM_E_INVALID_NAMESPACE;
@@ -131,7 +131,7 @@ static HRESULT parse_resource( const WCHAR *resource, WCHAR **server, WCHAR **na
p = q;
while (*q && *q != '\\' && *q != '/') q++;
len = q - p;
- if (len >= ARRAY_SIZE( rootW ) && wcsnicmp( rootW, p, len )) goto done;
+ if (len >= ARRAY_SIZE( rootW ) - 1 && wcsnicmp( rootW, p, len )) goto done;
if (!*q)
{
hr = S_OK;
--
2.20.1
Dec. 9, 2019
Re: [PATCH] winhttp/tests: Fix the spelling of ok() and skip() messages and a comment.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61639
Your paranoid android.
=== w2003std (32 bit report) ===
winhttp:
winhttp.c:3581: Test failed: got 12152
winhttp.c:3591: Test failed: got 12019
winhttp.c:3592: Test failed: got 3735928559
winhttp.c:3597: Test failed: got 12019
winhttp.c:3598: Test failed: got L""
winhttp.c:3603: Test failed: got 12019
Dec. 9, 2019
[PATCH 5/5] msado15: Implement _Stream_get_Size.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/stream.c | 9 +++++++--
dlls/msado15/tests/msado15.c | 15 ++++++++++++++-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index eb384fbf94..0c4d9ea425 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -113,8 +113,13 @@ static HRESULT WINAPI stream_Invoke( _Stream *iface, DISPID member, REFIID riid,
static HRESULT WINAPI stream_get_Size( _Stream *iface, LONG *size )
{
- FIXME( "%p, %p\n", iface, size );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ TRACE( "%p, %p\n", stream, size );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+
+ *size = stream->size;
+ return S_OK;
}
static HRESULT WINAPI stream_get_EOS( _Stream *iface, VARIANT_BOOL *eos )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index c7563228de..1755a7f3da 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -50,7 +50,7 @@ static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
- LONG refs, pos;
+ LONG refs, size, pos;
ObjectStateEnum state;
VARIANT missing, val;
HRESULT hr;
@@ -58,6 +58,9 @@ static void test_Stream(void)
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
ok( hr == S_OK, "got %08x\n", hr );
+ hr = _Stream_get_Size( stream, &size );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
hr = _Stream_get_Position( stream, &pos );
ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
@@ -103,11 +106,21 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateOpen, "got %u\n", state );
+ size = -1;
+ hr = _Stream_get_Size( stream, &size );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !size, "got %d\n", size );
+
pos = -1;
hr = _Stream_get_Position( stream, &pos );
ok( hr == S_OK, "got %08x\n", hr );
ok( !pos, "got %d\n", pos );
+ size = -1;
+ hr = _Stream_get_Size( stream, &size );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !size, "got %d\n", size );
+
hr = _Stream_Read( stream, 2, &val );
ok( hr == MAKE_ADO_HRESULT( adErrIllegalOperation ), "got %08x\n", hr );
--
2.20.1
Dec. 9, 2019
[PATCH 4/5] msado15: Implement _Stream_get_Position and _Stream_put_Position.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/stream.c | 22 +++++++++++++++++----
dlls/msado15/tests/msado15.c | 37 +++++++++++++++++++++++++++++++++++-
2 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index d5a129f869..eb384fbf94 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -125,8 +125,13 @@ static HRESULT WINAPI stream_get_EOS( _Stream *iface, VARIANT_BOOL *eos )
static HRESULT WINAPI stream_get_Position( _Stream *iface, LONG *pos )
{
- FIXME( "%p, %p\n", iface, pos );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ TRACE( "%p, %p\n", stream, pos );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+
+ *pos = stream->pos;
+ return S_OK;
}
static HRESULT resize_buffer( struct stream *stream, LONG size )
@@ -145,8 +150,17 @@ static HRESULT resize_buffer( struct stream *stream, LONG size )
static HRESULT WINAPI stream_put_Position( _Stream *iface, LONG pos )
{
- FIXME( "%p, %d\n", iface, pos );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ HRESULT hr;
+
+ TRACE( "%p, %d\n", stream, pos );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ if (pos < 0) return MAKE_ADO_HRESULT( adErrInvalidArgument );
+
+ if ((hr = resize_buffer( stream, stream->pos )) != S_OK) return hr;
+ stream->pos = pos;
+ return S_OK;
}
static HRESULT WINAPI stream_get_Type( _Stream *iface, StreamTypeEnum *type )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index 257d1c26fa..c7563228de 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -50,7 +50,7 @@ static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
- LONG refs;
+ LONG refs, pos;
ObjectStateEnum state;
VARIANT missing, val;
HRESULT hr;
@@ -58,6 +58,12 @@ static void test_Stream(void)
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
ok( hr == S_OK, "got %08x\n", hr );
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
+ hr = _Stream_put_Position( stream, 0 );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
/* check default type */
type = 0;
hr = _Stream_get_Type( stream, &type );
@@ -97,9 +103,19 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateOpen, "got %u\n", state );
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !pos, "got %d\n", pos );
+
hr = _Stream_Read( stream, 2, &val );
ok( hr == MAKE_ADO_HRESULT( adErrIllegalOperation ), "got %08x\n", hr );
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( !pos, "got %d\n", pos );
+
hr = _Stream_Close( stream );
ok( hr == S_OK, "got %08x\n", hr );
@@ -139,6 +155,25 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
VariantClear( &val );
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( pos == 4, "got %d\n", pos );
+
+ hr = _Stream_put_Position( stream, 0 );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ VariantInit( &val );
+ hr = _Stream_Read( stream, adReadAll, &val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( V_VT( &val ) == (VT_ARRAY | VT_UI1), "got %04x\n", V_VT( &val ) );
+ VariantClear( &val );
+
+ pos = -1;
+ hr = _Stream_get_Position( stream, &pos );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( pos == 4, "got %d\n", pos );
+
refs = _Stream_Release( stream );
ok( !refs, "got %d\n", refs );
}
--
2.20.1
Dec. 9, 2019
[PATCH 3/5] msado15: Implement _Stream_Read and _Stream_Write.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/msado15_private.h | 6 +++
dlls/msado15/stream.c | 95 +++++++++++++++++++++++++++++++---
dlls/msado15/tests/msado15.c | 57 +++++++++++++++++++-
3 files changed, 149 insertions(+), 9 deletions(-)
diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h
index f901791ea9..1078cbf64e 100644
--- a/dlls/msado15/msado15_private.h
+++ b/dlls/msado15/msado15_private.h
@@ -25,4 +25,10 @@ HRESULT Connection_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Recordset_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Stream_create( void ** ) DECLSPEC_HIDDEN;
+static inline void *heap_realloc_zero( void *mem, SIZE_T len )
+{
+ if (!mem) return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len );
+ return HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, mem, len );
+}
+
#endif /* _WINE_MSADO15_PRIVATE_H_ */
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index cc67e930a4..d5a129f869 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -32,10 +32,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(msado15);
struct stream
{
- _Stream Stream_iface;
- LONG refs;
- ObjectStateEnum state;
- StreamTypeEnum type;
+ _Stream Stream_iface;
+ LONG refs;
+ ObjectStateEnum state;
+ StreamTypeEnum type;
+ LONG size;
+ LONG allocated;
+ LONG pos;
+ BYTE *buf;
};
static inline struct stream *impl_from_Stream( _Stream *iface )
@@ -56,6 +60,7 @@ static ULONG WINAPI stream_Release( _Stream *iface )
if (!refs)
{
TRACE( "destroying %p\n", stream );
+ heap_free( stream->buf );
heap_free( stream );
}
return refs;
@@ -124,6 +129,20 @@ static HRESULT WINAPI stream_get_Position( _Stream *iface, LONG *pos )
return E_NOTIMPL;
}
+static HRESULT resize_buffer( struct stream *stream, LONG size )
+{
+ if (stream->allocated < size)
+ {
+ BYTE *tmp;
+ LONG new_size = max( size, stream->allocated * 2 );
+ if (!(tmp = heap_realloc_zero( stream->buf, new_size ))) return E_OUTOFMEMORY;
+ stream->buf = tmp;
+ stream->allocated = new_size;
+ }
+ stream->size = size;
+ return S_OK;
+}
+
static HRESULT WINAPI stream_put_Position( _Stream *iface, LONG pos )
{
FIXME( "%p, %d\n", iface, pos );
@@ -193,10 +212,49 @@ static HRESULT WINAPI stream_put_Charset( _Stream *iface, BSTR charset )
return E_NOTIMPL;
}
+static HRESULT create_byte_array( BYTE *data, LONG len, VARIANT *ret )
+{
+ SAFEARRAY *vector;
+ LONG i;
+ HRESULT hr;
+
+ if (!len)
+ {
+ V_VT( ret ) = VT_NULL;
+ return S_OK;
+ }
+ if (!(vector = SafeArrayCreateVector( VT_UI1, 0, len ))) return E_OUTOFMEMORY;
+ for (i = 0; i < len; i++)
+ {
+ if ((hr = SafeArrayPutElement( vector, &i, &data[i] )) != S_OK)
+ {
+ SafeArrayDestroy( vector );
+ return hr;
+ }
+ }
+
+ V_VT( ret ) = VT_ARRAY | VT_UI1;
+ V_ARRAY( ret ) = vector;
+ return S_OK;
+}
+
static HRESULT WINAPI stream_Read( _Stream *iface, LONG size, VARIANT *val )
{
- FIXME( "%p, %d, %p\n", iface, size, val );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ HRESULT hr;
+
+ TRACE( "%p, %d, %p\n", stream, size, val );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ if (stream->type != adTypeBinary) return MAKE_ADO_HRESULT( adErrIllegalOperation );
+ if (size < adReadAll) return MAKE_ADO_HRESULT( adErrInvalidArgument );
+
+ if (size == adReadAll) size = stream->size - stream->pos;
+ else size = min( size, stream->size - stream->pos );
+
+ if ((hr = create_byte_array( stream->buf + stream->pos, size, val )) != S_OK) return hr;
+ stream->pos += size;
+ return S_OK;
}
static HRESULT WINAPI stream_Open( _Stream *iface, VARIANT src, ConnectModeEnum mode, StreamOpenOptionsEnum options,
@@ -219,6 +277,10 @@ static HRESULT WINAPI stream_Close( _Stream *iface )
if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ heap_free( stream->buf );
+ stream->buf = NULL;
+ stream->size = stream->allocated = stream->pos = 0;
+
stream->state = adStateClosed;
return S_OK;
}
@@ -231,8 +293,25 @@ static HRESULT WINAPI stream_SkipLine( _Stream *iface )
static HRESULT WINAPI stream_Write( _Stream *iface, VARIANT buf )
{
- FIXME( "%p, %s\n", iface, debugstr_variant(&buf) );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ LONG bound, i;
+ HRESULT hr;
+
+ TRACE( "%p, %s\n", stream, debugstr_variant(&buf) );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+ if (stream->type != adTypeBinary) return MAKE_ADO_HRESULT( adErrIllegalOperation );
+ if (V_VT( &buf ) != (VT_ARRAY | VT_UI1)) return MAKE_ADO_HRESULT( adErrInvalidArgument );
+
+ if ((hr = SafeArrayGetUBound( V_ARRAY( &buf ), 1, &bound )) != S_OK) return hr;
+ if ((hr = resize_buffer( stream, stream->size + bound + 1 )) != S_OK) return hr;
+
+ for (i = 0; i <= bound; i++)
+ {
+ if ((hr = SafeArrayGetElement( V_ARRAY( &buf ), &i, &stream->buf[stream->pos++] )) != S_OK) return hr;
+ }
+
+ return S_OK;
}
static HRESULT WINAPI stream_SetEOS( _Stream *iface )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index 9733116151..257d1c26fa 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -25,13 +25,34 @@
#define MAKE_ADO_HRESULT( err ) MAKE_HRESULT( SEVERITY_ERROR, FACILITY_CONTROL, err )
+static HRESULT str_to_byte_array( const char *data, VARIANT *ret )
+{
+ SAFEARRAY *vector;
+ LONG i, len = strlen(data);
+ HRESULT hr;
+
+ if (!(vector = SafeArrayCreateVector( VT_UI1, 0, len ))) return E_OUTOFMEMORY;
+ for (i = 0; i < len; i++)
+ {
+ if ((hr = SafeArrayPutElement( vector, &i, (void *)&data[i] )) != S_OK)
+ {
+ SafeArrayDestroy( vector );
+ return hr;
+ }
+ }
+
+ V_VT( ret ) = VT_ARRAY | VT_UI1;
+ V_ARRAY( ret ) = vector;
+ return S_OK;
+}
+
static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
LONG refs;
ObjectStateEnum state;
- VARIANT missing;
+ VARIANT missing, val;
HRESULT hr;
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
@@ -60,6 +81,9 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateClosed, "got %u\n", state );
+ hr = _Stream_Read( stream, 2, &val );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
V_VT( &missing ) = VT_ERROR;
V_ERROR( &missing ) = DISP_E_PARAMNOTFOUND;
hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
@@ -73,6 +97,9 @@ static void test_Stream(void)
ok( hr == S_OK, "got %08x\n", hr );
ok( state == adStateOpen, "got %u\n", state );
+ hr = _Stream_Read( stream, 2, &val );
+ ok( hr == MAKE_ADO_HRESULT( adErrIllegalOperation ), "got %08x\n", hr );
+
hr = _Stream_Close( stream );
ok( hr == S_OK, "got %08x\n", hr );
@@ -86,6 +113,34 @@ static void test_Stream(void)
refs = _Stream_Release( stream );
ok( !refs, "got %d\n", refs );
+
+ /* binary type */
+ hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_put_Type( stream, adTypeBinary );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ VariantInit( &val );
+ hr = _Stream_Read( stream, 1, &val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( V_VT( &val ) == VT_NULL, "got %u\n", V_VT( &val ) );
+
+ VariantInit( &val );
+ hr = _Stream_Write( stream, val );
+ ok( hr == MAKE_ADO_HRESULT( adErrInvalidArgument ), "got %08x\n", hr );
+
+ hr = str_to_byte_array( "data", &val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ hr = _Stream_Write( stream, val );
+ ok( hr == S_OK, "got %08x\n", hr );
+ VariantClear( &val );
+
+ refs = _Stream_Release( stream );
+ ok( !refs, "got %d\n", refs );
}
START_TEST(msado15)
--
2.20.1
Dec. 9, 2019
[PATCH 2/5] msado15: Implement _Stream_get_State.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/stream.c | 7 +++++--
dlls/msado15/tests/msado15.c | 16 ++++++++++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index 3c9d885edf..cc67e930a4 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -162,8 +162,11 @@ static HRESULT WINAPI stream_put_LineSeparator( _Stream *iface, LineSeparatorEnu
static HRESULT WINAPI stream_get_State( _Stream *iface, ObjectStateEnum *state )
{
- FIXME( "%p, %p\n", iface, state );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ TRACE( "%p, %p\n", stream, state );
+
+ *state = stream->state;
+ return S_OK;
}
static HRESULT WINAPI stream_get_Mode( _Stream *iface, ConnectModeEnum *mode )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index e562c2299f..9733116151 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -30,6 +30,7 @@ static void test_Stream(void)
_Stream *stream;
StreamTypeEnum type;
LONG refs;
+ ObjectStateEnum state;
VARIANT missing;
HRESULT hr;
@@ -54,6 +55,11 @@ static void test_Stream(void)
hr = _Stream_put_Type( stream, adTypeText );
ok( hr == S_OK, "got %08x\n", hr );
+ state = 0xdeadbeef;
+ hr = _Stream_get_State( stream, &state );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( state == adStateClosed, "got %u\n", state );
+
V_VT( &missing ) = VT_ERROR;
V_ERROR( &missing ) = DISP_E_PARAMNOTFOUND;
hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
@@ -62,9 +68,19 @@ static void test_Stream(void)
hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
ok( hr == MAKE_ADO_HRESULT( adErrObjectOpen ), "got %08x\n", hr );
+ state = 0xdeadbeef;
+ hr = _Stream_get_State( stream, &state );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( state == adStateOpen, "got %u\n", state );
+
hr = _Stream_Close( stream );
ok( hr == S_OK, "got %08x\n", hr );
+ state = 0xdeadbeef;
+ hr = _Stream_get_State( stream, &state );
+ ok( hr == S_OK, "got %08x\n", hr );
+ ok( state == adStateClosed, "got %u\n", state );
+
hr = _Stream_Close( stream );
ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
--
2.20.1
Dec. 9, 2019
[PATCH 1/5] msado15: Implement _Stream_Open and _Stream_Close.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msado15/msado15_private.h | 2 ++
dlls/msado15/stream.c | 20 ++++++++++++++++----
dlls/msado15/tests/msado15.c | 17 +++++++++++++++++
3 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h
index 83c8b7c966..f901791ea9 100644
--- a/dlls/msado15/msado15_private.h
+++ b/dlls/msado15/msado15_private.h
@@ -19,6 +19,8 @@
#ifndef _WINE_MSADO15_PRIVATE_H_
#define _WINE_MSADO15_PRIVATE_H_
+#define MAKE_ADO_HRESULT( err ) MAKE_HRESULT( SEVERITY_ERROR, FACILITY_CONTROL, err )
+
HRESULT Connection_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Recordset_create( void ** ) DECLSPEC_HIDDEN;
HRESULT Stream_create( void ** ) DECLSPEC_HIDDEN;
diff --git a/dlls/msado15/stream.c b/dlls/msado15/stream.c
index 8e88b9aa65..3c9d885edf 100644
--- a/dlls/msado15/stream.c
+++ b/dlls/msado15/stream.c
@@ -34,6 +34,7 @@ struct stream
{
_Stream Stream_iface;
LONG refs;
+ ObjectStateEnum state;
StreamTypeEnum type;
};
@@ -198,14 +199,25 @@ static HRESULT WINAPI stream_Read( _Stream *iface, LONG size, VARIANT *val )
static HRESULT WINAPI stream_Open( _Stream *iface, VARIANT src, ConnectModeEnum mode, StreamOpenOptionsEnum options,
BSTR username, BSTR password )
{
- FIXME( "%p, %s, %u, %d, %s, %p\n", iface, debugstr_variant(&src), mode, options, debugstr_w(username), password );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+ FIXME( "%p, %s, %u, %d, %s, %p\n", stream, debugstr_variant(&src), mode, options, debugstr_w(username), password );
+
+ if (stream->state == adStateOpen) return MAKE_ADO_HRESULT( adErrObjectOpen );
+
+ stream->state = adStateOpen;
+ return S_OK;
}
static HRESULT WINAPI stream_Close( _Stream *iface )
{
- FIXME( "%p\n", iface );
- return E_NOTIMPL;
+ struct stream *stream = impl_from_Stream( iface );
+
+ TRACE( "%p\n", stream );
+
+ if (stream->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed );
+
+ stream->state = adStateClosed;
+ return S_OK;
}
static HRESULT WINAPI stream_SkipLine( _Stream *iface )
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index ed465e2072..e562c2299f 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -23,11 +23,14 @@
#include <msado15_backcompat.h>
#include "wine/test.h"
+#define MAKE_ADO_HRESULT( err ) MAKE_HRESULT( SEVERITY_ERROR, FACILITY_CONTROL, err )
+
static void test_Stream(void)
{
_Stream *stream;
StreamTypeEnum type;
LONG refs;
+ VARIANT missing;
HRESULT hr;
hr = CoCreateInstance( &CLSID_Stream, NULL, CLSCTX_INPROC_SERVER, &IID__Stream, (void **)&stream );
@@ -51,6 +54,20 @@ static void test_Stream(void)
hr = _Stream_put_Type( stream, adTypeText );
ok( hr == S_OK, "got %08x\n", hr );
+ V_VT( &missing ) = VT_ERROR;
+ V_ERROR( &missing ) = DISP_E_PARAMNOTFOUND;
+ hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_Open( stream, missing, adModeUnknown, adOpenStreamUnspecified, NULL, NULL );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectOpen ), "got %08x\n", hr );
+
+ hr = _Stream_Close( stream );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = _Stream_Close( stream );
+ ok( hr == MAKE_ADO_HRESULT( adErrObjectClosed ), "got %08x\n", hr );
+
refs = _Stream_Release( stream );
ok( !refs, "got %d\n", refs );
}
--
2.20.1
Dec. 9, 2019
Re: [PATCH] winhttp/tests: Fix the spelling of ok() and skip() messages and a comment.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
Re: [PATCH] msado15: Support all interfaces in _Recordset QueryInterface
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
Re: [PATCH] loader: Install msado15.dll into the correct location
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
[PATCH] kernelbase: Fix GlobalMemoryStatusEx regression
by hari.mail
ullAvailPageFile calculates down to -> page_size + freeswap, limiting it either to page_size (in case of no swap partition) or to swap size. Most of the bethesda game are detecting wrong amounts of ram due to this and crashing in case of no swap partition.
Dec. 9, 2019
Re: [PATCH] user32/tests: Avoid an unneeded lstrlenA() call.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61629
Your paranoid android.
=== w2003std (task log) ===
Task errors:
The task timed out
=== w1064v1507 (32 bit report) ===
user32:
dde.c:1012: Test failed: Expected item atom, got 00000081
dde.c:852: Test failed: client failed with 1 error(s)
Dec. 9, 2019
Re: [PATCH] bcrypt: Add fallback when gnutls_decode_rs_value isn't present.
by Hans Leidekker
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Dec. 9, 2019
Re: [PATCH] Update to Unicode 12.1.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61627
Your paranoid android.
=== debian10 (32 bit Chinese:China report) ===
kernel32:
debugger.c:320: Test failed: GetThreadContext failed: 5
debugger.c:320: Test failed: GetThreadContext failed: 5
debugger.c:320: Test failed: GetThreadContext failed: 5
Dec. 9, 2019
[PATCH vkd3d 2/2] vkd3d: Handle depth/stencil planes in GetCopyableFootprints().
by Conor McCarthy
Signed-off-by: Conor McCarthy <cmccarthy(a)codeweavers.com>
---
libs/vkd3d/device.c | 11 ++++++-----
tests/d3d12.c | 6 ++----
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index 757d4ac..51c4553 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -3175,7 +3175,7 @@ static void STDMETHODCALLTYPE d3d12_device_GetCopyableFootprints(ID3D12Device *i
= {DXGI_FORMAT_UNKNOWN, VK_FORMAT_UNDEFINED, 1, 1, 1, 1, 0};
unsigned int i, sub_resource_idx, miplevel_idx, row_count, row_size, row_pitch;
- unsigned int width, height, depth, array_size;
+ unsigned int width, height, depth, plane_count, sub_resources_per_plane;
const struct vkd3d_format *format;
uint64_t offset, size, total;
@@ -3209,10 +3209,11 @@ static void STDMETHODCALLTYPE d3d12_device_GetCopyableFootprints(ID3D12Device *i
return;
}
- array_size = d3d12_resource_desc_get_layer_count(desc);
+ plane_count = (format->vk_aspect_mask & VK_IMAGE_ASPECT_STENCIL_BIT) ? 2 : 1;
+ sub_resources_per_plane = d3d12_resource_desc_get_sub_resource_count(desc);
- if (first_sub_resource >= desc->MipLevels * array_size
- || sub_resource_count > desc->MipLevels * array_size - first_sub_resource)
+ if (first_sub_resource >= sub_resources_per_plane * plane_count
+ || sub_resource_count > sub_resources_per_plane * plane_count - first_sub_resource)
{
WARN("Invalid sub-resource range %u-%u for resource.\n", first_sub_resource, sub_resource_count);
return;
@@ -3222,7 +3223,7 @@ static void STDMETHODCALLTYPE d3d12_device_GetCopyableFootprints(ID3D12Device *i
total = 0;
for (i = 0; i < sub_resource_count; ++i)
{
- sub_resource_idx = first_sub_resource + i;
+ sub_resource_idx = (first_sub_resource + i) % sub_resources_per_plane;
miplevel_idx = sub_resource_idx % desc->MipLevels;
width = align(d3d12_resource_desc_get_width(desc, miplevel_idx), format->block_width);
height = align(d3d12_resource_desc_get_height(desc, miplevel_idx), format->block_height);
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 1e0e25f..c3521b7 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -18906,11 +18906,9 @@ static void test_get_copyable_footprints(void)
sub_resource_count *= resource_desc.DepthOrArraySize;
if (resource_desc.Format == DXGI_FORMAT_D24_UNORM_S8_UINT)
{
+ /* FIXME: we require D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL here for DS formats but windows doesn't. */
if (!vkd3d_test_platform_is_windows())
- {
- skip("Depth/stencil planes are not supported.\n");
- continue;
- }
+ resource_desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL;
sub_resource_count *= 2;
}
assert(sub_resource_count <= ARRAY_SIZE(layouts));
--
2.24.0
Dec. 9, 2019
[PATCH vkd3d 1/2] vkd3d/tests: Add tests for GetCopyableFootprints() depth/stencil planes.
by Conor McCarthy
Signed-off-by: Conor McCarthy <cmccarthy(a)codeweavers.com>
---
tests/d3d12.c | 19 +++++++++++++++++++
tests/d3d12_test_utils.h | 1 +
2 files changed, 20 insertions(+)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 323ef23..1e0e25f 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -18810,6 +18810,8 @@ static void test_get_copyable_footprints(void)
{DXGI_FORMAT_BC6H_UF16, true},
{DXGI_FORMAT_BC6H_SF16, true},
{DXGI_FORMAT_BC7_UNORM, true},
+ {DXGI_FORMAT_D32_FLOAT, false},
+ {DXGI_FORMAT_D24_UNORM_S8_UINT, false},
};
static const uint64_t base_offsets[] =
{
@@ -18855,6 +18857,14 @@ static void test_get_copyable_footprints(void)
{D3D12_RESOURCE_DIMENSION_TEXTURE3D, 3, 2, 2, 2, 2, DXGI_FORMAT_BC1_UNORM,
{1, 0}, D3D12_TEXTURE_LAYOUT_UNKNOWN, D3D12_RESOURCE_FLAG_NONE}, 0, 1,
},
+ {
+ {D3D12_RESOURCE_DIMENSION_TEXTURE2D, 0, 4, 4, 1, 1, DXGI_FORMAT_D32_FLOAT,
+ {1, 0}, D3D12_TEXTURE_LAYOUT_UNKNOWN, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}, 0, 2,
+ },
+ {
+ {D3D12_RESOURCE_DIMENSION_TEXTURE2D, 0, 4, 4, 1, 1, DXGI_FORMAT_D24_UNORM_S8_UINT,
+ {1, 0}, D3D12_TEXTURE_LAYOUT_UNKNOWN, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL}, 0, 3,
+ },
};
if (!(device = create_device()))
@@ -18894,6 +18904,15 @@ static void test_get_copyable_footprints(void)
sub_resource_count = resource_desc.MipLevels;
if (resources[i].dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D)
sub_resource_count *= resource_desc.DepthOrArraySize;
+ if (resource_desc.Format == DXGI_FORMAT_D24_UNORM_S8_UINT)
+ {
+ if (!vkd3d_test_platform_is_windows())
+ {
+ skip("Depth/stencil planes are not supported.\n");
+ continue;
+ }
+ sub_resource_count *= 2;
+ }
assert(sub_resource_count <= ARRAY_SIZE(layouts));
for (k = 0; k < ARRAY_SIZE(base_offsets); ++k)
diff --git a/tests/d3d12_test_utils.h b/tests/d3d12_test_utils.h
index 5092183..f9d49de 100644
--- a/tests/d3d12_test_utils.h
+++ b/tests/d3d12_test_utils.h
@@ -308,6 +308,7 @@ static unsigned int format_size(DXGI_FORMAT format)
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
case DXGI_FORMAT_R8G8B8A8_UINT:
case DXGI_FORMAT_B8G8R8A8_UNORM:
+ case DXGI_FORMAT_D24_UNORM_S8_UINT:
return 4;
case DXGI_FORMAT_R16_FLOAT:
case DXGI_FORMAT_R16_UNORM:
--
2.24.0
Dec. 9, 2019
[PATCH] cmd: Avoid unneeded strlenW() calls.
by Francois Gouget
Neither WCMD_give_help(), nor WCMD_setshow_default() are ever called
with a NULL pointer (notice how WCMD_skip_leading_spaces() already
assumes its argument is not NULL and does not return NULL).
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
programs/cmd/builtins.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index c6048eb5c1a..effb3e526b4 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -2549,7 +2549,7 @@ void WCMD_give_help (const WCHAR *args)
size_t i;
args = WCMD_skip_leading_spaces((WCHAR*) args);
- if (lstrlenW(args) == 0) {
+ if (!*args) {
WCMD_output_asis (WCMD_LoadMessage(WCMD_ALLHELP));
}
else {
@@ -3460,7 +3460,8 @@ void WCMD_setshow_default (const WCHAR *args) {
}
GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd);
- if (lstrlenW(args) == 0) {
+
+ if (!*args) {
lstrcatW (cwd, newlineW);
WCMD_output_asis (cwd);
}
@@ -3552,7 +3553,7 @@ void WCMD_setshow_date (void) {
DWORD count;
static const WCHAR parmT[] = {'/','T','\0'};
- if (lstrlenW(param1) == 0) {
+ if (!*param1) {
if (GetDateFormatW(LOCALE_USER_DEFAULT, 0, NULL, NULL, curdate, ARRAY_SIZE(curdate))) {
WCMD_output (WCMD_LoadMessage(WCMD_CURRENTDATE), curdate);
if (wcsstr (quals, parmT) == NULL) {
@@ -4194,7 +4195,7 @@ void WCMD_setshow_env (WCHAR *s) {
/* Output the prompt */
*p++ = '\0';
- if (lstrlenW(p) != 0) WCMD_output_asis(p);
+ if (*p) WCMD_output_asis(p);
/* Read the reply */
WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), string, ARRAY_SIZE(string), &count);
@@ -4268,7 +4269,7 @@ void WCMD_setshow_env (WCHAR *s) {
}
*p++ = '\0';
- if (lstrlenW(p) == 0) p = NULL;
+ if (!*p) p = NULL;
WINE_TRACE("set: Setting var '%s' to '%s'\n", wine_dbgstr_w(s),
wine_dbgstr_w(p));
status = SetEnvironmentVariableW(s, p);
@@ -4293,7 +4294,7 @@ void WCMD_setshow_path (const WCHAR *args) {
static const WCHAR pathW[] = {'P','A','T','H','\0'};
static const WCHAR pathEqW[] = {'P','A','T','H','=','\0'};
- if (lstrlenW(param1) == 0 && lstrlenW(param2) == 0) {
+ if (!*param1 && !*param2) {
status = GetEnvironmentVariableW(pathW, string, ARRAY_SIZE(string));
if (status != 0) {
WCMD_output_asis ( pathEqW);
@@ -4322,13 +4323,13 @@ void WCMD_setshow_prompt (void) {
WCHAR *s;
static const WCHAR promptW[] = {'P','R','O','M','P','T','\0'};
- if (lstrlenW(param1) == 0) {
+ if (!*param1) {
SetEnvironmentVariableW(promptW, NULL);
}
else {
s = param1;
while ((*s == '=') || (*s == ' ') || (*s == '\t')) s++;
- if (lstrlenW(s) == 0) {
+ if (!*s) {
SetEnvironmentVariableW(promptW, NULL);
}
else SetEnvironmentVariableW(promptW, s);
@@ -4349,7 +4350,7 @@ void WCMD_setshow_time (void) {
SYSTEMTIME st;
static const WCHAR parmT[] = {'/','T','\0'};
- if (lstrlenW(param1) == 0) {
+ if (!*param1) {
GetLocalTime(&st);
if (GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, curtime, ARRAY_SIZE(curtime))) {
WCMD_output (WCMD_LoadMessage(WCMD_CURRENTTIME), curtime);
@@ -4756,7 +4757,7 @@ int WCMD_volume(BOOL set_label, const WCHAR *path)
WCHAR string[MAX_PATH], label[MAX_PATH], curdir[MAX_PATH];
BOOL status;
- if (lstrlenW(path) == 0) {
+ if (!*path) {
status = GetCurrentDirectoryW(ARRAY_SIZE(curdir), curdir);
if (!status) {
WCMD_print_error ();
@@ -4794,7 +4795,7 @@ int WCMD_volume(BOOL set_label, const WCHAR *path)
string[count-1] = '\0'; /* ReadFile output is not null-terminated! */
if (string[count-2] == '\r') string[count-2] = '\0'; /* Under Windoze we get CRLF! */
}
- if (lstrlenW(path) != 0) {
+ if (*path) {
if (!SetVolumeLabelW(curdir, string)) WCMD_print_error ();
}
else {
--
2.20.1
Dec. 9, 2019
[PATCH] winedbg: Avoid unneeded strlen() calls.
by Francois Gouget
Note that target_xml is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
programs/winedbg/gdbproxy.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index b7f59ee05be..85ebc882a62 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -1615,7 +1615,7 @@ static enum packet_return packet_query(struct gdb_context* gdbctx)
return packet_ok;
if (strncmp(gdbctx->in_packet, "Supported", 9) == 0)
{
- if (strlen(target_xml))
+ if (*target_xml)
return packet_reply(gdbctx, "PacketSize=400;qXfer:features:read+");
else
{
@@ -1652,7 +1652,7 @@ static enum packet_return packet_query(struct gdb_context* gdbctx)
}
break;
case 'X':
- if (strlen(target_xml) && strncmp(gdbctx->in_packet, "Xfer:features:read:target.xml", 29) == 0)
+ if (*target_xml && strncmp(gdbctx->in_packet, "Xfer:features:read:target.xml", 29) == 0)
return packet_reply(gdbctx, target_xml);
break;
}
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Fix the spelling of an ok() message.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/winstation.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/tests/winstation.c b/dlls/user32/tests/winstation.c
index 6bebfe95f4b..aaa51d560ac 100644
--- a/dlls/user32/tests/winstation.c
+++ b/dlls/user32/tests/winstation.c
@@ -591,7 +591,7 @@ static void test_inputdesktop(void)
/* by default, GetThreadDesktop is the input desktop, SendInput should succeed. */
old_thread_desk = GetThreadDesktop(GetCurrentThreadId());
- ok(old_thread_desk != NULL, "GetThreadDesktop faile!\n");
+ ok(old_thread_desk != NULL, "GetThreadDesktop failed!\n");
memset(name, 0, sizeof(name));
ret = GetUserObjectInformationA(old_thread_desk, UOI_NAME, name, 1024, NULL);
ok(!strcmp(name, "Default"), "unexpected desktop %s\n", name);
--
2.20.1
Dec. 9, 2019
[PATCH] oleaut32: Fix the spelling of a FIXME() message.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/oleaut32/typelib.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index eb713a4e2f8..11e83789483 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -3757,7 +3757,7 @@ static DWORD SLTG_ReadLibBlk(LPVOID pLibBlk, ITypeLibImpl *pTypeLibImpl)
ptr += 6;
if((w = *(WORD*)ptr) != 0xffff) {
- FIXME("LibBlk.res06 = %04x. Assumung string and skipping\n", w);
+ FIXME("LibBlk.res06 = %04x. Assuming string and skipping\n", w);
ptr += w;
}
ptr += 2;
--
2.20.1
Dec. 9, 2019
[PATCH] winhttp/tests: Fix the spelling of ok() and skip() messages and a comment.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/winhttp/tests/winhttp.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
index 6a8d4962386..e4c614cb104 100644
--- a/dlls/winhttp/tests/winhttp.c
+++ b/dlls/winhttp/tests/winhttp.c
@@ -412,7 +412,7 @@ static void test_WinHttpSendRequest (void)
ok(ret, "WinHttpSetOption failed: %u\n", GetLastError());
/* writing more data than promised by the content-length header causes an error when the connection
- is resued, so disable keep-alive */
+ is reused, so disable keep-alive */
disable = WINHTTP_DISABLE_KEEP_ALIVE;
ret = WinHttpSetOption(request, WINHTTP_OPTION_DISABLE_FEATURE, &disable, sizeof(disable));
ok(ret, "WinHttpSetOption failed: %u\n", GetLastError());
@@ -692,7 +692,7 @@ static void test_WinHttpAddHeaders(void)
test_header_name, NULL, &len, &index);
ok(ret == FALSE, "WinHttpQueryHeaders unexpectedly succeeded.\n");
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
- "WinHttpQueryHeaders set incorrect error: expected ERROR_INSUFFICENT_BUFFER, got %u\n", GetLastError());
+ "WinHttpQueryHeaders set incorrect error: expected ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
ok(len > 40, "WinHttpQueryHeaders returned invalid length: expected greater than 40, got %d\n", len);
ok(index == 0, "WinHttpQueryHeaders incorrectly incremented header index.\n");
@@ -2144,7 +2144,7 @@ static void test_resolve_timeout(void)
WinHttpCloseHandle(ses);
}
else
- skip("Skipping host resolution tests, host resolution preformed by proxy\n");
+ skip("Skipping host resolution tests, host resolution performed by proxy\n");
ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0);
ok(ses != NULL, "failed to open session %u\n", GetLastError());
--
2.20.1
Dec. 9, 2019
[PATCH] kernel32/tests: Trace LastError when GetPhysicallyInstalledSystemMemory() fails.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/kernel32/tests/heap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/heap.c b/dlls/kernel32/tests/heap.c
index 38fae0eede2..5ea7a25c46c 100644
--- a/dlls/kernel32/tests/heap.c
+++ b/dlls/kernel32/tests/heap.c
@@ -1206,7 +1206,7 @@ static void test_GetPhysicallyInstalledSystemMemory(void)
total_memory = 0;
ret = pGetPhysicallyInstalledSystemMemory(&total_memory);
- ok(ret, "GetPhysicallyInstalledSystemMemory unexpectedly failed\n");
+ ok(ret, "GetPhysicallyInstalledSystemMemory unexpectedly failed (%u)\n", GetLastError());
ok(total_memory != 0, "expected total_memory != 0\n");
memstatus.dwLength = sizeof(memstatus);
--
2.20.1
Dec. 9, 2019
[PATCH] shlwapi/tests: Fix the spelling of a couple of ok() messages.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/shell32/tests/progman_dde.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/tests/progman_dde.c b/dlls/shell32/tests/progman_dde.c
index 2d19404a763..ef087893016 100644
--- a/dlls/shell32/tests/progman_dde.c
+++ b/dlls/shell32/tests/progman_dde.c
@@ -449,7 +449,7 @@ START_TEST(progman_dde)
/* Cleanup & Exit */
ret = DdeDisconnect(hConv);
- ok(ret, "DdeDisonnect() failed: %u\n", DdeGetLastError(instance));
+ ok(ret, "DdeDisconnect() failed: %u\n", DdeGetLastError(instance));
ret = DdeUninitialize(instance);
ok(ret, "DdeUninitialize() failed: %u\n", DdeGetLastError(instance));
@@ -472,7 +472,7 @@ START_TEST(progman_dde)
/* Cleanup & Exit */
ret = DdeDisconnect(hConv);
- ok(ret, "DdeDisonnect() failed: %u\n", DdeGetLastError(instance));
+ ok(ret, "DdeDisconnect() failed: %u\n", DdeGetLastError(instance));
ret = DdeUninitialize(instance);
ok(ret, "DdeUninitialize() failed: %u\n", DdeGetLastError(instance));
}
--
2.20.1
Dec. 9, 2019
[PATCH] wmvcore: Fix the spelling of WMReaderAdvanced6_SetProtectStreamSamples().
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/wmvcore/reader.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/wmvcore/reader.c b/dlls/wmvcore/reader.c
index 68e35cfd484..50bf9d80079 100644
--- a/dlls/wmvcore/reader.c
+++ b/dlls/wmvcore/reader.c
@@ -621,7 +621,7 @@ static HRESULT WINAPI WMReaderAdvanced5_SetPlayerHook(IWMReaderAdvanced6 *iface,
return E_NOTIMPL;
}
-static HRESULT WINAPI WMReaderAdvanced6_SetProtextStreamSamples(IWMReaderAdvanced6 *iface, BYTE *cert,
+static HRESULT WINAPI WMReaderAdvanced6_SetProtectStreamSamples(IWMReaderAdvanced6 *iface, BYTE *cert,
DWORD cert_size, DWORD cert_type, DWORD flags, BYTE *initialization_vector, DWORD *initialization_vector_size)
{
WMReader *This = impl_from_IWMReaderAdvanced6(iface);
@@ -681,7 +681,7 @@ static const IWMReaderAdvanced6Vtbl WMReaderAdvanced6Vtbl = {
WMReaderAdvanced4_CancelSaveFileAs,
WMReaderAdvanced4_GetURL,
WMReaderAdvanced5_SetPlayerHook,
- WMReaderAdvanced6_SetProtextStreamSamples
+ WMReaderAdvanced6_SetProtectStreamSamples
};
static inline WMReader *impl_from_IWMReaderAccelerator(IWMReaderAccelerator *iface)
--
2.20.1
Dec. 9, 2019
[PATCH] cmd: Fix the spelling of a WINE_TRACE() message and a comment.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
programs/cmd/builtins.c | 2 +-
programs/cmd/wcmd.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index effb3e526b4..43c4d9efef3 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -2511,7 +2511,7 @@ void WCMD_for (WCHAR *p, CMD_LIST **cmdList) {
heap_free(dirsToWalk->dirName);
heap_free(dirsToWalk);
dirsToWalk = nextDir;
- if (dirsToWalk) WINE_TRACE("Moving to next directorty to iterate: %s\n",
+ if (dirsToWalk) WINE_TRACE("Moving to next directory to iterate: %s\n",
wine_dbgstr_w(dirsToWalk->dirName));
else WINE_TRACE("Finished all directories.\n");
}
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index 3e99a0d2038..b0769bd839d 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -34,7 +34,7 @@
/* msdn specified max for Win XP */
#define MAXSTRING 8192
-/* Data structure to hold commands delimitors/separators */
+/* Data structure to hold commands delimiters/separators */
typedef enum _CMDdelimiters {
CMD_NONE, /* End of line or single & */
--
2.20.1
Dec. 9, 2019
[PATCH] comctl32/tests: Avoid a couple of unneeded lstrlenA() calls.
by Francois Gouget
Note that text is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/comctl32/tests/updown.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/tests/updown.c b/dlls/comctl32/tests/updown.c
index e7ceeffd4cd..d0fff562499 100644
--- a/dlls/comctl32/tests/updown.c
+++ b/dlls/comctl32/tests/updown.c
@@ -791,7 +791,7 @@ static void test_updown_create(void)
flush_sequences(sequences, NUM_MSG_SEQUENCES);
GetWindowTextA(g_edit, text, MAX_PATH);
- ok(lstrlenA(text) == 0, "Expected empty string\n");
+ ok(!*text, "Expected empty string\n");
ok_sequence(sequences, EDIT_SEQ_INDEX, get_edit_text_seq, "get edit text", FALSE);
DestroyWindow(updown);
@@ -865,7 +865,7 @@ static void test_UDS_SETBUDDYINT(void)
ok(style & UDS_SETBUDDYINT, "Expected UDS_SETBUDDY to be set\n");
SendMessageA(updown, UDM_SETPOS, 0, 20);
GetWindowTextA(g_edit, text, ARRAY_SIZE(text));
- ok(lstrlenA(text) == 0, "Expected empty string\n");
+ ok(!*text, "Expected empty string\n");
DestroyWindow(updown);
/* creating with UDS_SETBUDDYINT */
--
2.20.1
Dec. 9, 2019
[PATCH] user32: Fix the spelling of a TRACE() message.
by Francois Gouget
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/winpos.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index aad5274973f..f759bd10f94 100644
--- a/dlls/user32/winpos.c
+++ b/dlls/user32/winpos.c
@@ -1397,7 +1397,7 @@ static BOOL WINPOS_SetPlacement( HWND hwnd, const WINDOWPLACEMENT *wndpl, UINT f
if (flags & PLACE_MAX) make_point_onscreen( &wp.ptMaxPosition );
if (flags & PLACE_RECT) make_rect_onscreen( &wp.rcNormalPosition );
- TRACE( "%p: setting min %d,%d max %d,%d normal %s flags %x ajusted to min %d,%d max %d,%d normal %s\n",
+ TRACE( "%p: setting min %d,%d max %d,%d normal %s flags %x adjusted to min %d,%d max %d,%d normal %s\n",
hwnd, wndpl->ptMinPosition.x, wndpl->ptMinPosition.y,
wndpl->ptMaxPosition.x, wndpl->ptMaxPosition.y,
wine_dbgstr_rect(&wndpl->rcNormalPosition), flags,
--
2.20.1
Dec. 9, 2019
[PATCH] comctl32/tests: Avoid an unneeded strlen() call.
by Francois Gouget
Note that pathBuffer is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/comctl32/tests/listbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/comctl32/tests/listbox.c b/dlls/comctl32/tests/listbox.c
index dc3b247fb62..a3769423ee6 100644
--- a/dlls/comctl32/tests/listbox.c
+++ b/dlls/comctl32/tests/listbox.c
@@ -1819,7 +1819,7 @@ static void test_listbox_dlgdir(void)
ok (res == 0, "DlgDirSelectEx() with no selection returned %d, expected 0\n", res);
/* WinXP-SP2 leaves pathBuffer untouched, but Win98 fills it with garbage. */
/*
- ok (strlen(pathBuffer) == 0, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
+ ok (!*pathBuffer, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
*/
/* Test proper drive/dir/file recognition */
itemCount = SendMessageA(g_listBox, LB_GETCOUNT, 0, 0);
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Avoid a couple of unneeded strlen() calls.
by Francois Gouget
Note that DeviceString is an array field and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/monitor.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index 567870e3d1f..47e01b1a6a6 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -71,7 +71,6 @@ static void test_enumdisplaydevices_adapter(int index, const DISPLAY_DEVICEA *de
int device_id;
int subsys_id;
int revision_id;
- size_t length;
HDC hdc;
adapter_count++;
@@ -87,9 +86,8 @@ static void test_enumdisplaydevices_adapter(int index, const DISPLAY_DEVICEA *de
"#%d: wrong DeviceKey %s\n", index, device->DeviceKey);
/* DeviceString */
- length = strlen(device->DeviceString);
- ok(broken(length == 0) || /* XP on Testbot will return an empty string, whereas XP on real machine doesn't. Probably a bug in virtual adapter driver */
- length > 0, "#%d: expect DeviceString not empty\n", index);
+ ok(broken(!*device->DeviceString) || /* XP on Testbot will return an empty string, whereas XP on real machine doesn't. Probably a bug in virtual adapter driver */
+ *device->DeviceString, "#%d: expect DeviceString not empty\n", index);
/* StateFlags */
if (index == 0)
@@ -139,7 +137,7 @@ static void test_enumdisplaydevices_monitor(int adapter_index, int monitor_index
ok(!strcmp(monitor_name, device->DeviceName), "#%d: expect %s, got %s\n", monitor_index, monitor_name, device->DeviceName);
/* DeviceString */
- ok(strlen(device->DeviceString) > 0, "#%d: expect DeviceString not empty\n", monitor_index);
+ ok(*device->DeviceString, "#%d: expect DeviceString not empty\n", monitor_index);
/* StateFlags */
if (adapter_index == 0 && monitor_index == 0)
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Avoid an unneeded lstrlenA() call.
by Francois Gouget
Note that ptr may be NULL (see ok() check a few lines up).
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/dde.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/tests/dde.c b/dlls/user32/tests/dde.c
index eed2ac437e1..d370df181a3 100644
--- a/dlls/user32/tests/dde.c
+++ b/dlls/user32/tests/dde.c
@@ -1977,7 +1977,7 @@ static void test_DdeCreateDataHandle(void)
ok(size == 262, "Expected 262, got %d\n", size);
todo_wine
{
- ok(lstrlenA((LPSTR)ptr) == 0, "Expected 0, got %d\n", lstrlenA((LPSTR)ptr));
+ ok(ptr && !*ptr, "Expected 0, got %d\n", lstrlenA((LPSTR)ptr));
}
ret = DdeUnaccessData(hdata);
--
2.20.1
Dec. 9, 2019
[PATCH] user32/tests: Avoid an unneeded (&commented out) strlen() call.
by Francois Gouget
Note that pathBuffer is an array and thus cannot be NULL.
Signed-off-by: Francois Gouget <fgouget(a)free.fr>
---
dlls/user32/tests/listbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/user32/tests/listbox.c b/dlls/user32/tests/listbox.c
index 8d8115131ef..9f6f45990f5 100644
--- a/dlls/user32/tests/listbox.c
+++ b/dlls/user32/tests/listbox.c
@@ -1710,7 +1710,7 @@ static void test_listbox_dlgdir(void)
ok (res == 0, "DlgDirSelectEx() with no selection returned %d, expected 0\n", res);
/* WinXP-SP2 leaves pathBuffer untouched, but Win98 fills it with garbage. */
/*
- ok (strlen(pathBuffer) == 0, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
+ ok (!*pathBuffer, "DlgDirSelectEx() with no selection filled buffer with %s\n", pathBuffer);
*/
/* Test proper drive/dir/file recognition */
itemCount = SendMessageA(g_listBox, LB_GETCOUNT, 0, 0);
--
2.20.1
Dec. 9, 2019
[PATCH] Update to Unicode 12.1.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/bracket.c | 2 +-
dlls/dwrite/linebreak.c | 4 +-
dlls/dwrite/mirror.c | 2 +-
dlls/dwrite/scripts.c | 4 +-
dlls/dwrite/scripts.h | 2 +-
dlls/gdi32/vertical.c | 112 ++--
dlls/kernel32/wctype.c | 52 +-
dlls/kernelbase/compose.c | 2 +-
dlls/kernelbase/decompose.c | 2 +-
dlls/kernelbase/digitmap.c | 2 +-
dlls/usp10/bracket.c | 2 +-
dlls/usp10/indicsyllable.c | 4 +-
dlls/usp10/linebreak.c | 4 +-
dlls/usp10/mirror.c | 2 +-
dlls/usp10/shaping.c | 2 +-
dlls/wineps.drv/vertical.c | 112 ++--
libs/port/casemap.c | 2 +-
libs/port/combclass.c | 2 +-
libs/port/compose.c | 2 +-
libs/port/decompose.c | 985 ++++++++++++++++++------------------
libs/port/digitmap.c | 2 +-
libs/port/wctype.c | 2 +-
tools/make_unicode | 2 +-
23 files changed, 657 insertions(+), 650 deletions(-)
diff --git a/dlls/dwrite/bracket.c b/dlls/dwrite/bracket.c
index 210495f38f..a77c1176f6 100644
--- a/dlls/dwrite/bracket.c
+++ b/dlls/dwrite/bracket.c
@@ -1,5 +1,5 @@
/* Unicode Bidirectional Bracket table */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiBrackets.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiBrackets.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/dwrite/linebreak.c b/dlls/dwrite/linebreak.c
index 904efc6538..ff656f1e69 100644
--- a/dlls/dwrite/linebreak.c
+++ b/dlls/dwrite/linebreak.c
@@ -1,5 +1,5 @@
/* Unicode Line Break Properties */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/LineBreak.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/LineBreak.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -133,7 +133,7 @@ const unsigned short DECLSPEC_HIDDEN wine_linebreak_table[7216] =
0x1770, 0x1680, 0x1680, 0x1780, 0x1680, 0x1680, 0x1680, 0x1680,
0x1790, 0x1680, 0x1680, 0x17a0, 0x1680, 0x1680, 0x16a0, 0x17b0,
0x1680, 0x1790, 0x1680, 0x1680, 0x17c0, 0x1680, 0x1680, 0x1680,
- 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1790,
+ 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
diff --git a/dlls/dwrite/mirror.c b/dlls/dwrite/mirror.c
index 7b43a85703..28e1e8bd9b 100644
--- a/dlls/dwrite/mirror.c
+++ b/dlls/dwrite/mirror.c
@@ -1,5 +1,5 @@
/* Unicode BiDi mirroring */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiMirroring.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiMirroring.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/dwrite/scripts.c b/dlls/dwrite/scripts.c
index cb073a238c..ed85c41122 100644
--- a/dlls/dwrite/scripts.c
+++ b/dlls/dwrite/scripts.c
@@ -1,5 +1,5 @@
/* Unicode Script IDs */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/Scripts.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/Scripts.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -708,7 +708,7 @@ const unsigned short DECLSPEC_HIDDEN wine_scripts_table[6736] =
0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022,
0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0001,
0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c,
- 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0000,
+ 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0001,
0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f,
diff --git a/dlls/dwrite/scripts.h b/dlls/dwrite/scripts.h
index b3cc8fca08..37b678c9db 100644
--- a/dlls/dwrite/scripts.h
+++ b/dlls/dwrite/scripts.h
@@ -1,5 +1,5 @@
/* Unicode Script IDs */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/Scripts.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/Scripts.txt */
/* DO NOT EDIT!! */
enum unicode_script_id {
diff --git a/dlls/gdi32/vertical.c b/dlls/gdi32/vertical.c
index b5baffdde5..b8095fe9ba 100644
--- a/dlls/gdi32/vertical.c
+++ b/dlls/gdi32/vertical.c
@@ -1,10 +1,10 @@
/* Unicode Vertical Orientation */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/VerticalOrientation.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/VerticalOrientation.txt */
/* DO NOT EDIT!! */
#include "windef.h"
-const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
+const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1648] =
{
/* level 1 offsets */
0x0100, 0x0110, 0x0120, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
@@ -13,7 +13,7 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0160, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x01c0, 0x01d0, 0x01e0,
0x0110, 0x0110, 0x0110, 0x01f0, 0x0110, 0x0110, 0x0200, 0x0130,
- 0x0210, 0x0220, 0x0130, 0x0230, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0210, 0x0220, 0x0230, 0x0240, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -27,8 +27,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0130, 0x0240, 0x0110, 0x0110, 0x0110,
- 0x0110, 0x0250, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0130, 0x0130, 0x0130, 0x0130, 0x0250, 0x0110, 0x0110, 0x0110,
+ 0x0110, 0x0260, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -38,56 +38,58 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0260, 0x0270,
+ 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0270, 0x0280,
/* level 2 offsets */
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0290, 0x02a0, 0x0280, 0x02b0, 0x0280, 0x02b0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02c0, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02e0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x02f0, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350, 0x0360, 0x0280,
- 0x0370, 0x0380, 0x0390, 0x03a0, 0x03b0, 0x02d0, 0x02d0, 0x02d0,
- 0x03c0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x03d0, 0x0280, 0x03e0, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x03f0, 0x02d0, 0x0400, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350,
- 0x02d0, 0x0410, 0x0280, 0x0420, 0x0430, 0x0440, 0x0450, 0x02d0,
- 0x02d0, 0x02d0, 0x0460, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x0470, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0480, 0x0490,
- 0x02d0, 0x04a0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0450, 0x02d0, 0x0280, 0x0280, 0x0470, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x04b0, 0x02d0, 0x04c0, 0x04d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x04e0, 0x04f0, 0x02d0, 0x0500, 0x0510, 0x02d0, 0x0520, 0x02d0,
- 0x0530, 0x0540, 0x0550, 0x02d0, 0x0520, 0x02d0, 0x0530, 0x0560,
- 0x02d0, 0x02d0, 0x0570, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0580,
- 0x0580, 0x0580, 0x0580, 0x0580, 0x0580, 0x0590, 0x02d0, 0x05a0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x02d0, 0x0280, 0x02d0, 0x05b0, 0x05c0, 0x05d0, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x05e0, 0x05f0, 0x02d0, 0x0600, 0x02d0, 0x0610, 0x0620, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0630, 0x0640,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02a0, 0x02b0, 0x0290, 0x02c0, 0x0290, 0x02c0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02d0, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02f0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0350, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360, 0x0370, 0x0290,
+ 0x0380, 0x0390, 0x03a0, 0x03b0, 0x03c0, 0x02e0, 0x02e0, 0x02e0,
+ 0x03d0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x03e0, 0x0290, 0x03f0, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0400, 0x02e0, 0x0410, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360,
+ 0x02e0, 0x0420, 0x0290, 0x0430, 0x0440, 0x0450, 0x0460, 0x02e0,
+ 0x02e0, 0x02e0, 0x0470, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x0480, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0490, 0x04a0,
+ 0x02e0, 0x04b0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0460, 0x02e0, 0x0290, 0x0290, 0x0480, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x04c0, 0x02e0, 0x04d0, 0x04e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x04f0, 0x0500, 0x02e0, 0x0510, 0x0520, 0x02e0, 0x0530, 0x02e0,
+ 0x0540, 0x0550, 0x0560, 0x02e0, 0x0530, 0x02e0, 0x0540, 0x0570,
+ 0x02e0, 0x02e0, 0x0580, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0590,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x05a0,
+ 0x0590, 0x0590, 0x0590, 0x0590, 0x0590, 0x05b0, 0x02e0, 0x05c0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x02e0, 0x0290, 0x02e0, 0x05d0, 0x05e0, 0x05f0, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0600, 0x0610, 0x02e0, 0x0620, 0x02e0, 0x0630, 0x0640, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0650, 0x0660,
/* values */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -187,6 +189,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
diff --git a/dlls/kernel32/wctype.c b/dlls/kernel32/wctype.c
index cf25ccc66d..366eaf540d 100644
--- a/dlls/kernel32/wctype.c
+++ b/dlls/kernel32/wctype.c
@@ -3,7 +3,7 @@
#include "windef.h"
-const unsigned short DECLSPEC_HIDDEN wctype_table[7664] =
+const unsigned short DECLSPEC_HIDDEN wctype_table[7648] =
{
/* level 1 offsets */
0x0100, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170,
@@ -136,41 +136,41 @@ const unsigned short DECLSPEC_HIDDEN wctype_table[7664] =
0x1890, 0x0a10, 0x0a10, 0x0dd0, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x1190, 0x1610, 0x0a10, 0x18a0, 0x0740, 0x0740, 0x1800, 0x0a10,
0x1610, 0x18b0, 0x1610, 0x1610, 0x1610, 0x0740, 0x1610, 0x18c0,
- 0x1610, 0x1610, 0x1610, 0x18d0, 0x18e0, 0x1610, 0x1610, 0x18f0,
- 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1900,
- 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1910, 0x1610, 0x1920,
+ 0x1610, 0x1610, 0x1610, 0x18d0, 0x18e0, 0x1610, 0x1610, 0x1610,
+ 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x18f0,
+ 0x1610, 0x1610, 0x1610, 0x1610, 0x1610, 0x1900, 0x1610, 0x1910,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x0a10, 0x0a10, 0x0a10, 0x1180, 0x0740, 0x0740, 0x0740, 0x0740,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x09c0,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
0x0eb0, 0x0740, 0x0740, 0x0740, 0x1640, 0x0a10, 0x0a10, 0x1350,
- 0x1930, 0x0a10, 0x1940, 0x09c0, 0x0620, 0x0620, 0x1950, 0x1960,
- 0x0620, 0x1970, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x1980,
- 0x0740, 0x1990, 0x19a0, 0x19b0, 0x0620, 0x0620, 0x0620, 0x19c0,
- 0x19d0, 0x19e0, 0x19f0, 0x1a00, 0x1a10, 0x09c0, 0x09c0, 0x1a20,
- 0x1a30, 0x0a10, 0x1a40, 0x1a50, 0x0a10, 0x0a10, 0x0a10, 0x1a60,
- 0x1a70, 0x0a10, 0x0a10, 0x1a80, 0x1a90, 0x1140, 0x0750, 0x1aa0,
- 0x12f0, 0x0a10, 0x1ab0, 0x0a10, 0x1ac0, 0x1ad0, 0x0a10, 0x0eb0,
- 0x0a00, 0x0a10, 0x0a10, 0x1ae0, 0x1af0, 0x1b00, 0x1b10, 0x1b20,
- 0x0a10, 0x0a10, 0x1b30, 0x1b40, 0x1b50, 0x1b60, 0x0a10, 0x1b70,
- 0x0a10, 0x0a10, 0x0a10, 0x1b80, 0x1b90, 0x1ba0, 0x1bb0, 0x1bc0,
- 0x1bd0, 0x1be0, 0x17d0, 0x0600, 0x0600, 0x1bf0, 0x1c00, 0x0600,
- 0x0600, 0x0600, 0x0600, 0x0600, 0x0a10, 0x0a10, 0x1c10, 0x1140,
+ 0x1920, 0x0a10, 0x1930, 0x09c0, 0x0620, 0x0620, 0x1940, 0x1950,
+ 0x0620, 0x1960, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x1970,
+ 0x0740, 0x1980, 0x1990, 0x19a0, 0x0620, 0x0620, 0x0620, 0x19b0,
+ 0x19c0, 0x19d0, 0x19e0, 0x19f0, 0x1a00, 0x09c0, 0x09c0, 0x1a10,
+ 0x1a20, 0x0a10, 0x1a30, 0x1a40, 0x0a10, 0x0a10, 0x0a10, 0x1a50,
+ 0x1a60, 0x0a10, 0x0a10, 0x1a70, 0x1a80, 0x1140, 0x0750, 0x1a90,
+ 0x12f0, 0x0a10, 0x1aa0, 0x0a10, 0x1ab0, 0x1ac0, 0x0a10, 0x0eb0,
+ 0x0a00, 0x0a10, 0x0a10, 0x1ad0, 0x1ae0, 0x1af0, 0x1b00, 0x1b10,
+ 0x0a10, 0x0a10, 0x1b20, 0x1b30, 0x1b40, 0x1b50, 0x0a10, 0x1b60,
+ 0x0a10, 0x0a10, 0x0a10, 0x1b70, 0x1b80, 0x1b90, 0x1ba0, 0x1bb0,
+ 0x1bc0, 0x1bd0, 0x17d0, 0x0600, 0x0600, 0x1be0, 0x1bf0, 0x0600,
+ 0x0600, 0x0600, 0x0600, 0x0600, 0x0a10, 0x0a10, 0x1c00, 0x1140,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10,
- 0x0a10, 0x0a10, 0x1c20, 0x0a10, 0x1c30, 0x0a10, 0x0a10, 0x11f0,
+ 0x0a10, 0x0a10, 0x1c10, 0x0a10, 0x1c20, 0x0a10, 0x0a10, 0x11f0,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x11d0, 0x0a10,
0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x1200, 0x09c0, 0x09c0,
- 0x1c40, 0x1c50, 0x1c60, 0x1c70, 0x1c80, 0x0850, 0x0850, 0x0850,
- 0x0850, 0x0850, 0x0850, 0x1c90, 0x1ca0, 0x1cb0, 0x0850, 0x0850,
+ 0x1c30, 0x1c40, 0x1c50, 0x1c60, 0x1c70, 0x0850, 0x0850, 0x0850,
+ 0x0850, 0x0850, 0x0850, 0x1c80, 0x1c90, 0x1ca0, 0x0850, 0x0850,
0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850,
0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850,
- 0x0850, 0x0850, 0x0850, 0x1cc0, 0x09c0, 0x0850, 0x0850, 0x0850,
- 0x0850, 0x1cd0, 0x0850, 0x0850, 0x1ce0, 0x09c0, 0x09c0, 0x1cf0,
- 0x0750, 0x1d00, 0x0750, 0x14d0, 0x14d0, 0x1d10, 0x1d20, 0x1d30,
- 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x1d40,
- 0x1d50, 0x1d60, 0x0560, 0x1d70, 0x1d80, 0x1d90, 0x1da0, 0x0a10,
- 0x0a10, 0x0a10, 0x0a10, 0x1190, 0x1db0, 0x1dc0, 0x1dd0, 0x1de0,
+ 0x0850, 0x0850, 0x0850, 0x1cb0, 0x09c0, 0x0850, 0x0850, 0x0850,
+ 0x0850, 0x1cc0, 0x0850, 0x0850, 0x1cd0, 0x09c0, 0x09c0, 0x1ce0,
+ 0x0750, 0x1cf0, 0x0750, 0x14d0, 0x14d0, 0x1d00, 0x1d10, 0x1d20,
+ 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, 0x1d30,
+ 0x1d40, 0x1d50, 0x0560, 0x1d60, 0x1d70, 0x1d80, 0x1d90, 0x0a10,
+ 0x0a10, 0x0a10, 0x0a10, 0x1190, 0x1da0, 0x1db0, 0x1dc0, 0x1dd0,
/* values */
0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220,
0x0220, 0x9268, 0x8228, 0x9228, 0xa228, 0x8228, 0x0220, 0x0220,
@@ -806,8 +806,6 @@ const unsigned short DECLSPEC_HIDDEN wctype_table[7664] =
0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200,
- 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
- 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200,
0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
diff --git a/dlls/kernelbase/compose.c b/dlls/kernelbase/compose.c
index b817d1a058..7ac9445007 100644
--- a/dlls/kernelbase/compose.c
+++ b/dlls/kernelbase/compose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/kernelbase/decompose.c b/dlls/kernelbase/decompose.c
index c185507fd4..3540ad4362 100644
--- a/dlls/kernelbase/decompose.c
+++ b/dlls/kernelbase/decompose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/kernelbase/digitmap.c b/dlls/kernelbase/digitmap.c
index 1e3639e697..35590f3379 100644
--- a/dlls/kernelbase/digitmap.c
+++ b/dlls/kernelbase/digitmap.c
@@ -1,5 +1,5 @@
/* Unicode digit folding mappings */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/bracket.c b/dlls/usp10/bracket.c
index 210495f38f..a77c1176f6 100644
--- a/dlls/usp10/bracket.c
+++ b/dlls/usp10/bracket.c
@@ -1,5 +1,5 @@
/* Unicode Bidirectional Bracket table */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiBrackets.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiBrackets.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/indicsyllable.c b/dlls/usp10/indicsyllable.c
index bc13fec294..339f6c47af 100644
--- a/dlls/usp10/indicsyllable.c
+++ b/dlls/usp10/indicsyllable.c
@@ -1,6 +1,6 @@
/* Unicode Indic Syllabic Category */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/IndicSyllabicCategory.txt */
-/* and from http://www.unicode.org/Public/12.0.0/ucd/IndicPositionalCategory.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/IndicSyllabicCategory.txt */
+/* and from http://www.unicode.org/Public/12.1.0/ucd/IndicPositionalCategory.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/linebreak.c b/dlls/usp10/linebreak.c
index 904efc6538..ff656f1e69 100644
--- a/dlls/usp10/linebreak.c
+++ b/dlls/usp10/linebreak.c
@@ -1,5 +1,5 @@
/* Unicode Line Break Properties */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/LineBreak.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/LineBreak.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -133,7 +133,7 @@ const unsigned short DECLSPEC_HIDDEN wine_linebreak_table[7216] =
0x1770, 0x1680, 0x1680, 0x1780, 0x1680, 0x1680, 0x1680, 0x1680,
0x1790, 0x1680, 0x1680, 0x17a0, 0x1680, 0x1680, 0x16a0, 0x17b0,
0x1680, 0x1790, 0x1680, 0x1680, 0x17c0, 0x1680, 0x1680, 0x1680,
- 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1790,
+ 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680, 0x1680,
diff --git a/dlls/usp10/mirror.c b/dlls/usp10/mirror.c
index 7b43a85703..28e1e8bd9b 100644
--- a/dlls/usp10/mirror.c
+++ b/dlls/usp10/mirror.c
@@ -1,5 +1,5 @@
/* Unicode BiDi mirroring */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/BidiMirroring.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/BidiMirroring.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/usp10/shaping.c b/dlls/usp10/shaping.c
index ebb6fae509..517a0a871f 100644
--- a/dlls/usp10/shaping.c
+++ b/dlls/usp10/shaping.c
@@ -1,5 +1,5 @@
/* Unicode Arabic shaping */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/ArabicShaping.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/ArabicShaping.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/dlls/wineps.drv/vertical.c b/dlls/wineps.drv/vertical.c
index b5baffdde5..b8095fe9ba 100644
--- a/dlls/wineps.drv/vertical.c
+++ b/dlls/wineps.drv/vertical.c
@@ -1,10 +1,10 @@
/* Unicode Vertical Orientation */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/VerticalOrientation.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/VerticalOrientation.txt */
/* DO NOT EDIT!! */
#include "windef.h"
-const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
+const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1648] =
{
/* level 1 offsets */
0x0100, 0x0110, 0x0120, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
@@ -13,7 +13,7 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0160, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110,
0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x01c0, 0x01d0, 0x01e0,
0x0110, 0x0110, 0x0110, 0x01f0, 0x0110, 0x0110, 0x0200, 0x0130,
- 0x0210, 0x0220, 0x0130, 0x0230, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0210, 0x0220, 0x0230, 0x0240, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -27,8 +27,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0130, 0x0240, 0x0110, 0x0110, 0x0110,
- 0x0110, 0x0250, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
+ 0x0130, 0x0130, 0x0130, 0x0130, 0x0250, 0x0110, 0x0110, 0x0110,
+ 0x0110, 0x0260, 0x0110, 0x0110, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
@@ -38,56 +38,58 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130,
- 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0260, 0x0270,
+ 0x0130, 0x0130, 0x0130, 0x0110, 0x0110, 0x0110, 0x0270, 0x0280,
/* level 2 offsets */
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0290, 0x02a0, 0x0280, 0x02b0, 0x0280, 0x02b0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02c0, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02e0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x02f0, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350, 0x0360, 0x0280,
- 0x0370, 0x0380, 0x0390, 0x03a0, 0x03b0, 0x02d0, 0x02d0, 0x02d0,
- 0x03c0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x03d0, 0x0280, 0x03e0, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x03f0, 0x02d0, 0x0400, 0x0280, 0x0280, 0x0280, 0x0280, 0x0350,
- 0x02d0, 0x0410, 0x0280, 0x0420, 0x0430, 0x0440, 0x0450, 0x02d0,
- 0x02d0, 0x02d0, 0x0460, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x0470, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0480, 0x0490,
- 0x02d0, 0x04a0, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0450, 0x02d0, 0x0280, 0x0280, 0x0470, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x04b0, 0x02d0, 0x04c0, 0x04d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x04e0, 0x04f0, 0x02d0, 0x0500, 0x0510, 0x02d0, 0x0520, 0x02d0,
- 0x0530, 0x0540, 0x0550, 0x02d0, 0x0520, 0x02d0, 0x0530, 0x0560,
- 0x02d0, 0x02d0, 0x0570, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0580,
- 0x0580, 0x0580, 0x0580, 0x0580, 0x0580, 0x0590, 0x02d0, 0x05a0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0,
- 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x02d0, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x02d0, 0x02d0,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x0280, 0x02d0, 0x0280, 0x02d0, 0x05b0, 0x05c0, 0x05d0, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280,
- 0x05e0, 0x05f0, 0x02d0, 0x0600, 0x02d0, 0x0610, 0x0620, 0x0280,
- 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0280, 0x0630, 0x0640,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02a0, 0x02b0, 0x0290, 0x02c0, 0x0290, 0x02c0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02d0, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02f0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0300, 0x0310, 0x0320, 0x0330, 0x0340, 0x0350, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360, 0x0370, 0x0290,
+ 0x0380, 0x0390, 0x03a0, 0x03b0, 0x03c0, 0x02e0, 0x02e0, 0x02e0,
+ 0x03d0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x03e0, 0x0290, 0x03f0, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0400, 0x02e0, 0x0410, 0x0290, 0x0290, 0x0290, 0x0290, 0x0360,
+ 0x02e0, 0x0420, 0x0290, 0x0430, 0x0440, 0x0450, 0x0460, 0x02e0,
+ 0x02e0, 0x02e0, 0x0470, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x0480, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0490, 0x04a0,
+ 0x02e0, 0x04b0, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0460, 0x02e0, 0x0290, 0x0290, 0x0480, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x04c0, 0x02e0, 0x04d0, 0x04e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x04f0, 0x0500, 0x02e0, 0x0510, 0x0520, 0x02e0, 0x0530, 0x02e0,
+ 0x0540, 0x0550, 0x0560, 0x02e0, 0x0530, 0x02e0, 0x0540, 0x0570,
+ 0x02e0, 0x02e0, 0x0580, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0590,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x05a0,
+ 0x0590, 0x0590, 0x0590, 0x0590, 0x0590, 0x05b0, 0x02e0, 0x05c0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0,
+ 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x02e0, 0x02e0,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0290, 0x02e0, 0x0290, 0x02e0, 0x05d0, 0x05e0, 0x05f0, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290,
+ 0x0600, 0x0610, 0x02e0, 0x0620, 0x02e0, 0x0630, 0x0640, 0x0290,
+ 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0290, 0x0650, 0x0660,
/* values */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
@@ -187,6 +189,8 @@ const unsigned short DECLSPEC_HIDDEN vertical_orientation_table[1616] =
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003,
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
diff --git a/libs/port/casemap.c b/libs/port/casemap.c
index 2905000c6e..3bf32c94d2 100644
--- a/libs/port/casemap.c
+++ b/libs/port/casemap.c
@@ -1,5 +1,5 @@
/* Unicode case mappings */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/combclass.c b/libs/port/combclass.c
index f5c794a3e4..c402d38a2c 100644
--- a/libs/port/combclass.c
+++ b/libs/port/combclass.c
@@ -1,5 +1,5 @@
/* Unicode Combining Classes */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/compose.c b/libs/port/compose.c
index b817d1a058..7ac9445007 100644
--- a/libs/port/compose.c
+++ b/libs/port/compose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/decompose.c b/libs/port/decompose.c
index 1c3d2b005d..a68156093e 100644
--- a/libs/port/decompose.c
+++ b/libs/port/decompose.c
@@ -1,5 +1,5 @@
/* Unicode char composition */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
@@ -929,7 +929,7 @@ static const WCHAR table[5856] =
0x05d1, 0x05bf, 0x05db, 0x05bf, 0x05e4, 0x05bf, 0x0000, 0x0000
};
-static const WCHAR compatmap_table[8152] =
+static const WCHAR compatmap_table[8154] =
{
/* index */
0x0110, 0x0120, 0x0130, 0x0140, 0x0100, 0x0150, 0x0160, 0x0100,
@@ -1406,283 +1406,283 @@ static const WCHAR compatmap_table[8152] =
0x1639, 0x163a, 0x163b, 0x163c, 0x163d, 0x163e, 0x163f, 0x1640,
0x1641, 0x1642, 0x1643, 0x1644, 0x1645, 0x1646, 0x1647, 0x1648,
/* offsets 0x3300 .. 0x330f */
- 0x1648, 0x164c, 0x1650, 0x1654, 0x1657, 0x165b, 0x165e, 0x1661,
- 0x1666, 0x166a, 0x166d, 0x1670, 0x1673, 0x1677, 0x167b, 0x167e,
+ 0x164a, 0x164e, 0x1652, 0x1656, 0x1659, 0x165d, 0x1660, 0x1663,
+ 0x1668, 0x166c, 0x166f, 0x1672, 0x1675, 0x1679, 0x167d, 0x1680,
/* offsets 0x3310 .. 0x331f */
- 0x1681, 0x1683, 0x1686, 0x168a, 0x168e, 0x1690, 0x1695, 0x169b,
- 0x16a0, 0x16a3, 0x16a8, 0x16ad, 0x16b1, 0x16b4, 0x16b7, 0x16ba,
+ 0x1683, 0x1685, 0x1688, 0x168c, 0x1690, 0x1692, 0x1697, 0x169d,
+ 0x16a2, 0x16a5, 0x16aa, 0x16af, 0x16b3, 0x16b6, 0x16b9, 0x16bc,
/* offsets 0x3320 .. 0x332f */
- 0x16be, 0x16c3, 0x16c7, 0x16ca, 0x16cd, 0x16d0, 0x16d2, 0x16d4,
- 0x16d6, 0x16d8, 0x16db, 0x16de, 0x16e3, 0x16e6, 0x16ea, 0x16ef,
+ 0x16c0, 0x16c5, 0x16c9, 0x16cc, 0x16cf, 0x16d2, 0x16d4, 0x16d6,
+ 0x16d8, 0x16da, 0x16dd, 0x16e0, 0x16e5, 0x16e8, 0x16ec, 0x16f1,
/* offsets 0x3330 .. 0x333f */
- 0x16f2, 0x16f4, 0x16f6, 0x16fb, 0x16ff, 0x1704, 0x1707, 0x170c,
- 0x170e, 0x1711, 0x1714, 0x1717, 0x171a, 0x171d, 0x1721, 0x1724,
+ 0x16f4, 0x16f6, 0x16f8, 0x16fd, 0x1701, 0x1706, 0x1709, 0x170e,
+ 0x1710, 0x1713, 0x1716, 0x1719, 0x171c, 0x171f, 0x1723, 0x1726,
/* offsets 0x3340 .. 0x334f */
- 0x1726, 0x1729, 0x172c, 0x172f, 0x1733, 0x1736, 0x1739, 0x173c,
- 0x1741, 0x1745, 0x1747, 0x174c, 0x174e, 0x1752, 0x1756, 0x1759,
+ 0x1728, 0x172b, 0x172e, 0x1731, 0x1735, 0x1738, 0x173b, 0x173e,
+ 0x1743, 0x1747, 0x1749, 0x174e, 0x1750, 0x1754, 0x1758, 0x175b,
/* offsets 0x3350 .. 0x335f */
- 0x175c, 0x175f, 0x1763, 0x1765, 0x1768, 0x176c, 0x176e, 0x1773,
- 0x1776, 0x1778, 0x177a, 0x177c, 0x177e, 0x1780, 0x1782, 0x1784,
+ 0x175e, 0x1761, 0x1765, 0x1767, 0x176a, 0x176e, 0x1770, 0x1775,
+ 0x1778, 0x177a, 0x177c, 0x177e, 0x1780, 0x1782, 0x1784, 0x1786,
/* offsets 0x3360 .. 0x336f */
- 0x1786, 0x1788, 0x178a, 0x178d, 0x1790, 0x1793, 0x1796, 0x1799,
- 0x179c, 0x179f, 0x17a2, 0x17a5, 0x17a8, 0x17ab, 0x17ae, 0x17b1,
+ 0x1788, 0x178a, 0x178c, 0x178f, 0x1792, 0x1795, 0x1798, 0x179b,
+ 0x179e, 0x17a1, 0x17a4, 0x17a7, 0x17aa, 0x17ad, 0x17b0, 0x17b3,
/* offsets 0x3370 .. 0x337f */
- 0x17b4, 0x17b7, 0x17ba, 0x17bc, 0x17be, 0x17c1, 0x17c3, 0x17c5,
- 0x17c7, 0x17ca, 0x17cd, 0x17cf, 0x17d1, 0x17d3, 0x17d5, 0x17d7,
+ 0x17b6, 0x17b9, 0x17bc, 0x17be, 0x17c0, 0x17c3, 0x17c5, 0x17c7,
+ 0x17c9, 0x17cc, 0x17cf, 0x17d1, 0x17d3, 0x17d5, 0x17d7, 0x17d9,
/* offsets 0x3380 .. 0x338f */
- 0x17db, 0x17dd, 0x17df, 0x17e1, 0x17e3, 0x17e5, 0x17e7, 0x17e9,
- 0x17eb, 0x17ee, 0x17f2, 0x17f4, 0x17f6, 0x17f8, 0x17fa, 0x17fc,
+ 0x17dd, 0x17df, 0x17e1, 0x17e3, 0x17e5, 0x17e7, 0x17e9, 0x17eb,
+ 0x17ed, 0x17f0, 0x17f4, 0x17f6, 0x17f8, 0x17fa, 0x17fc, 0x17fe,
/* offsets 0x3390 .. 0x339f */
- 0x17fe, 0x1800, 0x1803, 0x1806, 0x1809, 0x180c, 0x180e, 0x1810,
- 0x1812, 0x1814, 0x1816, 0x1818, 0x181a, 0x181c, 0x181e, 0x1820,
+ 0x1800, 0x1802, 0x1805, 0x1808, 0x180b, 0x180e, 0x1810, 0x1812,
+ 0x1814, 0x1816, 0x1818, 0x181a, 0x181c, 0x181e, 0x1820, 0x1822,
/* offsets 0x33a0 .. 0x33af */
- 0x1823, 0x1826, 0x1828, 0x182b, 0x182e, 0x1831, 0x1833, 0x1836,
- 0x1839, 0x183d, 0x183f, 0x1842, 0x1845, 0x1848, 0x184b, 0x1850,
+ 0x1825, 0x1828, 0x182a, 0x182d, 0x1830, 0x1833, 0x1835, 0x1838,
+ 0x183b, 0x183f, 0x1841, 0x1844, 0x1847, 0x184a, 0x184d, 0x1852,
/* offsets 0x33b0 .. 0x33bf */
- 0x1856, 0x1858, 0x185a, 0x185c, 0x185e, 0x1860, 0x1862, 0x1864,
- 0x1866, 0x1868, 0x186a, 0x186c, 0x186e, 0x1870, 0x1872, 0x1874,
+ 0x1858, 0x185a, 0x185c, 0x185e, 0x1860, 0x1862, 0x1864, 0x1866,
+ 0x1868, 0x186a, 0x186c, 0x186e, 0x1870, 0x1872, 0x1874, 0x1876,
/* offsets 0x33c0 .. 0x33cf */
- 0x1876, 0x1878, 0x187a, 0x187e, 0x1880, 0x1882, 0x1884, 0x1888,
- 0x188b, 0x188d, 0x188f, 0x1891, 0x1893, 0x1895, 0x1897, 0x1899,
+ 0x1878, 0x187a, 0x187c, 0x1880, 0x1882, 0x1884, 0x1886, 0x188a,
+ 0x188d, 0x188f, 0x1891, 0x1893, 0x1895, 0x1897, 0x1899, 0x189b,
/* offsets 0x33d0 .. 0x33df */
- 0x189b, 0x189d, 0x189f, 0x18a2, 0x18a4, 0x18a6, 0x18a9, 0x18ac,
- 0x18ae, 0x18b2, 0x18b5, 0x18b7, 0x18b9, 0x18bb, 0x18bd, 0x18c0,
+ 0x189d, 0x189f, 0x18a1, 0x18a4, 0x18a6, 0x18a8, 0x18ab, 0x18ae,
+ 0x18b0, 0x18b4, 0x18b7, 0x18b9, 0x18bb, 0x18bd, 0x18bf, 0x18c2,
/* offsets 0x33e0 .. 0x33ef */
- 0x18c3, 0x18c5, 0x18c7, 0x18c9, 0x18cb, 0x18cd, 0x18cf, 0x18d1,
- 0x18d3, 0x18d5, 0x18d8, 0x18db, 0x18de, 0x18e1, 0x18e4, 0x18e7,
+ 0x18c5, 0x18c7, 0x18c9, 0x18cb, 0x18cd, 0x18cf, 0x18d1, 0x18d3,
+ 0x18d5, 0x18d7, 0x18da, 0x18dd, 0x18e0, 0x18e3, 0x18e6, 0x18e9,
/* offsets 0x33f0 .. 0x33ff */
- 0x18ea, 0x18ed, 0x18f0, 0x18f3, 0x18f6, 0x18f9, 0x18fc, 0x18ff,
- 0x1902, 0x1905, 0x1908, 0x190b, 0x190e, 0x1911, 0x1914, 0x1917,
+ 0x18ec, 0x18ef, 0x18f2, 0x18f5, 0x18f8, 0x18fb, 0x18fe, 0x1901,
+ 0x1904, 0x1907, 0x190a, 0x190d, 0x1910, 0x1913, 0x1916, 0x1919,
/* offsets 0xa690 .. 0xa69f */
- 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191a,
- 0x191a, 0x191a, 0x191a, 0x191a, 0x191a, 0x191b, 0x191c, 0x191c,
+ 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191c,
+ 0x191c, 0x191c, 0x191c, 0x191c, 0x191c, 0x191d, 0x191e, 0x191e,
/* offsets 0xa770 .. 0xa77f */
- 0x191c, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d,
- 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d,
+ 0x191e, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
+ 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
/* offsets 0xa7f0 .. 0xa7ff */
- 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d, 0x191d,
- 0x191d, 0x191e, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
- /* offsets 0xab50 .. 0xab5f */
0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x191f,
- 0x191f, 0x191f, 0x191f, 0x191f, 0x191f, 0x1920, 0x1921, 0x1922,
+ 0x191f, 0x1920, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921,
+ /* offsets 0xab50 .. 0xab5f */
+ 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1921,
+ 0x1921, 0x1921, 0x1921, 0x1921, 0x1921, 0x1922, 0x1923, 0x1924,
/* offsets 0xfb00 .. 0xfb0f */
- 0x1923, 0x1925, 0x1927, 0x1929, 0x192c, 0x192f, 0x1931, 0x1933,
- 0x1933, 0x1933, 0x1933, 0x1933, 0x1933, 0x1933, 0x1933, 0x1933,
+ 0x1925, 0x1927, 0x1929, 0x192b, 0x192e, 0x1931, 0x1933, 0x1935,
+ 0x1935, 0x1935, 0x1935, 0x1935, 0x1935, 0x1935, 0x1935, 0x1935,
/* offsets 0xfb10 .. 0xfb1f */
- 0x1933, 0x1933, 0x1933, 0x1933, 0x1935, 0x1937, 0x1939, 0x193b,
- 0x193d, 0x193d, 0x193d, 0x193d, 0x193d, 0x193d, 0x193d, 0x193d,
+ 0x1935, 0x1935, 0x1935, 0x1935, 0x1937, 0x1939, 0x193b, 0x193d,
+ 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x193f,
/* offsets 0xfb20 .. 0xfb2f */
- 0x193d, 0x193e, 0x193f, 0x1940, 0x1941, 0x1942, 0x1943, 0x1944,
- 0x1945, 0x1946, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947,
+ 0x193f, 0x1940, 0x1941, 0x1942, 0x1943, 0x1944, 0x1945, 0x1946,
+ 0x1947, 0x1948, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949,
/* offsets 0xfb40 .. 0xfb4f */
- 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947,
- 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947, 0x1947,
+ 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949,
+ 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949,
/* offsets 0xfb50 .. 0xfb5f */
- 0x1949, 0x194a, 0x194b, 0x194c, 0x194d, 0x194e, 0x194f, 0x1950,
- 0x1951, 0x1952, 0x1953, 0x1954, 0x1955, 0x1956, 0x1957, 0x1958,
+ 0x194b, 0x194c, 0x194d, 0x194e, 0x194f, 0x1950, 0x1951, 0x1952,
+ 0x1953, 0x1954, 0x1955, 0x1956, 0x1957, 0x1958, 0x1959, 0x195a,
/* offsets 0xfb60 .. 0xfb6f */
- 0x1959, 0x195a, 0x195b, 0x195c, 0x195d, 0x195e, 0x195f, 0x1960,
- 0x1961, 0x1962, 0x1963, 0x1964, 0x1965, 0x1966, 0x1967, 0x1968,
+ 0x195b, 0x195c, 0x195d, 0x195e, 0x195f, 0x1960, 0x1961, 0x1962,
+ 0x1963, 0x1964, 0x1965, 0x1966, 0x1967, 0x1968, 0x1969, 0x196a,
/* offsets 0xfb70 .. 0xfb7f */
- 0x1969, 0x196a, 0x196b, 0x196c, 0x196d, 0x196e, 0x196f, 0x1970,
- 0x1971, 0x1972, 0x1973, 0x1974, 0x1975, 0x1976, 0x1977, 0x1978,
+ 0x196b, 0x196c, 0x196d, 0x196e, 0x196f, 0x1970, 0x1971, 0x1972,
+ 0x1973, 0x1974, 0x1975, 0x1976, 0x1977, 0x1978, 0x1979, 0x197a,
/* offsets 0xfb80 .. 0xfb8f */
- 0x1979, 0x197a, 0x197b, 0x197c, 0x197d, 0x197e, 0x197f, 0x1980,
- 0x1981, 0x1982, 0x1983, 0x1984, 0x1985, 0x1986, 0x1987, 0x1988,
+ 0x197b, 0x197c, 0x197d, 0x197e, 0x197f, 0x1980, 0x1981, 0x1982,
+ 0x1983, 0x1984, 0x1985, 0x1986, 0x1987, 0x1988, 0x1989, 0x198a,
/* offsets 0xfb90 .. 0xfb9f */
- 0x1989, 0x198a, 0x198b, 0x198c, 0x198d, 0x198e, 0x198f, 0x1990,
- 0x1991, 0x1992, 0x1993, 0x1994, 0x1995, 0x1996, 0x1997, 0x1998,
+ 0x198b, 0x198c, 0x198d, 0x198e, 0x198f, 0x1990, 0x1991, 0x1992,
+ 0x1993, 0x1994, 0x1995, 0x1996, 0x1997, 0x1998, 0x1999, 0x199a,
/* offsets 0xfba0 .. 0xfbaf */
- 0x1999, 0x199a, 0x199b, 0x199c, 0x199d, 0x199e, 0x199f, 0x19a0,
- 0x19a1, 0x19a2, 0x19a3, 0x19a4, 0x19a5, 0x19a6, 0x19a7, 0x19a8,
+ 0x199b, 0x199c, 0x199d, 0x199e, 0x199f, 0x19a0, 0x19a1, 0x19a2,
+ 0x19a3, 0x19a4, 0x19a5, 0x19a6, 0x19a7, 0x19a8, 0x19a9, 0x19aa,
/* offsets 0xfbb0 .. 0xfbbf */
- 0x19a9, 0x19aa, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab,
- 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ab,
+ 0x19ab, 0x19ac, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad,
+ 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ad,
/* offsets 0xfbd0 .. 0xfbdf */
- 0x19ab, 0x19ab, 0x19ab, 0x19ab, 0x19ac, 0x19ad, 0x19ae, 0x19af,
- 0x19b0, 0x19b1, 0x19b2, 0x19b3, 0x19b4, 0x19b5, 0x19b6, 0x19b7,
+ 0x19ad, 0x19ad, 0x19ad, 0x19ad, 0x19ae, 0x19af, 0x19b0, 0x19b1,
+ 0x19b2, 0x19b3, 0x19b4, 0x19b5, 0x19b6, 0x19b7, 0x19b8, 0x19b9,
/* offsets 0xfbe0 .. 0xfbef */
- 0x19b8, 0x19b9, 0x19ba, 0x19bb, 0x19bc, 0x19bd, 0x19be, 0x19bf,
- 0x19c0, 0x19c1, 0x19c2, 0x19c4, 0x19c6, 0x19c8, 0x19ca, 0x19cc,
+ 0x19ba, 0x19bb, 0x19bc, 0x19bd, 0x19be, 0x19bf, 0x19c0, 0x19c1,
+ 0x19c2, 0x19c3, 0x19c4, 0x19c6, 0x19c8, 0x19ca, 0x19cc, 0x19ce,
/* offsets 0xfbf0 .. 0xfbff */
- 0x19ce, 0x19d0, 0x19d2, 0x19d4, 0x19d6, 0x19d8, 0x19da, 0x19dc,
- 0x19de, 0x19e0, 0x19e2, 0x19e4, 0x19e6, 0x19e7, 0x19e8, 0x19e9,
+ 0x19d0, 0x19d2, 0x19d4, 0x19d6, 0x19d8, 0x19da, 0x19dc, 0x19de,
+ 0x19e0, 0x19e2, 0x19e4, 0x19e6, 0x19e8, 0x19e9, 0x19ea, 0x19eb,
/* offsets 0xfc00 .. 0xfc0f */
- 0x19ea, 0x19ec, 0x19ee, 0x19f0, 0x19f2, 0x19f4, 0x19f6, 0x19f8,
- 0x19fa, 0x19fc, 0x19fe, 0x1a00, 0x1a02, 0x1a04, 0x1a06, 0x1a08,
+ 0x19ec, 0x19ee, 0x19f0, 0x19f2, 0x19f4, 0x19f6, 0x19f8, 0x19fa,
+ 0x19fc, 0x19fe, 0x1a00, 0x1a02, 0x1a04, 0x1a06, 0x1a08, 0x1a0a,
/* offsets 0xfc10 .. 0xfc1f */
- 0x1a0a, 0x1a0c, 0x1a0e, 0x1a10, 0x1a12, 0x1a14, 0x1a16, 0x1a18,
- 0x1a1a, 0x1a1c, 0x1a1e, 0x1a20, 0x1a22, 0x1a24, 0x1a26, 0x1a28,
+ 0x1a0c, 0x1a0e, 0x1a10, 0x1a12, 0x1a14, 0x1a16, 0x1a18, 0x1a1a,
+ 0x1a1c, 0x1a1e, 0x1a20, 0x1a22, 0x1a24, 0x1a26, 0x1a28, 0x1a2a,
/* offsets 0xfc20 .. 0xfc2f */
- 0x1a2a, 0x1a2c, 0x1a2e, 0x1a30, 0x1a32, 0x1a34, 0x1a36, 0x1a38,
- 0x1a3a, 0x1a3c, 0x1a3e, 0x1a40, 0x1a42, 0x1a44, 0x1a46, 0x1a48,
+ 0x1a2c, 0x1a2e, 0x1a30, 0x1a32, 0x1a34, 0x1a36, 0x1a38, 0x1a3a,
+ 0x1a3c, 0x1a3e, 0x1a40, 0x1a42, 0x1a44, 0x1a46, 0x1a48, 0x1a4a,
/* offsets 0xfc30 .. 0xfc3f */
- 0x1a4a, 0x1a4c, 0x1a4e, 0x1a50, 0x1a52, 0x1a54, 0x1a56, 0x1a58,
- 0x1a5a, 0x1a5c, 0x1a5e, 0x1a60, 0x1a62, 0x1a64, 0x1a66, 0x1a68,
+ 0x1a4c, 0x1a4e, 0x1a50, 0x1a52, 0x1a54, 0x1a56, 0x1a58, 0x1a5a,
+ 0x1a5c, 0x1a5e, 0x1a60, 0x1a62, 0x1a64, 0x1a66, 0x1a68, 0x1a6a,
/* offsets 0xfc40 .. 0xfc4f */
- 0x1a6a, 0x1a6c, 0x1a6e, 0x1a70, 0x1a72, 0x1a74, 0x1a76, 0x1a78,
- 0x1a7a, 0x1a7c, 0x1a7e, 0x1a80, 0x1a82, 0x1a84, 0x1a86, 0x1a88,
+ 0x1a6c, 0x1a6e, 0x1a70, 0x1a72, 0x1a74, 0x1a76, 0x1a78, 0x1a7a,
+ 0x1a7c, 0x1a7e, 0x1a80, 0x1a82, 0x1a84, 0x1a86, 0x1a88, 0x1a8a,
/* offsets 0xfc50 .. 0xfc5f */
- 0x1a8a, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, 0x1a96, 0x1a98,
- 0x1a9a, 0x1a9c, 0x1a9e, 0x1aa0, 0x1aa2, 0x1aa4, 0x1aa6, 0x1aa9,
+ 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, 0x1a96, 0x1a98, 0x1a9a,
+ 0x1a9c, 0x1a9e, 0x1aa0, 0x1aa2, 0x1aa4, 0x1aa6, 0x1aa8, 0x1aab,
/* offsets 0xfc60 .. 0xfc6f */
- 0x1aac, 0x1aaf, 0x1ab2, 0x1ab5, 0x1ab8, 0x1aba, 0x1abc, 0x1abe,
- 0x1ac0, 0x1ac2, 0x1ac4, 0x1ac6, 0x1ac8, 0x1aca, 0x1acc, 0x1ace,
+ 0x1aae, 0x1ab1, 0x1ab4, 0x1ab7, 0x1aba, 0x1abc, 0x1abe, 0x1ac0,
+ 0x1ac2, 0x1ac4, 0x1ac6, 0x1ac8, 0x1aca, 0x1acc, 0x1ace, 0x1ad0,
/* offsets 0xfc70 .. 0xfc7f */
- 0x1ad0, 0x1ad2, 0x1ad4, 0x1ad6, 0x1ad8, 0x1ada, 0x1adc, 0x1ade,
- 0x1ae0, 0x1ae2, 0x1ae4, 0x1ae6, 0x1ae8, 0x1aea, 0x1aec, 0x1aee,
+ 0x1ad2, 0x1ad4, 0x1ad6, 0x1ad8, 0x1ada, 0x1adc, 0x1ade, 0x1ae0,
+ 0x1ae2, 0x1ae4, 0x1ae6, 0x1ae8, 0x1aea, 0x1aec, 0x1aee, 0x1af0,
/* offsets 0xfc80 .. 0xfc8f */
- 0x1af0, 0x1af2, 0x1af4, 0x1af6, 0x1af8, 0x1afa, 0x1afc, 0x1afe,
- 0x1b00, 0x1b02, 0x1b04, 0x1b06, 0x1b08, 0x1b0a, 0x1b0c, 0x1b0e,
+ 0x1af2, 0x1af4, 0x1af6, 0x1af8, 0x1afa, 0x1afc, 0x1afe, 0x1b00,
+ 0x1b02, 0x1b04, 0x1b06, 0x1b08, 0x1b0a, 0x1b0c, 0x1b0e, 0x1b10,
/* offsets 0xfc90 .. 0xfc9f */
- 0x1b10, 0x1b12, 0x1b14, 0x1b16, 0x1b18, 0x1b1a, 0x1b1c, 0x1b1e,
- 0x1b20, 0x1b22, 0x1b24, 0x1b26, 0x1b28, 0x1b2a, 0x1b2c, 0x1b2e,
+ 0x1b12, 0x1b14, 0x1b16, 0x1b18, 0x1b1a, 0x1b1c, 0x1b1e, 0x1b20,
+ 0x1b22, 0x1b24, 0x1b26, 0x1b28, 0x1b2a, 0x1b2c, 0x1b2e, 0x1b30,
/* offsets 0xfca0 .. 0xfcaf */
- 0x1b30, 0x1b32, 0x1b34, 0x1b36, 0x1b38, 0x1b3a, 0x1b3c, 0x1b3e,
- 0x1b40, 0x1b42, 0x1b44, 0x1b46, 0x1b48, 0x1b4a, 0x1b4c, 0x1b4e,
+ 0x1b32, 0x1b34, 0x1b36, 0x1b38, 0x1b3a, 0x1b3c, 0x1b3e, 0x1b40,
+ 0x1b42, 0x1b44, 0x1b46, 0x1b48, 0x1b4a, 0x1b4c, 0x1b4e, 0x1b50,
/* offsets 0xfcb0 .. 0xfcbf */
- 0x1b50, 0x1b52, 0x1b54, 0x1b56, 0x1b58, 0x1b5a, 0x1b5c, 0x1b5e,
- 0x1b60, 0x1b62, 0x1b64, 0x1b66, 0x1b68, 0x1b6a, 0x1b6c, 0x1b6e,
+ 0x1b52, 0x1b54, 0x1b56, 0x1b58, 0x1b5a, 0x1b5c, 0x1b5e, 0x1b60,
+ 0x1b62, 0x1b64, 0x1b66, 0x1b68, 0x1b6a, 0x1b6c, 0x1b6e, 0x1b70,
/* offsets 0xfcc0 .. 0xfccf */
- 0x1b70, 0x1b72, 0x1b74, 0x1b76, 0x1b78, 0x1b7a, 0x1b7c, 0x1b7e,
- 0x1b80, 0x1b82, 0x1b84, 0x1b86, 0x1b88, 0x1b8a, 0x1b8c, 0x1b8e,
+ 0x1b72, 0x1b74, 0x1b76, 0x1b78, 0x1b7a, 0x1b7c, 0x1b7e, 0x1b80,
+ 0x1b82, 0x1b84, 0x1b86, 0x1b88, 0x1b8a, 0x1b8c, 0x1b8e, 0x1b90,
/* offsets 0xfcd0 .. 0xfcdf */
- 0x1b90, 0x1b92, 0x1b94, 0x1b96, 0x1b98, 0x1b9a, 0x1b9c, 0x1b9e,
- 0x1ba0, 0x1ba2, 0x1ba4, 0x1ba6, 0x1ba8, 0x1baa, 0x1bac, 0x1bae,
+ 0x1b92, 0x1b94, 0x1b96, 0x1b98, 0x1b9a, 0x1b9c, 0x1b9e, 0x1ba0,
+ 0x1ba2, 0x1ba4, 0x1ba6, 0x1ba8, 0x1baa, 0x1bac, 0x1bae, 0x1bb0,
/* offsets 0xfce0 .. 0xfcef */
- 0x1bb0, 0x1bb2, 0x1bb4, 0x1bb6, 0x1bb8, 0x1bba, 0x1bbc, 0x1bbe,
- 0x1bc0, 0x1bc2, 0x1bc4, 0x1bc6, 0x1bc8, 0x1bca, 0x1bcc, 0x1bce,
+ 0x1bb2, 0x1bb4, 0x1bb6, 0x1bb8, 0x1bba, 0x1bbc, 0x1bbe, 0x1bc0,
+ 0x1bc2, 0x1bc4, 0x1bc6, 0x1bc8, 0x1bca, 0x1bcc, 0x1bce, 0x1bd0,
/* offsets 0xfcf0 .. 0xfcff */
- 0x1bd0, 0x1bd2, 0x1bd4, 0x1bd7, 0x1bda, 0x1bdd, 0x1bdf, 0x1be1,
- 0x1be3, 0x1be5, 0x1be7, 0x1be9, 0x1beb, 0x1bed, 0x1bef, 0x1bf1,
+ 0x1bd2, 0x1bd4, 0x1bd6, 0x1bd9, 0x1bdc, 0x1bdf, 0x1be1, 0x1be3,
+ 0x1be5, 0x1be7, 0x1be9, 0x1beb, 0x1bed, 0x1bef, 0x1bf1, 0x1bf3,
/* offsets 0xfd00 .. 0xfd0f */
- 0x1bf3, 0x1bf5, 0x1bf7, 0x1bf9, 0x1bfb, 0x1bfd, 0x1bff, 0x1c01,
- 0x1c03, 0x1c05, 0x1c07, 0x1c09, 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11,
+ 0x1bf5, 0x1bf7, 0x1bf9, 0x1bfb, 0x1bfd, 0x1bff, 0x1c01, 0x1c03,
+ 0x1c05, 0x1c07, 0x1c09, 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11, 0x1c13,
/* offsets 0xfd10 .. 0xfd1f */
- 0x1c13, 0x1c15, 0x1c17, 0x1c19, 0x1c1b, 0x1c1d, 0x1c1f, 0x1c21,
- 0x1c23, 0x1c25, 0x1c27, 0x1c29, 0x1c2b, 0x1c2d, 0x1c2f, 0x1c31,
+ 0x1c15, 0x1c17, 0x1c19, 0x1c1b, 0x1c1d, 0x1c1f, 0x1c21, 0x1c23,
+ 0x1c25, 0x1c27, 0x1c29, 0x1c2b, 0x1c2d, 0x1c2f, 0x1c31, 0x1c33,
/* offsets 0xfd20 .. 0xfd2f */
- 0x1c33, 0x1c35, 0x1c37, 0x1c39, 0x1c3b, 0x1c3d, 0x1c3f, 0x1c41,
- 0x1c43, 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, 0x1c4f, 0x1c51,
+ 0x1c35, 0x1c37, 0x1c39, 0x1c3b, 0x1c3d, 0x1c3f, 0x1c41, 0x1c43,
+ 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, 0x1c4f, 0x1c51, 0x1c53,
/* offsets 0xfd30 .. 0xfd3f */
- 0x1c53, 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, 0x1c5f, 0x1c61,
- 0x1c63, 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, 0x1c6f, 0x1c6f,
+ 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, 0x1c5f, 0x1c61, 0x1c63,
+ 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, 0x1c6f, 0x1c71, 0x1c71,
/* offsets 0xfd50 .. 0xfd5f */
- 0x1c6f, 0x1c72, 0x1c75, 0x1c78, 0x1c7b, 0x1c7e, 0x1c81, 0x1c84,
- 0x1c87, 0x1c8a, 0x1c8d, 0x1c90, 0x1c93, 0x1c96, 0x1c99, 0x1c9c,
+ 0x1c71, 0x1c74, 0x1c77, 0x1c7a, 0x1c7d, 0x1c80, 0x1c83, 0x1c86,
+ 0x1c89, 0x1c8c, 0x1c8f, 0x1c92, 0x1c95, 0x1c98, 0x1c9b, 0x1c9e,
/* offsets 0xfd60 .. 0xfd6f */
- 0x1c9f, 0x1ca2, 0x1ca5, 0x1ca8, 0x1cab, 0x1cae, 0x1cb1, 0x1cb4,
- 0x1cb7, 0x1cba, 0x1cbd, 0x1cc0, 0x1cc3, 0x1cc6, 0x1cc9, 0x1ccc,
+ 0x1ca1, 0x1ca4, 0x1ca7, 0x1caa, 0x1cad, 0x1cb0, 0x1cb3, 0x1cb6,
+ 0x1cb9, 0x1cbc, 0x1cbf, 0x1cc2, 0x1cc5, 0x1cc8, 0x1ccb, 0x1cce,
/* offsets 0xfd70 .. 0xfd7f */
- 0x1ccf, 0x1cd2, 0x1cd5, 0x1cd8, 0x1cdb, 0x1cde, 0x1ce1, 0x1ce4,
- 0x1ce7, 0x1cea, 0x1ced, 0x1cf0, 0x1cf3, 0x1cf6, 0x1cf9, 0x1cfc,
+ 0x1cd1, 0x1cd4, 0x1cd7, 0x1cda, 0x1cdd, 0x1ce0, 0x1ce3, 0x1ce6,
+ 0x1ce9, 0x1cec, 0x1cef, 0x1cf2, 0x1cf5, 0x1cf8, 0x1cfb, 0x1cfe,
/* offsets 0xfd80 .. 0xfd8f */
- 0x1cff, 0x1d02, 0x1d05, 0x1d08, 0x1d0b, 0x1d0e, 0x1d11, 0x1d14,
- 0x1d17, 0x1d1a, 0x1d1d, 0x1d20, 0x1d23, 0x1d26, 0x1d29, 0x1d2c,
+ 0x1d01, 0x1d04, 0x1d07, 0x1d0a, 0x1d0d, 0x1d10, 0x1d13, 0x1d16,
+ 0x1d19, 0x1d1c, 0x1d1f, 0x1d22, 0x1d25, 0x1d28, 0x1d2b, 0x1d2e,
/* offsets 0xfd90 .. 0xfd9f */
- 0x1d2f, 0x1d2f, 0x1d2f, 0x1d32, 0x1d35, 0x1d38, 0x1d3b, 0x1d3e,
- 0x1d41, 0x1d44, 0x1d47, 0x1d4a, 0x1d4d, 0x1d50, 0x1d53, 0x1d56,
+ 0x1d31, 0x1d31, 0x1d31, 0x1d34, 0x1d37, 0x1d3a, 0x1d3d, 0x1d40,
+ 0x1d43, 0x1d46, 0x1d49, 0x1d4c, 0x1d4f, 0x1d52, 0x1d55, 0x1d58,
/* offsets 0xfda0 .. 0xfdaf */
- 0x1d59, 0x1d5c, 0x1d5f, 0x1d62, 0x1d65, 0x1d68, 0x1d6b, 0x1d6e,
- 0x1d71, 0x1d74, 0x1d77, 0x1d7a, 0x1d7d, 0x1d80, 0x1d83, 0x1d86,
+ 0x1d5b, 0x1d5e, 0x1d61, 0x1d64, 0x1d67, 0x1d6a, 0x1d6d, 0x1d70,
+ 0x1d73, 0x1d76, 0x1d79, 0x1d7c, 0x1d7f, 0x1d82, 0x1d85, 0x1d88,
/* offsets 0xfdb0 .. 0xfdbf */
- 0x1d89, 0x1d8c, 0x1d8f, 0x1d92, 0x1d95, 0x1d98, 0x1d9b, 0x1d9e,
- 0x1da1, 0x1da4, 0x1da7, 0x1daa, 0x1dad, 0x1db0, 0x1db3, 0x1db6,
+ 0x1d8b, 0x1d8e, 0x1d91, 0x1d94, 0x1d97, 0x1d9a, 0x1d9d, 0x1da0,
+ 0x1da3, 0x1da6, 0x1da9, 0x1dac, 0x1daf, 0x1db2, 0x1db5, 0x1db8,
/* offsets 0xfdc0 .. 0xfdcf */
- 0x1db9, 0x1dbc, 0x1dbf, 0x1dc2, 0x1dc5, 0x1dc8, 0x1dcb, 0x1dce,
- 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1, 0x1dd1,
+ 0x1dbb, 0x1dbe, 0x1dc1, 0x1dc4, 0x1dc7, 0x1dca, 0x1dcd, 0x1dd0,
+ 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3, 0x1dd3,
/* offsets 0xfdf0 .. 0xfdff */
- 0x1dd1, 0x1dd4, 0x1dd7, 0x1ddb, 0x1ddf, 0x1de3, 0x1de7, 0x1deb,
- 0x1def, 0x1df3, 0x1df6, 0x1e08, 0x1e10, 0x1e14, 0x1e14, 0x1e14,
+ 0x1dd3, 0x1dd6, 0x1dd9, 0x1ddd, 0x1de1, 0x1de5, 0x1de9, 0x1ded,
+ 0x1df1, 0x1df5, 0x1df8, 0x1e0a, 0x1e12, 0x1e16, 0x1e16, 0x1e16,
/* offsets 0xfe10 .. 0xfe1f */
- 0x1e14, 0x1e15, 0x1e16, 0x1e17, 0x1e18, 0x1e19, 0x1e1a, 0x1e1b,
- 0x1e1c, 0x1e1d, 0x1e1e, 0x1e1e, 0x1e1e, 0x1e1e, 0x1e1e, 0x1e1e,
+ 0x1e16, 0x1e17, 0x1e18, 0x1e19, 0x1e1a, 0x1e1b, 0x1e1c, 0x1e1d,
+ 0x1e1e, 0x1e1f, 0x1e20, 0x1e20, 0x1e20, 0x1e20, 0x1e20, 0x1e20,
/* offsets 0xfe30 .. 0xfe3f */
- 0x1e1e, 0x1e1f, 0x1e20, 0x1e21, 0x1e22, 0x1e23, 0x1e24, 0x1e25,
- 0x1e26, 0x1e27, 0x1e28, 0x1e29, 0x1e2a, 0x1e2b, 0x1e2c, 0x1e2d,
+ 0x1e20, 0x1e21, 0x1e22, 0x1e23, 0x1e24, 0x1e25, 0x1e26, 0x1e27,
+ 0x1e28, 0x1e29, 0x1e2a, 0x1e2b, 0x1e2c, 0x1e2d, 0x1e2e, 0x1e2f,
/* offsets 0xfe40 .. 0xfe4f */
- 0x1e2e, 0x1e2f, 0x1e30, 0x1e31, 0x1e32, 0x1e33, 0x1e33, 0x1e33,
- 0x1e34, 0x1e35, 0x1e36, 0x1e37, 0x1e38, 0x1e39, 0x1e3a, 0x1e3b,
+ 0x1e30, 0x1e31, 0x1e32, 0x1e33, 0x1e34, 0x1e35, 0x1e35, 0x1e35,
+ 0x1e36, 0x1e37, 0x1e38, 0x1e39, 0x1e3a, 0x1e3b, 0x1e3c, 0x1e3d,
/* offsets 0xfe50 .. 0xfe5f */
- 0x1e3c, 0x1e3d, 0x1e3e, 0x1e3f, 0x1e3f, 0x1e40, 0x1e41, 0x1e42,
- 0x1e43, 0x1e44, 0x1e45, 0x1e46, 0x1e47, 0x1e48, 0x1e49, 0x1e4a,
+ 0x1e3e, 0x1e3f, 0x1e40, 0x1e41, 0x1e41, 0x1e42, 0x1e43, 0x1e44,
+ 0x1e45, 0x1e46, 0x1e47, 0x1e48, 0x1e49, 0x1e4a, 0x1e4b, 0x1e4c,
/* offsets 0xfe60 .. 0xfe6f */
- 0x1e4b, 0x1e4c, 0x1e4d, 0x1e4e, 0x1e4f, 0x1e50, 0x1e51, 0x1e52,
- 0x1e52, 0x1e53, 0x1e54, 0x1e55, 0x1e56, 0x1e56, 0x1e56, 0x1e56,
+ 0x1e4d, 0x1e4e, 0x1e4f, 0x1e50, 0x1e51, 0x1e52, 0x1e53, 0x1e54,
+ 0x1e54, 0x1e55, 0x1e56, 0x1e57, 0x1e58, 0x1e58, 0x1e58, 0x1e58,
/* offsets 0xfe70 .. 0xfe7f */
- 0x1e56, 0x1e58, 0x1e5a, 0x1e5c, 0x1e5c, 0x1e5e, 0x1e5e, 0x1e60,
- 0x1e62, 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70,
+ 0x1e58, 0x1e5a, 0x1e5c, 0x1e5e, 0x1e5e, 0x1e60, 0x1e60, 0x1e62,
+ 0x1e64, 0x1e66, 0x1e68, 0x1e6a, 0x1e6c, 0x1e6e, 0x1e70, 0x1e72,
/* offsets 0xfe80 .. 0xfe8f */
- 0x1e72, 0x1e73, 0x1e74, 0x1e75, 0x1e76, 0x1e77, 0x1e78, 0x1e79,
- 0x1e7a, 0x1e7b, 0x1e7c, 0x1e7d, 0x1e7e, 0x1e7f, 0x1e80, 0x1e81,
+ 0x1e74, 0x1e75, 0x1e76, 0x1e77, 0x1e78, 0x1e79, 0x1e7a, 0x1e7b,
+ 0x1e7c, 0x1e7d, 0x1e7e, 0x1e7f, 0x1e80, 0x1e81, 0x1e82, 0x1e83,
/* offsets 0xfe90 .. 0xfe9f */
- 0x1e82, 0x1e83, 0x1e84, 0x1e85, 0x1e86, 0x1e87, 0x1e88, 0x1e89,
- 0x1e8a, 0x1e8b, 0x1e8c, 0x1e8d, 0x1e8e, 0x1e8f, 0x1e90, 0x1e91,
+ 0x1e84, 0x1e85, 0x1e86, 0x1e87, 0x1e88, 0x1e89, 0x1e8a, 0x1e8b,
+ 0x1e8c, 0x1e8d, 0x1e8e, 0x1e8f, 0x1e90, 0x1e91, 0x1e92, 0x1e93,
/* offsets 0xfea0 .. 0xfeaf */
- 0x1e92, 0x1e93, 0x1e94, 0x1e95, 0x1e96, 0x1e97, 0x1e98, 0x1e99,
- 0x1e9a, 0x1e9b, 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, 0x1ea0, 0x1ea1,
+ 0x1e94, 0x1e95, 0x1e96, 0x1e97, 0x1e98, 0x1e99, 0x1e9a, 0x1e9b,
+ 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, 0x1ea0, 0x1ea1, 0x1ea2, 0x1ea3,
/* offsets 0xfeb0 .. 0xfebf */
- 0x1ea2, 0x1ea3, 0x1ea4, 0x1ea5, 0x1ea6, 0x1ea7, 0x1ea8, 0x1ea9,
- 0x1eaa, 0x1eab, 0x1eac, 0x1ead, 0x1eae, 0x1eaf, 0x1eb0, 0x1eb1,
+ 0x1ea4, 0x1ea5, 0x1ea6, 0x1ea7, 0x1ea8, 0x1ea9, 0x1eaa, 0x1eab,
+ 0x1eac, 0x1ead, 0x1eae, 0x1eaf, 0x1eb0, 0x1eb1, 0x1eb2, 0x1eb3,
/* offsets 0xfec0 .. 0xfecf */
- 0x1eb2, 0x1eb3, 0x1eb4, 0x1eb5, 0x1eb6, 0x1eb7, 0x1eb8, 0x1eb9,
- 0x1eba, 0x1ebb, 0x1ebc, 0x1ebd, 0x1ebe, 0x1ebf, 0x1ec0, 0x1ec1,
+ 0x1eb4, 0x1eb5, 0x1eb6, 0x1eb7, 0x1eb8, 0x1eb9, 0x1eba, 0x1ebb,
+ 0x1ebc, 0x1ebd, 0x1ebe, 0x1ebf, 0x1ec0, 0x1ec1, 0x1ec2, 0x1ec3,
/* offsets 0xfed0 .. 0xfedf */
- 0x1ec2, 0x1ec3, 0x1ec4, 0x1ec5, 0x1ec6, 0x1ec7, 0x1ec8, 0x1ec9,
- 0x1eca, 0x1ecb, 0x1ecc, 0x1ecd, 0x1ece, 0x1ecf, 0x1ed0, 0x1ed1,
+ 0x1ec4, 0x1ec5, 0x1ec6, 0x1ec7, 0x1ec8, 0x1ec9, 0x1eca, 0x1ecb,
+ 0x1ecc, 0x1ecd, 0x1ece, 0x1ecf, 0x1ed0, 0x1ed1, 0x1ed2, 0x1ed3,
/* offsets 0xfee0 .. 0xfeef */
- 0x1ed2, 0x1ed3, 0x1ed4, 0x1ed5, 0x1ed6, 0x1ed7, 0x1ed8, 0x1ed9,
- 0x1eda, 0x1edb, 0x1edc, 0x1edd, 0x1ede, 0x1edf, 0x1ee0, 0x1ee1,
+ 0x1ed4, 0x1ed5, 0x1ed6, 0x1ed7, 0x1ed8, 0x1ed9, 0x1eda, 0x1edb,
+ 0x1edc, 0x1edd, 0x1ede, 0x1edf, 0x1ee0, 0x1ee1, 0x1ee2, 0x1ee3,
/* offsets 0xfef0 .. 0xfeff */
- 0x1ee2, 0x1ee3, 0x1ee4, 0x1ee5, 0x1ee6, 0x1ee7, 0x1ee9, 0x1eeb,
- 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef7, 0x1ef7,
+ 0x1ee4, 0x1ee5, 0x1ee6, 0x1ee7, 0x1ee8, 0x1ee9, 0x1eeb, 0x1eed,
+ 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef9, 0x1ef9, 0x1ef9,
/* offsets 0xff00 .. 0xff0f */
- 0x1ef7, 0x1ef7, 0x1ef8, 0x1ef9, 0x1efa, 0x1efb, 0x1efc, 0x1efd,
- 0x1efe, 0x1eff, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05,
+ 0x1ef9, 0x1ef9, 0x1efa, 0x1efb, 0x1efc, 0x1efd, 0x1efe, 0x1eff,
+ 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07,
/* offsets 0xff10 .. 0xff1f */
- 0x1f06, 0x1f07, 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d,
- 0x1f0e, 0x1f0f, 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15,
+ 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f,
+ 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f16, 0x1f17,
/* offsets 0xff20 .. 0xff2f */
- 0x1f16, 0x1f17, 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d,
- 0x1f1e, 0x1f1f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25,
+ 0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x1f1e, 0x1f1f,
+ 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27,
/* offsets 0xff30 .. 0xff3f */
- 0x1f26, 0x1f27, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d,
- 0x1f2e, 0x1f2f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35,
+ 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f,
+ 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37,
/* offsets 0xff40 .. 0xff4f */
- 0x1f36, 0x1f37, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d,
- 0x1f3e, 0x1f3f, 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45,
+ 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 0x1f3e, 0x1f3f,
+ 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f46, 0x1f47,
/* offsets 0xff50 .. 0xff5f */
- 0x1f46, 0x1f47, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d,
- 0x1f4e, 0x1f4f, 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55,
+ 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x1f4e, 0x1f4f,
+ 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55, 0x1f56, 0x1f57,
/* offsets 0xff60 .. 0xff6f */
- 0x1f56, 0x1f57, 0x1f58, 0x1f59, 0x1f5a, 0x1f5b, 0x1f5c, 0x1f5d,
- 0x1f5e, 0x1f5f, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65,
+ 0x1f58, 0x1f59, 0x1f5a, 0x1f5b, 0x1f5c, 0x1f5d, 0x1f5e, 0x1f5f,
+ 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67,
/* offsets 0xff70 .. 0xff7f */
- 0x1f66, 0x1f67, 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d,
- 0x1f6e, 0x1f6f, 0x1f70, 0x1f71, 0x1f72, 0x1f73, 0x1f74, 0x1f75,
+ 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f,
+ 0x1f70, 0x1f71, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1f76, 0x1f77,
/* offsets 0xff80 .. 0xff8f */
- 0x1f76, 0x1f77, 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d,
- 0x1f7e, 0x1f7f, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85,
+ 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d, 0x1f7e, 0x1f7f,
+ 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87,
/* offsets 0xff90 .. 0xff9f */
- 0x1f86, 0x1f87, 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d,
- 0x1f8e, 0x1f8f, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95,
+ 0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f,
+ 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97,
/* offsets 0xffa0 .. 0xffaf */
- 0x1f96, 0x1f97, 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d,
- 0x1f9e, 0x1f9f, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5,
+ 0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f,
+ 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7,
/* offsets 0xffb0 .. 0xffbf */
- 0x1fa6, 0x1fa7, 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad,
- 0x1fae, 0x1faf, 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5,
+ 0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf,
+ 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7,
/* offsets 0xffc0 .. 0xffcf */
- 0x1fb5, 0x1fb5, 0x1fb5, 0x1fb6, 0x1fb7, 0x1fb8, 0x1fb9, 0x1fba,
- 0x1fbb, 0x1fbb, 0x1fbb, 0x1fbc, 0x1fbd, 0x1fbe, 0x1fbf, 0x1fc0,
+ 0x1fb7, 0x1fb7, 0x1fb7, 0x1fb8, 0x1fb9, 0x1fba, 0x1fbb, 0x1fbc,
+ 0x1fbd, 0x1fbd, 0x1fbd, 0x1fbe, 0x1fbf, 0x1fc0, 0x1fc1, 0x1fc2,
/* offsets 0xffd0 .. 0xffdf */
- 0x1fc1, 0x1fc1, 0x1fc1, 0x1fc2, 0x1fc3, 0x1fc4, 0x1fc5, 0x1fc6,
- 0x1fc7, 0x1fc7, 0x1fc7, 0x1fc8, 0x1fc9, 0x1fca, 0x1fca, 0x1fca,
+ 0x1fc3, 0x1fc3, 0x1fc3, 0x1fc4, 0x1fc5, 0x1fc6, 0x1fc7, 0x1fc8,
+ 0x1fc9, 0x1fc9, 0x1fc9, 0x1fca, 0x1fcb, 0x1fcc, 0x1fcc, 0x1fcc,
/* offsets 0xffe0 .. 0xffef */
- 0x1fca, 0x1fcb, 0x1fcc, 0x1fcd, 0x1fce, 0x1fcf, 0x1fd0, 0x1fd1,
- 0x1fd1, 0x1fd2, 0x1fd3, 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, 0x1fd8,
+ 0x1fcc, 0x1fcd, 0x1fce, 0x1fcf, 0x1fd0, 0x1fd1, 0x1fd2, 0x1fd3,
+ 0x1fd3, 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, 0x1fd8, 0x1fd9, 0x1fda,
/* offset sentinel */
- 0x1fd8,
+ 0x1fda,
/* data */
0x0020, 0x0020, 0x0308, 0x0061, 0x0020, 0x0304, 0x0032, 0x0033,
0x0020, 0x0301, 0x03bc, 0x0020, 0x0327, 0x0031, 0x006f, 0x0031,
@@ -1886,313 +1886,314 @@ static const WCHAR compatmap_table[8152] =
0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd,
0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df,
0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, 0x30ea,
- 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30a2,
- 0x30d1, 0x30fc, 0x30c8, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x30a2,
- 0x30f3, 0x30da, 0x30a2, 0x30a2, 0x30fc, 0x30eb, 0x30a4, 0x30cb,
- 0x30f3, 0x30b0, 0x30a4, 0x30f3, 0x30c1, 0x30a6, 0x30a9, 0x30f3,
- 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c9, 0x30a8, 0x30fc, 0x30ab,
- 0x30fc, 0x30aa, 0x30f3, 0x30b9, 0x30aa, 0x30fc, 0x30e0, 0x30ab,
- 0x30a4, 0x30ea, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x30ab, 0x30ed,
- 0x30ea, 0x30fc, 0x30ac, 0x30ed, 0x30f3, 0x30ac, 0x30f3, 0x30de,
- 0x30ae, 0x30ac, 0x30ae, 0x30cb, 0x30fc, 0x30ad, 0x30e5, 0x30ea,
- 0x30fc, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x30ad, 0x30ed, 0x30ad,
- 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x30ad, 0x30ed, 0x30e1, 0x30fc,
- 0x30c8, 0x30eb, 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8, 0x30b0,
- 0x30e9, 0x30e0, 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x30af,
- 0x30eb, 0x30bc, 0x30a4, 0x30ed, 0x30af, 0x30ed, 0x30fc, 0x30cd,
- 0x30b1, 0x30fc, 0x30b9, 0x30b3, 0x30eb, 0x30ca, 0x30b3, 0x30fc,
- 0x30dd, 0x30b5, 0x30a4, 0x30af, 0x30eb, 0x30b5, 0x30f3, 0x30c1,
- 0x30fc, 0x30e0, 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0x30bb, 0x30f3,
- 0x30c1, 0x30bb, 0x30f3, 0x30c8, 0x30c0, 0x30fc, 0x30b9, 0x30c7,
- 0x30b7, 0x30c9, 0x30eb, 0x30c8, 0x30f3, 0x30ca, 0x30ce, 0x30ce,
- 0x30c3, 0x30c8, 0x30cf, 0x30a4, 0x30c4, 0x30d1, 0x30fc, 0x30bb,
- 0x30f3, 0x30c8, 0x30d1, 0x30fc, 0x30c4, 0x30d0, 0x30fc, 0x30ec,
- 0x30eb, 0x30d4, 0x30a2, 0x30b9, 0x30c8, 0x30eb, 0x30d4, 0x30af,
- 0x30eb, 0x30d4, 0x30b3, 0x30d3, 0x30eb, 0x30d5, 0x30a1, 0x30e9,
- 0x30c3, 0x30c9, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x30d6, 0x30c3,
- 0x30b7, 0x30a7, 0x30eb, 0x30d5, 0x30e9, 0x30f3, 0x30d8, 0x30af,
- 0x30bf, 0x30fc, 0x30eb, 0x30da, 0x30bd, 0x30da, 0x30cb, 0x30d2,
- 0x30d8, 0x30eb, 0x30c4, 0x30da, 0x30f3, 0x30b9, 0x30da, 0x30fc,
- 0x30b8, 0x30d9, 0x30fc, 0x30bf, 0x30dd, 0x30a4, 0x30f3, 0x30c8,
- 0x30dc, 0x30eb, 0x30c8, 0x30db, 0x30f3, 0x30dd, 0x30f3, 0x30c9,
- 0x30db, 0x30fc, 0x30eb, 0x30db, 0x30fc, 0x30f3, 0x30de, 0x30a4,
- 0x30af, 0x30ed, 0x30de, 0x30a4, 0x30eb, 0x30de, 0x30c3, 0x30cf,
- 0x30de, 0x30eb, 0x30af, 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3,
- 0x30df, 0x30af, 0x30ed, 0x30f3, 0x30df, 0x30ea, 0x30df, 0x30ea,
- 0x30d0, 0x30fc, 0x30eb, 0x30e1, 0x30ac, 0x30e1, 0x30ac, 0x30c8,
- 0x30f3, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30e4, 0x30fc, 0x30c9,
- 0x30e4, 0x30fc, 0x30eb, 0x30e6, 0x30a2, 0x30f3, 0x30ea, 0x30c3,
- 0x30c8, 0x30eb, 0x30ea, 0x30e9, 0x30eb, 0x30d4, 0x30fc, 0x30eb,
- 0x30fc, 0x30d6, 0x30eb, 0x30ec, 0x30e0, 0x30ec, 0x30f3, 0x30c8,
- 0x30b2, 0x30f3, 0x30ef, 0x30c3, 0x30c8, 0x0030, 0x70b9, 0x0031,
- 0x70b9, 0x0032, 0x70b9, 0x0033, 0x70b9, 0x0034, 0x70b9, 0x0035,
- 0x70b9, 0x0036, 0x70b9, 0x0037, 0x70b9, 0x0038, 0x70b9, 0x0039,
- 0x70b9, 0x0031, 0x0030, 0x70b9, 0x0031, 0x0031, 0x70b9, 0x0031,
- 0x0032, 0x70b9, 0x0031, 0x0033, 0x70b9, 0x0031, 0x0034, 0x70b9,
- 0x0031, 0x0035, 0x70b9, 0x0031, 0x0036, 0x70b9, 0x0031, 0x0037,
- 0x70b9, 0x0031, 0x0038, 0x70b9, 0x0031, 0x0039, 0x70b9, 0x0032,
- 0x0030, 0x70b9, 0x0032, 0x0031, 0x70b9, 0x0032, 0x0032, 0x70b9,
- 0x0032, 0x0033, 0x70b9, 0x0032, 0x0034, 0x70b9, 0x0068, 0x0050,
- 0x0061, 0x0064, 0x0061, 0x0041, 0x0055, 0x0062, 0x0061, 0x0072,
- 0x006f, 0x0056, 0x0070, 0x0063, 0x0064, 0x006d, 0x0064, 0x006d,
- 0x00b2, 0x0064, 0x006d, 0x00b3, 0x0049, 0x0055, 0x5e73, 0x6210,
- 0x662d, 0x548c, 0x5927, 0x6b63, 0x660e, 0x6cbb, 0x682a, 0x5f0f,
- 0x4f1a, 0x793e, 0x0070, 0x0041, 0x006e, 0x0041, 0x03bc, 0x0041,
- 0x006d, 0x0041, 0x006b, 0x0041, 0x004b, 0x0042, 0x004d, 0x0042,
- 0x0047, 0x0042, 0x0063, 0x0061, 0x006c, 0x006b, 0x0063, 0x0061,
- 0x006c, 0x0070, 0x0046, 0x006e, 0x0046, 0x03bc, 0x0046, 0x03bc,
- 0x0067, 0x006d, 0x0067, 0x006b, 0x0067, 0x0048, 0x007a, 0x006b,
- 0x0048, 0x007a, 0x004d, 0x0048, 0x007a, 0x0047, 0x0048, 0x007a,
- 0x0054, 0x0048, 0x007a, 0x03bc, 0x2113, 0x006d, 0x2113, 0x0064,
- 0x2113, 0x006b, 0x2113, 0x0066, 0x006d, 0x006e, 0x006d, 0x03bc,
- 0x006d, 0x006d, 0x006d, 0x0063, 0x006d, 0x006b, 0x006d, 0x006d,
- 0x006d, 0x00b2, 0x0063, 0x006d, 0x00b2, 0x006d, 0x00b2, 0x006b,
- 0x006d, 0x00b2, 0x006d, 0x006d, 0x00b3, 0x0063, 0x006d, 0x00b3,
- 0x006d, 0x00b3, 0x006b, 0x006d, 0x00b3, 0x006d, 0x2215, 0x0073,
- 0x006d, 0x2215, 0x0073, 0x00b2, 0x0050, 0x0061, 0x006b, 0x0050,
- 0x0061, 0x004d, 0x0050, 0x0061, 0x0047, 0x0050, 0x0061, 0x0072,
- 0x0061, 0x0064, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0072,
- 0x0061, 0x0064, 0x2215, 0x0073, 0x00b2, 0x0070, 0x0073, 0x006e,
- 0x0073, 0x03bc, 0x0073, 0x006d, 0x0073, 0x0070, 0x0056, 0x006e,
- 0x0056, 0x03bc, 0x0056, 0x006d, 0x0056, 0x006b, 0x0056, 0x004d,
- 0x0056, 0x0070, 0x0057, 0x006e, 0x0057, 0x03bc, 0x0057, 0x006d,
- 0x0057, 0x006b, 0x0057, 0x004d, 0x0057, 0x006b, 0x03a9, 0x004d,
- 0x03a9, 0x0061, 0x002e, 0x006d, 0x002e, 0x0042, 0x0071, 0x0063,
- 0x0063, 0x0063, 0x0064, 0x0043, 0x2215, 0x006b, 0x0067, 0x0043,
- 0x006f, 0x002e, 0x0064, 0x0042, 0x0047, 0x0079, 0x0068, 0x0061,
- 0x0048, 0x0050, 0x0069, 0x006e, 0x004b, 0x004b, 0x004b, 0x004d,
- 0x006b, 0x0074, 0x006c, 0x006d, 0x006c, 0x006e, 0x006c, 0x006f,
- 0x0067, 0x006c, 0x0078, 0x006d, 0x0062, 0x006d, 0x0069, 0x006c,
- 0x006d, 0x006f, 0x006c, 0x0050, 0x0048, 0x0070, 0x002e, 0x006d,
- 0x002e, 0x0050, 0x0050, 0x004d, 0x0050, 0x0052, 0x0073, 0x0072,
- 0x0053, 0x0076, 0x0057, 0x0062, 0x0056, 0x2215, 0x006d, 0x0041,
- 0x2215, 0x006d, 0x0031, 0x65e5, 0x0032, 0x65e5, 0x0033, 0x65e5,
- 0x0034, 0x65e5, 0x0035, 0x65e5, 0x0036, 0x65e5, 0x0037, 0x65e5,
- 0x0038, 0x65e5, 0x0039, 0x65e5, 0x0031, 0x0030, 0x65e5, 0x0031,
- 0x0031, 0x65e5, 0x0031, 0x0032, 0x65e5, 0x0031, 0x0033, 0x65e5,
- 0x0031, 0x0034, 0x65e5, 0x0031, 0x0035, 0x65e5, 0x0031, 0x0036,
- 0x65e5, 0x0031, 0x0037, 0x65e5, 0x0031, 0x0038, 0x65e5, 0x0031,
- 0x0039, 0x65e5, 0x0032, 0x0030, 0x65e5, 0x0032, 0x0031, 0x65e5,
- 0x0032, 0x0032, 0x65e5, 0x0032, 0x0033, 0x65e5, 0x0032, 0x0034,
- 0x65e5, 0x0032, 0x0035, 0x65e5, 0x0032, 0x0036, 0x65e5, 0x0032,
- 0x0037, 0x65e5, 0x0032, 0x0038, 0x65e5, 0x0032, 0x0039, 0x65e5,
- 0x0033, 0x0030, 0x65e5, 0x0033, 0x0031, 0x65e5, 0x0067, 0x0061,
- 0x006c, 0x044a, 0x044c, 0xa76f, 0x0126, 0x0153, 0xa727, 0xab37,
- 0x026b, 0xab52, 0x0066, 0x0066, 0x0066, 0x0069, 0x0066, 0x006c,
- 0x0066, 0x0066, 0x0069, 0x0066, 0x0066, 0x006c, 0x017f, 0x0074,
- 0x0073, 0x0074, 0x0574, 0x0576, 0x0574, 0x0565, 0x0574, 0x056b,
- 0x057e, 0x0576, 0x0574, 0x056d, 0x05e2, 0x05d0, 0x05d3, 0x05d4,
- 0x05db, 0x05dc, 0x05dd, 0x05e8, 0x05ea, 0x002b, 0x05d0, 0x05dc,
- 0x0671, 0x0671, 0x067b, 0x067b, 0x067b, 0x067b, 0x067e, 0x067e,
- 0x067e, 0x067e, 0x0680, 0x0680, 0x0680, 0x0680, 0x067a, 0x067a,
- 0x067a, 0x067a, 0x067f, 0x067f, 0x067f, 0x067f, 0x0679, 0x0679,
- 0x0679, 0x0679, 0x06a4, 0x06a4, 0x06a4, 0x06a4, 0x06a6, 0x06a6,
- 0x06a6, 0x06a6, 0x0684, 0x0684, 0x0684, 0x0684, 0x0683, 0x0683,
- 0x0683, 0x0683, 0x0686, 0x0686, 0x0686, 0x0686, 0x0687, 0x0687,
- 0x0687, 0x0687, 0x068d, 0x068d, 0x068c, 0x068c, 0x068e, 0x068e,
- 0x0688, 0x0688, 0x0698, 0x0698, 0x0691, 0x0691, 0x06a9, 0x06a9,
- 0x06a9, 0x06a9, 0x06af, 0x06af, 0x06af, 0x06af, 0x06b3, 0x06b3,
- 0x06b3, 0x06b3, 0x06b1, 0x06b1, 0x06b1, 0x06b1, 0x06ba, 0x06ba,
- 0x06bb, 0x06bb, 0x06bb, 0x06bb, 0x06c0, 0x06c0, 0x06c1, 0x06c1,
- 0x06c1, 0x06c1, 0x06be, 0x06be, 0x06be, 0x06be, 0x06d2, 0x06d2,
- 0x06d3, 0x06d3, 0x06ad, 0x06ad, 0x06ad, 0x06ad, 0x06c7, 0x06c7,
- 0x06c6, 0x06c6, 0x06c8, 0x06c8, 0x0677, 0x06cb, 0x06cb, 0x06c5,
- 0x06c5, 0x06c9, 0x06c9, 0x06d0, 0x06d0, 0x06d0, 0x06d0, 0x0649,
- 0x0649, 0x0626, 0x0627, 0x0626, 0x0627, 0x0626, 0x06d5, 0x0626,
- 0x06d5, 0x0626, 0x0648, 0x0626, 0x0648, 0x0626, 0x06c7, 0x0626,
- 0x06c7, 0x0626, 0x06c6, 0x0626, 0x06c6, 0x0626, 0x06c8, 0x0626,
- 0x06c8, 0x0626, 0x06d0, 0x0626, 0x06d0, 0x0626, 0x06d0, 0x0626,
- 0x0649, 0x0626, 0x0649, 0x0626, 0x0649, 0x06cc, 0x06cc, 0x06cc,
- 0x06cc, 0x0626, 0x062c, 0x0626, 0x062d, 0x0626, 0x0645, 0x0626,
- 0x0649, 0x0626, 0x064a, 0x0628, 0x062c, 0x0628, 0x062d, 0x0628,
- 0x062e, 0x0628, 0x0645, 0x0628, 0x0649, 0x0628, 0x064a, 0x062a,
- 0x062c, 0x062a, 0x062d, 0x062a, 0x062e, 0x062a, 0x0645, 0x062a,
- 0x0649, 0x062a, 0x064a, 0x062b, 0x062c, 0x062b, 0x0645, 0x062b,
- 0x0649, 0x062b, 0x064a, 0x062c, 0x062d, 0x062c, 0x0645, 0x062d,
- 0x062c, 0x062d, 0x0645, 0x062e, 0x062c, 0x062e, 0x062d, 0x062e,
- 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633, 0x062e, 0x0633,
- 0x0645, 0x0635, 0x062d, 0x0635, 0x0645, 0x0636, 0x062c, 0x0636,
- 0x062d, 0x0636, 0x062e, 0x0636, 0x0645, 0x0637, 0x062d, 0x0637,
- 0x0645, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639, 0x0645, 0x063a,
- 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641, 0x062d, 0x0641,
- 0x062e, 0x0641, 0x0645, 0x0641, 0x0649, 0x0641, 0x064a, 0x0642,
- 0x062d, 0x0642, 0x0645, 0x0642, 0x0649, 0x0642, 0x064a, 0x0643,
- 0x0627, 0x0643, 0x062c, 0x0643, 0x062d, 0x0643, 0x062e, 0x0643,
- 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643, 0x064a, 0x0644,
- 0x062c, 0x0644, 0x062d, 0x0644, 0x062e, 0x0644, 0x0645, 0x0644,
- 0x0649, 0x0644, 0x064a, 0x0645, 0x062c, 0x0645, 0x062d, 0x0645,
- 0x062e, 0x0645, 0x0645, 0x0645, 0x0649, 0x0645, 0x064a, 0x0646,
- 0x062c, 0x0646, 0x062d, 0x0646, 0x062e, 0x0646, 0x0645, 0x0646,
- 0x0649, 0x0646, 0x064a, 0x0647, 0x062c, 0x0647, 0x0645, 0x0647,
- 0x0649, 0x0647, 0x064a, 0x064a, 0x062c, 0x064a, 0x062d, 0x064a,
- 0x062e, 0x064a, 0x0645, 0x064a, 0x0649, 0x064a, 0x064a, 0x0630,
- 0x0670, 0x0631, 0x0670, 0x0649, 0x0670, 0x0020, 0x064c, 0x0651,
- 0x0020, 0x064d, 0x0651, 0x0020, 0x064e, 0x0651, 0x0020, 0x064f,
- 0x0651, 0x0020, 0x0650, 0x0651, 0x0020, 0x0651, 0x0670, 0x0626,
- 0x0631, 0x0626, 0x0632, 0x0626, 0x0645, 0x0626, 0x0646, 0x0626,
- 0x0649, 0x0626, 0x064a, 0x0628, 0x0631, 0x0628, 0x0632, 0x0628,
- 0x0645, 0x0628, 0x0646, 0x0628, 0x0649, 0x0628, 0x064a, 0x062a,
- 0x0631, 0x062a, 0x0632, 0x062a, 0x0645, 0x062a, 0x0646, 0x062a,
- 0x0649, 0x062a, 0x064a, 0x062b, 0x0631, 0x062b, 0x0632, 0x062b,
- 0x0645, 0x062b, 0x0646, 0x062b, 0x0649, 0x062b, 0x064a, 0x0641,
- 0x0649, 0x0641, 0x064a, 0x0642, 0x0649, 0x0642, 0x064a, 0x0643,
- 0x0627, 0x0643, 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643,
- 0x064a, 0x0644, 0x0645, 0x0644, 0x0649, 0x0644, 0x064a, 0x0645,
- 0x0627, 0x0645, 0x0645, 0x0646, 0x0631, 0x0646, 0x0632, 0x0646,
- 0x0645, 0x0646, 0x0646, 0x0646, 0x0649, 0x0646, 0x064a, 0x0649,
- 0x0670, 0x064a, 0x0631, 0x064a, 0x0632, 0x064a, 0x0645, 0x064a,
- 0x0646, 0x064a, 0x0649, 0x064a, 0x064a, 0x0626, 0x062c, 0x0626,
- 0x062d, 0x0626, 0x062e, 0x0626, 0x0645, 0x0626, 0x0647, 0x0628,
- 0x062c, 0x0628, 0x062d, 0x0628, 0x062e, 0x0628, 0x0645, 0x0628,
- 0x0647, 0x062a, 0x062c, 0x062a, 0x062d, 0x062a, 0x062e, 0x062a,
- 0x0645, 0x062a, 0x0647, 0x062b, 0x0645, 0x062c, 0x062d, 0x062c,
+ 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x4ee4,
+ 0x548c, 0x30a2, 0x30d1, 0x30fc, 0x30c8, 0x30a2, 0x30eb, 0x30d5,
+ 0x30a1, 0x30a2, 0x30f3, 0x30da, 0x30a2, 0x30a2, 0x30fc, 0x30eb,
+ 0x30a4, 0x30cb, 0x30f3, 0x30b0, 0x30a4, 0x30f3, 0x30c1, 0x30a6,
+ 0x30a9, 0x30f3, 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c9, 0x30a8,
+ 0x30fc, 0x30ab, 0x30fc, 0x30aa, 0x30f3, 0x30b9, 0x30aa, 0x30fc,
+ 0x30e0, 0x30ab, 0x30a4, 0x30ea, 0x30ab, 0x30e9, 0x30c3, 0x30c8,
+ 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x30ac, 0x30ed, 0x30f3, 0x30ac,
+ 0x30f3, 0x30de, 0x30ae, 0x30ac, 0x30ae, 0x30cb, 0x30fc, 0x30ad,
+ 0x30e5, 0x30ea, 0x30fc, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x30ad,
+ 0x30ed, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x30ad, 0x30ed,
+ 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30ad, 0x30ed, 0x30ef, 0x30c3,
+ 0x30c8, 0x30b0, 0x30e9, 0x30e0, 0x30b0, 0x30e9, 0x30e0, 0x30c8,
+ 0x30f3, 0x30af, 0x30eb, 0x30bc, 0x30a4, 0x30ed, 0x30af, 0x30ed,
+ 0x30fc, 0x30cd, 0x30b1, 0x30fc, 0x30b9, 0x30b3, 0x30eb, 0x30ca,
+ 0x30b3, 0x30fc, 0x30dd, 0x30b5, 0x30a4, 0x30af, 0x30eb, 0x30b5,
+ 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x30b7, 0x30ea, 0x30f3, 0x30b0,
+ 0x30bb, 0x30f3, 0x30c1, 0x30bb, 0x30f3, 0x30c8, 0x30c0, 0x30fc,
+ 0x30b9, 0x30c7, 0x30b7, 0x30c9, 0x30eb, 0x30c8, 0x30f3, 0x30ca,
+ 0x30ce, 0x30ce, 0x30c3, 0x30c8, 0x30cf, 0x30a4, 0x30c4, 0x30d1,
+ 0x30fc, 0x30bb, 0x30f3, 0x30c8, 0x30d1, 0x30fc, 0x30c4, 0x30d0,
+ 0x30fc, 0x30ec, 0x30eb, 0x30d4, 0x30a2, 0x30b9, 0x30c8, 0x30eb,
+ 0x30d4, 0x30af, 0x30eb, 0x30d4, 0x30b3, 0x30d3, 0x30eb, 0x30d5,
+ 0x30a1, 0x30e9, 0x30c3, 0x30c9, 0x30d5, 0x30a3, 0x30fc, 0x30c8,
+ 0x30d6, 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x30d5, 0x30e9, 0x30f3,
+ 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x30da, 0x30bd, 0x30da,
+ 0x30cb, 0x30d2, 0x30d8, 0x30eb, 0x30c4, 0x30da, 0x30f3, 0x30b9,
+ 0x30da, 0x30fc, 0x30b8, 0x30d9, 0x30fc, 0x30bf, 0x30dd, 0x30a4,
+ 0x30f3, 0x30c8, 0x30dc, 0x30eb, 0x30c8, 0x30db, 0x30f3, 0x30dd,
+ 0x30f3, 0x30c9, 0x30db, 0x30fc, 0x30eb, 0x30db, 0x30fc, 0x30f3,
+ 0x30de, 0x30a4, 0x30af, 0x30ed, 0x30de, 0x30a4, 0x30eb, 0x30de,
+ 0x30c3, 0x30cf, 0x30de, 0x30eb, 0x30af, 0x30de, 0x30f3, 0x30b7,
+ 0x30e7, 0x30f3, 0x30df, 0x30af, 0x30ed, 0x30f3, 0x30df, 0x30ea,
+ 0x30df, 0x30ea, 0x30d0, 0x30fc, 0x30eb, 0x30e1, 0x30ac, 0x30e1,
+ 0x30ac, 0x30c8, 0x30f3, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30e4,
+ 0x30fc, 0x30c9, 0x30e4, 0x30fc, 0x30eb, 0x30e6, 0x30a2, 0x30f3,
+ 0x30ea, 0x30c3, 0x30c8, 0x30eb, 0x30ea, 0x30e9, 0x30eb, 0x30d4,
+ 0x30fc, 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0x30ec, 0x30e0, 0x30ec,
+ 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0x30ef, 0x30c3, 0x30c8, 0x0030,
+ 0x70b9, 0x0031, 0x70b9, 0x0032, 0x70b9, 0x0033, 0x70b9, 0x0034,
+ 0x70b9, 0x0035, 0x70b9, 0x0036, 0x70b9, 0x0037, 0x70b9, 0x0038,
+ 0x70b9, 0x0039, 0x70b9, 0x0031, 0x0030, 0x70b9, 0x0031, 0x0031,
+ 0x70b9, 0x0031, 0x0032, 0x70b9, 0x0031, 0x0033, 0x70b9, 0x0031,
+ 0x0034, 0x70b9, 0x0031, 0x0035, 0x70b9, 0x0031, 0x0036, 0x70b9,
+ 0x0031, 0x0037, 0x70b9, 0x0031, 0x0038, 0x70b9, 0x0031, 0x0039,
+ 0x70b9, 0x0032, 0x0030, 0x70b9, 0x0032, 0x0031, 0x70b9, 0x0032,
+ 0x0032, 0x70b9, 0x0032, 0x0033, 0x70b9, 0x0032, 0x0034, 0x70b9,
+ 0x0068, 0x0050, 0x0061, 0x0064, 0x0061, 0x0041, 0x0055, 0x0062,
+ 0x0061, 0x0072, 0x006f, 0x0056, 0x0070, 0x0063, 0x0064, 0x006d,
+ 0x0064, 0x006d, 0x00b2, 0x0064, 0x006d, 0x00b3, 0x0049, 0x0055,
+ 0x5e73, 0x6210, 0x662d, 0x548c, 0x5927, 0x6b63, 0x660e, 0x6cbb,
+ 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x0070, 0x0041, 0x006e, 0x0041,
+ 0x03bc, 0x0041, 0x006d, 0x0041, 0x006b, 0x0041, 0x004b, 0x0042,
+ 0x004d, 0x0042, 0x0047, 0x0042, 0x0063, 0x0061, 0x006c, 0x006b,
+ 0x0063, 0x0061, 0x006c, 0x0070, 0x0046, 0x006e, 0x0046, 0x03bc,
+ 0x0046, 0x03bc, 0x0067, 0x006d, 0x0067, 0x006b, 0x0067, 0x0048,
+ 0x007a, 0x006b, 0x0048, 0x007a, 0x004d, 0x0048, 0x007a, 0x0047,
+ 0x0048, 0x007a, 0x0054, 0x0048, 0x007a, 0x03bc, 0x2113, 0x006d,
+ 0x2113, 0x0064, 0x2113, 0x006b, 0x2113, 0x0066, 0x006d, 0x006e,
+ 0x006d, 0x03bc, 0x006d, 0x006d, 0x006d, 0x0063, 0x006d, 0x006b,
+ 0x006d, 0x006d, 0x006d, 0x00b2, 0x0063, 0x006d, 0x00b2, 0x006d,
+ 0x00b2, 0x006b, 0x006d, 0x00b2, 0x006d, 0x006d, 0x00b3, 0x0063,
+ 0x006d, 0x00b3, 0x006d, 0x00b3, 0x006b, 0x006d, 0x00b3, 0x006d,
+ 0x2215, 0x0073, 0x006d, 0x2215, 0x0073, 0x00b2, 0x0050, 0x0061,
+ 0x006b, 0x0050, 0x0061, 0x004d, 0x0050, 0x0061, 0x0047, 0x0050,
+ 0x0061, 0x0072, 0x0061, 0x0064, 0x0072, 0x0061, 0x0064, 0x2215,
+ 0x0073, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00b2, 0x0070,
+ 0x0073, 0x006e, 0x0073, 0x03bc, 0x0073, 0x006d, 0x0073, 0x0070,
+ 0x0056, 0x006e, 0x0056, 0x03bc, 0x0056, 0x006d, 0x0056, 0x006b,
+ 0x0056, 0x004d, 0x0056, 0x0070, 0x0057, 0x006e, 0x0057, 0x03bc,
+ 0x0057, 0x006d, 0x0057, 0x006b, 0x0057, 0x004d, 0x0057, 0x006b,
+ 0x03a9, 0x004d, 0x03a9, 0x0061, 0x002e, 0x006d, 0x002e, 0x0042,
+ 0x0071, 0x0063, 0x0063, 0x0063, 0x0064, 0x0043, 0x2215, 0x006b,
+ 0x0067, 0x0043, 0x006f, 0x002e, 0x0064, 0x0042, 0x0047, 0x0079,
+ 0x0068, 0x0061, 0x0048, 0x0050, 0x0069, 0x006e, 0x004b, 0x004b,
+ 0x004b, 0x004d, 0x006b, 0x0074, 0x006c, 0x006d, 0x006c, 0x006e,
+ 0x006c, 0x006f, 0x0067, 0x006c, 0x0078, 0x006d, 0x0062, 0x006d,
+ 0x0069, 0x006c, 0x006d, 0x006f, 0x006c, 0x0050, 0x0048, 0x0070,
+ 0x002e, 0x006d, 0x002e, 0x0050, 0x0050, 0x004d, 0x0050, 0x0052,
+ 0x0073, 0x0072, 0x0053, 0x0076, 0x0057, 0x0062, 0x0056, 0x2215,
+ 0x006d, 0x0041, 0x2215, 0x006d, 0x0031, 0x65e5, 0x0032, 0x65e5,
+ 0x0033, 0x65e5, 0x0034, 0x65e5, 0x0035, 0x65e5, 0x0036, 0x65e5,
+ 0x0037, 0x65e5, 0x0038, 0x65e5, 0x0039, 0x65e5, 0x0031, 0x0030,
+ 0x65e5, 0x0031, 0x0031, 0x65e5, 0x0031, 0x0032, 0x65e5, 0x0031,
+ 0x0033, 0x65e5, 0x0031, 0x0034, 0x65e5, 0x0031, 0x0035, 0x65e5,
+ 0x0031, 0x0036, 0x65e5, 0x0031, 0x0037, 0x65e5, 0x0031, 0x0038,
+ 0x65e5, 0x0031, 0x0039, 0x65e5, 0x0032, 0x0030, 0x65e5, 0x0032,
+ 0x0031, 0x65e5, 0x0032, 0x0032, 0x65e5, 0x0032, 0x0033, 0x65e5,
+ 0x0032, 0x0034, 0x65e5, 0x0032, 0x0035, 0x65e5, 0x0032, 0x0036,
+ 0x65e5, 0x0032, 0x0037, 0x65e5, 0x0032, 0x0038, 0x65e5, 0x0032,
+ 0x0039, 0x65e5, 0x0033, 0x0030, 0x65e5, 0x0033, 0x0031, 0x65e5,
+ 0x0067, 0x0061, 0x006c, 0x044a, 0x044c, 0xa76f, 0x0126, 0x0153,
+ 0xa727, 0xab37, 0x026b, 0xab52, 0x0066, 0x0066, 0x0066, 0x0069,
+ 0x0066, 0x006c, 0x0066, 0x0066, 0x0069, 0x0066, 0x0066, 0x006c,
+ 0x017f, 0x0074, 0x0073, 0x0074, 0x0574, 0x0576, 0x0574, 0x0565,
+ 0x0574, 0x056b, 0x057e, 0x0576, 0x0574, 0x056d, 0x05e2, 0x05d0,
+ 0x05d3, 0x05d4, 0x05db, 0x05dc, 0x05dd, 0x05e8, 0x05ea, 0x002b,
+ 0x05d0, 0x05dc, 0x0671, 0x0671, 0x067b, 0x067b, 0x067b, 0x067b,
+ 0x067e, 0x067e, 0x067e, 0x067e, 0x0680, 0x0680, 0x0680, 0x0680,
+ 0x067a, 0x067a, 0x067a, 0x067a, 0x067f, 0x067f, 0x067f, 0x067f,
+ 0x0679, 0x0679, 0x0679, 0x0679, 0x06a4, 0x06a4, 0x06a4, 0x06a4,
+ 0x06a6, 0x06a6, 0x06a6, 0x06a6, 0x0684, 0x0684, 0x0684, 0x0684,
+ 0x0683, 0x0683, 0x0683, 0x0683, 0x0686, 0x0686, 0x0686, 0x0686,
+ 0x0687, 0x0687, 0x0687, 0x0687, 0x068d, 0x068d, 0x068c, 0x068c,
+ 0x068e, 0x068e, 0x0688, 0x0688, 0x0698, 0x0698, 0x0691, 0x0691,
+ 0x06a9, 0x06a9, 0x06a9, 0x06a9, 0x06af, 0x06af, 0x06af, 0x06af,
+ 0x06b3, 0x06b3, 0x06b3, 0x06b3, 0x06b1, 0x06b1, 0x06b1, 0x06b1,
+ 0x06ba, 0x06ba, 0x06bb, 0x06bb, 0x06bb, 0x06bb, 0x06c0, 0x06c0,
+ 0x06c1, 0x06c1, 0x06c1, 0x06c1, 0x06be, 0x06be, 0x06be, 0x06be,
+ 0x06d2, 0x06d2, 0x06d3, 0x06d3, 0x06ad, 0x06ad, 0x06ad, 0x06ad,
+ 0x06c7, 0x06c7, 0x06c6, 0x06c6, 0x06c8, 0x06c8, 0x0677, 0x06cb,
+ 0x06cb, 0x06c5, 0x06c5, 0x06c9, 0x06c9, 0x06d0, 0x06d0, 0x06d0,
+ 0x06d0, 0x0649, 0x0649, 0x0626, 0x0627, 0x0626, 0x0627, 0x0626,
+ 0x06d5, 0x0626, 0x06d5, 0x0626, 0x0648, 0x0626, 0x0648, 0x0626,
+ 0x06c7, 0x0626, 0x06c7, 0x0626, 0x06c6, 0x0626, 0x06c6, 0x0626,
+ 0x06c8, 0x0626, 0x06c8, 0x0626, 0x06d0, 0x0626, 0x06d0, 0x0626,
+ 0x06d0, 0x0626, 0x0649, 0x0626, 0x0649, 0x0626, 0x0649, 0x06cc,
+ 0x06cc, 0x06cc, 0x06cc, 0x0626, 0x062c, 0x0626, 0x062d, 0x0626,
+ 0x0645, 0x0626, 0x0649, 0x0626, 0x064a, 0x0628, 0x062c, 0x0628,
+ 0x062d, 0x0628, 0x062e, 0x0628, 0x0645, 0x0628, 0x0649, 0x0628,
+ 0x064a, 0x062a, 0x062c, 0x062a, 0x062d, 0x062a, 0x062e, 0x062a,
+ 0x0645, 0x062a, 0x0649, 0x062a, 0x064a, 0x062b, 0x062c, 0x062b,
+ 0x0645, 0x062b, 0x0649, 0x062b, 0x064a, 0x062c, 0x062d, 0x062c,
0x0645, 0x062d, 0x062c, 0x062d, 0x0645, 0x062e, 0x062c, 0x062e,
- 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633, 0x062e, 0x0633,
- 0x0645, 0x0635, 0x062d, 0x0635, 0x062e, 0x0635, 0x0645, 0x0636,
+ 0x062d, 0x062e, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633,
+ 0x062e, 0x0633, 0x0645, 0x0635, 0x062d, 0x0635, 0x0645, 0x0636,
0x062c, 0x0636, 0x062d, 0x0636, 0x062e, 0x0636, 0x0645, 0x0637,
- 0x062d, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639, 0x0645, 0x063a,
- 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641, 0x062d, 0x0641,
- 0x062e, 0x0641, 0x0645, 0x0642, 0x062d, 0x0642, 0x0645, 0x0643,
- 0x062c, 0x0643, 0x062d, 0x0643, 0x062e, 0x0643, 0x0644, 0x0643,
- 0x0645, 0x0644, 0x062c, 0x0644, 0x062d, 0x0644, 0x062e, 0x0644,
- 0x0645, 0x0644, 0x0647, 0x0645, 0x062c, 0x0645, 0x062d, 0x0645,
- 0x062e, 0x0645, 0x0645, 0x0646, 0x062c, 0x0646, 0x062d, 0x0646,
- 0x062e, 0x0646, 0x0645, 0x0646, 0x0647, 0x0647, 0x062c, 0x0647,
- 0x0645, 0x0647, 0x0670, 0x064a, 0x062c, 0x064a, 0x062d, 0x064a,
- 0x062e, 0x064a, 0x0645, 0x064a, 0x0647, 0x0626, 0x0645, 0x0626,
- 0x0647, 0x0628, 0x0645, 0x0628, 0x0647, 0x062a, 0x0645, 0x062a,
- 0x0647, 0x062b, 0x0645, 0x062b, 0x0647, 0x0633, 0x0645, 0x0633,
- 0x0647, 0x0634, 0x0645, 0x0634, 0x0647, 0x0643, 0x0644, 0x0643,
- 0x0645, 0x0644, 0x0645, 0x0646, 0x0645, 0x0646, 0x0647, 0x064a,
- 0x0645, 0x064a, 0x0647, 0x0640, 0x064e, 0x0651, 0x0640, 0x064f,
- 0x0651, 0x0640, 0x0650, 0x0651, 0x0637, 0x0649, 0x0637, 0x064a,
- 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649, 0x063a, 0x064a,
- 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649, 0x0634, 0x064a,
- 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649, 0x062c, 0x064a,
- 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649, 0x0635, 0x064a,
- 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c, 0x0634, 0x062d,
- 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631, 0x0633, 0x0631,
- 0x0635, 0x0631, 0x0636, 0x0631, 0x0637, 0x0649, 0x0637, 0x064a,
- 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649, 0x063a, 0x064a,
- 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649, 0x0634, 0x064a,
- 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649, 0x062c, 0x064a,
- 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649, 0x0635, 0x064a,
- 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c, 0x0634, 0x062d,
- 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631, 0x0633, 0x0631,
- 0x0635, 0x0631, 0x0636, 0x0631, 0x0634, 0x062c, 0x0634, 0x062d,
- 0x0634, 0x062e, 0x0634, 0x0645, 0x0633, 0x0647, 0x0634, 0x0647,
- 0x0637, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633, 0x062e,
- 0x0634, 0x062c, 0x0634, 0x062d, 0x0634, 0x062e, 0x0637, 0x0645,
- 0x0638, 0x0645, 0x0627, 0x064b, 0x0627, 0x064b, 0x062a, 0x062c,
- 0x0645, 0x062a, 0x062d, 0x062c, 0x062a, 0x062d, 0x062c, 0x062a,
- 0x062d, 0x0645, 0x062a, 0x062e, 0x0645, 0x062a, 0x0645, 0x062c,
- 0x062a, 0x0645, 0x062d, 0x062a, 0x0645, 0x062e, 0x062c, 0x0645,
- 0x062d, 0x062c, 0x0645, 0x062d, 0x062d, 0x0645, 0x064a, 0x062d,
- 0x0645, 0x0649, 0x0633, 0x062d, 0x062c, 0x0633, 0x062c, 0x062d,
- 0x0633, 0x062c, 0x0649, 0x0633, 0x0645, 0x062d, 0x0633, 0x0645,
- 0x062d, 0x0633, 0x0645, 0x062c, 0x0633, 0x0645, 0x0645, 0x0633,
- 0x0645, 0x0645, 0x0635, 0x062d, 0x062d, 0x0635, 0x062d, 0x062d,
- 0x0635, 0x0645, 0x0645, 0x0634, 0x062d, 0x0645, 0x0634, 0x062d,
- 0x0645, 0x0634, 0x062c, 0x064a, 0x0634, 0x0645, 0x062e, 0x0634,
- 0x0645, 0x062e, 0x0634, 0x0645, 0x0645, 0x0634, 0x0645, 0x0645,
- 0x0636, 0x062d, 0x0649, 0x0636, 0x062e, 0x0645, 0x0636, 0x062e,
- 0x0645, 0x0637, 0x0645, 0x062d, 0x0637, 0x0645, 0x062d, 0x0637,
- 0x0645, 0x0645, 0x0637, 0x0645, 0x064a, 0x0639, 0x062c, 0x0645,
- 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0645, 0x0639, 0x0645,
- 0x0649, 0x063a, 0x0645, 0x0645, 0x063a, 0x0645, 0x064a, 0x063a,
- 0x0645, 0x0649, 0x0641, 0x062e, 0x0645, 0x0641, 0x062e, 0x0645,
- 0x0642, 0x0645, 0x062d, 0x0642, 0x0645, 0x0645, 0x0644, 0x062d,
- 0x0645, 0x0644, 0x062d, 0x064a, 0x0644, 0x062d, 0x0649, 0x0644,
- 0x062c, 0x062c, 0x0644, 0x062c, 0x062c, 0x0644, 0x062e, 0x0645,
- 0x0644, 0x062e, 0x0645, 0x0644, 0x0645, 0x062d, 0x0644, 0x0645,
- 0x062d, 0x0645, 0x062d, 0x062c, 0x0645, 0x062d, 0x0645, 0x0645,
- 0x062d, 0x064a, 0x0645, 0x062c, 0x062d, 0x0645, 0x062c, 0x0645,
- 0x0645, 0x062e, 0x062c, 0x0645, 0x062e, 0x0645, 0x0645, 0x062c,
- 0x062e, 0x0647, 0x0645, 0x062c, 0x0647, 0x0645, 0x0645, 0x0646,
- 0x062d, 0x0645, 0x0646, 0x062d, 0x0649, 0x0646, 0x062c, 0x0645,
- 0x0646, 0x062c, 0x0645, 0x0646, 0x062c, 0x0649, 0x0646, 0x0645,
- 0x064a, 0x0646, 0x0645, 0x0649, 0x064a, 0x0645, 0x0645, 0x064a,
- 0x0645, 0x0645, 0x0628, 0x062e, 0x064a, 0x062a, 0x062c, 0x064a,
- 0x062a, 0x062c, 0x0649, 0x062a, 0x062e, 0x064a, 0x062a, 0x062e,
- 0x0649, 0x062a, 0x0645, 0x064a, 0x062a, 0x0645, 0x0649, 0x062c,
- 0x0645, 0x064a, 0x062c, 0x062d, 0x0649, 0x062c, 0x0645, 0x0649,
- 0x0633, 0x062e, 0x0649, 0x0635, 0x062d, 0x064a, 0x0634, 0x062d,
- 0x064a, 0x0636, 0x062d, 0x064a, 0x0644, 0x062c, 0x064a, 0x0644,
- 0x0645, 0x064a, 0x064a, 0x062d, 0x064a, 0x064a, 0x062c, 0x064a,
- 0x064a, 0x0645, 0x064a, 0x0645, 0x0645, 0x064a, 0x0642, 0x0645,
- 0x064a, 0x0646, 0x062d, 0x064a, 0x0642, 0x0645, 0x062d, 0x0644,
- 0x062d, 0x0645, 0x0639, 0x0645, 0x064a, 0x0643, 0x0645, 0x064a,
- 0x0646, 0x062c, 0x062d, 0x0645, 0x062e, 0x064a, 0x0644, 0x062c,
- 0x0645, 0x0643, 0x0645, 0x0645, 0x0644, 0x062c, 0x0645, 0x0646,
- 0x062c, 0x062d, 0x062c, 0x062d, 0x064a, 0x062d, 0x062c, 0x064a,
- 0x0645, 0x062c, 0x064a, 0x0641, 0x0645, 0x064a, 0x0628, 0x062d,
- 0x064a, 0x0643, 0x0645, 0x0645, 0x0639, 0x062c, 0x0645, 0x0635,
- 0x0645, 0x0645, 0x0633, 0x062e, 0x064a, 0x0646, 0x062c, 0x064a,
- 0x0635, 0x0644, 0x06d2, 0x0642, 0x0644, 0x06d2, 0x0627, 0x0644,
- 0x0644, 0x0647, 0x0627, 0x0643, 0x0628, 0x0631, 0x0645, 0x062d,
- 0x0645, 0x062f, 0x0635, 0x0644, 0x0639, 0x0645, 0x0631, 0x0633,
- 0x0648, 0x0644, 0x0639, 0x0644, 0x064a, 0x0647, 0x0648, 0x0633,
- 0x0644, 0x0645, 0x0635, 0x0644, 0x0649, 0x0635, 0x0644, 0x0649,
- 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644,
- 0x064a, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645, 0x062c,
- 0x0644, 0x0020, 0x062c, 0x0644, 0x0627, 0x0644, 0x0647, 0x0631,
- 0x06cc, 0x0627, 0x0644, 0x002c, 0x3001, 0x3002, 0x003a, 0x003b,
- 0x0021, 0x003f, 0x3016, 0x3017, 0x2026, 0x2025, 0x2014, 0x2013,
- 0x005f, 0x005f, 0x0028, 0x0029, 0x007b, 0x007d, 0x3014, 0x3015,
- 0x3010, 0x3011, 0x300a, 0x300b, 0x3008, 0x3009, 0x300c, 0x300d,
- 0x300e, 0x300f, 0x005b, 0x005d, 0x203e, 0x203e, 0x203e, 0x203e,
- 0x005f, 0x005f, 0x005f, 0x002c, 0x3001, 0x002e, 0x003b, 0x003a,
- 0x003f, 0x0021, 0x2014, 0x0028, 0x0029, 0x007b, 0x007d, 0x3014,
- 0x3015, 0x0023, 0x0026, 0x002a, 0x002b, 0x002d, 0x003c, 0x003e,
- 0x003d, 0x005c, 0x0024, 0x0025, 0x0040, 0x0020, 0x064b, 0x0640,
- 0x064b, 0x0020, 0x064c, 0x0020, 0x064d, 0x0020, 0x064e, 0x0640,
- 0x064e, 0x0020, 0x064f, 0x0640, 0x064f, 0x0020, 0x0650, 0x0640,
- 0x0650, 0x0020, 0x0651, 0x0640, 0x0651, 0x0020, 0x0652, 0x0640,
- 0x0652, 0x0621, 0x0622, 0x0622, 0x0623, 0x0623, 0x0624, 0x0624,
- 0x0625, 0x0625, 0x0626, 0x0626, 0x0626, 0x0626, 0x0627, 0x0627,
- 0x0628, 0x0628, 0x0628, 0x0628, 0x0629, 0x0629, 0x062a, 0x062a,
- 0x062a, 0x062a, 0x062b, 0x062b, 0x062b, 0x062b, 0x062c, 0x062c,
- 0x062c, 0x062c, 0x062d, 0x062d, 0x062d, 0x062d, 0x062e, 0x062e,
- 0x062e, 0x062e, 0x062f, 0x062f, 0x0630, 0x0630, 0x0631, 0x0631,
- 0x0632, 0x0632, 0x0633, 0x0633, 0x0633, 0x0633, 0x0634, 0x0634,
- 0x0634, 0x0634, 0x0635, 0x0635, 0x0635, 0x0635, 0x0636, 0x0636,
- 0x0636, 0x0636, 0x0637, 0x0637, 0x0637, 0x0637, 0x0638, 0x0638,
- 0x0638, 0x0638, 0x0639, 0x0639, 0x0639, 0x0639, 0x063a, 0x063a,
- 0x063a, 0x063a, 0x0641, 0x0641, 0x0641, 0x0641, 0x0642, 0x0642,
- 0x0642, 0x0642, 0x0643, 0x0643, 0x0643, 0x0643, 0x0644, 0x0644,
- 0x0644, 0x0644, 0x0645, 0x0645, 0x0645, 0x0645, 0x0646, 0x0646,
- 0x0646, 0x0646, 0x0647, 0x0647, 0x0647, 0x0647, 0x0648, 0x0648,
- 0x0649, 0x0649, 0x064a, 0x064a, 0x064a, 0x064a, 0x0644, 0x0622,
- 0x0644, 0x0622, 0x0644, 0x0623, 0x0644, 0x0623, 0x0644, 0x0625,
- 0x0644, 0x0625, 0x0644, 0x0627, 0x0644, 0x0627, 0x0021, 0x0022,
- 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a,
- 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032,
- 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a,
- 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042,
- 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a,
- 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052,
- 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a,
- 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062,
- 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a,
- 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072,
- 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a,
- 0x007b, 0x007c, 0x007d, 0x007e, 0x2985, 0x2986, 0x3002, 0x300c,
- 0x300d, 0x3001, 0x30fb, 0x30f2, 0x30a1, 0x30a3, 0x30a5, 0x30a7,
- 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, 0x30fc, 0x30a2, 0x30a4,
- 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3,
- 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c4,
- 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf,
- 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1,
- 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec,
- 0x30ed, 0x30ef, 0x30f3, 0x3099, 0x309a, 0x3164, 0x3131, 0x3132,
- 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x313a,
- 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, 0x3141, 0x3142,
- 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, 0x314a,
- 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151, 0x3152,
- 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a,
- 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, 0x3161, 0x3162,
- 0x3163, 0x00a2, 0x00a3, 0x00ac, 0x00af, 0x00a6, 0x00a5, 0x20a9,
- 0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25a0, 0x25cb
+ 0x062d, 0x0637, 0x0645, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639,
+ 0x0645, 0x063a, 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641,
+ 0x062d, 0x0641, 0x062e, 0x0641, 0x0645, 0x0641, 0x0649, 0x0641,
+ 0x064a, 0x0642, 0x062d, 0x0642, 0x0645, 0x0642, 0x0649, 0x0642,
+ 0x064a, 0x0643, 0x0627, 0x0643, 0x062c, 0x0643, 0x062d, 0x0643,
+ 0x062e, 0x0643, 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643,
+ 0x064a, 0x0644, 0x062c, 0x0644, 0x062d, 0x0644, 0x062e, 0x0644,
+ 0x0645, 0x0644, 0x0649, 0x0644, 0x064a, 0x0645, 0x062c, 0x0645,
+ 0x062d, 0x0645, 0x062e, 0x0645, 0x0645, 0x0645, 0x0649, 0x0645,
+ 0x064a, 0x0646, 0x062c, 0x0646, 0x062d, 0x0646, 0x062e, 0x0646,
+ 0x0645, 0x0646, 0x0649, 0x0646, 0x064a, 0x0647, 0x062c, 0x0647,
+ 0x0645, 0x0647, 0x0649, 0x0647, 0x064a, 0x064a, 0x062c, 0x064a,
+ 0x062d, 0x064a, 0x062e, 0x064a, 0x0645, 0x064a, 0x0649, 0x064a,
+ 0x064a, 0x0630, 0x0670, 0x0631, 0x0670, 0x0649, 0x0670, 0x0020,
+ 0x064c, 0x0651, 0x0020, 0x064d, 0x0651, 0x0020, 0x064e, 0x0651,
+ 0x0020, 0x064f, 0x0651, 0x0020, 0x0650, 0x0651, 0x0020, 0x0651,
+ 0x0670, 0x0626, 0x0631, 0x0626, 0x0632, 0x0626, 0x0645, 0x0626,
+ 0x0646, 0x0626, 0x0649, 0x0626, 0x064a, 0x0628, 0x0631, 0x0628,
+ 0x0632, 0x0628, 0x0645, 0x0628, 0x0646, 0x0628, 0x0649, 0x0628,
+ 0x064a, 0x062a, 0x0631, 0x062a, 0x0632, 0x062a, 0x0645, 0x062a,
+ 0x0646, 0x062a, 0x0649, 0x062a, 0x064a, 0x062b, 0x0631, 0x062b,
+ 0x0632, 0x062b, 0x0645, 0x062b, 0x0646, 0x062b, 0x0649, 0x062b,
+ 0x064a, 0x0641, 0x0649, 0x0641, 0x064a, 0x0642, 0x0649, 0x0642,
+ 0x064a, 0x0643, 0x0627, 0x0643, 0x0644, 0x0643, 0x0645, 0x0643,
+ 0x0649, 0x0643, 0x064a, 0x0644, 0x0645, 0x0644, 0x0649, 0x0644,
+ 0x064a, 0x0645, 0x0627, 0x0645, 0x0645, 0x0646, 0x0631, 0x0646,
+ 0x0632, 0x0646, 0x0645, 0x0646, 0x0646, 0x0646, 0x0649, 0x0646,
+ 0x064a, 0x0649, 0x0670, 0x064a, 0x0631, 0x064a, 0x0632, 0x064a,
+ 0x0645, 0x064a, 0x0646, 0x064a, 0x0649, 0x064a, 0x064a, 0x0626,
+ 0x062c, 0x0626, 0x062d, 0x0626, 0x062e, 0x0626, 0x0645, 0x0626,
+ 0x0647, 0x0628, 0x062c, 0x0628, 0x062d, 0x0628, 0x062e, 0x0628,
+ 0x0645, 0x0628, 0x0647, 0x062a, 0x062c, 0x062a, 0x062d, 0x062a,
+ 0x062e, 0x062a, 0x0645, 0x062a, 0x0647, 0x062b, 0x0645, 0x062c,
+ 0x062d, 0x062c, 0x0645, 0x062d, 0x062c, 0x062d, 0x0645, 0x062e,
+ 0x062c, 0x062e, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d, 0x0633,
+ 0x062e, 0x0633, 0x0645, 0x0635, 0x062d, 0x0635, 0x062e, 0x0635,
+ 0x0645, 0x0636, 0x062c, 0x0636, 0x062d, 0x0636, 0x062e, 0x0636,
+ 0x0645, 0x0637, 0x062d, 0x0638, 0x0645, 0x0639, 0x062c, 0x0639,
+ 0x0645, 0x063a, 0x062c, 0x063a, 0x0645, 0x0641, 0x062c, 0x0641,
+ 0x062d, 0x0641, 0x062e, 0x0641, 0x0645, 0x0642, 0x062d, 0x0642,
+ 0x0645, 0x0643, 0x062c, 0x0643, 0x062d, 0x0643, 0x062e, 0x0643,
+ 0x0644, 0x0643, 0x0645, 0x0644, 0x062c, 0x0644, 0x062d, 0x0644,
+ 0x062e, 0x0644, 0x0645, 0x0644, 0x0647, 0x0645, 0x062c, 0x0645,
+ 0x062d, 0x0645, 0x062e, 0x0645, 0x0645, 0x0646, 0x062c, 0x0646,
+ 0x062d, 0x0646, 0x062e, 0x0646, 0x0645, 0x0646, 0x0647, 0x0647,
+ 0x062c, 0x0647, 0x0645, 0x0647, 0x0670, 0x064a, 0x062c, 0x064a,
+ 0x062d, 0x064a, 0x062e, 0x064a, 0x0645, 0x064a, 0x0647, 0x0626,
+ 0x0645, 0x0626, 0x0647, 0x0628, 0x0645, 0x0628, 0x0647, 0x062a,
+ 0x0645, 0x062a, 0x0647, 0x062b, 0x0645, 0x062b, 0x0647, 0x0633,
+ 0x0645, 0x0633, 0x0647, 0x0634, 0x0645, 0x0634, 0x0647, 0x0643,
+ 0x0644, 0x0643, 0x0645, 0x0644, 0x0645, 0x0646, 0x0645, 0x0646,
+ 0x0647, 0x064a, 0x0645, 0x064a, 0x0647, 0x0640, 0x064e, 0x0651,
+ 0x0640, 0x064f, 0x0651, 0x0640, 0x0650, 0x0651, 0x0637, 0x0649,
+ 0x0637, 0x064a, 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649,
+ 0x063a, 0x064a, 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649,
+ 0x0634, 0x064a, 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649,
+ 0x062c, 0x064a, 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649,
+ 0x0635, 0x064a, 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c,
+ 0x0634, 0x062d, 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631,
+ 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, 0x0631, 0x0637, 0x0649,
+ 0x0637, 0x064a, 0x0639, 0x0649, 0x0639, 0x064a, 0x063a, 0x0649,
+ 0x063a, 0x064a, 0x0633, 0x0649, 0x0633, 0x064a, 0x0634, 0x0649,
+ 0x0634, 0x064a, 0x062d, 0x0649, 0x062d, 0x064a, 0x062c, 0x0649,
+ 0x062c, 0x064a, 0x062e, 0x0649, 0x062e, 0x064a, 0x0635, 0x0649,
+ 0x0635, 0x064a, 0x0636, 0x0649, 0x0636, 0x064a, 0x0634, 0x062c,
+ 0x0634, 0x062d, 0x0634, 0x062e, 0x0634, 0x0645, 0x0634, 0x0631,
+ 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, 0x0631, 0x0634, 0x062c,
+ 0x0634, 0x062d, 0x0634, 0x062e, 0x0634, 0x0645, 0x0633, 0x0647,
+ 0x0634, 0x0647, 0x0637, 0x0645, 0x0633, 0x062c, 0x0633, 0x062d,
+ 0x0633, 0x062e, 0x0634, 0x062c, 0x0634, 0x062d, 0x0634, 0x062e,
+ 0x0637, 0x0645, 0x0638, 0x0645, 0x0627, 0x064b, 0x0627, 0x064b,
+ 0x062a, 0x062c, 0x0645, 0x062a, 0x062d, 0x062c, 0x062a, 0x062d,
+ 0x062c, 0x062a, 0x062d, 0x0645, 0x062a, 0x062e, 0x0645, 0x062a,
+ 0x0645, 0x062c, 0x062a, 0x0645, 0x062d, 0x062a, 0x0645, 0x062e,
+ 0x062c, 0x0645, 0x062d, 0x062c, 0x0645, 0x062d, 0x062d, 0x0645,
+ 0x064a, 0x062d, 0x0645, 0x0649, 0x0633, 0x062d, 0x062c, 0x0633,
+ 0x062c, 0x062d, 0x0633, 0x062c, 0x0649, 0x0633, 0x0645, 0x062d,
+ 0x0633, 0x0645, 0x062d, 0x0633, 0x0645, 0x062c, 0x0633, 0x0645,
+ 0x0645, 0x0633, 0x0645, 0x0645, 0x0635, 0x062d, 0x062d, 0x0635,
+ 0x062d, 0x062d, 0x0635, 0x0645, 0x0645, 0x0634, 0x062d, 0x0645,
+ 0x0634, 0x062d, 0x0645, 0x0634, 0x062c, 0x064a, 0x0634, 0x0645,
+ 0x062e, 0x0634, 0x0645, 0x062e, 0x0634, 0x0645, 0x0645, 0x0634,
+ 0x0645, 0x0645, 0x0636, 0x062d, 0x0649, 0x0636, 0x062e, 0x0645,
+ 0x0636, 0x062e, 0x0645, 0x0637, 0x0645, 0x062d, 0x0637, 0x0645,
+ 0x062d, 0x0637, 0x0645, 0x0645, 0x0637, 0x0645, 0x064a, 0x0639,
+ 0x062c, 0x0645, 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0645,
+ 0x0639, 0x0645, 0x0649, 0x063a, 0x0645, 0x0645, 0x063a, 0x0645,
+ 0x064a, 0x063a, 0x0645, 0x0649, 0x0641, 0x062e, 0x0645, 0x0641,
+ 0x062e, 0x0645, 0x0642, 0x0645, 0x062d, 0x0642, 0x0645, 0x0645,
+ 0x0644, 0x062d, 0x0645, 0x0644, 0x062d, 0x064a, 0x0644, 0x062d,
+ 0x0649, 0x0644, 0x062c, 0x062c, 0x0644, 0x062c, 0x062c, 0x0644,
+ 0x062e, 0x0645, 0x0644, 0x062e, 0x0645, 0x0644, 0x0645, 0x062d,
+ 0x0644, 0x0645, 0x062d, 0x0645, 0x062d, 0x062c, 0x0645, 0x062d,
+ 0x0645, 0x0645, 0x062d, 0x064a, 0x0645, 0x062c, 0x062d, 0x0645,
+ 0x062c, 0x0645, 0x0645, 0x062e, 0x062c, 0x0645, 0x062e, 0x0645,
+ 0x0645, 0x062c, 0x062e, 0x0647, 0x0645, 0x062c, 0x0647, 0x0645,
+ 0x0645, 0x0646, 0x062d, 0x0645, 0x0646, 0x062d, 0x0649, 0x0646,
+ 0x062c, 0x0645, 0x0646, 0x062c, 0x0645, 0x0646, 0x062c, 0x0649,
+ 0x0646, 0x0645, 0x064a, 0x0646, 0x0645, 0x0649, 0x064a, 0x0645,
+ 0x0645, 0x064a, 0x0645, 0x0645, 0x0628, 0x062e, 0x064a, 0x062a,
+ 0x062c, 0x064a, 0x062a, 0x062c, 0x0649, 0x062a, 0x062e, 0x064a,
+ 0x062a, 0x062e, 0x0649, 0x062a, 0x0645, 0x064a, 0x062a, 0x0645,
+ 0x0649, 0x062c, 0x0645, 0x064a, 0x062c, 0x062d, 0x0649, 0x062c,
+ 0x0645, 0x0649, 0x0633, 0x062e, 0x0649, 0x0635, 0x062d, 0x064a,
+ 0x0634, 0x062d, 0x064a, 0x0636, 0x062d, 0x064a, 0x0644, 0x062c,
+ 0x064a, 0x0644, 0x0645, 0x064a, 0x064a, 0x062d, 0x064a, 0x064a,
+ 0x062c, 0x064a, 0x064a, 0x0645, 0x064a, 0x0645, 0x0645, 0x064a,
+ 0x0642, 0x0645, 0x064a, 0x0646, 0x062d, 0x064a, 0x0642, 0x0645,
+ 0x062d, 0x0644, 0x062d, 0x0645, 0x0639, 0x0645, 0x064a, 0x0643,
+ 0x0645, 0x064a, 0x0646, 0x062c, 0x062d, 0x0645, 0x062e, 0x064a,
+ 0x0644, 0x062c, 0x0645, 0x0643, 0x0645, 0x0645, 0x0644, 0x062c,
+ 0x0645, 0x0646, 0x062c, 0x062d, 0x062c, 0x062d, 0x064a, 0x062d,
+ 0x062c, 0x064a, 0x0645, 0x062c, 0x064a, 0x0641, 0x0645, 0x064a,
+ 0x0628, 0x062d, 0x064a, 0x0643, 0x0645, 0x0645, 0x0639, 0x062c,
+ 0x0645, 0x0635, 0x0645, 0x0645, 0x0633, 0x062e, 0x064a, 0x0646,
+ 0x062c, 0x064a, 0x0635, 0x0644, 0x06d2, 0x0642, 0x0644, 0x06d2,
+ 0x0627, 0x0644, 0x0644, 0x0647, 0x0627, 0x0643, 0x0628, 0x0631,
+ 0x0645, 0x062d, 0x0645, 0x062f, 0x0635, 0x0644, 0x0639, 0x0645,
+ 0x0631, 0x0633, 0x0648, 0x0644, 0x0639, 0x0644, 0x064a, 0x0647,
+ 0x0648, 0x0633, 0x0644, 0x0645, 0x0635, 0x0644, 0x0649, 0x0635,
+ 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020,
+ 0x0639, 0x0644, 0x064a, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644,
+ 0x0645, 0x062c, 0x0644, 0x0020, 0x062c, 0x0644, 0x0627, 0x0644,
+ 0x0647, 0x0631, 0x06cc, 0x0627, 0x0644, 0x002c, 0x3001, 0x3002,
+ 0x003a, 0x003b, 0x0021, 0x003f, 0x3016, 0x3017, 0x2026, 0x2025,
+ 0x2014, 0x2013, 0x005f, 0x005f, 0x0028, 0x0029, 0x007b, 0x007d,
+ 0x3014, 0x3015, 0x3010, 0x3011, 0x300a, 0x300b, 0x3008, 0x3009,
+ 0x300c, 0x300d, 0x300e, 0x300f, 0x005b, 0x005d, 0x203e, 0x203e,
+ 0x203e, 0x203e, 0x005f, 0x005f, 0x005f, 0x002c, 0x3001, 0x002e,
+ 0x003b, 0x003a, 0x003f, 0x0021, 0x2014, 0x0028, 0x0029, 0x007b,
+ 0x007d, 0x3014, 0x3015, 0x0023, 0x0026, 0x002a, 0x002b, 0x002d,
+ 0x003c, 0x003e, 0x003d, 0x005c, 0x0024, 0x0025, 0x0040, 0x0020,
+ 0x064b, 0x0640, 0x064b, 0x0020, 0x064c, 0x0020, 0x064d, 0x0020,
+ 0x064e, 0x0640, 0x064e, 0x0020, 0x064f, 0x0640, 0x064f, 0x0020,
+ 0x0650, 0x0640, 0x0650, 0x0020, 0x0651, 0x0640, 0x0651, 0x0020,
+ 0x0652, 0x0640, 0x0652, 0x0621, 0x0622, 0x0622, 0x0623, 0x0623,
+ 0x0624, 0x0624, 0x0625, 0x0625, 0x0626, 0x0626, 0x0626, 0x0626,
+ 0x0627, 0x0627, 0x0628, 0x0628, 0x0628, 0x0628, 0x0629, 0x0629,
+ 0x062a, 0x062a, 0x062a, 0x062a, 0x062b, 0x062b, 0x062b, 0x062b,
+ 0x062c, 0x062c, 0x062c, 0x062c, 0x062d, 0x062d, 0x062d, 0x062d,
+ 0x062e, 0x062e, 0x062e, 0x062e, 0x062f, 0x062f, 0x0630, 0x0630,
+ 0x0631, 0x0631, 0x0632, 0x0632, 0x0633, 0x0633, 0x0633, 0x0633,
+ 0x0634, 0x0634, 0x0634, 0x0634, 0x0635, 0x0635, 0x0635, 0x0635,
+ 0x0636, 0x0636, 0x0636, 0x0636, 0x0637, 0x0637, 0x0637, 0x0637,
+ 0x0638, 0x0638, 0x0638, 0x0638, 0x0639, 0x0639, 0x0639, 0x0639,
+ 0x063a, 0x063a, 0x063a, 0x063a, 0x0641, 0x0641, 0x0641, 0x0641,
+ 0x0642, 0x0642, 0x0642, 0x0642, 0x0643, 0x0643, 0x0643, 0x0643,
+ 0x0644, 0x0644, 0x0644, 0x0644, 0x0645, 0x0645, 0x0645, 0x0645,
+ 0x0646, 0x0646, 0x0646, 0x0646, 0x0647, 0x0647, 0x0647, 0x0647,
+ 0x0648, 0x0648, 0x0649, 0x0649, 0x064a, 0x064a, 0x064a, 0x064a,
+ 0x0644, 0x0622, 0x0644, 0x0622, 0x0644, 0x0623, 0x0644, 0x0623,
+ 0x0644, 0x0625, 0x0644, 0x0625, 0x0644, 0x0627, 0x0644, 0x0627,
+ 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
+ 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030,
+ 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038,
+ 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040,
+ 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048,
+ 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060,
+ 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068,
+ 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2985, 0x2986,
+ 0x3002, 0x300c, 0x300d, 0x3001, 0x30fb, 0x30f2, 0x30a1, 0x30a3,
+ 0x30a5, 0x30a7, 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, 0x30fc,
+ 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, 0x30af,
+ 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, 0x30bf,
+ 0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd,
+ 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df,
+ 0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, 0x30ea,
+ 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f3, 0x3099, 0x309a, 0x3164,
+ 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
+ 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
+ 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
+ 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
+ 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
+ 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160,
+ 0x3161, 0x3162, 0x3163, 0x00a2, 0x00a3, 0x00ac, 0x00af, 0x00a6,
+ 0x00a5, 0x20a9, 0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25a0,
+ 0x25cb
};
#include "wine/unicode.h"
diff --git a/libs/port/digitmap.c b/libs/port/digitmap.c
index 99be476545..0af6011ea7 100644
--- a/libs/port/digitmap.c
+++ b/libs/port/digitmap.c
@@ -1,5 +1,5 @@
/* Unicode digit folding mappings */
-/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
+/* generated from http://www.unicode.org/Public/12.1.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
diff --git a/libs/port/wctype.c b/libs/port/wctype.c
index 661966c5a1..5439e7db57 100644
--- a/libs/port/wctype.c
+++ b/libs/port/wctype.c
@@ -1606,7 +1606,7 @@ const unsigned short wine_wctype_table[17152] =
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
- 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000,
+ 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
diff --git a/tools/make_unicode b/tools/make_unicode
index 3e2d3e88fc..5644fab05e 100755
--- a/tools/make_unicode
+++ b/tools/make_unicode
@@ -23,7 +23,7 @@ use strict;
# base URLs for www.unicode.org files
my $MAPPINGS = "http://www.unicode.org/Public/MAPPINGS";
-my $UNIDATA = "http://www.unicode.org/Public/12.0.0/ucd";
+my $UNIDATA = "http://www.unicode.org/Public/12.1.0/ucd";
my $REPORTS = "http://www.unicode.org/reports";
my $RFCS = "http://www.rfc-editor.org/rfc";
--
2.24.0
Dec. 9, 2019
[PATCH 2/2] dwrite: Implement returning axis values from face reference.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/font.c | 11 +++++++++--
dlls/dwrite/tests/font.c | 10 ++++++++++
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 84e3af8b70..9280b5d32a 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -6280,9 +6280,16 @@ static UINT32 WINAPI fontfacereference1_GetFontAxisValueCount(IDWriteFontFaceRef
static HRESULT WINAPI fontfacereference1_GetFontAxisValues(IDWriteFontFaceReference1 *iface,
DWRITE_FONT_AXIS_VALUE *axis_values, UINT32 value_count)
{
- FIXME("%p, %p, %u.\n", iface, axis_values, value_count);
+ struct dwrite_fontfacereference *reference = impl_from_IDWriteFontFaceReference1(iface);
- return E_NOTIMPL;
+ TRACE("%p, %p, %u.\n", iface, axis_values, value_count);
+
+ if (value_count < reference->axis_values_count)
+ return E_NOT_SUFFICIENT_BUFFER;
+
+ memcpy(axis_values, reference->axis_values, value_count * sizeof(*axis_values));
+
+ return S_OK;
}
static const IDWriteFontFaceReference1Vtbl fontfacereferencevtbl =
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 219a0510ea..3dff4a6191 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -9408,6 +9408,16 @@ static void test_font_resource(void)
ok(!ret, "Unexpected result.\n");
IDWriteFontFaceReference1_Release(reference2);
+ memset(axis_values, 0, sizeof(axis_values));
+ hr = IDWriteFontFaceReference1_GetFontAxisValues(reference, axis_values, 1);
+ ok(hr == E_NOT_SUFFICIENT_BUFFER, "Unexpected hr %#x.\n", hr);
+ ok(!axis_values[0].axisTag, "Unexpected axis tag.\n");
+
+ memset(axis_values, 0, sizeof(axis_values));
+ hr = IDWriteFontFaceReference1_GetFontAxisValues(reference, axis_values, 2);
+ ok(hr == S_OK, "Failed to get axis values, hr %#x.\n", hr);
+ ok(axis_values[0].axisTag == DWRITE_FONT_AXIS_TAG_WEIGHT, "Unexpected axis tag.\n");
+
IDWriteFontFaceReference1_Release(reference);
IDWriteFontFile_Release(fontfile);
--
2.24.0
Dec. 9, 2019
[PATCH 1/2] dwrite: Compare axis values when testing for face reference equality.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/font.c | 28 +++++++++++++------
dlls/dwrite/tests/font.c | 60 ++++++++++++++++++++++++++++++++++++----
2 files changed, 75 insertions(+), 13 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 2670a22839..84e3af8b70 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -236,6 +236,8 @@ struct dwrite_fontfacereference
IDWriteFactory7 *factory;
};
+static const IDWriteFontFaceReference1Vtbl fontfacereferencevtbl;
+
struct dwrite_fontresource
{
IDWriteFontResource IDWriteFontResource_iface;
@@ -1896,6 +1898,16 @@ struct dwrite_fontface *unsafe_impl_from_IDWriteFontFace(IDWriteFontFace *iface)
return CONTAINING_RECORD(iface, struct dwrite_fontface, IDWriteFontFace5_iface);
}
+static struct dwrite_fontfacereference *unsafe_impl_from_IDWriteFontFaceReference(IDWriteFontFaceReference *iface)
+{
+ if (!iface)
+ return NULL;
+ if (iface->lpVtbl != (IDWriteFontFaceReferenceVtbl *)&fontfacereferencevtbl)
+ return NULL;
+ return CONTAINING_RECORD((IDWriteFontFaceReference1 *)iface, struct dwrite_fontfacereference,
+ IDWriteFontFaceReference1_iface);
+}
+
void get_logfont_from_font(IDWriteFont *iface, LOGFONTW *lf)
{
struct dwrite_font *font = unsafe_impl_from_IDWriteFont(iface);
@@ -6132,18 +6144,18 @@ static HRESULT WINAPI fontfacereference_CreateFontFaceWithSimulations(IDWriteFon
static BOOL WINAPI fontfacereference_Equals(IDWriteFontFaceReference1 *iface, IDWriteFontFaceReference *ref)
{
struct dwrite_fontfacereference *reference = impl_from_IDWriteFontFaceReference1(iface);
- IDWriteFontFile *file;
+ struct dwrite_fontfacereference *other = unsafe_impl_from_IDWriteFontFaceReference(ref);
BOOL ret;
TRACE("%p, %p.\n", iface, ref);
- if (FAILED(IDWriteFontFaceReference_GetFontFile(ref, &file)))
- return FALSE;
-
- ret = is_same_fontfile(reference->file, file) &&
- reference->index == IDWriteFontFaceReference_GetFontFaceIndex(ref) &&
- reference->simulations == IDWriteFontFaceReference_GetSimulations(ref);
- IDWriteFontFile_Release(file);
+ ret = is_same_fontfile(reference->file, other->file) && reference->index == other->index &&
+ reference->simulations == other->simulations;
+ if (reference->axis_values_count)
+ {
+ ret &= reference->axis_values_count == other->axis_values_count &&
+ !memcmp(reference->axis_values, other->axis_values, reference->axis_values_count * sizeof(*reference->axis_values));
+ }
return ret;
}
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index a0d36e2f0b..219a0510ea 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -9279,13 +9279,14 @@ static void test_font_resource(void)
IDWriteFontFaceReference1 *reference, *reference2;
IDWriteFontResource *resource, *resource2;
IDWriteFontFile *fontfile, *fontfile2;
- DWRITE_FONT_AXIS_VALUE axis_value;
+ DWRITE_FONT_AXIS_VALUE axis_values[2];
IDWriteFontFace5 *fontface5;
IDWriteFontFace *fontface;
IDWriteFactory6 *factory;
UINT32 count, index;
HRESULT hr;
ULONG ref;
+ BOOL ret;
if (!(factory = create_factory_iid(&IID_IDWriteFactory6)))
{
@@ -9316,9 +9317,9 @@ static void test_font_resource(void)
ok(!index, "Unexpected index %u.\n", index);
/* Specify axis value, font has no variations. */
- axis_value.axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
- axis_value.value = 400.0f;
- hr = IDWriteFontResource_CreateFontFaceReference(resource, DWRITE_FONT_SIMULATIONS_NONE, &axis_value, 1, &reference);
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[0].value = 400.0f;
+ hr = IDWriteFontResource_CreateFontFaceReference(resource, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 1, &reference);
ok(hr == S_OK, "Failed to create reference object, hr %#x.\n", hr);
count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference);
@@ -9326,7 +9327,7 @@ static void test_font_resource(void)
IDWriteFontFaceReference1_Release(reference);
- hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, &axis_value, 1,
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 1,
&reference);
count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference);
ok(count == 1, "Unexpected axis value count.\n");
@@ -9360,6 +9361,55 @@ static void test_font_resource(void)
IDWriteFontFace5_Release(fontface5);
+ /* Reference equality regarding set axis values. */
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[0].value = 400.0f;
+ axis_values[1].axisTag = DWRITE_FONT_AXIS_TAG_ITALIC;
+ axis_values[1].value = 1.0f;
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 2,
+ &reference);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference);
+ ok(count == 2, "Unexpected axis value count.\n");
+
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, NULL, 0,
+ &reference2);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference2);
+ ok(!count, "Unexpected axis value count.\n");
+
+ ret = IDWriteFontFaceReference1_Equals(reference, (IDWriteFontFaceReference *)reference2);
+ ok(!ret, "Unexpected result.\n");
+ IDWriteFontFaceReference1_Release(reference2);
+
+ /* Different values order. */
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_ITALIC;
+ axis_values[0].value = 1.0f;
+ axis_values[1].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[1].value = 400.0f;
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 2,
+ &reference2);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference2);
+ ok(count == 2, "Unexpected axis value count.\n");
+
+ ret = IDWriteFontFaceReference1_Equals(reference, (IDWriteFontFaceReference *)reference2);
+ ok(!ret, "Unexpected result.\n");
+ IDWriteFontFaceReference1_Release(reference2);
+
+ /* Different axis values. */
+ axis_values[0].axisTag = DWRITE_FONT_AXIS_TAG_ITALIC;
+ axis_values[0].value = 1.0f;
+ axis_values[1].axisTag = DWRITE_FONT_AXIS_TAG_WEIGHT;
+ axis_values[1].value = 401.0f;
+ hr = IDWriteFactory6_CreateFontFaceReference(factory, fontfile, 0, DWRITE_FONT_SIMULATIONS_NONE, axis_values, 2,
+ &reference2);
+ count = IDWriteFontFaceReference1_GetFontAxisValueCount(reference2);
+ ok(count == 2, "Unexpected axis value count.\n");
+
+ ret = IDWriteFontFaceReference1_Equals(reference, (IDWriteFontFaceReference *)reference2);
+ ok(!ret, "Unexpected result.\n");
+ IDWriteFontFaceReference1_Release(reference2);
+
+ IDWriteFontFaceReference1_Release(reference);
+
IDWriteFontFile_Release(fontfile);
IDWriteFontFace_Release(fontface);
--
2.24.0
Dec. 9, 2019
[PATCH] oleaut32/typelib: No need to query self for supported interface.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/oleaut32/typelib.c | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index eb713a4e2f..6e8a18c9d7 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -11180,7 +11180,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface,
static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
{
ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
- ITypeInfo *tinfo;
+ ITypeInfo2 *tinfo = &This->ITypeInfo2_iface;
TLBFuncDesc *func_desc;
UINT user_vft = 0, i, depth = 0;
HRESULT hres = S_OK;
@@ -11189,25 +11189,20 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
This->needs_layout = FALSE;
- hres = ICreateTypeInfo2_QueryInterface(iface, &IID_ITypeInfo, (LPVOID*)&tinfo);
- if (FAILED(hres))
- return hres;
-
if (This->typeattr.typekind == TKIND_INTERFACE) {
ITypeInfo *inh;
TYPEATTR *attr;
HREFTYPE inh_href;
- hres = ITypeInfo_GetRefTypeOfImplType(tinfo, 0, &inh_href);
+ hres = ITypeInfo2_GetRefTypeOfImplType(tinfo, 0, &inh_href);
if (SUCCEEDED(hres)) {
- hres = ITypeInfo_GetRefTypeInfo(tinfo, inh_href, &inh);
+ hres = ITypeInfo2_GetRefTypeInfo(tinfo, inh_href, &inh);
if (SUCCEEDED(hres)) {
hres = ITypeInfo_GetTypeAttr(inh, &attr);
if (FAILED(hres)) {
ITypeInfo_Release(inh);
- ITypeInfo_Release(tinfo);
return hres;
}
This->typeattr.cbSizeVft = attr->cbSizeVft;
@@ -11231,17 +11226,13 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
} else if (hres == TYPE_E_ELEMENTNOTFOUND) {
This->typeattr.cbSizeVft = 0;
hres = S_OK;
- } else {
- ITypeInfo_Release(tinfo);
+ } else
return hres;
- }
} else if (hres == TYPE_E_ELEMENTNOTFOUND) {
This->typeattr.cbSizeVft = 0;
hres = S_OK;
- } else {
- ITypeInfo_Release(tinfo);
+ } else
return hres;
- }
} else if (This->typeattr.typekind == TKIND_DISPATCH)
This->typeattr.cbSizeVft = 7 * This->pTypeLib->ptr_size;
else
@@ -11316,7 +11307,6 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
}
}
- ITypeInfo_Release(tinfo);
return hres;
}
--
2.24.0
Dec. 9, 2019
[PATCH] ntdll/tests: Enable some more string API tests.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/ntdll/tests/rtlstr.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/tests/rtlstr.c b/dlls/ntdll/tests/rtlstr.c
index 6f59e956c2..d2091859b8 100644
--- a/dlls/ntdll/tests/rtlstr.c
+++ b/dlls/ntdll/tests/rtlstr.c
@@ -597,6 +597,7 @@ static void test_RtlUpcaseUnicodeChar(void)
} else {
expected_upper_ch = ch;
}
+todo_wine_if(ch == 0xb5)
ok(upper_ch == expected_upper_ch,
"RtlUpcaseUnicodeChar('%c'[=0x%x]) has result '%c'[=0x%x], expected: '%c'[=0x%x]\n",
ch, ch, upper_ch, upper_ch, expected_upper_ch, expected_upper_ch);
@@ -646,6 +647,7 @@ static void test_RtlUpcaseUnicodeString(void)
pRtlUpcaseUnicodeString(&result_str, &ascii_str, 0);
for (i = 0; i <= 255; i++) {
+todo_wine_if(ascii_str.Buffer[i] == 0xb5)
ok(result_str.Buffer[i] == upper_str.Buffer[i],
"RtlUpcaseUnicodeString works wrong: '%c'[=0x%x] is converted to '%c'[=0x%x], expected: '%c'[=0x%x]\n",
ascii_str.Buffer[i], ascii_str.Buffer[i],
@@ -2615,10 +2617,10 @@ START_TEST(rtlstr)
test_RtlStringFromGUID();
test_RtlIsTextUnicode();
test_RtlCompareUnicodeString();
+ test_RtlUpcaseUnicodeChar();
+ test_RtlUpcaseUnicodeString();
if(0)
{
- test_RtlUpcaseUnicodeChar();
- test_RtlUpcaseUnicodeString();
test_RtlDowncaseUnicodeString();
}
test_RtlHashUnicodeString();
--
2.24.0
Dec. 9, 2019
Re: TestBot job 61617 results: [PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Francois Gouget
On Mon, 9 Dec 2019, Louis Lenders wrote:
> patch apparently failed to apply on testbot , but applies here on my
> wine-tree. Don`t know why....
Starting from a clean tree 'patch -p1' tells me there is some fuzz. But
the TestBot uses 'git apply' which is stricter and fails to apply the
patch in my source tree too.
Looking at it manually, it seems the '/*****...' line at the bottom of
the patch does not have the right number of stars. Probably because a
patch adding GetApplicationRestartSettings() was committed after you
generated your patch.
--
Francois Gouget <fgouget(a)codeweavers.com>
Dec. 9, 2019
Re: TestBot job 61617 results: [PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Louis Lenders
patch apparently failed to apply on testbot , but applies here on my
wine-tree. Don`t know why....
Op ma 9 dec. 2019 om 07:49 schreef Marvin <testbot(a)winehq.org>:
> VM Status Failures Command
> debian10 badpatch
> debian10 badpatch
>
> You can also see the results at:
> https://testbot.winehq.org/JobDetails.pl?Key=61617
>
>
> === debian10 (build log) ===
>
> error: patch failed: dlls/kernel32/process.c:4153
> Task: Patch failed to apply
>
> === debian10 (build log) ===
>
> error: patch failed: dlls/kernel32/process.c:4153
> Task: Patch failed to apply
>
Dec. 9, 2019
Re: [PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61617
Your paranoid android.
=== debian10 (build log) ===
error: patch failed: dlls/kernel32/process.c:4153
Task: Patch failed to apply
=== debian10 (build log) ===
error: patch failed: dlls/kernel32/process.c:4153
Task: Patch failed to apply
Dec. 9, 2019
[PATCH] kernel32: return S_OK in RegisterApplicationRecoveryCallback stub
by Louis Lenders
https://bugs.winehq.org/show_bug.cgi?id=43817
Signed-off-by: Louis Lenders <xerox.xerox2000x(a)gmail.com>
---
dlls/kernel32/process.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 939ec9b..48dde58 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -4153,9 +4153,8 @@ HRESULT WINAPI ApplicationRecoveryInProgress(PBOOL canceled)
*/
HRESULT WINAPI RegisterApplicationRecoveryCallback(APPLICATION_RECOVERY_CALLBACK callback, PVOID param, DWORD pingint, DWORD flags)
{
- FIXME("%p, %p, %d, %d: stub\n", callback, param, pingint, flags);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return E_FAIL;
+ FIXME("%p, %p, %d, %d: stub, faking succes\n", callback, param, pingint, flags);
+ return S_OK;
}
/**********************************************************************
--
2.7.4
Dec. 9, 2019
[PATCH] httpapi: return ERROR_SUCCESS for unimplemented flags in HttpInitialize
by Austin English
Returning ERROR_CALL_NOT_IMPLEMENTED breaks .Net installers. MSDN suggests
that ERROR_INVALID_PARAMETER may be more appropriate, but that too breaks .Net.
Note that this is (currently) only effective if mingw is disabled. mingw enabled builds has
separate issues that I'm still looking into.
Signed-off-by: Austin English <austinenglish(a)gmail.com>
---
dlls/httpapi/httpapi_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/httpapi/httpapi_main.c b/dlls/httpapi/httpapi_main.c
index 0449d53045..8adbd38be5 100644
--- a/dlls/httpapi/httpapi_main.c
+++ b/dlls/httpapi/httpapi_main.c
@@ -62,7 +62,7 @@ ULONG WINAPI HttpInitialize(HTTPAPI_VERSION version, ULONG flags, void *reserved
if (flags & ~HTTP_INITIALIZE_SERVER)
{
FIXME("Unhandled flags %#x.\n", flags);
- return ERROR_CALL_NOT_IMPLEMENTED;
+ return ERROR_SUCCESS;
}
if (!(manager = OpenSCManagerW(NULL, NULL, SC_MANAGER_CONNECT)))
--
2.23.0
Dec. 9, 2019
[PATCH] oledb32: Implement IDataSourceLocator PromptNew
by Alistair Leslie-Hughes
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/oledb32/Makefile.in | 1 +
dlls/oledb32/dslocator.c | 133 +++++++++++++++++++++++++++++++++--
dlls/oledb32/main.c | 2 +-
dlls/oledb32/oledb_private.h | 2 +
dlls/oledb32/resource.h | 24 +++++++
dlls/oledb32/version.rc | 21 ++++++
6 files changed, 178 insertions(+), 5 deletions(-)
create mode 100644 dlls/oledb32/resource.h
diff --git a/dlls/oledb32/Makefile.in b/dlls/oledb32/Makefile.in
index b55a66c5db..33cc312ee3 100644
--- a/dlls/oledb32/Makefile.in
+++ b/dlls/oledb32/Makefile.in
@@ -1,5 +1,6 @@
MODULE = oledb32.dll
IMPORTS = uuid oleaut32 ole32 user32 advapi32
+DELAYIMPORTS = comctl32
EXTRADLLFLAGS = -mno-cygwin
diff --git a/dlls/oledb32/dslocator.c b/dlls/oledb32/dslocator.c
index d397e47aa5..0a31a99130 100644
--- a/dlls/oledb32/dslocator.c
+++ b/dlls/oledb32/dslocator.c
@@ -20,6 +20,7 @@
#include <string.h>
#define COBJMACROS
+#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
@@ -29,8 +30,11 @@
#include "oledb.h"
#include "oledberr.h"
#include "msdasc.h"
+#include "prsht.h"
+#include "commctrl.h"
#include "oledb_private.h"
+#include "resource.h"
#include "wine/debug.h"
#include "wine/heap.h"
@@ -188,13 +192,134 @@ static HRESULT WINAPI dslocator_put_hWnd(IDataSourceLocator *iface, COMPATIBLE_L
return S_OK;
}
-static HRESULT WINAPI dslocator_PromptNew(IDataSourceLocator *iface, IDispatch **ppADOConnection)
+static void create_connections_columns(HWND lv)
{
- DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
+ RECT rc;
+ WCHAR buf[256];
+ LVCOLUMNW column;
+
+ SendMessageW(lv, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
+ GetWindowRect(lv, &rc);
+ LoadStringW(instance, IDS_COL_PROVIDER, buf, ARRAY_SIZE(buf));
+ column.mask = LVCF_WIDTH | LVCF_TEXT;
+ column.cx = (rc.right - rc.left) - 5;
+ column.pszText = buf;
+ SendMessageW(lv, LVM_INSERTCOLUMNW, 0, (LPARAM)&column);
+}
+
+static void add_connectons_providers(HWND lv)
+{
+ static const WCHAR oledbprov[] = {'\\','O','L','E',' ','D','B',' ','P','r','o','v','i','d','e','r',0};
+ LONG res;
+ HKEY key = NULL, subkey;
+ DWORD index = 0;
+ LONG next_key;
+ WCHAR provider[MAX_PATH];
+ WCHAR guidkey[MAX_PATH];
+ LONG size;
+
+ res = RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_READ, &key);
+ if (res == ERROR_FILE_NOT_FOUND)
+ return;
+
+ next_key = RegEnumKeyW(key, index, provider, MAX_PATH);
+ while (next_key == ERROR_SUCCESS)
+ {
+ WCHAR description[MAX_PATH];
+
+ lstrcpyW(guidkey, provider);
+ lstrcatW(guidkey, oledbprov);
+
+ res = RegOpenKeyW(key, guidkey, &subkey);
+ if (res == ERROR_SUCCESS)
+ {
+ TRACE("Found %s\n", debugstr_w(guidkey));
+
+ size = MAX_PATH;
+ res = RegQueryValueW(subkey, NULL, description, &size);
+ if (res == ERROR_SUCCESS)
+ {
+ LVITEMW item;
+ item.mask = LVIF_TEXT;
+ item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
+ item.iSubItem = 0;
+ item.pszText = description;
+ SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
+ /* TODO - Add ProgID to item data */
+ }
+ RegCloseKey(subkey);
+ }
+
+ index++;
+ next_key = RegEnumKeyW(key, index, provider, MAX_PATH);
+ }
- FIXME("(%p)->(%p)\n",This, ppADOConnection);
+ RegCloseKey(key);
+}
- return E_NOTIMPL;
+static LRESULT CALLBACK data_link_properties_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
+{
+ TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
+
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ HWND btn, lv = GetDlgItem(hwnd, IDC_LST_CONNECTIONS);
+ create_connections_columns(lv);
+ add_connectons_providers(lv);
+
+ btn = GetDlgItem(GetParent(hwnd), IDOK);
+ EnableWindow(btn, FALSE);
+
+ break;
+ }
+ case WM_COMMAND:
+ {
+ if (LOWORD(wp) == IDC_BTN_NEXT)
+ {
+ /* TODO: Implement Connection dialog */
+ MessageBoxA(hwnd, "Not implemented yet.", "Error", MB_OK | MB_ICONEXCLAMATION);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return 0;
+}
+
+static HRESULT WINAPI dslocator_PromptNew(IDataSourceLocator *iface, IDispatch **connection)
+{
+ DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
+ PROPSHEETHEADERW hdr;
+ PROPSHEETPAGEW page;
+ INT_PTR ret;
+
+ FIXME("(%p, %p) Semi-stub\n", iface, connection);
+
+ if(!connection)
+ return E_INVALIDARG;
+
+ *connection = NULL;
+
+ memset(&page, 0, sizeof(PROPSHEETPAGEW));
+ page.dwSize = sizeof(page);
+ page.hInstance = instance;
+ page.u.pszTemplate = MAKEINTRESOURCEW(IDD_PROVIDER);
+ page.pfnDlgProc = data_link_properties_dlg_proc;
+
+ memset(&hdr, 0, sizeof(hdr));
+ hdr.dwSize = sizeof(hdr);
+ hdr.hwndParent = This->hwnd;
+ hdr.dwFlags = PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;
+ hdr.hInstance = instance;
+ hdr.pszCaption = MAKEINTRESOURCEW(IDS_PROPSHEET_TITLE);
+ hdr.u3.ppsp = &page;
+ hdr.nPages = 1;
+ ret = PropertySheetW(&hdr);
+
+ return ret ? S_OK : S_FALSE;
}
static HRESULT WINAPI dslocator_PromptEdit(IDataSourceLocator *iface, IDispatch **ppADOConnection, VARIANT_BOOL *success)
diff --git a/dlls/oledb32/main.c b/dlls/oledb32/main.c
index f28e57a3f3..9c8c7f231b 100644
--- a/dlls/oledb32/main.c
+++ b/dlls/oledb32/main.c
@@ -36,7 +36,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(oledb);
-static HINSTANCE instance;
+HINSTANCE instance;
DEFINE_GUID(CSLID_MSDAER, 0xc8b522cf,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d);
diff --git a/dlls/oledb32/oledb_private.h b/dlls/oledb32/oledb_private.h
index 4e285b5460..fee0318de1 100644
--- a/dlls/oledb32/oledb_private.h
+++ b/dlls/oledb32/oledb_private.h
@@ -26,6 +26,8 @@ HRESULT create_dslocator(IUnknown *outer, void **obj) DECLSPEC_HIDDEN;
HRESULT get_data_source(IUnknown *outer, DWORD clsctx, LPWSTR initstring, REFIID riid,
IUnknown **datasource) DECLSPEC_HIDDEN;
+extern HINSTANCE instance;
+
static inline void* __WINE_ALLOC_SIZE(2) heap_realloc_zero(void *mem, size_t size)
{
return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, size);
diff --git a/dlls/oledb32/resource.h b/dlls/oledb32/resource.h
new file mode 100644
index 0000000000..df88a10829
--- /dev/null
+++ b/dlls/oledb32/resource.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+#define IDD_PROVIDER 1000
+#define IDC_BTN_NEXT 1001
+#define IDC_LST_CONNECTIONS 1002
+
+#define IDS_PROPSHEET_TITLE 2000
+#define IDS_COL_PROVIDER 2001
diff --git a/dlls/oledb32/version.rc b/dlls/oledb32/version.rc
index e082acccae..23bbee543d 100644
--- a/dlls/oledb32/version.rc
+++ b/dlls/oledb32/version.rc
@@ -15,6 +15,9 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#pragma makedep po
+
+#include "resource.h"
#define WINE_FILEDESCRIPTION_STR "Wine oledb"
#define WINE_FILENAME_STR "oledb32.dll"
@@ -24,3 +27,21 @@
#define WINE_PRODUCTVERSION_STR "2.81.1117.0"
#include "wine/wine_common_ver.rc"
+
+LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+{
+ IDS_PROPSHEET_TITLE "Data Link Properties"
+ IDS_COL_PROVIDER "OLE DB Provider(s)"
+}
+
+IDD_PROVIDER DIALOG 0, 0, 227, 225
+STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Provider"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Select the data you want to connect to:",-1,8,7,206,8
+ CONTROL "List1",IDC_LST_CONNECTIONS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,14,20,206,162
+ PUSHBUTTON "&Next >>",IDC_BTN_NEXT,170,194,50,14
+END
--
2.17.1
Dec. 9, 2019
[PATCH] msado15: Support all interfaces in _Recordset QueryInterface
by Alistair Leslie-Hughes
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/msado15/recordset.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
index bf0ca6e90f..52282c7e82 100644
--- a/dlls/msado15/recordset.c
+++ b/dlls/msado15/recordset.c
@@ -67,8 +67,13 @@ static HRESULT WINAPI recordset_QueryInterface( _Recordset *iface, REFIID riid,
{
TRACE( "%p, %s, %p\n", iface, debugstr_guid(riid), obj );
- if (IsEqualGUID( riid, &IID__Recordset ) || IsEqualGUID( riid, &IID_IDispatch ) ||
- IsEqualGUID( riid, &IID_IUnknown ))
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IDispatch) ||
+ IsEqualIID(riid, &IID__ADO) ||
+ IsEqualIID(riid, &IID_Recordset15) ||
+ IsEqualIID(riid, &IID_Recordset20) ||
+ IsEqualIID(riid, &IID_Recordset21) ||
+ IsEqualIID(riid, &IID__Recordset))
{
*obj = iface;
}
--
2.17.1
Dec. 8, 2019
Re: [PATCH] msado15: Add missing interfaces in _Connection QueryInterface
by Alistair Leslie-Hughes
Please ignore this one.
Dec. 8, 2019
[PATCH] msado15: Add missing interfaces in _Connection QueryInterface
by Alistair Leslie-Hughes
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/msado15/connection.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/msado15/connection.c b/dlls/msado15/connection.c
index ef589ecb7d..caca81daa8 100644
--- a/dlls/msado15/connection.c
+++ b/dlls/msado15/connection.c
@@ -66,8 +66,13 @@ static HRESULT WINAPI connection_QueryInterface( _Connection *iface, REFIID riid
{
TRACE( "%p, %s, %p\n", iface, debugstr_guid(riid), obj );
- if (IsEqualGUID( riid, &IID__Connection ) || IsEqualGUID( riid, &IID_IDispatch ) ||
- IsEqualGUID( riid, &IID_IUnknown ))
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IDispatch) ||
+ IsEqualIID(riid, &IID__ADO) ||
+ IsEqualIID(riid, &IID_Recordset15) ||
+ IsEqualIID(riid, &IID_Recordset20) ||
+ IsEqualIID(riid, &IID_Recordset21) ||
+ IsEqualIID(riid, &IID__Recordset))
{
*obj = iface;
}
--
2.17.1
Dec. 8, 2019
[PATCH] loader: Install msado15.dll into the correct location
by Alistair Leslie-Hughes
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
loader/wine.inf.in | 2 ++
1 file changed, 2 insertions(+)
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 19c034d7fd..c830525379 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -2706,6 +2706,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
16422,Windows NT\Accessories,wordpad.exe
16427,System\OLE DB,oledb32.dll
16427,System\OLE DB,msdaps.dll
+16427,System\ADO,msado15.dll
11,,*
[FakeDlls]
@@ -2767,6 +2768,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
16427,Microsoft Shared\TextConv,
16427,System\OLE DB,oledb32.dll
16427,System\OLE DB,msdaps.dll
+16427,System\ADO,msado15.dll
11,,*
[SystemIni]
--
2.17.1
Dec. 8, 2019
Re: [PATCH v3] msxml3: all string passed to IXMLDOMDocument_load() need to be URL-unescaped
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
Dec. 8, 2019
[PATCH 3/3] dmime/tests: Add segment GetParam/SetParam tests
by Michael Stefaniuc
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
dlls/dmime/tests/dmime.c | 42 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/dlls/dmime/tests/dmime.c b/dlls/dmime/tests/dmime.c
index 2e0626cde4..5bb3a8b5b3 100644
--- a/dlls/dmime/tests/dmime.c
+++ b/dlls/dmime/tests/dmime.c
@@ -630,6 +630,47 @@ static void test_gettrack(void)
IDirectMusicSegment8_Release(seg);
}
+static void test_segment_param(void)
+{
+ IDirectMusicSegment8 *seg;
+ char buf[64];
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_DirectMusicSegment, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IDirectMusicSegment8, (void **)&seg);
+ ok(hr == S_OK, "DirectMusicSegment create failed: %08x, expected S_OK\n", hr);
+
+ add_track(seg, LyricsTrack, 0x1); /* no params */
+ add_track(seg, SegmentTriggerTrack, 0x1); /* all params "supported" */
+
+ hr = IDirectMusicSegment8_GetParam(seg, NULL, 0x1, 0, 0, NULL, buf);
+ ok(hr == E_POINTER, "GetParam failed: %08x, expected E_POINTER\n", hr);
+ hr = IDirectMusicSegment8_SetParam(seg, NULL, 0x1, 0, 0, buf);
+ todo_wine ok(hr == E_POINTER, "SetParam failed: %08x, expected E_POINTER\n", hr);
+
+ hr = IDirectMusicSegment8_GetParam(seg, &GUID_Valid_Start_Time, 0x1, 0, 0, NULL, buf);
+ ok(hr == DMUS_E_GET_UNSUPPORTED,
+ "GetParam failed: %08x, expected DMUS_E_GET_UNSUPPORTED\n", hr);
+ hr = IDirectMusicSegment8_GetParam(seg, &GUID_Valid_Start_Time, 0x1, 1, 0, NULL, buf);
+ ok(hr == DMUS_E_TRACK_NOT_FOUND,
+ "GetParam failed: %08x, expected DMUS_E_TRACK_NOT_FOUND\n", hr);
+ hr = IDirectMusicSegment8_GetParam(seg, &GUID_Valid_Start_Time, 0x1, DMUS_SEG_ANYTRACK, 0,
+ NULL, buf);
+ ok(hr == DMUS_E_GET_UNSUPPORTED,
+ "GetParam failed: %08x, expected DMUS_E_GET_UNSUPPORTED\n", hr);
+
+ hr = IDirectMusicSegment8_SetParam(seg, &GUID_Valid_Start_Time, 0x1, 0, 0, buf);
+ ok(hr == S_OK, "SetParam failed: %08x, expected S_OK\n", hr);
+ hr = IDirectMusicSegment8_SetParam(seg, &GUID_Valid_Start_Time, 0x1, 1, 0, buf);
+ todo_wine ok(hr == DMUS_E_TRACK_NOT_FOUND,
+ "SetParam failed: %08x, expected DMUS_E_TRACK_NOT_FOUND\n", hr);
+ hr = IDirectMusicSegment8_SetParam(seg, &GUID_Valid_Start_Time, 0x1, DMUS_SEG_ALLTRACKS,
+ 0, buf);
+ ok(hr == S_OK, "SetParam failed: %08x, expected S_OK\n", hr);
+
+ IDirectMusicSegment8_Release(seg);
+}
+
static void expect_getparam(IDirectMusicTrack *track, REFGUID type, const char *name,
HRESULT expect)
{
@@ -1117,6 +1158,7 @@ START_TEST(dmime)
test_graph();
test_segment();
test_gettrack();
+ test_segment_param();
test_track();
test_parsedescriptor();
--
2.23.0
Dec. 8, 2019
[PATCH 2/3] dmime: Fix index handling in segment GetParam()
by Michael Stefaniuc
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
Fixes the last infinite loop in PlayMotif.exe and lets it start.
dlls/dmime/segment.c | 55 +++++++++++++++++---------------------------
1 file changed, 21 insertions(+), 34 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c
index 5284ac5fec..b6357b6f5f 100644
--- a/dlls/dmime/segment.c
+++ b/dlls/dmime/segment.c
@@ -368,49 +368,36 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_RemoveNotificationType(IDirectMus
return S_OK;
}
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetParam(IDirectMusicSegment8 *iface,
- REFGUID type, DWORD group, DWORD index, MUSIC_TIME time, MUSIC_TIME *next,
- void *param)
+static HRESULT WINAPI IDirectMusicSegment8Impl_GetParam(IDirectMusicSegment8 *iface, REFGUID type,
+ DWORD group, DWORD index, MUSIC_TIME time, MUSIC_TIME *next, void *param)
{
IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- struct list *item;
IDirectMusicTrack *track;
- DMUS_PRIVATE_SEGMENT_TRACK *segment;
- HRESULT hr;
-
- FIXME("(%p, %s, 0x%x, %d, %d, %p, %p) Semi-stub\n", This, debugstr_dmguid(type), group,
- index, time, next, param);
-
- if (index == DMUS_SEG_ANYTRACK || group == 0xffffffff) {
- if (group == 0xffffffff && index != DMUS_SEG_ANYTRACK)
- WARN("Any group doesnt have DMUS_SEG_ANYTRACK index.\n");
+ unsigned int i, count;
+ HRESULT hr = DMUS_E_TRACK_NOT_FOUND;
- LIST_FOR_EACH (item, &This->Tracks) {
- segment = LIST_ENTRY(item, DMUS_PRIVATE_SEGMENT_TRACK, entry);
+ TRACE("(%p, %s, %#x, %u, %d, %p, %p)\n", This, debugstr_dmguid(type), group, index, time,
+ next, param);
- TRACE(" - %p -> 0x%x,%p\n", segment, segment->dwGroupBits, segment->pTrack);
-
- if (group != 0xffffffff && !(segment->dwGroupBits & group))
- continue;
- if (FAILED(IDirectMusicTrack_IsParamSupported(segment->pTrack, type)))
- continue;
- hr = IDirectMusicTrack_GetParam(segment->pTrack, type, time, next, param);
- if (SUCCEEDED(hr))
- return hr;
- }
+ if (!type)
+ return E_POINTER;
- WARN("(%p): not found\n", This);
- return DMUS_E_TRACK_NOT_FOUND;
- }
+ /* Index is relative to the search pattern: group bits and supported param type */
+ for (i = 0, count = 0; i < DMUS_SEG_ANYTRACK && count <= index; i++) {
+ if (FAILED(IDirectMusicSegment8Impl_GetTrack(iface, &GUID_NULL, group, i, &track)))
+ break;
+ if (FAILED(IDirectMusicTrack_IsParamSupported(track, type)))
+ continue;
+ if (index == count || index == DMUS_SEG_ANYTRACK)
+ hr = IDirectMusicTrack_GetParam(track, type, time, next, param);
+ IDirectMusicTrack_Release(track);
- hr = IDirectMusicSegment8Impl_GetTrack(iface, &GUID_NULL, group, index, &track);
- if (FAILED(hr)) {
- ERR("(%p): not found\n", This);
- return DMUS_E_TRACK_NOT_FOUND;
+ if (SUCCEEDED(hr))
+ return hr;
+ count++;
}
- hr = IDirectMusicTrack_GetParam(track, type, time, next, param);
- IDirectMusicTrack_Release(track);
+ TRACE("(%p): not found\n", This);
return hr;
}
--
2.23.0
Dec. 8, 2019
[PATCH 1/3] dmime/tests: Add more GetTrack() tests
by Michael Stefaniuc
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
dlls/dmime/tests/dmime.c | 38 ++++++++++++++++++++++++++++++++------
1 file changed, 32 insertions(+), 6 deletions(-)
diff --git a/dlls/dmime/tests/dmime.c b/dlls/dmime/tests/dmime.c
index e8fa6a596d..2e0626cde4 100644
--- a/dlls/dmime/tests/dmime.c
+++ b/dlls/dmime/tests/dmime.c
@@ -543,14 +543,17 @@ static void _add_track(IDirectMusicSegment8 *seg, REFCLSID class, const char *na
#define add_track(seg, class, group) _add_track(seg, &CLSID_DirectMusic ## class, #class, group)
static void _expect_track(IDirectMusicSegment8 *seg, REFCLSID expect, const char *name, DWORD group,
- DWORD index)
+ DWORD index, BOOL ignore_guid)
{
IDirectMusicTrack *track;
IPersistStream *ps;
CLSID class;
HRESULT hr;
- hr = IDirectMusicSegment8_GetTrack(seg, &GUID_NULL, group, index, &track);
+ if (ignore_guid)
+ hr = IDirectMusicSegment8_GetTrack(seg, &GUID_NULL, group, index, &track);
+ else
+ hr = IDirectMusicSegment8_GetTrack(seg, expect, group, index, &track);
if (!expect) {
ok(hr == DMUS_E_NOT_FOUND, "GetTrack failed: %08x, expected DMUS_E_NOT_FOUND\n", hr);
return;
@@ -568,9 +571,12 @@ static void _expect_track(IDirectMusicSegment8 *seg, REFCLSID expect, const char
IDirectMusicTrack_Release(track);
}
-#define expect_track(seg, class, group, index) _expect_track(seg, &CLSID_DirectMusic ## class, #class, group, index)
+#define expect_track(seg, class, group, index) \
+ _expect_track(seg, &CLSID_DirectMusic ## class, #class, group, index, TRUE)
+#define expect_guid_track(seg, class, group, index) \
+ _expect_track(seg, &CLSID_DirectMusic ## class, #class, group, index, FALSE)
-static void test_track_identify(void)
+static void test_gettrack(void)
{
IDirectMusicSegment8 *seg;
IDirectMusicTrack *track;
@@ -586,7 +592,9 @@ static void test_track_identify(void)
add_track(seg, SegmentTriggerTrack, 0x2); /* idx 1 group 2 */
add_track(seg, SeqTrack, 0x1); /* idx 2 group 1 */
add_track(seg, TempoTrack, 0x7); /* idx 3 group 1, idx 2 group 2, idx 0 group 3 */
+ add_track(seg, WaveTrack, 0xffffffff); /* idx 4 group 1, idx 3 group 2, idx 1 group 3 */
+ /* Ignore GUID in GetTrack */
hr = IDirectMusicSegment8_GetTrack(seg, &GUID_NULL, 0, 0, &track);
ok(hr == DMUS_E_NOT_FOUND, "GetTrack failed: %08x, expected DMUS_E_NOT_FOUND\n", hr);
@@ -594,12 +602,30 @@ static void test_track_identify(void)
expect_track(seg, ParamControlTrack, 0x1, 1);
expect_track(seg, SeqTrack, 0x1, 2);
expect_track(seg, TempoTrack, 0x1, 3);
- _expect_track(seg, NULL, "", 0x1, 4);
+ expect_track(seg, WaveTrack, 0x1, 4);
+ _expect_track(seg, NULL, "", 0x1, 5, TRUE);
+ _expect_track(seg, NULL, "", 0x1, DMUS_SEG_ANYTRACK, TRUE);
expect_track(seg, ParamControlTrack, 0x2, 0);
+ expect_track(seg, WaveTrack, 0x80000000, 0);
expect_track(seg, SegmentTriggerTrack, 0x3, 2); /* groups 1+2 combined index */
expect_track(seg, SeqTrack, 0x3, 3); /* groups 1+2 combined index */
expect_track(seg, TempoTrack, 0x7, 4); /* groups 1+2+3 combined index */
expect_track(seg, TempoTrack, 0xffffffff, 4); /* all groups combined index */
+ _expect_track(seg, NULL, "", 0xffffffff, DMUS_SEG_ANYTRACK, TRUE);
+
+ /* Use the GUID in GetTrack */
+ hr = IDirectMusicSegment8_GetTrack(seg, &CLSID_DirectMusicLyricsTrack, 0, 0, &track);
+ ok(hr == DMUS_E_NOT_FOUND, "GetTrack failed: %08x, expected DMUS_E_NOT_FOUND\n", hr);
+
+ expect_guid_track(seg, LyricsTrack, 0x1, 0);
+ expect_guid_track(seg, ParamControlTrack, 0x1, 0);
+ expect_guid_track(seg, SeqTrack, 0x1, 0);
+ expect_guid_track(seg, TempoTrack, 0x1, 0);
+ expect_guid_track(seg, ParamControlTrack, 0x2, 0);
+ expect_guid_track(seg, SegmentTriggerTrack, 0x3, 0);
+ expect_guid_track(seg, SeqTrack, 0x3, 0);
+ expect_guid_track(seg, TempoTrack, 0x7, 0);
+ expect_guid_track(seg, TempoTrack, 0xffffffff, 0);
IDirectMusicSegment8_Release(seg);
}
@@ -1090,7 +1116,7 @@ START_TEST(dmime)
test_audiopathconfig();
test_graph();
test_segment();
- test_track_identify();
+ test_gettrack();
test_track();
test_parsedescriptor();
--
2.23.0
Dec. 8, 2019
Re: [PATCH v2] msxml3: all string passed to IXMLDOMDocument_load() need to be URL-unescaped
by Damjan Jovanovic
Resent.
On Sun, Dec 8, 2019 at 7:04 PM Nikolay Sivov <nsivov(a)codeweavers.com> wrote:
> Great. Could you resend this patch together with your tests as v3, or I
> can do it.
>
> On 12/8/19 5:29 PM, Damjan Jovanovic wrote:
>
> Yes that patch works too :)
>
>
> On Sun, Dec 8, 2019 at 3:56 PM Nikolay Sivov <nsivov(a)codeweavers.com>
> wrote:
>
>> This again is too complicated and unescapes every url, which is
>> unnecessary. Does attached patch work for you?
>>
>
>
Dec. 8, 2019
[PATCH v3] msxml3: all string passed to IXMLDOMDocument_load() need to be URL-unescaped
by Damjan Jovanovic
msxml3 allows URL escape sequences even for C:\ style paths.
eg. C:\Program%20Files\...
Try 3 preserves my tests from try 2, while using a simpler
patch to bsc.c written by Nikolay Sivov and tested by me.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48242
Signed-off-by: Damjan Jovanovic <damjan.jov(a)gmail.com>
---
dlls/msxml3/bsc.c | 10 +++++++---
dlls/msxml3/tests/domdoc.c | 17 +++++++++++++++++
2 files changed, 24 insertions(+), 3 deletions(-)
Dec. 8, 2019
Re: [PATCH v2] msxml3: all string passed to IXMLDOMDocument_load() need to be URL-unescaped
by Nikolay Sivov
Great. Could you resend this patch together with your tests as v3, or I
can do it.
On 12/8/19 5:29 PM, Damjan Jovanovic wrote:
> Yes that patch works too :)
>
>
> On Sun, Dec 8, 2019 at 3:56 PM Nikolay Sivov <nsivov(a)codeweavers.com
> <mailto:nsivov(a)codeweavers.com>> wrote:
>
> This again is too complicated and unescapes every url, which is
> unnecessary. Does attached patch work for you?
>
Dec. 8, 2019
Re: [PATCH v2] msxml3: all string passed to IXMLDOMDocument_load() need to be URL-unescaped
by Damjan Jovanovic
Yes that patch works too :)
On Sun, Dec 8, 2019 at 3:56 PM Nikolay Sivov <nsivov(a)codeweavers.com> wrote:
> This again is too complicated and unescapes every url, which is
> unnecessary. Does attached patch work for you?
>
Dec. 8, 2019
Re: [PATCH v2] msxml3: all string passed to IXMLDOMDocument_load() need to be URL-unescaped
by Nikolay Sivov
This again is too complicated and unescapes every url, which is
unnecessary. Does attached patch work for you?
Dec. 8, 2019
Re: [PATCH] include: update thumbcache.idl file
by Nikolay Sivov
> +typedef [v1_enum] enum WTS_FLAGS {
> + WTS_NONE = 0x00000000,
> + WTS_EXTRACT = 0x00000000,
> + WTS_INCACHEONLY = 0x00000001,
> + WTS_FASTEXTRACT = 0x00000002,
> + WTS_FORCEEXTRACTION = 0x00000004,
> + WTS_SLOWRECLAIM = 0x00000008,
> + WTS_EXTRACTDONOTCACHE = 0x00000020,
> WTS_SCALETOREQUESTEDSIZE = 0x00000040,
> - WTS_SKIPFASTEXTRACT = 0x00000080,
> - WTS_EXTRACTINPROC = 0x00000100,
> - WTS_CROPTOSQUARE = 0x00000200,
> - WTS_INSTANCESURROGATE = 0x00000400,
> - WTS_REQUIRESURROGATE = 0x00000800,
> - WTS_APPSTYLE = 0x00002000,
> - WTS_WIDETHUMBNAILS = 0x00004000,
> - WTS_IDEALCACHESIZEONLY = 0x00008000,
> - WTS_SCALEUP = 0x00010000,
> + WTS_SKIPFASTEXTRACT = 0x00000080,
> + WTS_EXTRACTINPROC = 0x00000100,
> + WTS_CROPTOSQUARE = 0x00000200,
> + WTS_INSTANCESURROGATE = 0x00000400,
> + WTS_REQUIRESURROGATE = 0x00000800,
> + WTS_APPSTYLE = 0x00002000,
> + WTS_WIDETHUMBNAILS = 0x00004000,
> + WTS_IDEALCACHESIZEONLY = 0x00008000,
> + WTS_SCALEUP = 0x00010000
> } WTS_FLAGS;
There is no reason to change formatting here, or for any existing type.
> +[
> + uuid(F4376F00-BEF5-4d45-80F3-1E023BBF1209),
> +]
> +interface IThumbnailSettings : IUnknown {
> + HRESULT SetContext([in] WTS_CONTEXTFLAGS dwContext);
> +}
Please follow existing formatting - curly braces on separate line, lower
case for hex digits. This patch shows that you copied from SDK headers,
please don't do that.
Dec. 8, 2019
[PATCH v2 8/8] strmbase: Get rid of the "vtbl" argument to strmbase_source_init().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/qcap/avico.c | 24 +---------------
dlls/qcap/avimux.c | 24 +---------------
dlls/qcap/smartteefilter.c | 48 ++-----------------------------
dlls/qcap/vfwcapture.c | 25 +---------------
dlls/qedit/samplegrabber.c | 24 +---------------
dlls/quartz/filesource.c | 26 +----------------
dlls/quartz/tests/videorenderer.c | 24 +---------------
dlls/quartz/tests/vmr7.c | 24 +---------------
dlls/quartz/tests/vmr9.c | 24 +---------------
dlls/strmbase/pin.c | 38 ++++++++++++++++++------
dlls/strmbase/transform.c | 26 +----------------
dlls/winegstreamer/gstdemux.c | 25 +---------------
dlls/wineqtdecoder/qtsplitter.c | 25 +---------------
include/wine/strmbase.h | 10 +------
14 files changed, 44 insertions(+), 323 deletions(-)
diff --git a/dlls/qcap/avico.c b/dlls/qcap/avico.c
index 9365c437b4f..debe6bca386 100644
--- a/dlls/qcap/avico.c
+++ b/dlls/qcap/avico.c
@@ -473,27 +473,6 @@ static const struct strmbase_sink_ops sink_ops =
.pfnReceive = AVICompressorIn_Receive,
};
-static const IPinVtbl AVICompressorOutputPinVtbl = {
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
static HRESULT source_get_media_type(struct strmbase_pin *base, unsigned int iPosition, AM_MEDIA_TYPE *amt)
{
AVICompressor *This = impl_from_strmbase_filter(base->filter);
@@ -564,8 +543,7 @@ IUnknown* WINAPI QCAP_createAVICompressor(IUnknown *outer, HRESULT *phr)
strmbase_sink_init(&compressor->sink, &AVICompressorInputPinVtbl,
&compressor->filter, sink_name, &sink_ops, NULL);
- strmbase_source_init(&compressor->source, &AVICompressorOutputPinVtbl,
- &compressor->filter, source_name, &source_ops);
+ strmbase_source_init(&compressor->source, &compressor->filter, source_name, &source_ops);
*phr = S_OK;
return &compressor->filter.IUnknown_inner;
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index 677e79ef68f..c344ab47266 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -1217,27 +1217,6 @@ static const struct strmbase_source_ops source_ops =
.pfnDecideAllocator = AviMuxOut_DecideAllocator,
};
-static const IPinVtbl AviMuxOut_PinVtbl = {
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
static inline AviMux* impl_from_out_IQualityControl(IQualityControl *iface)
{
return CONTAINING_RECORD(iface, AviMux, IQualityControl_iface);
@@ -1923,8 +1902,7 @@ IUnknown * WINAPI QCAP_createAVIMux(IUnknown *outer, HRESULT *phr)
info.dir = PINDIR_OUTPUT;
info.pFilter = &avimux->filter.IBaseFilter_iface;
lstrcpyW(info.achName, output_name);
- strmbase_source_init(&avimux->source, &AviMuxOut_PinVtbl, &avimux->filter,
- output_name, &source_ops);
+ strmbase_source_init(&avimux->source, &avimux->filter, output_name, &source_ops);
avimux->IQualityControl_iface.lpVtbl = &AviMuxOut_QualityControlVtbl;
avimux->cur_stream = 0;
avimux->cur_time = 0;
diff --git a/dlls/qcap/smartteefilter.c b/dlls/qcap/smartteefilter.c
index 7762ec1e500..929929632f1 100644
--- a/dlls/qcap/smartteefilter.c
+++ b/dlls/qcap/smartteefilter.c
@@ -275,27 +275,6 @@ static const struct strmbase_sink_ops sink_ops =
.pfnReceive = SmartTeeFilterInput_Receive,
};
-static const IPinVtbl SmartTeeFilterCaptureVtbl = {
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
static HRESULT capture_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt)
{
FIXME("(%p) stub\n", base);
@@ -339,27 +318,6 @@ static const struct strmbase_source_ops capture_ops =
.pfnDecideAllocator = SmartTeeFilterCapture_DecideAllocator,
};
-static const IPinVtbl SmartTeeFilterPreviewVtbl = {
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
static HRESULT preview_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt)
{
FIXME("(%p) stub\n", base);
@@ -410,10 +368,8 @@ IUnknown* WINAPI QCAP_createSmartTeeFilter(IUnknown *outer, HRESULT *phr)
return NULL;
}
- strmbase_source_init(&object->capture, &SmartTeeFilterCaptureVtbl,
- &object->filter, captureW, &capture_ops);
- strmbase_source_init(&object->preview, &SmartTeeFilterPreviewVtbl,
- &object->filter, previewW, &preview_ops);
+ strmbase_source_init(&object->capture, &object->filter, captureW, &capture_ops);
+ strmbase_source_init(&object->preview, &object->filter, previewW, &preview_ops);
*phr = S_OK;
return &object->filter.IUnknown_inner;
diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c
index e7522ea9b36..2185053ecd0 100644
--- a/dlls/qcap/vfwcapture.c
+++ b/dlls/qcap/vfwcapture.c
@@ -559,28 +559,6 @@ static const struct strmbase_source_ops source_ops =
.pfnDecideAllocator = BaseOutputPinImpl_DecideAllocator,
};
-static const IPinVtbl VfwPin_Vtbl =
-{
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
IUnknown * WINAPI QCAP_createVFWCaptureFilter(IUnknown *outer, HRESULT *phr)
{
static const WCHAR source_name[] = {'O','u','t','p','u','t',0};
@@ -599,8 +577,7 @@ IUnknown * WINAPI QCAP_createVFWCaptureFilter(IUnknown *outer, HRESULT *phr)
object->IPersistPropertyBag_iface.lpVtbl = &IPersistPropertyBag_VTable;
object->init = FALSE;
- strmbase_source_init(&object->source, &VfwPin_Vtbl, &object->filter,
- source_name, &source_ops);
+ strmbase_source_init(&object->source, &object->filter, source_name, &source_ops);
object->IKsPropertySet_iface.lpVtbl = &IKsPropertySet_VTable;
diff --git a/dlls/qedit/samplegrabber.c b/dlls/qedit/samplegrabber.c
index 019af5c35de..f8d90a5c0df 100644
--- a/dlls/qedit/samplegrabber.c
+++ b/dlls/qedit/samplegrabber.c
@@ -660,28 +660,6 @@ static const struct strmbase_source_ops source_ops =
.pfnAttemptConnection = sample_grabber_source_AttemptConnection,
};
-static const IPinVtbl source_vtbl =
-{
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment,
-};
-
HRESULT SampleGrabber_create(IUnknown *outer, void **out)
{
SG_Impl* obj = NULL;
@@ -700,7 +678,7 @@ HRESULT SampleGrabber_create(IUnknown *outer, void **out)
obj->IMemInputPin_iface.lpVtbl = &IMemInputPin_VTable;
strmbase_sink_init(&obj->sink, &sink_vtbl, &obj->filter, L"In", &sink_ops, NULL);
- strmbase_source_init(&obj->source, &source_vtbl, &obj->filter, L"Out", &source_ops);
+ strmbase_source_init(&obj->source, &obj->filter, L"Out", &source_ops);
obj->mtype.majortype = GUID_NULL;
obj->mtype.subtype = MEDIASUBTYPE_None;
diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c
index e841391e83a..fb8adb4a3fb 100644
--- a/dlls/quartz/filesource.c
+++ b/dlls/quartz/filesource.c
@@ -77,7 +77,6 @@ typedef struct AsyncReader
HANDLE *handle_list;
} AsyncReader;
-static const IPinVtbl FileAsyncReaderPin_Vtbl;
static const struct strmbase_source_ops source_ops;
static inline AsyncReader *impl_from_strmbase_filter(struct strmbase_filter *iface)
@@ -468,8 +467,7 @@ static HRESULT WINAPI FileSource_Load(IFileSourceFilter * iface, LPCOLESTR pszFi
return HRESULT_FROM_WIN32(GetLastError());
}
- strmbase_source_init(&This->source, &FileAsyncReaderPin_Vtbl, &This->filter,
- wszOutputPinName, &source_ops);
+ strmbase_source_init(&This->source, &This->filter, wszOutputPinName, &source_ops);
BaseFilterImpl_IncrementPinVersion(&This->filter);
This->file = hFile;
@@ -594,28 +592,6 @@ static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, vo
return S_OK;
}
-static const IPinVtbl FileAsyncReaderPin_Vtbl =
-{
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BasePinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
/* Function called as a helper to IPin_Connect */
/* specific AM_MEDIA_TYPE - it cannot be NULL */
/* this differs from standard OutputPin_AttemptConnection only in that it
diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c
index d4d9622b415..00a9041a8b4 100644
--- a/dlls/quartz/tests/videorenderer.c
+++ b/dlls/quartz/tests/videorenderer.c
@@ -521,28 +521,6 @@ static const struct strmbase_filter_ops testfilter_ops =
.filter_destroy = testfilter_destroy,
};
-static const IPinVtbl testsource_vtbl =
-{
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BasePinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment,
-};
-
static HRESULT testsource_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
{
return S_OK;
@@ -579,7 +557,7 @@ static void testfilter_init(struct testfilter *filter)
{
static const GUID clsid = {0xabacab};
strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops);
- strmbase_source_init(&filter->source, &testsource_vtbl, &filter->filter, L"", &testsource_ops);
+ strmbase_source_init(&filter->source, &filter->filter, L"", &testsource_ops);
}
static void test_allocator(IMemInputPin *input)
diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c
index 008c84ab30f..dae86bd3fa9 100644
--- a/dlls/quartz/tests/vmr7.c
+++ b/dlls/quartz/tests/vmr7.c
@@ -881,28 +881,6 @@ static const struct strmbase_filter_ops testfilter_ops =
.filter_destroy = testfilter_destroy,
};
-static const IPinVtbl testsource_vtbl =
-{
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BasePinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment,
-};
-
static HRESULT testsource_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
{
return S_OK;
@@ -939,7 +917,7 @@ static void testfilter_init(struct testfilter *filter)
{
static const GUID clsid = {0xabacab};
strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops);
- strmbase_source_init(&filter->source, &testsource_vtbl, &filter->filter, L"", &testsource_ops);
+ strmbase_source_init(&filter->source, &filter->filter, L"", &testsource_ops);
}
static void test_allocator(IMemInputPin *input)
diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c
index fd6901d2117..5ece5c6f7bb 100644
--- a/dlls/quartz/tests/vmr9.c
+++ b/dlls/quartz/tests/vmr9.c
@@ -885,28 +885,6 @@ static const struct strmbase_filter_ops testfilter_ops =
.filter_destroy = testfilter_destroy,
};
-static const IPinVtbl testsource_vtbl =
-{
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BasePinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment,
-};
-
static HRESULT testsource_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
{
return S_OK;
@@ -943,7 +921,7 @@ static void testfilter_init(struct testfilter *filter)
{
static const GUID clsid = {0xabacab};
strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops);
- strmbase_source_init(&filter->source, &testsource_vtbl, &filter->filter, L"", &testsource_ops);
+ strmbase_source_init(&filter->source, &filter->filter, L"", &testsource_ops);
}
static void test_allocator(IMemInputPin *input)
diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c
index bdc827c6f60..bcac22eb3c4 100644
--- a/dlls/strmbase/pin.c
+++ b/dlls/strmbase/pin.c
@@ -284,7 +284,7 @@ static inline struct strmbase_source *impl_source_from_IPin( IPin *iface )
return CONTAINING_RECORD(iface, struct strmbase_source, pin.IPin_iface);
}
-HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
+static HRESULT WINAPI source_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
{
HRESULT hr;
struct strmbase_source *This = impl_source_from_IPin(iface);
@@ -375,13 +375,13 @@ HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const
return hr;
}
-HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin *iface, IPin *pin, const AM_MEDIA_TYPE *pmt)
+static HRESULT WINAPI source_ReceiveConnection(IPin *iface, IPin *pin, const AM_MEDIA_TYPE *pmt)
{
ERR("(%p)->(%p, %p) incoming connection on an output pin!\n", iface, pin, pmt);
return E_UNEXPECTED;
}
-HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface)
+static HRESULT WINAPI source_Disconnect(IPin *iface)
{
HRESULT hr;
struct strmbase_source *This = impl_source_from_IPin(iface);
@@ -418,7 +418,7 @@ HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface)
return hr;
}
-HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface)
+static HRESULT WINAPI source_EndOfStream(IPin *iface)
{
TRACE("(%p)->()\n", iface);
@@ -427,7 +427,7 @@ HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface)
return E_UNEXPECTED;
}
-HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface)
+static HRESULT WINAPI source_BeginFlush(IPin *iface)
{
TRACE("(%p)->()\n", iface);
@@ -436,7 +436,7 @@ HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface)
return E_UNEXPECTED;
}
-HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface)
+static HRESULT WINAPI source_EndFlush(IPin *iface)
{
TRACE("(%p)->()\n", iface);
@@ -445,6 +445,28 @@ HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface)
return E_UNEXPECTED;
}
+static const IPinVtbl source_vtbl =
+{
+ BasePinImpl_QueryInterface,
+ BasePinImpl_AddRef,
+ BasePinImpl_Release,
+ source_Connect,
+ source_ReceiveConnection,
+ source_Disconnect,
+ BasePinImpl_ConnectedTo,
+ BasePinImpl_ConnectionMediaType,
+ BasePinImpl_QueryPinInfo,
+ BasePinImpl_QueryDirection,
+ BasePinImpl_QueryId,
+ BasePinImpl_QueryAccept,
+ BasePinImpl_EnumMediaTypes,
+ BasePinImpl_QueryInternalConnections,
+ source_EndOfStream,
+ source_BeginFlush,
+ source_EndFlush,
+ BasePinImpl_NewSegment,
+};
+
HRESULT WINAPI BaseOutputPinImpl_GetDeliveryBuffer(struct strmbase_source *This,
IMediaSample **ppSample, REFERENCE_TIME *tStart, REFERENCE_TIME *tStop, DWORD dwFlags)
{
@@ -595,11 +617,11 @@ HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *This,
return hr;
}
-void strmbase_source_init(struct strmbase_source *pin, const IPinVtbl *vtbl, struct strmbase_filter *filter,
+void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter,
const WCHAR *name, const struct strmbase_source_ops *func_table)
{
memset(pin, 0, sizeof(*pin));
- pin->pin.IPin_iface.lpVtbl = vtbl;
+ pin->pin.IPin_iface.lpVtbl = &source_vtbl;
pin->pin.filter = filter;
pin->pin.dir = PINDIR_OUTPUT;
lstrcpyW(pin->pin.name, name);
diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c
index 5c079d38e76..7a79f709055 100644
--- a/dlls/strmbase/transform.c
+++ b/dlls/strmbase/transform.c
@@ -27,7 +27,6 @@ static const WCHAR wcsInputPinName[] = {'I','n',0};
static const WCHAR wcsOutputPinName[] = {'O','u','t',0};
static const IPinVtbl TransformFilter_InputPin_Vtbl;
-static const IPinVtbl TransformFilter_OutputPin_Vtbl;
static inline TransformFilter *impl_from_strmbase_filter(struct strmbase_filter *iface)
{
@@ -338,8 +337,7 @@ static HRESULT strmbase_transform_init(IUnknown *outer, const CLSID *clsid,
strmbase_sink_init(&filter->sink, &TransformFilter_InputPin_Vtbl, &filter->filter,
wcsInputPinName, &sink_ops, NULL);
- strmbase_source_init(&filter->source, &TransformFilter_OutputPin_Vtbl, &filter->filter,
- wcsOutputPinName, &source_ops);
+ strmbase_source_init(&filter->source, &filter->filter, wcsOutputPinName, &source_ops);
filter->source_IQualityControl_iface.lpVtbl = &source_qc_vtbl;
filter->seekthru_unk = NULL;
@@ -503,25 +501,3 @@ static const IPinVtbl TransformFilter_InputPin_Vtbl =
TransformFilter_InputPin_EndFlush,
TransformFilter_InputPin_NewSegment
};
-
-static const IPinVtbl TransformFilter_OutputPin_Vtbl =
-{
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 04fb54915c6..e7d0313d7ce 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -97,7 +97,6 @@ const char* media_quark_string = "media-sample";
static const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0};
static const IMediaSeekingVtbl GST_Seeking_Vtbl;
-static const IPinVtbl GST_OutputPin_Vtbl;
static const IPinVtbl GST_InputPin_Vtbl;
static const IQualityControlVtbl GSTOutPin_QualityControl_Vtbl;
@@ -1836,27 +1835,6 @@ static void free_source_pin(struct gstdemux_source *pin)
heap_free(pin);
}
-static const IPinVtbl GST_OutputPin_Vtbl = {
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
static const struct strmbase_source_ops source_ops =
{
.base.pin_query_interface = source_query_interface,
@@ -1879,8 +1857,7 @@ static struct gstdemux_source *create_pin(struct gstdemux *filter, const WCHAR *
if (!(pin = heap_alloc_zero(sizeof(*pin))))
return NULL;
- strmbase_source_init(&pin->pin, &GST_OutputPin_Vtbl, &filter->filter, name,
- &source_ops);
+ strmbase_source_init(&pin->pin, &filter->filter, name, &source_ops);
pin->caps_event = CreateEventW(NULL, FALSE, FALSE, NULL);
pin->segment = gst_segment_new();
gst_segment_init(pin->segment, GST_FORMAT_TIME);
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 2ce06a7f590..d861110f5f1 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -171,7 +171,6 @@ typedef struct QTSplitter {
HANDLE splitterThread;
} QTSplitter;
-static const IPinVtbl QT_OutputPin_Vtbl;
static const IPinVtbl QT_InputPin_Vtbl;
static const IBaseFilterVtbl QT_Vtbl;
static const IMediaSeekingVtbl QT_Seeking_Vtbl;
@@ -1211,27 +1210,6 @@ static HRESULT WINAPI QTOutPin_DecideAllocator(struct strmbase_source *iface,
return hr;
}
-static const IPinVtbl QT_OutputPin_Vtbl = {
- BasePinImpl_QueryInterface,
- BasePinImpl_AddRef,
- BasePinImpl_Release,
- BaseOutputPinImpl_Connect,
- BaseOutputPinImpl_ReceiveConnection,
- BaseOutputPinImpl_Disconnect,
- BasePinImpl_ConnectedTo,
- BasePinImpl_ConnectionMediaType,
- BasePinImpl_QueryPinInfo,
- BasePinImpl_QueryDirection,
- BasePinImpl_QueryId,
- BasePinImpl_QueryAccept,
- BasePinImpl_EnumMediaTypes,
- BasePinImpl_QueryInternalConnections,
- BaseOutputPinImpl_EndOfStream,
- BaseOutputPinImpl_BeginFlush,
- BaseOutputPinImpl_EndFlush,
- BasePinImpl_NewSegment
-};
-
static inline QTOutPin *impl_from_IQualityControl( IQualityControl *iface )
{
return CONTAINING_RECORD(iface, QTOutPin, IQualityControl_iface);
@@ -1304,8 +1282,7 @@ static HRESULT QT_AddPin(QTSplitter *filter, const WCHAR *name,
else
filter->pAudio_Pin = pin;
- strmbase_source_init(&pin->pin, &QT_OutputPin_Vtbl, &filter->filter, name,
- &source_ops);
+ strmbase_source_init(&pin->pin, &filter->filter, name, &source_ops);
pin->pmt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
CopyMediaType(pin->pmt, mt);
pin->IQualityControl_iface.lpVtbl = &QTOutPin_QualityControl_Vtbl;
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 75eac504209..c3699f19253 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -113,14 +113,6 @@ HRESULT WINAPI BasePinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnu
HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin * iface, IPin ** apPin, ULONG * cPin);
HRESULT WINAPI BasePinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
-/* Base Output Pin */
-HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
-HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
-HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface);
-HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface);
-HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface);
-HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface);
-
HRESULT WINAPI BaseOutputPinImpl_GetDeliveryBuffer(struct strmbase_source *pin,
IMediaSample **sample, REFERENCE_TIME *start, REFERENCE_TIME *stop, DWORD flags);
HRESULT WINAPI BaseOutputPinImpl_Active(struct strmbase_source *pin);
@@ -130,7 +122,7 @@ HRESULT WINAPI BaseOutputPinImpl_DecideAllocator(struct strmbase_source *pin, IM
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *pin, IPin *peer, const AM_MEDIA_TYPE *mt);
void strmbase_source_cleanup(struct strmbase_source *pin);
-void strmbase_source_init(struct strmbase_source *pin, const IPinVtbl *vtbl, struct strmbase_filter *filter,
+void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter,
const WCHAR *name, const struct strmbase_source_ops *func_table);
/* Base Input Pin */
--
2.24.0
Dec. 8, 2019
[PATCH v2 7/8] qcap/avimux: Use BaseOutputPinImpl_Connect().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/qcap/avimux.c | 58 +++++++++++++++++-----------------------------
1 file changed, 21 insertions(+), 37 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index d2f29dbbeb0..677e79ef68f 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -1132,19 +1132,35 @@ static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYP
return S_OK;
}
-static HRESULT WINAPI AviMuxOut_AttemptConnection(struct strmbase_source *base,
+static HRESULT WINAPI AviMuxOut_AttemptConnection(struct strmbase_source *iface,
IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
{
+ AviMux *filter = impl_from_source_pin(&iface->pin);
PIN_DIRECTION dir;
+ unsigned int i;
HRESULT hr;
- TRACE("(%p)->(%p AM_MEDIA_TYPE(%p))\n", base, pReceivePin, pmt);
-
hr = IPin_QueryDirection(pReceivePin, &dir);
if(hr==S_OK && dir!=PINDIR_INPUT)
return VFW_E_INVALID_DIRECTION;
- return BaseOutputPinImpl_AttemptConnection(base, pReceivePin, pmt);
+ if (FAILED(hr = BaseOutputPinImpl_AttemptConnection(iface, pReceivePin, pmt)))
+ return hr;
+
+ for (i = 0; i < filter->input_pin_no; ++i)
+ {
+ if (!filter->in[i]->pin.pin.peer)
+ continue;
+
+ hr = IFilterGraph_Reconnect(filter->filter.filterInfo.pGraph, &filter->in[i]->pin.pin.IPin_iface);
+ if (FAILED(hr))
+ {
+ IPin_Disconnect(&iface->pin.IPin_iface);
+ break;
+ }
+ }
+
+ return hr;
}
static HRESULT source_get_media_type(struct strmbase_pin *base, unsigned int iPosition, AM_MEDIA_TYPE *amt)
@@ -1201,43 +1217,11 @@ static const struct strmbase_source_ops source_ops =
.pfnDecideAllocator = AviMuxOut_DecideAllocator,
};
-static inline AviMux *impl_from_out_IPin(IPin *iface)
-{
- return CONTAINING_RECORD(iface, AviMux, source.pin.IPin_iface);
-}
-
-static HRESULT WINAPI AviMuxOut_Connect(IPin *iface,
- IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
-{
- AviMux *This = impl_from_out_IPin(iface);
- HRESULT hr;
- int i;
-
- TRACE("(%p)->(%p AM_MEDIA_TYPE(%p))\n", This, pReceivePin, pmt);
-
- hr = BaseOutputPinImpl_Connect(iface, pReceivePin, pmt);
- if(FAILED(hr))
- return hr;
-
- for(i=0; i<This->input_pin_no; i++) {
- if(!This->in[i]->pin.pin.peer)
- continue;
-
- hr = IFilterGraph_Reconnect(This->filter.filterInfo.pGraph, &This->in[i]->pin.pin.IPin_iface);
- if(FAILED(hr)) {
- BaseOutputPinImpl_Disconnect(iface);
- break;
- }
- }
-
- return hr;
-}
-
static const IPinVtbl AviMuxOut_PinVtbl = {
BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
- AviMuxOut_Connect,
+ BaseOutputPinImpl_Connect,
BaseOutputPinImpl_ReceiveConnection,
BaseOutputPinImpl_Disconnect,
BasePinImpl_ConnectedTo,
--
2.24.0
Dec. 8, 2019
[PATCH v2 6/8] qcap/avimux: Use BaseOutputPinImpl_Disconnect().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/qcap/avimux.c | 17 +----------------
1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index 645f0b7d5e4..d2f29dbbeb0 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -1230,21 +1230,6 @@ static HRESULT WINAPI AviMuxOut_Connect(IPin *iface,
}
}
- if(hr == S_OK)
- IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
- return hr;
-}
-
-static HRESULT WINAPI AviMuxOut_Disconnect(IPin *iface)
-{
- AviMux *This = impl_from_out_IPin(iface);
- HRESULT hr;
-
- TRACE("(%p)\n", This);
-
- hr = BaseOutputPinImpl_Disconnect(iface);
- if(hr == S_OK)
- IBaseFilter_Release(&This->filter.IBaseFilter_iface);
return hr;
}
@@ -1254,7 +1239,7 @@ static const IPinVtbl AviMuxOut_PinVtbl = {
BasePinImpl_Release,
AviMuxOut_Connect,
BaseOutputPinImpl_ReceiveConnection,
- AviMuxOut_Disconnect,
+ BaseOutputPinImpl_Disconnect,
BasePinImpl_ConnectedTo,
BasePinImpl_ConnectionMediaType,
BasePinImpl_QueryPinInfo,
--
2.24.0
Dec. 8, 2019
[PATCH v2 5/8] qcap/avimux: Use BasePinImpl_QueryInterface().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/qcap/avimux.c | 94 +++++++++++++++++++++++-----------------------
1 file changed, 46 insertions(+), 48 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index dc28104c80a..645f0b7d5e4 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -1108,6 +1108,24 @@ static const ISpecifyPropertyPagesVtbl SpecifyPropertyPagesVtbl = {
SpecifyPropertyPages_GetPages
};
+static inline AviMux *impl_from_source_pin(struct strmbase_pin *iface)
+{
+ return CONTAINING_RECORD(iface, AviMux, source.pin);
+}
+
+static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
+{
+ AviMux *filter = impl_from_source_pin(iface);
+
+ if (IsEqualGUID(iid, &IID_IQualityControl))
+ *out = &filter->IQualityControl_iface;
+ else
+ return E_NOINTERFACE;
+
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
+}
+
static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt)
{
FIXME("(%p) stub\n", base);
@@ -1176,6 +1194,7 @@ static HRESULT WINAPI AviMuxOut_DecideAllocator(struct strmbase_source *base,
static const struct strmbase_source_ops source_ops =
{
+ .base.pin_query_interface = source_query_interface,
.base.pin_query_accept = source_query_accept,
.base.pin_get_media_type = source_get_media_type,
.pfnAttemptConnection = AviMuxOut_AttemptConnection,
@@ -1187,26 +1206,6 @@ static inline AviMux *impl_from_out_IPin(IPin *iface)
return CONTAINING_RECORD(iface, AviMux, source.pin.IPin_iface);
}
-static HRESULT WINAPI AviMuxOut_QueryInterface(IPin *iface, REFIID riid, void **ppv)
-{
- AviMux *This = impl_from_out_IPin(iface);
-
- TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
-
- if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPin))
- *ppv = iface;
- else if(IsEqualIID(riid, &IID_IQualityControl))
- *ppv = &This->IQualityControl_iface;
- else {
- FIXME("no interface for %s\n", debugstr_guid(riid));
- *ppv = NULL;
- return E_NOINTERFACE;
- }
-
- IUnknown_AddRef((IUnknown*)*ppv);
- return S_OK;
-}
-
static HRESULT WINAPI AviMuxOut_Connect(IPin *iface,
IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
{
@@ -1250,7 +1249,7 @@ static HRESULT WINAPI AviMuxOut_Disconnect(IPin *iface)
}
static const IPinVtbl AviMuxOut_PinVtbl = {
- AviMuxOut_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
AviMuxOut_Connect,
@@ -1321,6 +1320,30 @@ static const IQualityControlVtbl AviMuxOut_QualityControlVtbl = {
AviMuxOut_QualityControl_SetSink
};
+static inline AviMuxIn *impl_sink_from_strmbase_pin(struct strmbase_pin *iface)
+{
+ return CONTAINING_RECORD(iface, AviMuxIn, pin.pin.IPin_iface);
+}
+
+static HRESULT sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
+{
+ AviMuxIn *pin = impl_sink_from_strmbase_pin(iface);
+
+ if (IsEqualGUID(iid, &IID_IAMStreamControl))
+ *out = &pin->IAMStreamControl_iface;
+ else if (IsEqualGUID(iid, &IID_IMemInputPin))
+ *out = &pin->pin.IMemInputPin_iface;
+ else if (IsEqualGUID(iid, &IID_IPropertyBag))
+ *out = &pin->IPropertyBag_iface;
+ else if (IsEqualGUID(iid, &IID_IQualityControl))
+ *out = &pin->IQualityControl_iface;
+ else
+ return E_NOINTERFACE;
+
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
+}
+
static HRESULT sink_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *pmt)
{
if(IsEqualIID(&pmt->majortype, &MEDIATYPE_Audio) &&
@@ -1441,6 +1464,7 @@ static HRESULT WINAPI AviMuxIn_Receive(struct strmbase_sink *base, IMediaSample
static const struct strmbase_sink_ops sink_ops =
{
+ .base.pin_query_interface = sink_query_interface,
.base.pin_query_accept = sink_query_accept,
.base.pin_get_media_type = strmbase_pin_get_media_type,
.pfnReceive = AviMuxIn_Receive,
@@ -1457,32 +1481,6 @@ static inline AviMuxIn* AviMuxIn_from_IPin(IPin *iface)
return CONTAINING_RECORD(iface, AviMuxIn, pin.pin.IPin_iface);
}
-static HRESULT WINAPI AviMuxIn_QueryInterface(IPin *iface, REFIID riid, void **ppv)
-{
- AviMuxIn *avimuxin = AviMuxIn_from_IPin(iface);
-
- TRACE("pin %p, riid %s, ppv %p.\n", avimuxin, debugstr_guid(riid), ppv);
-
- if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPin))
- *ppv = &avimuxin->pin.pin.IPin_iface;
- else if(IsEqualIID(riid, &IID_IAMStreamControl))
- *ppv = &avimuxin->IAMStreamControl_iface;
- else if(IsEqualIID(riid, &IID_IMemInputPin))
- *ppv = &avimuxin->pin.IMemInputPin_iface;
- else if(IsEqualIID(riid, &IID_IPropertyBag))
- *ppv = &avimuxin->IPropertyBag_iface;
- else if(IsEqualIID(riid, &IID_IQualityControl))
- *ppv = &avimuxin->IQualityControl_iface;
- else {
- FIXME("no interface for %s\n", debugstr_guid(riid));
- *ppv = NULL;
- return E_NOINTERFACE;
- }
-
- IUnknown_AddRef((IUnknown*)*ppv);
- return S_OK;
-}
-
static HRESULT WINAPI AviMuxIn_ReceiveConnection(IPin *iface,
IPin *pConnector, const AM_MEDIA_TYPE *pmt)
{
@@ -1576,7 +1574,7 @@ static HRESULT WINAPI AviMuxIn_Disconnect(IPin *iface)
}
static const IPinVtbl AviMuxIn_PinVtbl = {
- AviMuxIn_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseInputPinImpl_Connect,
--
2.24.0
Dec. 8, 2019
[PATCH v2 4/8] wineqtdecoder: Use BasePinImpl_QueryInterface().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/wineqtdecoder/qtsplitter.c | 45 ++++++++++-----------------------
1 file changed, 13 insertions(+), 32 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 1db6dfd6ad7..2ce06a7f590 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -1140,15 +1140,7 @@ static const IPinVtbl QT_InputPin_Vtbl = {
QTInPin_NewSegment
};
-/*
- * Output Pin
- */
-static inline QTOutPin *impl_QTOutPin_from_IPin( IPin *iface )
-{
- return CONTAINING_RECORD(iface, QTOutPin, pin.pin.IPin_iface);
-}
-
-static inline QTOutPin *impl_sink_from_strmbase_pin(struct strmbase_pin *iface)
+static inline QTOutPin *impl_source_from_strmbase_pin(struct strmbase_pin *iface)
{
return CONTAINING_RECORD(iface, QTOutPin, pin.pin);
}
@@ -1158,30 +1150,19 @@ static inline QTOutPin *impl_QTOutPin_from_BaseOutputPin(struct strmbase_source
return CONTAINING_RECORD(iface, QTOutPin, pin);
}
-static HRESULT WINAPI QTOutPin_QueryInterface(IPin *iface, REFIID riid, void **ppv)
+static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
{
- QTOutPin *This = impl_QTOutPin_from_IPin(iface);
-
- TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
-
- *ppv = NULL;
+ QTOutPin *pin = impl_source_from_strmbase_pin(&iface->IPin_iface);
- if (IsEqualIID(riid, &IID_IUnknown))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IPin))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IMediaSeeking))
- *ppv = &This->seeking.IMediaSeeking_iface;
- else if (IsEqualIID(riid, &IID_IQualityControl))
- *ppv = &This->IQualityControl_iface;
+ if (IsEqualGUID(iid, &IID_IMediaSeeking))
+ *out = &pin->seeking.IMediaSeeking_iface;
+ else if (IsEqualGUID(iid, &IID_IQualityControl))
+ *out = &pin->IQualityControl_iface;
+ else
+ return E_NOINTERFACE;
- if (*ppv)
- {
- IUnknown_AddRef((IUnknown *)(*ppv));
- return S_OK;
- }
- FIXME("No interface for %s!\n", debugstr_guid(riid));
- return E_NOINTERFACE;
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
}
static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt)
@@ -1192,7 +1173,7 @@ static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYP
static HRESULT source_get_media_type(struct strmbase_pin *iface, unsigned int iPosition, AM_MEDIA_TYPE *pmt)
{
- QTOutPin *This = impl_sink_from_strmbase_pin(iface);
+ QTOutPin *This = impl_source_from_strmbase_pin(iface);
if (iPosition > 0)
return VFW_S_NO_MORE_ITEMS;
@@ -1231,7 +1212,7 @@ static HRESULT WINAPI QTOutPin_DecideAllocator(struct strmbase_source *iface,
}
static const IPinVtbl QT_OutputPin_Vtbl = {
- QTOutPin_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseOutputPinImpl_Connect,
--
2.24.0
Dec. 8, 2019
[PATCH v2 3/8] winegstreamer: Use BasePinImpl_QueryInterface().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/winegstreamer/gstdemux.c | 63 ++++++++---------------------------
1 file changed, 13 insertions(+), 50 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 78c8e38701a..04fb54915c6 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -1735,29 +1735,19 @@ static inline struct gstdemux_source *impl_source_from_IPin(IPin *iface)
return CONTAINING_RECORD(iface, struct gstdemux_source, pin.pin.IPin_iface);
}
-static HRESULT WINAPI GSTOutPin_QueryInterface(IPin *iface, REFIID riid, void **ppv)
+static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
{
- struct gstdemux_source *This = impl_source_from_IPin(iface);
+ struct gstdemux_source *pin = impl_source_from_IPin(&iface->IPin_iface);
- TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
-
- *ppv = NULL;
-
- if (IsEqualIID(riid, &IID_IUnknown))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IPin))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IMediaSeeking))
- *ppv = &This->seek;
- else if (IsEqualIID(riid, &IID_IQualityControl))
- *ppv = &This->IQualityControl_iface;
+ if (IsEqualGUID(iid, &IID_IMediaSeeking))
+ *out = &pin->seek.IMediaSeeking_iface;
+ else if (IsEqualGUID(iid, &IID_IQualityControl))
+ *out = &pin->IQualityControl_iface;
+ else
+ return E_NOINTERFACE;
- if (*ppv) {
- IUnknown_AddRef((IUnknown *)(*ppv));
- return S_OK;
- }
- FIXME("No interface for %s!\n", debugstr_guid(riid));
- return E_NOINTERFACE;
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
}
static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt)
@@ -1847,7 +1837,7 @@ static void free_source_pin(struct gstdemux_source *pin)
}
static const IPinVtbl GST_OutputPin_Vtbl = {
- GSTOutPin_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseOutputPinImpl_Connect,
@@ -1869,6 +1859,7 @@ static const IPinVtbl GST_OutputPin_Vtbl = {
static const struct strmbase_source_ops source_ops =
{
+ .base.pin_query_interface = source_query_interface,
.base.pin_query_accept = source_query_accept,
.base.pin_get_media_type = source_get_media_type,
.pfnAttemptConnection = BaseOutputPinImpl_AttemptConnection,
@@ -2071,36 +2062,8 @@ static HRESULT WINAPI GSTInPin_NewSegment(IPin *iface, REFERENCE_TIME start,
return S_OK;
}
-static HRESULT WINAPI GSTInPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
-{
- struct gstdemux *filter = impl_from_sink_IPin(iface);
-
- TRACE("filter %p, riid %s, ppv %p.\n", filter, debugstr_guid(riid), ppv);
-
- *ppv = NULL;
-
- if (IsEqualIID(riid, &IID_IUnknown))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IPin))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IMediaSeeking))
- {
- return IBaseFilter_QueryInterface(&filter->filter.IBaseFilter_iface, &IID_IMediaSeeking, ppv);
- }
-
- if (*ppv)
- {
- IUnknown_AddRef((IUnknown *)(*ppv));
- return S_OK;
- }
-
- FIXME("No interface for %s!\n", debugstr_guid(riid));
-
- return E_NOINTERFACE;
-}
-
static const IPinVtbl GST_InputPin_Vtbl = {
- GSTInPin_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseInputPinImpl_Connect,
--
2.24.0
Dec. 8, 2019
[PATCH v2 2/8] wineqtdecoder: Move the SourceSeeking structure to the source pin.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/wineqtdecoder/qtsplitter.c | 53 ++++++++++++++++-----------------
1 file changed, 26 insertions(+), 27 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 0dbc3d8bf19..1db6dfd6ad7 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -131,6 +131,7 @@ extern CLSID CLSID_QTSplitter;
typedef struct QTOutPin {
struct strmbase_source pin;
IQualityControl IQualityControl_iface;
+ SourceSeeking seeking;
AM_MEDIA_TYPE * pmt;
OutputQueue * queue;
@@ -162,7 +163,6 @@ typedef struct QTSplitter {
DWORD outputSize;
CRITICAL_SECTION csReceive;
- SourceSeeking sourceSeeking;
TimeValue movie_time;
TimeValue movie_start;
TimeScale movie_scale;
@@ -183,9 +183,9 @@ static HRESULT WINAPI QTSplitter_ChangeStart(IMediaSeeking *iface);
static HRESULT WINAPI QTSplitter_ChangeStop(IMediaSeeking *iface);
static HRESULT WINAPI QTSplitter_ChangeRate(IMediaSeeking *iface);
-static inline QTSplitter *impl_from_IMediaSeeking( IMediaSeeking *iface )
+static inline QTOutPin *impl_from_IMediaSeeking(IMediaSeeking *iface)
{
- return CONTAINING_RECORD(iface, QTSplitter, sourceSeeking.IMediaSeeking_iface);
+ return CONTAINING_RECORD(iface, QTOutPin, seeking.IMediaSeeking_iface);
}
static inline QTSplitter *impl_from_strmbase_filter(struct strmbase_filter *iface)
@@ -374,9 +374,6 @@ IUnknown * CALLBACK QTSplitter_create(IUnknown *outer, HRESULT *phr)
This->pInputPin.pin.peer = NULL;
This->pInputPin.pin.pFuncsTable = &sink_ops;
- strmbase_seeking_init(&This->sourceSeeking, &QT_Seeking_Vtbl,
- QTSplitter_ChangeStop, QTSplitter_ChangeStart, QTSplitter_ChangeRate);
-
*phr = S_OK;
return &This->filter.IUnknown_inner;
}
@@ -731,6 +728,7 @@ static void free_source_pin(QTOutPin *pin)
}
DeleteMediaType(pin->pmt);
+ strmbase_seeking_cleanup(&pin->seeking);
strmbase_source_cleanup(&pin->pin);
heap_free(pin);
}
@@ -914,7 +912,7 @@ static HRESULT QT_Process_Movie(QTSplitter* filter)
Track trk;
short id = 0;
DWORD tid;
- LONGLONG time;
+ LONGLONG time, duration;
TRACE("Trying movie connect\n");
@@ -955,10 +953,12 @@ static HRESULT QT_Process_Movie(QTSplitter* filter)
time = GetMovieDuration(filter->pQTMovie);
filter->movie_scale = GetMovieTimeScale(filter->pQTMovie);
- filter->sourceSeeking.llDuration = ((double)time / filter->movie_scale) * 10000000;
- filter->sourceSeeking.llStop = filter->sourceSeeking.llDuration;
-
- TRACE("Movie duration is %s\n",wine_dbgstr_longlong(filter->sourceSeeking.llDuration));
+ duration = ((double)time / filter->movie_scale) * 10000000;
+ TRACE("Movie duration is %s.\n", wine_dbgstr_longlong(duration));
+ if (filter->pVideo_Pin)
+ filter->pVideo_Pin->seeking.llStop = filter->pVideo_Pin->seeking.llDuration = duration;
+ if (filter->pAudio_Pin)
+ filter->pAudio_Pin->seeking.llStop = filter->pAudio_Pin->seeking.llDuration = duration;
filter->loaderThread = CreateThread(NULL, 0, QTSplitter_loading_thread, filter, 0, &tid);
if (filter->loaderThread)
@@ -1171,7 +1171,7 @@ static HRESULT WINAPI QTOutPin_QueryInterface(IPin *iface, REFIID riid, void **p
else if (IsEqualIID(riid, &IID_IPin))
*ppv = iface;
else if (IsEqualIID(riid, &IID_IMediaSeeking))
- *ppv = &This->sourceSeeking.IMediaSeeking_iface;
+ *ppv = &This->seeking.IMediaSeeking_iface;
else if (IsEqualIID(riid, &IID_IQualityControl))
*ppv = &This->IQualityControl_iface;
@@ -1328,6 +1328,8 @@ static HRESULT QT_AddPin(QTSplitter *filter, const WCHAR *name,
pin->pmt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
CopyMediaType(pin->pmt, mt);
pin->IQualityControl_iface.lpVtbl = &QTOutPin_QualityControl_Vtbl;
+ strmbase_seeking_init(&pin->seeking, &QT_Seeking_Vtbl,
+ QTSplitter_ChangeStop, QTSplitter_ChangeStart, QTSplitter_ChangeRate);
BaseFilterImpl_IncrementPinVersion(&filter->filter);
return OutputQueue_Construct(&pin->pin, TRUE, TRUE, 5, FALSE,
@@ -1336,12 +1338,12 @@ static HRESULT QT_AddPin(QTSplitter *filter, const WCHAR *name,
static HRESULT WINAPI QTSplitter_ChangeStart(IMediaSeeking *iface)
{
- QTSplitter *This = impl_from_IMediaSeeking(iface);
+ QTOutPin *pin = impl_from_IMediaSeeking(iface);
+ QTSplitter *filter = impl_from_strmbase_filter(pin->pin.pin.filter);
TRACE("(%p)\n", iface);
- EnterCriticalSection(&This->csReceive);
- This->movie_time = (This->sourceSeeking.llCurrent * This->movie_scale)/10000000;
- This->movie_start = This->movie_time;
- LeaveCriticalSection(&This->csReceive);
+ EnterCriticalSection(&filter->csReceive);
+ filter->movie_start = filter->movie_time = (pin->seeking.llCurrent * filter->movie_scale)/10000000;
+ LeaveCriticalSection(&filter->csReceive);
return S_OK;
}
@@ -1357,25 +1359,22 @@ static HRESULT WINAPI QTSplitter_ChangeRate(IMediaSeeking *iface)
return S_OK;
}
-static HRESULT WINAPI QT_Seeking_QueryInterface(IMediaSeeking * iface, REFIID riid, LPVOID * ppv)
+static HRESULT WINAPI QT_Seeking_QueryInterface(IMediaSeeking *iface, REFIID iid, void **out)
{
- QTSplitter *This = impl_from_IMediaSeeking(iface);
-
- return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv);
+ QTOutPin *pin = impl_from_IMediaSeeking(iface);
+ return IPin_QueryInterface(&pin->pin.pin.IPin_iface, iid, out);
}
static ULONG WINAPI QT_Seeking_AddRef(IMediaSeeking * iface)
{
- QTSplitter *This = impl_from_IMediaSeeking(iface);
-
- return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface);
+ QTOutPin *pin = impl_from_IMediaSeeking(iface);
+ return IPin_AddRef(&pin->pin.pin.IPin_iface);
}
static ULONG WINAPI QT_Seeking_Release(IMediaSeeking * iface)
{
- QTSplitter *This = impl_from_IMediaSeeking(iface);
-
- return IBaseFilter_Release(&This->filter.IBaseFilter_iface);
+ QTOutPin *pin = impl_from_IMediaSeeking(iface);
+ return IPin_Release(&pin->pin.pin.IPin_iface);
}
static const IMediaSeekingVtbl QT_Seeking_Vtbl =
--
2.24.0
Dec. 8, 2019
[PATCH v2 1/8] wineqtdecoder: Fix some copy-paste errors.
by Zebediah Figura
From: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/wineqtdecoder/qtsplitter.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 5b1e82ebc9b..0dbc3d8bf19 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -285,7 +285,7 @@ static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE
QTSplitter *filter = impl_from_strmbase_filter(iface);
HRESULT hr = VFW_E_NOT_CONNECTED, pin_hr;
- EnterCriticalSection(&This->csReceive);
+ EnterCriticalSection(&filter->csReceive);
if (filter->pVideo_Pin)
pin_hr = BaseOutputPinImpl_Active(&filter->pVideo_Pin->pin);
@@ -297,7 +297,7 @@ static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE
hr = pin_hr;
SetEvent(filter->runEvent);
- LeaveCriticalSection(&This->csReceive);
+ LeaveCriticalSection(&filter->csReceive);
return hr;
}
@@ -306,10 +306,10 @@ static HRESULT qt_splitter_cleanup_stream(struct strmbase_filter *iface)
{
QTSplitter *filter = impl_from_strmbase_filter(iface);
- EnterCriticalSection(&This->csReceive);
+ EnterCriticalSection(&filter->csReceive);
IAsyncReader_BeginFlush(filter->pInputPin.pReader);
IAsyncReader_EndFlush(filter->pInputPin.pReader);
- LeaveCriticalSection(&This->csReceive);
+ LeaveCriticalSection(&filter->csReceive);
return S_OK;
}
--
2.24.0
Dec. 8, 2019
Re: [PATCH] wineqtdecoder: Fix macos compile error
by Alistair Leslie-Hughes
Hi Mathew,
On 8/12/19 2:22 pm, Mathew Hodson wrote:
> On Sat, Dec 7, 2019 at 1:03 AM Alistair Leslie-Hughes
> <leslie_alistair(a)hotmail.com> wrote:
>>
>> Regression of 498179b4482026091bf7376c0d2ac9a036e7ca0e
>>
>> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
>> ---
>> dlls/wineqtdecoder/qtsplitter.c | 10 ++++------
>> 1 file changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
>> index 5b1e82ebc9b..956dd0a7d0d 100644
>> --- a/dlls/wineqtdecoder/qtsplitter.c
>> +++ b/dlls/wineqtdecoder/qtsplitter.c
>> @@ -285,7 +285,7 @@ static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE
>> QTSplitter *filter = impl_from_strmbase_filter(iface);
>> HRESULT hr = VFW_E_NOT_CONNECTED, pin_hr;
>>
>> - EnterCriticalSection(&This->csReceive);
>> + EnterCriticalSection(&filter->csReceive);
>
> Wouldn't the original commit have failed to compile on all platforms?
The macos build isn't part of the normal build verification process, so
sometimes things are missed. This isn't the first, nor will be that
last ;)
>
> Where is the This variable defined?
>
The code was changed to use filter instead of This.
Regards
Alistair.
Dec. 8, 2019
Re: [PATCH v2 2/2] kernel32/tests: Add broken result for Windows XP and 2003.
by Mathew Hodson
Here's what the docs say about the behaviour of FoldStringW:
https://docs.microsoft.com/en-us/windows/win32/api/stringapiset/nf-stringap…
>
> Startng with Windows Vista: This function supports Unicode normalization.
> All Unicode compatibility characters are mapped.
>
> Startng with Windows Vista: The transformations indicated by the
> MAP_FOLDCZONE, MAP_PRECOMPOSED, and MAP_COMPOSITE flags use
> Unicode normalization forms KC, C, and D (through the NormalizeString
> function) to do the mappings.
Dec. 8, 2019
Re: [PATCH] wineqtdecoder: Fix macos compile error
by Mathew Hodson
On Sat, Dec 7, 2019 at 1:03 AM Alistair Leslie-Hughes
<leslie_alistair(a)hotmail.com> wrote:
>
> Regression of 498179b4482026091bf7376c0d2ac9a036e7ca0e
>
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
> ---
> dlls/wineqtdecoder/qtsplitter.c | 10 ++++------
> 1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
> index 5b1e82ebc9b..956dd0a7d0d 100644
> --- a/dlls/wineqtdecoder/qtsplitter.c
> +++ b/dlls/wineqtdecoder/qtsplitter.c
> @@ -285,7 +285,7 @@ static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE
> QTSplitter *filter = impl_from_strmbase_filter(iface);
> HRESULT hr = VFW_E_NOT_CONNECTED, pin_hr;
>
> - EnterCriticalSection(&This->csReceive);
> + EnterCriticalSection(&filter->csReceive);
Wouldn't the original commit have failed to compile on all platforms?
Where is the This variable defined?
Dec. 8, 2019
Re: [PATCH v2 1/2] kernel32/tests: Trace the mapped string when FoldStringW fails.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61587
Your paranoid android.
=== wxppro (32 bit report) ===
kernel32:
locale.c:3586: Test failed: Got unexpected string L"Wine\0348\0551\1323\280dWine\03c5\0308j\030c\00a0\00aa".
=== w2003std (32 bit report) ===
kernel32:
locale.c:3586: Test failed: Got unexpected string L"Wine\0348\0551\1323\280dWine\03c5\0308j\030c\00a0\00aa".
Dec. 8, 2019
[PATCH v2 2/2] kernel32/tests: Add broken result for Windows XP and 2003.
by Mathew Hodson
Signed-off-by: Mathew Hodson <mathew.hodson(a)gmail.com>
---
dlls/kernel32/tests/locale.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 9328666..c8cc904 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -3439,7 +3439,7 @@ static void test_FoldStringW(void)
};
static const WCHAR foldczone_broken_dst[] =
{
- 'W','i','n','e',0x0348,0x0551,0x1323,0x280d,'W','i','n','e',0x3cb,0x1f0,0xa0,0xaa,0
+ 'W','i','n','e',0x0348,0x0551,0x1323,0x280d,'W','i','n','e',0x03c5,0x0308,'j',0x030c,0x00a0,0x00aa,0
};
static const WCHAR ligatures_src[] =
{
@@ -3582,9 +3582,11 @@ static void test_FoldStringW(void)
/* MAP_FOLDCZONE */
SetLastError(0);
ret = pFoldStringW(MAP_FOLDCZONE, foldczone_src, -1, dst, 256);
- ok(ret == ARRAY_SIZE(foldczone_dst), "Got %d, error %d\n", ret, GetLastError());
+ ok(ret == ARRAY_SIZE(foldczone_dst)
+ || broken(ret == ARRAY_SIZE(foldczone_broken_dst)), /* winxp, win2003 */
+ "Got %d, error %d.\n", ret, GetLastError());
ok(!memcmp(dst, foldczone_dst, sizeof(foldczone_dst))
- || broken(!memcmp(dst, foldczone_broken_dst, sizeof(foldczone_broken_dst))),
+ || broken(!memcmp(dst, foldczone_broken_dst, sizeof(foldczone_broken_dst))), /* winxp, win2003 */
"Got unexpected string %s.\n", wine_dbgstr_w(dst));
/* MAP_EXPAND_LIGATURES */
--
2.7.4
Dec. 8, 2019
[PATCH v2 1/2] kernel32/tests: Trace the mapped string when FoldStringW fails.
by Mathew Hodson
Signed-off-by: Mathew Hodson <mathew.hodson(a)gmail.com>
---
dlls/kernel32/tests/locale.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index e43eee2..9328666 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -3585,7 +3585,7 @@ static void test_FoldStringW(void)
ok(ret == ARRAY_SIZE(foldczone_dst), "Got %d, error %d\n", ret, GetLastError());
ok(!memcmp(dst, foldczone_dst, sizeof(foldczone_dst))
|| broken(!memcmp(dst, foldczone_broken_dst, sizeof(foldczone_broken_dst))),
- "MAP_FOLDCZONE: Expanded incorrectly\n");
+ "Got unexpected string %s.\n", wine_dbgstr_w(dst));
/* MAP_EXPAND_LIGATURES */
SetLastError(0);
@@ -3594,7 +3594,7 @@ static void test_FoldStringW(void)
if (!(ret == 0 && GetLastError() == ERROR_INVALID_FLAGS)) {
ok(ret == ARRAY_SIZE(ligatures_dst), "Got %d, error %d\n", ret, GetLastError());
ok(!memcmp(dst, ligatures_dst, sizeof(ligatures_dst)),
- "MAP_EXPAND_LIGATURES: Expanded incorrectly\n");
+ "Got unexpected string %s.\n", wine_dbgstr_w(dst));
}
/* FIXME: MAP_PRECOMPOSED : MAP_COMPOSITE */
--
2.7.4
Dec. 8, 2019
[PATCH 2/2] kernel32/tests: Add broken result for Windows XP and 2003.
by Mathew Hodson
Signed-off-by: Mathew Hodson <mathew.hodson(a)gmail.com>
---
dlls/kernel32/tests/locale.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 9328666..c8cc904 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -3439,7 +3439,7 @@ static void test_FoldStringW(void)
};
static const WCHAR foldczone_broken_dst[] =
{
- 'W','i','n','e',0x0348,0x0551,0x1323,0x280d,'W','i','n','e',0x3cb,0x1f0,0xa0,0xaa,0
+ 'W','i','n','e',0x0348,0x0551,0x1323,0x280d,'W','i','n','e',0x03c5,0x0308,'j',0x030c,0x00a0,0x00aa,0
};
static const WCHAR ligatures_src[] =
{
@@ -3582,9 +3582,11 @@ static void test_FoldStringW(void)
/* MAP_FOLDCZONE */
SetLastError(0);
ret = pFoldStringW(MAP_FOLDCZONE, foldczone_src, -1, dst, 256);
- ok(ret == ARRAY_SIZE(foldczone_dst), "Got %d, error %d\n", ret, GetLastError());
+ ok(ret == ARRAY_SIZE(foldczone_dst)
+ || broken(ret == ARRAY_SIZE(foldczone_broken_dst)), /* winxp, win2003 */
+ "Got %d, error %d.\n", ret, GetLastError());
ok(!memcmp(dst, foldczone_dst, sizeof(foldczone_dst))
- || broken(!memcmp(dst, foldczone_broken_dst, sizeof(foldczone_broken_dst))),
+ || broken(!memcmp(dst, foldczone_broken_dst, sizeof(foldczone_broken_dst))), /* winxp, win2003 */
"Got unexpected string %s.\n", wine_dbgstr_w(dst));
/* MAP_EXPAND_LIGATURES */
--
2.7.4
Dec. 8, 2019
Re: [PATCH v2] ieframe: implement COM aggregation in WebBrowser
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=61586
Your paranoid android.
=== debian10 (32 bit Japanese:Japan report) ===
ieframe:
webbrowser: Timeout
Dec. 7, 2019
[PATCH v2] ieframe: implement COM aggregation in WebBrowser
by Damjan Jovanovic
Wine's WebBrowser currently just ignores the "outer" it is passed.
Support COM aggregation like Windows does instead.
Try 2 renames the internal IUnknown functions, uses the
hlink_frame to store the outer, and beefs up the unit tests.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=12406
Signed-off-by: Damjan Jovanovic <damjan.jov(a)gmail.com>
---
dlls/ieframe/classinfo.c | 6 +-
dlls/ieframe/ieframe.h | 1 +
dlls/ieframe/oleobject.c | 30 +--
dlls/ieframe/persist.c | 18 +-
dlls/ieframe/tests/webbrowser.c | 60 ++++++
dlls/ieframe/view.c | 12 +-
dlls/ieframe/webbrowser.c | 325 ++++++++++++++++++--------------
7 files changed, 277 insertions(+), 175 deletions(-)
Dec. 7, 2019
I posted another fix for a Bugzilla bug.
by Thales
Hello,
I've been working on the Bugzilla problem #47641, "Treeview Expand using option TVE_COLLAPSE|TVE_COLLAPSERESET causes crash"
https://bugs.winehq.org/show_bug.cgi?id=47641
I applied the patch supplied there that was created by Alistair Leslie-Hughes. I came up with a fix that works as far as I can tell. I explain what I did at the Bugzilla link. I've posted the patch fix to this list under the title: "[PATCH] comctl32: Fix Treeview Expand using TVE_COLLAPSE|TVE_COLLAPSERESET"
Thanks!...John Alway
Dec. 7, 2019
Re: [PATCH] wineqtdecoder: Fix macos compile error
by Zebediah Figura
On 12/7/19 3:21 PM, Alistair Leslie-Hughes wrote:
> Hi Zebediah,
>
> On 8/12/19 2:58 am, Zebediah Figura wrote:
>> On 12/7/19 12:03 AM, Alistair Leslie-Hughes wrote:
>
>>>
>>
>> Did you mean to do this? >
> Yes,
> [22:38:21] ../../../wine/dlls/wineqtdecoder/qtsplitter.c:1174:23: error:
> no member named 'sourceSeeking' in 'struct QTOutPin'
> [22:38:21] *ppv = &This->sourceSeeking.IMediaSeeking_iface;
>
Bah, okay. Still, removing the interface entirely isn't the right
solution either. I'll send a patch to fix this.
>
> Alistair.
>
Dec. 7, 2019
Re: [PATCH] wineqtdecoder: Fix macos compile error
by Alistair Leslie-Hughes
Hi Zebediah,
On 8/12/19 2:58 am, Zebediah Figura wrote:
> On 12/7/19 12:03 AM, Alistair Leslie-Hughes wrote:
>>
>
> Did you mean to do this? >
Yes,
[22:38:21] ../../../wine/dlls/wineqtdecoder/qtsplitter.c:1174:23: error:
no member named 'sourceSeeking' in 'struct QTOutPin'
[22:38:21] *ppv = &This->sourceSeeking.IMediaSeeking_iface;
Alistair.
Dec. 7, 2019
Re: [wine-devel] Wine staging 4.21 release
by Alan W. Irwin
On 2019-12-07 19:36+0100 Sveinar Søpler wrote:
> I think you are overcomplicating something that does not need to be.
Your statement is probably true, and thanks to you (and Alistair
previously) for responding to my curiousity in a polite way. :-)
Alan
__________________________
Alan W. Irwin
Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net) the Time
Ephemerides project (timeephem.sf.net) PLplot scientific plotting
software package (plplot.org) the libLASi project
(unifont.org/lasi) the Loads of Linux Links project (loll.sf.net)
and the Linux Brochure Project (lbproject.sf.net)
__________________________
Linux-powered Science
__________________________
Dec. 7, 2019
Re: [wine-devel] Wine staging 4.21 release
by Alan W. Irwin
On 2019-12-07 09:52-0000 Alistair Leslie-Hughes wrote:
> Hi Alan,
>
> On 7/12/19 7:48 pm, Alan W. Irwin wrote:
>> On 2019-12-05 14:03+0100 Olivier F. R. Dierick wrote:
>>
>> Version rebased upstreamed added updated predicted predicted-rebased
>> T U A u P D
>>
>> 4.17 855 5 9 7 n/a n/a
>> 4.18 850 1 1 3 855 5
>> 4.19 840 8 1 1 843 3
>> 4.20 832 8 1 3 833 1
>> 4.21 833 0 6 2 838 5
>>
>
> These rebased number is the total number of patches applied to the
> current wine. The numbers aren't always going to add up as you expect,
> For example: we might disable a patchset from one version to another
> while we workout a regression or drop a patch(s) because they aren't
> correct or add patches to a patchset to increase functionally.
>
> This release will have two patches listed as upstreamed but were
> actually part of the previous release since I initial disabled the
> patchset until I could verify that these patches were no longer
> required. Likewise we might drop/disable the remaining wusa patch since
> we are unable to verify whether is actually required anymore, which wont
> be listed in the release notes.
Hi Alistair:
Thanks for answering my curiosity about these numbers in your reports.
Best wishes to you and the rest of the staging team with continuing your
useful work.
Alan
__________________________
Alan W. Irwin
Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net) the Time
Ephemerides project (timeephem.sf.net) PLplot scientific plotting
software package (plplot.org) the libLASi project
(unifont.org/lasi) the Loads of Linux Links project (loll.sf.net)
and the Linux Brochure Project (lbproject.sf.net)
__________________________
Linux-powered Science
__________________________
Dec. 7, 2019
Re: [wine-devel] Wine staging 4.21 release
by Sveinar Søpler
I think you are overcomplicating something that does not need to be.
The "Report" is somewhat trunkated. So are you kinda saying you would
want a more detailed report on what patches and things that are changed?
And that the report posted does not meet a proper standard? Probably a
fair request, but i don't know what the real benefit would be unless you
miss some important patchset that gets removed and breaks something the
staging devs are not aware of - which do happen from time to time.
I guess the "best" way for you personally if you really want to get into
stuff like that is to pay attention to the commit messages on GIT. None
of us live in a perfect world, and i do not think it is overly easy (or
informative for everyone) to make the report too detailed.
Sveinar
On 07.12.2019 09:48, Alan W. Irwin wrote:
> On 2019-12-05 14:03+0100 Olivier F. R. Dierick wrote:
>
>> Le mercredi 04 décembre 2019 à 14:56 -0800, Alan W. Irwin a écrit :
>>> On 2019-11-30 04:56-0000 Alistair Leslie-Hughes wrote:
>>>
>>>> Added:
>>>> * [47668] kernelbase: Improve stub for ReOpenFile and add small
>>> [...]
>>>
>>> Could you explain how these patch numbers in your report are related
>>> with each other?
>>>
>>
>> Hello,
>>
>> The numbers between brackets are winehq.org bugzilla bug numbers.
>>
>
> Hi Olivier:
>
> Thanks for trying to be helpful, but your answer did not respond to
> the question which was about how to account for the total number of
> patches in each category mentioned in these reports.
>
> To explain further, my curiosity about this question was stimulated by
> these staging "accounting" numbers from recent reports:
>
> Version rebased upstreamed added updated predicted predicted-rebased
> T U A u P D
>
> 4.17 855 5 9 7 n/a n/a
> 4.18 850 1 1 3 855 5
> 4.19 840 8 1 1 843 3
> 4.20 832 8 1 3 833 1
> 4.21 833 0 6 2 838 5
>
> I assume the "T" column is the total number of patches in staging,
> i.e., the report is only sent out when the rebasing work is completed,
> but could someone confirm that? I also assume U reduces the total
> number in staging by that number, A increases the total number in
> staging by that number, and u leaves the total number in staging
> unchanged. And I have used
>
> P = T' - U - A
>
> to calculate the predicted number of patches from one report to the next
>
> and
>
> D = P - T
>
> to calculate the discrepancy between predicted and actual values where
> T' is taken from the previous report and T, U and A are taken from the
> current report.
>
> In every case D is positive (P always greater than T) so I hypothesize
> there is another kind of patch category not currently mentioned in the
> report that explains this discrepancy (e.g., patches which the staging
> developers have removed from staging). Could someone please describe
> the true reason why D is always positive?
>
> Furthermore, my view is it would be helpful if patch categories
> (deletions from staging or whatever) that are currently not mentioned
> in these reports should be mentioned in future reports.
>
> Alan
> __________________________
> Alan W. Irwin
>
> Programming affiliations with the FreeEOS equation-of-state
> implementation for stellar interiors (freeeos.sf.net) the Time
> Ephemerides project (timeephem.sf.net) PLplot scientific plotting
> software package (plplot.org) the libLASi project
> (unifont.org/lasi) the Loads of Linux Links project (loll.sf.net)
> and the Linux Brochure Project (lbproject.sf.net)
> __________________________
>
> Linux-powered Science
> __________________________
>
Dec. 7, 2019
[PATCH 10/10] d3d10: Apply shader resources for shaders used in pass.
by Connor McAdams
Apply resources that are used by the shaders within the effect pass.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/effect.c | 106 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 106 insertions(+)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index df95724f95..235d7ed9b2 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -3651,9 +3651,102 @@ static struct ID3D10EffectVariable * STDMETHODCALLTYPE d3d10_effect_pass_GetAnno
return &null_variable.ID3D10EffectVariable_iface;
}
+static void write_localbuffer(ID3D10Device *device, struct d3d10_effect_variable *v)
+{
+ struct d3d10_effect_buffer_variable *b = &v->u.buffer;
+
+ ID3D10Device_UpdateSubresource(device, (ID3D10Resource *)b->buffer, 0, NULL, (const void *)b->local_buffer,
+ v->data_size, 0);
+
+ b->changed = 0;
+}
+
+static void apply_shader_resources(ID3D10Device *device, struct ID3D10EffectShaderVariable *variable)
+{
+ struct d3d10_effect_variable *v = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)variable);
+ struct d3d10_effect_shader_variable *sv = &v->u.shader;
+ struct d3d10_effect_shader_resource *sr;
+ ID3D10ShaderResourceView *const *srv;
+
+ unsigned int i;
+
+ for (i = 0; i < sv->resources; i++)
+ {
+ sr = &sv->shader_resource[i];
+
+ switch (sr->in_type)
+ {
+ case D3D10_SIT_CBUFFER:
+ switch (v->type->basetype)
+ {
+ case D3D10_SVT_VERTEXSHADER:
+ ID3D10Device_VSSetConstantBuffers(device, sr->bind_point, sr->bind_count,
+ (ID3D10Buffer *const *)&sr->resource_variable->u.buffer.buffer);
+ break;
+ case D3D10_SVT_PIXELSHADER:
+ ID3D10Device_PSSetConstantBuffers(device, sr->bind_point, sr->bind_count,
+ (ID3D10Buffer *const *)&sr->resource_variable->u.buffer.buffer);
+ break;
+ case D3D10_SVT_GEOMETRYSHADER:
+ ID3D10Device_GSSetConstantBuffers(device, sr->bind_point, sr->bind_count,
+ (ID3D10Buffer *const *)&sr->resource_variable->u.buffer.buffer);
+ break;
+ default:
+ break;
+ }
+ break;
+ case D3D10_SIT_TEXTURE:
+ case D3D10_SIT_TBUFFER:
+ if (sr->in_type == D3D10_SIT_TBUFFER)
+ srv = (ID3D10ShaderResourceView *const *)&sr->resource_variable->u.buffer.resource_view;
+ else
+ srv = (ID3D10ShaderResourceView *const *)sr->resource_variable->u.resource.resource_view;
+
+ switch (v->type->basetype)
+ {
+ case D3D10_SVT_VERTEXSHADER:
+ ID3D10Device_VSSetShaderResources(device, sr->bind_point, sr->bind_count, srv);
+ break;
+ case D3D10_SVT_PIXELSHADER:
+ ID3D10Device_PSSetShaderResources(device, sr->bind_point, sr->bind_count, srv);
+ break;
+ case D3D10_SVT_GEOMETRYSHADER:
+ ID3D10Device_GSSetShaderResources(device, sr->bind_point, sr->bind_count, srv);
+ break;
+ default:
+ break;
+ }
+ break;
+ case D3D10_SIT_SAMPLER:
+ switch (v->type->basetype)
+ {
+ case D3D10_SVT_VERTEXSHADER:
+ ID3D10Device_VSSetSamplers(device, sr->bind_point, sr->bind_count,
+ (ID3D10SamplerState *const *)&sr->resource_variable->u.state.object.sampler);
+ break;
+ case D3D10_SVT_PIXELSHADER:
+ ID3D10Device_PSSetSamplers(device, sr->bind_point, sr->bind_count,
+ (ID3D10SamplerState *const *)&sr->resource_variable->u.state.object.sampler);
+ break;
+ case D3D10_SVT_GEOMETRYSHADER:
+ ID3D10Device_GSSetSamplers(device, sr->bind_point, sr->bind_count,
+ (ID3D10SamplerState *const *)&sr->resource_variable->u.state.object.sampler);
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_Apply(ID3D10EffectPass *iface, UINT flags)
{
struct d3d10_effect_pass *This = impl_from_ID3D10EffectPass(iface);
+ struct d3d10_effect *effect = This->technique->effect;
+ ID3D10Device *device = This->technique->effect->device;
HRESULT hr = S_OK;
unsigned int i;
@@ -3661,6 +3754,19 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_Apply(ID3D10EffectPass *iface
if (flags) FIXME("Ignoring flags (%#x)\n", flags);
+ for (i = 0; i < effect->local_buffer_count; i++)
+ {
+ if (effect->local_buffers[i].u.buffer.changed)
+ write_localbuffer(device, &effect->local_buffers[i]);
+ }
+
+ if (This->vs.pShaderVariable != (ID3D10EffectShaderVariable *)&null_shader_variable.ID3D10EffectVariable_iface)
+ apply_shader_resources(device, This->vs.pShaderVariable);
+ if (This->gs.pShaderVariable != (ID3D10EffectShaderVariable *)&null_shader_variable.ID3D10EffectVariable_iface)
+ apply_shader_resources(device, This->gs.pShaderVariable);
+ if (This->ps.pShaderVariable != (ID3D10EffectShaderVariable *)&null_shader_variable.ID3D10EffectVariable_iface)
+ apply_shader_resources(device, This->ps.pShaderVariable);
+
for (i = 0; i < This->object_count; ++i)
{
hr = d3d10_effect_object_apply(&This->objects[i]);
--
2.20.1
Dec. 7, 2019
[PATCH 09/10] d3d10: Get resources used by effect shaders.
by Connor McAdams
Get the resources that the shader will need to be bound for use by
searching the effect framework buffers + local variables.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/d3d10_private.h | 12 ++++++
dlls/d3d10/effect.c | 82 ++++++++++++++++++++++++++++++++++++++
2 files changed, 94 insertions(+)
diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h
index f3b4e65e1c..87e506d668 100644
--- a/dlls/d3d10/d3d10_private.h
+++ b/dlls/d3d10/d3d10_private.h
@@ -76,6 +76,15 @@ struct d3d10_effect_object
} object;
};
+struct d3d10_effect_shader_resource
+{
+ D3D10_SHADER_INPUT_TYPE in_type;
+ UINT bind_point;
+ UINT bind_count;
+
+ struct d3d10_effect_variable *resource_variable;
+};
+
struct d3d10_effect_shader_signature
{
char *signature;
@@ -94,6 +103,9 @@ struct d3d10_effect_shader_variable
ID3D10PixelShader *ps;
ID3D10GeometryShader *gs;
} shader;
+
+ UINT resources;
+ struct d3d10_effect_shader_resource *shader_resource;
};
struct d3d10_effect_state_object_variable
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 9898b7f79f..df95724f95 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -657,6 +657,82 @@ static HRESULT shader_chunk_handler(const char *data, DWORD data_size, DWORD tag
return S_OK;
}
+static HRESULT get_fx10_shader_resources(struct d3d10_effect_variable *v, const void *data, size_t data_size)
+{
+ struct d3d10_effect_variable *tmp;
+ struct d3d10_effect_shader_variable *shader_var = &v->u.shader;
+ ID3D10ShaderReflection *reflector;
+ D3D10_SHADER_DESC desc;
+ D3D10_SHADER_INPUT_BIND_DESC rsrc_desc;
+ unsigned int i, y;
+ HRESULT hr;
+
+ hr = D3D10ReflectShader(data, data_size, &reflector);
+ if (FAILED(hr)) return hr;
+
+ reflector->lpVtbl->GetDesc(reflector, &desc);
+ shader_var->resources = desc.BoundResources;
+
+ if (!(shader_var->shader_resource = heap_calloc(shader_var->resources, sizeof(struct d3d10_effect_shader_resource))))
+ {
+ ERR("Failed to allocate shader resource binding information memory.\n");
+ hr = E_OUTOFMEMORY;
+ goto exit;
+ }
+
+ for (i = 0; i < desc.BoundResources; i++)
+ {
+ reflector->lpVtbl->GetResourceBindingDesc(reflector, i, &rsrc_desc);
+ shader_var->shader_resource[i].in_type = rsrc_desc.Type;
+ shader_var->shader_resource[i].bind_point = rsrc_desc.BindPoint;
+ shader_var->shader_resource[i].bind_count = rsrc_desc.BindCount;
+
+ switch (rsrc_desc.Type)
+ {
+ case D3D10_SIT_CBUFFER:
+ case D3D10_SIT_TBUFFER:
+ for (y = 0; y < v->effect->local_buffer_count; y++)
+ {
+ tmp = &v->effect->local_buffers[y];
+
+ if (tmp->name && !strcmp(rsrc_desc.Name, tmp->name))
+ {
+ shader_var->shader_resource[i].resource_variable = tmp;
+ break;
+ }
+ }
+ break;
+ case D3D10_SIT_SAMPLER:
+ case D3D10_SIT_TEXTURE:
+ for (y = 0; y < v->effect->local_variable_count; y++)
+ {
+ tmp = &v->effect->local_variables[y];
+
+ if (tmp->name && !strcmp(rsrc_desc.Name, tmp->name))
+ {
+ shader_var->shader_resource[i].resource_variable = tmp;
+ break;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (!shader_var->shader_resource[i].resource_variable)
+ {
+ ERR("Failed to find shader resource.\n");
+ hr = E_FAIL;
+ goto exit;
+ }
+ }
+
+exit:
+ reflector->lpVtbl->Release(reflector);
+
+ return hr;
+}
+
static HRESULT parse_fx10_shader(const char *data, size_t data_size, DWORD offset, struct d3d10_effect_variable *v)
{
ID3D10Device *device = v->effect->device;
@@ -692,6 +768,9 @@ static HRESULT parse_fx10_shader(const char *data, size_t data_size, DWORD offse
/* We got a shader VertexShader vs = NULL, so it is fine to skip this. */
if (!dxbc_size) return S_OK;
+ hr = get_fx10_shader_resources(v, (const void *)ptr, dxbc_size);
+ if (FAILED(hr)) return hr;
+
switch (v->type->basetype)
{
case D3D10_SVT_VERTEXSHADER:
@@ -2635,6 +2714,9 @@ static void d3d10_effect_shader_variable_destroy(struct d3d10_effect_shader_vari
FIXME("Unhandled shader type %s.\n", debug_d3d10_shader_variable_type(type));
break;
}
+
+ if (s->resources)
+ heap_free(s->shader_resource);
}
static void d3d10_effect_variable_destroy(struct d3d10_effect_variable *v)
--
2.20.1
Dec. 7, 2019
[PATCH 08/10] d3d10: Implement ShaderResource effect variable set method.
by Connor McAdams
Implement the SetResource method for the
ID3D10EffectShaderResourceVariable interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/d3d10_private.h | 6 ++++
dlls/d3d10/effect.c | 71 +++++++++++++++++++++++++++++++++++---
2 files changed, 73 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h
index 5c6c7a2d72..f3b4e65e1c 100644
--- a/dlls/d3d10/d3d10_private.h
+++ b/dlls/d3d10/d3d10_private.h
@@ -114,6 +114,11 @@ struct d3d10_effect_state_object_variable
} object;
};
+struct d3d10_effect_resource_variable
+{
+ ID3D10ShaderResourceView **resource_view;
+};
+
struct d3d10_effect_buffer_variable
{
ID3D10Buffer *buffer;
@@ -179,6 +184,7 @@ struct d3d10_effect_variable
struct d3d10_effect_state_object_variable state;
struct d3d10_effect_shader_variable shader;
struct d3d10_effect_buffer_variable buffer;
+ struct d3d10_effect_resource_variable resource;
} u;
};
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 1e1d5d7f4c..9898b7f79f 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -1994,6 +1994,19 @@ static HRESULT parse_fx10_local_variable(const char *data, size_t data_size,
case D3D10_SVT_TEXTURE2DMSARRAY:
case D3D10_SVT_TEXTURE3D:
case D3D10_SVT_TEXTURECUBE:
+ TRACE("SVT could not have elements.\n");
+ if (!v->type->element_count)
+ i = 1;
+ else
+ i = v->type->element_count;
+
+ if (!(v->u.resource.resource_view = heap_calloc(i, sizeof(ID3D10ShaderResourceView *))))
+ {
+ ERR("Failed to allocate shader resource view array memory.\n");
+ return E_OUTOFMEMORY;
+ }
+ break;
+
case D3D10_SVT_RENDERTARGETVIEW:
case D3D10_SVT_DEPTHSTENCILVIEW:
case D3D10_SVT_BUFFER:
@@ -2689,6 +2702,31 @@ static void d3d10_effect_variable_destroy(struct d3d10_effect_variable *v)
ID3D10SamplerState_Release(v->u.state.object.sampler);
break;
+ case D3D10_SVT_TEXTURE1D:
+ case D3D10_SVT_TEXTURE1DARRAY:
+ case D3D10_SVT_TEXTURE2D:
+ case D3D10_SVT_TEXTURE2DARRAY:
+ case D3D10_SVT_TEXTURE2DMS:
+ case D3D10_SVT_TEXTURE2DMSARRAY:
+ case D3D10_SVT_TEXTURE3D:
+ case D3D10_SVT_TEXTURECUBE:
+ if (!v->type->element_count)
+ {
+ if (*v->u.resource.resource_view)
+ ID3D10ShaderResourceView_Release(*v->u.resource.resource_view);
+ }
+ else
+ {
+ for (i = 0; i < v->type->element_count; i++)
+ {
+ if (v->u.resource.resource_view[i])
+ ID3D10ShaderResourceView_Release(v->u.resource.resource_view[i]);
+
+ }
+ }
+ heap_free(v->u.resource.resource_view);
+ break;
+
default:
break;
}
@@ -5731,9 +5769,19 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_shader_resource_variable_GetRawVal
static HRESULT STDMETHODCALLTYPE d3d10_effect_shader_resource_variable_SetResource(
ID3D10EffectShaderResourceVariable *iface, ID3D10ShaderResourceView *resource)
{
- FIXME("iface %p, resource %p stub!\n", iface, resource);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, resource %p.\n", iface, resource);
+
+ if (*effect_var->u.resource.resource_view)
+ ID3D10ShaderResourceView_Release(*effect_var->u.resource.resource_view);
+
+ if (resource)
+ ID3D10ShaderResourceView_AddRef(resource);
+
+ *effect_var->u.resource.resource_view = resource;
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_shader_resource_variable_GetResource(
@@ -5747,9 +5795,24 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_shader_resource_variable_GetResour
static HRESULT STDMETHODCALLTYPE d3d10_effect_shader_resource_variable_SetResourceArray(
ID3D10EffectShaderResourceVariable *iface, ID3D10ShaderResourceView **resources, UINT offset, UINT count)
{
- FIXME("iface %p, resources %p, offset %u, count %u stub!\n", iface, resources, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
+ UINT i;
- return E_NOTIMPL;
+ TRACE("iface %p, resources %p, offset %u, count %u stub!\n", iface, resources, offset, count);
+
+ if (!effect_var->type->element_count)
+ return d3d10_effect_shader_resource_variable_SetResource(iface, *resources);
+
+ for (i = 0; i < count; i++)
+ {
+ if (effect_var->u.resource.resource_view[i + offset])
+ ID3D10ShaderResourceView_Release(effect_var->u.resource.resource_view[i + offset]);
+ if (resources[i])
+ ID3D10ShaderResourceView_AddRef(resources[i]);
+ effect_var->u.resource.resource_view[i + offset] = resources[i];
+ }
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_shader_resource_variable_GetResourceArray(
--
2.20.1
Dec. 7, 2019
[PATCH 07/10] d3d10: Implement matrix effect variable get methods.
by Connor McAdams
Implement GetMatrix/GetMatrixArray and
GetMatrixTranspose/GetMatrixTransposeArray methods for the matrix effect
variable interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/effect.c | 85 ++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 77 insertions(+), 8 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 0f08fb11e9..1e1d5d7f4c 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -5026,6 +5026,63 @@ static void write_matrix_variable_array_to_cbuffer(struct d3d10_effect_variable
variable->buffer->u.buffer.changed = 1;
}
+static void read_matrix_from_cbuffer(struct d3d10_effect_variable *variable, float *cbuf, D3DMATRIX *matrix)
+{
+ UINT row, col;
+
+ if (variable->type->type_class == D3D10_SVC_MATRIX_COLUMNS)
+ {
+ for (col = 0; col < variable->type->column_count; col++)
+ {
+ for (row = 0; row < variable->type->row_count; row++)
+ {
+ memcpy(&matrix->m[row][col], cbuf + ((col * 4) + row), sizeof(float));
+ }
+ }
+ }
+ else
+ {
+ for (col = 0; col < variable->type->column_count; col++)
+ {
+ for (row = 0; row < variable->type->row_count; row++)
+ {
+ memcpy(&matrix->m[row][col], cbuf + ((row * 4) + col), sizeof(float));
+ }
+ }
+ }
+}
+
+static void read_matrix_variable_from_cbuffer(struct d3d10_effect_variable *variable, void *data, BOOL transpose)
+{
+ char *cbuf = variable->buffer->u.buffer.local_buffer + variable->buffer_offset;
+
+ read_matrix_from_cbuffer(variable, (float *)cbuf, data);
+
+ if (transpose)
+ transpose_matrix(data);
+}
+
+static void read_matrix_variable_array_from_cbuffer(struct d3d10_effect_variable *variable, void *data, UINT offset,
+ UINT count, BOOL transpose)
+{
+ char *cbuf = variable->buffer->u.buffer.local_buffer + variable->buffer_offset;
+ D3DMATRIX *input_data = data;
+ UINT i;
+
+ if (offset)
+ cbuf += variable->type->stride * offset;
+
+ for (i = 0; i < count; i++)
+ {
+ read_matrix_from_cbuffer(variable, (float *)cbuf, &input_data[i]);
+
+ if (transpose)
+ transpose_matrix(&input_data[i]);
+
+ cbuf += variable->type->stride;
+ }
+}
+
/* ID3D10EffectVariable methods */
static BOOL STDMETHODCALLTYPE d3d10_effect_matrix_variable_IsValid(ID3D10EffectMatrixVariable *iface)
@@ -5195,9 +5252,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrix(ID3D10Ef
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrix(ID3D10EffectMatrixVariable *iface,
float *data)
{
- FIXME("iface %p, data %p stub!\n", iface, data);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %p.\n", iface, data);
+ read_matrix_variable_from_cbuffer(effect_var, data, FALSE);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixArray(ID3D10EffectMatrixVariable *iface,
@@ -5214,9 +5274,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixArray(ID3
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixArray(ID3D10EffectMatrixVariable *iface,
float *data, UINT offset, UINT count)
{
- FIXME("iface %p, data %p, offset %u, count %u stub!\n", iface, data, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %p, offset %u, count %u.\n", iface, data, offset, count);
+ read_matrix_variable_array_from_cbuffer(effect_var, data, offset, count, FALSE);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixTranspose(ID3D10EffectMatrixVariable *iface,
@@ -5235,9 +5298,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixTranspose
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixTranspose(ID3D10EffectMatrixVariable *iface,
float *data)
{
- FIXME("iface %p, data %p stub!\n", iface, data);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %p.\n", iface, data);
+ read_matrix_variable_from_cbuffer(effect_var, data, TRUE);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixTransposeArray(ID3D10EffectMatrixVariable *iface,
@@ -5254,9 +5320,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixTranspose
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixTransposeArray(ID3D10EffectMatrixVariable *iface,
float *data, UINT offset, UINT count)
{
- FIXME("iface %p, data %p, offset %u, count %u stub!\n", iface, data, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %p, offset %u, count %u.\n", iface, data, offset, count);
+ read_matrix_variable_array_from_cbuffer(effect_var, data, offset, count, TRUE);
+
+ return S_OK;
}
--
2.20.1
Dec. 7, 2019
[PATCH 06/10] d3d10: Implement matrix effect variable set methods.
by Connor McAdams
Implement SetMatrix/SetMatrixArray and
SetMatrixTranspose/SetMatrixTransposeArray methods for the matrix effect
variable interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/effect.c | 114 ++++++++++++++++++++++++++++++++++++++++----
1 file changed, 106 insertions(+), 8 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 4e51e43a01..0f08fb11e9 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -19,6 +19,7 @@
*/
#include "d3d10_private.h"
+#include "d3d9types.h"
#include <float.h>
@@ -4942,6 +4943,89 @@ static const struct ID3D10EffectVectorVariableVtbl d3d10_effect_vector_variable_
d3d10_effect_vector_variable_GetFloatVectorArray,
};
+static void transpose_matrix(D3DMATRIX *matrix)
+{
+ UINT row, col;
+ D3DMATRIX tmp;
+
+ for (col = 0; col < 4; col++)
+ {
+ for (row = 0; row < 4; row++)
+ {
+ memcpy(&tmp.m[col][row], &matrix->m[row][col], sizeof(float));
+ }
+ }
+
+ memcpy(matrix, &tmp, sizeof(D3DMATRIX));
+}
+
+static void write_matrix_to_cbuffer(struct d3d10_effect_variable *variable, float *cbuf, D3DMATRIX *matrix)
+{
+ UINT row, col;
+
+ if (variable->type->type_class == D3D10_SVC_MATRIX_COLUMNS)
+ {
+ for (col = 0; col < variable->type->column_count; col++)
+ {
+ for (row = 0; row < variable->type->row_count; row++)
+ {
+ memcpy(cbuf + ((col * 4) + row), &matrix->m[row][col], sizeof(float));
+ }
+ }
+ }
+ else
+ {
+ for (col = 0; col < variable->type->column_count; col++)
+ {
+ for (row = 0; row < variable->type->row_count; row++)
+ {
+ memcpy(cbuf + ((row * 4) + col), &matrix->m[row][col], sizeof(float));
+ }
+ }
+ }
+}
+
+static void write_matrix_variable_to_cbuffer(struct d3d10_effect_variable *variable, void *data)
+{
+ char *cbuf = variable->buffer->u.buffer.local_buffer + variable->buffer_offset;
+
+ write_matrix_to_cbuffer(variable, (float *)cbuf, data);
+
+ variable->buffer->u.buffer.changed = 1;
+}
+
+static void write_matrix_variable_array_to_cbuffer(struct d3d10_effect_variable *variable, void *data, UINT offset,
+ UINT count, BOOL transpose)
+{
+ char *cbuf = variable->buffer->u.buffer.local_buffer + variable->buffer_offset;
+ D3DMATRIX *input_data = data;
+ D3DMATRIX tmp;
+ UINT i;
+
+ if (!variable->type->element_count)
+ {
+ write_matrix_variable_to_cbuffer(variable, data);
+ return;
+ }
+
+ if (offset)
+ cbuf += variable->type->stride * offset;
+
+ for (i = 0; i < count; i++)
+ {
+ tmp = input_data[i];
+
+ if (transpose)
+ transpose_matrix(&tmp);
+
+ write_matrix_to_cbuffer(variable, (float *)cbuf, &tmp);
+
+ cbuf += variable->type->stride;
+ }
+
+ variable->buffer->u.buffer.changed = 1;
+}
+
/* ID3D10EffectVariable methods */
static BOOL STDMETHODCALLTYPE d3d10_effect_matrix_variable_IsValid(ID3D10EffectMatrixVariable *iface)
@@ -5100,9 +5184,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetRawValue(ID3D10
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrix(ID3D10EffectMatrixVariable *iface,
float *data)
{
- FIXME("iface %p, data %p stub!\n", iface, data);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %p.\n", iface, data);
+ write_matrix_variable_to_cbuffer(effect_var, data);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrix(ID3D10EffectMatrixVariable *iface,
@@ -5116,9 +5203,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrix(ID3D10Ef
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixArray(ID3D10EffectMatrixVariable *iface,
float *data, UINT offset, UINT count)
{
- FIXME("iface %p, data %p, offset %u, count %u stub!\n", iface, data, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %p, offset %u, count %u.\n", iface, data, offset, count);
+ write_matrix_variable_array_to_cbuffer(effect_var, data, offset, count, FALSE);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixArray(ID3D10EffectMatrixVariable *iface,
@@ -5132,9 +5222,14 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixArray(ID3
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixTranspose(ID3D10EffectMatrixVariable *iface,
float *data)
{
- FIXME("iface %p, data %p stub!\n", iface, data);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
+ D3DMATRIX tmp = *(D3DMATRIX *)data;
- return E_NOTIMPL;
+ TRACE("iface %p, data %p.\n", iface, data);
+ transpose_matrix(&tmp);
+ write_matrix_variable_to_cbuffer(effect_var, &tmp);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixTranspose(ID3D10EffectMatrixVariable *iface,
@@ -5148,9 +5243,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixTranspose
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_SetMatrixTransposeArray(ID3D10EffectMatrixVariable *iface,
float *data, UINT offset, UINT count)
{
- FIXME("iface %p, data %p, offset %u, count %u stub!\n", iface, data, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %p, offset %u, count %u.\n", iface, data, offset, count);
+ write_matrix_variable_array_to_cbuffer(effect_var, data, offset, count, TRUE);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_matrix_variable_GetMatrixTransposeArray(ID3D10EffectMatrixVariable *iface,
--
2.20.1
Dec. 7, 2019
[PATCH 05/10] d3d10: Implement vector effect variable get methods.
by Connor McAdams
Implement GetFloatVector/GetFloatVectorArray,
GetIntVector/GetIntVectorArray, and GetBoolVector/GetBoolVectorArray
methods for the vector effect variable interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/effect.c | 42 ++++++++++++++++++++++++++++++------------
1 file changed, 30 insertions(+), 12 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 4475fafe41..4e51e43a01 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -4803,25 +4803,34 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetFloatVector(ID3
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetBoolVector(ID3D10EffectVectorVariable *iface,
BOOL *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ read_variable_from_cbuffer(effect_var, value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetIntVector(ID3D10EffectVectorVariable *iface,
int *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ read_variable_from_cbuffer(effect_var, value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetFloatVector(ID3D10EffectVectorVariable *iface,
float *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ read_variable_from_cbuffer(effect_var, value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetBoolVectorArray(ID3D10EffectVectorVariable *iface,
@@ -4860,25 +4869,34 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetFloatVectorArra
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetBoolVectorArray(ID3D10EffectVectorVariable *iface,
BOOL *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ read_variable_array_from_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetIntVectorArray(ID3D10EffectVectorVariable *iface,
int *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ read_variable_array_from_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetFloatVectorArray(ID3D10EffectVectorVariable *iface,
float *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ read_variable_array_from_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static const struct ID3D10EffectVectorVariableVtbl d3d10_effect_vector_variable_vtbl =
--
2.20.1
Dec. 7, 2019
[PATCH 04/10] d3d10: Implement vector effect variable set methods.
by Connor McAdams
Implement SetFloatVector/SetFloatVectorArray,
SetIntVector/SetIntVectorArray, and SetBoolVector/SetBoolVectorArray
methods for the vector effect variable interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/effect.c | 42 ++++++++++++++++++++++++++++++------------
1 file changed, 30 insertions(+), 12 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 4ab882c1dc..4475fafe41 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -4770,25 +4770,34 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetRawValue(ID3D10
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetBoolVector(ID3D10EffectVectorVariable *iface,
BOOL *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ write_variable_to_cbuffer(effect_var, &value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetIntVector(ID3D10EffectVectorVariable *iface,
int *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ write_variable_to_cbuffer(effect_var, &value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetFloatVector(ID3D10EffectVectorVariable *iface,
float *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ write_variable_to_cbuffer(effect_var, &value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetBoolVector(ID3D10EffectVectorVariable *iface,
@@ -4818,25 +4827,34 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetFloatVector(ID3
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetBoolVectorArray(ID3D10EffectVectorVariable *iface,
BOOL *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ write_variable_array_to_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetIntVectorArray(ID3D10EffectVectorVariable *iface,
int *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ write_variable_array_to_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_SetFloatVectorArray(ID3D10EffectVectorVariable *iface,
float *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ write_variable_array_to_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_vector_variable_GetBoolVectorArray(ID3D10EffectVectorVariable *iface,
--
2.20.1
Dec. 7, 2019
[PATCH 03/10] d3d10: Implement scalar effect variable get methods.
by Connor McAdams
Implement GetFloat/GetFloatArray, GetInt/GetIntArray, and
GetBool/GetBoolArray methods for the scalar effect variable interface.
Signed-off-by: Connor McAdams <conmanx360(a)gmail.com>
---
dlls/d3d10/effect.c | 71 +++++++++++++++++++++++++++++++++++++--------
1 file changed, 59 insertions(+), 12 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 4ecc0753de..4ab882c1dc 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -4249,6 +4249,35 @@ static void write_variable_array_to_cbuffer(struct d3d10_effect_variable *variab
variable->buffer->u.buffer.changed = 1;
}
+static inline void read_variable_from_cbuffer(struct d3d10_effect_variable *variable, void *data)
+{
+ memcpy(data, variable->buffer->u.buffer.local_buffer + variable->buffer_offset, variable->type->size_packed);
+}
+
+static void read_variable_array_from_cbuffer(struct d3d10_effect_variable *variable, void *data, UINT count)
+{
+ char *cbuf = variable->buffer->u.buffer.local_buffer + variable->buffer_offset;
+ char *cur_element = data;
+ DWORD element_size;
+ UINT i;
+
+ if (!variable->type->element_count)
+ {
+ write_variable_to_cbuffer(variable, data);
+ return;
+ }
+
+ element_size = variable->type->elementtype->size_packed;
+
+ for (i = 0; i < count; i++)
+ {
+ memcpy(cur_element, cbuf, element_size);
+
+ cur_element += element_size;
+ cbuf += variable->type->stride;
+ }
+}
+
/* ID3D10EffectVariable methods */
static BOOL STDMETHODCALLTYPE d3d10_effect_scalar_variable_IsValid(ID3D10EffectScalarVariable *iface)
@@ -4418,9 +4447,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetFloat(ID3D10Eff
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_GetFloat(ID3D10EffectScalarVariable *iface,
float *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ read_variable_from_cbuffer(effect_var, value);
+
+ return S_OK;
}
/*
@@ -4441,9 +4473,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetFloatArray(ID3D
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_GetFloatArray(ID3D10EffectScalarVariable *iface,
float *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ read_variable_array_from_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetInt(ID3D10EffectScalarVariable *iface,
@@ -4460,9 +4495,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetInt(ID3D10Effec
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_GetInt(ID3D10EffectScalarVariable *iface,
int *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ read_variable_from_cbuffer(effect_var, value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetIntArray(ID3D10EffectScalarVariable *iface,
@@ -4479,9 +4517,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetIntArray(ID3D10
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_GetIntArray(ID3D10EffectScalarVariable *iface,
int *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ read_variable_array_from_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetBool(ID3D10EffectScalarVariable *iface,
@@ -4498,9 +4539,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetBool(ID3D10Effe
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_GetBool(ID3D10EffectScalarVariable *iface,
BOOL *value)
{
- FIXME("iface %p, value %p stub!\n", iface, value);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, value %p.\n", iface, value);
+ read_variable_from_cbuffer(effect_var, value);
+
+ return S_OK;
}
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetBoolArray(ID3D10EffectScalarVariable *iface,
@@ -4517,9 +4561,12 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_SetBoolArray(ID3D1
static HRESULT STDMETHODCALLTYPE d3d10_effect_scalar_variable_GetBoolArray(ID3D10EffectScalarVariable *iface,
BOOL *values, UINT offset, UINT count)
{
- FIXME("iface %p, values %p, offset %u, count %u stub!\n", iface, values, offset, count);
+ struct d3d10_effect_variable *effect_var = impl_from_ID3D10EffectVariable((ID3D10EffectVariable *)iface);
- return E_NOTIMPL;
+ TRACE("iface %p, values %p, offset %u, count %u.\n", iface, values, offset, count);
+ read_variable_array_from_cbuffer(effect_var, values, count);
+
+ return S_OK;
}
static const struct ID3D10EffectScalarVariableVtbl d3d10_effect_scalar_variable_vtbl =
--
2.20.1
Dec. 7, 2019