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 "FXCP437Codec.h"
9 
10 namespace FX {
11 
12 FXIMPLEMENT(FXCP437Codec,FXTextCodec,NULL,0)
13 
14 
15 //// Created by codec tool on 03/25/2005 from: CP437.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,  236,  196,  197,
26    201,  230,  198,  244,  246,  242,  251,  249,  255,  214,  220,  162,  163,  165,  8359, 402,
27    225,  237,  243,  250,  241,  209,  170,  186,  191,  8976, 172,  189,  188,  161,  171,  187,
28    9617, 9618, 9619, 9474, 9508, 9569, 9570, 9558, 9557, 9571, 9553, 9559, 9565, 9564, 9563, 9488,
29    9492, 9524, 9516, 9500, 9472, 9532, 9566, 9567, 9562, 9556, 9577, 9574, 9568, 9552, 9580, 9575,
30    9576, 9572, 9573, 9561, 9560, 9554, 9555, 9579, 9578, 9496, 9484, 9608, 9604, 9612, 9616, 9600,
31    945,  223,  915,  960,  931,  963,  181,  964,  934,  920,  937,  948,  8734, 966,  949,  8745,
32    8801, 177,  8805, 8804, 8992, 8993, 247,  8776, 176,  8729, 183,  8730, 8319, 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,  61, 61, 61, 61, 61, 61, 61, 118,169,61, 61, 61, 61, 61, 61,
42   61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
43   61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
44   61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
45   61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
46   };
47 
48 static const unsigned short reverse_block[233]={
49   0,   16,  32,  48,  64,  80,  96,  112, 128, 128, 144, 160, 176, 191, 207, 223,
50   128, 128, 128, 128, 128, 128, 128, 128, 128, 239, 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, 252, 265, 280, 296, 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, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
55   128, 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, 303, 128, 128,
57   319, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
58   128, 128, 128, 128, 128, 128, 128, 327, 342, 128, 352, 128, 367, 128, 128, 128,
59   128, 128, 128, 128, 128, 128, 128, 383, 399, 128, 128, 128, 128, 128, 128, 128,
60   128, 128, 128, 128, 128, 128, 128, 128, 128, 415, 431, 444, 457, 128, 473, 489,
61   128, 505, 521, 537, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
62   128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
63   128, 128, 128, 128, 128, 128, 128, 128, 128,
64   };
65 
66 static const unsigned char reverse_data[553]={
67    0,    1,    2,    3,    4,    5,    6,    7,    8,    9,    10,   11,   12,   13,   14,   15,
68    16,   17,   18,   19,   20,   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,   31,
69    32,   33,   34,   35,   36,   37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
70    48,   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
71    64,   65,   66,   67,   68,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,   79,
72    80,   81,   82,   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
73    96,   97,   98,   99,   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
74    112,  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,  126,  127,
75    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
76    255,  173,  155,  156,  26,   157,  26,   26,   26,   26,   166,  174,  170,  26,   26,   26,
77    248,  241,  253,  26,   26,   230,  26,   250,  26,   26,   167,  175,  172,  171,  26,   168,
78    26,   26,   26,   26,   142,  143,  146,  128,  26,   144,  26,   26,   26,   26,   26,   26,
79    165,  26,   26,   26,   26,   153,  26,   26,   26,   26,   26,   154,  26,   26,   225,  133,
80    160,  131,  26,   132,  134,  145,  135,  138,  130,  136,  137,  141,  161,  140,  139,  26,
81    164,  149,  162,  147,  26,   148,  246,  26,   151,  163,  150,  129,  26,   26,   152,  26,
82    26,   159,  26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   226,
83    26,   26,   26,   26,   233,  26,   26,   26,   26,   26,   26,   26,   228,  26,   26,   232,
84    26,   26,   234,  26,   26,   26,   26,   26,   26,   224,  26,   26,   235,  238,  26,   26,
85    26,   26,   26,   26,   26,   26,   26,   26,   227,  26,   26,   229,  231,  26,   237,  26,
86    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   252,  26,
87    26,   26,   26,   26,   26,   26,   158,  26,   26,   26,   26,   26,   26,   26,   26,   26,
88    249,  251,  26,   26,   26,   236,  26,   26,   26,   26,   26,   26,   26,   26,   26,   239,
89    26,   26,   26,   26,   26,   26,   26,   26,   247,  26,   26,   26,   26,   26,   26,   26,
90    240,  26,   26,   243,  242,  26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   169,
91    26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   244,
92    245,  26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   26,   196,
93    26,   179,  26,   26,   26,   26,   26,   26,   26,   26,   26,   218,  26,   26,   26,   191,
94    26,   26,   26,   192,  26,   26,   26,   217,  26,   26,   26,   195,  26,   26,   26,   26,
95    180,  26,   26,   26,   26,   26,   26,   26,   194,  26,   26,   26,   26,   193,  26,   26,
96    26,   26,   26,   26,   26,   197,  26,   26,   26,   205,  186,  213,  214,  201,  184,  183,
97    187,  212,  211,  200,  190,  189,  188,  198,  199,  204,  181,  182,  185,  209,  210,  203,
98    207,  208,  202,  216,  215,  206,  26,   26,   26,   223,  26,   26,   26,   220,  26,   26,
99    26,   219,  26,   26,   26,   221,  26,   26,   26,   222,  176,  177,  178,  26,   26,   26,
100    26,   26,   26,   26,   26,   26,   26,   26,   26,   254,  26,   26,   26,   26,   26,   26,
101    26,   26,   26,   26,   26,   26,   26,   26,   26,
102   };
103 
104 
mb2wc(FXwchar & wc,const FXchar * src,FXint nsrc) const105 FXint FXCP437Codec::mb2wc(FXwchar& wc,const FXchar* src,FXint nsrc) const {
106   if(nsrc<1) return -1;
107   wc=forward_data[(FXuchar)src[0]];
108   return 1;
109   }
110 
111 
wc2mb(FXchar * dst,FXint ndst,FXwchar wc) const112 FXint FXCP437Codec::wc2mb(FXchar* dst,FXint ndst,FXwchar wc) const {
113   if(ndst<1) return -1;
114   dst[0]=reverse_data[reverse_block[reverse_pages[reverse_plane[wc>>16]+((wc>>10)&63)]+((wc>>4)&63)]+(wc&15)];
115   return 1;
116   }
117 
mibEnum() const118 FXint FXCP437Codec::mibEnum() const {
119   return 2011;
120   }
121 
122 
name() const123 const FXchar* FXCP437Codec::name() const {
124   return "IBM437";
125   }
126 
127 
mimeName() const128 const FXchar* FXCP437Codec::mimeName() const {
129   return "IBM437";
130   }
131 
132 
aliases() const133 const FXchar* const* FXCP437Codec::aliases() const {
134   static const FXchar *const list[]={"microsoft-cp437","IBM437","cp437","csPC8CodePage437",NULL};
135   return list;
136   }
137 
138 }
139 
140