# proc to go through the search path of include files
# to source a given file
#
# !! you can use glob pattern in the scriptFileName !!
#
proc !include {scriptFileName} {
global !includePath;
if {![info exists !includePath]} {
set !includePath [list [pwd]];
}
foreach directory ${!includePath} {
set filePattern [file join $directory $scriptFileName];
set fileNames [glob -nocomplain $filePattern];
set fileName [lindex $fileNames 0];
switch -exact -- [llength $fileNames] {
0 {}
1 {
if {[file readable $fileName]} {
return [source $fileName];
}
error "script file \"$fileName\" not readable";
}
default {
error "too many files matching \"$scriptFileName\" found";
}
}
}
error "script file \"$scriptFileName\" not found, check your path";
}
# build path from variables or given directories
# e.g. to be used with variables like auto_path,
# tcl_library, or if existent tk_library
#
# !! you can use glob pattern in directories !!
#
proc !includePath {args} {
global !includePath;
if {![llength $args]} {
return ${!includePath};
}
foreach arg $args {
if {[uplevel [list info exists $arg]]} {
!includePath [uplevel [list set $arg]];
} elseif {[uplevel #0 [list info exists $arg]]} {
!includePath [uplevel #0 [list set $arg]];
} else {
foreach directory $arg {
if {[lsearch -exact ${!includePath} $directory] < 0} {
lappend !includePath $directory;
}
}
}
}
return ${!includePath};
}
# build search path for include files
#
!includePath \
tcl_library auto_path \
[pwd] \
[file join [pwd] lib];
# source a file inside the search path
#
!include dummy.tclCategory Dev. Tools

