GESCHUETZT
SYNOPSIS
        #include <functionlist.h>
        #include <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 <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 <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 <functionlist.h>, die Rueckgabewerte in
        <lpctypes.h> definiert.

GESCHICHTE
        Eingefuehrt in LDMud 3.2.10.

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