home *** CD-ROM | disk | FTP | other *** search
- # Peek
-
- source {<tcl$Dir>.!Choices}
-
- w_init Peek
-
- source {<tcl$Dir>.library.debug}
-
- w_box progInfo create "About this program"\
- { vlist {info Name Peek}
- {info Purpose "Examine a Tcl/w program"}
- {info Author C.T.Stretch}
- {info Version 0.00}
- }
-
- w_box openbox create "Open a task"\
- { vlist {write task task}
- {hlist {action Cancel} {default " Open" {startup $task}}}
- }
-
- w_box commandbox create Peek\
- { vlist {display Task: tasks}
- { hlist
- {action Variables {getvars %d;return show}}
- {action Arrays {getarrays %d;return show}}
- }
- { hlist
- {action Trace {settrace %d $command(%d);return show}}
- {action TraceProc {traceproc %d $command(%d);return show}}
- }
- { write " Command" command}
- { hlist
- {action Close}
- {default Execute {send %d $command(%d);return show}}
- }
- } -tag
-
- set tasklist [w_info wimptasks]
- set menudata Tasks
- foreach t $tasklist\
- { lappend menudata [list $t -click [list startup $t]]
- }
- set menudata [list $menudata]
-
- set menudata [list Peek {Info -dbox progInfo}\
- "Tasks -sub $menudata"\
- {Open -dbox openbox}\
- {Quit -click exit}\
- ]
-
- w_bar -menu $menudata
-
- proc traceproc {t v}\
- { if {[catch {w_send $t "info args $v"} pargs]}\
- { w_error "send to $t failed1"
- return
- }
- if {[catch {w_send $t "info body $v"} pbody]}\
- { w_error "send to $t failed2"
- return
- }
- set p "proc $v \{$pargs\} \{"
- set dargs ""
- foreach a $pargs\
- { set dargs "$dargs \$$a"
- }
- set q "catch \{w_send Peek \"w_text $t write traceproc $v $dargs\" \}"
- if {[catch {w_send $t $p\n$q\n$pbody\}} res]}\
- { w_error "send to $t failed3"
- w_text $t write $res
- return
- }
- }
-
- proc settrace {t v}\
- { set p\
- { proc peek_trace {name element op}\
- { if {$element !=""}\
- { set name ${name}($element)
- }
- upvar $name x
- catch\
- { w_send Peek\
- " w_text xxxxx write \" trace: $name ($op) $x\" "
- }
- }
- }
- regsub xxxxx $p $t p
- set s "trace variable $v wu peek_trace"
- if {[catch {w_send $t $p\n$s} vars]}\
- { w_error "send to $t failed"
- return
- }
- }
-
- proc getvars {t}\
- { if {[catch {w_send $t {info globals}} vars]}\
- { w_error "send to $t failed"
- return
- }
- foreach v $vars\
- { set k [catch {w_send $t "set $v"} res]
- if {$k==1}\
- { w_error "send to $t failed"
- return
- }
- if {$k==0}\
- { w_text $t write $v=$res}
- }
- return
- }
-
- proc getarrays {t}\
- { if {[catch {w_send $t {info globals}} vars]}\
- { w_error "send to $t failed"
- return
- }
- foreach v $vars\
- { set k [catch {w_send $t "array names $v"} res]
- if {$k==1}\
- { w_error "send to $t failed"
- return
- }
- if {$k!=0} continue
- if {$res==""} continue
- w_text $t write $v:$res
- foreach n $res\
- { set k [catch {w_send $t "set $v\($n)"} val]
- if {$k==1}\
- { w_error "send to $t failed"
- return
- }
- w_text $t write "$v\($n)=$val"
- }
- }
- }
-
- proc startup {t}\
- { global tasks
- if {[catch {w_text $t create -title "Peek at $t"}]}\
- { w_error "$t already open"
- return 0
- }
- set tasks($t) $t
- w_text $t open
- w_box commandbox open $t
- list 0
- }
-
- proc send {t c}\
- { set k [catch {w_send $t $c} result]
- if {$k==1}\
- { w_error "send to $t failed"
- return
- }
- w_text $t write $result
- }
-
-
-
-