To Do

This list includes only the implementation details that must be fixed.
It does not include all of the planned extensions to the current system.

0. Finish and merge the "autoconf" files.

1. Return a USEFUL error message if a server error occurs.

2. Don't assign -1 to "clock_t" variables since "clock_t" is defined as
   unsigned on some machines.  Note that this does NOT affect the correct
   execution of the system.  It is merely ugly.

3. Fix the following bug: If the agent programmer defines an upvar reference
   to an element of the "env" array and then jumps, the upvar reference
   disappears.  Note that this problem only occurs with the "env" array.

4. Make agentJump check for "localhost" when deciding if we are jumping to
   the same machine.

5. Improve the error logging facilities in the server.

6. Fix the following bug:  If you use Tcl_RecordAndEval, Tcl_GlobalEval or
   Tcl_EvalFile to evaluate a Tcl script AND the stack is not empty AND the
   script jumps to another machine, the script might break once it is
   restored on the remote machine.  This is because some of the state 
   associated with these three procedures that is not captured correctly.

7. Make the state restoration process more robust by checking if each
   variable or procedure already exists. 

8. Make the server have both a TCP/IP domain socket and a Unix domain socket.  
   Agents on the same machine as the server will use the Unix socket.

9. Make a C library routine that is equivalent to "set mask(...) ...".

10. Make a C API that is independent of Tcl.

11. Add timeouts to all of the accept's inside the server.

12. Fix the following bug: gets, puts and read can be interrupted 
    unexpectedly due to an agent's internal use of SIGIO.

13. Add timeouts to tcpip_getip, accept_meeting, agent_accept, agent_meet,
    get_meeting, reject_meeting and sigio_on.  Note that sigio_on is an
    internal procedure NOT a Tcl command.

14. Improve the efficiency of the MASK_SET class.

15. Add a "permit" array which keeps track of the current permits -- e.g.
    the amount of wall time remaining for the current section of code.

16. Fix the following bug: tcpip_connect can connect asynchronously even 
    after returning with an error.

17. Fix the following bug: tclStackLoad allocates too much memory for each
    stack element.

18. Fix the following bug: tclStackSave saves extraneous program text when 
    the stack element contains a command substitution.

19. Add C library functions that are the equivalent of "tcpip_read ... to ..."
    and "tcpip_write ... from ...".

20. Carry the mask information from machine to machine.  Currently the masks
    reset to their default values after a jump.

21. Carry the permit information from machine to machine.  Currently all
    active permits disappear after a jump.

22. Add a facility so that Tcl extensions can register their own state 
    handlers.  These state handlers would save and restore the state of 
    the extension on a jump.

23. Add a SIGHUP handler to the server so that you can refresh the server
    tables without restarting the server

24. Make "agent_select" work for meeting connection as well as arriving data
    on a meeting connection.

25. Add event handlers in Tk for meeting connection and for data arriving on
    a meeting connection.

26. Sending information to a named agent should fail if the named agent does
    not exist.  Currently the information is cached until an agent requests
    the given name and then forwarded.  We will add a "wait for name to come
    into existence" facility so that agents can wait for another agent to
    show up.

27. Improve the TCP/IP package so that it explicitly keeps track of which
    sockets are open, connected, etc.

28. Impose maximum string lengths in many places throughout the system.

29. Handle machines that have multiple IP addresses.

30. Combine Agent_ServerMain and AgentTk_ServerMain since they are almost
    exactly the same.
