rendered paste bodyad_proc set_vars_from_list {__args {level ""}} { if {$level eq ""} { # absolute level just outside this proc, aka calling frame set level [expr [info level] - 1] } foreach {__key __value} $__args { if {[string match "&*" $__key]} { # "&" triggers call by reference 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) set $__key $__value } }}