MCPcopy Create free account
hub / github.com/ConEmu/ConEmu / IsConsoleDoubleCellCP

Function IsConsoleDoubleCellCP

src/common/ConsoleRead.cpp:377–434  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

375}
376
377bool IsConsoleDoubleCellCP()
378{
379 static bool bDBCS = false, bDBCS_Checked = false;
380 if (!bDBCS_Checked)
381 {
382 bDBCS = IsWinDBCS();
383 bDBCS_Checked = true;
384 // gh-945: Perhaps it will be fixed in future Win10 builds?
385 if (!bDBCS && IsWin10())
386 {
387 OSVERSIONINFOEXW osVersion = MakeOsVersionEx(10, 0);
388 osVersion.dwBuildNumber = 14959;
389 DWORDLONG const dwlConditionMask = VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_GREATER_EQUAL), VER_BUILDNUMBER, VER_GREATER_EQUAL);
390 const BOOL ibIsWinOrHigher = _VerifyVersionInfo(&osVersion, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, dwlConditionMask);
391 if (ibIsWinOrHigher)
392 {
393 bDBCS = true;
394 }
395 }
396 }
397
398 static bool bDBCS_CP = false;
399 static DWORD nLastCP = 0;
400 UINT MaxCharSize = 0;
401 DWORD nCP;
402 #ifdef _DEBUG
403 DWORD nCP1;
404 //DWORD nMode;
405 #endif
406
407 if (bDBCS)
408 {
409 nCP = GetConsoleOutputCP();
410 #ifdef _DEBUG
411 nCP1 = GetConsoleCP();
412 // May occur in some case due race
413 // Under pwsh.exe we have GetConsoleOutputCP=65001 and GetConsoleCP=437
414 //_ASSERTE(nCP1==nCP);
415 //GetConsoleMode(hOut, &nMode);
416 #endif
417
418 if (!nLastCP || (nLastCP != nCP))
419 {
420 bool bNewVal = true;
421 if (!AreCpInfoLeads(nCP, &MaxCharSize) || MaxCharSize < 2)
422 {
423 // gh-879: Windows 10 (since 14931) has changed behavior for double-cell glyphs
424 // Now they are doubled (COMMON_LVB_LEADING_BYTE/COMMON_LVB_TRAILING_BYTE) even for UTF-8 codepage
425 if (!IsWin10())
426 bNewVal = false;
427 }
428 bDBCS_CP = bNewVal;
429 nLastCP = nCP;
430 }
431 }
432
433 return bDBCS_CP;
434}

Callers 3

CheckUnicodeFontFunction · 0.85
ReadConsoleOutputExFunction · 0.85

Calls 5

IsWinDBCSFunction · 0.85
IsWin10Function · 0.85
MakeOsVersionExFunction · 0.85
_VerifyVersionInfoFunction · 0.85
AreCpInfoLeadsFunction · 0.85

Tested by 1

CheckUnicodeFontFunction · 0.68