[omniORB] CodeSets implementation

ondrej at frcatel.fri.utc.sk ondrej at frcatel.fri.utc.sk
Fri Dec 19 14:52:49 GMT 2003


Hi everybody,

as you could already have seen in the list, I've been trying to add
codeset win1250 to the ORB, but could not figure out how to construct
lookup tables. Now, I am finished with it (it just took some time to
understand the code) and it works in terms that it appears in the trace
level as a supported codeset and also appears in the IOR. However, it does
not appear to work correctly when trying to communicate.

I wrote a test server and a test client with simple interface:
module Hello {
	interface Echo (
		string Respond(in string message);
		wstring WRespond(in wstring message);
	);
};

The server and the client are written in C++ but I've tried both of them
also in Python with the same (annoying) results. Both the client and the
server are run with -ORBnativeCharCodeset windows-1250 (which si my newly
added codeset. Don't worry, it is correctly registered even with the
correct IANA number). Client makes two simple (what else ?) requests, once
calling Respond() and once WRespond() function with the string containing
windows-1250 characters (it is a string 'Ahoj šťaveľček'). When run with
ORBtraceLevel=50 I see that server and client negotioate about the codeset
and agree to use windows-1250 as transmission char codeset (TCS_C) and
UTF-16 transmission wchar codeset (TCS_W). While WResponse() function
working just fine, the Respond() version fails with
DATA_CONVERSION,DATA_CONVERSION_BadInput exception. The reason is, that
the ORB tries to marshal win1250-encoded string as if it would was UCS-2.
But it is not and the lookup for the corresponding char fails; in
particular, it fails at first non-ascii character 0x9a. Since unicode
0x009a character (which is not unicode in real!) is not a part of win1250,
the lookup is unsuccessfull and the exception is raised. In my opinion,
the problem lies in marshalString function (and it's variants and un*
friends) at cs-8bit.cc:227

void
omniCodeSet::TCS_C_8bit::marshalString(cdrStream& stream,
				       _CORBA_ULong len,
				       const omniCodeSet::UniChar* us)
{
  len++;
  len >>= stream;

  _CORBA_Char          c;
  omniCodeSet::UniChar uc;

  for (_CORBA_ULong i=0; i<len; i++) {
    uc = us[i];
    c = pd_fromU[(uc & 0xff00) >> 8][uc & 0x00ff];
    if (uc && !c)  OMNIORB_THROW(DATA_CONVERSION,
				DATA_CONVERSION_BadInput,
				(CORBA::CompletionStatus)stream.completion());
    stream.marshalOctet(c);
  }
}

As you can see, `uc` is always considered to be unicode (or UCS-2)
character but when ORBs negotiate 8bit TCS_C, no conversion takes place.
`us` is in my case 8bit-coded win1250 string (stored in wide integers). As
I see it, the codeset handling framework should be redesigned to work
properly, because this can't work in any way.

I would be happy not to be right but I am afraid I am :-) At least
partially. I enclose the logs from the server and client and my codeset
file.

		With regards

				Ondrej

PS: I would like to participate on making this work. Has anyone played
with it before ? (except for Duncan)

