[TXT2NLS] TransUniDefaultChar has to be received from WideCharTable. TransDefaultChar...
[reactos.git] / rosapps / applications / devutils / txt2nls / nls.c
index 550e04c..02d84ba 100644 (file)
@@ -131,6 +131,21 @@ nls_from_txt(const char *txt_file_path, const char *nls_file_path)
     /* GLYPHTABLE optionally. We do not leave if it is absent */
     glyph_table = txt_get_glyph_table(txt_file_path, header.UniDefaultChar);
 
     /* GLYPHTABLE optionally. We do not leave if it is absent */
     glyph_table = txt_get_glyph_table(txt_file_path, header.UniDefaultChar);
 
+    if (is_dbcs)
+    {
+        /* DBCS codepage */
+        uint16_t *table = (uint16_t*)wc_table;
+        header.TransUniDefaultChar = table[header.UniDefaultChar];
+        /* TODO: TransDefaultChar for DBCS codepages */
+    }
+    else
+    {
+        /* SBCS codepage */
+        uint8_t *table = (uint8_t*)wc_table;
+        header.TransUniDefaultChar = table[header.UniDefaultChar];
+        header.TransDefaultChar = mb_table[LOBYTE(header.DefaultChar)];
+    }
+
 #ifdef _NLS_DEBUG_PRINT
     nls_print_header(&header);
     nls_print_mb_table(mb_table, header.UniDefaultChar);
 #ifdef _NLS_DEBUG_PRINT
     nls_print_header(&header);
     nls_print_mb_table(mb_table, header.UniDefaultChar);
@@ -178,7 +193,7 @@ nls_from_txt(const char *txt_file_path, const char *nls_file_path)
     }
 
     /* OEM glyph table size in words */
     }
 
     /* OEM glyph table size in words */
-    size = (glyph_table ? (256 * sizeof(uint16_t)) : 0);
+    size = (glyph_table ? 256 : 0);
 
     if (fwrite(&size, 1, sizeof(size), file) != sizeof(size))
     {
 
     if (fwrite(&size, 1, sizeof(size), file) != sizeof(size))
     {
@@ -213,7 +228,7 @@ nls_from_txt(const char *txt_file_path, const char *nls_file_path)
     }
 
     /* Write wide char table */
     }
 
     /* Write wide char table */
-    if (fwrite(wc_table, 1, (65535 * header.MaximumCharacterSize), file) != (65535 * header.MaximumCharacterSize))
+    if (fwrite(wc_table, 1, (65536 * header.MaximumCharacterSize), file) != (65536 * header.MaximumCharacterSize))
     {
         printf("Unable to write NLS file.\n");
         goto Cleanup;
     {
         printf("Unable to write NLS file.\n");
         goto Cleanup;