SYNOPSIS
        #include <include_list.h>

        string * include_list()
        string * include_list(object ob)
        string * include_list(object ob, int flags)

BESCHREIBUNG
        Diese Funktion liefert Informationen ueber alle Dateien, die bei der
        Kompilierung von <ob> in dieses Objekt eingebunden wurden, inklusive
        den Programmnamen von <ob>. Wird <ob> nicht angegeben, wird
        standardmaessig das aktuelle Objekt verwendet.

        Im resultierenden Array besteht die Information zu einem Includefile
        aus drei Elementen:
          - string [i+0]: der Name des Includefiles, wie er im Programm
                          auftaucht, inklusive den Trennzeichen wie " " oder
                          < >.
          - string [i+1]: der absolute Dateipfad des Includefiles.
          - int    [i+2]: die Tiefe der Inklusion (gewoehnlich 1, fuer
                          verschachtelte Includes auch groesser als 1)

        Der erste Eintrag im Resultat ist der Name des Programmes selbst in
        [i+0], die anderen beiden Elemente [i+1] und [i+2] sind 0.

        <flag> bezeichnet die Struktur des Ergebnisses:
          - <flag> = INCLIST_FLAT (0, Standard):
            Das Resultat ist ein flaches Array. Der erste Eintrag bezeichnet
            <ob> selbst, die restlichen Eintraege bezeichnen alle Includefiles
            in der Reihenfolge, in der sie auftreten.
          - <flag> = INCLIST_TREE (1):
            Das Resultat ist ein Array, dessen erster Eintrag das Objekt <ob>
            selbst bezeichnet. Alle folgenden Eintraege bezeichnen die
            Includefiles von <ob>. Wenn ein Includefile von <ob> selbst keine
            Includefiles hat, wird seine Information direkt im Array
            gespeichert. Fuer verschachtelte Includefiles wird ein Untervektor
            erzeugt und dann in diesem Untervektor abgespeichert (wiederum
            in [i+0], [i+1] und [i+2] sind 0). Diese Untervektoren haben
            die gleiche Struktur wie das Resultatarray.

        Wenn ein Objekt inklusive <ob> einem replace_program() unterworfen
        war, spiegeln die gelieferten Dateinamen das effektiv aktive Programm
        wider.

        Die Includepfade, die geliefert werden, beginnen immer mit '/'
        (absolute Pfade), auch wenn der Treiber im COMPAT Modus laeuft.
        Trotzdem beginnt der tatsaechliche Dateiname nicht mit einem '/',
        wenn der Treiber im COMPAT Modus laeuft.


BEISPIELE
        Dieser Code erzeugt (mit /sys als Includeverzeichnis des Systems):

            a.c:  #include "b.h"
                  #include <c.h>
            b.h:  #include "d.h"
            c.h:  #define BAR
            d.h:  #define FOO

        Die Efun liefert drei Resultate:

            include_list(a, INCLIST_FLAT)
            -> ({ "a.c", 0, 0
                , "\"b.h\"", "/.../b.h", 1
                , "\"d.h\"", "/.../d.h", 2
                , "<c.h>",   "/sys/c.h", 1
               })

             include_list(a, INCLIST_TREE)
             -> ({ "a.c", 0, 0
                 , ({ "\"b.h\"", "/.../b.h", 1
                    , "\"d.h\"", "/.../d.h", 2
                   }), 0, 0
                 , "<c.h>",   "/sys/c.h", 1
                 })

GESCHICHTE
        Eingefuehrt in LDMud 3.2.9, 3.3.128.

SIEHE AUCH
        debug_info(E), inherit_list(E)
