SYNOPSIS
        #include <commands.h>
        #include <sent.h>

        mixed * query_actions(object|string ob, mixed mask_or_verb)

BESCHREIBUNG
        Das erste Argument von query_actions() ist entweder ein Objekt
        oder der Dateiname eines Objekts. Das zweite Argument muss
        entweder eine Bitmaske (ein Integer) oder ein String sein.

        Ist das zweite Argument ein String, liefert query_actions() ein
        Array mit Informationen ueber das Verb oder 0 zurueck, wenn
        das lebendige Objekt <ob> das Verb nicht verwenden kann.

        Wenn das zweite Argument ein Integer ist, liefert query_actions()
        ein flaches Array mir den Informationen entsprechend der Bitmaske
        zu allen Verben von <ob>.

            QA_VERB         ( 1):   das Verb,
            QA_TYPE         ( 2):   der Typ,
            QA_SHORT_VERB   ( 4):   das short_verb,
            QA_OBJECT       ( 8):   das Objekt,
            QA_FUNCTION     (16):   die Funktion.

        Der Typ ist ein Wert wie in <sent.h> definiert, der mit dem
        Driver-Quellcode geliefert wird.

            SENT_PLAIN       durch add_action(fun, cmd) hinzugefuegt
            SENT_SHORT_VERB  durch add_action(fun, cmd, 1) hinzugefuegt
            SENT_NO_SPACE    durch add_action(fun); add_xverb(cmd);
            SENT_NO_VERB     nur eine Funktion mit add_action(fun), ohne Verb
            SENT_MARKER      intern, ist nicht im Array enthalten
            negativer Wert   das Verb muss nur in den ersten -<wert> Zeichen
                             uebereinstimmen.

SIEHE AUCH
        add_action(E), init(A)
