--- magicpoint-1.13a/print.c.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/print.c 2009-12-08 03:25:27 +0300 @@ -302,16 +302,130 @@ static const char *latin2def = " /cacute /ccedilla /ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron\n" " /dbar /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide /rcaron /uring\n" " /uacute /uhungarumlaut /udieresis /yacute /tcedilla /dotaccent] /isolatin2encoding exch def\n"; +static const char *koi8rdef = +"[\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n" +"/parenleft /parenright /asterisk /plus /comma /minus /period /slash\n" +"/zero /one /two /three /four /five /six /seven\n" +"/eight /nine /colon /semicolon /less /equal /greater /question\n" +"/at /A /B /C /D /E /F /G\n" +"/H /I /J /K /L /M /N /O\n" +"/P /Q /R /S /T /U /V /W\n" +"/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n" +"/grave /a /b /c /d /e /f /g\n" +"/h /i /j /k /l /m /n /o\n" +"/p /q /r /s /t /u /v /w\n" +"/x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n" +"/SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000\n" +"/SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock\n" +"/ltshade /shade /dkshade /integraltp /filledbox /bullet /radical /approxequal\n" +"/lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide\n" +"/SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000\n" +"/SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000\n" +"/SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000\n" +"/SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright\n" +"/afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068\n" +"/afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080\n" +"/afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067\n" +"/afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092\n" +"/afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020\n" +"/afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032\n" +"/afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019\n" +"/afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044\n" +"] /koi8rencoding exch def\n"; + +static const char *koi8udef = +"[\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n" +"/parenleft /parenright /asterisk /plus /comma /minus /period /slash\n" +"/zero /one /two /three /four /five /six /seven\n" +"/eight /nine /colon /semicolon /less /equal /greater /question\n" +"/at /A /B /C /D /E /F /G\n" +"/H /I /J /K /L /M /N /O\n" +"/P /Q /R /S /T /U /V /W\n" +"/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n" +"/grave /a /b /c /d /e /f /g\n" +"/h /i /j /k /l /m /n /o\n" +"/p /q /r /s /t /u /v /w\n" +"/x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n" +"/SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000\n" +"/SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock\n" +"/ltshade /shade /dkshade /integraltp /filledbox /bullet /radical /approxequal\n" +"/lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide\n" +"/SF430000 /SF240000 /SF510000 /afii10071 /afii10101 /SF390000 /afii10103 /afii10104\n" +"/SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /afii10098 /SF260000 /SF360000\n" +"/SF370000 /SF420000 /SF190000 /afii10023 /afii10053 /SF230000 /afii10055 /afii10056\n" +"/SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /afii10050 /SF440000 /copyright\n" +"/afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068\n" +"/afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080\n" +"/afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067\n" +"/afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092\n" +"/afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020\n" +"/afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032\n" +"/afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019\n" +"/afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044\n" +"] /koi8uencoding exch def\n"; + +static const char *cp1251def = +"[\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n" +"/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n" +"/parenleft /parenright /asterisk /plus /comma /minus /period /slash\n" +"/zero /one /two /three /four /five /six /seven\n" +"/eight /nine /colon /semicolon /less /equal /greater /question\n" +"/at /A /B /C /D /E /F /G\n" +"/H /I /J /K /L /M /N /O\n" +"/P /Q /R /S /T /U /V /W\n" +"/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n" +"/grave /a /b /c /d /e /f /g\n" +"/h /i /j /k /l /m /n /o\n" +"/p /q /r /s /t /u /v /w\n" +"/x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n" +"/afii10051 /afii10052 /quotesinglbase /afii10100 /quotedblbase /ellipsis /dagger /daggerdbl\n" +"/Euro /perthousand /afii10058 /guilsinglleft /afii10059 /afii10061 /afii10060 /afii10145\n" +"/afii10099 /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash\n" +"/.notdef /trademark /afii10106 /guilsinglright /afii10107 /afii10109 /afii10108 /afii10193\n" +"/space /afii10062 /afii10110 /afii10057 /currency /afii10050 /brokenbar /section\n" +"/afii10023 /copyright /afii10053 /guillemotleft /logicalnot /hyphen /registered /afii10056\n" +"/degree /plusminus /afii10055 /afii10103 /afii10098 /mu /paragraph /periodcentered\n" +"/afii10071 /afii61352 /afii10101 /guillemotright /afii10105 /afii10054 /afii10102 /afii10104\n" +"/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025\n" +"/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033\n" +"/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041\n" +"/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049\n" +"/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073\n" +"/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081\n" +"/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089\n" +"/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097\n" +"] /cp1251encoding exch def\n"; + static struct encoding { char *name; char *defstr; } encodings[] = { { "iso-8859-1", "isolatin1encoding", }, { "latin1", "isolatin1encoding", }, { "iso-8859-2", "isolatin2encoding", }, { "latin2", "isolatin2encoding", }, + { "koi8r", "koi8rencoding", }, + { "koi8-r", "koi8rencoding", }, + { "koi8u", "koi8uencoding", }, + { "koi8-u", "koi8uencoding", }, + { "cp1251", "cp1251encoding", }, + { "microsoft-cp1251", "cp1251encoding", }, { NULL, NULL, }, }; struct encoding *encoding = NULL; @@ -762,10 +876,16 @@ print_init() /* emit character encoding definition, if necessary */ if (encoding && strcmp(encoding->defstr, "isolatin1encoding") == 0) fprintf(fp, "%s", latin1def); - if (encoding && strcmp(encoding->defstr, "isolatin2encoding") == 0) + else if (encoding && strcmp(encoding->defstr, "isolatin2encoding") == 0) fprintf(fp, "%s", latin2def); + else if (encoding && strcmp(encoding->defstr, "koi8rencoding") == 0) + fprintf(fp, "%s", koi8rdef); + else if (encoding && strcmp(encoding->defstr, "koi8uencoding") == 0) + fprintf(fp, "%s", koi8udef); + else if (encoding && strcmp(encoding->defstr, "cp1251encoding") == 0) + fprintf(fp, "%s", cp1251def); } static void print_pageinit(page) @@ -2409,9 +2529,9 @@ main(argc, argv) case 'e': for (encoding = &encodings[0]; encoding->name; encoding++) { - if (strcmp(encoding->name, optarg) == 0) + if (strcasecmp(encoding->name, optarg) == 0) break; } if (!encoding->name) { fprintf(stderr, "unknown encoding %s\n", optarg); --- magicpoint-1.13a/draw.c.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/draw.c 2009-12-08 03:25:27 +0300 @@ -654,9 +654,9 @@ process_direc(state, seenpause) #endif /*VFLIB*/ #ifdef FREETYPE case CTL_TFONT: - tfc_setfont(cp->ctc2_value1, 0, cp->ctc2_value2); + tfc_setfont(cp->ctc2_value1, 0, cp->ctc2_value2 ?: mgp_charset); break; case CTL_TMFONT: tfc_setfont(cp->ctc_value, 1, NULL); @@ -1283,8 +1283,11 @@ draw_string(state, data) "iso8859-1", /* ESC - A */ "iso8859-2", /* ESC - B */ "iso8859-3", /* ESC - C */ "iso8859-4", /* ESC - D */ + "koi8-r", /* ESC - E */ + "microsoft-cp1251", /* ESC - F */ + "koi8-u", /* ESC - G */ }; #define RTAB96_MAX (sizeof(rtab96)/sizeof(rtab96[0])) static char *rtab9494[] = { "jisx0208.1978-*", /* ESC $ @ or ESC $ ( @ */ @@ -1344,9 +1347,9 @@ draw_string(state, data) continue; } if (!registry && isspace(p[0])) { - draw_fragment(state, p, 1, registry, 0); + draw_fragment(state, p, 1, registry ?: mgp_charset, 0); p++; continue; } @@ -1376,9 +1379,9 @@ draw_string(state, data) q++; } } - q = draw_fragment(state, p, q - p, registry, charset16); + q = draw_fragment(state, p, q - p, registry ?: mgp_charset, charset16); p = q; } } @@ -1403,9 +1406,9 @@ draw_fragment(state, p, len, registry, c char *p0; #ifdef USE_XFT2 if (!(mgp_flag & FL_NOXFT)){ - p0 = xft_draw_fragment(state, p, len, registry, charset16); + p0 = xft_draw_fragment(state, p, len, registry ?: mgp_charset, charset16); if (p0) return p0; } #endif @@ -5116,13 +5119,19 @@ get_regid(registry) char *registry; { char *p; - if (!registry || registry[0] == '\0') return 0; + if (!registry || !*registry) return 0; if (strlen(registry) == 9 && !strncmp("iso8859-", registry, 8) && registry[8] >= '1' && registry[8] <= '4') { p = registry + 8; return atoi(p) -1; + } else if (!strcmp("koi8-r",registry)) { + return 4; + } else if (!strcmp("microsoft-cp1251",registry)) { + return 5; + } else if (!strcmp("koi8-u",registry)) { + return 6; } else return -1; } --- magicpoint-1.13a/mgp2ps.man.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/mgp2ps.man 2009-12-08 03:28:36 +0300 @@ -105,9 +105,9 @@ specifies length of the margin area arou .It Fl t Use truetypefont instead of psfont (ASCII font only). .It Fl e Specify encodings. At this moment, "iso-8859-1", "latin1", "iso-8859-2" -"and latin-2" are supported as encodings. +"latin2", "koi8-r", "koi8-u" and "cp1251" are supported as encodings. .It Fl m emulate "%pause" directive. .It Fl X Ar engine Do not use rendering engine, specified by --- magicpoint-1.13a/grammar.y.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/grammar.y 2009-12-08 03:25:27 +0300 @@ -931,9 +931,9 @@ cmd: KW_NOOP { $$ = gen_void(CTL_NOOP) $$ = gen_str2(CTL_PSFONT, $2, "iso8859-1"); } | KW_TFONT STRorID { #ifdef FREETYPE - $$ = gen_str2(CTL_TFONT, $2, "iso8859-1"); + $$ = gen_str2(CTL_TFONT, $2, mgp_charset ? mgp_charset : "iso8859-1"); #else $$ = gen_str2(CTL_NOOP, $2, "iso8859-1"); yywarn("directive \"tfont\" not supported " "in this configuration"); --- magicpoint-1.13a/mgp.c.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/mgp.c 2009-12-08 03:25:27 +0300 @@ -82,9 +82,9 @@ char *freetypefont0 = NULL; /* font name char *freetypemfont0 = NULL; /* font name to be used as a last resort */ int unicode_map[65536]; #endif -int latin_unicode_map[3][256]; /* currently we have iso8859-2-4 map */ +int latin_unicode_map[6][256]; /* currently we have iso8859-2-4 map */ static char *tsfile = NULL; static char *dumpdir = NULL; --- magicpoint-1.13a/tfont.c.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/tfont.c 2009-12-08 03:26:49 +0300 @@ -47,9 +47,9 @@ static TT_Glyph_Metrics metrics; static TT_Error error; static TT_Engine engine; static XImage *xim; -static char *tf_curname[4]; /* contains iso8859-[2-4] fonts */ +static char *tf_curname[7]; /* contains iso8859-[2-4] and koi8-r, cp1251, koi8-u fonts */ static char *tf_mcurname = NULL; static int tfcinitdone; static int tfcachecnt; static struct tfont tfclru; @@ -217,8 +217,10 @@ tfc_setfont(name, charset16, registry) if (!tfcinitdone) tfc_init(); + if (!registry || !*registry) registry = mgp_charset; + if (TFFONT_NUM <= tffontcnt) { fprintf(stderr, "internal error: " "too many fonts opened (increase TFFONT_NUM)\n"); cleanup(-1); @@ -482,9 +484,9 @@ tfc_alloc(code, size, fontname, registry unicode = code; #endif if (!unicode) return NULL; - if ((error = LoadTrueTypeChar(unicode, 0))) { + if ((error = LoadTrueTypeChar(unicode, 1))) { fprintf(stderr, "LoadTrueTypeChar fail %d\n", (int)error); fprintf(stderr, "fontfile: \"%s\" char: '%c' (0x%04x)\n", tfloadedfont[tfcuridx], isprint(unicode) ? unicode : '?', @@ -588,10 +590,10 @@ CharToUnicode(code, registry) if (code > 256) code = unicode_map[code]; #endif /* FREETYPE_CHARSET16 */ -#if 1 /* latin2-4 encoding processing */ - if (code > 0xa0 && code < 256) { +#if 1 /* latin2-4 encoding processing and cyrillic encodings */ + if (code > 0x7f && code < 256) { int tempregid; if (registry) tempregid = get_regid(registry) -1; else { --- magicpoint-1.13a/unimap.c.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/unimap.c 2009-12-08 03:25:27 +0300 @@ -3480,10 +3480,261 @@ unicode_map[0x7426] = 0x7199; } #endif /* FREETYPE_CHARSET16 */ +static unsigned int koi8_r_charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x2500, 0x2502, 0x250c, 0x2510, + 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, + 0x2584, 0x2588, 0x258c, 0x2590, + /* 0x90*/ + 0x2591, 0x2592, 0x2593, 0x2320, + 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, + 0x00b0, 0x00b2, 0x00b7, 0x00f7, + /* 0xa0*/ + 0x2550, 0x2551, 0x2552, 0x0451, + 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255a, + 0x255b, 0x255c, 0x255d, 0x255e, + /* 0xb0*/ + 0x255f, 0x2560, 0x2561, 0x0401, + 0x2562, 0x2563, 0x2564, 0x2565, + 0x2566, 0x2567, 0x2568, 0x2569, + 0x256a, 0x256b, 0x256c, 0x00a9, + /* 0xc0*/ + 0x044e, 0x0430, 0x0431, 0x0446, + 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, + 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0*/ + 0x043f, 0x044f, 0x0440, 0x0441, + 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, + 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0*/ + 0x042e, 0x0410, 0x0411, 0x0426, + 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, + 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0*/ + 0x041f, 0x042f, 0x0420, 0x0421, + 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, + 0x042d, 0x0429, 0x0427, 0x042a, +}; + + +static unsigned int microsoft_cp1251_charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0402, 0x0403, 0x201a, 0x0453, + 0x201e, 0x2026, 0x2020, 0x2021, + 0x20ac, 0x2030, 0x0409, 0x2039, + 0x040a, 0x040c, 0x040b, 0x040f, + /* 0x90*/ + 0x0452, 0x2018, 0x2019, 0x201c, + 0x201d, 0x2022, 0x2013, 0x2014, + 0x0000, 0x2122, 0x0459, 0x203a, + 0x045a, 0x045c, 0x045b, 0x045f, + /* 0xa0*/ + 0x00a0, 0x040e, 0x045e, 0x0408, + 0x00a4, 0x0490, 0x00a6, 0x00a7, + 0x0401, 0x00a9, 0x0404, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x0407, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x0406, 0x0456, + 0x0491, 0x00b5, 0x00b6, 0x00b7, + 0x0451, 0x2116, 0x0454, 0x00bb, + 0x0458, 0x0405, 0x0455, 0x0457, + /* 0xc0*/ + 0x0410, 0x0411, 0x0412, 0x0413, + 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, + 0x041c, 0x041d, 0x041e, 0x041f, + /* 0xd0*/ + 0x0420, 0x0421, 0x0422, 0x0423, + 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, + 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xe0*/ + 0x0430, 0x0431, 0x0432, 0x0433, + 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, + 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xf0*/ + 0x0440, 0x0441, 0x0442, 0x0443, + 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, + 0x044c, 0x044d, 0x044e, 0x044f, +}; + +static unsigned int koi8_u_charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x2500, 0x2502, 0x250c, 0x2510, + 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, + 0x2584, 0x2588, 0x258c, 0x2590, + /* 0x90*/ + 0x2591, 0x2592, 0x2593, 0x2320, + 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, + 0x00b0, 0x00b2, 0x00b7, 0x00f7, + /* 0xa0*/ + 0x2550, 0x2551, 0x2552, 0x0451, + 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255a, + 0x255b, 0x0491, 0x255d, 0x255e, + /* 0xb0*/ + 0x255f, 0x2560, 0x2561, 0x0401, + 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, + 0x256a, 0x0490, 0x256c, 0x00a9, + /* 0xc0*/ + 0x044e, 0x0430, 0x0431, 0x0446, + 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, + 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0*/ + 0x043f, 0x044f, 0x0440, 0x0441, + 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, + 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0*/ + 0x042e, 0x0410, 0x0411, 0x0426, + 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, + 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0*/ + 0x041f, 0x042f, 0x0420, 0x0421, + 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, + 0x042d, 0x0429, 0x0427, 0x042a, +}; + void latin_unicode_map_init(){ +unsigned i; latin_unicode_map[0][0xA1] = 0x0104; latin_unicode_map[0][0xA2] = 0x02D8; latin_unicode_map[0][0xA3] = 0x0141; latin_unicode_map[0][0xA5] = 0x013D; latin_unicode_map[0][0xA6] = 0x015A; latin_unicode_map[0][0xA9] = 0x0160; @@ -3555,5 +3806,9 @@ latin_unicode_map[2][0xEF] = 0x012B; lat latin_unicode_map[2][0xF1] = 0x0146; latin_unicode_map[2][0xF2] = 0x014D; latin_unicode_map[2][0xF3] = 0x0137; latin_unicode_map[2][0xF9] = 0x0173; latin_unicode_map[2][0xFD] = 0x0169; latin_unicode_map[2][0xFE] = 0x016B; latin_unicode_map[2][0xFF] = 0x02D9; + +for(i=0x80; i < 256; i++) latin_unicode_map[3][i]=koi8_r_charset2uni[i]; +for(i=0x80; i < 256; i++) latin_unicode_map[4][i]=microsoft_cp1251_charset2uni[i]; +for(i=0x80; i < 256; i++) latin_unicode_map[5][i]=koi8_u_charset2uni[i]; } --- magicpoint-1.13a/mgp.h.fix3 2009-12-08 03:25:26 +0300 +++ magicpoint-1.13a/mgp.h 2009-12-08 03:25:27 +0300 @@ -708,9 +708,9 @@ extern char *freetypefontdir; extern char *freetypefont0; /* font name to be used as a last resort */ extern char *freetypemfont0; /* font name to be used as a last resort */ extern int unicode_map[65536]; #endif -extern int latin_unicode_map[3][256]; +extern int latin_unicode_map[6][256]; #ifdef TTY_KEYINPUT extern volatile int ttykey_enable; #endif extern char *back_clname;