#
# TODOs
#
# This file consists of multiple entries. Each entry begins with an
# entry of the form [...] and ends just before the beginning of the next
# entry. The string between the square brackets has the following
# syntax:
#
# [i;DD.MM.YY;NN]  This is an "open" entry (one which has not jet been
# processed). "i" is an unique entry number, DD.MM.YY the date when the
# entry has been created and "NN" the initial of the person who opened
# the entry.
#
# [i;DD.MM.YY;NN;dd.mm.yy;nn] This is a "closed" entry (one which has
# been processed). "i", DD.MM.YY and NN are the same as for the open
# entry. dd.mm.yy and "nn" are the date and initials of the person who
# closed the entry.

[42;01.05.98;AP]

mico/test/Makefile should have a "check" target to run an automated
test in all sub-directories.


[41a;25.04.98;KR]

- remove remaining asserts() and throw exceptions instead
- CORBA::Status should be void
- add right arithmetic operators for fixed type
- _tc_* constants for system exceptions are missing


[41;25.04.98;KR;09.08.98;KR]

things needed for CORBA 2.2 ORB compliance:
- rename Exception::_throwit() to Exception::_raise()
- support for character set conversion
- CORBA::Current interface
- CORBA::ServiceInformation stuff
- CORBA::Policy, CORBA::DomainManager and related stuff in Object, this
  affects object adapters as well


[40;25.04.98;KR;01.06.98;AP]

things needed for CORBA 2.2 C++ language mapping compliance:
- C++ reserved names should be prefixed by _cxx_ in generated code
- mapping for constants inside interfaces/modules is wrong, e.g.
    // foo.idl
    interface foo {
      const short s = 20;
    };
  should be mapped to
    // foo.h
    class foo {
      static const CORBA::Short s;
    };
    // foo.cc
    const CORBA::Short foo::s = 20;
  currently generated:
    class foo {
      static const CORBA::Short s = 20;
    };
  which does not work with most C++ compilers (because of the static
  member initialization)
- support for _out types (I think it is sufficient to typedef _var _out,
  because our _var types already do what _out is supposed to do)
- add in(), out(), inout() methods to _var templates, which requires
  separate templates for fixed and variable length _var types, because of
  differing returns types for those methods for fixed and variable length
  types


[39;10.03.98;KR]

Avoid array assignments in generated code, because this does not work
for C++ compilers != GNU C++.


[38;05.11.97;AP]

tools/ir-browser/TransportLayer.java::receiveString() should throw
exception if connection to diiproxy is lost.


[37;05.11.97;AP]

Parser in tools/ir-browser can not handle strings like '..\'..'


[36;31.08.97;AP;22.11.97;AP]

Should write a little demo that demonstrates the ORB-interoperability
between MICO and Orbix (perhaps the Orbix-grid example) and write some
docs on how to do it.


[35;27.08.97;KR;30.09.97;AP]

Sequences of arrays cause trouble, for instance

  typedef short arr[1][2];
  typedef sequence<arr> arrseq;
  interface foo { void f (in arrseq a); }

does not compile (causes trouble with vector<>), because arrseq is mapped to

  typedef SequenceTmpl<arr> arrseq;

Possible solution(?):

  typedef SequenceTmpl<arr_var> arrseq;


[34;19.08.97;KR]

in generated client stub and server code check that any insertion/extraction
does not fail, e.g.:
  assert (a >>= something)


[33;19.08.97;KR;19.08.97;KR]

operators <<= and >>= do not work properly for sequence<octet> and
sequence<boolean>: <<= sets the any-typecode always to sequence<char>
and >>= can only unpack sequence<char>...

To solve this problem we should define three wrapper classes CharWrapper,
OctetWrapper, BooleanWrapper that behave like Char, Octet, Boolean and have
distinguisable type. sequence<char>, sequence<octet>, sequence<boolean>
should then be mapped to SequenceTmpl<CharWrapper>, SequenceTmpl<OctetWrapper>,
SequenceTmpl<BooleanWrapper>.

NOTE BY AP: there is actually a similar problem with typedef's. If you
have something like:

struct SS {
  //...
};
typedef SS SS1;

then the IDL-compiler will generate _tc_SS as well as _tc_SS1 (note
that these two TypeCodes are distinct). The IDL to C++ mapping says
that aliases are mapped to C++ typedef. But then the two types are no
longer distinguishable. This poses a problem for the marshalling
functions <<= and >>=. This would actutally require a wrapper as
well. There seems to be something missing in the CORBA specs.


[32;21.07.97;KR;18.08.97;AP]

for

  struct foo {
    string<5> str;
  };

the generated <<= and >>= operators are wrong, they look like:

  return (a.struct_put_begin() &&
    (a <<= ((foo&)s).str) &&
    a.struct_put_end() );

but should look like:

  return (a.struct_put_begin() &&
    (a <<= CORBA::Any::from_string (((foo&)s).str, 5)) &&
    a.struct_put_end() );


[31;21.07.97;KR;18.08.97;AP]

  typedef string foo;
  interface X {
    void f (in foo s);
  };

is mapped to

  typedef char *foo;
  void f (foo s);

but should be mapped to:

  typedef char *foo;
  void f (const foo s);


[30;27.06.97;KR;16.08.97;AP]

Generate docs in book format.


[29;19.06.97;KR;21.06.97;AP]

Use Request_var instead of Request_ptr in generated stub methods.


[28;08.06.97;AP;19.06.97;KR]