--------------------------
server log
--------------------------
[ondrej at frckoside c++]$ ./hello_server_c++ -ORBnativeCharCodeSet windows-1250
omniORB: Distribution date: Wed Dec  3 14:38:55 GMT 2003 dgrisby
omniORB: My addresses are:
omniORB: 127.0.0.1
omniORB: 10.238.18.67
omniORB: 10.3.221.1
omniORB: Maximum supported GIOP version is 1.2
omniORB: Native char code sets: ISO-8859-2 ISO-8859-3 ISO-8859-4
ISO-8859-5 ISO-8859-6 ISO-8859-7 ISO-8859-8 ISO-8859-9 ISO-8859-10
windows-1251 windows-1250 IBM-037 IBM-500 SNI-EDF-4 ISO-8859-1 UTF-8.
omniORB: Transmission char code sets: ISO-8859-2(1.2) ISO-8859-3(1.2)
ISO-8859-4(1.2) ISO-8859-5(1.2) ISO-8859-6(1.2) ISO-8859-7(1.2)
ISO-8859-8(1.2) ISO-8859-9(1.2) ISO-8859-10(1.2) windows-1251(1.2)
windows-1250(1.2) IBM-037(1.2) IBM-037(1.1) IBM-500(1.2) IBM-500(1.1)
SNI-EDF-4(1.2) SNI-EDF-4(1.1) ISO-8859-1(1.2) ISO-8859-1(1.1)
ISO-8859-1(1.0) UTF-8(1.2).
omniORB: Native wide char code sets: UCS-4 UTF-16.
omniORB: Transmission wide char code sets: UCS-4(1.2) UTF-16(1.2).
omniORB: Initialising omniDynamic library.
omniORB: Current configuration is as follows:
omniORB:   DefaultInitRef (file) =
omniORB:   DefaultInitRef (args) =
omniORB:   InitRef =
NameService=IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000060000000010102000d00000031302e3233382e31382e36370000f90a0b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
omniORB:   abortOnInternalError = 0
omniORB:   acceptBiDirectionalGIOP = 0
omniORB:   acceptMisalignedTcIndirections = 0
omniORB:   bootstrapAgentHostname =
omniORB:   bootstrapAgentPort = 900
omniORB:   clientCallTimeOutPeriod = 0
omniORB:   clientTransportRule = * unix,ssl,tcp
omniORB:   diiThrowsSysExceptions = 0
omniORB:   dumpConfiguration = 0
omniORB:   endPoint = giop:tcp::
omniORB:   endPointPublishAllIFs = 0
omniORB:   giopMaxMsgSize = 2097152
omniORB:   giopTargetAddressMode = KeyAddr
omniORB:   id = omniORB4
omniORB:   inConScanPeriod = 180
omniORB:   lcdMode = 0
omniORB:   maxGIOPConnectionPerServer = 5
omniORB:   maxGIOPVersion = 1.2
omniORB:   maxInterleavedCallsPerConnection = 5
omniORB:   maxServerThreadPerConnection = 100
omniORB:   maxServerThreadPoolSize = 100
omniORB:   nativeCharCodeSet = windows-1250
omniORB:   nativeWCharCodeSet = UTF-16
omniORB:   objectTableSize = 0
omniORB:   offerBiDirectionalGIOP = 0
omniORB:   omniORB_27_CompatibleAnyExtraction = 0
omniORB:   oneCallPerConnection = 1
omniORB:   outConScanPeriod = 120
omniORB:   poaHoldRequestTimeout = 0
omniORB:   poaUniquePersistentSystemIds = 1
omniORB:   principal = [Null]
omniORB:   scanGranularity = 10
omniORB:   serverCallTimeOutPeriod = 0
omniORB:   serverTransportRule = * unix,ssl,tcp
omniORB:   strictIIOP = 1
omniORB:   supportBootstrapAgent = 0
omniORB:   supportCurrent = 1
omniORB:   supportPerThreadTimeOut = 0
omniORB:   tcAliasExpand = 0
omniORB:   threadPerConnectionLowerLimit = 9000
omniORB:   threadPerConnectionPolicy = 1
omniORB:   threadPerConnectionUpperLimit = 10000
omniORB:   threadPoolWatchConnection = 1
omniORB:   traceInvocations = 0
omniORB:   traceLevel = 50
omniORB:   traceThreadId = 0
omniORB:   unixTransportDirectory = /tmp/omni-%u
omniORB:   unixTransportPermission =  777
omniORB:   useTypeCodeIndirections = 1
omniORB:   verifyObjectExistsAndType = 1
omniORB: Initialising incoming endpoints.
omniORB: Bind to address 0.0.0.0.
omniORB: Starting serving incoming endpoints.
omniORB: Adding root<0> (activating) to object table.
omniORB: State root<0> (activating) -> active
omniORB: Creating ref to local: root<0>
 target id      : IDL:Hello/Echo:1.0
 most derived id: IDL:Hello/Echo:1.0
