SYNOPSIS
        #include <sys/driver_hooks.h>

        set_driver_hook(H_TELNET_NEG, value)

        <value> being:

          void <name>(int flag, object user, int no_telnet)
          void <closure>(int flag, object user, int no_telnet)

DESCRIPTION
        Optional hook to specifiy how to perform the telnet actions to
        switch the echo mode (used for e.g. password input_to()s).
        Hook setting may be any closure or a string. If not set, a
        default handling is performed.

        If the setting is a string, it is used as name of an lfun to call
        in the interactive <user>, where <flag> is the echo-flag
        passed to the input_to() statement.

        If the setting is a closure, it is called with the same
        arguments, and unbound lambda-closures being bound to
        this_player() prior to execution.

        <local> is a boolean flag: it is TRUE when input_to() was
        called with the INPUT_NO_TELNET flag.

        When set, the hook is called whenever the driver needs to
        change the echo mode, thus you can negotiate about things that
        are coupled with it, like LINEMODE or character-at-a-time.

        IMPORTANT: If this hook is used, the control of all telnet
        negotiation is transferred to the mudlib: all incoming negotiations
        are passed to H_TELNET_NEG, and the sending of no-echo negotiations
        is handled by this hook.

HISTORY
        LDMud 3.2.11/LDMud 3.3.593 added the <no_telnet> argument.

SEE ALSO
        hooks(C), telnet(C), telnet_neg(H)
