SYNOPSIS
        #include <commands.h>

        void add_action(string fun, string cmd)
        void add_action(string fun, string cmd, int flag)

DESCRIPTION
        Set up a local function fun to be called when user input
        matches the command cmd. Functions called by a user command
        will get the arguments as a string. It must then return 0 if
        it was the wrong command, otherwise 1.

        If it was the wrong command, the parser will continue
        searching for another command, until one returns 1 or give an
        error message to the user.

        For example, there can be a wand and a rod. Both of these
        objects define as command "wave". One of them will be randomly
        called first, and it must look at the argument, and match
        against "wand" or "rod" respectively.

        The function associated to a command will be called with a
        string as argument which stands for the given words behind the
        typed command. The verb entered can be retrieved using the
        query_verb() efun and is always the first word in the input
        line up to the first space.

        Always have add_action() called only from an init() routine.
        The object defining these commands must be present to the
        user, either being the user, being carried by the user,
        being the room around the user, or being an object in the
        same room as the user. If the player leaves this vicinity of the
        object, the actions are automatically removed.

        Actions can also be removed on demand with the remove_actions() efun.

        If argument <flag> is AA_SHORT (1), then the arguments may
        follow the verb without separating space. Any arguments after
        the first space are passed as argument string.

        If argument <flag> is AA_NOSPACE (2), then again the arguments
        may follow the verb without separating space. In contrast to
        AA_SHORT, all characters following the verb are passed as
        the argument string. However, note that the characters immediately
        following the given verb are passed as argument AND as result
        of query_verb().

        If argument <flag> is AA_IMM_ARGS (3), then again the arguments
        may follow the verb without separating space. All characters following
        the given verb are passed as argument, and only as argument.

        If argument <flag> is negative, the verb given by the player
        has to match only the leading -<flag> characters of the verb <cmd>.

        Never use one of the functions 'create' 'reset' 'init' 'exit'
        'heart_beat' etc as the first argument to add_action(). In
        general, a function with a name defined in /doc/applied should
        have the behaviour defined there.


EXAMPLES
        add_action("GoInside", "enter");

          When typing "enter" the function GoInside() will be invoked.

        add_action("DisFunc", "dis", AA_SHORT);

          Whenever you type in a command which starts with "dis" the
          function DisFunc() will be called. To get the real word which
          was typed in (because until now you only know that it was a
          command beginning with "dis") you have to call the efun
          query_verb().

        add_action("DisFunc", "disconnect", AA_NOSPACE);

          The function DisFunc() will be called for all commands which
          use "disconnect" or a shortened form like "di", "dis" or
          "discon" as verb. The command 'disconnecting' will _not_
          be recognized. To get the real word which was typed in
          you have to call the efun query_verb().


        add_action("...", "cmd");
        add_action("...", "xcmd", AA_SHORT);
        add_action("...", "scmd", AA_NOSPACE);
        add_action("...", "icmd", AA_IMM_ARGS);

          When given the following commands, the driver will parse it
          as described below. 'verb' is what query_verb() would return,
          'arg' is what would be passed to the command function.

          "cmd"          -> verb "cmd",     arg 0
          "cmd foo bar"  -> verb "cmd",     arg "foo bar"

          "xcmd"         -> verb "xcmd",    arg 0
          "xcmd foo"     -> verb "xcmd",    arg "foo"
          "xcmdfoo"      -> verb "xcmdfoo", arg 0
          "xcmd foo bar" -> verb "xcmd",    arg "foo bar"
          "xcmdfoo bar"  -> verb "xcmdfoo", arg "bar"

          "scmd"         -> verb "scmd",    arg 0
          "scmd foo"     -> verb "scmd",    arg " foo"
          "scmdfoo"      -> verb "scmdfoo", arg "foo"
          "scmd foo bar" -> verb "scmd",    arg " foo bar"
          "scmdfoo bar"  -> verb "scmdfoo", arg "foo bar"

          "icmd"         -> verb "icmd",    arg 0
          "icmd foo"     -> verb "icmd",    arg " foo"
          "icmdfoo"      -> verb "icmd",    arg "foo"
          "icmd foo bar" -> verb "icmd",    arg " foo bar"
          "icmdfoo bar"  -> verb "icmd",    arg "foo bar"


HISTORY
        The flag < 0 argument was supported since 3.2@127, but not
        really implemented before LDMud 3.2.8.
        LDMud 3.2.9 introduced the AA_IMM_ARGS flag.
        LDMud 3.3 removed the historical add_action(fun) notation.

SEE ALSO
        query_verb(E), query_command(E), remove_action(E), init(A)
