SYNOPSIS
        object first_inventory();
        object first_inventory(string ob);
        object first_inventory(object ob);

BESCHREIBUNG
        Liefert das erste Objekt im Inventory von <obj>, wobei <obj> entweder
        ein Objekt oder der Name eines Objekts ist. Wenn <obj> nicht angegeben
        wird, wird standardmaessig this_object() verwendet.

BEISPIELE
        Diese Efun verwendet man am haeufigsten im folgenden Kontext:

            for(obj=first_inventory(container);obj;obj=next_inventory(obj))
            {
                <irgendwelcher Code>
            }

        ACHTUNG: Wenn das Objekt <obj> innerhalb von <irgendwelcher Code>
        bewegt wird, liefert next_inventory() ein Objekt aus dem neuen
        Inventory von <obj>. Auch sollte next_inventory() nicht fuer
        zerstoerte Objekte <obj> aufgerufen werden. Fuer den Fall, dass
        <obj> bewegt und/oder zerstoert wird, ist folgende Loesung
        vorzuziehen:

            for(obj=first_inventory(container);obj;)
            {
                next=next_inventory(obj);
                <irgendwelcher Code mit Moves oder Removes>
                obj=next;
            }

SIEHE AUCH
        next_inventory(E), all_inventory(E), environment(E), deep_inventory(E)
