Codeset_IBM1047.cpp

Go to the documentation of this file.
00001 // Codeset_IBM1047.cpp,v 4.9 2005/10/28 16:14:51 ossama Exp
00002 
00003 // ============================================================================
00004 //
00005 // = LIBRARY
00006 //    ace
00007 //
00008 // = FILENAME
00009 //    Codeset_IBM1047.cpp
00010 //
00011 // = DESCRIPTION
00012 //    Defines the arrays required to convert between ISO8859 (aka
00013 //    Latin/1) and IBM1047 (aka EBCDIC).
00014 //
00015 // = AUTHOR
00016 //    Jim Rogers (jrogers@viasoft.com)
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" // 00-0F
00035   "\x10\x11\x12\x13\x3C\x3D\x32\x26\x18\x19\x3F\x27\x22\x1D\x35\x1F" // 10-1F
00036   "\x40\x5A\x7F\x7B\x5B\x6C\x50\x7D\x4D\x5D\x5C\x4E\x6B\x60\x4B\x61" // 20-2F
00037   "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\x7A\x5E\x4C\x7E\x6E\x6F" // 30-3F
00038   "\x7C\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xD1\xD2\xD3\xD4\xD5\xD6" // 40-4F
00039   "\xD7\xD8\xD9\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xAD\xE0\xBD\x5F\x6D" // 50-5F
00040   "\x79\x81\x82\x83\x84\x85\x86\x87\x88\x89\x91\x92\x93\x94\x95\x96" // 60-6F
00041   "\x97\x98\x99\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xC0\x4F\xD0\xA1\x07" // 70-7F
00042   "\x43\x20\x21\x1C\x23\xEB\x24\x9B\x71\x28\x38\x49\x90\xBA\xEC\xDF" // 80-8F
00043   "\x45\x29\x2A\x9D\x72\x2B\x8A\x9A\x67\x56\x64\x4A\x53\x68\x59\x46" // 90-9F
00044   "\xEA\xDA\x2C\xDE\x8B\x55\x41\xFE\x58\x51\x52\x48\x69\xDB\x8E\x8D" // A0-AF
00045   "\x73\x74\x75\xFA\x15\xB0\xB1\xB3\xB4\xB5\x6A\xB7\xB8\xB9\xCC\xBC" // B0-BF
00046   "\xAB\x3E\x3B\x0A\xBF\x8F\x3A\x14\xA0\x17\xCB\xCA\x1A\x1B\x9C\x04" // C0-CF
00047   "\x34\xEF\x1E\x06\x08\x09\x77\x70\xBE\xBB\xAC\x54\x63\x65\x66\x62" // D0-DF
00048   "\x30\x42\x47\x57\xEE\x33\xB6\xE1\xCD\xED\x36\x44\xCE\xCF\x31\xAA" // E0-EF
00049   "\xFC\x9E\xAE\x8C\xDD\xDC\x39\xFB\x80\xAF\xFD\x78\x76\xB2\x9F\xFF" // F0-FF
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" // 00-0F
00055   "\x10\x11\x12\x13\xC7\xB4\x08\xC9\x18\x19\xCC\xCD\x83\x1D\xD2\x1F" // 10-1F
00056   "\x81\x82\x1C\x84\x86\x0A\x17\x1B\x89\x91\x92\x95\xA2\x05\x06\x07" // 20-2F
00057   "\x20\xEE\x16\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xC1\x1A" // 30-3F
00058   "\x20\xA6\xE1\x80\xEB\x90\x9F\xE2\xAB\x8B\x9B\x2E\x3C\x28\x2B\x7C" // 40-4F
00059   "\x26\xA9\xAA\x9C\xDB\xA5\x99\xE3\xA8\x9E\x21\x24\x2A\x29\x3B\x5E" // 50-5F
00060   "\x2D\x2F\xDF\xDC\x9A\xDD\xDE\x98\x9D\xAC\xBA\x2C\x25\x5F\x3E\x3F" // 60-6F
00061   "\xD7\x88\x94\xB0\xB1\xB2\xFC\xD6\xFB\x60\x3A\x23\x40\x27\x3D\x22" // 70-7F
00062   "\xF8\x61\x62\x63\x64\x65\x66\x67\x68\x69\x96\xA4\xF3\xAF\xAE\xC5" // 80-8F
00063   "\x8C\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x97\x87\xCE\x93\xF1\xFE" // 90-9F
00064   "\xC8\x7E\x73\x74\x75\x76\x77\x78\x79\x7A\xEF\xC0\xDA\x5B\xF2\xF9" // A0-AF
00065   "\xB5\xB6\xFD\xB7\xB8\xB9\xE6\xBB\xBC\xBD\x8D\xD9\xBF\x5D\xD8\xC4" // B0-BF
00066   "\x7B\x41\x42\x43\x44\x45\x46\x47\x48\x49\xCB\xCA\xBE\xE8\xEC\xED" // C0-CF
00067   "\x7D\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\xA1\xAD\xF5\xF4\xA3\x8F" // D0-DF
00068   "\x5C\xE7\x53\x54\x55\x56\x57\x58\x59\x5A\xA0\x85\x8E\xE9\xE4\xD1" // E0-EF
00069   "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\xB3\xF7\xF0\xFA\xA7\xFF" // F0-FF
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 // Make aC++ stop complaining about an empty translation unit
00316 static int const shut_up_aCC = 0;
00317 #endif /* ACE_MVS */

Generated on Thu Nov 9 09:41:48 2006 for ACE by doxygen 1.3.6