DEPRECATED
SYNOPSIS
        int transfer(object item, object dest)

DESCRIPTION
        This efun is for backward compatibility only. It is only
        available in compat mode.

        Move the object "item" to the object "dest". All kinds of
        tests are done, and a number is returned specifying the
        result:

        0: Success.
        1: To heavy for destination.
        2: Can't be dropped.
        3: Can't take it out of it's container.
        4: The object can't be inserted into bags etc.
        5: The destination doesn't allow insertions of objects.
        6: The object can't be picked up.

        If an object is transfered to a newly created object, make
        sure that the new object first is transfered to it's
        destination.

        The efun calls add_weight(), drop(), get(), prevent_insert(),
        add_weight(), and can_put_and_get() where needed.

REPLACEMENT
        This efun can easily be replaced with a simul_efun:

        /*--------------------------------------------------------*/
        int transfer(object item, object dest)
        {
            int weight;
            object from;

            efun::set_this_object(previous_object());

            weight = item->query_weight();
            if (!item)
                return 3;

            from = environment(item);
            if (from)
            {
                /*
                 * If the original place of the object is a living object,
                 * then we must call drop() to check that the object can be
                 * dropped.
                 */
                if (living(from))
                {
                    if (item->drop() || !item)
                        return 2;
                }
                /*
                 * If 'from' is not a room and not a player, check that we may
                 * remove things out of it.
                 */
                else if (environment(from))
                {
                    if (!from->can_put_and_get() || !from)
                        return 3;
                }
            }

            /*
             * If the destination is not a room, and not a player,
             * Then we must test 'prevent_insert', and 'can_put_and_get'.
             */
            if (environment(dest) && !living(dest))
            {
                if (item->prevent_insert())
                    return 4;
                if (!dest->can_put_and_get() || !dest)
                    return 5;
            }

            if (living(dest))
            {
                if (!item->get() || !item)
                    return 6;
            }

            /*
             * If it is not a room, correct the total weight in the
             * destination.
             */
            if (environment(dest) && weight)
            {
                if (!dest->add_weight(weight) || !dest)
                    return 1;
            }

            /*
             * If it is not a room, correct the weight in the 'from' object.
             */
            if (from && environment(from) && weight)
            {
                from->add_weight(-weight);
            }

            move_object(item, dest);

            return 0;
        }
        /*--------------------------------------------------------*/


HISTORY
        Deprecated in LDMud 3.3; available only when compiled with
          USE_DEPRECATED.

SEE ALSO
         move_object(E), drop(A), get(A), prevent_insert(A),
         can_put_and_get(A), add_weight(A)
