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