IDL object Hello::Echo IOR =
'IOR:010000001300000049444c3a48656c6c6f2f4563686f3a312e300000010000000000000064000000010102000d00000031302e3233382e31382e3637000036950e000000fe6f00e33f000021a5000000000000000200000000000000080000000100000000545441010000001c00000001000000e20402100100000001000105090101000100000009010100'
omniORB: ObjRef(IDL:Hello/Echo:1.0) -- deleted.
omniORB: AsyncInvoker: thread id = 1 has started. Total threads = 1
omniORB: giopRendezvouser task execute for giop:tcp:10.238.18.67:38198
omniORB: Server accepted connection from giop:tcp:10.238.18.67:38199
omniORB: AsyncInvoker: thread id = 2 has started. Total threads = 2
omniORB: Scavenger task execute.
omniORB: AsyncInvoker: thread id = 3 has started. Total threads = 3
omniORB: giopWorker task execute.
omniORB: Accepted connection from giop:tcp:10.238.18.67:38199 because of
this rule: "* unix,ssl,tcp"
omniORB: inputMessage: from giop:tcp:10.238.18.67:38199 38 bytes
omniORB:
4749 4f50 0102 0103 1a00 0000 0200 0000 GIOP............
0000 0000 0e00 0000 fe6f 00e3 3f00 0021 .........o..?..!
a500 0000 0000                          ......
omniORB: Handling a GIOP LOCATE_REQUEST.
omniORB: sendChunk: to giop:tcp:10.238.18.67:38199 20 bytes
omniORB:
4749 4f50 0102 0104 0800 0000 0200 0000 GIOP............
0100 0000                               ....
omniORB: Server accepted connection from giop:tcp:10.238.18.67:38200
omniORB: throw giopStream::CommFailure from
giopStream.cc:828(0,NO,COMM_FAILURE_UnMarshalArguments)
omniORB: Server connection refcount = 1
omniORB: Server connection refcount = 0
omniORB: Server close connection from giop:tcp:10.238.18.67:38199
omniORB: AsyncInvoker: thread id = 4 has started. Total threads = 4
omniORB: giopWorker task execute.
omniORB: Accepted connection from giop:tcp:10.238.18.67:38200 because of
this rule: "* unix,ssl,tcp"
omniORB: inputMessage: from giop:tcp:10.238.18.67:38200 122 bytes
omniORB:
4749 4f50 0102 0100 6e00 0000 0200 0000 GIOP....n.......
0300 0000 0000 0000 0e00 0000 fe6f 00e3 .............o..
3f00 0021 a500 0000 0000 0000 0900 0000 ?..!............
5752 6573 706f 6e64 0000 0000 0100 0000 WRespond........
0100 0000 0c00 0000 0100 0000 e204 0210 ................
0901 0100 4168 6f6a 1e00 0000 fffe 4100 ....Ahoj......A.
6800 6f00 6a00 2000 9a00 9d00 6100 7600 h.o.j. .....a.v.
6500 be00 e800 6500 6b00                e.....e.k.
omniORB:  recieve codeset service context and set TCS to
(windows-1250,UTF-16)
omniORB: sendChunk: to giop:tcp:10.238.18.67:38200 58 bytes
omniORB:
4749 4f50 0102 0101 2e00 0000 0200 0000 GIOP............
0000 0000 0000 0000 1e00 0000 fffe 4100 ..............A.
6800 6f00 6a00 2000 9a00 9d00 6100 7600 h.o.j. .....a.v.
6500 be00 e800 6500 6b00                e.....e.k.
omniORB: inputMessage: from giop:tcp:10.238.18.67:38200 12 bytes
omniORB:
4749 4f50 0102 0105 0000 0000           GIOP........
omniORB: throw giopStream::CommFailure from
giopImpl12.cc:1246(0,NO,COMM_FAILURE_UnMarshalArguments)
omniORB: Server connection refcount = 1
omniORB: Server connection refcount = 0
omniORB: Server close connection from giop:tcp:10.238.18.67:38200

