RtlInitCodePageTable

VOID __stdcall RtlInitCodePageTable(UINT16 *TableBase, _CPTABLEINFO *CodePageTable){
  USHORT *v2; 
  USHORT v4; 
  __int64 v5; 
  UINT16 v6; 
  unsigned __int16 v7; 
  UINT16 *v8; 
  USHORT *v9; 
  USHORT v10; 

  v2 = 0i64;
  if( !TableBase || (v4 = TableBase[1], v4 == 0xFDE9) )
  {
    *(_DWORD *)&CodePageTable->CodePage = 327145;
    *(_DWORD *)&CodePageTable->DefaultChar = -196545;
    *(_DWORD *)&CodePageTable->TransDefaultChar = 4128831;
    CodePageTable->DBCSCodePage = 0;
    CodePageTable->MultiByteTable = 0i64;
    CodePageTable->DBCSRanges = 0i64;
    CodePageTable->DBCSOffsets = 0i64;
  }
  else
  {
    v5 = *TableBase;
    v6 = TableBase[v5];
    CodePageTable->CodePage = v4;
    v7 = v5 + v6;
    CodePageTable->MaximumCharacterSize = TableBase[2];
    CodePageTable->DefaultChar = TableBase[3];
    CodePageTable->UniDefaultChar = TableBase[4];
    CodePageTable->TransDefaultChar = TableBase[5];
    CodePageTable->TransUniDefaultChar = TableBase[6];
    *(_QWORD *)CodePageTable->LeadByte = *(_QWORD *)(TableBase + 7);
    *(_DWORD *)&CodePageTable->LeadByte[8] = *(_DWORD *)(TableBase + 11);
    v8 = &TableBase[v5 + 1];
    CodePageTable->MultiByteTable = v8;
    v9 = (UINT16 *)((char *)v8 + (v8[256] != 0 ? 514i64 : 2i64) + 512);
    CodePageTable->DBCSRanges = v9;
    if( *v9 )
    {
      v10 = 1;
      v2 = v9 + 1;
    }
    else
    {
      v10 = 0;
    }
    CodePageTable->DBCSOffsets = v2;
    CodePageTable->DBCSCodePage = v10;
    v2 = &TableBase[v7 + 1];
  }
  CodePageTable->WideCharTable = v2;
}

Referenced by:

RtlInitNlsTables