GESCHUETZT
SYNOPSIS
        #include <objectinfo.h>

        mixed * object_info(object ob, int what)
        mixed * object_info(object ob, int what, int index)

BESCHREIBUNG
        Liefert einige interne Informationen ueber das Objekt <ob> in Form
        eines Arrays. Das Argument <what> gibt an, welche Informationen
        geliefert werden.

        Das Resultat ist normalerweise ein Array. Wird jedoch <index>
        spezifiziert, wird nur der Wert geliefert, der im Array an der
        Position <index> stehen wuerde.

        Die moeglichen Werte fuer <what> und die Indizes des gelieferten
        Arrays sind in <objectinfo.h> definiert und muessen eingebunden
        werden. Diese Definitionen koennen sich in zukuenftigen Versionen
        des Drivers aendern!

        <what> == OINFO_BASIC:

        Dieser Aufruf liefert grundlegende Informationen ueber <ob>:
        int [OIB_HEART_BEAT]:       1, wenn <ob> einen heart_beat() hat,
                                    sonst 0.
        int [OIB_IS_WIZARD]:        1, wenn <ob> ein Gott ist (das
                                    Wizard Flag gesetzt hat), sonst 0. Der
                                    Eintrag ist immer 0, wenn set_is_wizard()
                                    nicht verfuegbar ist.
        int [OIB_ENABLE_COMMANDS]:  1, wenn <ob> Kommandos geben darf, sonst 0.
        int [OIB_CLONE]:            1, wenn <ob> ein Clon ist, sonst 0.
        int [OIB_DESTRUCTED]:       1, wenn <ob> zerstoert wurde, sonst 0.
        int [OIB_SWAPPED]:          1, wenn <ob> geswapt wurde, sonst 0.
        int [OIB_ONCE_INTERACTIVE]: 1, wenn <ob> einmal interaktiv war,
                                    sonst 0.
        int [OIB_RESET_STATE]:      1, wenn <ob> im gleichen Zustand wie nach
                                    einem reset() ist, sonst 0.
        int [OIB_WILL_CLEAN_UP]:    1, wenn <ob> clean_up() aufruft, sonst 0.
        int [OIB_LAMBDA_REFERENCED]:1, wenn <ob> Lambdas beinhaltet, sonst 0.
        int [OIB_SHADOW]:           1, wenn <ob> ein Schatten uebergeworfen
                                    wurde, sonst 0.
        int [OIB_REPLACED]:         1, wenn das Programm von <ob> ersetzt
                                    wurde (mit replace_program()), sonst 0.
        int [OIB_NEXT_RESET]:       Zeit bis zum naechsten Reset.
        int [OIB_TIME_OF_REF]:      Zeit des letzen Aufrufs von <ob>.
        int [OIB_REF]:              Anzahl Aufrufe von <ob>.
        int [OIB_GIGATICKS]:        GIGATICKS und TICKS liefern die summierten
        int [OIB_TICKS]:            Evalkosten von <ob>.
        int [OIB_SWAP_NUM]:         Die Swap-Nummer von <ob>s Programm, oder
                                    -1, wenn <ob> nicht geswapt wurde.
        int [OIB_PROG_SWAPPED]:     1, wenn <ob>'s Programm geswapt wurde,
                                    sonst 0.
        int [OIB_VAR_SWAPPED]:      1, wenn <ob>'s Variablen geswapt wurden,
                                    sonst 0.
        int [OIB_NAME]:             der Objektname von <ob>.
        object [OIB_NEXT_ALL]:      das naechste Objekt in der Objektliste.
        object [OIB_PREV_ALL]:      das vorherige Objekt in der Objektliste.

        <what> == OINFO_POSITION:

        Dieser Aufruf liefert Informationen ueber die Position von <ob> in der
        globalen Objektliste:

        object [OIP_NEXT]:          naechstes Objekt in der Objektliste.
        object [OIP_PREV]:          vorheriges Objekt in der Objektliste.
        int [OIP_POS]:              die Position von <ob> in der Objektliste,
                                    beginnend von 0 aufwaerts.

        Dieser Aufruf kann aufwendig an Rechenzeit sein.

        <what> == OINFO_MEMORY:

        Dieser Aufruf liefert Informationen ueber Speichernutzung von <ob>.

        int [OIM_REF]:                Anzahl Referenzierungen von <ob>.
        string [OIM_NAME]:            Name von <ob>.
        int [OIM_PROG_SIZE]:          Programmgroesse.
        int [OIM_NUM_FUNCTIONS]:      Anzahl Funktionen in <ob>.
        int [OIM_SIZE_FUNCTIONS]:     Speicherbedarf der Funktionen
        int [OIM_NUM_VARIABLES]:      Anzahl Variablen im Programm.
        int [OIM_SIZE_VARIABLES]:     Speicherbedarf der Variablen.
        int [OIM_NUM_STRINGS]:        Anzahl Strings im Programm.
        int [OIM_SIZE_STRINGS]:       Speicherbedarf der String-Pointer.
        int [OIM_SIZE_STRINGS_DATA]:  Speicherbedarf der String-Daten,
                                      korrigiert um das Ausmass des Daten-
                                      Sharing.
        int [OIM_SIZE_STRINGS_TOTAL]: unkorrigierter Speicherbedarf der
                                      String-Daten.
        int [OIM_NUM_INCLUDES]:       Anzahl Includefiles im Programm.
        int [OIM_NUM_INHERITED]:      Anzahl inheriter Programme.
        int [OIM_SIZE_INHERITED]:     Speicherbedarf der Inherits.
        int [OIM_TOTAL_SIZE]:         Gesamter Speicherbedarf des Programms.
        int [OIM_DATA_SIZE]:          Gesamte Speicherbedarf der Variablenwerte
                                      des Objekts <ob>, korrigiert um das
                                      Ausmass des Daten-Sharings.
        int [OIM_DATA_SIZE_TOTAL]:    unkorrigierter Gesamter Speicherbedarf
                                      der Variablenwerte des Objekts.
        int [OIM_NO_INHERIT]:         1, wenn das Programm nicht inheritet
                                      werden kann.
        int [OIM_NO_CLONE]:           1, wenn das Programm / der Blueprint
                                      nicht geclont werden kann.
        int [OIM_NO_SHADOW]:          1, wenn dem Objekt kein Shadow
                                      uebergeworfen werden darf.

        Dieser Aufruf holt das Programm aus dem Swap, falls notwendig.
        Die OIM_SIZE_xxx-Eintraege zeigen nur den Speicherbedarf der
        Strukturen / Pointer an, nicht aber den Speicherbedarf von
        Variablenwerten, Funktionscode oder der Strings selbst.


GESCHICHTE
        Eingefuehrt in LDMud 3.2.6.
        Aenderungen in LDMud 3.2.7:
          - neues Kriterium OIB_REPLACED.
          - das Kriterium OIB_IS_WIZARD ist immer 0, wenn set_is_wizard()
            nicht verfuegbar ist.
          - das Kriterium OIB_APPROVED wurde entfernt.
        LDMud 3.2.8 fuehrte neu OIM_DATA_SIZE im Resultat von OINFO_MEMORY ein.
        LDMud 3.2.9 erweiterte OINFO_MEMORY um den Index Mechanismus,
            OIM_NUM_INCLUDES, OIM_NO_INHERIT, OIM_NO_SHADOW, OIM_NO_CLONE,
            OIM_SIZE_STRINGS_DATA, OIM_SIZE_STRINGS_TOTAL, und
            OIM_DATA_SIZE_TOTAL

SIEHE AUCH
        debug_info(E)
