tkinspect-5.1.6p10004075500007650000765000000000000767472441200122165ustar00patpattkinspect-5.1.6p10/stl-lite004075500007650000765000000000000767472441300137545ustar00patpattkinspect-5.1.6p10/stl-lite/COPYRIGHT010064400007650000765000000021010743753663400153200ustar00patpatThis software is copyright (C) 1994 by the Lawrence Berkeley Laboratory. Redistribution and use in source and binary forms, with or without modification, are permitted provided that: (1) source code distributions retain the above copyright notice and this paragraph in its entirety, (2) distributions including binary code include the above copyright notice and this paragraph in its entirety in the documentation or other materials provided with the distribution, and (3) all advertising materials mentioning features or use of this software display the following acknowledgement: ``This product includes software developed by the University of California, Lawrence Berkeley Laboratory and its contributors.'' Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. tkinspect-5.1.6p10/stl-lite/feedback.tcl010064400007650000765000000026100572275255000162520ustar00patpat# # $Id: feedback.tcl,v 1.3 1995/02/23 00:23:04 sls Exp $ # dialog feedback { param steps 10 param title {} param barwidth 200 param barheight 20 param barcolor DodgerBlue member step 0 member old_focus {} method create {} { $self config -bd 4 -relief ridge label $self.title pack $self.title -side top -fill x -padx 2 -pady 2 frame $self.spacer frame $self.bar -relief raised -bd 2 -highlightthickness 0 pack $self.spacer $self.bar -side top -padx 10 -anchor w label $self.percentage -text 0% pack $self.percentage -side top -fill x -padx 2 -pady 2 wm transient $self . } method reconfig {} { $self.title config -text $slot(title) $self.spacer config -width $slot(barwidth) $self.bar config -height $slot(barheight) -bg $slot(barcolor) center_window $self update idletasks } method destroy {} { if {[grab current $self] == $self} { grab release $self } } method grab {} { while {[catch {grab set $self}]} { } } method reset {} { set slot(step) -1 $self step } method step {{inc 1}} { if {$slot(step) >= $slot(steps)} return incr slot(step) $inc set fraction [expr 1.0*$slot(step)/$slot(steps)] $self.percentage config -text [format %.0f%% [expr 100.0*$fraction]] $self.bar config -width [expr int($slot(barwidth)*$fraction)] update } } tkinspect-5.1.6p10/stl-lite/filechsr.tcl010064400007650000765000000135130571412455200163250ustar00patpat# # $Id: filechsr.tcl,v 1.7 1995/02/02 09:44:10 sls Exp $ # # filechooser implements a simple file chooser. # # This software is copyright (C) 1994 by the Lawrence Berkeley Laboratory. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that: (1) source code distributions # retain the above copyright notice and this paragraph in its entirety, (2) # distributions including binary code include the above copyright notice and # this paragraph in its entirety in the documentation or other materials # provided with the distribution, and (3) all advertising materials mentioning # features or use of this software display the following acknowledgement: # ``This product includes software developed by the University of California, # Lawrence Berkeley Laboratory and its contributors.'' Neither the name of # the University nor the names of its contributors may be used to endorse # or promote products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. # set filechooser_shortTypes(file) " " set filechooser_shortTypes(directory) DIR set filechooser_shortTypes(characterSpecial) CHR set filechooser_shortTypes(blockSpecial) BLK set filechooser_shortTypes(fifo) PIP set filechooser_shortTypes(link) LNK set filechooser_shortTypes(socket) SOK set filechooser_modeMap(0) x set filechooser_modeMap(1) w set filechooser_modeMap(2) r option add *Filechooser*Listbox*font \ -adobe-courier-bold-r-*-*-*-120-*-*-*-*-iso8859-* option add *Filechooser*status1*font \ -adobe-courier-bold-r-*-*-*-120-*-*-*-*-iso8859-* option add *Filechooser*status2*font \ -adobe-courier-bold-r-*-*-*-120-*-*-*-*-iso8859-* option add *Filechooser*Listbox*geometry 45x20 dialog filechooser { param title {} param filter * param dirok 0 ;# set to 1 if open should accept directories param newfile 0 ;# set to 1 if new files are ok method create {} { set w $self wm minsize $w 100 100 frame $w.list pack $w.list -in $w -side top -fill both -expand yes scrollbar $w.list.sb -command "$w.list.l yview" listbox $w.list.l -yscroll "$w.list.sb set" -relief raised -bd 2 \ -exportselection false -selectmode single pack $w.list.sb -in $w.list -side right -fill y pack $w.list.l -in $w.list -side left -fill both -expand 1 set slot(list) $w.list.l bind $w.list.l "$self open 1" bind $w.list.l [bind Listbox ] foreach ev { } { bind $w.list.l $ev "+$self update_selection" } set b [frame $w.bottom -bd 3 -relief ridge] pack $b -side top -fill both -pady 3 -padx 3 label $b.status1 -anchor w label $b.status2 -anchor w pack $b.status1 $b.status2 -side top -fill x -padx 2 simpleentry $b.filter -width 30 -label "Filter:" $b.filter bind "$self filter \[$b.filter entry get\]" $b.filter entry config -textvariable [object_slotname filter] pack $b.filter -side top -fill x -padx 5 simpleentry $b.file -width 30 -label "File:" $b.file bind "$self open 1 \[$b.file entry get\]" pack $b.file -side top -fill x -pady 3 -padx 5 button $b.up -command "cd ..; $self fill" -text "Up" button $b.open -command "$self open 0" -text "Open" button $b.cancel -command "object_delete $w" -text "Cancel" pack $b.open $b.up -in $b -side left -ipadx 5 -ipady 5 -padx 5 -pady 5 pack $b.cancel -in $b -side right -ipadx 5 -ipady 5 -padx 5 -pady 5 } method run {} { tkwait visibility $self $self fill set slot(result) "" set old_dir [pwd] while [catch {grab set $self}] {} tkwait variable [object_slotname result] grab release $self if ![info exists slot(result)] { cd $old_dir return "" } cd $old_dir after 0 [list object_delete $self] return $slot(result) } method reconfig {} { wm title $self $slot(title) wm iconname $self $slot(title) } method fill {} { global filechooser_shortTypes set list $slot(list) $list delete 0 end foreach f [lsort [glob -nocomplain $slot(filter)]] { if [catch {file size $f} size] { set size 0 } $list insert end \ [format "%s %6.1fk %s" $filechooser_shortTypes([file type $f]) \ [expr $size / 1024.0] [file tail $f]] } $self update_selection } method filter {filter} { set slot(filter) $filter $self fill } method get_selection {} { set l $slot(list) set sel [$l curselection] if {$sel == {}} return set file [$l get $sel] if {[llength $file] == 2} { set file [lindex $file 1] } else { set file [lindex $file 2] } return $file } method update_selection {} { $self.bottom.file entry delete 0 end set f [$self get_selection] $self.bottom.file entry insert 0 [pwd]/$f if [string length $f] { global filechooser_shortTypes filechooser_modeMap file lstat $f stat for {set bit 8} {$bit >= 0} {incr bit -1} { if {$stat(mode) & (1 << $bit)} { append mode $filechooser_modeMap([expr $bit % 3]) } else { append mode - } } set msg1 \ [format "%s %6.1fk %s %5d %5d" \ $filechooser_shortTypes($stat(type)) \ [expr $stat(size) / 1024.0] $mode $stat(gid) $stat(uid)] set msg2 [file tail $f] if {$stat(type) == "link"} { append msg2 " -> [file readlink $f]" } } else { set msg1 "" set msg2 "" } $self.bottom.status1 config -text $msg1 $self.bottom.status2 config -text $msg2 } method open {is_click {file ""}} { if ![string length $file] { set file [$self get_selection] } if {$slot(newfile) && ![file exists $file]} { set slot(result) $file return } if {($is_click || !$slot(dirok)) && [file isdirectory $file]} { cd $file $self fill return } set slot(result) $file } } tkinspect-5.1.6p10/stl-lite/object.tcl010064400007650000765000000176330571662226200160060ustar00patpat# # $Id: object.tcl,v 1.7 1995/02/10 08:32:50 sls Exp $ # # This software is copyright (C) 1994 by the Lawrence Berkeley Laboratory. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that: (1) source code distributions # retain the above copyright notice and this paragraph in its entirety, (2) # distributions including binary code include the above copyright notice and # this paragraph in its entirety in the documentation or other materials # provided with the distribution, and (3) all advertising materials mentioning # features or use of this software display the following acknowledgement: # ``This product includes software developed by the University of California, # Lawrence Berkeley Laboratory and its contributors.'' Neither the name of # the University nor the names of its contributors may be used to endorse # or promote products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. set object_priv(currentClass) {} set object_priv(objectCounter) 0 proc object_class {name spec} { global object_priv set object_priv(currentClass) $name lappend object_priv(objects) $name upvar #0 ${name}_priv class set class(members) {} set class(params) {} eval $spec proc $name:config args "uplevel \[concat object_config \$args]" proc $name:configure args "uplevel \[concat object_config \$args]" proc $name:cget {self option} "uplevel \[list object_cget \$self \$option]" } proc method {name args body} { global object_priv set className $object_priv(currentClass) upvar #0 ${className}_priv class lappend class(methods) $name set methodArgs self append methodArgs " " $args proc $className:$name $methodArgs "upvar #0 \$self slot\n$body" } proc member {name {defaultValue {}}} { global object_priv set className $object_priv(currentClass) upvar #0 ${className}_priv class if ![info exists class(member_info/$name)] { lappend class(members) [list $name $defaultValue] } set class(member_info/$name) {} } proc param {name {defaultValue {}} {resourceClass {}} {configCode {}}} { global object_priv set className $object_priv(currentClass) upvar #0 ${className}_priv class if {$resourceClass == ""} { set resourceClass \ [string toupper [string index $name 0]][string range $name 1 end] } if ![info exists class(param_info/$name)] { lappend class(params) $name } set class(param_info/$name) [list $defaultValue $resourceClass] if {$configCode != {}} { proc $className:config:$name self $configCode } } proc object_include {super_class_name} { global object_priv set className $object_priv(currentClass) upvar #0 ${className}_priv class upvar #0 ${super_class_name}_priv super_class foreach p $super_class(params) { lappend class(params) $p set class(param_info/$p) $super_class(param_info/$p) } set class(members) [concat $super_class(members) $class(members)] foreach m $super_class(methods) { set formals {} set proc $super_class_name:$m foreach arg [info args $proc] { if [info default $proc $arg def] { lappend formals [list $arg $def] } else { lappend formals $arg } } proc $className:$m $formals [info body $proc] } } proc object_new {className {name {}}} { if {$name == {}} { global object_priv set name O_[incr object_priv(objectCounter)] } upvar #0 $name object upvar #0 ${className}_priv class set object(__class) $className foreach var $class(params) { set info $class(param_info/$var) set resourceClass [lindex $info 1] if ![catch {set val [option get $name $var $resourceClass]}] { if {$val == ""} { set val [lindex $info 0] } } else { set val [lindex $info 0] } set object($var) $val } foreach var $class(members) { set object([lindex $var 0]) [lindex $var 1] } proc $name {method args} [format { upvar #0 %s object uplevel [concat $object(__class):$method %s $args] } $name $name] return $name } proc object_define_creator {windowType name spec} { object_class $name $spec if {[info procs $name:create] == {}} { error "widget \"$name\" must define a create method" } if {[info procs $name:reconfig] == {}} { error "widget \"$name\" must define a reconfig method" } proc $name {window args} [format { %s $window -class %s rename $window object_window_of$window upvar #0 $window object set object(__window) $window object_new %s $window proc %s:frame {self args} \ "uplevel \[concat object_window_of$window \$args]" uplevel [concat $window config $args] $window create set object(__created) 1 bind $window \ "if !\[string compare %%W $window\] { object_delete $window }" $window reconfig return $window } $windowType \ [string toupper [string index $name 0]][string range $name 1 end] \ $name $name] } proc widget {name spec} { object_define_creator frame $name $spec } proc dialog {name spec} { object_define_creator toplevel $name $spec } proc object_config {self args} { upvar #0 $self object set len [llength $args] if {$len == 0} { upvar #0 $object(__class)_priv class set result {} foreach param $class(params) { set info $class(param_info/$param) lappend result \ [list -$param $param [lindex $info 1] [lindex $info 0] \ $object($param)] } if [info exists object(__window)] { set result [concat $result [object_window_of$object(__window) config]] } return $result } if {$len == 1} { upvar #0 $object(__class)_priv class if {[string index $args 0] != "-"} { error "param '$args' didn't start with dash" } set param [string range $args 1 end] if {[set ndx [lsearch -exact $class(params) $param]] == -1} { if [info exists object(__window)] { return [object_window_of$object(__window) config -$param] } error "no param '$args'" } set info $class(param_info/$param) return [list -$param $param [lindex $info 1] [lindex $info 0] \ $object($param)] } # accumulate commands and eval them later so that no changes will take # place if we find an error set cmds "" while {$args != ""} { set fieldId [lindex $args 0] if {[string index $fieldId 0] != "-"} { error "param '$fieldId' didn't start with dash" } set fieldId [string range $fieldId 1 end] if ![info exists object($fieldId)] { if {[info exists object(__window)]} { if [catch [list object_window_of$object(__window) config -$fieldId]] { error "tried to set param '$fieldId' which did not exist." } else { lappend cmds \ [list object_window_of$object(__window) config -$fieldId [lindex $args 1]] set args [lrange $args 2 end] continue } } } if {[llength $args] == 1} { return $object($fieldId) } else { lappend cmds [list set object($fieldId) [lindex $args 1]] if {[info procs $object(__class):config:$fieldId] != {}} { lappend cmds [list $self config:$fieldId] } set args [lrange $args 2 end] } } foreach cmd $cmds { eval $cmd } if {[info exists object(__created)] && [info procs $object(__class):reconfig] != {}} { $self reconfig } } proc object_cget {self var} { upvar #0 $self object return [lindex [object_config $self $var] 4] } proc object_delete self { upvar #0 $self object if {[info exists object(__class)] && [info commands $object(__class):destroy] != ""} { $object(__class):destroy $self } if [info exists object(__window)] { if [string length [info commands object_window_of$self]] { catch {rename $self {}} rename object_window_of$self $self } destroy $self } catch {unset object} } proc object_slotname slot { upvar self self return [set self]($slot) } tkinspect-5.1.6p10/stl-lite/simpleentry.tcl010064400007650000765000000033510567454144700171130ustar00patpat# # $Id: simpleentry.tcl,v 1.3 1994/12/17 10:53:27 sls Exp $ # # A entry in a frame with a label. # # This software is copyright (C) 1994 by the Lawrence Berkeley Laboratory. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that: (1) source code distributions # retain the above copyright notice and this paragraph in its entirety, (2) # distributions including binary code include the above copyright notice and # this paragraph in its entirety in the documentation or other materials # provided with the distribution, and (3) all advertising materials mentioning # features or use of this software display the following acknowledgement: # ``This product includes software developed by the University of California, # Lawrence Berkeley Laboratory and its contributors.'' Neither the name of # the University nor the names of its contributors may be used to endorse # or promote products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. widget simpleentry { param label "" param width 10 param textvariable "" method create {} { set w $self label $w.l pack $w.l -in $w -side left entry $w.e -relief sunken -bd 2 pack $w.e -in $w -side left -fill x -expand 1 } method reconfig {} { set w $self $w.l config -text $slot(label) $w.e config -width $slot(width) -textvariable $slot(textvariable) } method entry args { uplevel [concat $self.e $args] } method bind {event args} { uplevel [concat [list bind $self.e $event] $args] } } tkinspect-5.1.6p10/stl-lite/tk_util.tcl010064400007650000765000000032320744001136600161720ustar00patpat# # $Id: tk_util.tcl,v 1.2 2002/03/01 23:47:02 pat Exp $ # # Misc procs for use with Tk # # This software is copyright (C) 1994 by the Lawrence Berkeley Laboratory. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that: (1) source code distributions # retain the above copyright notice and this paragraph in its entirety, (2) # distributions including binary code include the above copyright notice and # this paragraph in its entirety in the documentation or other materials # provided with the distribution, and (3) all advertising materials mentioning # features or use of this software display the following acknowledgement: # ``This product includes software developed by the University of California, # Lawrence Berkeley Laboratory and its contributors.'' Neither the name of # the University nor the names of its contributors may be used to endorse # or promote products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. proc center_window {win} { wm withdraw $win update idletasks set w [winfo reqwidth $win] set h [winfo reqheight $win] set sh [winfo screenheight $win] set sw [winfo screenwidth $win] wm geometry $win +[expr {($sw-$w)/2}]+[expr {($sh-$h)/2}] wm deiconify $win } proc under_mouse {win} { set xy [winfo pointerxy $win] wm withdraw $win wm geometry $win +[expr [lindex $xy 0] - 10]+[expr [lindex $xy 1] - 10] wm deiconify $win } tkinspect-5.1.6p10/stl-lite/tkhtml.tcl010064400007650000765000000375660573421553100160470ustar00patpat# # $Id: tkhtml.tcl,v 1.5 1995/03/23 06:55:21 sls Exp $ # # This software is copyright (C) 1995 by the Lawrence Berkeley Laboratory. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that: (1) source code distributions # retain the above copyright notice and this paragraph in its entirety, (2) # distributions including binary code include the above copyright notice and # this paragraph in its entirety in the documentation or other materials # provided with the distribution, and (3) all advertising materials mentioning # features or use of this software display the following acknowledgement: # ``This product includes software developed by the University of California, # Lawrence Berkeley Laboratory and its contributors.'' Neither the name of # the University nor the names of its contributors may be used to endorse # or promote products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. # # This code is based on Angel Li's (angel@flipper.rsmas.miami.edu) HTML # rendering code. # proc tkhtml_set_render_hook {hook} { global tkhtml_priv set tkhtml_priv(render_hook) $hook } proc tkhtml_set_image_hook {hook} { global tkhtml_priv set tkhtml_priv(image_hook) $hook } proc tkhtml_render {w html} { global tkhtml_priv tkhtml_entity $w config -state normal $w delete 1.0 end tkhtml_setup $w set tkhtml_priv(continue_rendering) 1 tkhtml_set_tag while {$tkhtml_priv(continue_rendering)} { # normal state while {[set len [string length $html]]} { # look for text up to the next <> element if [regexp -indices "^\[^<\]+" $html match] { set text [string range $html 0 [lindex $match 1]] tkhtml_append_text $text set html \ [string range $html [expr [lindex $match 1]+1] end] } # we're either at a <>, or at the eot if [regexp -indices "^<(\[^>\]+)>" $html match entity] { set entity [string range $html [lindex $entity 0] \ [lindex $entity 1]] set cmd [string tolower [lindex $entity 0]] if {[info exists tkhtml_entity($cmd)]} { tkhtml_do $cmd [lrange $entity 1 end] } set html \ [string range $html [expr [lindex $match 1]+1] end] } if [info exists tkhtml_priv(render_hook)] { eval $tkhtml_priv(render_hook) $len } if $tkhtml_priv(verbatim) break } # we reach here if html is empty, or verbatim is 1 if !$len break # verbatim must be 1 # append text until a is reached if {[regexp -indices -nocase $tkhtml_priv(verb_end_token) $html match]} { set text [string range $html 0 [expr [lindex $match 0]-1]] set html [string range $html [expr [lindex $match 1]+1] end] } else { set text $html set html "" } tkhtml_append_text $text if [info exists tkhtml_entity([string trim $tkhtml_priv(verb_end_token) <>])] { tkhtml_do [string trim $tkhtml_priv(verb_end_token) <>] } } $w config -state disabled } proc tkhtml_defaults {} { global tkhtml_priv set tkhtml_priv(defaults_set) 1 set tkhtml_priv(default_font) times set tkhtml_priv(fixed_font) courier set tkhtml_priv(font_size) medium set tkhtml_priv(small_points) "60 80 100 120 140 180 240" set tkhtml_priv(medium_points) "80 100 120 140 180 240 360" set tkhtml_priv(large_points) "100 120 140 180 240 360 480" set tkhtml_priv(huge_points) "120 140 180 240 360 480 640" set tkhtml_priv(ruler_height) 6 set tkhtml_priv(indent_incr) 4 set tkhtml_priv(w) {} set tkhtml_priv(counter) -1 } proc tkhtml_set_font {font size} { global tkhtml_priv set tkhtml_priv(default_font) $font set tkhtml_priv(font) $font set tkhtml_priv(font_size) $size } proc tkhtml_setup {w} { global tkhtml_priv if ![info exists tkhtml_priv(defaults_set)] tkhtml_defaults set tkhtml_priv(font) $tkhtml_priv(default_font) set tkhtml_priv(left) 0 set tkhtml_priv(left2) 0 set tkhtml_priv(right) 0 set tkhtml_priv(justify) L set tkhtml_priv(weight) 0 set tkhtml_priv(slant) 0 set tkhtml_priv(underline) 0 set tkhtml_priv(verbatim) 0 set tkhtml_priv(pre) 0 set tkhtml_priv(title) {} set tkhtml_priv(in_title) 0 set tkhtml_priv(color) black set tkhtml_priv(li_style) bullet set tkhtml_priv(anchor_count) 0 set tkhtml_priv(verb_end_token) {} set tkhtml_priv(stack.font) {} set tkhtml_priv(stack.color) {} set tkhtml_priv(stack.justify) {} set tkhtml_priv(stack.li_style) {} set tkhtml_priv(stack.href) {} set tkhtml_priv(points_ndx) 2 if {$tkhtml_priv(w) != $w} { set tkhtml_priv(w) $w $tkhtml_priv(w) tag config hr -relief sunken -borderwidth 2 \ -font -*-*-*-*-*-*-$tkhtml_priv(ruler_height)-*-*-*-*-*-*-* foreach elt [array names tkhtml_priv] { if [regexp "^tag\\..*" $elt] { unset tkhtml_priv($elt) } } } } proc tkhtml_define_font {name foundry family weight slant registry} { global tkhtml_priv lappend tkhtml_priv(font_names) $name set tkhtml_priv(font_info.$name) \ [list $foundry $family $weight $slant $registry] } proc tkhtml_define_entity {name body} { global tkhtml_entity set tkhtml_entity($name) $body } proc tkhtml_do {cmd {argv {}}} { global tkhtml_priv tkhtml_entity eval $tkhtml_entity($cmd) } proc tkhtml_append_text {text} { global tkhtml_priv if !$tkhtml_priv(verbatim) { if !$tkhtml_priv(pre) { regsub -all "\[ \n\r\t\]+" [string trim $text] " " text } regsub -nocase -all "&" $text {\&} text regsub -nocase -all "<" $text "<" text regsub -nocase -all ">" $text ">" text if ![string length $text] return } if {!$tkhtml_priv(pre) && !$tkhtml_priv(in_title)} { set p [$tkhtml_priv(w) get "end - 2c"] set n [string index $text 0] if {![regexp "\[ \n(\]" $p] && ![regexp "\[\\.,')\]" $n]} { $tkhtml_priv(w) insert end " " } $tkhtml_priv(w) insert end $text $tkhtml_priv(tag) return } if {$tkhtml_priv(pre) && !$tkhtml_priv(in_title)} { $tkhtml_priv(w) insert end $text $tkhtml_priv(tag) return } append tkhtml_priv(title) $text } proc tkhtml_title {} { global tkhtml_priv return $tkhtml_priv(title) } # a tag is constructed as: font?B?I?U?Points-LeftLeft2RightColorJustify proc tkhtml_set_tag {} { global tkhtml_priv set i -1 foreach var {foundry family weight slant registry} { set $var [lindex $tkhtml_priv(font_info.$tkhtml_priv(font)) [incr i]] } set x_font "-$foundry-$family-" set tag $tkhtml_priv(font) set args {} if {$tkhtml_priv(weight) > 0} { append tag "B" append x_font [lindex $weight 1]- } else { append x_font [lindex $weight 0]- } if {$tkhtml_priv(slant) > 0} { append tag "I" append x_font [lindex $slant 1]- } else { append x_font [lindex $slant 0]- } if {$tkhtml_priv(underline) > 0} { append tag "U" append args " -underline 1" } switch $tkhtml_priv(justify) { L { append args " -justify left" } R { append args " -justify right" } C { append args " -justify center" } } set pts [lindex $tkhtml_priv($tkhtml_priv(font_size)_points) \ $tkhtml_priv(points_ndx)] append tag $tkhtml_priv(points_ndx) - $tkhtml_priv(left) \ $tkhtml_priv(left2) $tkhtml_priv(right) \ $tkhtml_priv(color) $tkhtml_priv(justify) append x_font "normal-*-*-$pts-*-*-*-*-$registry-*" if $tkhtml_priv(anchor_count) { set href [tkhtml_peek href] set href_tag href[incr tkhtml_priv(counter)] set tags [list $tag $href_tag] if [info exists tkhtml_priv(command)] { $tkhtml_priv(w) tag bind $href_tag <1> \ [list tkhtml_href_click $tkhtml_priv(command) $href] } $tkhtml_priv(w) tag bind $href_tag \ [list $tkhtml_priv(w) tag configure $href_tag -foreground red] $tkhtml_priv(w) tag bind $href_tag \ [list $tkhtml_priv(w) tag configure $href_tag \ -foreground $tkhtml_priv(color)] } else { set tags $tag } if {![info exists tkhtml_priv(tag.$tag)]} { set tkhtml_priv(tag_font.$tag) 1 eval $tkhtml_priv(w) tag configure $tag \ -font $x_font -foreground $tkhtml_priv(color) \ -lmargin1 $tkhtml_priv(left)m \ -lmargin2 $tkhtml_priv(left2)m $args } if [info exists href_tag] { $tkhtml_priv(w) tag raise $href_tag $tag } set tkhtml_priv(tag) $tags } proc tkhtml_reconfig_tags {w} { global tkhtml_priv foreach tag [$w tag names] { foreach font $tkhtml_priv(font_names) { if [regexp "${font}(B?)(I?)(U?)(\[1-9\]\[0-9\]*)-" $tag t b i u points] { set j -1 if {$font != $tkhtml_priv(fixed_font)} { set font $tkhtml_priv(font) } foreach var {foundry family weight slant registry} { set $var [lindex $tkhtml_priv(font_info.$font) [incr j]] } set x_font "-$foundry-$family-" if {$b == "B"} { append x_font [lindex $weight 1]- } else { append x_font [lindex $weight 0]- } if {$i == "I"} { append x_font [lindex $slant 1]- } else { append x_font [lindex $slant 0]- } set pts [lindex $tkhtml_priv($tkhtml_priv(font_size)_points) \ $points] append x_font "normal-*-*-$pts-*-*-*-*-$registry-*" $w tag config $tag -font $x_font break } } } } proc tkhtml_push {stack value} { global tkhtml_priv lappend tkhtml_priv(stack.$stack) $value } proc tkhtml_pop {stack} { global tkhtml_priv set n [expr [llength $tkhtml_priv(stack.$stack)]-1] if {$n < 0} { puts "popping empty stack $stack" return "" } set val [lindex $tkhtml_priv(stack.$stack) $n] set tkhtml_priv(stack.$stack) [lreplace $tkhtml_priv(stack.$stack) $n $n] return $val } proc tkhtml_peek {stack} { global tkhtml_priv return [lindex $tkhtml_priv(stack.$stack) end] } proc tkhtml_parse_fields {array_var string} { upvar $array_var array foreach arg $string { if ![regexp "(\[^ \n\r=\]+)=\"?(\[^\"\n\r\t \]*)" $arg dummy field value] { puts "malformed command field" puts "field = \"$arg\"" continue } set array([string tolower $field]) $value } } proc tkhtml_set_command {cmd} { global tkhtml_priv set tkhtml_priv(command) $cmd } proc tkhtml_href_click {cmd href} { uplevel #0 $cmd $href } # define the fonts we're going to use set tkhtml_priv(font_names) "" tkhtml_define_font helvetica adobe helvetica "medium bold" "r o" iso8859 tkhtml_define_font courier adobe courier "medium bold" "r o" iso8859 tkhtml_define_font times adobe times "medium bold" "r i" iso8859 tkhtml_define_font symbol adobe symbol "medium medium" "r r" adobe # define the entities we're going to handle tkhtml_define_entity b { incr tkhtml_priv(weight); tkhtml_set_tag } tkhtml_define_entity /b { incr tkhtml_priv(weight) -1; tkhtml_set_tag } tkhtml_define_entity strong { incr tkhtml_priv(weight); tkhtml_set_tag } tkhtml_define_entity /strong { incr tkhtml_priv(weight) -1; tkhtml_set_tag } tkhtml_define_entity tt { tkhtml_push font $tkhtml_priv(font) set tkhtml_priv(font) $tkhtml_priv(fixed_font) tkhtml_set_tag } tkhtml_define_entity /tt { set tkhtml_priv(font) [tkhtml_pop font] tkhtml_set_tag } tkhtml_define_entity code { tkhtml_do tt } tkhtml_define_entity /code { tkhtml_do /tt } tkhtml_define_entity kbd { tkhtml_do tt } tkhtml_define_entity /kbd { tkhtml_do /tt } tkhtml_define_entity em { incr tkhtml_priv(slant); tkhtml_set_tag } tkhtml_define_entity /em { incr tkhtml_priv(slant) -1; tkhtml_set_tag } tkhtml_define_entity var { incr tkhtml_priv(slant); tkhtml_set_tag } tkhtml_define_entity /var { incr tkhtml_priv(slant) -1; tkhtml_set_tag } tkhtml_define_entity cite { incr tkhtml_priv(slant); tkhtml_set_tag } tkhtml_define_entity /cite { incr tkhtml_priv(slant) -1; tkhtml_set_tag } tkhtml_define_entity address { tkhtml_do br incr tkhtml_priv(slant) tkhtml_set_tag } tkhtml_define_entity /address { incr tkhtml_priv(slant) -1 tkhtml_do br tkhtml_set_tag } tkhtml_define_entity /cite { incr tkhtml_priv(slant) -1; tkhtml_set_tag } tkhtml_define_entity p { set x [$tkhtml_priv(w) get end-3c] set y [$tkhtml_priv(w) get end-2c] if {$x == "" && $y == ""} return if {$y == ""} { $tkhtml_priv(w) insert end "\n\n" return } if {$x == "\n" && $y == "\n"} return if {$y == "\n"} { $tkhtml_priv(w) insert end "\n" return } $tkhtml_priv(w) insert end "\n\n" } tkhtml_define_entity br { if {[$tkhtml_priv(w) get "end-2c"] != "\n"} { $tkhtml_priv(w) insert end "\n" } } tkhtml_define_entity title { set tkhtml_priv(in_title) 1 } tkhtml_define_entity /title { set tkhtml_priv(in_title) 0 } tkhtml_define_entity h1 { tkhtml_header 1 } tkhtml_define_entity /h1 { tkhtml_/header 1 } tkhtml_define_entity h2 { tkhtml_header 2 } tkhtml_define_entity /h2 { tkhtml_/header 2 } tkhtml_define_entity h3 { tkhtml_header 3 } tkhtml_define_entity /h3 { tkhtml_/header 3 } tkhtml_define_entity h4 { tkhtml_header 4 } tkhtml_define_entity /h4 { tkhtml_/header 4 } tkhtml_define_entity h5 { tkhtml_header 5 } tkhtml_define_entity /h5 { tkhtml_/header 5 } tkhtml_define_entity h6 { tkhtml_header 6 } tkhtml_define_entity /h6 { tkhtml_/header 6 } proc tkhtml_header {level} { global tkhtml_priv tkhtml_do p set tkhtml_priv(points_ndx) [expr 6-$level] incr tkhtml_priv(weight) tkhtml_set_tag } proc tkhtml_/header {level} { global tkhtml_priv set tkhtml_priv(points_ndx) 2 incr tkhtml_priv(weight) -1 tkhtml_set_tag tkhtml_do p } tkhtml_define_entity pre { tkhtml_do tt tkhtml_do br incr tkhtml_priv(pre) } tkhtml_define_entity /pre { tkhtml_do /tt set tkhtml_priv(pre) 0 tkhtml_do p } tkhtml_define_entity hr { tkhtml_do p $tkhtml_priv(w) insert end "\n" hr } tkhtml_define_entity a { tkhtml_parse_fields ar $argv tkhtml_push color $tkhtml_priv(color) if [info exists ar(href)] { tkhtml_push href $ar(href) } else { tkhtml_push href {} } incr tkhtml_priv(anchor_count) set tkhtml_priv(color) blue incr tkhtml_priv(underline) tkhtml_set_tag } tkhtml_define_entity /a { tkhtml_pop href incr tkhtml_priv(anchor_count) -1 set tkhtml_priv(color) [tkhtml_pop color] incr tkhtml_priv(underline) -1 tkhtml_set_tag } tkhtml_define_entity center { tkhtml_push justify $tkhtml_priv(justify) set tkhtml_priv(justify) C tkhtml_set_tag } tkhtml_define_entity /center { set tkhtml_priv(justify) [tkhtml_pop justify] tkhtml_set_tag } tkhtml_define_entity ul { if $tkhtml_priv(left) { tkhtml_do br } else { tkhtml_do p } incr tkhtml_priv(left) $tkhtml_priv(indent_incr) incr tkhtml_priv(left2) [expr $tkhtml_priv(indent_incr)+3] tkhtml_push li_style $tkhtml_priv(li_style) set tkhtml_priv(li_style) bullet tkhtml_set_tag } tkhtml_define_entity /ul { incr tkhtml_priv(left) -$tkhtml_priv(indent_incr) incr tkhtml_priv(left2) -[expr $tkhtml_priv(indent_incr)+3] set tkhtml_priv(li_style) [tkhtml_pop li_style] tkhtml_set_tag tkhtml_do p } tkhtml_define_entity li { tkhtml_do br if {$tkhtml_priv(li_style) == "bullet"} { set old_font $tkhtml_priv(font) set tkhtml_priv(font) symbol tkhtml_set_tag $tkhtml_priv(w) insert end "\xb7" $tkhtml_priv(tag) set tkhtml_priv(font) $old_font tkhtml_set_tag } } tkhtml_define_entity listing { tkhtml_do pre } tkhtml_define_entity /listing { tkhtml_do /pre } tkhtml_define_entity code { tkhtml_do pre } tkhtml_define_entity /code { tkhtml_do /pre } tkhtml_define_entity img { tkhtml_parse_fields ar $argv if [info exists ar(src)] { set file $ar(src) if [info exists tkhtml_priv(image_hook)] { set img [eval $tkhmlt_priv(image_hook) $file] } else { if [catch {set img [image create photo -file $file]} err] { puts stderr "Couldn't create image $file: $err" return } } set align bottom if [info exists ar(align)] { set align [string tolower $ar(align)] } label $tkhtml_priv(w).$img -image $img $tkhtml_priv(w) window create end -window $tkhtml_priv(w).$img \ -align $align } } tkinspect-5.1.6p10/Canvases.html010064400007650000765000000010560577212022200147070ustar00patpat Canvases List

