SYNOPSIS
        #include <sys/driver_hooks.h>

        set_driver_hook(H_CREATE_CLONE, value)

        <value> being:

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

DESCRIPTION
        Optional hooks to initialize a cloned object after creation.
        Hook setting can 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 arguments,
        it is bound to the current object and called with the created
        object as the first argument and any further arguments from
        the clone_object() call. If the hook is an unbound lambda
        closure without arguments, it is bound to the object to be
        initalized and called. If the hook is any other type of closure,
        it is called with the created object as the first argument and
        any further arguments from the clone_object() call.

        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 any further arguments from the
        clone_object() call, 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_super(H), create_lwobject(H)
