SYNOPSIS
        string load_name()
        string load_name(object obj)
        string load_name(string obj)

DESCRIPTION
        Return the load name for the object <obj> which may be given
        directly or by its name.

        If <obj> is a clone, return the load_name() of <obj>'s blueprint.
        If <obj> is a blueprint, return the filename from which the
        blueprint was compiled.

        If <obj> is given by name but not/no longer existing, the
        function synthesizes the load name as it should be and returns
        that. If the given name is illegal, the function returns 0.

        As a special case, if <ob> is 0, the function returns 0.

        For virtual objects this efun of course returns the virtual filename.
        If <obj> is omitted, the name for the current object is returned.

        In contrast to the object_name(), the load name can not be changed
        by with rename_object(). However, if an object uses replace_program()
        the load name no longer reflects the actual behaviour of an object.

        The returned name starts with a '/', unless the driver is running
        in COMPAT mode.

EXAMPLE
        object o;
        o = clone_object("/std/thing");
        write(load_name(o));  --> writes "/std/thing" in !compat mode
                                     and "std/thing"  in compat mode
        write(load_name("/std/thing"));  --> same as above
        write(load_name("/std/thing#4n5")); --> writes 0

HISTORY
        Introduced in LDMud 3.2.6.
        Strings are accepted as arguments since 3.2.8.
        0 is accepted as argument since 3.2.9.

SEE ALSO
        clone_object(E), clonep(E), object_name(E), load_object(E),
        replace_program(E), program_name(E), present_clone(E)
