debug_info()
************


DEPRECATED
==========


SYNOPSIS
========

   #include <debug_info.h>

   mixed debug_info(int flag)
   mixed debug_info(int flag, mixed arg)
   mixed debug_info(int flag, mixed arg2, mixed arg3)


BESCHREIBUNG
============

   Sammelt entsprechend den Angaben in <flag> gewisse intere Debuginfos
   des Treibers. <flag> kann dabei folgende in debug_info.h definierte
   Werte enthalten:

   DINFO_OBJECT   (0): Angezeigt werden Informationen zum in <arg>
       spezifizierten Objekt, zum Beispiel heart_beat,
       enable_commands etc. Die Funktion liefert 0 zurueck.

   DINFO_MEMORY   (1): Angezeigt werden Informationen zu
       Speicherbelegung und -ausnutzung des in <arg> spezifizierten
       Objekts, zum Beispiel Anzahl Strings, Variablen, geerbte Files,
       Objektgroesse etc. Die Funktion liefert 0 zurueck.

   DINFO_OBJLIST  (2): debug_info() liefert Objekte aus der globalen
       Objektliste. Wenn <arg2> nicht angegeben wird, wird das erste
       Element aus der Objektliste gelierfert, wenn <arg2> eine Zahl n
       ist, das n-te Element. Ist <arg2> ein Objekt, werden die
       nachfolgenden Objekte in der Objektliste zurueck geliefert.
       Das optionale Argument <arg3> bezeichnet die Anzahl zurueck
       gelieferter Objekte. Wenn <arg3> 0 ist, wird ein einzelnes
       Objekt zurueck geliefert. Wenn <arg3> eine Zahl m enthaelt, wird
       ein Array mit hoechstens m Elementen zurueck geliefert. Auf
       diese Weise kann ein Array mit saemtlichen Objekten im Spiel
       erzeugt werden, wenn fuer <arg3> __INT_MAX__ gesetzt wird (eine
       entsprechende maximale Arraygroesse vorausgesetzt).

   DINFO_MALLOC   (3): Entsprichend der Eingabe des 'malloc'-Kommandos.
       Es muessen keine weiteren Argumente angegeben werden.

   DINFO_STATUS   (4): Angezeigt wird die Statusinformation des Drivers.
       Optional kann das Argument <arg> die Werte 0, "tables", "swap",
       "malloc" oder andere vom Driver akzeptierte Argumente enthalten.
       Das Resultat ist ein druckbarer String, der die Statusinformation
       enthaelt, oder 0, wenn ein ungueltiges Argument angegeben wurde.

   DINFO_DUMP     (5): Die durch <arg2> angeforderte Information wird
       in ein File geschrieben, das man mit <arg3> angeben kann. Wird
       <arg3> nicht angegeben, wird eine Standarddatei verwendet.
       debug_info() ueberprueft mittels master->valid_write(), ob es
       das File schreiben kann. Falls bereits eine entsprechende Datei
       existiert, wird diese ueberschrieben. Die Funktion liefert 1
       bei Erfolg, 0 sonst.

       <arg2> == "objects": liefert Informationen ueber alle Objekte im
           Spiel und schreibt diese standardmaessig in die Datei
           /OBJ_DUMP, dem valid_write() wird 'objdump' uebergeben.
           Die Datei enthaelt fuer jedes Objekt eine Zeile, in der
           jeweils folgende Informationen aufgelistet sind:
             - Name des Objekts (object_name)
             - Groesse im Speicher, gemeinsamer genutzter Speicher nur
               einmal gezaehlt
             - Groesse im Speicher, wenn es keine gemeinsam genutzte
               Daten geben wuerde
             - Anzahl Referenzen
             - 'HB', wenn das Objekt einen heart_beat hat, sonst nichts.
             - der Name der Umgebung oder '--', wenn das Objekt keine
               Umgebung hat
             - in Klammern die Anzahl der durch das Objekt verursachten
               Verarbeitungsschritten (execution ticks)
             - der Swap-Status:
                 > nichts, wenn das Objekt nicht geswapt wurde
                 > 'PROG SWAPPED', wenn nur das Programm geswapt wurde
                 > 'VAR SWAPPED', wenn nur die Variablen geswapt wurden
                 > 'SWAPPED', wenn beide geswapt wurden
             - die Zeit, zu der das Objekt geladen wurde.

       <arg2> == "destructed": liefert Informationen ueber alle
           zerstoerten Objekte und schreibt diese standardmaessig in
           die Datei /DEST_OBJ_DUMP, dem valid_write() wird 'objdump'
           uebergeben. Die Datei enthaelt fuer jedes Objekt eine Zeile,
           in der jeweils folgende Informationen aufgelistet sind:
             - Name des Objekts (object_name)
             - Anzahl der Referenzen
             - 'NEW', wenn das Objekt in diesem Verarbeitungszyklus
               zerstoert wurde, nichts wenn es bereits fruehre zerstoert
               worden war.

       <arg2> == "opcodes": liefert Nutzungsinformationen ueber die
           opcodes. Standardmaessig wird in die Datei /OPC_DUMP
           geschrieben. valid_write() wird 'opcdump' uebergeben.

       <arg2> == "memory": liefert eine Liste aller allokierten
           Speicherbloecke.
           Standardmaessig wird in die Datei /MEMORY_DUMP geschrieben;
           valid_write() wird 'memdump' uebergeben.  Existiert die
           Datei bereits, werden die neuen Daten angehaengt.
           Wenn der Allokator einen Speicherabzug nicht unterstuetzt,
           wird keine Datei geschrieben und immer 0 zurueckgegeben.
           Diese Funktion ist am nuetzlichsten wenn der Allokator
           mit MALLOC_TRACE und MALLOC_LPC_TRACE kompiliert
           wurde.


   DINFO_DATA    (6): Liefert Rohdaten ueber gewisse, durch <arg2>
       spezifizierte Aspekte des Treibers. Das Resultat der Funktion ist
       ein Array mit der Information oder 0, falls <arg2> keinen
       gueltigen Wert enthalten hat.
       Ist <arg3> eine Zahl, die kleiner ist als die Anzahl Elemente im
       Resultat-Array, liefert die Funktion nur das entsprechende
       Element zurueck.
       Zulaessige Werte fuer <arg2> sind: DID_STATUS, DID_SWAP und
       DID_MALLOC.

       <arg2> == DID_STATUS (0): Liefert die "status" und "status table"
           Information. Folgende Indizes sind definiert:
             - int DID_ST_BOOT_TIME
                   die Zeit (time()), zu der das Mud gestartet wurde
             - int DID_ST_ACTIONS
             - int DID_ST_ACTIONS_SIZE
                   die Anzahl und Groesse im Speicher der allozierten
                   Actions.
             - int DID_ST_SHADOWS
             - int DID_ST_SHADOWS_SIZE
                   Anzahl und Groesse im Speicher aller allozierten
                   Shadows.
             - int DID_ST_OBJECTS
             - int DID_ST_OBJECTS_SIZE
                   Anzahl und Groesse im Speicher aller Objekte.
             - int DID_ST_OBJECTS_SWAPPED
             - int DID_ST_OBJECTS_SWAP_SIZE
                   Anzahl und Groesse im Speicher der geswapten
                   Variablenbloecke der Objekte
             - int DID_ST_OBJECTS_LIST
                   Anzahl Objekte in der Objektliste
             - int DID_ST_OBJECTS_NEWLY_DEST
                   Anzahl der frisch zerstoerten Objekte (d.h. Objekte,
                   die in diesem Verarbeitungszyklus zerstoert wurden)
             - int DID_ST_OBJECTS_DESTRUCTED
                   Anzahl der zerstoerten, aber noch immer referenzierten
                   Objekte, ohne die unter DID_ST_OBJECTS_NEWLY_DEST
                   bereits gezaehlten.
             - int DID_ST_OBJECTS_PROCESSED
                   Anzahl der gelisteten Objekte, die im letzten
                   Verarbeitungszyklus verarbeitet wurden.
             - float DID_ST_OBJECTS_AVG_PROC
                   Durchschnittlicher Anteil der pro Zyklus verarbeiteten
                   Objekte, ausgedrueckt in Prozent (0 .. 1.0)
             - int DID_ST_OTABLE
                   Anzahl eingetragener Objekte in der Objekttabelle
             - int DID_ST_OTABLE_SLOTS
                   Anzahl von Hashplaetzen, die von jeder Objekttabelle
                   bereitgestellt werden
             - int DID_ST_OTABLE_SIZE
                   Durch die Objekttabelle belegter Speicher
             - int DID_ST_HBEAT_OBJS
                   Anzahl Objekte mit einem heart_beat()
             - int DID_ST_HBEAT_CALLS
                   Anzahl aktiver heart_beat() Zyklen bisher (d.h.
                   Zyklen, in denen mindestens eine heart_beat() Funktion
                   aufgerufen wurde)
             - int DID_ST_HBEAT_CALLS_TOTAL
                   Gesamtzahl von heart_beat() Zyklen bisher.
             - int DID_ST_HBEAT_SLOTS
             - int DID_ST_HBEAT_SIZE
                   Anzahl und Groesse aller allozierten Eintraege in der
                   heart_beat() Tabelle.
             - int DID_ST_HBEAT_PROCESSED
                   Anzahl heart_beat()s im letzten Zyklus
             - float DID_ST_HBEAT_AVG_PROC
                   Durchschnittlicher Anteil der pro Zyklus aufgerufenen
                   heart_beat()s, ausgedrueckt in Prozent (0 .. 1.0)
             - int DID_ST_CALLOUTS
                   Anzahl und Groesse aller laufenden call_out()s
             - int DID_ST_ARRAYS
             - int DID_ST_ARRAYS_SIZE
                   Anzahl und Groesse aller Arrays
             - int DID_ST_MAPPINGS
             - int DID_ST_MAPPINGS_SIZE
                   Anzahl und Groesse aller Mappings
             - int DID_ST_PROGS
             - int DID_ST_PROGS_SIZE
                   Anzahl und Groesse aller Programme
             - int DID_ST_PROGS_SWAPPED
             - int DID_ST_PROGS_SWAP_SIZE
                   Anzahl und Groesse der geswapten Programme
             - int DID_ST_USER_RESERVE
             - int DID_ST_MASTER_RESERVE
             - int DID_ST_SYSTEM_RESERVE
                   Momentane Groesse der drei Speicherreserven
             - int DID_ST_ADD_MESSAGE
             - int DID_ST_PACKETS
             - int DID_ST_PACKET_SIZE
                   Anzahl Aufrufe von add_message(), Anzahl und Groesse
                   der versendeten Pakete.
                   Wenn der Driver nicht mit COMM_STAT kompiliert wurde,
                   liefern alle drei Werte immer -1 zurueck.
             - int DID_ST_APPLY
             - int DID_ST_APPLY_HITS
                   Anzahl Aufrufen von apply_low(), und wie viele davon
                   Cache-Treffer waren. Wenn der Driver nicht mit
                   APPLY_CACHE_STAT kompiliert wurde, liefern beide
                   Werte immer -1.
             - int DID_ST_STRINGS
             - int DID_ST_STRING_SIZE
                   Anzahl unterschiedlicher Strings in der Stringtabelle,
                   sowie ihre Groesse
             - int DID_ST_STR_TABLE_SIZE
                   Groesse der String Tabelle
             - int DID_ST_STR_REQ
             - int DID_ST_STR_REQ_SIZE
                   Gesamte Anzahl von String Allokationen, und ihre
                   Groesse
             - int DID_ST_STR_SEARCHES
             - int DID_ST_STR_SEARCH_LEN
                   Anzahl Suchvorgaenge in der Stringtabelle und die
                   Gesamtlaenge des Suchstrings
             - int DID_ST_STR_FOUND
                   Anzahl erfolgreicher Suchvorgaenge
             - int DID_ST_STR_ENTRIES
                   Anzahl Eintraege (Hash Ketten) in der String Tabelle
             - int DID_ST_STR_ADDED
                   Anzahl zur String Tabelle bisher hinzugefuegter
                   Strings
             - int DID_ST_STR_DELETED
                   Anzahl aus der String Tabelle bisher geloeschter
                   Strings
             - int DID_ST_STR_COLLISIONS
                   Anzahl zu einer existierenden Hash Kette hinzugefuegte
                   Strings
             - int DID_ST_RX_CACHED
                   Anzahl gecacheter regulaerer Ausdruecke (regular
                   expressions)
             - int DID_ST_RX_TABLE
             - int DID_ST_RX_TABLE_SIZE
                   Anzahl Plaetze in der Regexp Cache Tabelle und
                   Speicherbedarf der gecacheten Ausdruecke
             - int DID_ST_RX_REQUESTS
                   Anzahl Anfragen fuer neue regexps
             - int DID_ST_RX_REQ_FOUND
                   Anzahl gefundener regexps in der regexp Cache Tabelle
             - int DID_ST_RX_REQ_COLL
                   Anzahl angefragter regexps, die mit einer bestehenden
                   regexp kollidierten
             - int DID_ST_MB_FILE
                   Die Groesse des 'File' Speicherpuffers
             - int DID_ST_MB_SWAP
                   Die Groesse des 'Swap' Speicherpuffers

       <arg2> == DID_SWAP (1): Liefert "status swap"-Information:
             - int DID_SW_PROGS
             - int DID_SW_PROG_SIZE
                   Anzahl und Groesse der geswappten Programmbloecke
             - int DID_SW_PROG_UNSWAPPED
             - int DID_SW_PROG_U_SIZE
                   Anzahl und Groesse der nicht geswappten Bloecke
             - int DID_SW_VARS
             - int DID_SW_VAR_SIZE
                   Anzahl und Groesse der geswappten Variablenbloecke
             - int DID_SW_FREE
             - int DID_SW_FREE_SIZE
                   Anzahl und Groesse der freien Bloecke in der
                   Auslagerungsdatei
             - int DID_SW_FILE_SIZE
                   Groesse der Auslagerungsdatei
             - int DID_SW_REUSED
                   Gesamter wiederverwendeter Speicherplatz in der
                   Auslagerungsdatei
             - int DID_SW_SEARCHES
             - int DID_SW_SEARCH_LEN
                   Anzahl und Gesamtlaenge der Suchvorgaenge nach
                   wiederverwendbaren Bloecken in der Auslagerungsdatei
             - int DID_SW_F_SEARCHES
             - int DID_SW_F_SEARCH_LEN
                   Anzahl und Gesamtlaenge der Suchvorgaenge nach einem
                   Block, der frei gemacht werden kann.
             - int DID_SW_COMPACT
                   TRUE wenn der Swapper im Compact-Modus laeuft
             - int DID_SW_RECYCLE_FREE
                   TRUE wenn der Swapper gerade einen freien Block
                   wiederverwendet

       <arg2> == DID_MEMORY (2): Liefert die "status malloc"-Information:
             - string DID_MEM_NAME
                   Der Name des Allokators: "sysmalloc", "smalloc",
                   "slaballoc"
             - int DID_MEM_SBRK
             - int DID_MEM_SBRK_SIZE
                   Anzahl und Groesse der Speicherbloecke, die vom
                   Betriebssystem angefordert wurden (smalloc, slaballoc)
             - int DID_MEM_LARGE
             - int DID_MEM_LARGE_SIZE
             - int DID_MEM_LFREE
             - int DID_MEM_LFREE_SIZE
                   Anzahl und Groesse der grossen allozierten bzw.
                   freien Bloecke (smalloc, slaballoc)
             - int DID_MEM_LWASTED
             - int DID_MEM_LWASTED_SIZE
                   Anzahl und Groesse der unbrauchbaren grossen
                   Speicherfragmente (smalloc, slaballoc)
             - int DID_MEM_CHUNK
             - int DID_MEM_CHUNK_SIZE
                   Anzahl und Groesse kleiner Speicherbloecke (chunk
                   blocks; smalloc, slaballoc)
             - int DID_MEM_SMALL
             - int DID_MEM_SMALL_SIZE
             - int DID_MEM_SFREE
             - int DID_MEM_SFREE_SIZE
                   Anzahl und groesse der allozierten bzw. freien
                   kleinen Speicherbloecke (smalloc, slaballoc)
             - int DID_MEM_SWASTED
             - int DID_MEM_SWASTED_SIZE
                   Anzahl und Groesse der unbrauchbar kleinen
                   Speicherfragmente (smalloc, slaballoc)
             - int DID_MEM_MINC_CALLS
             - int DID_MEM_MINC_SUCCESS
             - int DID_MEM_MINC_SIZE
                   Anzahl Aufrufe von malloc_increment(), Anzahl der
                   erfolgreichen Aufrufe und die Groesse des auf diese
                   Art allozierten Speichers (smalloc, slaballoc)
             - int DID_MEM_PERM
             - int DID_MEM_PERM_SIZE
                   Anzahl und Groesse permanenter (non-GCable)
                   Allokationen (smalloc, slaballoc)
             - int DID_MEM_CLIB
             - int DID_MEM_CLIB_SIZE
                   Anzahl und Groesse der Allokationen durch Clib
                   Funktionen (nur smalloc, slaballoc mit SBRK_OK)
             - int DID_MEM_OVERHEAD
                   Overhead fuer jede Allokation (smalloc, slaballoc)
             - int DID_MEM_ALLOCATED
                   Der Speicher, der durch die Speicherverwaltung
                   alloziert wurde, inklusive den Overhead fuer die
                   Speicherverwaltung (smalloc, slaballoc)
             - int DID_MEM_USED
                   Der Speicher, der durch den Driver belegt ist, ohne
                   den durch die Speicherverwaltung belegten Speicher
                   (smalloc, slaballoc)
             - int DID_MEM_TOTAL_UNUSED
                   Der Speicher, der vom System zur Verfuegung gestellt,
                   aber vom Treiber nicht benoetigt wird.
             - int DID_MEM_AVL_NODES          (smalloc, slaballoc)
                   Anzahl der AVL-Knoten, die zur Verwaltung der
                   freien grossen Speicherbloecke verwendet werden
                   (nur smalloc). Dieser Wert kann in Zukunft
                   wieder verschwinden.
             - mixed * DID_MEM_EXT_STATISTICS (smalloc, slaballoc)
                   Detaillierte Statistiken des Allokators sofern
                   diese aktiviert wurden; 0 anderenfalls.

                   Dieser Wert kann in Zukunft wieder verschwinden.

                   Das Array enthaelt NUM+2 Eintraege, wobei NUM
                   Anzahl der verschiedenen 'kleinen'
                   Blockgroessen ist. Eintrag [NUM] beschreibt
                   die uebergrossen 'kleinen' Bloecke, Eintrag
                   [NUM+1] beschreibt summarisch die 'grossen'
                   Bloecke. Jeder Eintrag ist ein Array mit
                   diesen Feldern:

                   int DID_MEM_ES_MAX_ALLOC:
                     Maximale Anzahl allokierter Bloecke dieser
                     Groesse.

                   int DID_MEM_ES_CUR_ALLOC:
                     Derzeitige Anzahl allokierter Bloecke dieser
                     Groesse.
                     Current number of allocated blocks of this size.

                   int DID_MEM_ES_MAX_FREE:
                     Maximale Anzahl freier Bloecke dieser
                     Groesse.

                   int DID_MEM_ES_CUR_FREE:
                     Derzeitige Anzahl freier Bloecke dieser
                     Groesse.

                   float DID_MEM_ES_AVG_XALLOC:
                     Durchschnittliche Zahl von Allokationen pro
                     Sekunde.

                   float DID_MEM_ES_AVG_XFREE:
                     Durchschnittliche Zahl von Deallokationen pro
                     Sekunde.

                 Die Durchschnittsstatistiken schliessen interne
                 Umsortierungen der Blocklisten nicht ein.


   DINFO_TRACE    (7): Liefert die 'trace' Information aus dem
       Call Stack entsprechend der Spezifikation in <arg2>. Das Resultat
       ist entweder ein Array (dessen Format nachstehend erlaeutert ist)
       oder ein druckbarer String. Wird <arg2> weggelasen entspricht
       dies DIT_CURRENT.

       <arg2> == DIT_CURRENT (0): Momentaner Call Trace
              == DIT_ERROR   (1): Letzter Fehler Trace (caught oder
                   uncaught)
              == DIT_UNCAUGHT_ERROR (2): Letzer Fehler Trace, der nicht
                   gefangen werden konnte (uncaught)

       Die Information wird in Form eines Array uebergeben.

       Die Fehlertraces werden nur geaendert, wenn ein entsprechender
       Fehler auftritt; ausserdem werden sie bei einem GC (Garbage
       Collection) geloescht. Nach einem Fehler, der nicht gefangen
       werden konnte (uncaught error), weisen beide Traces auf das
       gleiche Array, sodass der ==-Operator gilt.

       Wenn das Array mehr als ein Element enthaelt, ist das erste
       Element 0 oder der Name des Objekts, dessen heart_beat() den
       laufenden Zyklus begonnen hat; alle nachfolgenden Elemente
       bezeichnen den Call Stack, beginnen mit der hoechsten
       aufgerufenen Funktion.

       Alle Eintraege im Array sind wiederum Arrays mit folgenden
       Elementen:
         - int[TRACE_TYPE]: Der Typ der aufrufenden Funktion
               TRACE_TYPE_SYMBOL (0): ein Funktionssymbol (sollte nicht
                                      vorkommen)
               TRACE_TYPE_SEFUN  (1): eine simul-efun
               TRACE_TYPE_EFUN   (2): eine Efun Closure
               TRACE_TYPE_LAMBDA (3): eine lambda Closure
               TRACE_TYPE_LFUN   (4): eine normale Lfun
         - int[TRACE_NAME]
               _TYPE_EFUN    : entweder der Name der Funktion oder der
                               Code einer Operator-Closure
               _TYPE_LAMBDA  : die numerische Lambda-ID
               _TYPE_LFUN    : der Name der Lfun
         - string[TRACE_PROGRAM]:  Der Name des Programms mit dem Code
         - string[TRACE_OBJECT]:   Der Name des Objekts, fuer das der
                                   Code ausgefuehrt wurde
         - int[TRACE_LOC]:
               _TYPE_LAMBDA  : Der Offset des Programms seit Beginn des
                               Closure-Codes
               _TYPE_LFUN    : Die Zeilennummer.

       <arg2> == DIT_STR_CURRENT (3): Liefert Informationen ueber den
           momentanen Call Trace als druckbarer String.

       <arg2> == DIT_CURRENT_DEPTH (4): Liefert die Zahl der Frames auf
           dem Control Stack (Rekursionstiefe).

   DINFO_EVAL_NUMBER (8): gibt die Nummer der aktuellen Berechnung
       zurueck. Diese Nummer wird fuer jeden vom driver initiierten
       Aufruf von LPC-Code erhoeht, also bei Aufruf von:
         - Kommandos (die per add_action hinzugefuegt wurden)
         - heart_beat, reset, clean_up
         - Aufrufe durch call_out oder input_to
         - master applies, die auf externe Ereignisse zurueckgehen
         - driver hooks genauso
         - Rueckrufen von send_erq
         - logon in interaktiven Objekten

      Dieser Zaehler kann z.B. benutzt werden, um zu verhindern, dass
      bestimmte Aktionen mehrfach innerhalb eines heart_beat()
      ausgefuehrt werden. Eine andere Anwendungsmoeglichkeit sind
      Zeitstempel zur Sortierung zur Sortierung von Ereignissen.

      Es ist zu beachten, dass der Zaehler ueberlaufen kann, insbesondere
      auf 32-bit-Systemen. Er kann demzufolge auch negativ werden.


