1 #include "xincs.h"
2 #include "fxver.h"
3 #include "fxdefs.h"
4 #include "FXArray.h"
5 #include "FXHash.h"
6 #include "FXStream.h"
7 #include "FXTextCodec.h"
8 #include "FXCP857Codec.h"
9 
10 namespace FX {
11 
12 FXIMPLEMENT(FXCP857Codec,FXTextCodec,NULL,0)
13 
14 
15 //// Created by codec tool on 03/25/2005 from: CP857.TXT ////
16 static const unsigned short forward_data[256]={
17    0,    1,    2,    3,    4,    5,    6,    7,    8,    9,    10,   11,   12,   13,   14,   15,
18    16,   17,   18,   19,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
19    32,   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
20    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
21    64,   65,   66,   67,   68,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,   79,
22    80,   81,   82,   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
23    96,   97,   98,   99,   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
24    112,  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,  126,  127,
25    199,  252,  233,  226,  228,  224,  229,  231,  234,  235,  232,  239,  238,  305,  196,  197,
26    201,  230,  198,  244,  246,  242,  251,  249,  304,  214,  220,  248,  163,  216,  350,  351,
27    225,  237,  243,  250,  241,  209,  286,  287,  191,  174,  172,  189,  188,  161,  171,  187,
28    9617, 9618, 9619, 9474, 9508, 193,  194,  192,  169,  9571, 9553, 9559, 9565, 162,  165,  9488,
29    9492, 9524, 9516, 9500, 9472, 9532, 227,  195,  9562, 9556, 9577, 9574, 9568, 9552, 9580, 164,
30    186,  170,  202,  203,  200,  65533, 205,  206,  207,  9496, 9484, 9608, 9604, 166,  204,  9600,
31    211,  223,  212,  210,  245,  213,  181,  65533, 215,  218,  219,  217,  236,  255,  175,  180,
32    173,  177,  65533, 190,  182,  167,  247,  184,  176,  168,  183,  185,  179,  178,  9632, 160,
33   };
34 
35 
36 static const unsigned char reverse_plane[17]={
37   0, 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
38   };
39 
40 static const unsigned char reverse_pages[74]={
41   0,  22, 22, 22, 22, 22, 22, 22, 22, 70, 22, 22, 22, 22, 22, 22,
42   22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
43   22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
44   22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
45   22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
46   };
47 
48 static const unsigned short reverse_block[134]={
49   0,   16,  32,  48,  64,  80,  96,  112, 128, 128, 144, 160, 176, 192, 208, 224,
50   128, 240, 128, 256, 128, 258, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
51   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
52   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
53   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
54   128, 128, 128, 128, 128, 128, 274, 290, 303, 316, 128, 332, 348, 128, 364, 379,
55   395, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
56   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
57   128, 128, 128, 128, 128, 128,
58   };
59 
60 static const unsigned char reverse_data[411]={
61    0,    1,    2,    3,    4,    5,    6,    7,    8,    9,    10,   11,   12,   13,   14,   15,
62    16,   17,   18,   19,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
63    32,   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
64    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
65    64,   65,   66,   67,   68,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,   79,
66    80,   81,   82,   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
67    96,   97,   98,   99,   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
68    112,  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,  126,  127,
69    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
70    255,  173,  189,  156,  207,  190,  221,  245,  249,  184,  209,  174,  170,  240,  169,  238,
71    248,  241,  253,  252,  239,  230,  244,  250,  247,  251,  208,  175,  172,  171,  243,  168,
72    183,  181,  182,  199,  142,  143,  146,  128,  212,  144,  210,  211,  222,  214,  215,  216,
73    26,   165,  227,  224,  226,  229,  153,  232,  157,  235,  233,  234,  154,  26,   26,   225,
74    133,  160,  131,  198,  132,  134,  145,  135,  138,  130,  136,  137,  236,  161,  140,  139,
75    26,   164,  149,  162,  147,  228,  148,  246,  155,  151,  163,  150,  129,  26,   26,   237,
76    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   166,  167,
77    152,  141,  26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
78    158,  159,  196,  26,   179,  26,   26,   26,   26,   26,   26,   26,   26,   26,   218,  26,
79    26,   26,   191,  26,   26,   26,   192,  26,   26,   26,   217,  26,   26,   26,   195,  26,
80    26,   26,   26,   180,  26,   26,   26,   26,   26,   26,   26,   194,  26,   26,   26,   26,
81    193,  26,   26,   26,   26,   26,   26,   26,   197,  26,   26,   26,   205,  186,  26,   26,
82    201,  26,   26,   187,  26,   26,   200,  26,   26,   188,  26,   26,   204,  26,   26,   185,
83    26,   26,   203,  26,   26,   202,  26,   26,   206,  26,   26,   26,   223,  26,   26,   26,
84    220,  26,   26,   26,   219,  26,   26,   26,   26,   26,   26,   26,   176,  177,  178,  26,
85    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   254,  26,   26,   26,   26,
86    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
87   };
88 
89 
mb2wc(FXwchar & wc,const FXchar * src,FXint nsrc) const90 FXint FXCP857Codec::mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const {
91   if(nsrc<1) return -1;
92   wc=forward_data[(FXuchar)src[0]];
93   return 1;
94   }
95 
96 
wc2mb(FXchar * dst,FXint ndst,FXwchar wc) const97 FXint FXCP857Codec::wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const {
98   if(ndst<1) return -1;
99   dst[0]=reverse_data[reverse_block[reverse_pages[reverse_plane[wc>>16]+((wc>>10)&63)]+((wc>>4)&63)]+(wc&15)];
100   return 1;
101   }
102 
mibEnum() const103 FXint FXCP857Codec::mibEnum() const {
104   return 2047;
105   }
106 
107 
name() const108 const FXchar* FXCP857Codec::name() const {
109   return "IBM857";
110   }
111 
112 
mimeName() const113 const FXchar* FXCP857Codec::mimeName() const {
114   return "IBM857";
115   }
116 
117 
aliases() const118 const FXchar* const* FXCP857Codec::aliases() const {
119   static const FXchar *const list[]={"microsoft-cp857","IBM857","cp857","857","csIBM857",NULL};
120   return list;
121   }
122 
123 }
124 
125