I work for San Diego State University in Business Information Systems. My previous position was with Computer Sciences Corp (CSC), as a Consultant/Programmer/analyst.
I have been using TCL/TK for personal use since 1995, heavily the last 6 or seven years. I was interested in developing editors and tools for software development for my own use.
I may occasionally be seen listening in the chat area as AEC.
I'll post more here as time permits.
After 5 years of retirement I have decided I have time to describe my style and method of developing with Tcl.
My development environment consists of a modified version of eZdit as my ide. Within eZdit I use a recent version of tclkit as my runtime for testing.
I usually develop my applications as starpacks. In my main.tcl, especially during development, I source a custom kitten which contains every package I have developed, also those available from Activestate or found on this wiki that I have found useful in the past. When I create the final starpack I will either place the needed packages in the lib directory of the starpack or create a new custom kitten to be sourced by the application.
My apps are usually developed as packages and packages as namespace ensembles. The pkgIndex.tcl looks like this:
proc myPkgSetup {dir pkg version files} {
global auto_index
package provide $pkg $version
foreach fileInfo $files {
set f [lindex $fileInfo 0]
set type [lindex $fileInfo 1]
foreach cmd [lindex $fileInfo 2] {
if {$type eq "load"} {
set auto_index($cmd) [list load [file join $dir $f] $pkg]
} else {
set auto_index($cmd) [list $type [file join $dir $f]]
}
}
}
}
proc mySource {f} {
set pns {}
set ns [file root [file tail $f]]
# files foo~bar.tcl are loaded into foo namespace, but only if present
if {![regsub {~.*} $ns {} ns]} {
namespace eval ${pns}::${ns} {
namespace export -clear {[a-z]*}
namespace ensemble create
}
lappend modules $ns
} elseif {![namespace exists ${pns}::$ns]} {
tclLog "[file tail $f]: skipped, module $ns doesn't exist"
continue
}
namespace inscope ${pns}::${ns} source $f
if {$pns ne {}} {interp alias {} $ns {} ${pns}::${ns}}
}
if {[catch {package require Tcl}]} return
package ifneeded app 1.0 "\
package require Tk 8.6.8;\
[list myPkgSetup $dir app 1.0 {
{components/cmd1.tcl mySource {cmd1}}
{components/cmd2.tcl mySource {cmd2}}
}]"
As seen above, the package may have one or more ensembles found in a "components" sub directory of the package. The directory structure for the package would look like this:
More later