SYNOPSIS
        string program_name()
        string program_name(object obj)

BESCHREIBUNG
        Liefert den Name des Programms, aus dem <obj> kompiliert wurde.
        Wenn <obj> nicht angegeben wird, wird standardmaessig this_object()
        verwendet.

        Der Name ist fuer Clones der Name des Files, aus dem der Blueprint
        kompiliert wurde. Der Name wechselt, wenn ein Objekt sein Programm
        durch replace_program() aendert.

        Fuer den Spezialfall, dass <obj> als 0 uebergeben wird, liefert
        program_name() 0 zurueck.

        Der Name endet immer mit '.c'. Er beginnt mit einem '/', wenn der
        Driver sich nicht im Compat Modus befindet.

BEISPIELE
        object o;
        o = clone_object("/std/dings");
        write(program_name(o));

        liefert:
        --> "/std/dings.c", wenn der Driver nicht im Compat Modus laeuft.
        --> "std/dings.c", wenn der Driver im Compat Modus laeuft.

ANMERKUNGEN
        Die Efun swapt das Programm ein, wenn dieses ausgelagert ist.

GESCHICHTE
        Eingefuehrt in LDMud 3.2.6.
        Seit 3.2.9 ist das Argument 0 erlaubt.

SIEHE AUCH
        clone_object(E), clonep(E), load_name(E), load_object(E),
        object_name(E), replace_program(E)
