SYNOPSIS
        int exec(object new, object old)

DESCRIPTION
        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.

EXAMPLE
        ob = clone_object("std/player");
        exec(ob, this_object());
        destruct(this_object());

HISTORY
        LDMud 3.2.9 added the switchover of this_interactive().

SEE ALSO
        connect(M), disconnect(M), logon(A), interactive(E)
