SYNOPSIS
        #include <sys/driver_hooks.h>

        set_driver_hook(H_CREATE_SUPER, value)

        <value> being:

          void <name>   ( void )
          int <closure> ( void )
          int <closure> (object obj_to_init)

DESCRIPTION
        Optional hooks to initialize a blueprint which is loaded by
        inheritance after creation.

        Hook setting can be any closure, or the name of the function
        (static or public) to call in the object.

        If the hook is an unbound lambda closure expecting an argument,
        it is bound to the current object and called with the created
        object as argument. If the hook is an unbound lambda closure
        without arguments, it is bound to the object to be initialized
        and called. If the hook is any other type of closure, it is
        called with the created object as argument.

        If the result of the closure call is a non-zero number, it is used
        as the interval to wait before the first reset(), else the default
        interval computed from TIME_TO_RESET is used.

        If the hook is defined as the name of an lfun in the object,
        it is called in the object with no argument and any result
        is ignored.

HISTORY
        LDMud 3.2.10 allowed static functions to be given by name.
        LDMud 3.6.5 removed the argument given for the lfun call.

SEE ALSO
        hooks(C), create_ob(H), create_clone(H), create_lwobject(H)
