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
        H_LWOBJECT_UIDS
          Mandatory hooks to determine the uid and euid of loaded,
          cloned or lightweight objects.


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

          H_CREATE_SUPER is called for blueprints implicitly loaded
          by inheritance, H_CREATE_OB for explicitely loaded
          blueprints/objects, H_CREATE_CLONE for cloned objects, and
          H_CREATE_LWOBJECT for lightweight 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_FILE_ENCODING
          Optonal hook specifying the name of the encoding to be used
          for decoding a file (default: "ascii").


        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.


        H_MSG_DISCARDED
          Optional hook to specify a message or take other measures
          when a message had to be discarded.

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.
        H_CREATE_LWOBJECT and H_LWOBJECT_UIDS were introduced in 3.6.5.

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