namespace eval ::utility {} proc ::utility::writeNode {tc_root { do_props 0 } { level 0 }} { if [ catch { set space [string repeat " " $level] if [ catch { set val [hval $tc_root] } message ] { clientput "Error in writeNode/hval for $tc_root : $message" return } set nam [lindex [split $tc_root "/"] end] if [ catch { if {"$val" == ""} { set line "$nam ([hinfo $tc_root])" } else { set line "$nam ([hinfo $tc_root]) = $val" } } message ] { clientput "Error in writeNode/hinfo for $tc_root : $message" return } clientput "$space* $line" if {"[string tolower "$do_props"]" == "-prop"} { if [ catch { set props [hlistprop $tc_root] } message ] { clientput "Error in writeNode/hlistprop for $tc_root : $message" return } #clientput "<<$props>>" foreach prop $props { #clientput "prop: $prop" set flds [split $prop "="] #clientput "flds: $flds" if {[llength $flds] > 1} { set fld0 [lindex $flds 0] #clientput "fld0: $fld0" if {[hpropexists $tc_root $fld0]} { set rst [hgetprop $tc_root $fld0] set nam [lindex [split [lindex $rst 0] "."] 1] set rst [join [lrange [split $rst " "] 1 end] " "] clientput "$space - $nam $rst" } } } } foreach node [hlist $tc_root] { ::utility::writeNode $tc_root/$node "$do_props" [expr {$level + 1}] } } message ] { clientput "Error in writeNode for $tc_root : $message" } } proc writeTree {tc_root {do_props 0}} { clientput "$tc_root" ::utility::writeNode $tc_root $do_props 1 return "Done" } publish writeTree user