CONCEPT
        driver hooks

DESCRIPTION
        To allow a greater flexibility of the muds, the gamedrivers
        since 3.2.1 moved several once hardcoded 'underground'
        activities from the driver into the mudlib. This includes for
        example the differences between compat and native mode.

        The hooks are set with the privileged efun set_driver_hook().
        Some of the hooks are mandatory, some not. Most hooks accept
        unbound lambda closures as values, some also lfun closures or
        even strings.
        The hooks are identified by an ordinal number, for which
        symbolic names are defined in /sys/driverhooks.h.

        H_MOVE_OBJECT0
        H_MOVE_OBJECT1
          Mandatory hooks to implement the efun void move_object().


        H_LOAD_UIDS
        H_CLONE_UIDS
          Mandatory hooks to determine the uid and euid of loaded or cloned
          objects.


        H_CREATE_SUPER
        H_CREATE_OB
        H_CREATE_CLONE
          Optional hooks to initialize an object after creation.

          H_CREATE_SUPER is called for blueprints implicitely loaded
          by inheritance, H_CREATE_OB for explicitely loaded
          blueprints/objects, and H_CREATE_CLONE for cloned objects.


        H_RESET
          Optional hook to reset an object.


        H_CLEAN_UP
          Optional hook to clean up an object.


        H_DEFAULT_METHOD
          Optional hook to provide default implementation for unresolved
          calls.


        H_DEFAULT_PROMPT
          Optional hook for the command prompt. If this hook is not used,
          the driver will use "> " as the command prompt.


        H_PRINT_PROMPT
          Optional hook to print the current command prompt. If this hook is
          not set, the driver will just print the prompt to the user.


        H_COMMAND
          Optional hook to parse and execute commands. If this hook is used,
          it bypasses the normal command parsing done by the driver (including
          the MODIFY_COMMAND and NOTIFY_FAIL hooks).


        H_MODIFY_COMMAND
          Optional hook to modify commands (both entered or given by a
          call to command()) before the parser sees them (this includes
          special commands like 'status').


        H_MODIFY_COMMAND_FNAME
          Mandatory hook specifying the name of the 'modify_command'
          lfun to call for newly entered commands as result of a
          set_modify_command().


        H_NOTIFY_FAIL
          Mandatory hook to issue the default message if an entered
          command couldn't be parsed and no notify_fail() command is
          in effect.


        H_SEND_NOTIFY_FAIL
          Optional hook to send the notify fail message, regardless
          of how it was determined, to the player. If the hook is not
          set, the message is delivered using tell_object() internally.


        H_NO_IPC_SLOT
          Optional hook specifying the message given to logins
          rejected due to space limitations (MAX_PLAYER).


        H_INCLUDE_DIRS
          Semi-mandatory hook specifying the directories where <>-type
          include files are searched (this includes ""-includes not
          found as specified).


        H_AUTO_INCLUDE
          Optional hook specifying a string to be included before
          the source of every compiled LPC object.


        H_TELNET_NEG
          Optional hook to specifiy how to perform a single telnet
          negotiation.  If not set, most telnet options are rejected (read:
          only a very minimal negotiation takes place).


        H_NOECHO
          Optional hook to specifiy how to perform the telnet actions
          to switch the echo mode (used for e.g. password input_to()s).
          If not set, a default handling is performed.

          IMPORTANT: If this hook is used, the control of all telnet
          negotiation is transferred to the mudlib (you must combine it
          with H_TELNET_NEG to conform to the telnet protocol).


        H_ERQ_STOP
          Optional hook to notify the mudlib about the termination of
          the erq demon.


HISTORY
        The hooks concept was introduced in 3.2.1
        H_MOVE_OBJECT0/1 were introduced in 3.2.1@1
        H_CLEAN_UP was introduced in 3.2.1@34
        H_MODIFY_COMMAND was introduced in 3.2.1@51.
        H_MODIFY_COMMAND_FNAME was 'hooked' in 3.2.1@109.
        H_NOTIFY_FAILE and H_NO_IPC_SLOT were introduced in 3.2.1@55.
        H_INCLUDE_DIRS was introduced in 3.2.1@57.
        H_TELNET_NEG was introduced in 3.2.1@60.
        H_NOECHO and H_ERQ_STOP were introduced in 3.2.1@85.
        H_COMMAND was introduced in 3.2.7.
        H_SEND_NOTIFY_FAIL and H_AUTO_INCLUDE were introduced in 3.2.9.
        H_DEFAULT_METHOD was introduced in 3.3.113.
        H_DEFAULT_PROMPT and H_PRINT_PROMPT were introduced in 3.3.163.

SEE ALSO
        native(C), set_driver_hook(E), all in (H)
