SYNOPSIS
        object previous_object();
        object previous_object(int i);

BESCHREIBUNG
        Liefert einen Pointer auf das letzte Objekt, das einen Aufruf (mittels
        call_other(), funcall() etc.) auf das aktuelle Objekt this_object()
        gemacht hat. Wenn dieses aufrufende Objekt inzwischen zerstoert wurde,
        liefert previous_object() 0.
        Bei einem Aufruf einer eigenen Funktion durch ein Objekt bleibt das
        bisherige previous_object() unveraendert.

        Wird das Argument <i> angegeben, so verfolgt previous_object() den
        Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
        aufrufende Objekt des aufrufenden Objekts. Fuer <i> muss gelten:
        0 <= i < call_stack_depth(). Ein Wert <i> < 0 liefert das erste
        aufrufende Object zurueck.

        Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
        auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
        Kommandi, die mit add_action() definiert wurden), liefert
        previous_object() this_object(), previous_object(0) hingegen 0.

BEISPIEL
        int sicherheitscheck()
        {
            object prev;
            if(!(prev=previous_object()));
            else if(getuid(prev)!=getuid(this_object()));
            else if(geteuid(prev)!=geteuid(this_object()));
            else return 1;
            return 0;
        }
        void sensible_funktion()
        {
            if(!sicherheitscheck())
            return;
            ...
        }

        Diese Funktion zeigt, wie man ueberpruefen kann, ob der letzte Aufruf
        einer Funktion im aktuellen Objekt sicher war, oder ob die
        Verarbeitung abgebrochen werden sollte.

FEHLER
        Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.

SIEHE AUCH
        call_other(E), this_object(E), this_player(E)
        caller_stack(E), caller_stack_depth(E), extern_call(E)