Historic entry: I finally was able to run the complete code generation
of idlgen with the help of a remote IR! I noticed that while idlgen
was processing that messages like "shutting down idle connection"
came up. Well, you might call the connection between idlgen and ird
anything you want, but not idle! What determines when a connection
is idle?
kay: this was caused by a IDLType created in idlgen, such that ird had
to call back objects in idlgen, which rarely occured -- causing those
"shutting down idle conn" messages.


[27;08.06.97;AP;19.06.97;KR]

If idlgen is called twice with the same *.idl file, the generated
typecodes are different. Something must be wrong with TypeCode::stringify().
This is definitely true for ir.idl!
kay: this was caused by alignment gaps which were not initialized.


[26;07.06.97;AP]

_narrow Method fails if argument is a _nil() object (crashes somewhere
in Object::_ior()). For the moment I'm avoiding the problem by generating
some extra code in operator>>=( Any, XXX_ptr ).


[25;26.05.97;KR;27.05.97;AP]

generated operator<<= (Any &, const SequenceTmpl<Obj_var> &) does not
compile.


[24;22.05.97;KR;22.06.97;AP]

in SKEL::invoke() do a CORBA::release() on object ref output/result
values after marshalling them; or just use *_var instead of *_ptr.


[23;18.05.97;KR;26.05.97;AP]

idlgen:
use TypeCode::stringify() to generate stringified typecodes.


[22;04.05.97;AP;16.05.97;KR]

The directories in test/idl/[3-8] now contain a file called
"expected-stdout". The "demo" executable should generate exactly this
output (except for the first line of stdout which always gives the IOR
String of the object reference). One could further automate the test by
adding a little script for the comparison the stdout of demo with the
content of expected-stdout.


[21;04.05.97;AP;16.04.97;KR]

could we change the prototype from_string( char *, ... ) to from_string(
const char *, ... )?
kay: doesnt work because the char* parameter may be freed in Any. Besides
this the CORBA spec says it has to be char *.


[20;26.04.97;KR;15.05.97;AP]

idlgen bugs:
- use mk_constant() on generated _tc_* constants
- make a _duplicate() in generated interface class constructors
- in SKEL::invoke(): string_free() string input parameters after user
  code has been called ?!
- in SKEL::invoke(): free pointer out params and result after they have
  been put into Any ?!
- "in" struct arguments are mapped to: "const S", but should be mapped to
  "const S &" ?!
- variable length structs as in params do not work, see demo/dii-gui/account.*
- generated interface class is both derived from Object and contains an
  Object...
- operator <<= and >>= for T_ptr (where T is an interface) are missing
- in stub methods returning strings the following code is generated:
	char *STUB::f ()
	{
		CORBA::String_var res;
		any >>= res;
		return res;
	}
  which is wrong, because String_var frees string when leaving function.


[19;27.04.97;AP;28.04.97;KR]

The version number in doc/doc.tex (the one displayed in the titlepage of
the document) should not be hard-coded.


[18;27.04.97;AP;28.04.97;KR]

doc/index.html should be changed, so that the URL to the MICO web
counter is only activated after a "make release". Otherwise one can't
load doc/index.html from within the mico directory.


[17;27.04.97;AP;28.04.97;KR]

doc/Makefile should be changed so that bibtex is invoked and latex
called another time.


[16;27.04.97;AP;28.04.97;KR]

Dependency in the test/idl/[1-7] directories are set to $(IDL) but need
to be set to $(IDLGEN). I.e. we need both macros: IDL and IDLGEN to be
defined in MakeVars.


[15;21.04.97;KR;15.05.97;AP]

memory management in ir/ir.cc and idl/*.cc is a joke.
(Comment by AP: this is due to the fact that this code eventually
will be replaced by the generated code of idlgen. Doing things
properly now would involve a lot of extra (and unnecessary) work)


[14;17.04.97;KR;22.04.97;AP]

idlgen/ir: fix String_var::operator char*() related bug.


[13;15.04.97;KR]

idlgen: do an assert(0) if an unknown method is invoked on an object.


[12;15.04.97;KR]

idlgen: when extracting from Any always do it the following way:
	assert (any >>= x);


[11;15.04.97;KR]

idlgen: free request struct in client proxy.


[10;13.04.97;AP;15.04.97;KR]

dii-test: I don't like the logic of the "Server" menu. This menu should
have two entries: "Bind..." and "Invoke...". Bind needs to be called
exactly once. Here the user is prompted for an interface name the Java
GUI should bind to. Only after the bind succeeds the "Invoke" menu
option should be enabled. The "Invoke" option should therefore not need
to prompt the user for any information.


[9;13.04.97;AP;18.04.97;KR]

Add a step-by-step tutorial for the Java DII interface in
doc/FrameDescription.html


[8;13.04.97;AP]

dii-test: after loading a demo-CG from the demo menu, the context menus
(right mouse button) don't work anymore.


[7;13.04.97;AP;22.04.97;AP]

Setup a MICO mail alias for mico@cs.uni-frankfurt.de.


[6;13.04.97;AP;18.04.97;KR]

Setup a mailing list for MICO.


[5;13.04.97;AP;15.04.97;KR]

dii-test: Dialog box "Server/Invoke..." change text: "Object Spec" ->
"Interface Name".


[4;13.04.97;AP;15.04.97;KR]

dii-test: graceful exit if CGs syntax is not right. I managed to crash
it fairly easy.

[3;13.04.97;AP]

dii-test: Canvas flashes strangly when doing something with a CG.


[2;13.04.97;AP;15.04.97;KR]

dii-test: change text of button: "Start DII GUI" -> "Start DII demo"


[1;13.04.97;AP;15.04.97;KR]

dii-test: after pressing the "Start DII GUI" button, a text should
appear underneath: "Please wait while loading applet..."

