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 [starpack]s. 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 ensemble]s. 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: * package directory * - pkgIndex.tcl * - "component" (sub directory of package) * -- cmd1.tcl (ensemble cmd1) * -- cmd2.tcl {ensemble cmd2) More later <> Person