+/*
+ * @implemented
+ */
+VOID STDCALL
+RtlInitCodePageTable(IN PUSHORT TableBase,
+ OUT PCPTABLEINFO CodePageTable)
+{
+ PNLS_FILE_HEADER NlsFileHeader;
+ PUSHORT Ptr;
+ USHORT Offset;
+
+ DPRINT("RtlInitCodePageTable() called\n");
+
+ NlsFileHeader = (PNLS_FILE_HEADER)TableBase;
+
+ CodePageTable->CodePage = NlsFileHeader->CodePage;
+ CodePageTable->MaximumCharacterSize = NlsFileHeader->MaximumCharacterSize;
+ CodePageTable->DefaultChar = NlsFileHeader->DefaultChar;
+ CodePageTable->UniDefaultChar = NlsFileHeader->UniDefaultChar;
+ CodePageTable->TransDefaultChar = NlsFileHeader->TransDefaultChar;
+ CodePageTable->TransUniDefaultChar = NlsFileHeader->TransUniDefaultChar;
+
+ RtlCopyMemory(&CodePageTable->LeadByte,
+ &NlsFileHeader->LeadByte,
+ MAXIMUM_LEADBYTES);
+
+ /* Set Pointer to start of multi byte table */
+ Ptr = (PUSHORT)((ULONG_PTR)TableBase + 2 * NlsFileHeader->HeaderSize);
+
+ /* Get offset to the wide char table */
+ Offset = (USHORT)(*Ptr++) + NlsFileHeader->HeaderSize + 1;
+
+ /* Set pointer to the multi byte table */
+ CodePageTable->MultiByteTable = Ptr;
+
+ /* Skip ANSI and OEM table */
+ Ptr += 256;
+ if (*Ptr++)
+ Ptr += 256;
+
+ /* Set pointer to DBCS ranges */
+ CodePageTable->DBCSRanges = (PUSHORT)Ptr;
+
+ if (*Ptr > 0)
+ {
+ CodePageTable->DBCSCodePage = 1;
+ CodePageTable->DBCSOffsets = (PUSHORT)++Ptr;
+ }
+ else
+ {
+ CodePageTable->DBCSCodePage = 0;
+ CodePageTable->DBCSOffsets = 0;
+ }
+
+ CodePageTable->WideCharTable = (PVOID)((ULONG_PTR)TableBase + 2 * Offset);
+}
+
+
+VOID STDCALL
+RtlInitNlsTables(IN PUSHORT AnsiTableBase,
+ IN PUSHORT OemTableBase,
+ IN PUSHORT CaseTableBase,
+ OUT PNLSTABLEINFO NlsTable)
+{
+ DPRINT("RtlInitNlsTables()called\n");
+
+ RtlInitCodePageTable (AnsiTableBase,
+ &NlsTable->AnsiTableInfo);
+
+ RtlInitCodePageTable (OemTableBase,
+ &NlsTable->OemTableInfo);
+
+ NlsTable->UpperCaseTable = (PUSHORT)CaseTableBase + 2;
+ NlsTable->LowerCaseTable = (PUSHORT)CaseTableBase + *((PUSHORT)CaseTableBase + 1) + 2;
+}
+
+
+/*
+ * @unimplemented
+ */