---------------
client -log
---------------
[ondrej at frckoside c++]$ ./hello_client_c++
hello_client_c++
omniORB: Distribution date: Wed Dec  3 14:38:55 GMT 2003 dgrisby
omniORB: My addresses are:
omniORB: 127.0.0.1
omniORB: 10.238.18.67
omniORB: 10.3.221.1
omniORB: Maximum supported GIOP version is 1.2
omniORB: Native char code sets: ISO-8859-2 ISO-8859-3 ISO-8859-4
ISO-8859-5 ISO-8859-6 ISO-8859-7 ISO-8859-8 ISO-8859-9 ISO-8859-10
windows-1251 windows-1250 IBM-037 IBM-500 SNI-EDF-4 ISO-8859-1 UTF-8.
omniORB: Transmission char code sets: ISO-8859-2(1.2) ISO-8859-3(1.2)
ISO-8859-4(1.2) ISO-8859-5(1.2) ISO-8859-6(1.2) ISO-8859-7(1.2)
ISO-8859-8(1.2) ISO-8859-9(1.2) ISO-8859-10(1.2) windows-1251(1.2)
windows-1250(1.2) IBM-037(1.2) IBM-037(1.1) IBM-500(1.2) IBM-500(1.1)
SNI-EDF-4(1.2) SNI-EDF-4(1.1) ISO-8859-1(1.2) ISO-8859-1(1.1)
ISO-8859-1(1.0) UTF-8(1.2).
omniORB: Native wide char code sets: UCS-4 UTF-16.
omniORB: Transmission wide char code sets: UCS-4(1.2) UTF-16(1.2).
omniORB: Initialising omniDynamic library.
omniORB: Current configuration is as follows:
omniORB:   DefaultInitRef (file) =
omniORB:   DefaultInitRef (args) =
omniORB:   InitRef =
NameService=IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000060000000010102000d00000031302e3233382e31382e36370000f90a0b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
omniORB:   abortOnInternalError = 0
omniORB:   acceptBiDirectionalGIOP = 0
omniORB:   acceptMisalignedTcIndirections = 0
omniORB:   bootstrapAgentHostname =
omniORB:   bootstrapAgentPort = 900
omniORB:   clientCallTimeOutPeriod = 0
omniORB:   clientTransportRule = * unix,ssl,tcp
omniORB:   diiThrowsSysExceptions = 0
omniORB:   dumpConfiguration = 0
omniORB:   endPoint = giop:tcp::
omniORB:   endPointPublishAllIFs = 0
omniORB:   giopMaxMsgSize = 2097152
omniORB:   giopTargetAddressMode = KeyAddr
omniORB:   id = omniORB4
omniORB:   inConScanPeriod = 180
omniORB:   lcdMode = 0
omniORB:   maxGIOPConnectionPerServer = 5
omniORB:   maxGIOPVersion = 1.2
omniORB:   maxInterleavedCallsPerConnection = 5
omniORB:   maxServerThreadPerConnection = 100
omniORB:   maxServerThreadPoolSize = 100
omniORB:   nativeCharCodeSet = ISO-8859-1
omniORB:   nativeWCharCodeSet = UTF-16
omniORB:   objectTableSize = 0
omniORB:   offerBiDirectionalGIOP = 0
omniORB:   omniORB_27_CompatibleAnyExtraction = 0
omniORB:   oneCallPerConnection = 1
omniORB:   outConScanPeriod = 120
omniORB:   poaHoldRequestTimeout = 0
omniORB:   poaUniquePersistentSystemIds = 1
omniORB:   principal = [Null]
omniORB:   scanGranularity = 10
omniORB:   serverCallTimeOutPeriod = 0
omniORB:   serverTransportRule = * unix,ssl,tcp
omniORB:   strictIIOP = 1
omniORB:   supportBootstrapAgent = 0
omniORB:   supportCurrent = 1
omniORB:   supportPerThreadTimeOut = 0
omniORB:   tcAliasExpand = 0
omniORB:   threadPerConnectionLowerLimit = 9000
omniORB:   threadPerConnectionPolicy = 1
omniORB:   threadPerConnectionUpperLimit = 10000
omniORB:   threadPoolWatchConnection = 1
omniORB:   traceInvocations = 0
omniORB:   traceLevel = 50
omniORB:   traceThreadId = 0
omniORB:   unixTransportDirectory = /tmp/omni-%u
omniORB:   unixTransportPermission =  777
omniORB:   useTypeCodeIndirections = 1
omniORB:   verifyObjectExistsAndType = 1
omniORB: Creating ref to remote: root<0>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: IDL:Hello/Echo:1.0
omniORB: LocateRequest to remote: root<0>
omniORB: Client attempt to connect to giop:tcp:10.238.18.67:38198
omniORB: Client opened connection to giop:tcp:10.238.18.67:38198
omniORB: sendChunk: to giop:tcp:10.238.18.67:38198 38 bytes
omniORB:
4749 4f50 0102 0103 1a00 0000 0200 0000 GIOP............
0000 0000 0e00 0000 fe6f 00e3 3f00 0021 .........o..?..!
a500 0000 0000                          ......
omniORB: AsyncInvoker: thread id = 1 has started. Total threads = 1
omniORB: Scavenger task execute.
omniORB: inputMessage: from giop:tcp:10.238.18.67:38198 20 bytes
omniORB:
4749 4f50 0102 0104 0800 0000 0200 0000 GIOP............
0100 0000                               ....
omniORB:  send codeset service context: (windows-1250,UTF-16)
<here comes my debug output which I added to inspect the ORB's behaviour>
<'I' means entry different from omniCodeSet::empty8BitTable>
TCS_C_8bit::marshalString: id=[268567778] name=[windows-1250] kind=[1]
TCS_C_8bit::marshalString: pd_fromU table is:
        I,I,I,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        I,I,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
        .,.,.,.,.,.,.,.,
