ad_proc set_vars_from_list {__args {level ""}} {set out "" if {$level eq ""} { # absolute level just outside this proc, aka calling frame set level [expr [info level] - 1]append out "level defaults to $level\n" } foreach {__key __value} $__args { if {[string match "&*" $__key]} { # "&" triggers call by referenceappend out "$__key call by reference\n" if {"&" ne $__key } { set __name [string range $__key 1 end] } else { set __name $__value } upvar "\#$level" $__value $__name \ $__value:rowcount $__name:rowcount \ $__value:columns $__name:columns # upvar :rowcount and :columns just in case it is a multirow if { [info exists $__name:rowcount] } { for { set __i 0 } { $__i <= [set $__name:rowcount] } { incr __i } { upvar "\#$level" $__value:$__i $__name:$__i } } } else { # not "&" => normal arg (no reference) upvar \#$level $__key key set key $__value } }set out}