From: Igor Izyumin Subject: mlang: Partially implement IMLangLineBreakConsole::BreakLineW Message-Id: Date: Sat, 19 Jul 2014 10:55:42 -0700 The BreakLineW stub currently does not do anything. Since this method is typically used in a loop to word-wrap a string, it causes programs that use it (e.g. Mathcad) to hang when they attempt to break a line (bug 32126). From 5670e308d84a7db29f5488a28f2357fd6cec940e Mon Sep 17 00:00:00 2001 From: Igor Izyumin Date: Sat, 19 Jul 2014 10:31:26 -0700 Subject: Partial implementation of IMLangLineBreakConsole::BreakLineW to address bug 32126 --- dlls/mlang/mlang.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index f4a689c..6c28cc8 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -3466,10 +3466,31 @@ static HRESULT WINAPI fnIMLangLineBreakConsole_BreakLineW( LONG* pcchLine, LONG* pcchSkip ) { - FIXME("(%p)->%i %s %i %i %p %p\n", iface, locale, debugstr_wn(pszSrc,cchSrc), cchSrc, cMaxColumns, pcchLine, pcchSkip); + LONG i; *pcchLine = cchSrc; *pcchSkip = 0; + + FIXME("(%p)->%i %s %i %i %p %p\n", iface, locale, debugstr_wn(pszSrc,cchSrc), cchSrc, cMaxColumns, pcchLine, pcchSkip); + + if (cchSrc > cMaxColumns) + { + for (i = cMaxColumns - 1; i >= 0; i--) + { + if (isspaceW(pszSrc[i])) + { + do + { + i--; + (*pcchSkip)++; + } + while(i >= 0 && isspaceW(pszSrc[i])); + break; + } + } + *pcchLine = i+1; + } + return S_OK; } -- 1.9.1