int exec(object new, object old)
exec() switches the connection from the interactive object old
to the object new. If the new object is also interactive, it's
connection will be transferred to the old object, thus
exchaning the two connections between the object. If the new
object is not interactive, the old will not be interactive
anymore after the exec call succeeded.
The result is 1 on success, and 0 on failure.
exec() is used to load different "user objects" or to reconnect
link dead users.
To provide security mechanisms, the interpreter calls
master->valid_exec(current_program, new, old), which must
return anything other than 0 to allow this exec() invocation.
After the exec(), if arg 2 was this_player(), this_player()
becomes arg 1, else vice versa. Ditto for this_interactive().
Take care when writing a simul-efun around exec(): the
'current_program' passed to the valid_exec() function will be
that of the simul-efun object. To get around this, use
bind_lambda() to bind #'exec to the real object and funcall()
the resulting closure.
ob = clone_object("std/player");
LDMud 3.2.9 added the switchover of this_interactive().
connect(M), disconnect(M), logon(A), interactive(E)