GESCHUETZT
SYNOPSIS
        #include <sys/functionlist.h>
        #include <sys/lpctypes.h>

        *mixed variable_list(object obj, int flags = RETURN_FUNCTION_NAME);

BESCHREIBUNG
        Liefert ein Array mit Informationen ueber die Variablen von <obj>.
        Fuer jede Variable werden 1 bis 4 Werte in diesem Array gespeichert,
        abhaengig von <flags>. Die Resultate werden in dieser Reihenfolge
        im Array abgespeichert:
          - der Name der Variablen
          - die Flags der Variablen (siehe weiter unten)
          - der Rueckgabetyp (gemaess mudlib/sys/lpctypes.h)
          - der Wert der Variablen

        <obj> kann als Objekt oder als Dateinamen uebergeben werden. Im
        zweiten Fall versucht variable_list() nicht, das Objekt vor der
        Verarbeitung zu laden.

        Wenn <obj> nicht das aufrufende Objekt ist und der Wert der Variablen
        abgefragt wird, erzeugt dies eine Schutzverletzung ("variable_list",
        <obj>).

        Mit <flags> wird festgelegt, welche Informationen ueber welche
        Variablen abgefragt werden. Folgende Flags aus <sys/functionlist.h>
        koennen mit binaerem Oder kombiniert werden:

        Auswahl der gesammelten Information:
            RETURN_FUNCTION_NAME    liefert den Namen der Variablen
            RETURN_FUNCTION_FLAGS   liefert die Flags der Variablen (s. unten)
            RETURN_FUNCTION_TYPE    liefert den Rueckgabetyp
            RETURN_VARIABLE_VALUE   liefert den Wert der Variablen

        Auswahl der Variablen, die ausgewertet werden:
            NAME_INHERITED        schliesst geerbte Variablen aus
            TYPE_MOD_STATIC       schliesst "static" deklarierte Variablen aus
            TYPE_MOD_NOSAVE       schliesst "nosave" deklarierte Variablen aus
            TYPE_MOD_PRIVATE      schliesst "private" deklarierte Variablen aus
            TYPE_MOD_PROTECTED    schliesst "protected" deklarierte Variablen
                                  aus
            NAME_HIDDEN           enthaelt Variablen, die geerbt wurden.

        Die Flags der Variablen koennen die Auswahl-Flags enthalten und
        zusaeztlich folgende Werte:
            TYPE_MOD_VIRTUAL      die Variable wurde virtuell geerbt
            TYPE_MOD_NO_MASGK     die Variable ist "nomask" deklariert
            TYPE_MOD_PUBLIC       die Variable ist "public" deklariert

        All diese Flags sind in mudlib/sys/functionlist.h definiert und
        sollten an einen allgemein zugaenglichen Platz kopiert werden.
        Die Rueckgabewerte sind in mudlib/sys/lpctypes.h definiert, die
        auch in die Mudlib kopiert werden sollten.

AENDERUNGEN
        Eingefuehrt in LDMud 3.2.10

SIEHE AUCH
        inherit_list(E), functionlist(E), variable_exists(E)