TCS_C_8bit::marshalString: 0x0041
TCS_C_8bit::marshalString: c = 41 A
TCS_C_8bit::marshalString: 0x0068
TCS_C_8bit::marshalString: c = 68 h
TCS_C_8bit::marshalString: 0x006f
TCS_C_8bit::marshalString: c = 6f o
TCS_C_8bit::marshalString: 0x006a
TCS_C_8bit::marshalString: c = 6a j
TCS_C_8bit::marshalString: 0x0020
TCS_C_8bit::marshalString: c = 20
TCS_C_8bit::marshalString: 0x009a
TCS_C_8bit::marshalString: c = 00
omniORB: throw DATA_CONVERSION from cs-8bit.cc:246
(NO,DATA_CONVERSION_BadInput)
omniORB: Unexpected error encountered in talking to the server
giop:tcp:10.238.18.67:38198 . The connection is closed immediately.
omniORB: Client connection refcount = 0
omniORB: Client close connection to giop:tcp:10.238.18.67:38198
Respond: An exception occurred
omniORB:  send codeset service context: (windows-1250,UTF-16)
omniORB: Client attempt to connect to giop:tcp:10.238.18.67:38198
omniORB: Client opened connection to giop:tcp:10.238.18.67:38198
omniORB: sendChunk: to giop:tcp:10.238.18.67:38198 122 bytes
omniORB:
4749 4f50 0102 0100 6e00 0000 0200 0000 GIOP....n.......
0300 0000 0000 0000 0e00 0000 fe6f 00e3 .............o..
3f00 0021 a500 0000 0000 0000 0900 0000 ?..!............
5752 6573 706f 6e64 0000 0000 0100 0000 WRespond........
0100 0000 0c00 0000 0100 0000 e204 0210 ................
0901 0100 4168 6f6a 1e00 0000 fffe 4100 ....Ahoj......A.
6800 6f00 6a00 2000 9a00 9d00 6100 7600 h.o.j. .....a.v.
6500 be00 e800 6500 6b00                e.....e.k.
omniORB: inputMessage: from giop:tcp:10.238.18.67:38198 58 bytes
omniORB:
4749 4f50 0102 0101 2e00 0000 0200 0000 GIOP............
0000 0000 0000 0000 1e00 0000 fffe 4100 ..............A.
6800 6f00 6a00 2000 9a00 9d00 6100 7600 h.o.j. .....a.v.
6500 be00 e800 6500 6b00                e.....e.k.
0x41 A
0x68 h
0x6f o
0x6a j
0x20
0x9a
0x9d
0x61 a
0x76 v
0x65 e
0xbe ž
0xe8 č
0x65 e
0x6b k
omniORB: Preparing to shutdown ORB.
omniORB: Disable ObjRef(IDL:Hello/Echo:1.0) root<0>
omniORB: omniRemoteIdentity deleted.
omniORB: 1 object reference present at ORB shutdown.
omniORB: ORB shutdown is complete.
omniORB: Deinitialising omniDynamic library.
omniORB: Scan for idle connections (1071841404,69065000)
omniORB: Scavenger reduce idle count for strand 0x805fcf0 to 11
omniORB: Scan for idle connections done (1071841404,69065000).
omniORB: Shutdown close connection to giop:tcp:10.238.18.67:38198
omniORB: Client connection refcount (forced) = 0
omniORB: Client close connection to giop:tcp:10.238.18.67:38198
omniORB: 0 remaining bidir ropes deleted.
omniORB: 1 remaining rope deleted.
omniORB: Clear endPoint options.
omniORB: AsyncInvoker: thread id = 1 has exited. Total threads = 1
omniORB: AsyncInvoker: deleted.
omniORB: ObjRef(IDL:Hello/Echo:1.0) -- deleted.
omniORB: No more references to the ORB -- deleted.
omniORB: Final clean-up
omniORB: Released 255 static TypeCodes.
omniORB: Deleted 2 nil object references and 2 other tracked objects.
omniORB: Final clean-up completed

