00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "ace/Codeset_IBM1047.h"
00021
00022 #if defined(ACE_MVS)
00023
00024 ACE_RCSID (ace,
00025 Codeset_IBM1047,
00026 "Codeset_IBM1047.cpp,v 4.9 2005/10/28 16:14:51 ossama Exp")
00027
00028
00029
00030 namespace
00031 {
00032 char const to_IBM1047[] =
00033 {
00034 "\x00\x01\x02\x03\x37\x2D\x2E\x2F\x16\x05\x25\x0B\x0C\x0D\x0E\x0F"
00035 "\x10\x11\x12\x13\x3C\x3D\x32\x26\x18\x19\x3F\x27\x22\x1D\x35\x1F"
00036 "\x40\x5A\x7F\x7B\x5B\x6C\x50\x7D\x4D\x5D\x5C\x4E\x6B\x60\x4B\x61"
00037 "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\x7A\x5E\x4C\x7E\x6E\x6F"
00038 "\x7C\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xD1\xD2\xD3\xD4\xD5\xD6"
00039 "\xD7\xD8\xD9\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xAD\xE0\xBD\x5F\x6D"
00040 "\x79\x81\x82\x83\x84\x85\x86\x87\x88\x89\x91\x92\x93\x94\x95\x96"
00041 "\x97\x98\x99\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xC0\x4F\xD0\xA1\x07"
00042 "\x43\x20\x21\x1C\x23\xEB\x24\x9B\x71\x28\x38\x49\x90\xBA\xEC\xDF"
00043 "\x45\x29\x2A\x9D\x72\x2B\x8A\x9A\x67\x56\x64\x4A\x53\x68\x59\x46"
00044 "\xEA\xDA\x2C\xDE\x8B\x55\x41\xFE\x58\x51\x52\x48\x69\xDB\x8E\x8D"
00045 "\x73\x74\x75\xFA\x15\xB0\xB1\xB3\xB4\xB5\x6A\xB7\xB8\xB9\xCC\xBC"
00046 "\xAB\x3E\x3B\x0A\xBF\x8F\x3A\x14\xA0\x17\xCB\xCA\x1A\x1B\x9C\x04"
00047 "\x34\xEF\x1E\x06\x08\x09\x77\x70\xBE\xBB\xAC\x54\x63\x65\x66\x62"
00048 "\x30\x42\x47\x57\xEE\x33\xB6\xE1\xCD\xED\x36\x44\xCE\xCF\x31\xAA"
00049 "\xFC\x9E\xAE\x8C\xDD\xDC\x39\xFB\x80\xAF\xFD\x78\x76\xB2\x9F\xFF"
00050 };
00051
00052 char const from_IBM1047[] =
00053 {
00054 "\x00\x01\x02\x03\xCF\x09\xD3\x7F\xD4\xD5\xC3\x0B\x0C\x0D\x0E\x0F"
00055 "\x10\x11\x12\x13\xC7\xB4\x08\xC9\x18\x19\xCC\xCD\x83\x1D\xD2\x1F"
00056 "\x81\x82\x1C\x84\x86\x0A\x17\x1B\x89\x91\x92\x95\xA2\x05\x06\x07"
00057 "\x20\xEE\x16\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xC1\x1A"
00058 "\x20\xA6\xE1\x80\xEB\x90\x9F\xE2\xAB\x8B\x9B\x2E\x3C\x28\x2B\x7C"
00059 "\x26\xA9\xAA\x9C\xDB\xA5\x99\xE3\xA8\x9E\x21\x24\x2A\x29\x3B\x5E"
00060 "\x2D\x2F\xDF\xDC\x9A\xDD\xDE\x98\x9D\xAC\xBA\x2C\x25\x5F\x3E\x3F"
00061 "\xD7\x88\x94\xB0\xB1\xB2\xFC\xD6\xFB\x60\x3A\x23\x40\x27\x3D\x22"
00062 "\xF8\x61\x62\x63\x64\x65\x66\x67\x68\x69\x96\xA4\xF3\xAF\xAE\xC5"
00063 "\x8C\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x97\x87\xCE\x93\xF1\xFE"
00064 "\xC8\x7E\x73\x74\x75\x76\x77\x78\x79\x7A\xEF\xC0\xDA\x5B\xF2\xF9"
00065 "\xB5\xB6\xFD\xB7\xB8\xB9\xE6\xBB\xBC\xBD\x8D\xD9\xBF\x5D\xD8\xC4"
00066 "\x7B\x41\x42\x43\x44\x45\x46\x47\x48\x49\xCB\xCA\xBE\xE8\xEC\xED"
00067 "\x7D\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\xA1\xAD\xF5\xF4\xA3\x8F"
00068 "\x5C\xE7\x53\x54\x55\x56\x57\x58\x59\x5A\xA0\x85\x8E\xE9\xE4\xD1"
00069 "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\xB3\xF7\xF0\xFA\xA7\xFF"
00070 };
00071 }
00072
00073 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00074
00075 ACE_IBM1047_ISO8859::ACE_IBM1047_ISO8859 (void)
00076 {
00077 }
00078
00079 ACE_IBM1047_ISO8859::~ACE_IBM1047_ISO8859 (void)
00080 {
00081 }
00082
00083 ACE_CDR::ULong
00084 ACE_IBM1047_ISO8859::ncs ()
00085 {
00086 return 0x10020417;
00087 }
00088
00089 ACE_CDR::ULong
00090 ACE_IBM1047_ISO8859::tcs ()
00091 {
00092 return 0x00010001;
00093 }
00094
00095 ACE_CDR::Boolean
00096 ACE_IBM1047_ISO8859::read_char (ACE_InputCDR &in,
00097 ACE_CDR::Char &x)
00098 {
00099 if (this->read_1 (in, reinterpret_cast<ACE_CDR::Octet*> (&x)))
00100 {
00101 x = to_IBM1047[x];
00102 return 1;
00103 }
00104 return 0;
00105 }
00106
00107 ACE_CDR::Boolean
00108 ACE_IBM1047_ISO8859::read_string (ACE_InputCDR& in,
00109 ACE_CDR::Char *& x)
00110 {
00111 ACE_CDR::ULong len;
00112
00113 in.read_ulong (len);
00114
00115 if (len > 0)
00116 {
00117 ACE_NEW_RETURN (x,
00118 ACE_CDR::Char[len],
00119 0);
00120
00121 if (this->read_char_array (in, x, len))
00122 return 1;
00123
00124 delete [] x;
00125 }
00126
00127 x = 0;
00128 return 0;
00129 }
00130
00131 ACE_CDR::Boolean
00132 ACE_IBM1047_ISO8859::read_char_array (ACE_InputCDR& in,
00133 ACE_CDR::Char* x,
00134 ACE_CDR::ULong len)
00135 {
00136 if (this->read_array (in,
00137 x,
00138 ACE_CDR::OCTET_SIZE,
00139 ACE_CDR::OCTET_ALIGN,
00140 len))
00141 {
00142 for (ACE_CDR::ULong i = 0; i != len; ++i)
00143 x[i] = to_IBM1047[x[i]];
00144
00145 return 1;
00146 }
00147
00148 return 0;
00149 }
00150
00151 ACE_CDR::Boolean
00152 ACE_IBM1047_ISO8859::write_char (ACE_OutputCDR& out,
00153 ACE_CDR::Char x)
00154 {
00155 return
00156 this->write_1 (out,
00157 reinterpret_cast<const ACE_CDR::Octet*> (&from_IBM1047[x]));
00158 }
00159
00160 ACE_CDR::Boolean
00161 ACE_IBM1047_ISO8859::write_string (ACE_OutputCDR& out,
00162 ACE_CDR::ULong len,
00163 const ACE_CDR::Char* x)
00164 {
00165 if (out.write_ulong (len + 1))
00166 return this->write_char_array (out, x, len + 1);
00167 return 0;
00168 }
00169
00170 ACE_CDR::Boolean
00171 ACE_IBM1047_ISO8859::write_char_array (ACE_OutputCDR& out,
00172 const ACE_CDR::Char* x,
00173 ACE_CDR::ULong len)
00174 {
00175 char *buf;
00176 if (this->adjust (out, len, 1, buf) == 0)
00177 {
00178 ACE_OS::memcpy (buf, x, len);
00179
00180 for (ACE_CDR::ULong i = 0; i != len; ++i)
00181 buf[i] = from_IBM1047[buf[i]];
00182
00183 return 1;
00184 }
00185
00186 this->good_bit(out, 0);
00187 return 0;
00188 }
00189
00190
00191
00192 ACE_ISO8859_IBM1047::ACE_ISO8859_IBM1047 (void)
00193 {
00194 }
00195
00196 ACE_ISO8859_IBM1047::~ACE_ISO8859_IBM1047 (void)
00197 {
00198 }
00199
00200 ACE_CDR::ULong
00201 ACE_ISO8859_IBM1047::ncs ()
00202 {
00203 return 0x00010001;
00204 }
00205
00206 ACE_CDR::ULong
00207 ACE_ISO8859_IBM1047::tcs ()
00208 {
00209 return 0x10020417;
00210 }
00211
00212
00213 ACE_CDR::Boolean
00214 ACE_ISO8859_IBM1047::read_char (ACE_InputCDR& in,
00215 ACE_CDR::Char& x)
00216 {
00217 if (this->read_1 (in, reinterpret_cast<ACE_CDR::Octet*> (&x)))
00218 {
00219 x = from_IBM1047[x];
00220 return 1;
00221 }
00222 return 0;
00223 }
00224
00225 ACE_CDR::Boolean
00226 ACE_ISO8859_IBM1047::read_string (ACE_InputCDR &in,
00227 ACE_CDR::Char *&x)
00228 {
00229 ACE_CDR::ULong len;
00230
00231 in.read_ulong (len);
00232
00233 if (len > 0)
00234 {
00235 ACE_NEW_RETURN (x,
00236 ACE_CDR::Char[len],
00237 0);
00238
00239 if (this->read_char_array (in, x, len))
00240 return 1;
00241
00242 delete [] x;
00243 }
00244
00245 x = 0;
00246 return 0;
00247 }
00248
00249 ACE_CDR::Boolean
00250 ACE_ISO8859_IBM1047::read_char_array (ACE_InputCDR &in,
00251 ACE_CDR::Char *x,
00252 ACE_CDR::ULong len)
00253 {
00254 if (this->read_array (in,
00255 x,
00256 ACE_CDR::OCTET_SIZE,
00257 ACE_CDR::OCTET_ALIGN,
00258 len))
00259 {
00260 for (ACE_CDR::ULong i = 0; i != len; ++i)
00261 x[i] = from_IBM1047[x[i]];
00262
00263 return 1;
00264 }
00265
00266 return 0;
00267 }
00268
00269 ACE_CDR::Boolean
00270 ACE_ISO8859_IBM1047::write_char (ACE_OutputCDR &out,
00271 ACE_CDR::Char x)
00272 {
00273 return
00274 this->write_1 (out,
00275 reinterpret_cast<const ACE_CDR::Octet *> (&to_IBM1047[x]));
00276 }
00277
00278 ACE_CDR::Boolean
00279 ACE_ISO8859_IBM1047::write_string (ACE_OutputCDR& out,
00280 ACE_CDR::ULong len,
00281 const ACE_CDR::Char* x)
00282 {
00283 if (out.write_ulong (len + 1))
00284 return this->write_char_array (out, x, len + 1);
00285 else
00286 return 0;
00287 }
00288
00289 ACE_CDR::Boolean
00290 ACE_ISO8859_IBM1047::write_char_array (ACE_OutputCDR &out,
00291 const ACE_CDR::Char *x,
00292 ACE_CDR::ULong len)
00293 {
00294 char *buf;
00295
00296 if (this->adjust (out, len, 1, buf) == 0)
00297 {
00298 ACE_OS::memcpy (buf, x, len);
00299
00300 for (ACE_CDR::ULong i = 0; i != len; ++i)
00301 buf[i] = to_IBM1047[buf[i]];
00302
00303 return 1;
00304 }
00305
00306 this->good_bit (out, 0);
00307 return 0;
00308 }
00309
00310 ACE_END_VERSIONED_NAMESPACE_DECL
00311
00312
00313
00314 #elif defined (__HP_aCC)
00315
00316 static int const shut_up_aCC = 0;
00317 #endif