Canvases List

The Canvases List contains a list of the canvases (created through Tk's canvas command) of the target application. Selecting a canvas from this list will display the item configuration information for each of the canvas's items.

This list has no list-specific operations.


Last modified: Wed Jun 21 15:42:59 1995 tkinspect-5.1.6p10/ChangeLog010064400007650000765000000331440767472225400140530ustar00patpatFri Jun 20 23:59:01 2003 Pat Thoyts * tkinspect.tcl: Fix for bug #757926 to fix traces. * version.tcl: Set version to 5.1.6p10 * about.tcl: Added a list of contributors to the dialog. * windows_info.tcl: Namespace qualify more sent commands. Thu Mar 20 10:01:59 2003 Pat Thoyts * windows_list.tcl: Applied patch from bug #684608 by Achim Bursian for garbled bindings display in the window view. Mon Oct 21 22:42:34 2002 Pat Thoyts * afters_list.tcl: * classes_list.tcl: * globals_list.tcl: * images_list.tcl: * names.tcl: * objects_list.tcl: * procs_list.tcl: * windows_list.tcl: bug # 624268 - always namespace qualify commands sent to the inspectee to avoid name clashes. * help.tcl: Fixed bug #624634 - formatting of ChangeLog view. Wed Oct 09 01:27:43 2002 Pat Thoyts * tkinspect.tcl: * globals_list.tcl: Implemented trace for all the supported 'send' varieties. This fixes bug #533493. Sat Apr 20 01:27:46 2002 Pat Thoyts * windows_list.tcl: Fixed bug #546259: erroneous use of 'config' Thu Apr 04 22:38:44 2002 Pat Thoyts * globals_list.tcl: * names.tcl: fix array checking (use array exists). * tkinspect.tcl: merged in support for scripted documents (patch by Steve Landers). Use the winsend package if available. Mon Mar 25 12:05:22 2002 Pat Thoyts * Bug #533899: Found and merged Paul Healy's 1997 p4 patch which adds a 'namespaces' and an 'after' viewer. Comments from the patch: - fix the `Value:' history menu so that it respects changes to target interpreters. The `clear' method is broken? - snapshot afters so that you (nearly would) always to get to see the scripts associated with an after id at a particular time. Also make the afters menu more meaningful. * classes_list.tcl: * objects_list.tcl: Improved the incr Tcl support. * README: modernised the README file. Sun Mar 24 23:50:29 2002 Pat Thoyts * Bug #533899: gracefully handle unavailable 'comm' package * Bug #532905: fix the installer. Fri Mar 22 15:53:54 2002 Pat Thoyts * names.tcl: Bug #533642: send ::info in case info is redefined. * help.tcl: Get the html help viewer to accept non-html filenames. * windows_info.tcl: handle interps without Tk commands * images_list.tcl: handle interps without Tk commands Fri Mar 22 01:04:59 2002 Pat Thoyts * version.tcl: Released version 5.1.6p7 * globals_list.tcl: * value.tcl: Bug #533367: use default Tk file selection dialogs. Thu Mar 21 15:27:53 2002 Pat Thoyts * tkinspect.tcl: Improved the dde send implementation and fixed the window title to show the application name. * globals_list.tcl: Bug #533164: Fixed the retrieve for empty arrays. * windows_info.tcl: Bug #532909: Fixed 'winfo' error handling for non-Tk applications when using 'comm' Thu Mar 21 00:32:17 2002 Pat Thoyts * tkinspect.tcl: Fixed problem with application not closing properly if not closed via the menu item. * tkinspect.tcl: Added OK and Cancel buttons to improve the handling of the comm connection dialog. Tue Mar 19 09:12:54 2002 Pat Thoyts * tkinspect.tcl: Added a dde implementation of 'send' for use on Windows. Thu Mar 14 12:09:24 2002 Pat Thoyts * classes_list.tcl: Updated to support itcl 3.2 info syntax * objects_list.tcl: Updated to support itcl 3.2 info syntax * Classes.html: new page to describe the classes list window. * tkinspect.tcl: fixed the About help menu item. * version.tcl: incremented version to p6. Fri Mar 2 00:13:08 2002 Pat Thoyts * tkinspect: applied T. Schotanus incr Tcl support patch. This provides itcl support for older (pre 3.x?) itcl versions. Fri Mar 1 23:37:21 2002 Pat Thoyts * tkinspect: applied John LoVerso's 1996 comm patch to support systems without the Tk send command. Sun Dec 14 19:46:05 1997 Paul Healy * tkinspect: describe patch procedure to get around diff/patch/RCS interaction. Released p3. Sun Nov 23 22:14:36 1997 Paul Healy * tkinspect: handle procedures and variables inside namespaces Sun Oct 5 20:09:10 1997 Paul Healy * tkinspect: handle the disappearance of the tkerror proc in tk8.0 Released p2. Fri Jun 23 00:20:15 1995 Sam Shen * version.tcl: Bump to 5.1.6. * README: Update to 5.1.6. * WhatsNew.html: Note changes in 5.1.6. * Miscellany.html: Fix typo (wrote .tkinspect_opts instead of .tkinspect_init). * version.tcl: Whoops, forgot to bump to release date. * version.tcl: Bump to 5.1.5. * lists.tcl (run_command): preserve special characters in command invocation. * windows_info.tcl: Handle windows with special characters in them. * windows_list.tcl: Handle windows with special characters in them. Wed Jun 21 01:57:59 1995 Sam Shen * lists.tcl: Mark update_needed after a clear. * globals_list.tcl (update_scalar): silly bug fix. * README: Whoops, fix install instruction. * README: Update for 5.1.4. * version.tcl: Bump version to 5.1.4. * Value.html: Note new list types. * install.tcl: Add new help files. Search for both wish and wish4.0. * WhatsNew.html: Note additional interface functions. * tkinspect.tcl: Add new help files. * Notes.html: Small changes. * Intro.html: Add images, canvases, and menus list documentation. * Miscellany.html: Note that tkinspect_select can select menus, images, and canvases. * WhatsNew.html: Document 5.1.4 changes. * Miscellany.html: Document changes to interface.tcl. * Images.html: Say what selecting an image does. * Lists.html: Document recent changes, add image, menus, and canvases lists. * Menus.html: Change "item" to "entry". * install.tcl: Grab pointer and keyboard during install. Write messages about searching for wish4.0 in log window. Add canvas_list.tcl. * lists.tcl (create): Add "Remove This List" menu item. (update_needed): check to make sure window still exists before do_update. * interface.tcl: Add tkinspect_{show,remove}_list. Rename tkinspect_value_text_window to tkinspect_value_window. Add tkinspect_value_text_widget. Add tkinspect_display_image. * help.tcl: Add up/down bindings, page up/page down bindings. * tkinspect.tcl (toplevel): Add canvas_list. (add_list/remove_list): set list_class_is_on. * windows_info.tcl (get_class): check to make sure window still exists. * windows_info.tcl: Fix bug in windows_info:clear. * images_list.tcl: Rename "Show Image" to "Display Image". Add update_self method. * windows_list.tcl: Add update_self. * menus_list.tcl: Add update_self method. * lists.tcl: Reduce width to 15. Add "Update This List" menu item and required functionality. * version.tcl: Check patchlevel and warn about betas prior to 4.0b4. Bump version to 5.1.3. * install.tcl: Add menus_list.tcl and windows_info.tcl. * tkinspect.tcl: Use just plain "wish .." instead of "wish -f ...". Add menus_list. Add windows_info.tcl and appropriate hooks. * windows_list.tcl: Move maintenance of the list of windows to windows_info. * images_list.tcl: Add Show Image menu item and functionality. * Value.html, Lists.html: Document use of button 3. * value.tcl, lists.tcl: Bring menu up on button 3. Tue Jun 20 15:28:39 1995 Sam Shen * install.tcl: Search path for a wish4.0, otherwise use /usr/local/bin/wish4.0. Fri Jun 16 01:18:26 1995 Sam Shen * install.tcl: For some reason "update idletasks" isn't good enough to get the windows redrawn. Using "update". * version.tcl: Bump to 5.1.2. * install.tcl: Install sls.ppm instead of sls.xbm. * sls.ppm: initial revision. * about.tcl: Use a color photo. * help.tcl: Add netscape-like alt-left arrow/right arrow and space/backspace/delete bindings. * cmdline.tcl: Fix packing on text window so it resizes properly. * tkinspect.tcl: Add image_list, change tkinspect(list_classes) so that lists have readable names. * images_list.tcl: initial revision (contributed by Gero Kohnert). * install.tcl: Add images_list. Sun Jun 11 02:11:52 1995 Sam Shen * Windows.html: Fix typo in ref to Lists.html. Mon Jun 5 01:46:41 1995 Sam Shen * README: update for 5.1.1. * Intro.html: Remove ref to command line page. * version.tcl: Bump to 5.1.1. * Notes.html: Add note about copyright status. * install.tcl: Add new help files, new source files. * windows_list.tcl: Group "get window info..." & "use feedback.." options together. Reorder window options. * lists.tcl: Get rid of remove list menu item (now using checkboxes on file menu.) * Lists.html: Fix note about removing lists. Add note about updating lists. * Intro.html: Rewrite some of it, fold table of contents into here. * tkinspect.tcl: Add new help topics, get rid of old ones. Add label to command entry. * WhatsNew.html: Note the interface. Sun Jun 4 01:05:37 1995 Sam Shen * Windows.html: Document remaining window options. * windows_list.tcl: Use .feedback grab to handle grab. * help.tcl: Disable forward & back during rendering. * tkinspect.tcl: Change New xxx_list menu items to checkbuttons. Raise help window. Add hack to get lists frame to collapse when there are no more lists. * help.tcl: Implement forward, back, and go. * windows_list.tcl: Add optional feedback when getting windows. * stl.tcl: Add tkhtml.tcl. * lists.tcl: Add trigger method and binding for space so keyboard usage works. * tkinspect.tcl: Get rid of options menu. Move "New x Window" stuff to file menu. Thu Jun 1 21:24:21 1995 Sam Shen * version.tcl: Bump to 5.1.0. * install.tcl: Add cmdline.tcl, stl-lite/tkhtml.tcl, and the html help files. * install.tcl: Remove tk 4.0b2 focus work-arounds. * defaults.tcl: Add defs for command line. * cmdline.tcl: initial revision. * tkinspect.tcl: Add command line interface. Source .tkinspect_init in current directory (if it exists.) * tkinspect.tcl: Fix invocation of interpreter menu so things work with Tk 4.0b3. Wed Mar 22 22:55:51 1995 Sam Shen * stl.tcl: Add feedback.tcl. * lists.tcl: Clean up behavoir of filter_editor buttons. * install.tcl: Install help.tcl. * tkinspect.tcl: Add help. Wed Feb 15 16:09:10 1995 Sam Shen (sls@gainful.lbl.gov) * version.tcl: Add a Tk version check. Bump version to 5.0.5. * sls.xbm: initial revision. * install.tcl: Add version_init call, add title. Pack buttons with some padding. Tue Feb 14 18:55:40 1995 Sam Shen (sls@gainful.lbl.gov) * install.tcl: Add version.tcl. * version.tcl: initial revision, version number 5.0.4. * lists.tcl: Make return in filter_editor add a pattern. Add list_show dialog. Add underlines. * stl.tcl: Source files at global level. * value.tcl: Add underlines. * tkinspect.tcl: Move version info to version.tcl. Add underlines. * windows_list.tcl: Add underlines. * globals_list.tcl: Add underlines. Add a menu to variable trace dialog, add saving. * defaults.tcl: Set all menubutton borderwidth's to 0. Mon Feb 13 18:52:49 1995 Sam Shen * install.tcl: Change close button name to Exit. * windows_list.tcl: Change bindtags to bindtagsplus, add bindtags. * tkinspect.tcl: Fix send command button. Fri Feb 10 02:59:10 1995 Sam Shen * First public release: version 5.0.2 * README, stl.tcl: initial revision. * tkinspect.tcl: Use stl-lite instead of the real thing. Update for install.tcl. * tkinspect.tcl: Use uniform add_foo/delete_foo names. Add delete_list. Pack lists with -fill both. Bump version to 5.0.2. * value.tcl: Add save & load. * lists.tcl: Remove now tells the main window that it's gone. Also, fix small typo in click. * defaults.tcl: Remove font defs. * windows_list.tcl: Get rid of "all" hacks, add bindtags retrieval. * value.tcl: Get rid of unimplemented search options. * lists.tcl: Add searching. * globals_list.tcl: Delete scrolled off lines correctly. Make sure we use the right name in array variable trace. Tue Feb 7 00:26:12 1995 Sam Shen * windows_list.tcl: Add classbindings "all" hack. * tkinspect.tcl: Change to 5.x.y version numbering (5.0.1 now.) Check to make sure a target has been selected when clicking. * value.tcl: Add searching (partially stolen from demos/mkTextWind.tcl). * value.tcl: Add menu entries. Allow detaching of value. * tkinspect.tcl: Allow lists and other widgets to add their own menus. Add tkinspect_failure. Check to see if there is a target. * lists.tcl: Move implementation of various lists to separate files. Implement filter editing. Add menus. Move menu defs that were in tkinspect.tcl to here. * defaults.tcl: Add more options. Mon Feb 6 02:45:44 1995 Sam Shen * lists.tcl: Flash windows for all retreive types. Format packing results nicely. Add filtering of pack -in. * value.tcl: Add history. * tkinspect.tcl: Change value when window option changes. Add filtering of pack -in options. Add buttons, command entry. tkinspect-5.1.6p10/Classes.html010064400007650000765000000013710744423235600145530ustar00patpat Classes List

Classes List

The Classes List contains a list of the incr Tcl classes defined in the target application.

The display uses the incr Tcl info command to reconstruct the class definition showing the member variable definitions and the class method code. Only the itcl builtin methods are hidden (these include the cget, configure and info methods).


Last modified: Thu Mar 14 23:16:22 GMT 2002 tkinspect-5.1.6p10/Globals.html010064400007650000765000000023410576451227000145360ustar00patpat Globals List

Globals List

The Globals List contains a list of the global variables of the target application.

This list has one list-specific operation: Trace Variable creates a new toplevel window that will contain set statements reflecting writes to the variable. (The trace will contain the last 50 set's by default, the number can be set through the *Variable_trace.savelines option.) Trace Variable handles both scalars and arrays.

For an interesting example of how this works, try the following:

  • Select an application (for example, tkinspect itself.)
  • Choose Show Global... from the Globals menu, and enter tkPriv.
  • Choose Trace Variable from the Globals menu.
You will now be tracking the tkPriv array.

The default list of patterns for the list filter is:

    ^tkPriv.*
    ^auto_.*
    ^tk_.*
And is read from the option *Globals_list.patterns.
Last modified: Sun Jun 4 22:23:01 1995 tkinspect-5.1.6p10/Images.html010064400007650000765000000012040577212035300143510ustar00patpat Images List

Images List

The Images List contains a list of the images (created through Tk's image command) of the target application. Selecting an image from this list will display the image's configuration information.

There is only one list-specific operation: Display Image, which sends commands to the target to create a new toplevel window containing a label with the image.


Last modified: Wed Jun 21 15:42:00 1995 tkinspect-5.1.6p10/Intro.html010064400007650000765000000040730744650472400142560ustar00patpat Tkinspect

Tkinspect Introduction

tkinspect is an inspector for Tk applications. It uses Tk's send command to retreive infomation from other Tk applications. When you choose an application through the File/Select Interpreter menu, lists will be filled with the names of the procs, globals, and windows the the application. Clicking on one of those names will fill the value window with the definition of the proc, the value of the global variable, or various information about the window. The value window is editable and its contents can be sent back to the selected application.

Tcl commands can be sent to the seleted application using the Command: entry, or through a command line (via the File/New Command Line menu) interface to the application. The command line is nearly identical to Tk's demo rmt.

For further information, select a topic from the help window's Topics menu or from the list below:


Last modified: Wed Jun 21 15:51:23 1995 tkinspect-5.1.6p10/Lists.html010064400007650000765000000045460577212027700142630ustar00patpat Tkinspect Lists

Lists

The lists are the listboxes just below the Command: entry. By default, there are three lists:
  • Procs is a list of all the Tcl procedures in the target application.
  • Globals is a list of the global variables of the target application.
  • Windows is a list of the windows of the target application.
  • Images is a list of the images of the target application.
  • Menus is a list of the menu widgets of the target application.
  • Canvases is a list of the canvas widgets of the target application.
By default, only the Procs, Globals, and Windows lists are shown. You can change this by adding tkinspect_show_list and tkinspect_remove_list commands to .tkinspect_init or by setting the option *Tkinspect_main.default_lists.

Each list also has a menu in the menu bar. (The menu can also be brought up by pressing button-3 in the list.) The menu contains a set of standard operations, followed by list-specific operations (if any are available.) The standard list operations are:

  • Show a X.. brings up a dialog that prompts for the name of a proc, global, or window and places the its value in the value window.
  • Find X... brings up a dialog that searches the list.
  • Edit Filter... brings up a dialog that allows editing of the list filter. The list will only displays those items that either match or don't match a set of patterns. (The default list of patterns varies for each list type.)
  • Update This List updates the contents of this list. All the lists can be updated via the File/Update Lists menu item.
  • Remove This List removes this list from the tkinspect window. A list can also be removed by deselecting its checkbox in the File menu.

Last modified: Wed Jun 21 15:32:14 1995 tkinspect-5.1.6p10/Menus.html010064400007650000765000000010420577212023200142270ustar00patpat Menus Lists

Menus Lists

The Menus List contains a list of all the menus (create through Tk's menu command) of the target application. Selecting a menu from this list will display the entry configuration information for each of the menu's entries.

This list has no list-specific operations.


Last modified: Wed Jun 21 15:42:26 1995 tkinspect-5.1.6p10/Miscellany.html010064400007650000765000000042060577247270000152570ustar00patpat Miscellany

Tkinspect Startup

tkinspect sources ~/.tkinspect_opts after it has initialized various defaults, but before it creates any windows. Here you may place option add commands and the like to customize tkinspect's look and function.

tkinspect then creates a main window, and sources .tkinspect_init (in the current directory). Here you might put commands that automatically selects an interpreter, opens a command line, sets up variable traces, etc.

Tkinspect Interface

The following functions are available for controlling tkinspect or for use in startup files:
  • tkinspect_set_target target sets target as the current interpreter.

  • tkinspect_select type name selects a proc, global, window, image, menu, or canvas. type should be proc, global, window, image, menu, or canvas. name should be the name of the thing.

  • tkinspect_create_cmdline creates a command line interface.

  • tkinspect_help ?topic? brings up the help window containing topic. topic defaults to Intro.

  • tkinspect_value_text_widget returns the name of the text widget in the value.

  • tkinspect_send_value sends the current value.

  • tkinspect_detach_value detaches the value window.

  • tkinspect_trace_global var creates a trace on the global variable var.

  • tkinspect_display_image image displays the image image.


Last modified: Fri Jun 23 00:59:53 1995 tkinspect-5.1.6p10/Notes.html010064400007650000765000000024660577212162100142460ustar00patpat Tkinspect Notes

Tkinspect Notes

tkinspect started as a quick hack to help me debug my Tk programs. Since then, I've also used tkinspect to explore and experiment with Tk programming. What started out as a 150 line one day hack has now been re-written twice and grown to over 3000 lines. I'm still having a lot of fun programming in Tcl, and so I expect tkinspect will continue to grow and evolve.

tkinspect was written using a object system written in Tcl. The object system is really just a way to group a Tcl array and a bunch of procedures. It's part of a larger Tcl library of mine called STL. tkinspect includes a subset of that library.

tkinspect itself is public domain and you may do whatever you want with it. However, the Tcl code in the stl-lite directory was written at LBL, so those files are copyright 1995 Lawrence Berkeley Lab. See stl-lite/COPYRIGHT for the full copyright notice.

If you have any comments, questions, or bug reports please send them to me. My address is SLShen@lbl.gov.


Last modified: Wed Jun 21 15:55:16 1995 tkinspect-5.1.6p10/Procs.html010064400007650000765000000010340576454251100142400ustar00patpat Procs List

Procs List

The Procs List contains a list of the procedures of the target application. This list has no list-specific operations. The default list of patterns for the list filter is:
    ^tk[A-Z].*
    ^auto_.*
And is read from the option *Procs_list.patterns.
Last modified: Mon Jun 5 01:50:13 1995 tkinspect-5.1.6p10/README010064400007650000765000000024030767472225400131530ustar00patpat tkinspect, release 5.1.6p10 (21 Jun 2003) Tkinspect is a Tk program browser originally written by Sam Shen and now updated to work with Tcl/Tk 8+, incr Tcl 3+ and to cope with systems such as MS Windows where the Tk 'send' command is not available. Based upon the 5.1.6 release of tkinspect this version contains numerous bug fixes and functionality patches. See the ChangeLog file for details. tkinspect should be pretty easy to use, hopefully you can learn how to use it by selecting an interpreter (via the File, Select Interpreter menu item) and then clicking on things. There is also an online help system. tkinspect may either be run in-place (by wish tkinspect.tcl) or can be installed using the install program (wish install.tcl). Fill out the form, and hit the install button. tkinspect itself is public domain, you may do whatever you want with it. However, tkinspect uses a hacked down library that I've written at LBL, so the files in stl-lite are copyright 1995 Lawrence Berkeley Lab. See stl-lite/COPYRIGHT for the full copyright notice. This release is maintained at SourceForge as a module of the tkcon project. See http://sourceforge.net/projects/tkcon for the project information and http://tkcon.sourceforge.net/tkinspect/ for the documentation. tkinspect-5.1.6p10/Value.html010064400007650000765000000031060577212362300142260ustar00patpat Value Window

The Value Window

The value window is an editable Tk text window that contains the definition of a proc, the value of a global, or information about a window, an image, menu entries, or canvas items.

In addition to the standard text bindings, the value window understands the following key strokes:

  • Control-x Control-s sends the value back to the selected interpreter.
  • Control-s brings up the Find... dialog.
  • Button-3 brings up the Value menu.
The Value menu item in the main menu bar contains the following entries:
  • Send Value sends the value back to the selected interpreter.
  • Find... brings up a dialog box that allows searching of the contents of the value window.
  • Save Value... and Load Value... bring up a file selection dialog that allow the value to be saved or loaded from a file.
  • Detach Value creates a new tkinspect window that contains only the main menu, a command/button window, and a value window. The current value will be copied to the new value window.

Last modified: Wed Jun 21 16:00:31 1995 tkinspect-5.1.6p10/WhatsNew.html010064400007650000765000000102370767472225400147250ustar00patpat What's New?

What's New?

See the ChangeLog for more details.

Changes in release 5.1.6p10 (21 Jun 2003)

  • Fixed a bug in tracing variables with dde and winsend
  • Fixed a bug in the windows view that garbled the display.
  • Always namespace qualify commands sent to the target.
  • Fixed a problem formatting the ChangeLog view.

Changes in release 5.1.6p9 (10 Oct 2002)

  • Support for use in scripted documents (tclkit).
  • Support 'trace' when using alternative 'send' implementations
  • Fix array checking.

Changes in release 5.1.6p8 (04 Apr 2002)

  • Merged in Paul Healy's p4 patch which provides namespaces and afters windows for examining entire namespaces or the after event timers.
  • Fixed array checking. array size was use instead of array exists in some places which can cause an empty array to be treated as if it is a normal variable.
  • Merged in Steve Landers code for Scripted Document support

Changes in release 5.1.6p7 (22 Mar 2002)

  • A raft of bugs have been fixed - see the ChangeLog for just what.
  • Added a DDE implementation of send for use on Windows.

Changes in release 5.1.6p6 (14 Mar 2002)

The original code plus some patches have been collected together and added to the tkcon project as SourceForge. Some general work has been done to bring tkinspect up to date for use with Tcl 8.3 and 8.4 and incr Tcl 3.2.

Changes in release 5.1.6 (23 June 1995)

5.1.6 has only 2 bug fixes, see the ChangeLog if you're really interested.

Changes in release 5.1.4 (21 June 1995)

5.1.4 adds more browsing lists, and has a few refinements.
  • Added 3 new lists: images, menus, and canvases. The images list was contributed by Gero Kohnert <gero@marvin.franken.de>.
  • Added button-3 bindings on lists and value (brings up menu.)
  • Added Update This List menu item to lists.
  • Cleaned up some things for Tk 4.0b4.
  • Renamed the interface function tkinspect_value_text_window to tkinspect_value_text_widget (now returns the Tk text widget.) Added tkinspect_display_image, tkinspect_show_list, and tkinspect_remove_list.

Changes in release 5.1 (5 June 1995)

5.1 fills in the missing holes of 5.0, fixes a few bugs, and adds some features.
  • Fixed the bug (?) that caused no interpreters to show up under Tk 4.0b3.
  • Added this HTML help system (renderer based on code from Angel Li <angel@flipper.rsmas.miami.edu>.)
  • Added the command line interface.
  • Cleaned up the menus, added some keyboard bindings.
  • tkinspect nows reads ~/.tkinspect_opts and .tkinspect_init (in the current directory.)
  • There's an external interface available. See the miscellany help page.

Changes in release 5.0 (February 1995)

Release 5.0 was a complete rewrite of previous versions of tkinspect. This version runs only with Tk 4.0.
Last modified: Thu Mar 14 23:34:01 GMT 2002 tkinspect-5.1.6p10/Windows.html010064400007650000765000000045670576653153000146230ustar00patpat Windows List

Windows List

The Windows List is tkinspect's most complicated list. In addition to the standard list operations, the Windows menu contains the following items that control what information about a window to display:
  • Window Configuration shows the configuration of the window.
  • Window Packing shows the pack commands that packed the window into its parent.
  • Slave Window Packing shows the pack commands that packed the slaves of the window.
  • Window Bindtags & Bindings shows the current bindtag order along with the bindings of each of the tags.
  • Window Bindtags shows the current bindtag order of the window.
  • Window Bindings shows just the bindings for the window.
  • Window Class Bindings shows the bindings for the window's class.
The following options avoid common pitfalls in sending back window values:
  • Filter Empty Window Options removes window options that are empty ({}) from values that are sent. Some Tk configuration parameters are displayed as empty, but setting them to {} can mean something different. For example, canvas scrollregion's.
  • Filter Window -class Options removes -class options from values that are sent. Setting the window class of frame's and toplevel's after they've been created is an error.
  • Filter Pack -in Options removes -in options from values that are sent.
The following options control when & how windows are retreived:
  • Get Window Information controls whether or not the windows should be retrieved when a new interpreter is selected or the lists are updated. You may want to turn this on if getting the list of windows takes a long time.
  • Use Feedback When Getting Windows controls whether or not the little feedback percentage bar appears when the windows list is created.

Last modified: Sun Jun 11 02:11:40 1995 tkinspect-5.1.6p10/about.tcl010064400007650000765000000032300767472225400141100ustar00patpat# # $Id: about.tcl,v 1.5 2003/06/21 00:19:56 patthoyts Exp $ # # Handle the about box. # dialog about { param obliqueFont -*-helvetica-medium-o-*-*-12-* Font param font -*-helvetica-medium-r-*-*-12-* Font param boldFont -*-helvetica-bold-r-*-*-18-* Font method create {} { global tkinspect tkinspect_library wm withdraw $self wm transient $self . pack [frame $self.border -relief ridge -bd 4] -expand 1 -fill both label $self.title -text "tkinspect" -font $slot(boldFont) label $self.ver \ -text "Release $tkinspect(release) ($tkinspect(release_date))" \ -font $slot(font) label $self.com -text "\n Bugs, suggestions and patches to:\n\ http://sourceforge.net/projects/tkcon/ \n" \ -font $slot(obliqueFont) frame $self.mug -bd 4 label $self.mug.l -justify left \ -text "Originally by Sam Shen\n\Contributions\ from:\nPaul Healy\nJohn LoVerso\n\T. Schotanus\nPat Thoyts\n" global about_priv if ![info exists about_priv(mug_image)] { set about_priv(mug_image) \ [image create photo -file $tkinspect_library/sls.ppm] } label $self.mug.bm -image $about_priv(mug_image) -bd 2 \ -relief sunken pack $self.mug.l -side left -fill both -expand yes pack $self.mug.bm -fill none button $self.ok -text "Ok" -command "destroy $self" pack $self.title $self.ver $self.com $self.mug \ -in $self.border -side top -fill x pack $self.ok -in $self.border -side bottom -pady 5 bind $self "destroy $self" } method reconfig {} { } method run {} { wm deiconify $self focus $self center_window $self tkwait visibility $self grab set $self tkwait window $self } } tkinspect-5.1.6p10/afters_list.tcl010064400007650000765000000024040755510140200152770ustar00patpat# afters_list.tcl - Originally written by Paul Healy # # $Id: afters_list.tcl,v 1.2 2002/10/21 22:43:14 patthoyts Exp $ widget afters_list { object_include tkinspect_list param title "Afters" method get_item_name {} { return after } method update {target} { $self clear foreach after [lsort [send $target ::after info]] { $self append $after } } method retrieve {target after} { set cmd [list ::after info $after] set retcode [catch [list send $target $cmd] msg] if {$retcode != 0} { set result "Error: $msg\n" } elseif {$msg != ""} { set script [lindex $msg 0] set type [lindex $msg 1] set result "# after type=$type\n" # there is no way to get even an indication of when a timer will # expire. tcl should be patched to optionally return this. switch $type { idle {append result "after idle $script\n"} timer {append result "after ms $script\n"} default {append result "after $type $script\n"} } } else { set result "Error: empty after $after?\n" } return $result } method send_filter {value} { return $value } } tkinspect-5.1.6p10/canvas_list.tcl010064400007650000765000000020660577210472200153010ustar00patpat# # $Id: canvas_list.tcl,v 1.1 1995/06/21 21:06:26 sls Exp $ # # Handles browsing canvas items. # widget canvas_list { object_include tkinspect_list param title "Canvases" method get_item_name {} { return canvas } method update_self {target} { $slot(main) windows_info update $target $self update $target } method update {target} { $self clear foreach w [$slot(main) windows_info get_windows] { if {[$slot(main) windows_info get_class $target $w] == "Canvas"} { $self append $w } } } method retrieve {target canvas} { set items [send $target $canvas find all] set result "# canvas $canvas has [llength $items] items\n" foreach item $items { append result "# item $item is tagged [list [send $target $canvas gettags $item]]\n" append result "$canvas itemconfigure $item" foreach spec [send $target [list $canvas itemconfig $item]] { append result " \\\n\t[lindex $spec 0] [list [lindex $spec 4]]" } append result "\n" } return $result } method send_filter {value} { return $value } } tkinspect-5.1.6p10/classes_list.tcl010064400007650000765000000127450755510140200154610ustar00patpat# # $Id: classes_list.tcl,v 1.4 2002/10/21 22:43:14 patthoyts Exp $ # # Written by: T. Schotanus # E-mail: sst@bouw.tno.nl # URL: http://huizen.dds.nl/~quintess # # Itcl 3.2 support by Pat Thoyts # We are hanging onto the older code to support old versions although # this needs testing. # widget class_list { object_include tkinspect_list param title "Classes" param itcl_version 0 method get_item_name {} { return class } method update {target} { $self clear # Need info on older itcl version to do this properly. set cmd [list if {[::info command itcl_info] != {}} {::itcl_info classes}] set classes [lsort [send $target $cmd]] if {$classes != {}} { set slot(itcl_version) [send $target ::package provide Itcl] } foreach class $classes { $self append $class } } method retrieve {target class} { if {$slot(itcl_version) != {}} { if {$slot(itcl_version) >= 3} { return [$self retrieve_new $target $class] } else { return [$self retrieve_old $target $class] } } } method retrieve_old {target class} { set res "itcl_class $class {\n" set cmd [list $class :: info inherit] set inh [send $target $cmd] if {$inh != ""} { set res "$res\tinherit $inh\n\n" } else { set res "$res\n" } set pubs [send $target [list $class :: info public]] foreach arg $pubs { regsub {(.*)::} $arg {} a set res "$res\tpublic $a\n" } if {$pubs != ""} { set res "$res\n" } set prots [send $target [list $class :: info protected]] foreach arg $prots { regsub {(.*)::} $arg {} a if {$a != "this"} { set res "$res\tprotected $a\n" } } if {$prots != ""} { set res "$res\n" } set coms [send $target [list $class :: info common]] foreach arg $coms { regsub {(.*)::} $arg {} a set cmd [list $class :: info common $a] set com [send $target $cmd] set res "$res\tcommon $a [list [lindex $com 2]] (default: [list [lindex $com 1]])\n" } if {$coms != ""} { set res "$res\n" } set meths [send $target [list $class :: info method]] foreach arg $meths { if {[string first $class $arg] == 0} { regsub {(.*)::} $arg {} a set cmd [list $class :: info method $a] set meth [send $target $cmd] if {$a != "constructor" && $a != "destructor"} { set nm "method " } else { set nm "" } if {[lindex $meth 1] != ""} { set res "$res\t$nm$a [lrange $meth 1 end]\n\n" } } } set procs [send $target [list $class :: info proc]] foreach arg $procs { if {[string first $class $arg] == 0} { regsub {(.*)::} $arg {} a set cmd [list $class :: info proc $a] set proc [send $target $cmd] if {[lindex $proc 1] != ""} { set res "$res\tproc $a [lrange $proc 1 end]\n\n" } } } set res "$res}\n" return $res } method retrieve_new {target class} { set res "itcl::class $class {\n" set cmd [list ::namespace eval $class {info inherit}] set inh [send $target $cmd] if {$inh != ""} { append res " inherit $inh\n\n" } else { append res "\n" } set vars [send $target ::namespace eval $class {info variable}] foreach var $vars { set name [namespace tail $var] set cmd [list ::namespace eval $class \ [list info variable $name -protection -type -name -init]] set text [send $target $cmd] append res " $text\n" } append res "\n" set funcs [send $target [list ::namespace eval $class {info function}]] foreach func [lsort $funcs] { set qualclass "::[string trimleft $class :]" if {[string first $qualclass $func] == 0} { set name [namespace tail $func] set cmd [list ::namespace eval $class [list info function $name]] set text [send $target $cmd] if {![string match "@itcl-builtin*" [lindex $text 4]]} { switch -exact -- $name { constructor { append res " $name [lrange $text 3 end]\n" } destructor { append res " $name [lrange $text 4 end]\n" } default { append res " [lindex $text 0] [lindex $text 1] $name\ [lrange $text 3 end]\n" } } } } } append res "}\n" return $res } method send_filter {value} { return $value } } tkinspect-5.1.6p10/cmdline.tcl010064400007650000765000000114730744423235700144140ustar00patpat# # $Id: cmdline.tcl,v 1.3 2002/03/14 23:40:31 pat Exp $ # # Provide a command line interface to an application (much of the # code is lifted out of the Tk demo rmt). # # [PT]: this should be replaced by tkcon... dialog command_line { param main param target "" member executing 0 member last_command "" method create {} { frame $self.menu -bd 2 -relief raised pack $self.menu -side top -fill x menubutton $self.menu.file -text "File" -menu $self.menu.m \ -underline 0 -menu $self.menu.file.m pack $self.menu.file -side left set m [menu $self.menu.file.m] $m add command -label "Close Window" -underline 0 \ -command "destroy $self" text $self.t -yscroll "$self.sb set" scrollbar $self.sb -command "$self.t yview" pack $self.sb -side right -fill y pack $self.t -side left -fill both -expand 1 # Create a binding to forward commands to the target application, # plus modify many of the built-in bindings so that only information # in the current command can be deleted (can still set the cursor # earlier in the text and select and insert; just can't delete). bindtags $self.t "$self.t Text . all" bind $self.t { %W mark set insert {end - 1c} %W insert insert "\n" regexp "(.*)\\.t$" %W dummy self command_line:invoke $self break } bind $self.t { if {[%W tag nextrange sel 1.0 end] != ""} { %W tag remove sel sel.first promptEnd } else { if [%W compare insert < promptEnd] { break } } } bind $self.t { if {[%W tag nextrange sel 1.0 end] != ""} { %W tag remove sel sel.first promptEnd } else { if [%W compare insert <= promptEnd] { break } } } bind $self.t { if [%W compare insert < promptEnd] { break } } bind $self.t { if [%W compare insert < promptEnd] { %W mark set insert promptEnd } } bind $self.t { if [%W compare insert < promptEnd] { break } } bind $self.t { if [%W compare insert < promptEnd] { break } } bind $self.t { if [%W compare insert <= promptEnd] { break } } bind $self.t { if [%W compare insert <= promptEnd] { break } } bind $self.t { %W tag remove sel sel.first promptEnd } bind $self.t "command_line:text_insert $self %A; break" $self.t tag configure bold \ -font {Courier 12 bold} #-font -*-Courier-Bold-R-Normal-*-120-*-*-*-*-*-* $self prompt } method destroy {} { $slot(main) delete_cmdline $self } method reconfig {} { } # The procedure below is used to print out a prompt at the # insertion point (which should be at the beginning of a line # right now). method prompt {} { $self.t insert insert "$slot(target): " $self.t mark set promptEnd {insert} $self.t mark gravity promptEnd left $self.t tag add bold {promptEnd linestart} promptEnd } # The procedure below executes a command (it takes everything on the # current line after the prompt and either sends it to the remote # application or executes it locally, depending on "app"). method invoke {} { set cmd [$self.t get promptEnd insert] incr slot(executing) 1 if [info complete $cmd] { if {$cmd == "!!\n"} { set cmd $slot(last_command) } else { set slot(last_command) $cmd } if {$slot(target) == "local"} { set result [catch [list uplevel #0 $cmd] msg] } else { set result [catch [list send $slot(target) $cmd] msg] } if {$result != 0} { $self.t insert insert "Error: $msg\n" } else { if {$msg != ""} { $self.t insert insert $msg\n } } $self prompt $self.t mark set promptEnd insert } incr slot(executing) -1 $self.t yview -pickplace insert } # The following procedure is invoked to change the application that # we're talking to. It also updates the prompt for the current # command, unless we're in the middle of executing a command from # the text item (in which case a new prompt is about to be output # so there's no need to change the old one). method set_target {target} { if ![string length $target] { set target local } set slot(target) $target if !$slot(executing) { $self.t mark gravity promptEnd right $self.t delete "promptEnd linestart" promptEnd $self.t insert promptEnd "$target: " $self.t tag add bold "promptEnd linestart" promptEnd $self.t mark gravity promptEnd left } wm title $self "Command Line: $target" return {} } method text_insert {s} { if {$s == ""} { return } catch { if {[$self.t compare sel.first <= insert] && [$self.t compare sel.last >= insert]} { $self.t tag remove sel sel.first promptEnd $self.t delete sel.first sel.last } } $self.t insert insert $s $self.t see insert } } tkinspect-5.1.6p10/defaults.tcl010064400007650000765000000012270576353174100146050ustar00patpat# # $Id: defaults.tcl,v 1.5 1995/06/02 06:46:57 sls Exp $ # proc tkinspect_default_options {} { global tkinspect_default option add *Scrollbar*width 12 option add *Label*padX 0 option add *Label*padY 0 option add *Label*borderWidth 0 option add *Frame.highlightThickness 0 option add *Frame.borderWidth 2 option add *Menubutton.borderWidth 0 option add *Command_line.highlightThickness 0 option add *Command_line.borderWidth 2 option add *Tkinspect_main.highlightThickness 0 option add *Procs_list.patterns { ^tk[A-Z].* ^auto_.* } option add *Globals_list.patterns { ^tkPriv.* ^auto_.* ^tk_.* } } tkinspect-5.1.6p10/dot.tkinspect_init010064400007650000765000000004420743753721000160240ustar00patpat# # this is an example .tkinspect_init, it's what I use when I debug tkinspect # itself. # tkinspect_set_target tkinspect.tcl tkinspect_show_list images tkinspect_show_list canvas tkinspect_select global tkPriv tkinspect_help WhatsNew tkinspect_create_cmdline tkinspect_trace_global tkPriv tkinspect-5.1.6p10/globals_list.tcl010064400007650000765000000152570755510140200154500ustar00patpat# # $Id: globals_list.tcl,v 1.11 2002/10/21 22:43:14 patthoyts Exp $ # set variable_trace_priv(counter) -1 set variable_trace_priv(trace_text) { send %s } dialog variable_trace { param target "" param variable "" param width 50 param height 5 param savelines 50 param main member is_array 0 member trace_cmd "" method create {} { pack [frame $self.menu -bd 2 -relief raised] -side top -fill x menubutton $self.menu.file -text "File" -underline 0 \ -menu $self.menu.file.m pack $self.menu.file -side left set m [menu $self.menu.file.m] $m add command -label "Save Trace..." -command "$self save" \ -underline 0 $m add separator $m add command -label "Close Window" -command "destroy $self" \ -underline 0 scrollbar $self.sb -relief sunken -bd 1 -command "$self.t yview" text $self.t -yscroll "$self.sb set" -setgrid 1 pack $self.sb -side right -fill y pack $self.t -side right -fill both -expand 1 set where [set ::[subst $slot(main)](target,self)] if {![send $slot(target) ::array exists $slot(variable)]} { set slot(trace_cmd) "send $where $self update_scalar" $self update_scalar "" "" w set slot(is_array) 0 set title "Trace Scalar" } else { set slot(trace_cmd) "send $where $self update_array" set slot(is_array) 1 set title "Trace Array" } $self check_remote_send send $slot(target) \ [list ::trace variable $slot(variable) wu $slot(trace_cmd)] wm title $self "$title: $slot(target)/$slot(variable)" wm iconname $self "$title: $slot(target)/$slot(variable)" } method reconfig {} { $self.t config -width $slot(width) -height $slot(height) } method destroy {} { send $slot(target) \ [list ::trace vdelete $slot(variable) wu $slot(trace_cmd)] } method update_scalar {args} { set op [lindex $args end] if {$op == "w"} { $self.t insert end-1c \ [list set $slot(variable) \ [send $slot(target) [list ::set $slot(variable)]]] } else { $self.t insert end-1c [list unset $slot(variable)] } $self.t insert end-1c "\n" $self scroll } method update_array {args} { if {[set len [llength $args]] == 3} { set n1 [lindex $args 0] set n2 [lindex $args 1] set op [lindex $args 2] } else { set n1 [lindex $args 0] set op [lindex $args 1] } if {$op == "w"} { $self.t insert end-1c \ [list set [set slot(variable)]([set n2]) \ [send $slot(target) [list ::set [set slot(variable)]([set n2])]]] } elseif {[info exists n2]} { $self.t insert end-1c [list unset [set slot(variable)]([set n2])] } else { $self.t insert end-1c [list unset $slot(variable)] } $self.t insert end-1c "\n" $self scroll } method scroll {} { scan [$self.t index end] "%d.%d" line col if {$line > $slot(savelines)} { $self.t delete 1.0 2.0 } $self.t see end } method save {} { #filechooser $self.save -title "Save $slot(variable) Trace" -newfile 1 #set file [$self.save run] set file [tk_getSaveFile -title "Save $slot(variable) Trace"] if {![string length $file]} return set fp [open $file w] puts $fp [$self.t get 1.0 end] close $fp $slot(main) status "Trace saved to \"$file\"." } method check_remote_send {} { # ensure that the current target has a valid send command # This is commonly not the case under Windows. set cmd [send $slot(target) [list ::info commands ::send]] set type [set ::[subst $slot(main)](target,type)] # If we called in using 'comm' then even if we do have a built # in send we need to also support using comm. if {[string match $type "comm"]} { set script { if [string match ::send [info command ::send]] { rename ::send ::tk_send } proc send {app args} { if [string match {[0-9]*} $app] { eval ::comm::comm send [list $app] $args } else { eval ::tk_send [list $app] $args } } } set cmd [send $slot(target) $script] $slot(main) status "comm: $cmd" } if {$cmd == {}} { switch -exact -- $type { winsend { set script { ::proc ::send {app args} { eval winsend send [list $app] $args } } send $slot(target) $script } dde { set script { ::proc ::send {app args} { eval dde eval [list $app] $args } } send $slot(target) $script } default { $slot(main) status "Target requires \"send\" command." } } } return $cmd } } proc create_variable_trace {main target var} { global variable_trace_priv variable_trace .vt[incr variable_trace_priv(counter)] -target $target \ -variable $var -main $main } widget globals_list { object_include tkinspect_list param title "Globals" method get_item_name {} { return global } method create {} { tkinspect_list:create $self $slot(menu) add separator $slot(menu) add command -label "Trace Variable" -underline 0 \ -command "$self trace_variable" } method update {target} { $self clear foreach var [lsort [names::vars $target]] { $self append $var } } method retrieve {target var} { if ![send $target [list array exists $var]] { #return [list set $var [send $target [list set $var]]] set cmd [list set $var] set retcode [catch [list send $target $cmd] msg] if {$retcode != 0} { return "Info: $var has not been defined\n ($msg)\n" } else { return [list set $var $msg] } } set result {} set names [lsort [send $target [list ::array names $var]]] if {[llength $names] == 0} { append result "array set $var {}\n" } else { foreach elt $names { append result [list set [set var]($elt) \ [send $target [list ::set [set var]($elt)]]] append result "\n" } } return $result } method send_filter {value} { return $value } method trace_variable {} { set target [$slot(main) target] if ![string length $slot(current_item)] { tkinspect_failure \ "No global variable has been selected. Please select one first." } create_variable_trace $slot(main) $target $slot(current_item) } } tkinspect-5.1.6p10/help.tcl010064400007650000765000000113420755510642100137170ustar00patpat# # $Id: help.tcl,v 1.9 2002/10/21 23:26:09 patthoyts Exp $ # dialog help_window { param topics {} param width 100 param height 35 param helpdir . member history {} member history_ndx -1 member history_len 0 member rendering 0 method create {} { frame $self.menu -relief raised -bd 2 menubutton $self.menu.topics -text "Topics" -underline 0 \ -menu $self.menu.topics.m pack $self.menu.topics -in $self.menu -side left set m [menu $self.menu.topics.m] menubutton $self.menu.navigate -text "Navigate" -underline 0 \ -menu $self.menu.navigate.m pack $self.menu.navigate -in $self.menu -side left set m [menu $self.menu.navigate.m] $m add command -label "Forward" -underline 0 -state disabled \ -command "$self forward" -accelerator f $m add command -label "Back" -underline 0 -state disabled \ -command "$self back" -accelerator b $m add cascade -label "Go" -underline 0 -menu $m.go menu $m.go -postcommand "$self fill_go_menu" frame $self.text -bd 2 -relief raised scrollbar $self.text.sb -command "$self.text.t yview" text $self.text.t -relief sunken -bd 2 -yscroll "$self.text.sb set" \ -wrap word -setgrid 1 set t $self.text.t pack $self.text.sb -in $self.text -side right -fill y pack $self.text.t -in $self.text -side left -fill both -expand yes pack $self.menu -in $self -side top -fill x pack $self.text -in $self -side bottom -fill both -expand yes bind $self "$self forward" bind $self "$self back" bind $self "$self forward" bind $self "$self back" bind $self "$self page_forward" bind $self "$self page_forward" bind $self "$self page_back" bind $self "$self page_back" bind $self "$self page_back" bind $self "$self line_forward" bind $self "$self line_back" } method reconfig {} { set m $self.menu.topics.m $m delete 0 last foreach topic $slot(topics) { $m add radiobutton -variable [object_slotname topic] \ -value $topic \ -label $topic \ -command [list $self show_topic $topic] } $m add separator $m add command -label "Close Help" -underline 0 \ -command "destroy $self" $self.text.t config -width $slot(width) -height $slot(height) } method show_topic {topic} { incr slot(history_ndx) set slot(history) [lrange $slot(history) 0 $slot(history_ndx)] set slot(history_len) [expr $slot(history_ndx) + 1] lappend slot(history) $topic $self read_topic $topic } method read_topic {topic} { # probably should use uri::geturl from tcllib set slot(topic) $topic wm title $self "Help: $topic" set filename [file join $slot(helpdir) $topic] if {![file exist $filename]} { append filename .html } set f [open $filename r] set txt [read $f] close $f # Fix for if [string match -nocase "*ChangeLog" $filename] { set txt "
$txt
" } feedback .help_feedback -steps [set slot(len) [string length $txt]] \ -title "Rendering HTML" .help_feedback grab set slot(remaining) $slot(len) set slot(rendering) 1 tkhtml_set_render_hook "$self update_feedback" tkhtml_set_command "$self follow_link" tkhtml_render $self.text.t $txt destroy .help_feedback set slot(rendering) 0 set m $self.menu.navigate.m if {($slot(history_ndx)+1) < $slot(history_len)} { $m entryconfig 1 -state normal } else { $m entryconfig 1 -state disabled } if {$slot(history_ndx) > 0} { $m entryconfig 2 -state normal } else { $m entryconfig 2 -state disabled } } method follow_link {link} { $self show_topic $link } method forward {} { if {$slot(rendering) || ($slot(history_ndx)+1) >= $slot(history_len)} return incr slot(history_ndx) $self read_topic [lindex $slot(history) $slot(history_ndx)] } method back {} { if {$slot(rendering) || $slot(history_ndx) <= 0} return incr slot(history_ndx) -1 $self read_topic [lindex $slot(history) $slot(history_ndx)] } method fill_go_menu {} { set m $self.menu.navigate.m.go catch {$m delete 0 last} for {set i [expr [llength $slot(history)]-1]} {$i >= 0} {incr i -1} { set topic [lindex $slot(history) $i] $m add command -label $topic \ -command [list $self show_topic $topic] } } method update_feedback {n} { if {($slot(remaining) - $n) > .1*$slot(len)} { .help_feedback step [expr $slot(remaining) - $n] update idletasks set slot(remaining) $n } } method page_forward {} { $self.text.t yview scroll 1 pages } method page_back {} { $self.text.t yview scroll -1 pages } method line_forward {} { $self.text.t yview scroll 1 units } method line_back {} { $self.text.t yview scroll -1 units } } tkinspect-5.1.6p10/images_list.tcl010064400007650000765000000040220755510140200152560ustar00patpat# # $Id: images_list.tcl,v 1.5 2002/10/21 22:43:14 patthoyts Exp $ # # Contributed by Gero Kohnert (gero@marvin.franken.de) 1995 # widget images_list { object_include tkinspect_list param title "Images" method create {} { tkinspect_list:create $self $slot(menu) add separator $slot(menu) add command -label "Display Image" -underline 0 \ -command "$self display_image" } method get_item_name {} { return image } method update_self {target} { $slot(main) windows_info update $target $self update $target } method update {target} { $self clear set cmd [list if {[::info command image] != {}} {::image names}] foreach image [lsort [send $target $cmd]] { $self append $image } } method retrieve {target image} { set result "# image configuration for [list $image]\n" append result "# ([send $target ::image width $image]x[send $target ::image height $image] [send $target ::image type $image] image)\n" append result "$image config" foreach spec [send $target [list $image config]] { if {[llength $spec] == 2} continue append result " \\\n\t[lindex $spec 0] [list [lindex $spec 4]]" } append result "\n" return $result } method send_filter {value} { return $value } method display_image {} { set target [$slot(main) target] if ![string length $slot(current_item)] { tkinspect_failure \ "No image has been selected. Please select one first." } if ![send $target ::info exists __tkinspect_image_counter__] { send $target ::set __tkinspect_image_counter__ 0 } while {[send $target ::winfo exists .tkinspect_image\$__tkinspect_image_counter__]} { send $target ::incr __tkinspect_image_counter__ } set w .tkinspect_image[send $target ::set __tkinspect_image_counter__] send $target [::subst { ::toplevel $w ::button $w.close -text "Close $slot(current_item)" \ -command "destroy $w" ::label $w.img -image $slot(current_item) ::pack $w.close $w.img -side top ::wm title $w "tkinspect $slot(current_item)" }] } } tkinspect-5.1.6p10/install.tcl010064400007650000765000000152750744773615100144570ustar00patpat#!/bin/sh # \ exec wish "$0" ${1+"$@"} # # $Id: install.tcl,v 1.20 2002/03/26 00:10:17 patthoyts Exp $ # # Installation script for Tkinspect release 5. To install: # # 1. Go to the tkinspect source directory. # 2. Type: wish -f install.tcl. # 3. Fill out the form. # 4. Hit the install button. If all goes well, the last line in # the log window should be "Installed finished." # if ![file exists tclIndex] { puts "Generating auto loader index..." auto_mkindex . *.tcl } set tkinspect_library . lappend auto_path . version_init stl_lite_init widget install_path { param label param variable method create {} { entry $self.e -width 60 -bd 2 -relief sunken label $self.l pack $self.e -side right pack $self.l -side left } method reconfig {} { $self.l config -text $slot(label) $self.e config -textvariable $slot(variable) } } widget install_dir { object_include install_path method verify {} { upvar #0 $slot(variable) dir set dir [uplevel #0 [list subst $dir]] if ![file exists $dir] { set ans [tk_dialog .mkdir "Create Directory?" "The directroy $dir does not exists, should I create it?" question 0 "Yes" "Cancel Install"] if {$ans == 1} { return 0 } if [catch {file mkdir $dir} msg] { tk_dialog .error "Error Making Directory" "Couldn't make directory $dir: $msg" error 0 "Ok" return 0 } } return 1 } } widget install_exec { object_include install_path method verify {} { upvar #0 $slot(variable) file set file [uplevel #0 [list subst $file]] if ![file executable $file] { tk_dialog .error "Error" "Executable $file isn't executable!" error 0 "Ok" return 0 } return 1 } } label .title -text "Tkinspect Installation" \ -font -adobe-helvetica-bold-r-*-*-*-180-*-*-*-*-*-* label .title2 -text "Release $tkinspect(release) ($tkinspect(release_date))" \ -font -*-helvetica-medium-r-*-*-12-* pack .title .title2 -side top text .instructions -relief ridge -bd 4 -width 20 -height 4 -wrap word \ -takefocus 0 .instructions insert 1.0 \ {Fill out the pathnames below and press the install button. Any errors will appear in log window below. If you wish to demo tkinspect w/o installing it, try "wish -f tkinspect.tcl". } pack .instructions -side top -fill both -expand 1 switch -exact -- $tcl_platform(platform) { unix { set prefix /usr/local } windows - macintosh { set prefix [eval file join [lrange \ [file split [info nameofexecutable]] 0 end-2]] } } set bindir \$prefix/bin set libdir \$prefix/lib/tkinspect install_dir .prefix -label Prefix: -variable prefix install_dir .bindir -label "Bin dir:" -variable bindir install_dir .libdir -label "Library dir:" -variable libdir install_exec .wish -label "Wish executable:" -variable wish pack .prefix .bindir .libdir .wish -side top -fill x text .log -width 70 -height 10 -bd 4 -relief ridge -takefocus 0 pack .log -side top -fill both -expand 1 frame .buttons pack .buttons -side top button .install -text "Install" -command do_install button .cancel -text "Exit" -command "destroy ." pack .install .cancel -in .buttons -side left -padx .1c wm title . "Tkinspect Installation" center_window . proc log {msg} { .log insert end "$msg" .log see end update } set wish [info nameofexecutable] #foreach name {wish8.4 wish8.3 wish8.0 wish4.0 wish} { # log "Searching for $name..." # foreach dir [split $env(PATH) :] { # if [file executable [file join $dir $name]] { # set wish [file join $dir $name] # break # } # } # if ![info exists wish] { # log "not found!\n" # continue # } # break #} if [info exists wish] { log "using $wish\n" } else { set wish /usr/local/bin/wish8.3 log "Hmm, using $wish anyways...\n" } proc install_files {dir files} { global tcl_platform foreach file $files { log "Copying $file to $dir..." if {[catch { set dest [file join $dir [file tail $file]] file copy -force $file $dest switch -exact -- $tcl_platform(platform) { unix { file attributes $dest -permissions 0444 } windows - macintosh { file attributes $dest -readonly 1 } default { error "platform $tcl_platform(platform) not recognised" } } } errmsg]} { log "whoops: $errmsg, install aborted.\n" return 0 } log "ok.\n" } return 1 } proc regsub_quote {string} { regsub -all {\\([0-9])} $string {\\\\\1} string regsub -all "&" $string {\\&} string return $string } proc install {} { global prefix libdir bindir wish tcl_platform foreach w {.prefix .bindir .libdir .wish} { log "Checking [$w cget -variable]..." if ![$w verify] { log "install aborted\n" return } log "ok.\n" } if ![file isdirectory [file join $libdir stl-lite]] { log "Making $libdir/stl-lite directory..." if [catch {file mkdir [file join $libdir stl-lite]} error] { log "whoops: $error, install aborted.\n" return } log "ok.\n" } if ![install_files $libdir { about.tcl defaults.tcl windows_info.tcl lists.tcl globals_list.tcl procs_list.tcl windows_list.tcl images_list.tcl menus_list.tcl canvas_list.tcl value.tcl stl.tcl sls.ppm version.tcl help.tcl cmdline.tcl interface.tcl tclIndex ChangeLog names.tcl classes_list.tcl objects_list.tcl afters_list.tcl namespaces_list.tcl Intro.html Lists.html Procs.html Globals.html Windows.html Images.html Canvases.html Menus.html Classes.html Value.html Miscellany.html Notes.html WhatsNew.html }] { return } if ![install_files $libdir/stl-lite { stl-lite/filechsr.tcl stl-lite/simpleentry.tcl stl-lite/object.tcl stl-lite/tk_util.tcl stl-lite/feedback.tcl stl-lite/tkhtml.tcl }] { return } log "Making tkinspect shell script..." if [catch { set progname tkinspect if {$tcl_platform(platform) == "windows"} { append progname .tcl } file delete -force [file join $bindir $progname] set fp [open tkinspect.tcl r] set text [read $fp] close $fp regsub -all @tkinspect_library@ $text [regsub_quote $libdir] text regsub -all @wish@ $text [regsub_quote $wish] text set fp [open [file join $bindir $progname] w] puts $fp $text close $fp if {$tcl_platform(platform) == "unix"} { file attributes [file join $bindir $progname] -permissions 0555 } } error] { log "whoops: $error, install aborted.\n" return } log "ok.\n" log "Install finished.\n" } proc do_install {} { toplevel .grab wm withdraw .grab while [catch {grab set .grab}] {} set old_focus [focus -lastfor .grab] focus .grab install grab release .grab focus $old_focus destroy .grab } tkinspect-5.1.6p10/interface.tcl010064400007650000765000000032070577211350400147270ustar00patpat# # $Id: interface.tcl,v 1.2 1995/06/21 22:03:48 sls Exp $ # # Provide a uniform interface to tkinspect's actions. # # look for a main window proc tkinspect_main_window {} { for {set i 0} {1} {incr i} { if [winfo exists .main$i] { return .main$i } } } proc tkinspect_show_list {list} { set main [tkinspect_main_window] $main add_list ${list}_list } proc tkinspect_remove_list {list} { set main [tkinspect_main_window] $main.lists.${list}_list remove } proc tkinspect_set_target {target} { set main [tkinspect_main_window] $main set_target $target } proc tkinspect_select {type thing} { set main [tkinspect_main_window] if {$type == "canvas"} { set type canva } ;# terrible hack $main.lists.${type}s_list run_command $thing } proc tkinspect_create_cmdline {} { set main [tkinspect_main_window] $main add_cmdline } proc tkinspect_help {{topic ""}} { global tkinspect if ![string length $topic] { set topic [lindex $tkinspect(help_topics) 0] } set main [tkinspect_main_window] $main help $topic } proc tkinspect_value_window {} { return [tkinspect_main_window].value } proc tkinspect_value_text_widget {} { return [tkinspect_main_window].value.t } proc tkinspect_send_value {} { [tkinspect_value_window] send_value } proc tkinspect_detach_value {} { [tkinspect_value_window] detach } proc tkinspect_trace_global {var} { set main [tkinspect_main_window] create_variable_trace $main [$main target] $var } proc tkinspect_display_image {image} { set main [tkinspect_main_window] tkinspect_select image $image $main.lists.images_list display_image } tkinspect-5.1.6p10/lists.tcl010064400007650000765000000210560577246555200141440ustar00patpat# # $Id: lists.tcl,v 1.14 1995/06/23 07:21:14 sls Exp $ # dialog filter_editor { param list member patterns member filter_type exclude method create {} { frame $self.top label $self.l -text "Pattern:" entry $self.e -width 40 -relief sunken bind $self.e "$self add_pattern" pack $self.l -in $self.top -side left pack $self.e -in $self.top -side left -fill x pack $self.top -side top -fill x -pady .25c frame $self.buttons -bd 3 button $self.ok -text "Apply" -command "$self apply" button $self.close -text "Cancel" -command "wm withdraw $self" button $self.add -text "Add Pattern" \ -command "$self add_pattern" button $self.del -text "Delete Pattern(s)" \ -command "$self delete_patterns" radiobutton $self.inc -variable [object_slotname filter_type] \ -value include -relief flat -text "Include Patterns" radiobutton $self.exc -variable [object_slotname filter_type] \ -value exclude -relief flat -text "Exclude Patterns" pack $self.inc $self.exc $self.add $self.del -in $self.buttons \ -side top -fill x -pady .1c -anchor w pack $self.close $self.ok -in $self.buttons \ -side bottom -fill x -pady .1c pack $self.buttons -in $self -side left -fill y frame $self.lframe scrollbar $self.sb -command "$self.list yview" listbox $self.list -yscroll "$self.sb set" -relief raised \ -width 40 -height 10 -selectmode multiple pack $self.sb -in $self.lframe -side right -fill y pack $self.list -in $self.lframe -side right -fill both -expand yes pack $self.lframe -in $self -side right -fill both -expand yes set title "Edit [$slot(list) cget -title] Filter" wm title $self $title foreach pat [$slot(list) cget -patterns] { $self.list insert end $pat lappend slot(patterns) $pat } } method reconfig {} { } method apply {} { $slot(list) config -patterns $slot(patterns) \ -filter_type $slot(filter_type) $slot(list) update_needed wm withdraw $self } method add_pattern {} { set pat [$self.e get] if {[string length $pat]} { lappend slot(patterns) $pat $self.list insert end $pat } } method delete_patterns {} { while {[string length [set s [$self.list curselection]]]} { set pat [$self.list get [lindex $s 0]] set ndx [lsearch -exact $slot(patterns) $pat] set slot(patterns) [lreplace $slot(patterns) $ndx $ndx] $self.list delete [lindex $s 0] } } } dialog list_search { param list param search_type exact method create {} { frame $self.top pack $self.top -side top -fill x label $self.l -text "Search for:" entry $self.e -bd 2 -relief sunken bind $self.e "$self search" pack $self.l -in $self.top -side left pack $self.e -in $self.top -fill x -expand 1 checkbutton $self.re -variable [object_slotname search_type] \ -onvalue regexp -offvalue exact -text "Regexp search" pack $self.re -side top -anchor w button $self.go -text "Find Next" -command "$self search" button $self.reset -text "Reset Search" -command "$self reset" button $self.close -text "Close" -command "destroy $self" pack $self.go $self.reset $self.close -side left set title "Find in [$slot(list) get_item_name] List..." wm title $self $title focus $self.e $slot(list) reset_search } method reconfig {} { } method reset {} { $slot(list) reset_search 1 } method search {} { set text [$self.e get] if ![string length $text] return $slot(list) search $slot(search_type) $text } } dialog list_show { param list method create {} { frame $self.top pack $self.top -side top -fill x label $self.l -text "Show:" entry $self.e -bd 2 -relief sunken bind $self.e "$self show" pack $self.l -in $self.top -side left pack $self.e -in $self.top -fill x -expand 1 button $self.show -text "Show" -command "$self show" button $self.close -text "Close" -command "destroy $self" pack $self.show $self.close -side left wm title $self "Show a [$slot(list) get_item_name]" focus $self.e } method reconfig {} { } method show {} { set item [$self.e get] $slot(list) run_command $item wm withdraw $self } } widget tkinspect_list { param command {} param title {} param width 15 param height 12 param main param patterns {} param filter_type exclude member current_item member menu member contents {} member search_index 0 method create {} { $self config -bd 2 -relief raised pack [label $self.title -anchor w] -side top -fill x scrollbar $self.sb -command "$self.list yview" -relief sunken -bd 1 listbox $self.list -relief sunken -exportselection 0 \ -yscroll "$self.sb set" -selectmode single bind $self.list <1> "$self click %x %y; continue" bind $self.list "$self trigger; continue" pack $self.sb -side right -fill y pack $self.list -side right -fill both -expand yes set slot(menu) [$slot(main) add_menu $slot(title)] bind $self.list <3> "tk_popup $slot(menu) %X %Y" $slot(menu) add command \ -label "Show a [$self get_item_name]..." -underline 0 \ -command "$self show_dialog" $slot(menu) add command -label "Find $slot(title)..." -underline 0 \ -command "$self search_dialog" $slot(menu) add command -label "Edit Filter..." -underline 0 \ -command "$self edit_filter" $slot(menu) add command -label "Update This List" -underline 0 \ -command "$self do_update_self" $slot(menu) add command -label "Remove This List" -underline 0 \ -command "$self remove" } method reconfig {} { $self.title config -text "$slot(title):" $self.list config -width $slot(width) -height $slot(height) } method clear {} { set slot(contents) "" $self update_needed } method append {item} { lappend slot(contents) $item $self update_needed } method update_needed {} { if ![info exists slot(update_pending)] { set slot(update_pending) 1 after idle "if \[winfo exists $self\] \"$self do_update\"" } } method do_update {} { unset slot(update_pending) $self.list delete 0 end if {$slot(filter_type) == "exclude"} { set x 1 } else { set x 0 } foreach item $slot(contents) { set include $x foreach pattern $slot(patterns) { if [regexp -- $pattern $item] { set include [expr !$x] break } } if $include { $self.list insert end $item } } } # lists will have 2 methods, update and update_self. update will # be called when all the lists are updated. update_self will be # called when just this list is updated. update_self defaults # to being just update. method update_self {target} { $self update $target } method do_update_self {} { $self update_self [$slot(main) target] } method click {x y} { $self run_command [$self.list get @$x,$y] } method trigger {} { set selection [$self.list curselection] if ![llength $selection] return $self run_command [$self.list get [lindex $selection 0]] } method run_command {item} { if [string length $slot(command)] { set slot(current_item) $item if [string length $slot(current_item)] { uplevel #0 [concat $slot(command) [list $slot(current_item)]] } } } method remove {} { $slot(main) delete_menu $slot(title) $slot(main) delete_list $self object_delete $self } method edit_filter {} { if [winfo exists $self.editor] { wm deiconify $self.editor } else { filter_editor $self.editor -list $self center_window $self.editor } } method search_dialog {} { if ![winfo exists $self.search] { list_search $self.search -list $self center_window $self.search } else { wm deiconify $self.search } } method reset_search {{set_see 0}} { set slot(search_index) 0 if $set_see { $self.list see 0 } } method search {search_type text} { foreach item [$self.list get $slot(search_index) end] { set found 0 if {$search_type == "regexp" && [regexp $text $item]} { set found 1 } elseif {[string first $text $item] != -1} { set found 1 } if $found { $self.list selection clear 0 end $self.list selection set $slot(search_index) $self.list see $slot(search_index) incr slot(search_index) $self run_command $item break } incr slot(search_index) } if !$found { $slot(main) status "Didn't find \"$text\"" $self reset_search } } method show_dialog {} { if ![winfo exists $self.show] { list_show $self.show -list $self center_window $self.show } else { wm deiconify $self.show } } } tkinspect-5.1.6p10/menus_list.tcl010064400007650000765000000017650577210467100151650ustar00patpat# # $Id: menus_list.tcl,v 1.2 1995/06/21 21:06:01 sls Exp $ # # Handles browsing menus. # widget menus_list { object_include tkinspect_list param title "Menus" method get_item_name {} { return menu } method update_self {target} { $slot(main) windows_info update $target $self update $target } method update {target} { $self clear foreach w [$slot(main) windows_info get_windows] { if {[$slot(main) windows_info get_class $target $w] == "Menu"} { $self append $w } } } method retrieve {target menu} { set end [send $target $menu index end] if {$end == "none"} { set end 0 } else { incr end } set result "# menu $menu has $end entries\n" for {set i 0} {$i < $end} {incr i} { append result "$menu entryconfigure $i" foreach spec [send $target [list $menu entryconfig $i]] { append result " \\\n\t[lindex $spec 0] [list [lindex $spec 4]]" } append result "\n" } return $result } method send_filter {value} { return $value } } tkinspect-5.1.6p10/names.tcl010064400007650000765000000051620755654152500141060ustar00patpat# # $Id: names.tcl,v 1.6 2002/10/26 16:31:17 patthoyts Exp $ # namespace eval names { namespace export names procs vars prototype value exports proc unqualify s { regsub -all "(^| ):+" $s {\1} result return $result } proc names {target {name ::}} { set result $name foreach n [send $target ::namespace children $name] { append result " " [names $target $n] } return $result } proc procs {target {names ""}} { if {$names == ""} { set names [names $target] } set result {} foreach n $names { foreach p [send $target ::namespace eval $n ::info procs] { lappend result "$n\::$p" } } return [unqualify $result] } # pinched from globals_list.tcl proc prototype {target proc} { set result {} set args [send $target [list ::info args $proc]] set defaultvar "__tkinspect:default_arg__" foreach arg $args { if [send $target [list ::info default $proc $arg $defaultvar]] { lappend result [list $arg [send $target \ [list ::set $defaultvar]]] } else { lappend result $arg } } send $target ::catch ::unset $defaultvar return [list proc [namespace tail $proc] $result {} ] } proc vars {target {names ""}} { if {$names == ""} { set names [names $target] } set result {} foreach n $names { foreach v [send $target ::info vars ${n}::*] { lappend result $v } } return [unqualify $result] } proc value {target var} { set tail [namespace tail $var] if {[send $target [list ::array exists $var]]} { return "variable $tail ; # $var is an array\n" ; # dump it out? } set cmd [list ::set $var] set retcode [catch [list send $target $cmd] msg] if {$retcode != 0} { return "variable $tail ; # $var not defined\n" } else { return "variable $tail \"$msg\"\n" } } proc exports {target namespace} { set result [send $target ::namespace eval $namespace ::namespace export] return [unqualify $result] } # dump [tk appname] proc dump appname { puts "names: [names $appname]" puts "" puts "procs: [procs $appname]" puts "" puts "vars: [vars $appname]" puts "" puts "exports: [exports $appname]" } } tkinspect-5.1.6p10/namespaces_list.tcl010064400007650000765000000033630744773615100161560ustar00patpat# namespaces_list.tcl - Originally written by Paul Healy # # $Id: namespaces_list.tcl,v 1.1 2002/03/26 00:10:17 patthoyts Exp $ widget namespaces_list { object_include tkinspect_list param title "Namespaces" method get_item_name {} { return namespace } method update {target} { $self clear foreach namespace [names::names $target] { $self append $namespace } } method retrieve {target namespace} { set result "namespace eval $namespace {\n" set exports [names::exports $target $namespace] if {$exports!=""} { append result "\n namespace export $exports\n" } set vars [names::vars $target $namespace] if {$vars!=""} { append result "\n" } foreach var [lsort $vars] { append result " [names::value $target $var]" } set procs [lsort [names::procs $target $namespace]] append result "\n# export:\n" foreach proc $procs { if {[lsearch -exact $exports [namespace tail $proc]]!=-1} { append result " [names::prototype $target $proc]\n" } } append result "\n# internal:\n" foreach proc $procs { if {[lsearch -exact $exports [namespace tail $proc]]==-1} { append result " [names::prototype $target $proc]\n" } } append result "}\n\n" set children [names::names $target $namespace] foreach child [lsort $children] { if {$child!=$namespace} { append result "namespace eval $child {}\n" } } return $result } method send_filter {value} { return $value } } tkinspect-5.1.6p10/objects_list.tcl010064400007650000765000000132700755510140200154470ustar00patpat# # $Id: objects_list.tcl,v 1.4 2002/10/21 22:43:14 patthoyts Exp $ # # Written by: T. Schotanus # E-mail: sst@bouw.tno.nl # URL: http://huizen.dds.nl/~quintess # # Itcl 3.2 support by Pat Thoyts # We are hanging onto the older code to support old versions although # this needs testing. # widget object_list { object_include tkinspect_list param title "Objects" param itcl_version 0 method get_item_name {} { return object } method update {target} { $self clear set cmd [list if {[::info command itcl_info] != {}} {itcl_info objects}] set objects [lsort [send $target $cmd]] if {$objects != {}} { set slot(itcl_version) [send $target ::package provide Itcl] } foreach object $objects { $self append $object } } method retrieve {target object} { if {$slot(itcl_version) != {}} { if {$slot(itcl_version) >= 3} { return [$self retrieve_new $target $object] } else { return [$self retrieve_old $target $object] } } } method retrieve_old {target object} { set class [send $target [list $object info class]] set res "$class $object {\n" set cmd [list $class :: info inherit] set inh [send $target $cmd] if {$inh != ""} { set res "$res\tinherit $inh\n\n" } else { set res "$res\n" } set pubs [send $target [list $object info public]] foreach arg $pubs { regsub {(.*)::} $arg {} a set cmd [list $object info public $a] set pub [send $target $cmd] set res "$res\tpublic $a [list [lindex $pub 2] [lindex $pub 3]] (default: [list [lindex $pub 1]])\n" } if {$pubs != ""} { set res "$res\n" } set prots [send $target [list $object info protected]] foreach arg $prots { regsub {(.*)::} $arg {} a if {$a == "this"} { continue } set cmd [list $object info protected $a] set prot [send $target $cmd] set res "$res\tprotected $a [list [lindex $prot 2]] (default: [list [lindex $prot 1]])\n" } if {$prots != ""} { set res "$res\n" } set coms [send $target [list $object info common]] foreach arg $coms { regsub {(.*)::} $arg {} a set cmd [list $object info common $a] set com [send $target $cmd] set res "$res\tcommon $a [list [lindex $com 2]] (default: [list [lindex $com 1]])\n" } if {$coms != ""} { set res "$res\n" } set meths [send $target [list $object info method]] foreach arg $meths { if {[string first $class $arg] == 0} { regsub {(.*)::} $arg {} a set cmd [list $object info method $a] set meth [send $target $cmd] if {$a != "constructor" && $a != "destructor"} { set nm "method " } else { set nm "" } if {[lindex $meth 1] != ""} { set res "$res\t$nm$a [lrange $meth 1 end]\n\n" } } } set procs [send $target [list $object info proc]] foreach arg $procs { if {[string first $class $arg] == 0} { regsub {(.*)::} $arg {} a set cmd [list $object info proc $a] set proc [send $target $cmd] if {[lindex $proc 1] != ""} { set res "$res\tproc $a [lrange $proc 1 end]\n\n" } } } set res "$res}\n" return $res } method retrieve_new {target object} { set class [send $target [list $object info class]] set res "$class $object {\n" set cmd [list $object info inherit] set inh [send $target $cmd] if {$inh != ""} { append res " inherit $inh\n\n" } else { append res "\n" } set vars [send $target $object info variable] foreach var $vars { set name [namespace tail $var] set cmd [list $object info variable $name] set text [send $target $cmd] append res " $text\n" } append res "\n" set funcs [send $target [list $object info function]] foreach func [lsort $funcs] { set qualclass "::[string trimleft $class :]" if {[string first $qualclass $func] == 0} { set name [namespace tail $func] set cmd [list $object info function $name] set text [send $target $cmd] if {![string match "@itcl-builtin*" [lindex $text 4]]} { switch -exact -- $name { constructor { append res " $name [lrange $text 3 end]\n" } destructor { append res " $name [lrange $text 4 end]\n" } default { append res " [lindex $text 0] [lindex $text 1] $name\ [lrange $text 3 end]\n" } } } } } append res "}\n" return $res } method send_filter {value} { return $value } } tkinspect-5.1.6p10/procs_list.tcl010064400007650000765000000015740755510140300151510ustar00patpat# # $Id: procs_list.tcl,v 1.3 2002/10/21 22:43:15 patthoyts Exp $ # widget procs_list { object_include tkinspect_list param title "Procs" method get_item_name {} { return proc } method update {target} { $self clear foreach proc [lsort [names::procs $target]] { $self append $proc } } method retrieve {target proc} { set result [list proc $proc] set formals {} foreach arg [send $target [list ::info args $proc]] { if [send $target [list ::info default $proc $arg __tkinspect_default_arg__]] { lappend formals [list $arg [send $target \ [list ::set __tkinspect_default_arg__]]] } else { lappend formals $arg } } send $target ::catch {::unset __tkinspect_default_arg__} lappend result $formals lappend result [send $target [list ::info body $proc]] return $result } method send_filter {value} { return $value } } tkinspect-5.1.6p10/sls.ppm010064400007650000765000000607240577024115000136060ustar00patpatP6 # CREATOR: XV Version 3.00 Rev: 3/30/93 # CREATOR: XV Version 3.00 Rev: 3/30/93 63 132 255 ÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿøÿÿüÿÿüþÿüþÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüþÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿþþþÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüþÿøýÿüþÿüþÿüþÿüþÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿþþþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿøýÿüþþþþþþþÿüþÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿþþþÿüÿÿüÿÿüÿÿüþÿüþÿøüÿøýÿøýÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüþÿüþÿüÿÿüÿÿüþÿüþÿüþÿüÿÿüþÿüþÿøýÿüþÿøýÿøýÿøýÿøüÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿþþþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüþÿüÿÿüþÿüÿÿüþÿüþÿüþÿüþÿüþÿüþÿøÿÿüÿÿüþÿüþÿüþÿøýÿüþÿøýÿøýÿüþÿøýÿøýÿøýÿøýÿøýÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüþÿüÿÿüþÿüÿÿüþÿüÿÿüÿÿüþÿøýÿüþÿüþÿüþþþþþþþþþþÿøýÿøüÿøýÿøýÿøýÿøýÿøýÿøýÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿøÿÿüÿÿüÿÿüþÿüþÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüþÿøÿÿüÿÿøýÿøýÿüþÿüþÿüþÿøýÿøüÿøýÿøýÿøýÿøüÿøüÿøüÿõûÿøüÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿøÿÿüþÿüþÿüÿÿüþÿüþÿüÿÿüþÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüþÿüþÿüÿÿüÿÿüþÿøýÿøüÿøýÿøýÿøüÿõýÿøýÿøüÿõûÿøüÿøýÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿøÿÿüÿÿøÿÿüÿÿøÿÿøÿÿøÿÿõýÿøÿÿøÿÿøüÿøýÿõýÿüÿÿüþÿüÿÿøýÿüÿÿüÿÿøýÿüÿÿüÿÿüÿÿüþÿüþÿüþÿüÿÿøýÿüþÿüþÿüþÿüþÿøýÿüþÿøýÿøýÿøýÿøýÿõûÿøüÿøüÿõýÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿþþþÿüÿÿüÿÿüþÿüÿÿøÿÿüÿÿüþÿõýÿøýÿõûÿõûÿõûÿõýÿüþÿõûÿøúÿøýÿøýÿøýÿøýþþþÿüþÿøüÿüþÿøýÿøýÿüþÿøýÿøýÿøýÿøýÿøüÿøýÿõûþôûþôûþôûÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüþÿüþÿøýÿøüþôûñåéÏÔèÁÍâÏÔèñåéÿõûþôûÿõûÿøÿÿõûÿøýÿøüÿøýÿøýÿøýÿøýÿøýÿøýÿøýÿõûÿøýÿøüÿøüÿõûÿõûÿõûÿõûÿøüÿøüþôûþôûþôûÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüþÿüÿÿüÿÿüÿÿüÿÿüþÿøÿÿøýÿüþÿøÿÿüþÿøýÿõûúóúÌ­¿± ¶± ¶± ¶Ì­¿Ì­¿Ì­¿ñåéÿõûÿøýÿõûÿøüÿõûÿøýÿøýÿõûÿøüÿõûþôûÿõûÿøýÿøüÿõûþôûÿõûÿõûÿõûþôûþôûþôûþôûüóúüúýÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿøÿÿüÿÿüÿÿøýÿüÿÿøÿÿõýÿøüÿøýÿøÿÿõýþôû± ¶¨‚’µy‡µy‡¨‚’¨‚’µy‡± ¶Ì­¿þôûÿõûþôûÿøýÿøüÿõûÿõûÿõûÿõûÿøüÿõûþôûÿõýÿõûÿõûÿõûÿõûþôûüóúÿõûþôûþ÷ûüóúüóúþôûÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿøÿþþþÿüþÿøýÿøýÿõûÿõûÿøüÿøýÿøýÿõûóí󨂒žx†žx†žly¦ozµy‡¨‚’¨‚’µy‡Ì­¿þôûÿõûÿõûþ÷ûÿõûÿõûÿøúÿõûÿõûþôûþ÷ûÿõûþôûÿõûþ÷ûþ÷ûþôûÿõûþôûþø÷üóúüóúüóúþôûÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿüúýúóúóíóûôûúóúóíóãåóÙÞñþôûÿõýÿõûÿøýÿõýÿõûÿõûÏÔè˜m{žlyžx†žfqµy‡± ¶Ì­¿Ì­¿ÁÍâÌ­¿óíóþôûÿøüþ÷ûÿõûÿõûþôûÿõûþôûüóúþôûþôûüóúþôûþôûüóúþôûüóúüóúüóúüóúûôûûôûþôûÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿøÿÿüþüúýúóúþôûÂÔíÂÔíÙÞñÙÞñúóúúóúãåóãåóÙÞñÙÞñûô÷ÿõýÿõûÿõûüóúÁÍâ¦ozµy‡± ¶Ì­¿Ì­¿Ì­¿Ì­¿Ì­¿Ì­¿Ì­¿ÏÔèüóúÿõûþôûÿõûÿõûþôûþ÷ûüúýþôûÿõûþôûÿõûþôûüóúüóúüóúþôûûô÷úóúóíóÙÞñóíóãåóÿüÿÿüÿÿüÿÿøÿÿüÿÿüÿÿøÿÿøýÿõýãåóÂÔíÂÔíúóúãåóÙÜìÂÔíÙÜìãåóóíóûôûãåóÂÔíÂÔí¹Ïéãåóúóúûô÷óíóÏÔè˜m{Ì­¿± ¶± ¶± ¶˜m{hOWZLT]R^XOW± ¶óíóúóúþôûþôûüúýþôûþôûüóúûôûûôûþôûúóúü÷øþôûþôûûô÷ûô÷ÙÞñ¹Ïé¹ÏéŸÂâ¹Ïé¹ÏéÿüþÿüÿÿüÿÿøÿÿüÿÿüÿÿõýûûüÂÔíÂÔíÂÔíÂÔíãåóÙÞñãåóÂÔíÙÞñÙÞñãåóãåóãåóÙÞñÙÜìÂÔí¹Ïé¹ÏéÂÔíÏÔèPKX;5;cKP]HLeZeQQ_PKXODL[Wf[Wf˜³Ôyhz¹Ïé¹Ïé¹ÏéãåóûôûúóúúóúûôûóíóãåóÂÔíãåóóíóóíóúóúÂÔí¹ÏéŸÂâŸÂâ¹ÏéŸÂâŸÂâŸÂâÿøýþôûÿøÿüúýüúýúóú¹ÏéŸÂâŸÂâóíóúóúãåó¹ÏéÂÔíÂÔíÙÜìÂÔíÂÔíÂÔíÙÞñûôûúóúãåó¹Ïé¹Ïé¹ÏéÁÍ☳Ô;269/3˜m{‚]fsT^hOWZLTyYhyYh˜m{¨‚’|ao˜³ÔŸÂâŸÂâŸÂâ¹Ïé¹Ïé¹Ïé¹Ïé¹Ïé¹Ïé¹Ïé¹ÏéŸÂâ¹ÏéŸÂâŸÂâŸÂ☳ԟÂâŸÂâŸÂ☳Ԁ˜ÂóíóãåóÂÔí¹Ïé¹ÏéŸÂâŸÂâŸÂ☳ԟÂâŸÂâŸÂâŸÂâŸÂâ¹ÏéŸÂâŸÂâŸÂâÙÜìÙÞñ¹ÏéÂÔíÂÔíŸÂ☳ԟÂâ¹Ïéo‹·9*3]HLžiqžly•fr‚]f‹^g˜iu’`m¡is¨‚’¨‚’ŸÂâ¹ÏéŸÂâŸÂâŸÂâŸÂâŸÂâŸÂâŸÂ☳ԟÂâŸÂâŸÂ☳Ԙ³ÔŸÂ☳Ԙ³Ô˜³Ô˜³Ô€˜Âo‹·o‹·ŸÂâŸÂâŸÂâŸÂâŸÂâŸÂâŸÂâÂÔíŸÂ☳Ԙ³Ô˜³ÔŸÂâŸÂâŸÂâŸÂâŸÂâŸÂâÂÔíŸÂâŸÂâ¹ÏéŸÂâŸÂâŸÂâŸÂâ¹Ï阳Ô9/3•_e•fržiq¡bj¡bj‹^gsT^˜m{¦oz¨‚’˜³ÔŸÂ☳Ԙ³ÔŸÂ☳Ԙ³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô€˜Â€˜Âo‹·n‚­o‹·ŸÂâŸÂâŸÂâŸÂâŸÂ☳ԟÂâŸÂ☳Ԙ³Ô˜³ÔŸÂ☳ԟÂâŸÂâŸÂâŸÂâŸÂâ¹Ïé¹ÏéŸÂâŸÂâŸÂâŸÂâŸÂâŸÂâŸÂ☳Ԁ˜Â?07kLQ•fržly‚]f…X`€NSsLUwS\˜m{ÁÍâŸÂ☳Ԙ³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô˜³Ô€˜Â˜³Ô€˜Âo‹·n‚­\`\`[Wf]R^˜³Ô˜³Ô¹Ï阳Ԁ˜Â˜³Ô€˜Â˜³Ô€˜Â€˜Â€˜Â€˜Âo‹·€˜Â€˜Â€˜Â€˜Â€˜Â€˜Âo‹·€˜Â€˜Â€˜Â€˜Â€˜Â€˜Â€˜Â€˜Âˆ‘¶n‚­Z?E‚]f€V`yY^…X`€NS‚]fcKPyhzo‹·€˜Âo‹·o‹·o‹·o‹·o‹·o‹·o‹·n‚­n‚­o‹·n‚­n‚­n‚­\`[WfeZeeZeXOWQIOQEIQIOXGN€˜Â€˜Â€˜Âo‹·o‹·ˆ‘¶o‹·o‹·o‹·€˜Âo‹·o‹·o‹·€˜Âo‹·o‹·o‹·o‹·o‹·o‹·n‚­n‚­€˜Âo‹·€˜Âo‹·ˆ‘¶ˆ‘¶ˆ‘¶o‹·’`msT^]HLwSYyY^sT^hOWZLTn‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­\`[Wf\`]R^QIOODFODFXGNODLXLNQEIQIO€˜Â€˜Â€˜Âo‹·o‹·o‹·o‹·o‹·o‹·o‹·o‹·o‹·o‹·o‹·n‚­o‹·o‹·o‹·o‹·o‹·n‚­o‹·o‹·n‚­o‹·o‹·o‹·ˆ‘¶ˆ‘¶]HLµy‡žfq]HLQ@@XDIK;CODL\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\`[WfeZe[Wf]R^QIOODFODFODLK;CQEIQ;CO@FO@FQIOQEIo‹·o‹·o‹·o‹·o‹·o‹·o‹·o‹·o‹·o‹·n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­n‚­\iŽn‚­n‚­\iŽn‚­ž[dsHLªny¡bjwS\]HLI2:E.6yY^\iŽO[|\iŽO[|\iŽO[|\iŽO[|\`[Wf[Wf]R^QQ_ODFO@FO@FQEII?HK;@K;CK;CQEIXGHQEIQEIQEIn‚­n‚­n‚­\iŽn‚­n‚­n‚­n‚­\iŽn‚­n‚­\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽO[|\iŽ\iŽ\iŽ\iާfnž[dŽKTŽKT’[džbj€VZwORcKPZ?E‚]fO(-\iŽO[|O[|O[|[Wf]R^]R^]R^]R^ZLTODLO@FXDIODFO@FK8=K;CI?HODFK;CC;CI?HO@FODLXOWn‚­n‚­\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽ\iŽO[|O[|O[|O[|\iŽ\iŽO[|\iލ‚’ž[dŽKTŽKTŽKTŽKTs7@s7@wSY…X`€VZkLQwS\Z?E+$(ž[dyhz]R^]R^[Wf]R^ZLTODLQ;CQ;CXDII:?C;CI:BO@FK;@O;>I:]HL]JOO@@XGHXGNQEIK;CO@FI?BI?HO@FQEIO@FI?HQEIXDIODFO[|O[|O[|O[|O[|O[|O[|O[|O[|O[|\iŽ\iŽ\iŽO[|O[|O[|O[|yhzŽKTŽKTŽKTs7@s7@e,4e,4e,4e,4e,4s7@]).O(-O(-]=CÁÍâÁÍâÁÍ☳ÔI2:e,4e,4s7@ŽKTs7@ž[d§fnZ?EO@FODFE7;E7;QEIXGHXGHQEIK;CK;COEFQIOODF]RUODLQEIIBBO[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|\`ŽKTs7@s7@e,4e,4e,4e,4e,4e,4e,4e,4e,4|aoO(-]).O(-ÁÍâÁÍâÁÍâ± ¶e,4Z&*e,4s7@s7@s7@ŽKTŽKTŽKTQ;CK;CI?HC7>C79O@FI??C;;QEIXLNQEIeZeQJOZLTK;@ODFODF\iŽO[|\`O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|yYhs7@s7@s7@]).]).e,4e,4e,4e,4e,4e,4e,4e,4]).]).I2:± ¶ÏÔèÁÍâs7@O(-e,4s7@]).e,4s7@ŽKTŽKTŽKThOWI:BK;CI?BKDEODFK;@K;CI??O@@ODFQIJI?HODLI?HI?HODF\`O[|O[|O[|O[|O[|\iŽO[|O[|O[|O[|O[|O[|O[|O[|O[|€NSO(-]).e,4]).]).]).e,4e'0e'0s7@e'0e,4e,4e'0]).e,4’X]ÁÍ☳ÔO(-O(-Z&*]).e,4s7@s7@s7@ŽKTŽKTž[dQIOODFO@@K;CO@@O@FODFQEIODFQ@@O@@ODFK;@QEIO@@I:?O[|O[|O[|O[|O[|\iŽO[|O[|O[|O[|O[|O[|O[|O[|O[|O[|s7@O(-O(-e,4O(-]).e,4]).e,4e,4e,4e,4e,4e'0]).]).e,4s7@ÁÍ∑¶O(-]).Z&*e'0s7@s7@s7@s7@s7@ŽKTs7@O@FI:QIJQEIO@FQEIODFO[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|s7@Q%*O(-e,4Q%*Q%*e'0]).e'0e,4e,4e'0e'0e,4e,4e,4]).e,4€˜ÂsLUQ%*e,4e'0s7@s7@s7@s7@e'0s7@s7@]).cKPI?BIBBQEIQEIXLNyYhXLNKDEO@@XGH]RUcKPQIO]RU]RUO[|O[|O[|O[|O[|O[|O[|O[|\iŽO[|O[|O[|O[|O[|QQ_[Wfs7@]).K!&e,4]).K!&e,4Z&*e,4e,4s7@e,4e'0e'0e,4e'0e'0e,4¨‚’e,4]).e,4s7@s7@s7@e'0]).e'0s7@Q%*Q%*cKPO@FK;CO;>K;@ODFO@@K;CQIJXGHXLNQIJXGNODFO@FODFO[|O[|O[|O[|O[|O[|O[|O[|O[|O[|O[|QQ_O[|O[|QQ_sT^s7@O(-K!&]).O(-3#]).]).e'0e,4e'0e,4e'0e'0e,4e,4e'0O(-žly]).]).e,4s7@e'0e'0e,4]).e'0e'0]).O(-O@FI:K;@ODFODFI??XLNI:?C;CO@@K;@I:ZLTXLNODFODFI?HKDEI?HE7;C;CE7;QQ_QQ_QQ_QQ_QQ_QQ_QQ_PKXPKXQEIZLT]RU]RUcKPhOWe,4]).e,46'+3#K!&3#Q%*Q%*e'0]).e,4]).e'0e'0e'0Z&*Z&*]).Q%*]).]).Z&*]).Z&*]).]).]).Z&*e,4K!&e,4O;>O@@ODFKDEK;CO@FE7;E7;C;CI?BI:?K;@C79C48C7;E7;[WfO[|QQ_QQ_QQ_QIOZLT]RU]RU]RU]RU]RUXGH]HLkLQe,4]).e,4K!&3#K!&6'+Z&*Z&*Z&*Q%*]).]).e'0e,4e,4e,4]).O(-e,4]).Z&*]).Q%*Q%*]).]).Q%*Z&*O(-Q%*s7@K8=I2:O@F]JO]RUI?BE7;E7;I:<9/1?6:E7;I?BC48;26C48QQ_[WfZLT]R^hOWsT^ZLThOWZLTZLTZLTZLTXLNXGN€NS]).Z&*]).Z&*K!&K!&3#O(-]).O(-]).e'0e'0e'0e'0e'0e'0e'0]).O(-Q%*Q%*Q%*Z&*Z&*Q%*]).Z&*Z&*3#]).s7@Q;CXLNI:O@FE7;E7;9*+;24C48E7;E7;?6:E7;C;;C7>sT^sT^sT^sT^hOWZLTZLTXGNXGHXGNXGNZDKODFZDK€NS]).]).e,4]).3#3##"K!&Z&*]).e'0e'0e'0e'0]).]).e'0e'0Z&*O(-]).]).]).]).Z&*Z&*Z&*Z&*]).K!&]).s7@cKPK;CODFI:?ODFI?H6/.C48C489/1E7;C;;C48C;;O@@C;;yY^yY^yY^yYhsT^hOWcKPXGH]JOQEIXGHZDK]JO]JOs7@Z&*]).]).]).O(-3#3#K!&K!&e'0e'0e'0e'0]).e'0e'0e'0e'0Z&*e'0]).e'0e'0e'0e'0]).e'0e,4e'03#]).ŽKTXDIXGHK;CO@@C;;C;C?07E7;E7;;01K;@QIOE7;E7;I:?C;CsT^sT^sT^hOWhOWhOW]JO]JOXLNIBBKDEQ@@QEIXDIs7@Z&*]).e,4]).K!&3#3#O(-Q%*]).e'0e'0]).e'0e,4e'0e'0e'0Q%*e'0]).e'0e'0e'0e'0Z&*e'0]).e,43#e'0ŽKT]HLZLT]RUK;CE7;I:C79;01;26C79C:AQEIE7;I??C;CXGHI?HQ;CXDIXDIcKPZDKXDI]HLO;>9*+;24C;;Q@@Q;CQ;Ce,4e,4]).Z&*Z&*O(-K!&3#K!&Q%*Z&*e'0e'0]).e'0e'0e'0e'0e'0]).Z&*e'0Q%*Z&*K!&]).e'0Z&*Q%*K!&3#]).ž[d’[d]RU]JOQEIQIOI??ODLI?B;01KDEI?HQEII?BIBJQIJC;CQ;CQ@@Q@@Q;CQ;CQ@@E.6;*/9*+;01E.6Q;CO;>Z?Ee,4e,4e,4]).]).Q%*K!&&!#Q%*]).]).]).]).Z&*e'0e'0e'0e'0e'0O(-e'0e'0Z&*Q%*Q%*3#3#Q%*]).K!&3#O(-ž[dž[dcKPXGH]HLXLNXDIQEIC79E7;I:K;@K8=Q;CI2:I2:6'+6'+9*+E.6E7;]=Ce,4e,4e'0e'0Z&*O(-3##"K!&]).e'0]).]).]).]).e'0e'0e'0Z&*Q%*e'0]).e'0Z&*Q%*K!&3#K!&e'0e,4&!#K!&]).ž[dXDIXLNODFODFODF]RUXLNXLN]RUZLT]RUZLTODLQIOQEIO;>O;>Q;CK8=K8=I2:O@@C48?+2K8=K;@K;@E7;]=Ce,4e,4Q%*Q%*Q%*O(-3#&!#3$(e'0e'0Z&*Z&*]).]).e'0e'0]).Z&*Q%*]).]).]).K!&K!&Q%*3#3#3#K!&&!#3#Q%*s7@‹W[C;;I:Q;CQ@@Q;CQ;CK8=K;CO;>K8=O@FO@FXDIO;>hGNs7@Z&*O(-]).Q%*O(-K!&3#K!&]).e'0]).]).e'0]).e'0e'0]).]).Z&*Z&*Z&*Z&*e'0Z&*K!&K!&K!&K!&K!&#"3#Q%*e'0s7@E.6;019/19*1;01;*/9*+C48C;;C;;C;;I??C7;E7;K8=O;>I2:I:K8=K8=E7;I2:I2:Q@@K;CO;>]=Cs7@e'0e,4]).Z&*]).Q%*3#Q%*Z&*]).Z&*]).e'0e'0]).]).Z&*]).]).Z&*Z&*Z&*e'0e,4Z&*Z&*Z&*K!&K!&&!#&!#O(-e'0s7@Q;C?+2;01C489/3;019/39*19/3C48;269*19/1E7;O;>O;>O;>O;>O;>Q;CI2:I2:E7;E.6?+2C79ZDK]=Ce,4e'0s7@s7@]).K!&6'+&!#O(-]).Z&*e'0]).]).e'0e'0e'0]).]).Q%*Z&*O(-K!&Z&*s7@s7@e'0s7@e'0e'03#3#3#Z&*e'0’[d;56O@FC7>C79C48C48I:?;249/36'+;*/6,06'+Q;CQ;CQ;CK;@K8=O;>I2:E98K;@K8=K8=K8=I:?O(-e,4e,4]).e'0O(-O(-O(-3#6'+K!&O(-Z&*]).e,4e'0e'0e'0]).]).O(-Q%*e'0]).Z&*Q%*Z&*Q%*Q%*Z&*]).3#3#K!&K!&K!&ž[dC;;I:?I:I2:K;@O;>I2:I2:C48?07E.6I2:Q@@K8=Q@@O(-O(-e,4]).e,4e'0O(-3#Q%*Z&*Z&*]).Q%*Z&*Z&*e'0]).Z&*]).e,4K!&Q%*Q%*Q%*K!&K!&K!&Z&*e'03#3#K!&3#3#3#e,4K;@I?B;01E7;9/3;01?6:;26C7>C;;?07E7;ODL]HLXDIK8=K;@I2:I2:K8=O;>C48C48E.6C48E7;E.6O(-6'+O(-K!&O(-]).O(-K!&3#e'0e'0e'0e,4]).e'0]).Z&*]).K!&Q%*K!&Z&*Q%*K!&K!&Q%*e'0s7@Z&*#"3#K!&K!&K!&K!&O(-;24;24C48C;;C7>?6:3)09/1;01;26C7>;59C7>O;>Q;CK8=I2:E.6I2:I2:I2:E7;I2:I:?K;CE7;E7;K;CO(-O(-]).s7@e,4]).K!&3#Z&*Q%*e'0e'0s7@e'0Z&*]).Q%*K!&K!&K!&]).K!&K!&Z&*e'0s7@Q%*3#3#3#K!&K!&K!&3#;*/C79;24C48;01?6:?6:C7>C79E7;9/63)-9/3C7;I2:I2:K8=I2:E.6O;>E7;K;@C79I:?K;@I:e,4O(-e,4O(-K!&O(-K!&3#e,4s7@]).Q%*Q%*O(-Q%*Z&*Z&*Z&*e'0Q%*]).]).e'0e'0e'03#3#Z&*Q%*3#3#3#3#Q%*;01E.6I??C79C79C;C?6:;24C79?07;26C79I??C79O;>K8=I2:ZLT]R^E7;K8=C48I:?K;CE7;K8=C48E98E.6e,4O(-O(-]).K!&Q%*Q%*3$(s7@s7@e'0Q%*K!&O(-K!&K!&K!&K!&O(-]).3#]).]).]).Z&*s7@]).Q%*]).K!&Z&*Q%*K!&K!&9/3;249/6C7>I?HC7>;01C;CI:?9/1;24;59C:A;24Q;CXGHE.6I2:?07I2:E7;?07C48C48E7;E7;I:?O@@O;>ZDKe,4]).]).s7@s7@e'0O(-s7@s7@s7@e,4Q%*K!&O(-K!&K!&O(-Z&*]).3#e'0K!&Z&*K!&Z&*Q%*Q%*Q%*e,4]).Q%*K!&O(-?07I:BC;CC796,0C48;26;*/?07E7;C7>C48;01C79I:E7;E7;I:C48?+2?07I:?C48C48E.6K;CK;CK;@K;@ODLK;CO;>K8=I:XGNQ;CO;>]=CŽKTž[dž[dŽKT•frQIOI:?;269/6?6:;01C;;?079/1;249/39/3;269/3C48C;;;019/3E7;K;@I:?07;24C489/1?+2615C48;269*+;24;24?07;26?6:;26E7;K8=E7;I:K;CC48E7;I2:E7;ODFODL¨‚’ÁÍâÁÍâÌ­¿Ì­¿Ì­¿± ¶¨‚’žx†eZeQ@@I2:O(-O(-O(-hGN|aoyY^eZe|aožx†žx†žx†ˆ‘¶˜³Ô˜³ÔI:BC799/3?6:9*3?079/1C483)0;019*+C;;9/39/30&*6'+6).0)+E7;K8=O@FK8=C48O@@K;@C48C48C48C48E7;I:?O;>K;@K;CQEIC48I?H¦ozÌ­¿± ¶žx†± ¶± ¶± ¶± ¶¨‚’¨‚’ˆ‘¶eZe]JO]HLyhzyhzžx†žx†yhzyhz˜m{žx†¨‚’ˆ‘¶± ¶± ¶ODLE7;;269*1?076,09*1;*/?079/36'+9*19*1?07;*/3)2.'-;24E.6K8=I2:C48E7;I:C48?+2C48I2:K8=O@FI:?I:?ODFI2:E7;O@FI:BI?BK;C|ao± ¶Ì­¿¨‚’± ¶¨‚’¨‚’Ì­¿˜³Ô± ¶± ¶ˆ‘¶n‚­]R^6,0eZe¨‚’± ¶ˆ‘¶ˆ‘¶¨‚’žx†yYhhOWsT^žx†XLN;269/39/3;*/6,0;596'+0&-6).?07;*/;*/3)-0&*3)-3)-0&*;59I2:I:?C48?07C48E7;I2:K8=I??I:± ¶± ¶± ¶± ¶± ¶± ¶± ¶± ¶± ¶± ¶ˆ‘¶n‚­?6:|ao|ao•fržx†ˆ‘¶n‚­yhzyhzžx†ˆ‘¶± ¶I?HC;C9/66,.3)06'+3)-;019/33)-9*+6'+9*+3&(6).9/66'+3,06/5I2:E.6C48C48C48C48E7;C48C48I:?E7;K;@K;@K;@ODFK;CK;CI:E7;E7;I:?E7;I:?E98E7;I2:I:?E7;E7;E7;I:?E7;E98Q;CÁÍâ± ¶ªny§fn§fn¡bjž[d˜fl…X`hGN.$&3$(;*/hOW˜m{¨‚’± ¶± ¶± ¶± ¶± ¶˜³Ô± ¶˜³ÔQQ_0&*9*10&*3$(9*+3)+9*36'+3)-3,+6,.6,.+$(9*16)(0&*6,.3$(E7;I2:E7;E.6E7;C48I2:E7;C48E7;E.6C48E7;I:6).6).0&*9*+3)-3)+6'+9*+9*+6,09*+6'+6,06,06,09/36).9*+XOWI2:?+2E7;I:;*/O;>Q;CI2:?+2;*/9*+;*/9/36).3)-9*+9*10&*6/.3)-9*30&*3)-6'+6,00&*3)-3)-3)0;016,06'+0&*I:;24;01?07XDI6'+6'+;*/6'+;*/O(-O(-E.63)+;249*+6,09/36,00&-6'+6,06,06'+3&(0&*3)-3)+0&*3,+.,-6'+3)+;*/I2:C48I2:;01O;>E7;I:E7;E7;C48E.6E7;?07?07E7;€VZž[dž[dž[dž[dž[d¡bj’X]wSY?+2C796,0;*/Z?EO(-O(-O(-O(-O(-O(-I2:I2:3)+6'+0&*0&*6'+0&*6,06,3.'+6)36,03,09*+0&*6'+6,09*10&-.'-3)-6,0K8=K;CO;>E7;I2:K8=E.6E.6E.6E.6K8=C48E7;E7;C48I2:C48?+2I:K8=I2:;*/C48?+2I2:E.6C48I2:C48?07I2:;01?07?+2hGNsHLsHL]=C]=C]=ChGNK;C;*/9*3;*/?+2?07O;>]=C]).]).O(-O(-O(-O;>9*+0&*3)0.$&9*+3)06'+3)-6'+3&(0&*6).3&(6).;593,00&*;*/6'+0&*;016,.Q;CO;>I2:XGNE.6K8=K;CI2:O;>O;>?07?07;*/E.6E7;C48E.6;*/E.6;01sLNs7@]).]).]=C]=C]=C?07;*/;*/?07;01;*/E98hGN]=CO(-O(-O(-O(-I2:9*+;26;*/0&*3)-9*+3)-3)+6,00&*;*/6).9*+0&*6).0)+6,.6'+6,03)06,06,0sLUkLQkLQhOWcKPyY^˜fl…X`ªny‹[awSYE.6I2:E.6I2:?+2?07?07;01E.6sLN]=CO(-O(-O;>]=C]=C9*+0&*;*/;*/6,.9*+;01kLQ]=CI2:O(-O(-O(-?079*+9/36,00&*0&*6'+3,+9*+9*+6'+9*+9*13,+9*+9*+6,.3,+6,03)-9/33,06,0€V`˜flžiqwSY‹^gžbjžbj€VZwORkLQ]=CK8=;*/;*/?079*+6'+?07?+2I2:hGN]=CO(-O(-O;>]=CQ@@9*+9*1;016'+0&*6'+XGHsHLhGN]=CO;>O(-]=CC;C9*+9*+6'+6,0;*/;01;016'+0&%3&(3)-0&*6'+3)+3&(3)+9/39/36,00&*3)-3)-˜m{€VZ’`mwSY€VZZ?EyY^žly˜m{˜iu‹[awSYhOWkLQO;>I2:I:?C48E7;Q@@hGN]=CO(-O;>I2:]=CZ?E;*/9*+;*/6'+9*+;01’`m€NSsHLsHL]=C]=C]=CC7>6'+9*+6'+0&*6,06,09*+.'+3)06'+.'(6'+0&-0&*3&-0&*6).3)-9/39*+0&*9*1•_e‚]f˜fl•_e’`m…X`‹[a…X`wSYwS\‹[asT^kLQ‚]fhGNsHLhGNžx†]HLhOWsLNI2:]=C]=C]=ChGNhOW;*/9*+;*/;*/?+2C48˜fl€VZ€NSwOR€NSsHLsLN?6:6'+6'+6'+0&*0&*0&*6'+6'+9*19*+;*/9*+6,06'+6'+6,.;269*+9/33)-0&-6,0…X`˜flkLQ‹^gžiq•fržfq¡bjžiq›_e˜fl‹W[‚]f•fr]=CsLU…X`sLUZ?EsLNsHL]=ChGNhGNhGNsLN€VZcKP]HLXDIQ@@XDIkLQžbj‹W[€VZsHL€NSsHLsLNC489*+9*+;01?076'+6'+6'+0&*6'+9*+;*/6'+6'+9*+6'+3)+0&*3)-6'+6,09/39*3˜fl•_ekLQ˜fl€VZ˜flžly’[d…X`’X]€V`‚]f•_e’[d’`mžly…X`]=CE.6hGNsLNsHLsHLhGNsLN€NS…X`‚]f‹[a•fryY^wOR•fr›_e‹W[€NSsLNsLNsLNsHL;01;*/6,.0&*9*+6'+;*/6'+9*+9*+6).9*+6).6,.;019*+;016).6).6,0;*/;26;26•_eŽKT‹W[hGN•_eyY^’`m…X`ž[d›_e¡bj‹[a’X]ž[d˜iu˜m{’`mwS\’`msLNhGNsHLsHLsLNsLN€VZ…X`…X`‹^g‹^g’`m‚]f˜fl‹[a’X]‹W[‹W[€NSsLNsLN|aoZ?E;01E.69*+9*+;*/;*/6'+.'+9*+?07C486'+6'+9*+6,06,00&*3)-6)(0&-6'+›_e’X]sHLsHL€NS€VZ›_ež[dž[d§fn¡bj›_e’X]ŽKT•_ežbj‹[a€VZ‚]fwORsLNsHLsHLwORsHL€NS‹[a‚]f‹[a‹^gžiqsLN˜fl’X]…X`€VZ…X`€NSsHLsLNsHL‹[a‚]fwSYsT^]HLXGHI2:?+29*+9*+;*/3)-3&(0&*0&*3&-3)-9*+;*/0&-3)-6'+ŽKT‹W[›_e’X]§fn›_e•_ež[d›_ežx†˜flžbj¡bj›_ež[dž[d¡bjŽKTsHLwORsHLsHLsHLsHLwOR€VZ€NS…X`ž[d€NS‹W[žbj’[d‹W[€VZ‹W[€VZ€VZhGNkLQhGNsHLhGN€VZ€VZ€VZ€NSyY^hGN€VZcKPyY^cKP?+2?07;*/0&*3)+6'+3)06'+6'+9*+žbjžfqž[d’X]’X]‹W[›_e‹W[¤hq’X]•_e•_ež[d¡bjž[d›_e‹W[’`mž[d€VZsHLsHLhGNsHLkLQsHLwOR€VZŽKT›_e…X`’X]‹W[€NS€VZ€VZ€VZwORsLN‹[a…X`’`mwOR‹W[…X`‹W[‹W[€NS›_ehGNkLQsLNsLN]=CyY^wSYQ@@C489*+;*/3)-3)-0&*wORwS\›_ežbj’[d‹W[€VZ‹W[›_e‹W[€NS‹W[€NS‹W[’X]ž[d¡bj§fn‹W[‹W[sHLsHLhGN€NSsHLwORsHLsLN‹W[ž[džbj‹W[€NSsLN€NSwORwORsLNsLN€NSsHL‹W[§fn¡bj‹W[€VZ’X]•_ež[dŽKT•_e•_e‹[a‹W[‹[a…X`‚]f]HL€VZO;>C48;*/9*+‹W[ž[d‹W[wOR€NSsLN€NSsLN€NShGN…X`kLQsHL…X`˜iucKPsHLQ;CwS\•_esLN€NSsHLsLNsHLwORhGNhGNŽKT‹W[…X`‹W[€VZsLNsLN€NSsLNkLQsLN€NS‹W[ŽKT‹W[€NS‹W[›_e¡bj€NS‹W[¡is¤hq¤hq›_e¤hq’X]•fr€NS•_e•_e¡is˜fl˜iu˜fl…X`’[dwOR€NSsHL€VZ‹W[›_ež[dž[d•_ewSY‹[a€NS‹W[]=CsHL]=C‹[až[d€VZhGNsHLsHLsHLsHLhGN‹W[›_ewSYO(-Z?EsLN€VZwORwORsLNsHLwORŽKT¡bj•_e§fn’X]ŽKT‹W[›_e‹W[‹[a‹W[•_ež[d’[d•_e’X]‹[a‹[a‹W[žbj’X]•_ežbj›_e€NS€NSžx†˜iuhOWžiq‹^g¡is¡bjžbj¡bj‹[asLU‹W[•_e‹W[’[dž[d¡bj›_e€NSsHLsHLsHLsHLsLNhGN€NS‹^gwOR›_e‹W[žx†•fr‚]f€V`€VZsLN€VZŽKT€NSsLN…X`‹W[•_e’X]wSYhGNhGN›_e•_e’X]›_e‹[a’X]‹W[‹W[€NS€NS›_e‹W[‹W[˜fl›_e‚]f¤hq›_e]=C]=Cž[d¨‚’µy‡ªny‹W[‹W[žbj‹W[hGNsLNhGNhGN¡bjžfq¡bjsHLsHLwORsHLsHLsHL‹[aO;>hGN’[d›_ežx†¨‚’¨‚’ˆ‘¶ˆ‘¶± ¶žx†€NS‹W[‹W[€NS›_e›_e’X]‹W[€NSsLNsHLsLNŽKT’X]‹W[›_e’X]¡bj’X]’X]¡bj’`m€VZ…X`žbj›_e‹W[›_e›_e›_e˜m{…X`sLN€NS¡bj‹[a›_ežiq•_e]=CyY^ž[dsLUwSYsLUwORsLNsLNwORkLQ|ao’[dcKP˜fl€NS˜iu6'+C7;yhzˆ‘¶ˆ‘¶± ¶’X]›_e˜flž[d’X]žbjŽKT’X]žbjsHLsHL’[dhGNž[d‹W[ž[d¡bj›_ežbj•_eŽKT’X]sLUsHL›_e€VZkLQ›_ewOR’X]…X`‹[a€VZ§fn›_ež[džfqwSY€VZhGN›_e…X`•fr˜flžbjµy‡…X`wORwORžx†± ¶ˆ‘¶wOR€V`•_ežbj‹^g+$(.'(.'(+$(9*3K8=€VZ’X]wSY…X`‹^gsHLsLN‹W[’X]›_e•_ežiqžbj¡bj¦oz€NSsLUsHLsHL‹[a•_e€NS’X]‹W[€VZsLUhGN€V`€VZ‹W[’X]€NS˜iuwOR˜fl‹^ghGNhGNsHL¤hq’`mžiqžbj‹[awSYsLN¨‚’¨‚’± ¶€˜ÂO[|?+2€VZwOR€VZ‹[a•fr0&-0)++$(0&*6'+K;C€NS’`m€VZ€VZ]=CsLNsLN€NS›_e]=C€NS’X]wSY’`m’[d¡bjªnyžbj§fnž[dŽKTŽKT›_e›_e‹^g…X`€V`…X`’X]›_ewOR‹[a‹[a˜fl…X`sLU›_e€NSsLN…X`˜fl]=ChGN€VZ€NS›_eC489/60)/0&-)!&6).yY^sLUkLQ•_e‚]f0&*0)-0&-0&*0&*ZDKkLQsLN›_e‹W[wSYwOR]=CsLU€V`cKP€VZ’[d€VZyYh]=CyY^sLUžfq…X`‹^gžbjž[d¡bj›_eZ?E•_e˜flsLNkLQ‹[a§fn•_ewOR’X]›_e¡bj’X]‹^gwOR‹^g‹W[…X`]=C…X`žbj‹^gO@F0&*6'+3$(+$(6'+‚]fwSY€VZwSYcKP3&-.)&9*+]RUeZežx†wSYžiq’X]˜fl‹[a¡is˜fl€NS˜m{hGNsLU€VZsLNwOR€VZ€NSsLU]RUsLNsLU¤hq¤hq§fn¤hq‹[a˜iu˜iu˜flž[džbj‹[a˜fl‹[ayY^µy‡¡bj¦ozžiqžbj’`mžbj€VZcKP‹[a›_e•_ewSY]R^|aoC;C6,06,0cKP€NS•_e‹[aQIO9*16/.ODLC;CI?HI?B‚]f’X]›_e¡is‹[ažbjsLN•_ehOW¡is€VZ€NSžbj’`msHL¡bjI2:K8=€NShGNsHLcKP•fr¡bj¡bj‹^gwSY‹^g€VZ‹^gwSYwSY‹[ažbj‹W[žbj•frsT^ZDK•fr€V`€V`O;>hOWcKPsT^eZeC;CO@FZLT6,06'+kLQ¨‚’wSYžbjeZeODLQIJODFC;CI?BZLTcKP›_e‚]fžbjžbj‹W[›_e¡bjž[d’X]›_e¡bjžfq•_e¨‚’˜iu‚]fwSYsHL’X]‹^g•_e€NS¡bj¡is‹[a€V`€VZ˜fl‹W[›_e‹^gsLUwOR§fn‹W[‹^g€VZ‹[akLQ‹[a‹^g€V`…X`…X`wSYI?H0&*6'+I:?K;CQJOsT^‹^g‹^gžbjODLK;CC799*13&-3$(3$(?+2wORsLNwORsLN…X`‹W[‹^g‹^g¤hqž[d¦ozžbj•_e§fn›_e’X]€NS?+2]=CwOR€VZ‹W[€NS’[d‹[a‹^g’`m¦oz‹[a€NS‹^gsLN€VZ‹[a’[d€VZ•fr…X`’X]sLNžiq›_e’`m’[d•frXOW;26;*/9/3O@FQEIyYh]HL€VZ’`myhzyYhQJO9/6;266,0C79cKPO;>sLN€VZwSY]HLhGNsLNwSYcKPsLUžiqžiq•fr¡bjžiq¡bj¡bj¦ozžbj›_e˜fl›_e‹[a˜iu˜iu± ¶’[dhGN…X`‹^gsLU…X`‹^gžlyžly˜flkLQsLU˜fl‹^gyY^…X`’`m…X`€V`QIO9/39/6C7>QQ_XOWyhzhGNyY^sT^QEIXDIOEF;266,06,3QEIyY^’`m¡isžbj›_e‹W[’`mwS\hGN‹W[hGN‹^gkLQ]=CžiqhOWwSY˜fl˜iusLN˜iu¡is•_e…X`•_e]=C]=C€VZžiq˜fl‹[a‹[a€VZwOR€VZsLUsT^kLQZ?EhOW]HLhGN’[džiq‚]fhOWC7>0&*;26C7>O@FODFhOWhOWcKPhOWI?HXLNIBBXOWODFI?H\`I:BhGNsLUwS\žiqžiq¡is¡bj¦oz¦oz¡issLU€NS›_e…X`…X`hGN€V`ªny‹W[’`m…X`˜fl˜flž[d•fr’`m‚]fyYh‹^ghOWhGN‚]fžly‹[a˜m{hOWwS\‹^gwSYžlyžlysT^ž[d˜m{IBJPKXI?HeZeeZe]R^I?HhOWhOW‚]fyY^XGNsT^|aosT^|aoeZeeZe\`yY^•frwSYwSY’`m’`mžlyžly¡is…X`•_e’`m˜fl‹[ažiq¤hqkLQ]=C‹[a€VZkLQ‹[a•_e‹W[…X`€V`‹[a’X]kLQ‹[asLU€VZ˜fl•_e˜flyY^hOWkLQhOWwS\€VZwS\˜fleZeQQ_yhzyhz|aoeZeeZe]R^yYhcKP˜m{˜m{|aoC;;C;;I?HhOWyYh•fryhzeZeZ?E]=CkLQwSYsLN€NS‹^g‹[a‹[a€V`€NS‹^gžbjžly˜fl‹[akLQ]HL‚]f€VZ›_e˜fl‹^gwS\‹^g˜m{…X`…X`‚]fZ?EkLQwORsLUwS\sLUcKPsT^cKPwORkLQ˜m{± ¶žx†žx†˜m{|aoQIOI?HI?HeZe|aoZ?EXOWyhzeZeXLNQEIC;CODL‚]f˜iuyhz± ¶¨‚’yYhsT^‚]fkLQ‹^g’`m‹^gžbj˜iu€VZ€VZ‚]fžiq¡isžbj‹^g]=CsLN…X`…X`wSYžiqsLU€VZ’`m˜m{ž[džly€VZ…X`]=ChGNkLQcKPwSYZ?EZ?E¦oz± ¶± ¶ˆ‘¶\iŽ[Wfyhz|aoQIOQIOODL]RUXOW?+2ODLC7>ODLE7;C;;O@@XGHsT^˜m{yhz¨‚’¨‚’µy‡± ¶± ¶]HLK8=I2:hGNsHLO;>Z?EwOR€VZ¦oz˜fl˜flžbj‹^g‹^gyY^‹^g‹[a¤hqwS\žlyžly’`m•fr•_ewOR|aoyYhwSYhOWhGNI2:E.6˜flµy‡¨‚’¨‚’žx†˜m{žx†|aoeZeC;CC7>E7;C7>Q;CsLNZDKhOWODLQEII?BC7>C48ZDKhOWyhz˜m{yYhsT^sT^yhzwS\wSY€VZkLQK8=Z?EO;>hGNZ?EhOWyY^‚]f‹[a…X`‹^g€V`…X`žiq•fr˜iu•_ehGNZ?EhGNwSYkLQcKP€VZyYhsT^…X`‹[asT^|aohOWeZe]R^eZehOWZLTeZeI?HE7;O;>Q;CXDIQ;CZLTZ?EhGNZ?EXDIXDIE7;K;C]JOI:BC48E7;I:?E7;I:BO@FcKPwOR‚]f¡iswS\cKPcKP‹^g‹^g€V`sLNyY^kLQhGN…X`•fr€V`‹[ayY^hOW˜fl’`mhOW€VZ•fr€V`hGNcKP]HL‹W[hOWsT^sLN‚]fODLO@FI?HK;CI?HQIOXOW?07]=ChGNcKPZ?EZ?EQ@@cKPwSYsLU€VZwSYhOWZDKhGN]JO]HLC489*39*16'+O;>wS\‹W[yY^žbj€V`€V`•fr‹^gyYh˜fl‹^g¡iswS\wSYwSY€VZsT^‹W[žbj’`m‹^gwSY•fr…X`žly˜iu˜fl‚]f|ao‚]f’`mhOWZ?EhGNhGNsT^Q;CK;CI:BZDK]HLcKPsLUwSYwS\wS\yYhsT^cKP‚]f‹^g‹[ayY^yY^Q;ChGNkLQ‚]fZ?E]=CZ?EZ?EwOR€V`’`myY^yY^wSYhGNhGN‚]f’`m‹[awS\hGNhGNZDKQ;CwS\wS\‚]f’`m€V`wOR€V`hOWhGNhGNhGNhOWhOWsLUwS\wS\‚]f€VZ‹^g…X`‚]fsT^‹^gwS\sLU]HLkLQwSYhGNkLQ‹^gwSY•fr•fr’`m˜flwOR‚]f‚]fyY^‹^ghGNcKPyY^wS\kLQyYhsT^yY^yY^€V`’`m…X`wSYhOWyYhkLQhOW‚]f‚]f•_e‹^g›_e’`myY^•fr‚]f‹^g‹^g‹^g€VZkLQwSY‚]fwSY•fryY^˜iu•fr€VZ‚]f¦ozwORwS\‚]fyY^‚]fwS\cKPyY^sLUyY^hOWyY^yY^sT^sLU•frhGNhOW•fr•fr€VZžiq€VZwSYcKPhGN…X`wSYsLNhGNwS\yY^sT^|aoyYhZ?EC48wSYQ@@yY^€V`wS\‹^gwSYsLN]HLXGNsT^¡bj‹^g‹^gwS\hOWhOWsLUkLQ’`msT^kLQ‚]f‚]fyY^‚]f˜flªny‚]fyYh‚]fwS\wS\hOW›_e‚]f€V`sT^kLQwSYhOWwSY…X`wORsT^‹[a•_e…X`‹^g€V`‚]f˜fl’X]žly¦ozžbjwORwS\žbjwS\‚]fyY^•frsT^…X`‚]f˜flyY^•frkLQžiqžiq€V`˜fl•fr˜iu˜iu…X`€VZ‚]f˜iu’`mžiqžiq¡isžly•fryY^‚]f‚]f˜iu•fr•fr‚]fyYh‚]fkLQ›_ewSY‹^g‚]fwSYhGNwS\wS\€V`‚]f•fr…X`žly‹^gyY^€V`‹^g›_e’`m€V`€VZ•fr‚]f‚]fhOWsT^sLUyY^•fržfqyY^‚]fwSY€VZsT^hOWsT^‹^g•fr‹^g•fr‚]fwS\’`m€V`•frwS\˜iužx†•fr‹^g‚]fsT^kLQsT^sLU‚]fyYh‹[a‚]fyY^‚]f¡iswSY‹^g…X`’`m‚]f˜iu•fr‹^gwS\yY^‚]fhOWsT^sT^]HL˜iuwS\‹^g…X`žbj¡bjž[dhGN‚]fžx†hOW˜iucKPsT^‹^ghOWcKP’`mžiq’[d€VZ˜flžx†˜m{˜flžfq•fr˜iu‹^g‹^g|ao¦oz‚]f‚]fhOW•fržly˜iuyYh€V`‚]fsT^sT^sT^sT^’`m‹^g‚]fsT^žiqªnyµy‡¦oz•fržly‹^g•fryY^eZeyYhcKPcKP]HLhOWhOWZDKcKP€VZªny˜iu•fr˜fl¡is’`mžbjyY^|ao|ao‹^g‹^g’`m‹^g˜flsT^hOW’`mwS\‹^gtkinspect-5.1.6p10/sls.xbm010064400007650000765000000052260572051453500136010ustar00patpat#define noname_width 64 #define noname_height 64 static char noname_bits[] = { 0x00,0x00,0x00,0xfc,0x7f,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x01,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x0f, 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, 0x3f,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xf8,0xff, 0xff,0x7f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfe, 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x07,0x00,0x00,0x00, 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x03,0x00,0x00, 0x00,0xff,0xff,0x07,0xf8,0x0f,0x00,0x00,0x00,0xff,0xff,0x01,0xf0,0x07,0x00, 0x00,0x00,0xff,0xff,0x00,0xc0,0x03,0x00,0x00,0x00,0xff,0x7f,0x00,0xc0,0x01, 0x00,0x00,0x00,0xff,0x1f,0x00,0x00,0x01,0x00,0x00,0x00,0xfe,0x3f,0x00,0x80, 0x01,0x00,0x00,0x00,0xa7,0x17,0x00,0x80,0x01,0x00,0x00,0x00,0x07,0x0f,0x00, 0x80,0x00,0x00,0x00,0x00,0x83,0x9b,0x7f,0x80,0x00,0x00,0x00,0x00,0x87,0xf3, 0x7f,0x80,0x00,0x00,0x00,0x00,0x83,0x73,0xc0,0xff,0x00,0x00,0x00,0x00,0xc3, 0x33,0xc0,0x97,0x01,0x00,0x00,0x00,0x43,0x33,0x80,0x0d,0x01,0x00,0x00,0x80, 0x03,0x31,0x00,0x07,0x01,0x00,0x00,0x80,0x03,0x30,0x00,0x07,0x01,0x00,0x00, 0x80,0x02,0x60,0x80,0x03,0x01,0x00,0x00,0x80,0x04,0xe0,0xc0,0x03,0x01,0x00, 0x00,0x00,0x08,0xc0,0xe1,0x03,0x01,0x00,0x00,0x80,0x00,0x80,0xbf,0x82,0x01, 0x00,0x00,0x80,0x00,0x00,0x9e,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7c, 0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x40,0x00,0x00, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x20, 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x02,0x00,0x00,0x00, 0x20,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x10,0x40,0x00,0x80,0x00,0x00,0x00, 0x00,0x18,0x80,0x00,0x40,0x00,0x00,0x00,0x00,0x08,0x00,0x03,0x20,0x00,0x00, 0x00,0x00,0x06,0x80,0x3c,0x10,0x00,0x00,0x00,0x00,0x03,0xc0,0xe0,0x0f,0x00, 0x00,0x00,0x80,0x02,0x40,0x00,0x00,0x00,0x00,0x00,0x80,0x02,0x40,0x01,0x00, 0x00,0x00,0x00,0x60,0x01,0x80,0x02,0x00,0x00,0x00,0x00,0x10,0x01,0x80,0x0c, 0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x11,0x00,0x00,0x00,0x00,0x00,0x01,0x00, 0xc5,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x05,0x00,0x00,0x00,0x00,0x01, 0x00,0x02,0x10,0x00,0x00,0x00,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0x00, 0x00,0x0c,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00}; tkinspect-5.1.6p10/stl.tcl010064400007650000765000000006720576426463600136120ustar00patpat# # $Id: stl.tcl,v 1.4 1995/06/04 08:06:54 sls Exp $ # # Stl is my own tcl library. It's not quite ready to be released. # The stl-lite directory contains an extremely trimmed down version. # This proc loads it. # proc stl_lite_init {} { global tkinspect_library foreach file { object.tcl filechsr.tcl simpleentry.tcl tk_util.tcl feedback.tcl tkhtml.tcl } { uplevel #0 [list source $tkinspect_library/stl-lite/$file] } } tkinspect-5.1.6p10/tclIndex010064400007650000765000000034400743753721000137630ustar00patpat# Tcl autoload index file, version 2.0 # This file is generated by the "auto_mkindex" command # and sourced to set up indexing information for one or # more commands. Typically each line is a command that # sets an element in the auto_index array, where the # element name is the name of a command and the value is # a script that loads the command. set auto_index(tkinspect_exit) "source $dir/tkinspect.tcl" set auto_index(tkinspect_widgets_init) "source $dir/tkinspect.tcl" set auto_index(tkinspect_about) "source $dir/tkinspect.tcl" set auto_index(tkinspect_create_main_window) "source $dir/tkinspect.tcl" set auto_index(tkinspect_failure) "source $dir/tkinspect.tcl" set auto_index(tkerror) "source $dir/tkinspect.tcl" set auto_index(log) "source $dir/install.tcl" set auto_index(install_files) "source $dir/install.tcl" set auto_index(regsub_quote) "source $dir/install.tcl" set auto_index(install) "source $dir/install.tcl" set auto_index(tkinspect_default_options) "source $dir/defaults.tcl" set auto_index(value_no_filter) "source $dir/value.tcl" set auto_index(create_variable_trace) "source $dir/globals_list.tcl" set auto_index(stl_lite_init) "source $dir/stl.tcl" set auto_index(version_init) "source $dir/version.tcl" set auto_index(tkinspect_main_window) "source $dir/interface.tcl" set auto_index(tkinspect_set_target) "source $dir/interface.tcl" set auto_index(tkinspect_select) "source $dir/interface.tcl" set auto_index(tkinspect_create_cmdline) "source $dir/interface.tcl" set auto_index(tkinspect_help) "source $dir/interface.tcl" set auto_index(tkinspect_value_text_window) "source $dir/interface.tcl" set auto_index(tkinspect_send_value) "source $dir/interface.tcl" set auto_index(tkinspect_detach_value) "source $dir/interface.tcl" set auto_index(tkinspect_trace_global) "source $dir/interface.tcl" tkinspect-5.1.6p10/tkinspect.tcl010064400007650000765000000337670767472225400150240ustar00patpat#!/bin/sh #\ exec wish "$0" ${1+"$@"} # # $Id: tkinspect.tcl,v 1.33 2003/06/21 00:19:56 patthoyts Exp $ # package require Tk set tkinspect(title) "Tkinspect" set tkinspect(counter) -1 set tkinspect(main_window_count) 0 set tkinspect(list_classes) { "namespaces_list Namespaces" "procs_list Procs" "globals_list Globals" "class_list Classes" "object_list Objects" "windows_list Windows" "images_list Images" "menus_list Menus" "canvas_list Canvases" "afters_list Afters" } set tkinspect(list_class_files) { lists.tcl procs_list.tcl globals_list.tcl windows_list.tcl images_list.tcl about.tcl value.tcl help.tcl cmdline.tcl windows_info.tcl menus_list.tcl canvas_list.tcl classes_list.tcl objects_list.tcl names.tcl afters_list.tcl namespaces_list.tcl } set tkinspect(help_topics) { Intro Value Lists Procs Globals Windows Images Canvases Menus Classes Value Miscellany Notes WhatsNew ChangeLog } if {[info commands itcl_info] != ""} { set tkinspect(default_lists) "object_list procs_list globals_list windows_list" } else { set tkinspect(default_lists) "namespaces_list procs_list globals_list" } wm withdraw . # Find the tkinspect library - support scripted documents (Steve Landers) # also supports starkits (Pat Thoyts). if {[info exists ::starkit::topdir]} { set tkinspect_library [file join $::starkit::topdir lib tkinspect] lappend auto_path $tkinspect_library } elseif {[info exists ::scripdoc::self]} { lappend auto_path [file join $::scripdoc::self lib] set tkinspect_library [file join $::scripdoc::self lib tkinspect] lappend auto_path $tkinspect_library } elseif [file exists @tkinspect_library@/tclIndex] { lappend auto_path [set tkinspect_library @tkinspect_library@] } else { lappend auto_path [set tkinspect_library [file dirname [info script]]] } # Use the winsend package if available. if {[info command send] == {}} { if {![catch {package require winsend}]} { set tkinspect(title) [winsend appname] proc send {app args} { eval winsend send [list $app] $args } } } # Emulate the 'send' command using the dde package if available. if {[info command send] == {} || [package provide winsend] != {}} { if {![catch {package require dde}]} { array set dde [list count 0 topic $tkinspect(title)] while {[dde services TclEval $dde(topic)] != {}} { incr dde(count) set dde(topic) "$tkinspect(title) #$dde(count)" } dde servername $dde(topic) set tkinspect(title) $dde(topic) unset dde if {[package provide winsend] != {}} { proc send {app args} { if {[string match {!*} $app]} { eval dde eval [list [string range $app 1 end]] $args } else { eval winsend send [list $app] $args } } } else { proc send {app args} { eval dde eval [list $app] $args } } } } # Provide non-send based support using tklib's comm package. if {![catch {package require comm}]} { # defer the cleanup for 2 seconds to allow other events to process comm::comm hook lost {after 2000 set x 1; vwait x} # # replace send with version that does both send and comm # if [string match send [info command send]] { rename send tk_send } else { proc tk_send args {} } proc send {app args} { if [string match {[0-9]*} $app] { eval comm::comm send [list $app] $args } else { eval tk_send [list $app] $args } } } stl_lite_init version_init proc tkinspect_exit {} { destroy . exit 0 } proc tkinspect_widgets_init {} { global tkinspect_library global tkinspect foreach file $tkinspect(list_class_files) { uplevel #0 source $tkinspect_library/$file } } proc tkinspect_about {parent} { catch {destroy .about} about .about wm transient .about $parent .about run } dialog tkinspect_main { param target "" member last_list {} member lists "" member cmdline_counter -1 member cmdlines "" member windows_info method create {} { global tkinspect pack [frame $self.menu -bd 2 -relief raised] -side top -fill x menubutton $self.menu.file -menu $self.menu.file.m -text "File" \ -underline 0 pack $self.menu.file -side left set m [menu $self.menu.file.m] $m add cascade -label "Select Interpreter (send)" -underline 0 \ -menu $self.menu.file.m.interps if {[package provide comm] != {}} { $m add cascade -label "Select Interpreter (comm)" -underline 21 \ -menu $self.menu.file.m.comminterps $m add command -label "Connect to (comm)" -underline 0 \ -command "$self connect_dialog" } $m add command -label "Update Lists" -underline 0 \ -command "$self update_lists" $m add separator $m add command -label "New Tkinspect Window" -underline 0 \ -command tkinspect_create_main_window $m add command -label "New Command Line" -underline 12 \ -command "$self add_cmdline" foreach list_class $tkinspect(list_classes) { $m add checkbutton -label "[lindex $list_class 1] List" \ -variable [object_slotname [lindex $list_class 0]_is_on] \ -command "$self toggle_list [lindex $list_class 0]" } $m add separator $m add command -label "Close Window" -underline 0 \ -command "$self close" $m add command -label "Exit Tkinspect" -underline 1 \ -command tkinspect_exit menu $self.menu.file.m.interps -tearoff 0 \ -postcommand "$self fill_interp_menu" if {[package provide comm] != {}} { menu $self.menu.file.m.comminterps -tearoff 0 \ -postcommand "$self fill_comminterp_menu" } menubutton $self.menu.help -menu $self.menu.help.m -text "Help" \ -underline 0 pack $self.menu.help -side right set m [menu $self.menu.help.m] $m add command -label "About..." -command [list tkinspect_about $self]\ -underline 0 foreach topic $tkinspect(help_topics) { $m add command -label $topic -command [list $self help $topic] \ -underline 0 } pack [set f [frame $self.buttons -bd 0]] -side top -fill x label $f.cmd_label -text "Command:" pack $f.cmd_label -side left entry $f.command -bd 2 -relief sunken bind $f.command "$self send_command \[%W get\]" pack $f.command -side left -fill x -expand 1 button $f.send_command -text "Send Command" \ -command "$self send_command \[$f.command get\]" button $f.send_value -text "Send Value" \ -command "$self.value send_value" pack $f.send_command $f.send_value -side left pack [frame $self.lists -bd 0] -side top -fill both value $self.value -main $self pack $self.value -side top -fill both -expand 1 foreach list_class $tkinspect(default_lists) { $self add_list $list_class set slot(${list_class}_is_on) 1 } pack [frame $self.status] -side top -fill x label $self.status.l -bd 2 -relief sunken -anchor w pack $self.status.l -side left -fill x -expand 1 set slot(windows_info) [object_new windows_info] wm iconname $self $tkinspect(title) wm title $self "$tkinspect(title): $slot(target)" $self status "Ready." } method reconfig {} { } method destroy {} { global tkinspect object_delete $slot(windows_info) if {[incr tkinspect(main_window_count) -1] == 0} tkinspect_exit } method close {} { after 0 destroy $self } method set_target {target {type send}} { global tkinspect set slot(target) $target set slot(target,type) $type if {$type == "comm"} { set slot(target,self) [comm::comm self] } else { set slot(target,self) $tkinspect(title) } $self update_lists foreach cmdline $slot(cmdlines) { $cmdline set_target $target } set name [file tail [send $target ::set argv0]] $self status "Remote interpreter is \"$target\" ($name)" wm title $self "$tkinspect(title): $target ($name)" } method update_lists {} { if {$slot(target) == ""} return $slot(windows_info) update $slot(target) foreach list $slot(lists) { $list update $slot(target) } } method select_list_item {list item} { set slot(last_list) $list set target [$self target] $self.value set_value "[$list get_item_name] $item" \ [$list retrieve $target $item] \ [list $self select_list_item $list $item] $self.value set_send_filter [list $list send_filter] $self status "Showing \"$item\"" } method connect_dialog {} { if ![winfo exists $self.connect] { connect_interp $self.connect -value $self under_mouse $self.connect } else { wm deiconify $self.connect under_mouse $self.connect } } method fill_interp_menu {} { set m $self.menu.file.m.interps catch {$m delete 0 last} set winsend 0 if {[package provide winsend] != {}} { set winsend 1 foreach interp [winsend interps] { $m add command -label $interp \ -command [list $self set_target $interp winsend] } } if {[package provide dde] != {}} { foreach service [dde services TclEval {}] { if {$winsend} { set label "[lindex $service 1] (dde)" set app "![lindex $service 1]" } else { set label [lindex $service 1] set app $label } $m add command -label $label \ -command [list $self set_target $app dde] } } else { foreach interp [winfo interps] { $m add command -label $interp \ -command [list $self set_target $interp] } } } method fill_comminterp_menu {} { set m $self.menu.file.m.comminterps catch {$m delete 0 last} foreach interp [comm::comm interps] { if [string match [comm::comm self] $interp] { set label "$interp (self)" } else { set label "$interp ([file tail [send $interp ::set argv0]])" } $m add command -label $label \ -command [list $self set_target $interp comm] } } method status {msg} { $self.status.l config -text $msg } method target {} { if ![string length $slot(target)] { tkinspect_failure \ "No interpreter has been selected yet. Please select one first." } return $slot(target) } method last_list {} { return $slot(last_list) } method send_command {cmd} { set slot(last_list) "" set cmd [$self.buttons.command get] $self.value set_value [list command $cmd] [send $slot(target) $cmd] \ [list $self send_command $cmd] $self.value set_send_filter "" $self status "Command sent." } method toggle_list {list_class} { set list $self.lists.$list_class if !$slot(${list_class}_is_on) { $list remove } else { $self add_list $list_class if [string length $slot(target)] { $list update $slot(target) } } } method add_list {list_class} { set list $self.lists.$list_class if [winfo exists $list] return set slot(${list_class}_is_on) 1 lappend slot(lists) $list $list_class $list -command "$self select_list_item $list" \ -main $self pack $list -side left -fill both -expand 1 } method delete_list {list} { set ndx [lsearch -exact $slot(lists) $list] set slot(lists) [lreplace $slot(lists) $ndx $ndx] pack forget $list # for some reason if all the lists get unpacked the # .lists frame doesn't collapse unless we force it $self.lists config -height 1 set list_class [lindex [split $list .] 3] set slot(${list_class}_is_on) 0 } method add_cmdline {} { set cmdline \ [command_line $self.cmdline[incr slot(cmdline_counter)] -main $self] $cmdline set_target $slot(target) lappend slot(cmdlines) $cmdline } method delete_cmdline {cmdline} { set ndx [lsearch -exact $slot(cmdlines) $cmdline] set slot(cmdlines) [lreplace $slot(cmdlines) $ndx $ndx] } method add_menu {name} { set w $self.menu.[string tolower $name] menubutton $w -menu $w.m -text $name -underline 0 pack $w -side left menu $w.m return $w.m } method delete_menu {name} { set w $self.menu.[string tolower $name] pack forget $w destroy $w } method help {topic} { global tkinspect tkinspect_library if [winfo exists $self.help] { wm deiconify $self.help raise $self.help } else { help_window $self.help -topics $tkinspect(help_topics) \ -helpdir $tkinspect_library center_window $self.help } $self.help show_topic $topic } method windows_info {args} { eval $slot(windows_info) $args } } proc tkinspect_create_main_window {args} { global tkinspect set w [eval tkinspect_main .main[incr tkinspect(counter)] $args] incr tkinspect(main_window_count) return $w } # 971005: phealy # # With tk8.0 the default tkerror proc is finally gone - bgerror # takes its place (see the changes tk8.0 changes file). This # simplified error handling should be ok. # proc tkinspect_failure {reason} { tk_dialog .failure "Tkinspect Failure" $reason warning 0 Ok } tkinspect_widgets_init tkinspect_default_options if [file exists ~/.tkinspect_opts] { source ~/.tkinspect_opts } tkinspect_create_main_window if [file exists .tkinspect_init] { source .tkinspect_init } dialog connect_interp { param value method create {} { frame $self.top pack $self.top -side top -fill x label $self.l -text "Connect to:" entry $self.e -bd 2 -relief sunken bind $self.e "$self connect" bind $self.e "destroy $self" pack $self.l -in $self.top -side left pack $self.e -in $self.top -fill x -expand 1 button $self.close -text "OK" -width 8 -command "$self connect" button $self.cancel -text "Cancel" -width 8 -command "destroy $self" pack $self.close $self.cancel -side left wm title $self "Connect to Interp.." wm iconname $self "Connect to Interp.." focus $self.e } method reconfig {} { } method connect {} { set text [$self.e get] if ![string match {[0-9]*} $text] return comm::comm connect $text wm withdraw $self $slot(value) set_target $text comm } } tkinspect-5.1.6p10/value.tcl010064400007650000765000000124620744650164600141160ustar00patpat# # $Id: value.tcl,v 1.10 2002/03/22 01:06:46 pat Exp $ # set value_priv(counter) -1 proc value_no_filter {text} { return $text } widget value { param width 100 param height 20 param main param savehist 15 param searchbackground indianred param searchforeground white member hist_no 0 member send_filter value_no_filter method create {} { $self config -bd 2 -relief raised -highlightthickness 0 pack [frame $self.title] -side top -fill x pack [label $self.title.l -text "Value: "] -side left menubutton $self.title.vname -anchor w -menu $self.title.vname.m \ -bd 0 -state disabled menu $self.title.vname.m -postcommand "$self fill_vname_menu" pack $self.title.vname -fill x scrollbar $self.sb -relief sunken -bd 1 -command "$self.t yview" text $self.t -yscroll "$self.sb set" pack $self.sb -side right -fill y pack $self.t -side right -fill both -expand 1 bind $self.t "$self send_value" bind $self.t "$self search_dialog" set m [$slot(main) add_menu Value] bind $self.t <3> "tk_popup $m %X %Y" $m add command -label "Send Value" -command "$self send_value" \ -underline 1 $m add command -label "Find..." -command "$self search_dialog" \ -underline 0 $m add command -label "Save Value..." -command "$self save" \ -underline 0 $m add command -label "Load Value..." -command "$self load" \ -underline 0 $m add command -label "Detach Window" -command "$self detach" \ -underline 0 } method reconfig {} { $self.t config -width $slot(width) -height $slot(height) $self.t tag configure search -background $slot(searchbackground) \ -foreground $slot(searchforeground) } method set_value {name value redo_command} { $self.t delete 1.0 end $self.t insert 1.0 $value $self.title.vname config -text $name -state normal set slot(history.[incr slot(hist_no)]) [list $name $redo_command] if {($slot(hist_no) - $slot(savehist)) > 0} { unset slot(history.[expr $slot(hist_no)-$slot(savehist)]) } } method fill_vname_menu {} { set m $self.title.vname.m catch {$m delete 0 last} for {set i $slot(hist_no)} {[info exists slot(history.$i)]} {incr i -1} { $m add command -label [lindex $slot(history.$i) 0] \ -command [lindex $slot(history.$i) 1] } } method set_send_filter {command} { if {![string length $command]} { set command value_no_filter } set slot(send_filter) $command } method send_value {} { send [$slot(main) target] \ [eval $slot(send_filter) [list [$self.t get 1.0 end]]] $slot(main) status "Value sent" } method detach {} { set w [tkinspect_create_main_window \ -default_lists {} \ -target [$slot(main) cget -target]] $w.value copy $self } method copy {v} { $self.t insert 1.0 [$v.t get 1.0 end] } method search_dialog {} { if ![winfo exists $self.search] { value_search $self.search -value $self center_window $self.search } else { wm deiconify $self.search } } method search {type text} { $self.t tag remove search 0.0 end scan [$self.t index end] %d n_lines set start 1 set end [expr $n_lines+1] set inc 1 set l [string length $text] for {set i $start} {$i != $end} {incr i $inc} { if {[string first $text [$self.t get $i.0 $i.1000]] == -1} { continue } set line [$self.t get $i.0 $i.1000] set offset 0 while 1 { set index [string first $text $line] if {$index < 0} { break } incr offset $index $self.t tag add search $i.[expr $offset] $i.[expr $offset+$l] incr offset $l set line [string range $line [expr $index+$l] 1000] } } if [catch {$self.t see [$self.t index search.first]}] { $slot(main) status "Search text not found." } } method save {} { #filechooser $self.fc -newfile 1 -title "Save Value" #set file [$self.fc run] set file [tk_getSaveFile -title "Save Value"] if ![string length $file] { $slot(main) status "Save cancelled." return } set fp [open $file w] puts $fp [$self.t get 1.0 end] close $fp $slot(main) status "Value saved to \"$file\"" } method load {} { #filechooser $self.fc -title "Load Value" #set file [$self.fc run] set file [tk_getOpenFile -title "Load Value"] if ![string length $file] { $slot(main) status "Load cancelled." return } $self.t delete 1.0 end set fp [open $file r] $self.t insert 1.0 [read $fp] close $fp $slot(main) status "Value read from \"$file\"" } } dialog value_search { param value member search_type exact method create {} { frame $self.top pack $self.top -side top -fill x label $self.l -text "Search for:" entry $self.e -bd 2 -relief sunken bind $self.e "$self search" pack $self.l -in $self.top -side left pack $self.e -in $self.top -fill x -expand 1 checkbutton $self.re -variable [object_slotname search_type] \ -onvalue regexp -offvalue exact -text "Regexp search" pack $self.re -side top -anchor w button $self.go -text "Highlight" -command "$self search" button $self.close -text "Close" -command "destroy $self" pack $self.go $self.close -side left wm title $self "Find in Value.." wm iconname $self "Find in Value.." focus $self.e } method reconfig {} { } method search {} { set text [$self.e get] if ![string length $text] return $slot(value) search $slot(search_type) $text } } tkinspect-5.1.6p10/version.tcl010064400007650000765000000013340767472225400144660ustar00patpat# # $Id: version.tcl,v 1.15 2003/06/21 00:19:56 patthoyts Exp $ # # Contains version numbers for tkinspect-5. # proc version_init {} { global tkinspect tk_version tk_patchLevel set tkinspect(release) 5.1.6p10 set tkinspect(release_date) "21 Jun 2003" scan $tk_version "%d.%d" major minor if {$major < 8} { puts stderr \ "tkinspect-$tkinspect(release) requires Tk 8.x,\ you appear to be running Tk $major.$minor" exit 1 } if {[scan $tk_patchLevel "4.0b%d" beta] == 1 && $beta < 4} { tk_dialog .warning "Warning!" \ "tkinspect-$tkinspect(release) has only been tested on 4.0b4.\ You might have problems running on $tk_patchLevel." warning 0 Ok } } tkinspect-5.1.6p10/windows_info.tcl010064400007650000765000000031670767472225400155140ustar00patpat# # $Id: windows_info.tcl,v 1.7 2003/06/21 00:19:56 patthoyts Exp $ # # Maintains the list of windows, and caches window class information. # (the list is shared between windows_list and menus_list.) # object_class windows_info { member windows {} method clear {} { foreach w $slot(windows) { if [info exists slot($w.class)] { unset slot($w.class) } } set slot(windows) {} } method get_windows {} { return $slot(windows) } method append_windows {target result_var parent} { upvar $result_var result set cmd "if {\[::info command ::winfo\] != {}} {\n\ ::winfo children $parent\n\ }" foreach w [send $target $cmd] { lappend slot(windows) $w $self append_windows $target result $w } } method update {target} { $self clear set cmd [list if {[::info command winfo] != {}} {::winfo children .}] if {[catch {set slot(windows) [send $target $cmd]}]} { set slot(windows) {} } feedback .feedback -title "Getting Windows" \ -steps [llength $slot(windows)] .feedback grab foreach w $slot(windows) { $self append_windows $target windows $w .feedback step update idletasks } destroy .feedback } method get_class {target w} { if ![info exists slot($w.class)] { if ![send $target [list winfo exists $w]] { # the window no longer exists, so delete it from our list set ndx [lsearch -exact $slot(windows) $w] if {$ndx >= 0} { set slot(windows) [lreplace $slot(windows) $ndx $ndx] } return "" } set slot($w.class) [send $target [list winfo class $w]] } return $slot($w.class) } } tkinspect-5.1.6p10/windows_list.tcl010064400007650000765000000141510763645663500155340ustar00patpat# # $Id: windows_list.tcl,v 1.14 2003/03/21 00:32:29 patthoyts Exp $ # widget windows_list { object_include tkinspect_list param title "Windows" param get_window_info 1 param filter_empty_window_configs 1 param filter_window_class_config 1 param filter_window_pack_in 1 member mode config method get_item_name {} { return window } method create {} { tkinspect_list:create $self $slot(menu) add separator $slot(menu) add radiobutton -variable [object_slotname mode] \ -value config -label "Window Configuration" -underline 7 \ -command "$self mode_changed" $slot(menu) add radiobutton -variable [object_slotname mode] \ -value packing -label "Window Packing" -underline 7 \ -command "$self mode_changed" $slot(menu) add radiobutton -variable [object_slotname mode] \ -value slavepacking -label "Slave Window Packing" -underline 1 \ -command "$self mode_changed" $slot(menu) add radiobutton -variable [object_slotname mode] \ -value bindtagsplus -label "Window Bindtags & Bindings" \ -command "$self mode_changed" -underline 16 $slot(menu) add radiobutton -variable [object_slotname mode] \ -value bindtags -label "Window Bindtags" \ -command "$self mode_changed" -underline 11 $slot(menu) add radiobutton -variable [object_slotname mode] \ -value bindings -label "Window Bindings" -underline 7 \ -command "$self mode_changed" $slot(menu) add radiobutton -variable [object_slotname mode] \ -value classbindings -label "Window Class Bindings" -underline 8 \ -command "$self mode_changed" $slot(menu) add separator $slot(menu) add checkbutton \ -variable [object_slotname filter_empty_window_configs] \ -label "Filter Empty Window Options" $slot(menu) add checkbutton \ -variable [object_slotname filter_window_class_config] \ -label "Filter Window -class Options" $slot(menu) add checkbutton \ -variable [object_slotname filter_window_pack_in] \ -label "Filter Pack -in Options" $slot(menu) add separator $slot(menu) add checkbutton \ -variable [object_slotname get_window_info] \ -label "Get Window Information" -underline 0 } method update_self {target} { $slot(main) windows_info update $target $self update $target } method update {target} { if !$slot(get_window_info) return $self clear foreach w [$slot(main) windows_info get_windows] { $self append $w } } method set_mode {mode} { set slot(mode) $mode $self mode_changed } method clear {} { tkinspect_list:clear $self } method mode_changed {} { if {[$slot(main) last_list] == $self} { $slot(main) select_list_item $self $slot(current_item) } } method retrieve {target window} { set result [$self retrieve_$slot(mode) $target $window] set old_bg [send $target [list $window cget -background]] send $target [list $window configure -background #ff69b4] send $target [list after 200 \ [list catch [list $window configure -background $old_bg]]] return $result } method retrieve_config {target window} { set result "# window configuration of [list $window]\n" append result "[list $window] config" foreach spec [send $target [list $window configure]] { if {[llength $spec] == 2} continue append result " \\\n\t[lindex $spec 0] [list [lindex $spec 4]]" } append result "\n" return $result } method format_packing_info {result_var window info} { upvar $result_var result append result "pack configure [list $window]" set len [llength $info] for {set i 0} {$i < $len} {incr i 2} { append result " \\\n\t[lindex $info $i] [lindex $info [expr $i+1]]" } append result "\n" } method retrieve_packing {target window} { set result "# packing info for [list $window]\n" if [catch {send $target [list ::pack info $window]} info] { append result "# $info\n" } else { $self format_packing_info result $window $info } return $result } method retrieve_slavepacking {target window} { set result "# packing info for slaves of [list $window]\n" foreach slave [send $target [list ::pack slaves $window]] { $self format_packing_info result $slave \ [send $target [list ::pack info $slave]] } return $result } method retrieve_bindtags {target window} { set result "# bindtags of [list $window]\n" set tags [send $target [list ::bindtags $window]] append result [list bindtags $window $tags] append result "\n" return $result } method retrieve_bindtagsplus {target window} { set result "# bindtags of [list $window]\n" set tags [send $target [list ::bindtags $window]] append result [list bindtags $window $tags] append result "\n\n# bindings (in bindtag order)..." foreach tag $tags { foreach sequence [send $target [list ::bind $tag]] { append result "\nbind $tag $sequence " append result [list [send $target [list ::bind $tag $sequence]]] } } append result "\n" return $result } method retrieve_bindings {target window} { set result "# bindings of [list $window]" foreach sequence [send $target [list ::bind $window]] { append result "\nbind $window $sequence " append result [list [send $target [list ::bind $window $sequence]]] } append result "\n" return $result } method retrieve_classbindings {target window} { set class [$slot(main) windows_info get_class $target $window] set result "# class bindings for $window\n# class: $class" foreach sequence [send $target [list ::bind $class]] { append result "\nbind $class $sequence " append result [list [send $target [list ::bind $class $sequence]]] } append result "\n" return $result } method send_filter {value} { if $slot(filter_empty_window_configs) { regsub -all {[ \t]*-[^ \t]+[ \t]+{}([ \t]*\\?\n?)?} $value {\1} \ value } if $slot(filter_window_class_config) { regsub -all "(\n)\[ \t\]*-class\[ \t\]+\[^ \\\n\]*\n?" $value \ "\\1" value } if $slot(filter_window_pack_in) { regsub -all "(\n)\[ \t\]*-in\[ \t\]+\[^ \\\n\]*\n?" $value \ "\\1" value } return $value } }