-# $Id: cfgparse.tcl,v 1.15.2.3 2007/07/19 00:12:45 marko Exp $
+# $Id: cfgparse.tcl,v 1.15.2.4 2007/07/19 03:31:21 marko Exp $
#
# Copyright 2005 University of Zagreb, Croatia. All rights reserved.
#
dumpputs $method $dest "node $node \{"
foreach element $lnode {
if { "[lindex $element 0]" == "network-config" } {
- dumpputs $method $dest " network-config \{"
- foreach line [lindex $element 1] {
- dumpputs $method $dest " $line"
- }
- dumpputs $method $dest " \}"
+ dumpputs $method $dest " network-config \{"
+ foreach line [lindex $element 1] {
+ dumpputs $method $dest " $line"
+ }
+ dumpputs $method $dest " \}"
} elseif { "[lindex $element 0]" == "custom-config" } {
- dumpputs $method $dest " custom-config \{"
- foreach line [lindex $element 1] {
- if { $line != {} } {
- set str [lindex $line 0]
- if { $str == "custom-config" } {
- dumpputs $method $dest " config \{"
- foreach element [lindex $line 1] {
- dumpputs $method $dest " $element"
- }
- dumpputs $method $dest " \}"
- } else {
- dumpputs $method $dest " $line"
- }
- }
- }
- dumpputs $method $dest " \}"
+ dumpputs $method $dest " custom-config \{"
+ foreach line [lindex $element 1] {
+ if { $line != {} } {
+ set str [lindex $line 0]
+ if { $str == "custom-config" } {
+ dumpputs $method $dest " config \{"
+ foreach element [lindex $line 1] {
+ dumpputs $method $dest " $element"
+ }
+ dumpputs $method $dest " \}"
+ } else {
+ dumpputs $method $dest " $line"
+ }
+ }
+ }
+ dumpputs $method $dest " \}"
} elseif { "[lindex $element 0]" == "ipsec-config" } {
- dumpputs $method $dest " ipsec-config \{"
- foreach line [lindex $element 1] {
- if { $line != {} } {
- dumpputs $method $dest " $line"
- }
- }
- dumpputs $method $dest " \}"
+ dumpputs $method $dest " ipsec-config \{"
+ foreach line [lindex $element 1] {
+ if { $line != {} } {
+ dumpputs $method $dest " $line"
+ }
+ }
+ dumpputs $method $dest " \}"
} else {
- dumpputs $method $dest " $element"
+ dumpputs $method $dest " $element"
}
}
dumpputs $method $dest "\}"
upvar 0 $elem lelem
dumpputs $method $dest "$obj $elem \{"
foreach element $lelem {
- dumpputs $method $dest " $element"
+ dumpputs $method $dest " $element"
}
dumpputs $method $dest "\}"
dumpputs $method $dest ""
global $object
set $object {}
if {"$class" == "node"} {
- lappend node_list $object
+ lappend node_list $object
}
if {"$class" == "link"} {
- lappend link_list $object
+ lappend link_list $object
}
if {"$class" == "canvas"} {
- lappend canvas_list $object
+ lappend canvas_list $object
}
if {"$class" == "option"} {
- # for future use
- lappend prefs $object
+ # for future use
+ lappend prefs $object
}
if {"$class" == "rectangle"} {
- lappend rectangle_list $object
+ lappend rectangle_list $object
}
if {"$class" == "oval"} {
- lappend oval_list $object
+ lappend oval_list $object
}
if {"$class" == "text"} {
- lappend text_list $object
+ lappend text_list $object
}
continue
} else {
set line [concat $entry]
while {[llength $line] >= 2} {
- set field [lindex $line 0]
- if {"$field" == ""} {
- set line [lreplace $line 0 0]
- continue
- }
+ set field [lindex $line 0]
+ if {"$field" == ""} {
+ set line [lreplace $line 0 0]
+ continue
+ }
- set value [lindex $line 1]
- set line [lreplace $line 0 1]
+ set value [lindex $line 1]
+ set line [lreplace $line 0 1]
- if {"$class" == "node"} {
- switch -exact -- $field {
- type {
- lappend $object "type $value"
- }
- mirror {
- lappend $object "mirror $value"
- }
- model {
- lappend $object "model $value"
- }
- cpu {
- lappend $object "cpu {$value}"
- }
- interface-peer {
- lappend $object "interface-peer {$value}"
- }
- network-config {
- set cfg ""
- foreach zline [split $value {
+ if {"$class" == "node"} {
+ switch -exact -- $field {
+ type {
+ lappend $object "type $value"
+ }
+ mirror {
+ lappend $object "mirror $value"
+ }
+ model {
+ lappend $object "model $value"
+ }
+ cpu {
+ lappend $object "cpu {$value}"
+ }
+ interface-peer {
+ lappend $object "interface-peer {$value}"
+ }
+ network-config {
+ set cfg ""
+ foreach zline [split $value {
}] {
- if { [string index "$zline" 0] == " " } {
- set zline [string replace "$zline" 0 0]
- }
- lappend cfg $zline
- }
- set cfg [lrange $cfg 1 [expr {[llength $cfg] - 2}]]
- lappend $object "network-config {$cfg}"
- }
- custom-enabled {
- lappend $object "custom-enabled $value"
- }
- custom-command {
- lappend $object "custom-command {$value}"
- }
- custom-config {
- set cfg ""
-
- foreach zline [split $value {
+ if { [string index "$zline" 0] == " " } {
+ set zline [string replace "$zline" 0 0]
+ }
+ lappend cfg $zline
+ }
+ set cfg [lrange $cfg 1 [expr {[llength $cfg] - 2}]]
+ lappend $object "network-config {$cfg}"
+ }
+ custom-enabled {
+ lappend $object "custom-enabled $value"
+ }
+ custom-command {
+ lappend $object "custom-command {$value}"
+ }
+ custom-config {
+ set cfg ""
+
+ foreach zline [split $value {
}] {
- if { [string index "$zline" 0] == " " } {
- set zline [string replace "$zline" 0 0]
- }
- lappend cfg $zline
- }
- set cfg [lrange $cfg 1 [expr {[llength $cfg] - 2}]]
- lappend $object "custom-config {$cfg}"
- }
- ipsec-enabled {
- lappend $object "ipsec-enabled $value"
- }
- ipsec-config {
- set cfg ""
-
- foreach zline [split $value {
+ if { [string index "$zline" 0] == " " } {
+ set zline [string replace "$zline" 0 0]
+ }
+ lappend cfg $zline
+ }
+ set cfg [lrange $cfg 1 [expr {[llength $cfg] - 2}]]
+ lappend $object "custom-config {$cfg}"
+ }
+ ipsec-enabled {
+ lappend $object "ipsec-enabled $value"
+ }
+ ipsec-config {
+ set cfg ""
+
+ foreach zline [split $value {
}] {
- if { [string index "$zline" 0] == " " } {
- set zline [string replace "$zline" 0 0]
- }
- lappend cfg $zline
- }
- set cfg [lrange $cfg 1 [expr {[llength $cfg] - 2}]]
- lappend $object "ipsec-config {$cfg}"
- }
- iconcoords {
- lappend $object "iconcoords {$value}"
- }
- labelcoords {
- lappend $object "labelcoords {$value}"
- }
- canvas {
- lappend $object "canvas $value"
- }
- }
- } elseif {"$class" == "link"} {
- switch -exact -- $field {
- nodes {
- lappend $object "nodes {$value}"
- }
- mirror {
- lappend $object "mirror $value"
- }
- bandwidth {
- lappend $object "bandwidth $value"
- }
- delay {
- lappend $object "delay $value"
- }
- ber {
- lappend $object "ber $value"
- }
- duplicate {
- lappend $object "duplicate $value"
- }
- color {
- lappend $object "color $value"
- }
- width {
- lappend $object "width $value"
- }
- }
- } elseif {"$class" == "canvas"} {
- switch -exact -- $field {
- name {
- lappend $object "name {$value}"
- }
- size {
- lappend $object "size {$value}"
- }
- bkgImage {
- lappend $object "bkgImage {$value}"
- }
- }
- } elseif {"$class" == "option"} {
- switch -exact -- $field {
- interface_names {
- if { $value == "no" } {
- set showIfNames 0
- } elseif { $value == "yes" } {
- set showIfNames 1
- }
- }
- ip_addresses {
- if { $value == "no" } {
- set showIfIPaddrs 0
- } elseif { $value == "yes" } {
- set showIfIPaddrs 1
- }
- }
- ipv6_addresses {
- if { $value == "no" } {
- set showIfIPv6addrs 0
- } elseif { $value == "yes" } {
- set showIfIPv6addrs 1
- }
- }
- node_labels {
- if { $value == "no" } {
- set showNodeLabels 0
- } elseif { $value == "yes" } {
- set showNodeLabels 1
- }
- }
- link_labels {
- if { $value == "no" } {
- set showLinkLabels 0
- } elseif { $value == "yes" } {
- set showLinkLabels 1
- }
- }
- ipsec_configs {
- if { $value == "no" } {
- set showIPsecConfig 0
- } elseif { $value == "yes" } {
- set showIPsecConfig 1
- }
- }
- background_images {
- if { $value == "no" } {
- set showBkgImage 0
- } elseif { $value == "yes" } {
- set showBkgImage 1
- }
- }
- annotations {
- if { $value == "no" } {
- set showAnnotations 0
- } elseif { $value == "yes" } {
- set showAnnotations 1
- }
- }
- grid {
- if { $value == "no" } {
- set showGrid 0
- } elseif { $value == "yes" } {
- set showGrid 1
- }
- }
- }
- } elseif {"$class" == "oval" \
- || "$class" == "rectangle" \
- || "$class" == "text"} {
- switch -exact -- $field {
- iconcoords {
- lappend $object "iconcoords {$value}"
- }
- color {
- lappend $object "color $value"
- }
- label {
- lappend $object "label {$value}"
- }
- labelcolor {
- lappend $object "labelcolor $value"
- }
- size {
- lappend $object "size $value"
- }
- canvas {
- lappend $object "canvas $value"
- }
- font {
- lappend $object "font {$value}"
- }
- fontfamily {
- lappend $object "fontfamily {$value}"
- }
- fontsize {
- lappend $object "fontsize {$value}"
- }
- effects {
- lappend $object "effects {$value}"
- }
- }
- }
+ if { [string index "$zline" 0] == " " } {
+ set zline [string replace "$zline" 0 0]
+ }
+ lappend cfg $zline
+ }
+ set cfg [lrange $cfg 1 [expr {[llength $cfg] - 2}]]
+ lappend $object "ipsec-config {$cfg}"
+ }
+ iconcoords {
+ lappend $object "iconcoords {$value}"
+ }
+ labelcoords {
+ lappend $object "labelcoords {$value}"
+ }
+ canvas {
+ lappend $object "canvas $value"
+ }
+ }
+ } elseif {"$class" == "link"} {
+ switch -exact -- $field {
+ nodes {
+ lappend $object "nodes {$value}"
+ }
+ mirror {
+ lappend $object "mirror $value"
+ }
+ bandwidth {
+ lappend $object "bandwidth $value"
+ }
+ delay {
+ lappend $object "delay $value"
+ }
+ ber {
+ lappend $object "ber $value"
+ }
+ duplicate {
+ lappend $object "duplicate $value"
+ }
+ color {
+ lappend $object "color $value"
+ }
+ width {
+ lappend $object "width $value"
+ }
+ }
+ } elseif {"$class" == "canvas"} {
+ switch -exact -- $field {
+ name {
+ lappend $object "name {$value}"
+ }
+ size {
+ lappend $object "size {$value}"
+ }
+ bkgImage {
+ lappend $object "bkgImage {$value}"
+ }
+ }
+ } elseif {"$class" == "option"} {
+ switch -exact -- $field {
+ interface_names {
+ if { $value == "no" } {
+ set showIfNames 0
+ } elseif { $value == "yes" } {
+ set showIfNames 1
+ }
+ }
+ ip_addresses {
+ if { $value == "no" } {
+ set showIfIPaddrs 0
+ } elseif { $value == "yes" } {
+ set showIfIPaddrs 1
+ }
+ }
+ ipv6_addresses {
+ if { $value == "no" } {
+ set showIfIPv6addrs 0
+ } elseif { $value == "yes" } {
+ set showIfIPv6addrs 1
+ }
+ }
+ node_labels {
+ if { $value == "no" } {
+ set showNodeLabels 0
+ } elseif { $value == "yes" } {
+ set showNodeLabels 1
+ }
+ }
+ link_labels {
+ if { $value == "no" } {
+ set showLinkLabels 0
+ } elseif { $value == "yes" } {
+ set showLinkLabels 1
+ }
+ }
+ ipsec_configs {
+ if { $value == "no" } {
+ set showIPsecConfig 0
+ } elseif { $value == "yes" } {
+ set showIPsecConfig 1
+ }
+ }
+ background_images {
+ if { $value == "no" } {
+ set showBkgImage 0
+ } elseif { $value == "yes" } {
+ set showBkgImage 1
+ }
+ }
+ annotations {
+ if { $value == "no" } {
+ set showAnnotations 0
+ } elseif { $value == "yes" } {
+ set showAnnotations 1
+ }
+ }
+ grid {
+ if { $value == "no" } {
+ set showGrid 0
+ } elseif { $value == "yes" } {
+ set showGrid 1
+ }
+ }
+ }
+ } elseif {"$class" == "oval" \
+ || "$class" == "rectangle" \
+ || "$class" == "text"} {
+ switch -exact -- $field {
+ iconcoords {
+ lappend $object "iconcoords {$value}"
+ }
+ color {
+ lappend $object "color $value"
+ }
+ label {
+ lappend $object "label {$value}"
+ }
+ labelcolor {
+ lappend $object "labelcolor $value"
+ }
+ size {
+ lappend $object "size $value"
+ }
+ canvas {
+ lappend $object "canvas $value"
+ }
+ font {
+ lappend $object "font {$value}"
+ }
+ fontfamily {
+ lappend $object "fontfamily {$value}"
+ }
+ fontsize {
+ lappend $object "fontsize {$value}"
+ }
+ effects {
+ lappend $object "effects {$value}"
+ }
+ }
+ }
}
}
set class ""
-# $Id: editor.tcl,v 1.62.2.4 2007/07/19 01:30:46 marko Exp $
+# $Id: editor.tcl,v 1.62.2.5 2007/07/19 03:31:21 marko Exp $
#
# Copyright 2004, 2005 University of Zagreb, Croatia. All rights reserved.
#
set ret [backgroundImage .c $canvasBkgImage]
if { "$ret" == 2 } {
set background [.c create rectangle 0 0 $e_sizex $e_sizey \
- -fill white -tags "background"]
+ -fill white -tags "background"]
} else {
set background [.c create rectangle 0 0 $e_sizex $e_sizey \
- -tags "background"]
+ -tags "background"]
}
} else {
set background [.c create rectangle 0 0 $e_sizex $e_sizey \
if { $showAnnotations == 1 } {
foreach rect $rectangle_list {
if { [getNodeCanvas $rect] == $curcanvas } {
- drawRect $rect
+ drawRect $rect
}
}
foreach oval $oval_list {
if { [getNodeCanvas $oval] == $curcanvas } {
- drawOval $oval
+ drawOval $oval
}
}
foreach text $text_list {
if { [getNodeCanvas $text] == $curcanvas } {
- drawText $text
+ drawText $text
}
}
}
if { $showGrid } {
for { set x $e_grid } { $x < $e_sizex } { incr x $e_grid } {
if { [expr {$x % $e_grid2}] != 0 } {
- if { $zoom > 0.5 } {
- .c create line $x 1 $x $e_sizey \
- -fill gray -dash {1 7} -tags "grid"
- }
+ if { $zoom > 0.5 } {
+ .c create line $x 1 $x $e_sizey \
+ -fill gray -dash {1 7} -tags "grid"
+ }
} else {
- .c create line $x 1 $x $e_sizey -fill gray -dash {1 3} \
- -tags "grid"
+ .c create line $x 1 $x $e_sizey -fill gray -dash {1 3} \
+ -tags "grid"
}
}
for { set y $e_grid } { $y < $e_sizey } { incr y $e_grid } {
if { [expr {$y % $e_grid2}] != 0 } {
- if { $zoom > 0.5 } {
- .c create line 1 $y $e_sizex $y \
- -fill gray -dash {1 7} -tags "grid"
- }
+ if { $zoom > 0.5 } {
+ .c create line 1 $y $e_sizex $y \
+ -fill gray -dash {1 7} -tags "grid"
+ }
} else {
- .c create line 1 $y $e_sizex $y -fill gray -dash {1 3} \
- -tags "grid"
+ .c create line 1 $y $e_sizex $y -fill gray -dash {1 3} \
+ -tags "grid"
}
}
}
set ifc [ifcByPeer $pnode [getNodeMirror $node]]
if { $pcanvas != $curcanvas } {
set label [.c create text $x $y -fill blue \
- -text "[getNodeName $pnode]:$ifc
+ -text "[getNodeName $pnode]:$ifc
@[getCanvasName $pcanvas]" \
- -tags "nodelabel $node" -justify center]
+ -tags "nodelabel $node" -justify center]
} else {
set label [.c create text $x $y -fill blue \
- -text "[getNodeName $pnode]:$ifc" \
- -tags "nodelabel $node" -justify center]
+ -text "[getNodeName $pnode]:$ifc" \
+ -tags "nodelabel $node" -justify center]
}
}
if { $showNodeLabels == 0} {
set type [nodeType $peer]
if { [ lsearch {lanswitch hub} $type] != -1 } {
if { [lsearch $l2peers $peer] == -1 } {
- set l2peers [listLANnodes $peer $l2peers]
+ set l2peers [listLANnodes $peer $l2peers]
}
}
}
}
pc {
if { $showIfIPaddrs || $showIfIPv6addrs } {
- set x [expr {1.1 / $zoom}]
+ set x [expr {1.1 / $zoom}]
} else {
- set x [expr {1.4 / $zoom}]
+ set x [expr {1.4 / $zoom}]
}
set y [expr {1.5 / $zoom}]
}
host {
if { $showIfIPaddrs || $showIfIPv6addrs } {
- set x [expr {1 / $zoom}]
+ set x [expr {1 / $zoom}]
} else {
- set x [expr {1.5 / $zoom}]
+ set x [expr {1.5 / $zoom}]
}
set y [expr {1.5 / $zoom}]
}
foreach ifc [ifcList $node] {
set peer [peerByIfc $node $ifc]
if { [getNodeMirror $peer] != "" } {
- return
+ return
}
if { [lsearch $adjacent $peer] < 0 } {
- lappend adjacent $peer
+ lappend adjacent $peer
}
}
}
if { ($peer1_in_selected == -1 && $peer2_in_selected != -1) ||
($peer1_in_selected != -1 && $peer2_in_selected == -1) } {
if { [nodeType $peer2] == "pseudo" } {
- setNodeCanvas $peer2 $canvas
- if { [getNodeCanvas [getNodeMirror $peer2]] == $canvas } {
- mergeLink $link
- }
- continue
+ setNodeCanvas $peer2 $canvas
+ if { [getNodeCanvas [getNodeMirror $peer2]] == $canvas } {
+ mergeLink $link
+ }
+ continue
}
set new_nodes [splitLink $link pseudo]
set new_node1 [lindex $new_nodes 0]
.button3menu.connect.selected add command \
-label "Star" \
-command "Kb \[lindex \[selectedRealNodes\] 0\] \
- \[lrange \[selectedNodes\] 1 end\]"
+ \[lrange \[selectedNodes\] 1 end\]"
.button3menu.connect.selected add command \
-label "Cycle" -command "C \[selectedRealNodes\]"
.button3menu.connect.selected add command \
[lsearch {pseudo rj45} [nodeType $peer_node]] < 0 &&
[ifcByLogicalPeer $node $peer_node] == "" } {
.button3menu.connect.$canvas add command \
- -label [getNodeName $peer_node] \
- -command "newGUILink $node $peer_node"
+ -label [getNodeName $peer_node] \
+ -command "newGUILink $node $peer_node"
} elseif { [nodeType $peer_node] != "pseudo" } {
.button3menu.connect.$canvas add command \
- -label [getNodeName $peer_node] \
- -state disabled
+ -label [getNodeName $peer_node] \
+ -state disabled
}
}
foreach canvas $canvas_list {
if { $canvas != $curcanvas } {
.button3menu.moveto add command \
- -label [getCanvasName $canvas] \
- -command "movetoCanvas $canvas"
+ -label [getCanvasName $canvas] \
+ -command "movetoCanvas $canvas"
} else {
.button3menu.moveto add command \
- -label [getCanvasName $canvas] -state disabled
+ -label [getCanvasName $canvas] -state disabled
}
}
set cmd [[typemodel $node].shellcmd $node]
if { $cmd != "/bin/sh" && $cmd != "" } {
.button3menu.shell add command -label "$cmd" \
- -command "spawnShell $node $cmd"
+ -command "spawnShell $node $cmd"
}
.button3menu.shell add command -label "/bin/sh" \
-command "spawnShell $node /bin/sh"
foreach ifc [ifcList $node] {
set label "$ifc"
if { [getIfcIPv4addr $node $ifc] != "" } {
- set label "$label ([getIfcIPv4addr $node $ifc])"
+ set label "$label ([getIfcIPv4addr $node $ifc])"
}
if { [getIfcIPv6addr $node $ifc] != "" } {
- set label "$label ([getIfcIPv6addr $node $ifc])"
+ set label "$label ([getIfcIPv6addr $node $ifc])"
}
.button3menu.ethereal add command -label $label \
- -command "startethereal $node $ifc"
+ -command "startethereal $node $ifc"
}
.button3menu add command -label Start \
-command "[typemodel $node].start $eid $node"
nexec vimageShellServer.sh $node_id 1234 $cmd &
if { $gui_unix } {
exec xterm -sb -rightbar \
- -T "IMUNES: [getNodeName $node] (console)" \
- -e "nc $exec_host 1234" &
+ -T "IMUNES: [getNodeName $node] (console)" \
+ -e "nc $exec_host 1234" &
} else {
exec cmd /c nc $exec_host 1234 &
}
} else {
nexec xterm -sb -rightbar \
- -T "IMUNES: [getNodeName $node] (console)" \
- -e "vimage $node_id $cmd" &
+ -T "IMUNES: [getNodeName $node] (console)" \
+ -e "vimage $node_id $cmd" &
}
}
[$c find withtag "node && $node"]] > -1}]
if { $button == "ctrl" } {
if { $wasselected } {
- $c dtag $node selected
- $c delete -withtags "selectmark && $node"
+ $c dtag $node selected
+ $c delete -withtags "selectmark && $node"
}
} elseif { !$wasselected } {
$c dtag node selected
if { $y > [expr $y2-($y2-$y1)/8.0]} { set d 1 }
if {$l==1} {
- if {$u==1} {
- set resizemode lu
- } elseif {$d==1} {
- set resizemode ld
- } else {
- set resizemode l
- }
+ if {$u==1} {
+ set resizemode lu
+ } elseif {$d==1} {
+ set resizemode ld
+ } else {
+ set resizemode l
+ }
} elseif {$r==1} {
- if {$u==1} {
- set resizemode ru
- } elseif {$d==1} {
- set resizemode rd
- } else {
- set resizemode r
- }
+ if {$u==1} {
+ set resizemode ru
+ } elseif {$d==1} {
+ set resizemode rd
+ } else {
+ set resizemode r
+ }
} elseif {$u==1} {
- set resizemode u
+ set resizemode u
} elseif {$d==1} {
- set resizemode d
+ set resizemode d
} else {
- set resizemode false
+ set resizemode false
}
}
setNodeCoords $node "[expr {$x / $zoom}] [expr {$y / $zoom}]"
set dy 32
if { [lsearch {router hub lanswitch rj45} $activetool] >= 0 } {
- set dy 24
+ set dy 24
}
setNodeLabelCoords $node "[expr {$x / $zoom}] \
- [expr {$y / $zoom + $dy}]"
+ [expr {$y / $zoom + $dy}]"
drawNode $node
selectNode $c [$c find withtag "node && $node"]
set changed 1
} elseif { $activetool == "select" \
- && $curtype != "node" && $curtype != "nodelabel"} {
+ && $curtype != "node" && $curtype != "nodelabel"} {
$c config -cursor cross
set lastX $x
set lastY $y
if {$selectbox != ""} {
- # We actually shouldn't get here!
- $c delete $selectbox
- set selectbox ""
+ # We actually shouldn't get here!
+ $c delete $selectbox
+ set selectbox ""
}
} elseif { $activetool == "oval" || $activetool == "rectangle" } {
$c config -cursor cross
set lastX [lindex [$c coords $curobj] 0]
set lastY [lindex [$c coords $curobj] 1]
set newlink [$c create line $lastX $lastY $x $y \
- -fill $defLinkColor -width $defLinkWidth \
- -tags "link"]
+ -fill $defLinkColor -width $defLinkWidth \
+ -tags "link"]
}
}
$c raise $selectbox "background || link || linklabel || interface"
} else {
$c coords $selectbox \
- $lastX $lastY $x $lastY $x $y $lastX $y $lastX $lastY
+ $lastX $lastY $x $lastY $x $y $lastX $y $lastX $lastY
}
} elseif { $activetool == "select" && $curtype == "text" } {
$c move $curobj [expr {$x - $lastX}] [expr {$y - $lastY}]
set changed 1
set lastX $x
set lastY $y
- # actually we should check if curobj==bkgImage
+ # actually we should check if curobj==bkgImage
} elseif { $activetool == "oval" && \
( $curobj == $newoval || $curobj == $background || $curtype == "background" || $curtype == "grid")} {
# Draw a new oval
if {$newoval == ""} {
set newoval [$c create oval $lastX $lastY $x $y \
- -dash {10 4} -width 1 -tags "newoval"]
+ -dash {10 4} -width 1 -tags "newoval"]
$c raise $newoval "background || link || linklabel || interface"
} else {
$c coords $newoval \
- $lastX $lastY $x $y
+ $lastX $lastY $x $y
}
- # actually we should check if curobj==bkgImage
+ # actually we should check if curobj==bkgImage
} elseif { $activetool == "rectangle" && \
( $curobj == $newrect || $curobj == $background || $curtype == "background") || $curtype == "grid"} {
# Draw a new rectangle
if {$newrect == ""} {
set newrect [$c create rectangle $lastX $lastY $x $y \
- -outline blue \
- -dash {10 4} -width 1 -tags "newrect"]
+ -outline blue \
+ -dash {10 4} -width 1 -tags "newrect"]
$c raise $newrect "oval || background || link || linklabel || interface"
} else {
$c coords $newrect $lastX $lastY $x $y
set oldX2 [lindex $koord 2]
set oldY2 [lindex $koord 3]
switch -exact -- $resizemode {
- lu {
- set oldX1 $x
- set oldY1 $y
- }
- ld {
- set oldX1 $x
- set oldY2 $y
- }
- l {
- set oldX1 $x
- }
- ru {
- set oldX2 $x
- set oldY1 $y
- }
- rd {
- set oldX2 $x
- set oldY2 $y
- }
- r {
- set oldX2 $x
- }
- u {
- set oldY1 $y
- }
- d {
- set oldY2 $y
- }
+ lu {
+ set oldX1 $x
+ set oldY1 $y
+ }
+ ld {
+ set oldX1 $x
+ set oldY2 $y
+ }
+ l {
+ set oldX1 $x
+ }
+ ru {
+ set oldX2 $x
+ set oldY1 $y
+ }
+ rd {
+ set oldX2 $x
+ set oldY2 $y
+ }
+ r {
+ set oldX2 $x
+ }
+ u {
+ set oldY1 $y
+ }
+ d {
+ set oldY2 $y
+ }
}
if {$selectbox == ""} {
- set selectbox [$c create line \
- $oldX1 $oldY1 $oldX2 $oldY1 $oldX2 $oldY2 $oldX1 $oldY2 $oldX1 $oldY1 \
- -dash {10 4} -fill black -width 1 -tags "selectbox"]
- $c raise $selectbox "background || link || linklabel || interface"
+ set selectbox [$c create line \
+ $oldX1 $oldY1 $oldX2 $oldY1 $oldX2 $oldY2 $oldX1 $oldY2 $oldX1 $oldY1 \
+ -dash {10 4} -fill black -width 1 -tags "selectbox"]
+ $c raise $selectbox "background || link || linklabel || interface"
} else {
- $c coords $selectbox \
- $oldX1 $oldY1 $oldX2 $oldY1 $oldX2 $oldY2 $oldX1 $oldY2 $oldX1 $oldY1
+ $c coords $selectbox \
+ $oldX1 $oldY1 $oldX2 $oldY1 $oldX2 $oldY2 $oldX1 $oldY2 $oldX1 $oldY1
}
}
} else {
set node [lindex [$c gettags $img] 1]
set img [$c find withtag "selectmark && $node"]
if {$curtype == "oval" || $curtype == "rectangle"} {
- $c move $img [expr {($x - $lastX) / 2}] [expr {($y - $lastY) / 2}]
+ $c move $img [expr {($x - $lastX) / 2}] [expr {($y - $lastY) / 2}]
} else {
- $c move $img [expr {$x - $lastX}] [expr {$y - $lastY}]
- set img [$c find withtag "node && $node"]
- $c move $img [expr {$x - $lastX}] [expr {$y - $lastY}]
- set img [$c find withtag "nodelabel && $node"]
- $c move $img [expr {$x - $lastX}] [expr {$y - $lastY}]
- $c addtag need_redraw withtag "link && $node"
+ $c move $img [expr {$x - $lastX}] [expr {$y - $lastY}]
+ set img [$c find withtag "node && $node"]
+ $c move $img [expr {$x - $lastX}] [expr {$y - $lastY}]
+ set img [$c find withtag "nodelabel && $node"]
+ $c move $img [expr {$x - $lastX}] [expr {$y - $lastY}]
+ $c addtag need_redraw withtag "link && $node"
}
}
foreach link [$c find withtag "link && need_redraw"] {
set destobj ""
foreach obj [$c find overlapping $x $y $x $y] {
if {[lindex [$c gettags $obj] 0] == "node"} {
- set destobj $obj
- break
+ set destobj $obj
+ break
}
}
if {$destobj != "" && $curobj != "" && $destobj != $curobj} {
set lnode1 [lindex [$c gettags $curobj] 1]
set lnode2 [lindex [$c gettags $destobj] 1]
if { [ifcByLogicalPeer $lnode1 $lnode2] == "" } {
- set link [newLink $lnode1 $lnode2]
- if { $link != "" } {
- drawLink $link
- redrawLink $link
- updateLinkLabel $link
- set changed 1
- }
+ set link [newLink $lnode1 $lnode2]
+ if { $link != "" } {
+ drawLink $link
+ redrawLink $link
+ updateLinkLabel $link
+ set changed 1
+ }
}
}
} elseif {$activetool == "rectangle" } {
set x [expr {[lindex $coords 0] / $zoom}]
set y [expr {[lindex $coords 1] / $zoom}]
if { $autorearrange_enabled == 0} {
- set dx [expr {(int($x / $grid + 0.5) * $grid - $x) * $zoom}]
- set dy [expr {(int($y / $grid + 0.5) * $grid - $y) * $zoom}]
- $c move $img $dx $dy
- set coords [$c coords $img]
- set x [expr {[lindex $coords 0] / $zoom}]
- set y [expr {[lindex $coords 1] / $zoom}]
+ set dx [expr {(int($x / $grid + 0.5) * $grid - $x) * $zoom}]
+ set dy [expr {(int($y / $grid + 0.5) * $grid - $y) * $zoom}]
+ $c move $img $dx $dy
+ set coords [$c coords $img]
+ set x [expr {[lindex $coords 0] / $zoom}]
+ set y [expr {[lindex $coords 1] / $zoom}]
} else {
- set dx 0
- set dy 0
+ set dx 0
+ set dy 0
}
setNodeCoords $node "$x $y"
if {$x < 0 || $y < 0 || $x > $sizex || $y > $sizey} {
- set regular false
+ set regular false
}
if { [lindex [$c gettags $node] 0] == "oval" ||
- [lindex [$c gettags $node] 0] == "rectangle" } {
- set bbox [$c bbox "selectmark && $node"]
- setNodeCoords $node "$bbox"
- set redrawNeeded 1
+ [lindex [$c gettags $node] 0] == "rectangle" } {
+ set bbox [$c bbox "selectmark && $node"]
+ setNodeCoords $node "$bbox"
+ set redrawNeeded 1
}
if {[$c find withtag "nodelabel && $node"] != "" } {
- $c move "nodelabel && $node" $dx $dy
- set coords [$c coords "nodelabel && $node"]
- set x [expr {[lindex $coords 0] / $zoom}]
- set y [expr {[lindex $coords 1] / $zoom}]
- setNodeLabelCoords $node "$x $y"
- if {$x < 0 || $y < 0 || $x > $sizex || $y > $sizey} {
- set regular false
- }
+ $c move "nodelabel && $node" $dx $dy
+ set coords [$c coords "nodelabel && $node"]
+ set x [expr {[lindex $coords 0] / $zoom}]
+ set y [expr {[lindex $coords 1] / $zoom}]
+ setNodeLabelCoords $node "$x $y"
+ if {$x < 0 || $y < 0 || $x > $sizex || $y > $sizey} {
+ set regular false
+ }
}
$c move "selectmark && $node" $dx $dy
$c addtag need_redraw withtag "link && $node"
} ;# end of: foreach img selected
if {$regular == "true"} {
foreach link [$c find withtag "link && need_redraw"] {
- redrawLink [lindex [$c gettags $link] 1]
+ redrawLink [lindex [$c gettags $link] 1]
}
} else {
.c config -cursor watch
loadCfg $undolog($undolevel)
redrawAll
if {$activetool == "select" } {
- selectNodes $selected
+ selectNodes $selected
}
set changed 0
}
if { $resizemode == "false" } {
set enclosed {}
foreach obj [$c find enclosed $x $y $x1 $y1] {
- set tags [$c gettags $obj]
- if {[lindex $tags 0] == "node" && [lsearch $tags selected] == -1} {
- lappend enclosed $obj
- }
- if {[lindex $tags 0] == "oval" && [lsearch $tags selected] == -1} {
- lappend enclosed $obj
- }
- if {[lindex $tags 0] == "rectangle" && [lsearch $tags selected] == -1} {
- lappend enclosed $obj
- }
- if {[lindex $tags 0] == "text" && [lsearch $tags selected] == -1} {
- lappend enclosed $obj
- }
+ set tags [$c gettags $obj]
+ if {[lindex $tags 0] == "node" && [lsearch $tags selected] == -1} {
+ lappend enclosed $obj
+ }
+ if {[lindex $tags 0] == "oval" && [lsearch $tags selected] == -1} {
+ lappend enclosed $obj
+ }
+ if {[lindex $tags 0] == "rectangle" && [lsearch $tags selected] == -1} {
+ lappend enclosed $obj
+ }
+ if {[lindex $tags 0] == "text" && [lsearch $tags selected] == -1} {
+ lappend enclosed $obj
+ }
}
foreach obj $enclosed {
- selectNode $c $obj
+ selectNode $c $obj
}
} else {
setNodeCoords $resizeobj "$x $y $x1 $y1"
frame $wi.model -borderwidth 4
label $wi.model.label -text "Model:"
if { $oper_mode == "edit" } {
- eval tk_optionMenu $wi.model.menu router_model \
- $supp_router_models
+ eval tk_optionMenu $wi.model.menu router_model \
+ $supp_router_models
} else {
- tk_optionMenu $wi.model.menu router_model $model
+ tk_optionMenu $wi.model.menu router_model $model
}
pack $wi.model.menu $wi.model.label -side right -padx 0 -pady 0
pack $wi.model -side top
if { $type != "rj45" } {
foreach ifc [lsort -ascii [ifcList $target]] {
- labelframe $wi.if$ifc -padx 4 -pady 4
- frame $wi.if$ifc.label
- label $wi.if$ifc.label.txt -text "Interface $ifc:"
- pack $wi.if$ifc.label.txt -side left -anchor w
- if {[[typemodel $target].layer] == "NETWORK"} {
- global ifoper$ifc
- set ifoper$ifc [getIfcOperState $target $ifc]
- radiobutton $wi.if$ifc.label.up -text "up" \
- -variable ifoper$ifc -value up
- radiobutton $wi.if$ifc.label.down -text "down" \
- -variable ifoper$ifc -value down
- label $wi.if$ifc.label.mtul -text "MTU" \
- -anchor e -width 5
- spinbox $wi.if$ifc.label.mtuv -bg white -width 4 \
- -validate focus -invcmd "focusAndFlash %W"
- $wi.if$ifc.label.mtuv insert 0 \
- [getIfcMTU $target $ifc]
- if {![string first eth $ifc]} {
- $wi.if$ifc.label.mtuv configure \
- -from 256 -to 1500 -increment 2 \
- -vcmd {checkIntRange %P 256 1500}
- } else {
- $wi.if$ifc.label.mtuv configure \
- -from 256 -to 2044 -increment 2 \
- -vcmd {checkIntRange %P 256 2044}
- }
- pack $wi.if$ifc.label.up $wi.if$ifc.label.down \
- $wi.if$ifc.label.mtul $wi.if$ifc.label.mtuv \
- -side left -anchor w
- }
- pack $wi.if$ifc.label -side top -anchor w
- frame $wi.if$ifc.tab -width 10
- frame $wi.if$ifc.cfg
-
- #
- # Queue config
- #
- global ifqdisc$ifc ifqdrop$ifc
- set ifqdisc$ifc [getIfcQDisc $target $ifc]
- set ifqdrop$ifc [getIfcQDrop $target $ifc]
- frame $wi.if$ifc.cfg.q
- label $wi.if$ifc.cfg.q.l1 -text "Queue" -anchor w
- tk_optionMenu $wi.if$ifc.cfg.q.disc ifqdisc$ifc \
- FIFO DRR WFQ
- tk_optionMenu $wi.if$ifc.cfg.q.drop ifqdrop$ifc \
- drop-tail drop-head
- label $wi.if$ifc.cfg.q.l2 -text "len" \
- -anchor e -width 3
- spinbox $wi.if$ifc.cfg.q.len -bg white -width 4 \
- -validate focus -invcmd "focusAndFlash %W"
- $wi.if$ifc.cfg.q.len insert 0 [getIfcQLen $target $ifc]
- $wi.if$ifc.cfg.q.len configure \
- -from 5 -to 4096 -increment 1 \
- -vcmd {checkIntRange %P 5 4096}
- pack $wi.if$ifc.cfg.q.l1 $wi.if$ifc.cfg.q.disc \
- $wi.if$ifc.cfg.q.drop -side left -anchor w
- pack $wi.if$ifc.cfg.q.l2 $wi.if$ifc.cfg.q.len \
- -side left -anchor e
- pack $wi.if$ifc.cfg.q -side top -anchor w
-
- if {[lsearch {router pc host} $type] >= 0} {
- #
- # IPv4 address
- #
- frame $wi.if$ifc.cfg.ipv4
- label $wi.if$ifc.cfg.ipv4.addrl -text "IPv4 address" \
- -anchor w
- entry $wi.if$ifc.cfg.ipv4.addrv -bg white -width 30 \
- -validate focus -invcmd "focusAndFlash %W"
- $wi.if$ifc.cfg.ipv4.addrv insert 0 \
- [getIfcIPv4addr $target $ifc]
- $wi.if$ifc.cfg.ipv4.addrv configure \
- -vcmd {checkIPv4Net %P}
- pack $wi.if$ifc.cfg.ipv4.addrl \
- $wi.if$ifc.cfg.ipv4.addrv -side left
- pack $wi.if$ifc.cfg.ipv4 -side top -anchor w
-
- #
- # IPv6 address
- #
- frame $wi.if$ifc.cfg.ipv6
- label $wi.if$ifc.cfg.ipv6.addrl -text "IPv6 address" \
- -anchor w
- entry $wi.if$ifc.cfg.ipv6.addrv -bg white -width 30 \
- -validate focus -invcmd "focusAndFlash %W"
- $wi.if$ifc.cfg.ipv6.addrv insert 0 \
- [getIfcIPv6addr $target $ifc]
- $wi.if$ifc.cfg.ipv6.addrv configure -vcmd {checkIPv6Net %P}
- pack $wi.if$ifc.cfg.ipv6.addrl \
- $wi.if$ifc.cfg.ipv6.addrv -side left
- pack $wi.if$ifc.cfg.ipv6 -side top -anchor w
- }
- pack $wi.if$ifc.tab $wi.if$ifc.cfg -side left
- pack $wi.if$ifc -side top -anchor w -fill both
+ labelframe $wi.if$ifc -padx 4 -pady 4
+ frame $wi.if$ifc.label
+ label $wi.if$ifc.label.txt -text "Interface $ifc:"
+ pack $wi.if$ifc.label.txt -side left -anchor w
+ if {[[typemodel $target].layer] == "NETWORK"} {
+ global ifoper$ifc
+ set ifoper$ifc [getIfcOperState $target $ifc]
+ radiobutton $wi.if$ifc.label.up -text "up" \
+ -variable ifoper$ifc -value up
+ radiobutton $wi.if$ifc.label.down -text "down" \
+ -variable ifoper$ifc -value down
+ label $wi.if$ifc.label.mtul -text "MTU" \
+ -anchor e -width 5
+ spinbox $wi.if$ifc.label.mtuv -bg white -width 4 \
+ -validate focus -invcmd "focusAndFlash %W"
+ $wi.if$ifc.label.mtuv insert 0 \
+ [getIfcMTU $target $ifc]
+ if {![string first eth $ifc]} {
+ $wi.if$ifc.label.mtuv configure \
+ -from 256 -to 1500 -increment 2 \
+ -vcmd {checkIntRange %P 256 1500}
+ } else {
+ $wi.if$ifc.label.mtuv configure \
+ -from 256 -to 2044 -increment 2 \
+ -vcmd {checkIntRange %P 256 2044}
+ }
+ pack $wi.if$ifc.label.up $wi.if$ifc.label.down \
+ $wi.if$ifc.label.mtul $wi.if$ifc.label.mtuv \
+ -side left -anchor w
+ }
+ pack $wi.if$ifc.label -side top -anchor w
+ frame $wi.if$ifc.tab -width 10
+ frame $wi.if$ifc.cfg
+
+ #
+ # Queue config
+ #
+ global ifqdisc$ifc ifqdrop$ifc
+ set ifqdisc$ifc [getIfcQDisc $target $ifc]
+ set ifqdrop$ifc [getIfcQDrop $target $ifc]
+ frame $wi.if$ifc.cfg.q
+ label $wi.if$ifc.cfg.q.l1 -text "Queue" -anchor w
+ tk_optionMenu $wi.if$ifc.cfg.q.disc ifqdisc$ifc \
+ FIFO DRR WFQ
+ tk_optionMenu $wi.if$ifc.cfg.q.drop ifqdrop$ifc \
+ drop-tail drop-head
+ label $wi.if$ifc.cfg.q.l2 -text "len" \
+ -anchor e -width 3
+ spinbox $wi.if$ifc.cfg.q.len -bg white -width 4 \
+ -validate focus -invcmd "focusAndFlash %W"
+ $wi.if$ifc.cfg.q.len insert 0 [getIfcQLen $target $ifc]
+ $wi.if$ifc.cfg.q.len configure \
+ -from 5 -to 4096 -increment 1 \
+ -vcmd {checkIntRange %P 5 4096}
+ pack $wi.if$ifc.cfg.q.l1 $wi.if$ifc.cfg.q.disc \
+ $wi.if$ifc.cfg.q.drop -side left -anchor w
+ pack $wi.if$ifc.cfg.q.l2 $wi.if$ifc.cfg.q.len \
+ -side left -anchor e
+ pack $wi.if$ifc.cfg.q -side top -anchor w
+
+ if {[lsearch {router pc host} $type] >= 0} {
+ #
+ # IPv4 address
+ #
+ frame $wi.if$ifc.cfg.ipv4
+ label $wi.if$ifc.cfg.ipv4.addrl -text "IPv4 address" \
+ -anchor w
+ entry $wi.if$ifc.cfg.ipv4.addrv -bg white -width 30 \
+ -validate focus -invcmd "focusAndFlash %W"
+ $wi.if$ifc.cfg.ipv4.addrv insert 0 \
+ [getIfcIPv4addr $target $ifc]
+ $wi.if$ifc.cfg.ipv4.addrv configure \
+ -vcmd {checkIPv4Net %P}
+ pack $wi.if$ifc.cfg.ipv4.addrl \
+ $wi.if$ifc.cfg.ipv4.addrv -side left
+ pack $wi.if$ifc.cfg.ipv4 -side top -anchor w
+
+ #
+ # IPv6 address
+ #
+ frame $wi.if$ifc.cfg.ipv6
+ label $wi.if$ifc.cfg.ipv6.addrl -text "IPv6 address" \
+ -anchor w
+ entry $wi.if$ifc.cfg.ipv6.addrv -bg white -width 30 \
+ -validate focus -invcmd "focusAndFlash %W"
+ $wi.if$ifc.cfg.ipv6.addrv insert 0 \
+ [getIfcIPv6addr $target $ifc]
+ $wi.if$ifc.cfg.ipv6.addrv configure -vcmd {checkIPv6Net %P}
+ pack $wi.if$ifc.cfg.ipv6.addrl \
+ $wi.if$ifc.cfg.ipv6.addrv -side left
+ pack $wi.if$ifc.cfg.ipv6 -side top -anchor w
+ }
+ pack $wi.if$ifc.tab $wi.if$ifc.cfg -side left
+ pack $wi.if$ifc -side top -anchor w -fill both
}
}
# Static routes
#
set routes [concat [getStatIPv4routes $target] \
- [getStatIPv6routes $target]]
+ [getStatIPv6routes $target]]
labelframe $wi.statrt -padx 4 -pady 4
label $wi.statrt.label -text "Static routes:"
pack $wi.statrt.label -side top -anchor w
frame $wi.statrt.cfg
set h [expr {[llength $routes] + 1}]
if { $h < 2 } {
- set h 2
+ set h 2
}
text $wi.statrt.cfg.text -font arial -bg white \
- -width 42 -height $h -takefocus 0
+ -width 42 -height $h -takefocus 0
foreach route $routes {
- $wi.statrt.cfg.text insert end "$route
+ $wi.statrt.cfg.text insert end "$route
"
}
pack $wi.statrt.cfg.text -expand yes
pack $wi.custom.label.txt -side left -anchor w
set customEnabled [getCustomEnabled $target]
radiobutton $wi.custom.label.enabled -text "enabled" \
- -variable customEnabled -value true
+ -variable customEnabled -value true
radiobutton $wi.custom.label.disabled -text "disabled" \
- -variable customEnabled -value false
+ -variable customEnabled -value false
pack $wi.custom.label.enabled $wi.custom.label.disabled \
- -side left -anchor w
+ -side left -anchor w
pack $wi.custom.label -side top -anchor w
frame $wi.custom.cfg
button $wi.custom.cfg.generate -text "Generate" \
- -command "cfgGenerate $target"
+ -command "cfgGenerate $target"
button $wi.custom.cfg.edit -text "Edit" \
- -command "editStartupCfg $target 0"
+ -command "editStartupCfg $target 0"
button $wi.custom.cfg.clear -text "Clear" \
- -command "setCustomConfig $target {} {} {} 0"
+ -command "setCustomConfig $target {} {} {} 0"
pack $wi.custom.cfg.generate $wi.custom.cfg.edit \
- $wi.custom.cfg.clear -side left
+ $wi.custom.cfg.clear -side left
pack $wi.custom.label -side top -anchor w
pack $wi.custom.cfg -side top
global ipsecEnabled
global showIPsecConfig
if { $showIPsecConfig == 1 } {
- labelframe $wi.ipsec -padx 4 -pady 4
- frame $wi.ipsec.label
- label $wi.ipsec.label.txt -text "Manual IPsec configuration:"
- pack $wi.ipsec.label.txt -side left -anchor w
- set ipsecEnabled [getIpsecEnabled $target]
- radiobutton $wi.ipsec.label.enabled -text "enabled" \
- -variable ipsecEnabled -value true
- radiobutton $wi.ipsec.label.disabled -text "disabled" \
- -variable ipsecEnabled -value false
- pack $wi.ipsec.label.enabled $wi.ipsec.label.disabled \
- -side left -anchor w
- pack $wi.ipsec.label -side top -anchor w
- frame $wi.ipsec.cfg
- set delete "0"
- set view "0"
- button $wi.ipsec.cfg.add -text "Add SA/SP" \
- -command "viewIpsecCfg $target $delete $view"
- set delete "0"
- set view "1"
- button $wi.ipsec.cfg.view -text "Edit SAs/SPs" \
- -command "viewIpsecCfg $target $delete $view"
- pack $wi.ipsec.cfg.add $wi.ipsec.cfg.view -side left
- pack $wi.ipsec.label -side top -anchor w
- pack $wi.ipsec.cfg -side top
- pack $wi.ipsec -side top -anchor w -fill both
- }
-
+ labelframe $wi.ipsec -padx 4 -pady 4
+ frame $wi.ipsec.label
+ label $wi.ipsec.label.txt -text "Manual IPsec configuration:"
+ pack $wi.ipsec.label.txt -side left -anchor w
+ set ipsecEnabled [getIpsecEnabled $target]
+ radiobutton $wi.ipsec.label.enabled -text "enabled" \
+ -variable ipsecEnabled -value true
+ radiobutton $wi.ipsec.label.disabled -text "disabled" \
+ -variable ipsecEnabled -value false
+ pack $wi.ipsec.label.enabled $wi.ipsec.label.disabled \
+ -side left -anchor w
+ pack $wi.ipsec.label -side top -anchor w
+ frame $wi.ipsec.cfg
+ set delete "0"
+ set view "0"
+ button $wi.ipsec.cfg.add -text "Add SA/SP" \
+ -command "viewIpsecCfg $target $delete $view"
+ set delete "0"
+ set view "1"
+ button $wi.ipsec.cfg.view -text "Edit SAs/SPs" \
+ -command "viewIpsecCfg $target $delete $view"
+ pack $wi.ipsec.cfg.add $wi.ipsec.cfg.view -side left
+ pack $wi.ipsec.label -side top -anchor w
+ pack $wi.ipsec.cfg -side top
+ pack $wi.ipsec -side top -anchor w -fill both
+ }
+
#
# CPU scheduling parameters
#
labelframe $wi.cpu -padx 4 -pady 4
label $wi.cpu.minl -text "CPU min%" -anchor w
spinbox $wi.cpu.mine -bg white -width 3 \
- -validate focus -invcmd "focusAndFlash %W"
+ -validate focus -invcmd "focusAndFlash %W"
$wi.cpu.mine insert 0 [lindex \
- [lsearch -inline [getNodeCPUConf $target] {min *}] 1]
+ [lsearch -inline [getNodeCPUConf $target] {min *}] 1]
$wi.cpu.mine configure \
- -vcmd {checkIntRange %P 1 90} \
- -from 0 -to 90 -increment 1
+ -vcmd {checkIntRange %P 1 90} \
+ -from 0 -to 90 -increment 1
label $wi.cpu.maxl -text " max%" -anchor w
spinbox $wi.cpu.maxe -bg white -width 3 \
- -validate focus -invcmd "focusAndFlash %W"
+ -validate focus -invcmd "focusAndFlash %W"
set cpumax [lindex \
- [lsearch -inline [getNodeCPUConf $target] {max *}] 1]
+ [lsearch -inline [getNodeCPUConf $target] {max *}] 1]
if { $cpumax == "" } {
- set cpumax 100
+ set cpumax 100
}
$wi.cpu.maxe insert 0 $cpumax
$wi.cpu.maxe configure \
- -vcmd {checkIntRange %P 1 100} \
- -from 1 -to 100 -increment 1
+ -vcmd {checkIntRange %P 1 100} \
+ -from 1 -to 100 -increment 1
label $wi.cpu.weightl -text " weight" -anchor w
spinbox $wi.cpu.weighte -bg white -width 2 \
- -validate focus -invcmd "focusAndFlash %W"
+ -validate focus -invcmd "focusAndFlash %W"
$wi.cpu.weighte insert 0 [lindex \
- [lsearch -inline [getNodeCPUConf $target] {weight *}] 1]
+ [lsearch -inline [getNodeCPUConf $target] {weight *}] 1]
$wi.cpu.weighte configure \
- -vcmd {checkIntRange %P 1 10} \
- -from 1 -to 10 -increment 1
+ -vcmd {checkIntRange %P 1 10} \
+ -from 1 -to 10 -increment 1
pack $wi.cpu.minl $wi.cpu.mine \
- $wi.cpu.maxl $wi.cpu.maxe \
- $wi.cpu.weightl $wi.cpu.weighte -side left
+ $wi.cpu.maxl $wi.cpu.maxe \
+ $wi.cpu.weightl $wi.cpu.weighte -side left
pack $wi.cpu -side top -anchor w -fill both
}
}
# INPUTS
# * node_id -- node id
# * deleted -- if deleted is set to 1, editStartupCfg
-# has been invoked after deleting custom-config
-# with specified custom-config-id.
+# has been invoked after deleting custom-config
+# with specified custom-config-id.
#****
proc editStartupCfg { node deleted } {
global viewcustomid
if { $customidlist == "" } {
set warning "Custom config list is empty."
tk_messageBox -message $warning -type ok -icon warning \
- -title "Custom configuration warning"
+ -title "Custom configuration warning"
} else {
set w .cfgeditor
catch {destroy $w}
label $w.custom.viewid.label -text "View custom-config:"
pack $w.custom.viewid.label -side left -anchor w
eval {tk_optionMenu $w.custom.viewid.optmenu viewcustomid} \
- $customidlist
+ $customidlist
pack $w.custom.viewid.label $w.custom.viewid.optmenu \
- -side left -anchor w
+ -side left -anchor w
pack $w.custom.viewid -side top -anchor w
button $w.custom.viewid.button -text View \
- -command "editStartupCfg $node 0"
+ -command "editStartupCfg $node 0"
pack $w.custom.viewid.button -side right
foreach element $customCfgList {
- set cid \
- [lindex [lsearch -inline $element "custom-config-id *"] 1]
- if { $viewcustomid == $cid } {
- set customCfg $element
- }
+ set cid \
+ [lindex [lsearch -inline $element "custom-config-id *"] 1]
+ if { $viewcustomid == $cid } {
+ set customCfg $element
+ }
}
}
#
foreach ifc [ifcList $target] {
if { [nodeType [peerByIfc $target $ifc]] != "rj45" && \
- [nodeType $target] != "rj45" } {
- global ifqdisc$ifc ifqdrop$ifc
- set qdisc [subst $[subst ifqdisc$ifc]]
- set oldqdisc [getIfcQDisc $target $ifc]
- if { $qdisc != $oldqdisc } {
- setIfcQDisc $target $ifc $qdisc
- set changed 1
- }
- set qdrop [subst $[subst ifqdrop$ifc]]
- set oldqdrop [getIfcQDrop $target $ifc]
- if { $qdrop != $oldqdrop } {
- setIfcQDrop $target $ifc $qdrop
- set changed 1
- }
- set len [$wi.if$ifc.cfg.q.len get]
- set oldlen [getIfcQLen $target $ifc]
- if { $len != $oldlen } {
- setIfcQLen $target $ifc $len
- set changed 1
- }
+ [nodeType $target] != "rj45" } {
+ global ifqdisc$ifc ifqdrop$ifc
+ set qdisc [subst $[subst ifqdisc$ifc]]
+ set oldqdisc [getIfcQDisc $target $ifc]
+ if { $qdisc != $oldqdisc } {
+ setIfcQDisc $target $ifc $qdisc
+ set changed 1
+ }
+ set qdrop [subst $[subst ifqdrop$ifc]]
+ set oldqdrop [getIfcQDrop $target $ifc]
+ if { $qdrop != $oldqdrop } {
+ setIfcQDrop $target $ifc $qdrop
+ set changed 1
+ }
+ set len [$wi.if$ifc.cfg.q.len get]
+ set oldlen [getIfcQLen $target $ifc]
+ if { $len != $oldlen } {
+ setIfcQLen $target $ifc $len
+ set changed 1
+ }
}
}
}
if { [checkIPv4Net $dst] == 1 } {
if { [checkIPv4Addr $gw] == 1 } {
- lappend newIPv4statrtes \
- [string trim "$dst $gw $metric"]
+ lappend newIPv4statrtes \
+ [string trim "$dst $gw $metric"]
} else {
- break
+ break
}
} elseif { [checkIPv6Net $dst] == 1 } {
if { [checkIPv6Addr $gw] == 1 } {
- lappend newIPv6statrtes \
- [string trim "$dst $gw $metric"]
+ lappend newIPv6statrtes \
+ [string trim "$dst $gw $metric"]
} else {
- break
+ break
}
} else {
break
set changed 1
}
- if { $showIPsecConfig == 0 } {
- set ipsecEnabled 0
- }
+ if { $showIPsecConfig == 0 } {
+ set ipsecEnabled 0
+ }
set oldipsecenabled [getIpsecEnabled $target]
if {$oldipsecenabled != $ipsecEnabled} {
setIpsecEnabled $target $ipsecEnabled
if { $bw != [getLinkBandwidth $target] } {
setLinkBandwidth $target [$wi.bandwidth.value get]
if { $mirror != "" } {
- setLinkBandwidth $mirror [$wi.bandwidth.value get]
+ setLinkBandwidth $mirror [$wi.bandwidth.value get]
}
set changed 1
}
if { $dly != [getLinkDelay $target] } {
setLinkDelay $target [$wi.delay.value get]
if { $mirror != "" } {
- setLinkDelay $mirror [$wi.delay.value get]
+ setLinkDelay $mirror [$wi.delay.value get]
}
set changed 1
}
if { $ber != [getLinkBER $target] } {
setLinkBER $target [$wi.ber.value get]
if { $mirror != "" } {
- setLinkBER $mirror [$wi.ber.value get]
+ setLinkBER $mirror [$wi.ber.value get]
}
set changed 1
}
if { $dup != [getLinkDup $target] } {
setLinkDup $target [$wi.dup.value get]
if { $mirror != "" } {
- setLinkDup $mirror [$wi.dup.value get]
+ setLinkDup $mirror [$wi.dup.value get]
}
set changed 1
}
if { $link_color != [getLinkColor $target] } {
setLinkColor $target $link_color
if { $mirror != "" } {
- setLinkColor $mirror $link_color
+ setLinkColor $mirror $link_color
}
set changed 1
}
if { $width != [getLinkWidth $target] } {
setLinkWidth $target [$wi.width.value get]
if { $mirror != "" } {
- setLinkWidth $mirror [$wi.width.value get]
+ setLinkWidth $mirror [$wi.width.value get]
}
set changed 1
}
for { set x $step } { $x <= [expr {$sizex - $step}] } { incr x $step } {
for { set y $step } { $y <= [expr {$sizey - $step}] } { incr y $step } {
if { [llength $node_objects] == 0 } {
- set changed 1
- updateUndoLog
- redrawAll
- return
+ set changed 1
+ updateUndoLog
+ redrawAll
+ return
}
set node [lindex [.c gettags [lindex $node_objects 0]] 1]
set node_objects [lreplace $node_objects 0 0]
setNodeCoords $node "$x $y"
set dy 32
if { [lsearch {router hub lanswitch rj45} \
- [nodeType $node]] >= 0 } {
- set dy 24
+ [nodeType $node]] >= 0 } {
+ set dy 24
}
setNodeLabelCoords $node "$x [expr {$y + $dy}]"
}
} else {
set dt [expr {($ntime - $otime) * 0.001}]
if { $dt > 0.2 } {
- set dt 0.2
+ set dt 0.2
}
set otime $ntime
}
set y_t($node) $y
if { $x > 0 } {
- set fx [expr {1000 / ($x * $x + 100)}]
+ set fx [expr {1000 / ($x * $x + 100)}]
} else {
- set fx 10
+ set fx 10
}
set dx [expr {$sizex - $x}]
if { $dx > 0 } {
- set fx [expr {$fx - 1000 / ($dx * $dx + 100)}]
+ set fx [expr {$fx - 1000 / ($dx * $dx + 100)}]
} else {
- set fx [expr {$fx - 10}]
+ set fx [expr {$fx - 10}]
}
if { $y > 0 } {
- set fy [expr {1000 / ($y * $y + 100)}]
+ set fy [expr {1000 / ($y * $y + 100)}]
} else {
- set fy 10
+ set fy 10
}
set dy [expr {$sizey - $y}]
if { $dy > 0 } {
- set fy [expr {$fy - 1000 / ($dy * $dy + 100)}]
+ set fy [expr {$fy - 1000 / ($dy * $dy + 100)}]
} else {
- set fy [expr {$fy - 10}]
+ set fy [expr {$fy - 10}]
}
set fx_t($node) $fx
set fy_t($node) $fy
set x $x_t($node)
set y $y_t($node)
foreach other_obj $peer_objects {
- set other [lindex [.c gettags $other_obj] 1]
- set o_x $x_t($other)
- set o_y $y_t($other)
- set dx [expr {$x - $o_x}]
- set dy [expr {$y - $o_y}]
- set d [expr {hypot($dx, $dy)}]
- set d2 [expr {$d * $d}]
- set p_fx [expr {1000.0 * $dx / ($d2 * $d + 100)}]
- set p_fy [expr {1000.0 * $dy / ($d2 * $d + 100)}]
- if {[linkByPeers $node $other] != ""} {
- set p_fx [expr {$p_fx - $dx * $d2 * .0000000005}]
- set p_fy [expr {$p_fy - $dy * $d2 * .0000000005}]
- }
- set fx_t($node) [expr {$fx_t($node) + $p_fx}]
- set fy_t($node) [expr {$fy_t($node) + $p_fy}]
- set fx_t($other) [expr {$fx_t($other) - $p_fx}]
- set fy_t($other) [expr {$fy_t($other) - $p_fy}]
+ set other [lindex [.c gettags $other_obj] 1]
+ set o_x $x_t($other)
+ set o_y $y_t($other)
+ set dx [expr {$x - $o_x}]
+ set dy [expr {$y - $o_y}]
+ set d [expr {hypot($dx, $dy)}]
+ set d2 [expr {$d * $d}]
+ set p_fx [expr {1000.0 * $dx / ($d2 * $d + 100)}]
+ set p_fy [expr {1000.0 * $dy / ($d2 * $d + 100)}]
+ if {[linkByPeers $node $other] != ""} {
+ set p_fx [expr {$p_fx - $dx * $d2 * .0000000005}]
+ set p_fy [expr {$p_fy - $dy * $d2 * .0000000005}]
+ }
+ set fx_t($node) [expr {$fx_t($node) + $p_fx}]
+ set fy_t($node) [expr {$fy_t($node) + $p_fy}]
+ set fx_t($other) [expr {$fx_t($other) - $p_fx}]
+ set fy_t($other) [expr {$fy_t($other) - $p_fy}]
}
foreach link $link_list {
- set nodes [linkPeers $link]
- if { [getNodeCanvas [lindex $nodes 0]] != $curcanvas ||
- [getNodeCanvas [lindex $nodes 1]] != $curcanvas ||
- [getLinkMirror $link] != "" } {
- continue
- }
- set peers [linkPeers $link]
- set coords0 [getNodeCoords [lindex $peers 0]]
- set coords1 [getNodeCoords [lindex $peers 1]]
- set o_x \
- [expr {([lindex $coords0 0] + [lindex $coords1 0]) * .5}]
- set o_y \
- [expr {([lindex $coords0 1] + [lindex $coords1 1]) * .5}]
- set dx [expr {$x - $o_x}]
- set dy [expr {$y - $o_y}]
- set d [expr {hypot($dx, $dy)}]
- set d2 [expr {$d * $d}]
- set fx_t($node) \
- [expr {$fx_t($node) + 500.0 * $dx / ($d2 * $d + 100)}]
- set fy_t($node) \
- [expr {$fy_t($node) + 500.0 * $dy / ($d2 * $d + 100)}]
+ set nodes [linkPeers $link]
+ if { [getNodeCanvas [lindex $nodes 0]] != $curcanvas ||
+ [getNodeCanvas [lindex $nodes 1]] != $curcanvas ||
+ [getLinkMirror $link] != "" } {
+ continue
+ }
+ set peers [linkPeers $link]
+ set coords0 [getNodeCoords [lindex $peers 0]]
+ set coords1 [getNodeCoords [lindex $peers 1]]
+ set o_x \
+ [expr {([lindex $coords0 0] + [lindex $coords1 0]) * .5}]
+ set o_y \
+ [expr {([lindex $coords0 1] + [lindex $coords1 1]) * .5}]
+ set dx [expr {$x - $o_x}]
+ set dy [expr {$y - $o_y}]
+ set d [expr {hypot($dx, $dy)}]
+ set d2 [expr {$d * $d}]
+ set fx_t($node) \
+ [expr {$fx_t($node) + 500.0 * $dx / ($d2 * $d + 100)}]
+ set fy_t($node) \
+ [expr {$fy_t($node) + 500.0 * $dy / ($d2 * $d + 100)}]
}
}
foreach obj $objects {
set node [lindex [.c gettags $obj] 1]
if { [catch "set v_t($node)" v] } {
- set vx 0.0
- set vy 0.0
+ set vx 0.0
+ set vy 0.0
} else {
- set vx [lindex $v_t($node) 0]
- set vy [lindex $v_t($node) 1]
+ set vx [lindex $v_t($node) 0]
+ set vy [lindex $v_t($node) 1]
}
set vx [expr {$vx + 1000.0 * $fx_t($node) * $dt}]
set vy [expr {$vy + 1000.0 * $fy_t($node) * $dt}]
}
-
-
-#****f* editor.tcl/configRemoteHosts
-# NAME
-# configRemoteHosts -- configure remote hosts
-# SYNOPSIS
-# configRemoteHosts
-# FUNCTION
-# This function opens a remote host configuration dialog
-# box.
-#****
-proc configRemoteHosts {} {
- global exec_hosts
- global remote_exec old_remote_exec editor_only
- global active_host active_ssh
-
- set old_remote_exec $remote_exec
-
- if { $remote_exec } {
- set state normal
- } else {
- set state disabled
- }
-
- set wi .popup
- catch {destroy $wi}
- toplevel $wi
-
- wm transient $wi .
- wm resizable $wi 0 0
- wm title $wi "Remote host(s) configuration"
-
- labelframe $wi.select -pady 2 -text "Experiment running:" \
- -padx 2 -borderwidth 2
-
- radiobutton $wi.select.remote -text "remotely" \
- -command "enable_disable $wi"\
- -variable remote_exec -value true
- radiobutton $wi.select.local -text "locally" \
- -command "enable_disable $wi"\
- -variable remote_exec -value false
- checkbutton $wi.select.editor -text "edit mode only" \
- -command "enable_disable $wi"\
- -variable editor_only -onvalue true -offvalue false
- pack $wi.select.local $wi.select.remote $wi.select.editor -side left
-
- labelframe $wi.hosts -pady 2 -text "Remote hosts:" -padx 2
-
- frame $wi.hosts.labels -borderwidth 2
- label $wi.hosts.labels.label -text "Id" -anchor w
- frame $wi.hosts.address -borderwidth 2
- label $wi.hosts.address.label -text "IP address" -anchor w
- frame $wi.hosts.ports -borderwidth 2
- label $wi.hosts.ports.label -text "Port" -anchor w
- frame $wi.hosts.monitors -borderwidth 2
- label $wi.hosts.monitors.label -text "Monitor port" -anchor w
- frame $wi.hosts.active -borderwidth 2
- label $wi.hosts.active.label -text "Active" -anchor w
-# frame $wi.hosts.weight -borderwidth 2
-# label $wi.hosts.weight.label -text "Load (%)" -anchor w
- frame $wi.hosts.ssh -borderwidth 2
- label $wi.hosts.ssh.label -text "ssh" -anchor w
- frame $wi.hosts.userName -borderwidth 2
- label $wi.hosts.userName.label -text "User name" -anchor w
-
- set i 0
- foreach host_elem $exec_hosts {
-
- eval label $wi.hosts.labels.v$i -text "$i. " -anchor e
-
- eval entry $wi.hosts.address.v$i -bg white -width 15 \
- -validate focus -invcmd "focusAndFlash"
- $wi.hosts.address.v$i insert 0 [lindex $host_elem 0]
-
- eval entry $wi.hosts.ports.v$i -bg white -width 5 \
- -validate focus -invcmd "focusAndFlash"
- $wi.hosts.ports.v$i insert 0 [lindex $host_elem 1]
-
- eval entry $wi.hosts.monitors.v$i -bg white -width 5 \
- -validate focus -invcmd "focusAndFlash"
- $wi.hosts.monitors.v$i insert 0 [lindex $host_elem 2]
-
- eval checkbutton $wi.hosts.active.v$i \
- -variable active_host($i) -onvalue true -offvalue false
-
-# eval entry $wi.hosts.weight.v$i -bg white -width 5 \
-# -validate focus -invcmd "focusAndFlash"
-# $wi.hosts.weight.v$i insert 0 [lindex $host_elem 4]
-
- eval checkbutton $wi.hosts.ssh.v$i \
- -variable active_ssh($i) -onvalue true -offvalue false
- # -command {
- # if { active_ssh(0) } {
- # eval $wi.hosts.userName.v$i -configure state normal
- # } else {
- # eval $wi.hosts.userName.v$i -configure state disabled
- # }
- # }
-
- eval entry $wi.hosts.userName.v$i -bg white -width 5 \
- -validate focus -invcmd "focusAndFlash"
- $wi.hosts.userName.v$i insert 0 [lindex $host_elem 5]
-
- incr i
- }
-
- foreach j [list labels address ports monitors active ssh userName] {
- eval pack $wi.hosts.$j.label -side top -padx 4 -pady 2 -fill x
- set n [llength $exec_hosts]
- for {set i 0} {$i < $n} {incr i} {
- eval pack $wi.hosts.$j.v$i -side top -padx 4 -pady 2 -fill x
- }
- }
- pack $wi.hosts.labels $wi.hosts.address $wi.hosts.ports \
- $wi.hosts.monitors $wi.hosts.active \
- $wi.hosts.ssh $wi.hosts.userName -side left -fill x
- pack $wi.select $wi.hosts -side top -fill x -padx 4
-
- frame $wi.butt -borderwidth 4
- button $wi.butt.apply -text "Apply" -command \
- "configRemoteHostsApply $wi; destroy $wi"
- focus $wi.butt.apply
- button $wi.butt.cancel -text "Cancel" -command \
- "set remote_exec $old_remote_exec; destroy $wi"
- pack $wi.butt.cancel $wi.butt.apply -side right
- pack $wi.butt -side bottom
-
- enable_disable $wi
-
- after 100 {
- grab .popup
- }
- ;# Apply and Cancel explicitly destroy $wi
- vwait forever
-}
-
-
-#****f* editor.tcl/configRemoteHostsApply
-# NAME
-# configRemoteHostsApply -- configure remote hosts apply
-# SYNOPSIS
-# configRemoteHostsApply $wi
-# FUNCTION
-# This function is called when clicking on the apply button
-# in remote hosts configuration dialog box.
-#****
-proc configRemoteHostsApply { wi } {
- global exec_hosts
- global active_host active_ssh
- global remote_exec editor_only
- global execSock monSock exec_sockets_opened
-
- set n [llength $exec_hosts]
- set exec_hosts []
- set at_least_one_up false
- for {set i 0} {$i < $n} {incr i} {
- set ent [list [$wi.hosts.address.v$i get] \
- [$wi.hosts.ports.v$i get] \
- [$wi.hosts.monitors.v$i get]\
- $active_host($i) \
- $active_ssh($i)\
- [$wi.hosts.userName.v$i get]]
- lappend exec_hosts $ent
- if { $active_host($i) } { set at_least_one_up true }
- }
- if { $remote_exec && ! $at_least_one_up } {
- set editor_only true
- .menubar.experiment entryconfigure "Execute" -state disabled
- }
-# catch { unset exec_sock monitor_sock } message
-# set exec_sockets_opened false
- destroy $wi
-}
-
-
-#****f* editor.tcl/enable_disable
-# NAME
-# enable_disable
-# SYNOPSIS
-# enable_disable $wi
-# FUNCTION
-# Enables or disables the hosts entries in the remote host
-# configuration dialog box.
-#****
-proc enable_disable { wi } {
- global exec_hosts
- global remote_exec editor_only
-
- set i 0
-
- if { ! $remote_exec || $editor_only } {
- set state disabled
- } else {
- set state normal
- }
-
- if { $editor_only } {
- .menubar.experiment entryconfigure "Execute" -state disabled
- } else {
- .menubar.experiment entryconfigure "Execute" -state normal
- }
-
- foreach host_elem $exec_hosts {
- eval $wi.hosts.address.v$i configure -state $state
- eval $wi.hosts.ports.v$i configure -state $state
- eval $wi.hosts.monitors.v$i configure -state $state
- #eval $wi.hosts.weight.v$i configure -state $state
- eval $wi.hosts.ssh.v$i configure -state $state
- eval $wi.hosts.userName.v$i configure -state $state
- incr i
- }
-}
-
-
proc zoom { dir } {
global zoom
switch -exact -- $dir {
"down" {
if {$zoom > $maxzoom} {
- set zoom $maxzoom
+ set zoom $maxzoom
} elseif {$zoom < $minzoom} {
- ; # leave it unchanged
+ ; # leave it unchanged
} else {
- set newzoom $minzoom
- foreach z $stops {
- if {$zoom <= $z} {
- break
- } else {
- set newzoom $z
- }
- }
- set zoom $newzoom
+ set newzoom $minzoom
+ foreach z $stops {
+ if {$zoom <= $z} {
+ break
+ } else {
+ set newzoom $z
+ }
+ }
+ set zoom $newzoom
}
redrawAll
}
"up" {
if {$zoom < $minzoom} {
- set zoom $minzoom
+ set zoom $minzoom
} elseif {$zoom > $maxzoom} {
- ; # leave it unchanged
+ ; # leave it unchanged
} else {
- foreach z [lrange $stops 1 end] {
- set newzoom $z
- if {$zoom < $z} {
- break
- }
- }
- set zoom $newzoom
+ foreach z [lrange $stops 1 end] {
+ set newzoom $z
+ if {$zoom < $z} {
+ break
+ }
+ }
+ set zoom $newzoom
}
redrawAll
}
default {
if { $i < [expr [llength $stops] - 1] } {
- set zoom [lindex $stops [expr $i + 1]]
- redrawAll
+ set zoom [lindex $stops [expr $i + 1]]
+ redrawAll
}
}
}