VORLAEUFIG, GESCHUETZT
SYNOPSIS
        #include <sys/rtlimits.h>

        mixed limited(closure fun);
        mixed limited(closure fun, int tag, int value, ...);
        mixed limited(closure fun, int *limits [, mixed *args]);

BESCHREIBUNG
        limited() ruft die Funktion <fun> mit den bezeichneten Argumenten
        <args> auf und fuehrt sie mit den gegebenen Laufzeitlimiten aus.

        Beim Ende der Funktion <fun> werden die momentan aktiven
        Laufzeitlimiten wiederhergestellt. limited() liefert den
        Rueckgabewert der Closure <fun> zurueck.

        Die Laufzeitlimiten koennen in zwei Formen angegeben werden: als
        Array (wie es von query_limits() geliefert wird) oder als Liste von
        Werten mit Tags. Wird limited() ohne Angabe von Limits aufgerufen,
        gelten die Laufzeitlimiten als 'unlimitiert'.

        Die Limiteneinstellung kennt drei spezielle Werte aus <rtlimits.h>:
            LIMIT_UNLIMITED:    es gibt kein Limit
            LIMIT_KEEP:         das zuletzt gesetzte Limit wird beibehalten
            LIMIT_DEFAULT:      die 'globalen' Limiten werden verwendet

        Fuer LIMIT_COST, die Spezialwerte haben diese Bedeutung:
            LIMIT_UNLIMITED: die Ausfuehrung kosten lediglich einen Tick
            LIMIT_KEEP:      LIMIT_COST wird auf 0 gesetzt
            LIMIT_DEFAULT:   LIMIT_COST wird auf -100 gesetzt

        limited() erzeugt eine Schutzverletzung ("limited", current_object,
        fun, limits-array).

BEMERKUNGEN:
        Diese Funktion kann bei uns mudlibweit genutzt werden. Allerdings wird
        nur die _Reduktion_ von LIMIT_EVAL zugelassen, alle anderen Limits
        duerfen _nicht_ veraendert werden. Hierbei ist zu beachten, dass das
        Limit fuer LIMIT_EVAL um min. 1000 Ticks unter den noch verfuegbaren
        Ticks liegen muss (get_eval_cost()).
        Fuer LIMIT_COST sind nur 0 und -100 zugelassen.

BEISPIELE
        limited(#'function)
        --> fuehrt die Funktion ohne Limiten aus.

        limited(#'function, ({ 200000 }), "foo")
        --> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks
            aus. Die Funktion wird als 'function("foo")' aufgerufen.

        limited(lambda(0, ({#'function, "foo"})), LIMIT_EVAL, 200000)
        --> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks
            aus. Die Funktion wird als 'function("foo")' aufgerufen.

AENDERUNGEN
        Eingefuehrt in LDMud 3.2.7.
        LDMud 3.3.563 fuehrte LIMIT_COST ein.

SIEHE AUCH
        query_limits(E), set_limits(E)
        get_eval_cost(E)

16.05.2007, Zesstra

