22#define NLSDIR "../../media/nls"
23#define LIBDIR "unicode.org/"
68 for(
i = 0;
i < 65536;
i++) {
82 for(
i = 0;
i < 65536;
i++) {
106 printf(
"Not enough memory for Unicode to Codepage table\n");
112 for(
i = 0;
i < 65536;
i++)
115 for(
i = 0;
i < 65536;
i++)
121 for(
i = 0;
i < 65536;
i++)
124 for(
i = 0;
i < 256;
i++)
141 WCHAR sub_table[256];
166 if(
fwrite(sub_table, 1,
sizeof(sub_table),
out) !=
sizeof(sub_table))
178 WORD wValue, number_of_lb_ranges, number_of_lb_subtables,
i;
183 printf(
"Could not create file \"%s\"\n",
name);
200 printf(
"Could not write to file \"%s\"\n",
name);
204 number_of_lb_ranges = 0;
205 number_of_lb_subtables = 0;
209 number_of_lb_ranges++;
227 wValue = (256 *
sizeof(
WORD) +
229 ((oemtable !=
NULL) ? (256 *
sizeof(
WORD)) : 0) +
231 ((number_of_lb_subtables != 0) ? 256 *
sizeof(
WORD) : 0) +
232 number_of_lb_subtables * 256 *
sizeof(
WORD) +
242 printf(
"Could not write to file \"%s\"\n",
name);
247 wValue = (oemtable !=
NULL) ? (256 *
sizeof(
WORD)) : 0;
254 printf(
"Could not write to file \"%s\"\n",
name);
260 fwrite(&number_of_lb_ranges, 1,
sizeof(number_of_lb_ranges),
out);
263 if(number_of_lb_ranges > 0) {
266 printf(
"Could not write to file \"%s\"\n",
name);
277 printf(
"Could not write to file \"%s\"\n",
name);
298 int lb_ranges, lb_range_started,
line;
300 printf(
"Loading translation table \"%s\"\n", table_name);
313 printf(
"Not enough memory for Codepage to Unicode table\n");
317 for(
n = 0;
n < 256;
n++)
320 for(
n = 256;
n < 65536;
n++)
331 lb_range_started = 0;
338 if(!*
p ||
p[0] ==
'#')
343 printf(
"Line %d: Entry 0x%06lX: File \"%s\" corrupted\n",
line,
n, table_name);
354 if(!*
p ||
p[0] ==
'#') {
360 printf(
"Line %d: Entry 0x%06lX unicode value: File \"%s\" corrupted\n",
line,
n, table_name);
366 while(*
p && *
p !=
'#')
p++;
368 if(*
p ==
'#' &&
strstr(
p,
"DBCS LEAD BYTE")) {
371 printf(
"Line %d: Entry 0x%04lX: Error: DBCS lead byte overflowed\n",
line,
n);
377 if(lb_range_started) {
384 lb_range_started = 1;
388 printf(
"Line %d: Error: could not start new lead byte range\n",
line);
393 lb_range_started = 0;
411 printf(
"Loading oem glyph table \"%s\"\n", table_name);
415 printf(
"Not enough memory for Codepage to Unicode table\n");
434 if(!*
p ||
p[0] ==
'#')
439 printf(
"Line %d: Entry 0x%06lX: File \"%s\" corrupted\n",
line,
value, table_name);
445 if(!*
p ||
p[0] ==
'#') {
452 printf(
"Line %d: Entry 0x%06lX unicode value: File \"%s\" corrupted\n",
line,
value, table_name);
460 if(!*
p ||
p[0] ==
'#' ||
p[0] ==
'-') {
467 printf(
"Line %d: Entry 0x%06lX oem value: File \"%s\" corrupted\n",
line,
value, table_name);
485 char nls_filename[256];
491 char *table_filename;
494 {37,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT",
"IBM EBCDIC US Canada"},
495 {424,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MISC/CP424.TXT",
"IBM EBCDIC Hebrew"},
496 {437,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT",
"OEM United States"},
497 {500,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT",
"IBM EBCDIC International"},
500 {737,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP737.TXT",
"OEM Greek 437G"},
501 {775,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP775.TXT",
"OEM Baltic"},
502 {850,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT",
"OEM Multilingual Latin 1"},
503 {852,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP852.TXT",
"OEM Slovak Latin 2"},
504 {855,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP855.TXT",
"OEM Cyrillic" },
505 {856,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MISC/CP856.TXT",
"Hebrew PC"},
506 {857,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP857.TXT",
"OEM Turkish"},
507 {860,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP860.TXT",
"OEM Portuguese"},
508 {861,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP861.TXT",
"OEM Icelandic"},
509 {862,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP862.TXT",
"OEM Hebrew"},
510 {863,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP863.TXT",
"OEM Canadian French"},
511 {864,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP864.TXT",
"OEM Arabic"},
512 {865,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP865.TXT",
"OEM Nordic"},
513 {866,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP866.TXT",
"OEM Russian"},
514 {869,
TRUE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP869.TXT",
"OEM Greek"},
516 {874,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/PC/CP874.TXT",
"ANSI/OEM Thai"},
517 {875,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP875.TXT",
"IBM EBCDIC Greek"},
518 {878,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MISC/KOI8-R.TXT",
"Russian KOI8"},
519 {932,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT",
"ANSI/OEM Japanese Shift-JIS"},
520 {936,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT",
"ANSI/OEM Simplified Chinese GBK"},
521 {949,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT",
"ANSI/OEM Korean Unified Hangul"},
522 {950,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT",
"ANSI/OEM Traditional Chinese Big5"},
523 {1006,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MISC/CP1006.TXT",
"IBM Arabic"},
524 {1026,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/EBCDIC/CP1026.TXT",
"IBM EBCDIC Latin 5 Turkish"},
525 {1250,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT",
"ANSI Eastern Europe"},
526 {1251,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT",
"ANSI Cyrillic"},
527 {1252,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT",
"ANSI Latin 1"},
528 {1253,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT",
"ANSI Greek"},
529 {1254,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT",
"ANSI Turkish"},
530 {1255,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT",
"ANSI Hebrew"},
531 {1256,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT",
"ANSI Arabic"},
532 {1257,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT",
"ANSI Baltic"},
533 {1258,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT",
"ANSI/OEM Viet Nam"},
534 {10000,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/ROMAN.TXT",
"Mac Roman"},
535 {10006,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/GREEK.TXT",
"Mac Greek"},
536 {10007,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/CYRILLIC.TXT",
"Mac Cyrillic"},
537 {10029,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/LATIN2.TXT",
"Mac Latin 2"},
538 {10079,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/ICELAND.TXT",
"Mac Icelandic"},
539 {10081,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MICSFT/MAC/TURKISH.TXT",
"Mac Turkish"},
566 {20871,
FALSE,
"ReactOS/IBMCP861.TXT",
"IBM EBCDIC Icelandic"},
568 {20866,
FALSE,
LIBDIR"MAPPINGS/VENDORS/MISC/KOI8-R.TXT",
"Russian KOI8"},
572 {28591,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-1.TXT",
"ISO 8859-1 Latin 1"},
573 {28592,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-2.TXT",
"ISO 8859-2 Eastern Europe"},
574 {28593,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-3.TXT",
"ISO 8859-3 Turkish"},
575 {28594,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-4.TXT",
"ISO 8859-4 Baltic"},
576 {28595,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-5.TXT",
"ISO 8859-5 Cyrillic"},
577 {28596,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-6.TXT",
"ISO 8859-6 Arabic"},
578 {28597,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-7.TXT",
"ISO 8859-7 Greek"},
579 {28598,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-8.TXT",
"ISO 8859-8 Hebrew"},
580 {28599,
FALSE,
LIBDIR"MAPPINGS/ISO8859/8859-9.TXT",
"ISO 8859-9 Latin 5"}
583 for(
i = 0;
i <
sizeof(pages)/
sizeof(pages[0]);
i++) {
586 printf(
"Could not load \"%s\" (%s)\n", pages[
i].table_filename, pages[
i].
comment);
593 printf(
"Could not load \"%s\" (%s)\n",
LIBDIR"MAPPINGS/VENDORS/MISC/IBMGRAPH.TXT",
"IBM OEM glyph table");
600 printf(
"Could not write \"%s\" (%s)\n", nls_filename, pages[
i].
comment);
617static WORD diffs[256];
618static int number_of_diffs;
631 WCHAR test_str[] =
L"This is an English text. \x0CF\x0EE-\x0F0\x0F3\x0F1\x0F1\x0EA\x0E8 \x0FF \x0EF\x0E8\x0F1\x0E0\x0F2\x0FC \x0F3\x0EC\x0E5\x0FE \x0ED\x0E5\x0EC\x0ED\x0EE\x0E6\x0EA\x0EE. 1234567890";
638 for(
i = 0;
i <
len + 1;
i++) {
675 printf(
"Not enough memory for to upper table\n");
681 printf(
"Not enough memory for to lower table\n");
687 printf(
"Could not open file \"%s\"\n", table_name);
707 while(*
p && *
p !=
';')
p++;
713 while(*
p && *
p !=
';')
p++;
719 while(*
p && *
p !=
';')
p++;
725 while(*
p && *
p !=
';')
p++;
731 while(*
p && *
p !=
';')
p++;
737 while(*
p && *
p !=
';')
p++;
743 while(*
p && *
p !=
';')
p++;
749 while(*
p && *
p !=
';')
p++;
755 while(*
p && *
p !=
';')
p++;
761 while(*
p && *
p !=
';')
p++;
767 while(*
p && *
p !=
';')
p++;
773 while(*
p && *
p !=
';')
p++;
784 while(*
p && *
p !=
';')
p++;
795 while(*
p && *
p !=
';')
p++;
801 while(*
p && *
p !=
';')
p++;
813static int find_diff(
WORD diff)
817 for(
i = 0;
i < number_of_diffs;
i++) {
837 printf(
"Could not add new subtable with diffs, storage is full\n");
858 printf(
"Could not add new subtable with offsets, storage is full\n");
871 WORD main_index[256];
872 WORD temp_subtable[16];
874 WORD *subtable_src, *subtable_dst;
882 for(high = 0; high < 256; high++) {
883 for(low4 = 0; low4 < 256; low4 += 16) {
886 temp_subtable[low4 >> 4] =
index;
890 main_index[high] =
index;
894 packed_table =
calloc(*packed_size_in_words,
sizeof(
WORD));
897 for(high = 0; high < 256; high++) {
898 packed_table[high] = 0x100 + main_index[high] * 16;
905 subtable_dst = packed_table + 0x100 +
index * 16;
908 for(low4 = 0; low4 < 16; low4++) {
928 WORD packed_size_in_words, offset_to_next_table_in_words;
943 offset_to_next_table_in_words = packed_size_in_words + 1;
951 offset_to_next_table_in_words = packed_size_in_words + 1;
char * strstr(char *String1, char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
_Out_opt_ UINT * code_page
static WORD * pack_table(WORD *table, WORD *packed_size_in_words)
static const WCHAR *const uprtable[256]
static WCHAR * Load_OEM2Unicode_Table(char *table_name, WCHAR *def_table, UINT cp, CPINFOEXA *cpi)
static void patch_codepage_info(CPINFOEXA *cpi)
static BOOL CreateCaseDiff(char *table_name)
static const WCHAR *const lwrtable[256]
static struct @5094 u2cp_alias[]
static WORD find_subtable_with_diffs(WORD *table, WORD *subtable)
static WCHAR * Load_CP2Unicode_Table(char *table_name, UINT cp, CPINFOEXA *cpi)
static void patch_aliases(void *u2cp, CPINFOEXA *cpi)
static BOOL create_nls_file(char *name, CPINFOEXA *cpi, WCHAR *table, WCHAR *oemtable)
static WORD number_of_subtables_with_offsets
static void test_packed_table(WCHAR *table)
static WORD number_of_subtables_with_diffs
static WORD find_subtable_with_offsets(WORD *subtable)
static WORD subtables_with_offsets[4096 *16]
static WORD * to_upper_org
static BOOL write_unicode2cp_table(FILE *out, CPINFOEXA *cpi, WCHAR *table)
int write_casemap_file(void)
static WORD * subtables_with_diffs[4096]
static BOOL write_lb_ranges(FILE *out, CPINFOEXA *cpi, WCHAR *table)
static WCHAR hyphen_aliases[]
static WORD * to_lower_org
static const FxOffsetAndName offsets[]
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLenum GLsizei GLsizei GLint GLint GLboolean packed
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
#define memcpy(s1, s2, n)
#define sprintf(buf, format,...)
#define comment(fmt, arg1)
BYTE DefaultChar[MAX_DEFAULTCHAR]
BYTE LeadByte[MAX_LEADBYTES]
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out