SYNOPSIS
        #include <sys/driver_hooks.h>

        set_driver_hook(H_INCLUDE_DIRS, value)

        <value> being:

          string *<dirs>
          string <closure>(string include_name, string current_file)

DESCRIPTION
        Semi-mandatory hook specifying the directories where <>-type
        include files are searched (this includes ""-includes not
        found as specified). Hook setting may be any closure or a
        string array. If not set, only ""-type includes may be used in LPC
        programs.

        The hook is called only if a call to master::include_file()
        does not return a usable filename.

        If the hook setting is a string array, it has to contain the
        path names of those directories where <>-type includes are to
        be searched. The directories are searched in the order they
        appear in the array. The directory name and the name of the
        actual include file are concatenated, therefore the directory
        names have to end in '/'. Leading slashes may be omitted.

        If the setting is a closure, it is called with the name of the
        desired include file as first, and the name of the compiled
        LPC file as second argument. Result has to be the complete
        path name of the include file to use. Leading slashes may be
        omitted. If the closure is a lambda closure, it is bound to
        this_object() prior to execution.

HISTORY

SEE ALSO
        hooks(C), auto_include(H), include_file(M)
