SYNOPSIS
        string program_name()
        string program_name(object|lwobject obj)

DESCRIPTION
        Returns the name of the program of <obj>, resp. the name of the
        program of the current object if <obj> is omitted.

        The returned name is usually the name from which the blueprint
        of <obj> was compiled (the 'load name'), but changes if an object
        replaces its programs with the efun replace_program().

        As a special case, if <ob> is passed as 0, the function will
        return 0.

        The name always ends in '.c'. It starts with a '/' unless the
        driver is running in COMPAT mode.

        CAVEAT: This efun swaps in the program if it is swapped out.

EXAMPLES
        object o;
        o = clone_object("/std/thing");
        write(program_name(o));  --> writes "/std/thing.c" in !compat mode
                                        and "std/thing.c"  in compat mode

HISTORY
        Introduced in LDMud 3.2.6.
        LDMud 3.2.9 allowed a 0 argument.

SEE ALSO
        clone_object(E), clonep(E), load_name(E), load_object(E),
        object_name(E), replace_program(E)