------
cs-cp1250.cc
--------------
// -*- Mode: C++; -+-
//
// Code set table automatically generated from:
//
// cp1250.cdt
//

#include <omniORB4/CORBA.h>
#include <omniORB4/linkHacks.h>
#include <codeSetUtil.h>

OMNI_NAMESPACE_BEGIN(omni)

static const omniCodeSet::UniChar toUCS[] = {
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f,
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f,
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f,
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f,
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f,
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f,
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f,
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f,
0x20ac,0x0098,0x201a,0x0098,0x201e,0x2026,0x2020,0x2021,
0x0098,0x2030,0x0160,0x2039,0x015a,0x0164,0x017d,0x0179,
0x0098,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014,
0x0098,0x2122,0x0161,0x203a,0x015b,0x0165,0x017e,0x017a,
0x00a0,0x02c7,0x02d8,0x0141,0x00a4,0x0104,0x00a6,0x00a7,
0x00a8,0x00a9,0x015e,0x00ab,0x00ac,0x00ad,0x00ae,0x017b,
0x00b0,0x00b1,0x02db,0x0142,0x00b4,0x00b5,0x00b6,0x00b7,
0x00b8,0x0105,0x015f,0x00bb,0x013d,0x02dd,0x013e,0x017c,
0x0154,0x00c1,0x00c2,0x0102,0x00c4,0x0139,0x0106,0x00c7,
0x010c,0x00c9,0x0118,0x00cb,0x011a,0x00cd,0x00ce,0x010e,
0x0110,0x0143,0x0147,0x00d3,0x00d4,0x0150,0x00d6,0x00d7,
0x0158,0x016e,0x00da,0x0170,0x00dc,0x00dd,0x0162,0x00df,
0x0155,0x00e1,0x00e2,0x0103,0x00e4,0x013a,0x0107,0x00e7,
0x010d,0x00e9,0x0119,0x00eb,0x011b,0x00ed,0x00ee,0x010f,
0x0111,0x0144,0x0148,0x00f3,0x00f4,0x0151,0x00f6,0x00f7,
0x0159,0x016f,0x00fa,0x0171,0x00fc,0x00fd,0x0163,0x02d9,
};