GESCHICHTE
==========

   Seit 3.2.7 liefert DINFO_STATUS die Information zurueck, anstatt sie
       nur auszugeben.
   DINFO_DUMP wurde in 3.2.7 eingefuehrt.
   LDMud 3.2.8 fuegte die Datengroesse des Objekts zum Resultat von
       DINFO_MEMORY hinzu, ausserdem die DINFO_DATA Abfrage und die
       verschiedenen DID_MEM_WASTED Statistiken.
   LDMud 3.2.9 fuegte DINFO_TRACE, das Indizierungs-Feature von
       DINFO_DATA, den 'destructed'-DINFO_DUMP, die DID_MEM_CLIB*,
       die DID_MEM_PERM*, ausserdem DID_ST_OBJECTS_NEWLY_DEST,
       DID_ST_OBJECTS_DEST, DID_MEM_OVERHEAD, DID_MEM_ALLOCATED,
       DID_MEM_USED, DID_MEM_TOTAL_UNUSED, DID_ST_HBEAT_CALLS_TOTAL
       und die found / added / collision Stringstatistiken.
   LDMud 3.2.10 fuegte die Erzeugungszeit zu DINFO_DUMP:"objects" hinzu,
       entfernte DID_MEM_UNUSED aus DINFO_DATA:DID_MEMORY, fuegte
       DINFO_DATA:DID_STATUS DID_ST_BOOT_TIME, DID_ST_MB_FILE und
       DID_ST_MB_SWAP hinzu und entfernte DID_ST_CALLOUT_SLOTS daraus,
       fuegte das dritte Argument zu DINFO_OBJLIST hinzu, und veraenderte
       die Bedeutung von DID_ST_CALLOUT_SIZE und DID_ST_HBEAT_SIZE
       bzw. _SLOTS.
   LDMud 3.3.533 fuegte DID_MEM_AVL_NODES zu DINFO_DATA:DID_MEMORY
       hinzu.
   LDMud 3.3.603 fuegte DID_MEM_EXT_STATISTICS zu DINFO_DATA:DID_MEMORY
       hinzu.
   LDMud 3.3.718 fuegte DIT_CURRENT_DEPTH to DINFO_TRACE hinzu.
   LDMud 3.3.719 fuegte DINFO_EVAL_NUMBER hinzu.


SIEHE AUCH
==========

   trace(E), traceprefix(E), malloc(D), status(D), dumpallobj(D)
