----------
MICO 2.3.6
----------

There is a problem with the MICO's OMG IDL compiler,
it does not accept the following OMG IDL when it should:

interface I {
  readonly attribute string a1, a2;
};

Then, the demo/grid/GridService.idl file could not be loaded
into the Interface Repository because the MICO compiler says
that there is a syntax error. However the OMG IDL file is correct.

----------------------------------
MICO 2.3.5 patches for CorbaScript
----------------------------------

Experimenting valuetypes with CorbaScript, a problem into the Interface
Repository implementation was discovered: The Contained_impl::describe
operation does not deal with ValueMemberDef objects.
Here is a patch to correct this lack:

unix> diff mico/ir/ir_impl.cc.orig mico/ir/ir_impl.cc
330a331,349
> 
>     // From Philippe.Merle@lifl.fr
>     //
>   case CORBA::dk_ValueMember:
>     {
>       CORBA::ValueMember d;
>       CORBA::ValueMemberDef_var vm = CORBA::ValueMemberDef::_narrow( this );
>       assert( !CORBA::is_nil( vm ) );
>       d.name       = _name;
>       d.id         = _id;
>       d.defined_in = def_in_id;
>       d.version    = _version;
>       d.type       = vm->type();
>       d.type_def   = vm->type_def();
>       d.access     = vm->access();
>       desc->value <<= d;
>       break;
>     }

----------------------------------
MICO 2.2.7 patches for CorbaScript
----------------------------------

To: mico-devel@vsb.informatik.uni-frankfurt.de
Subject: MICO: Patch for any extraction
From: Owen Taylor <otaylor@redhat.com>
Date: 12 Jun 1999 17:42:47 -0400


The following patch addresses a problem where
the code for:

CORBA::Any::operator>>= (to_object o)
CORBA::Any::operator>>= (to_abstract_base o)

tries to access the checker for the Any
without first resetting it if the checker for
the any is marked if 'completed'.

This bug makes it impossible to retrieve these types
of values as a return value from a DII operation,
since the Any's for return values are not reset
when invoke() returns.

(I've only noted the problem with to_object -
 I'm guessing the same problem applies to
 to_abstract_base by analogy)

Regards,
                                        Owen

--- mico/orb/any.cc.checker	Sat Jun 12 17:33:12 1999
+++ mico/orb/any.cc	Sat Jun 12 17:31:16 1999
@@ -2068,6 +2068,7 @@
 {
     Any &me = (Any &)*this;
 
+    me.prepare_read ();
     if (me.checker->tc()->kind () != tk_objref) {
 	me.rewind ();
 	return FALSE;
@@ -2086,6 +2087,7 @@
 {
     Any &me = (Any &)*this;
 
+    me.prepare_read ();
     if (me.checker->tc()->kind () != tk_abstract_interface) {
         me.rewind ();
         return FALSE;

----------------------------------
MICO 2.3.1 patches for CorbaScript
----------------------------------

The following patches correct:
* the insertion and extraction of strings into DynamicAny::DynAny 
  created with bounded string TypeCodes.
* handling of members with aliased TypeCodes in DynStruct, DynUnion,
  DynSequence, DynArray and DynValue.

prompt> diff mico/orb/dynany_impl.cc.orig mico/orb/dynany_impl.cc

314c314,317
<     a <<= value;
---
> // This previous code doesn't correctly deal bounded string TypeCodes.
> //    a <<= value;
> // new code
>     a <<= CORBA::Any::from_string((char*)value, utc->length());
608,609c611,618
<     char *value;
<     if (!((CORBA::Any &)a >>= value))
---
> // This previous code doesn't correctly deal bounded string TypeCodes.
> //    char *value;
> //    if (!((CORBA::Any &)a >>= value))
> // new code
>     char *value; 
>     CORBA::TypeCode_var tc = a->type();
>     if (!((CORBA::Any &)a >>= CORBA::Any::to_string(value, tc->unalias()->length())))
> // end
1120a1130,1135
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
>          CORBA::TypeCode_var member_tc = tc->member_type(i);
>          el.type(member_tc);
> //
1157a1173,1178
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc2->member_type(i);
> 	el.type(member_tc);
> //
1310a1332,1337
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
>     CORBA::TypeCode_var discr_tc = tc->discriminator_type();
>     disc.type(discr_tc);
> //
1318a1346,1351
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc->member_type(_member_idx);
> 	el.type(member_tc);
> //
1375a1409,1414
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
>     CORBA::TypeCode_var discr_tc = tc->discriminator_type();
>     disc.type(discr_tc);
> //
1383a1423,1428
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc->member_type(_member_idx);
> 	el.type(member_tc);
> //
1817a1863,1868
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc->content_type();
> 	el.type(member_tc);
> //
1846a1898,1903
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc->unalias()->content_type();
> 	el.type(member_tc);
> //
1987a2045,2050
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc->content_type();
> 	el.type(member_tc);
> //
2011a2075,2080
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc->unalias()->content_type();
> 	el.type(member_tc);
> //
2132a2202,2207
> // Here it is needed to set the Any type after calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc->member_type_inherited(i);
> 	el.type(member_tc);
> //
2180a2256,2261
> // Here it is needed to set the Any type before calling any_get()
> // else there is no deal with aliased typecodes.
> // Note that calling el.set_type() before calling any_get() doesn't resolve the alias problem.
> 	CORBA::TypeCode_var member_tc = tc2->member_type_inherited(i);
> 	el.type(member_tc);
> //

A similar patch must be applied to insert_wstring and get_wstring operations.

----------------------------------------------
Compiling CorbaScript with Cygwin - gcc-2.95.x
----------------------------------------------

Take care that your MICO installation is configurated for CORBA 2.3 compliance and
not CORBA 2.1 compliance, i.e. check that the USE_CORBA_2_1 macro is not set in
MICO configuration header files else you will have many errors during the
CorbaScript compilation.

----------------------------------
MICO 2.3.3 patches for CorbaScript
----------------------------------

To compile and execute CorbaScript on top of MICO 2.3.3 is needed to apply
the following patch made by Frank Pilhofer <fp@informatik.uni-frankfurt.de>:

 http://www.informatik.uni-frankfurt.de/~fp/Tcl/Combat/download/fp-mico-patch-2.3.3.gz