static const _CORBA_Char frUCS00[] = {
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xa0,0x00,0x00,0x00,0xa4,0x00,0xa6,0xa7,
0xa8,0xa9,0x00,0xab,0xac,0xad,0xae,0x00,
0xb0,0xb1,0x00,0x00,0xb4,0xb5,0xb6,0xb7,
0xb8,0x00,0x00,0xbb,0x00,0x00,0x00,0x00,
0x00,0xc1,0xc2,0x00,0xc4,0x00,0x00,0xc7,
0x00,0xc9,0x00,0xcb,0x00,0xcd,0xce,0x00,
0x00,0x00,0x00,0xd3,0xd4,0x00,0xd6,0xd7,
0x00,0x00,0xda,0x00,0xdc,0xdd,0x00,0xdf,
0x00,0xe1,0xe2,0x00,0xe4,0x00,0x00,0xe7,
0x00,0xe9,0x00,0xeb,0x00,0xed,0xee,0x00,
0x00,0x00,0x00,0xf3,0xf4,0x00,0xf6,0xf7,
0x00,0x00,0xfa,0x00,0xfc,0xfd,0x00,0x00,
};

static const _CORBA_Char frUCS01[] = {
0x00,0x00,0xc3,0xe3,0xa5,0xb9,0xc6,0xe6,
0x00,0x00,0x00,0x00,0xc8,0xe8,0xcf,0xef,
0xd0,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,
0xca,0xea,0xcc,0xec,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xc5,0xe5,0x00,0x00,0xbc,0xbe,0x00,
0x00,0xa3,0xb3,0xd1,0xf1,0x00,0x00,0xd2,
0xf2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xd5,0xf5,0x00,0x00,0xc0,0xe0,0x00,0x00,
0xd8,0xf8,0x8c,0x9c,0x00,0x00,0xaa,0xba,
0x8a,0x9a,0xde,0xfe,0x8d,0x9d,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xd9,0xf9,
0xdb,0xfb,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x8f,0x9f,0xaf,0xbf,0x8e,0x9e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

static const _CORBA_Char frUCS02[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa1,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xa2,0xff,0x00,0xb2,0x00,0xbd,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

static const _CORBA_Char frUCS20[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x96,0x97,0x00,0x00,0x00,
0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,
0x86,0x87,0x95,0x00,0x00,0x00,0x85,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x8b,0x9b,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

static const _CORBA_Char frUCS21[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};


#ifdef E_T
#undef E_T
#endif

#define E_T omniCodeSet::empty8BitTable

static const _CORBA_Char* frUCS[] = {

frUCS00,frUCS01,frUCS02,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
frUCS20,frUCS21,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
E_T,E_T,E_T,E_T,E_T,E_T,E_T,E_T,
};
static omniCodeSet::NCS_C_8bit _NCS_C_CP1250(
	omniCodeSet::ID_CP1250,
	"windows-1250",
	toUCS, frUCS);

static omniCodeSet::TCS_C_8bit _TCS_C_CP1250(
	omniCodeSet::ID_CP1250,
	"windows-1250",
	omniCodeSetUtil::GIOP12,
	toUCS, frUCS);

class CS_CP1250_init {
public:
  CS_CP1250_init() {
    omniCodeSet::registerNCS_C(&_NCS_C_CP1250);
    omniCodeSet::registerTCS_C(&_TCS_C_CP1250);
  }
};
static CS_CP1250_init _CS_CP1250_init_;

OMNI_NAMESPACE_END(omni)

OMNI_EXPORT_LINK_FORCE_SYMBOL(CS_CP1250);




More information about the omniORB-list mailing list