123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435 |
- #!/bin/sh
- # the next line restarts using wish (on cygwin, use wish84 or the like) \
- exec wish "$0" "$@"
- #==========================================================================
- # DEMO
- # part of OMNeT++
- #==========================================================================
- #--------------------------------------------------------------
- # Copyright (C) 1992-2003 Andras Varga
- #
- # This file is distributed WITHOUT ANY WARRANTY. See the file
- # `license' for details on this and other legal matters.
- #--------------------------------------------------------------
- #
- # Configuration
- #
- set wantScrollbar 1
- set unixbrowser "firefox"
- #set unixbrowser "mozilla"
- #set unixbrowser "konqueror"
- #set unixbrowser "netscape"
- #
- # title line: {"title"}
- # program line: {"name" "directory" "unix-command" "windows-command"}
- # readme line: {"name" "readme-file"}
- # docu line: {"name" "readme-file" "html-file"}
- # separator: {}
- #
- set i 0
- set first ""
- foreach line {
- {"INET Framework"}
- {"About..." "README" "../doc/index.html"}
- {"Ethernet"}
- {"ARP Test" "ethernet/arptest" "./run" "run"}
- {"ARP Test 2" "ethernet/arptest2" "./run" "run"}
- {"LANs: mixed Ethernet" "ethernet/lans" "./run mixed.ini" "run mixed.ini"}
- {"LANs: Ethernet bus" "ethernet/lans" "./run bus.ini" "run bus.ini"}
- {"LANs: hub" "ethernet/lans" "./run hub.ini" "run hub.ini"}
- {"LANs: switch" "ethernet/lans" "./run switch.ini" "run switch.ini"}
- {"LANs: duplexswitch" "ethernet/lans" "./run duplexswitch.ini" "run duplexswitch.ini"}
- {"LANs: two hosts" "ethernet/lans" "./run twoHosts.ini" "run twoHosts.ini"}
- {"LANs: very large LAN" "ethernet/lans" "./run largeNet.ini" "run largeNet.ini"}
- {"INET"}
- {"NClients/Telnet" "inet/nclients" "./run" "run"}
- {"NClients/HTTP" "inet/nclients" "./run basicHTTP.ini" "run basicHTTP.ini"}
- {"NClients/file transfer" "inet/nclients" "./run filetransfer.ini" "run filetransfer.ini"}
- {"FlatNet" "inet/flatnet" "./run" "run"}
- {"KIDSNw1" "inet/kidsnw1" "./run" "run"}
- {"Multicast" "inet/multicast" "./run" "run"}
- {"RouterPerf" "inet/routerperf" "./run" "run"}
- {"BulkTransfer" "inet/bulktransfer" "./run" "run"}
- {"RedTest" "inet/redtest" "./run" "run"}
- {"TcpSack" "inet/tcpsack" "./run" "run"}
- {"TcpTimestamps" "inet/tcptimestamps" "./run" "run"}
- {"TcpWindowScale" "inet/tcpwindowscale" "./run" "run"}
- {"TcpClientServer" "inet/tcpclientserver" "./run" "run"}
- {"BER" "inet/ber" "./run" "run"}
- {"IPv6 (work in progress)"}
- {"NClients" "ipv6/nclients" "./run" "run"}
- {"DemoNetworkEth" "ipv6/demonetworketh" "./run" "run"}
- {"Mobile IPv6" "ipv6/mobileipv6" "./run" "run"}
- {"SCTP"}
- {"NClients" "sctp/nclients" "./run" "run"}
- {"Multi-homing" "sctp/multihomed" "./run" "run"}
- {"Emulation"}
- {"Traceroute" "emulation/traceroute" "./run" "run"}
- {"ExtClient" "emulation/extclient" "./run" "run"}
- {"ExtServer" "emulation/extserver" "./run" "run"}
- {"Ad-hoc"}
- {"Mobility models" "adhoc/mobility" "./run" "run"}
- {"802.11b ad-hoc" "adhoc/ieee80211" "./run" "run"}
- {"802.11b ad-hoc (MF impl.)" "adhoc/mf80211" "./run" "run"}
- {"Wireless"}
- {"802.11 AP and hosts" "wireless/lan80211" "./run" "run"}
- {"802.11 handover" "wireless/handover" "./run" "run"}
- {"802.11 thruput test" "wireless/throughput" "./run" "run"}
- {"802.11 thruput test 2" "wireless/hosttohost" "./run" "run"}
- {"MPLS/RSVP-TE"}
- {"TestTE/failure" "mpls/testte_failure" "./run" "run"}
- {"TestTE/reroute" "mpls/testte_reroute" "./run" "run"}
- {"TestTE/routing" "mpls/testte_routing" "./run" "run"}
- {"TestTE/tunnel " "mpls/testte_tunnel" "./run" "run"}
- {"LDP/test" "mpls/ldp" "./run" "run"}
- {"Net37" "mpls/net37" "./run" "run"}
- {"OSPFv2"}
- {"SimpleTest" "ospfv2/simpletest" "./run" "run"}
- {"Areas" "ospfv2/areas" "./run" "run"}
- {"Backbone" "ospfv2/backbone" "./run" "run"}
- {"FullTest" "ospfv2/fulltest" "./run" "run"}
- } {
- lappend samples $i
- if {[llength $line]==0} {
- set db($i,type) "spacer"
- } elseif {[llength $line]==1} {
- set db($i,type) "heading"
- set db($i,title) [lindex $line 0]
- } elseif {[llength $line]==2} {
- set db($i,type) "readme"
- set db($i,title) [lindex $line 0]
- set db($i,readme) [lindex $line 1]
- if {$first==""} {set first $i}
- } elseif {[llength $line]==3} {
- set db($i,type) "docu"
- set db($i,title) [lindex $line 0]
- set db($i,readme) [lindex $line 1]
- set db($i,docu) [lindex $line 2]
- if {$first==""} {set first $i}
- } elseif {[llength $line]==4} {
- set db($i,type) "program"
- set db($i,title) [lindex $line 0]
- set db($i,dir) [lindex $line 1]
- set db($i,uprog) [lindex $line 2]
- set db($i,wprog) [lindex $line 3]
- if {$first==""} {set first $i}
- } else {
- tk_messageBox -title {Error} -type ok -icon error -message "Error in table: wrong #items in {$line}"
- exit
- }
- incr i
- }
- proc createWindow {} {
- global wantScrollbar samples first db fonts colors
- wm focusmodel . passive
- wm minsize . 1 1
- wm overrideredirect . 0
- wm resizable . 1 1
- wm deiconify .
- wm title . "OMNeT++ Demo Simulations"
- wm protocol . WM_DELETE_WINDOW {exit}
- wm geometry . "650x400"
- #################################
- # Menu bar
- #################################
- menu .menubar
- . config -menu .menubar
- # Create menus
- foreach i {
- {filemenu -label File -underline 0}
- {helpmenu -label Help -underline 0}
- } {
- eval .menubar add cascade -menu .menubar.$i
- menu ".menubar.[lindex $i 0]" -tearoff 0
- }
- # File menu
- foreach i {
- {command -command exit -label Exit -underline 1}
- } {
- eval .menubar.filemenu add $i
- }
- # Help menu
- foreach i {
- {command -command helpAbout -label {About OMNeT++} -underline 0}
- } {
- eval .menubar.helpmenu add $i
- }
- #################################
- # Create main display area
- #################################
- frame .sel -bd 2 -relief groove
- frame .main -bd 2 -relief groove
- pack .sel -expand 0 -fill y -side left -padx 2
- pack .main -expand 1 -fill both -side right -padx 2
- frame .main.up
- frame .main.lo
- frame .main.mid
- pack .main.up -expand 0 -fill x -side top
- pack .main.lo -expand 0 -fill x -side bottom
- pack .main.mid -expand 1 -fill both -side top
- label .main.up.banner -bg $colors(banner) -relief groove -font $fonts(bold)
- pack .main.up.banner -fill x -side top
- text .main.mid.text -yscrollcommand ".main.mid.sb set" -width 80 -height 20 -wrap none
- scrollbar .main.mid.sb -command ".main.mid.text yview"
- pack .main.mid.sb -anchor center -expand 0 -fill y -side right
- pack .main.mid.text -anchor center -expand 1 -fill both -side left
- button .main.lo.start -font $fonts(bold) -bg $colors(startbutton)
- pack .main.lo.start -expand 1 -fill x -padx 10 -pady 6
- canvas .sel.c -width 200
- pack .sel.c -side left -expand yes -fill both
- if {$wantScrollbar} {
- .sel.c config -yscrollcommand ".sel.s set"
- scrollbar .sel.s -command ".sel.c yview"
- pack .sel.s -side right -fill y
- }
- frame .sel.c.f
- .sel.c create window 0 0 -anchor nw -window .sel.c.f
- set f .sel.c.f
- #label $f.banner -text "Sample simulations:" -bg $colors(banner) -relief groove -font $fonts(bold)
- #pack $f.banner -fill x -side top
- foreach i $samples {
- if {$db($i,type)=="spacer"} {
- frame $f.$i -relief flat
- pack $f.$i -fill x -side top -pady 5
- } elseif {$db($i,type)=="heading"} {
- label $f.$i -text $db($i,title) -bg $colors(banner) -relief groove -font $fonts(bold)
- pack $f.$i -fill x -side top -padx 5 -pady 5
- } elseif {$db($i,type)=="readme" || $db($i,type)=="docu" || $db($i,type)=="program"} {
- button $f.$i -text $db($i,title) -bd 1 -command "showDemo $i"
- pack $f.$i -fill x -side top -padx 5 -pady 2
- } else {
- tk_messageBox -title {Error} -type ok -icon error -message "internal error: wrong type '$db($i,type)'"
- exit
- }
- }
- update
- .sel.c config -width [winfo width .sel.c.f]
- .sel.c config -scrollregion "0 0 0 [winfo height .sel.c.f]"
- showDemo $first
- }
- proc helpAbout {} {
- tk_messageBox -title {About} -type ok -icon info -message {Demo simulations for OMNEST/OMNeT++.}
- }
- proc showDemo {sample} {
- global samples db colors tcl_platform
- set f .sel.c.f
- foreach i $samples {
- if {$db($i,type)=="readme" || $db($i,type)=="docu" || $db($i,type)=="program"} {
- $f.$i config -relief raised -bg $colors(unselbutton)
- }
- }
- $f.$sample config -relief sunken -bg $colors(selbutton)
- if {$db($sample,type)=="readme"} {
- .main.up.banner config -text "$db($sample,title)"
- pack forget .main.lo
- loadFile .main.mid.text $db($sample,readme)
- } elseif {$db($sample,type)=="docu"} {
- .main.up.banner config -text "$db($sample,title)"
- .main.lo.start config -text "Open documentation\n($db($sample,docu))"
- .main.lo.start config -command "openDocu $sample"
- pack forget .main.lo
- pack .main.lo -expand 0 -fill x -side bottom -before .main.mid
- loadFile .main.mid.text $db($sample,readme)
- } elseif {$db($sample,type)=="program"} {
- if {$tcl_platform(platform)=="unix"} {
- set cmd "cd $db($sample,dir); $db($sample,uprog)"
- } else {
- set cmd "cd $db($sample,dir); $db($sample,wprog)"
- }
- .main.up.banner config -text "$db($sample,title) README"
- .main.lo.start config -text "Launch $db($sample,title)\n($cmd)"
- .main.lo.start config -command "runSample $sample"
- pack forget .main.lo
- pack .main.lo -expand 0 -fill x -side bottom -before .main.mid
- loadFile .main.mid.text "$db($sample,dir)/README"
- } else {
- tk_messageBox -title {Error} -type ok -icon error -message "internal error: wrong type '$db($sample,type)'"
- exit
- }
- }
- proc loadFile {t filename} {
- $t delete 1.0 end
- if [catch {
- # try with ".txt" suffix as well
- if [catch {set f [open $filename r]}] {set f [open "$filename.txt" r]}
- set contents [read $f]
- close $f
- } err] {
- #tk_messageBox -title {OMNeT++ Demo} -type ok -icon error -message "Cannot display README: $err"
- return
- }
- $t insert end $contents
- $t mark set insert 1.0
- }
- proc runSample {sample} {
- global samples db tcl_platform
- if {$tcl_platform(platform) == "unix"} {
- set prog $db($sample,uprog)
- } else {
- set prog "cmd /c $db($sample,wprog)"
- }
- set pwd [pwd]
- if [catch {
- cd $db($sample,dir)
- #exec $prog &
- #exec [lindex $prog 0] [lindex $prog 1] [lrange $prog 2 end] &
- eval exec $prog &
- } err] {
- tk_messageBox -title {OMNeT++ Demo} -type ok -icon error -message "Error running the simulation program: $err"
- }
- cd $pwd
- }
- proc openDocu {sample} {
- global samples db tcl_platform unixbrowser
- if [catch {
- if {$tcl_platform(platform) == "windows"} {
- exec cmd.exe /c start $db($sample,docu)
- } else {
- exec $unixbrowser $db($sample,docu) &
- }
- } err] {
- tk_messageBox -title {OMNeT++ Demo} -type ok -icon error -message "Error running the simulation program: $err"
- }
- }
- #===================================================================
- # GENERIC BINDINGS
- #===================================================================
- proc generic_bindings {} {
- bind Button <Return> {tkButtonInvoke %W}
- }
- #===================================================================
- # FONT BINDINGS
- #===================================================================
- proc font_bindings {} {
- global fonts tcl_platform colors
- set colors(banner) #e0e0a0
- set colors(unselbutton) #c0c0c0
- set colors(selbutton) #ffffff
- set colors(startbutton) #e0e0a0
- #
- # fonts() array elements:
- # normal: menus, labels etc
- # bold: buttons
- # icon: toolbar 'icons'
- # big: STOP button
- # msgname: message name during animation
- # fixed: text windows and listboxes
- #
- if {$tcl_platform(platform) == "unix"} {
- set fonts(normal) -Adobe-Helvetica-Medium-R-Normal-*-12-*-*-*-*-*-*-*
- set fonts(bold) -Adobe-Helvetica-Bold-R-Normal-*-12-*-*-*-*-*-*-*
- set fonts(icon) -Adobe-Times-Bold-I-Normal-*-12-*-*-*-*-*-*-*
- set fonts(big) -Adobe-Helvetica-Medium-R-Normal-*-18-*-*-*-*-*-*-*
- set fonts(msgname) -Adobe-Helvetica-Medium-R-Normal-*-12-*-*-*-*-*-*-*
- set fonts(fixed) fixed
- set fonts(balloon) -Adobe-Helvetica-Medium-R-Normal-*-12-*-*-*-*-*-*-*
- } else {
- # Windows, Mac
- set fonts(normal) -Adobe-Helvetica-Medium-R-Normal-*-*-140-*-*-*-*-*-*
- set fonts(bold) -Adobe-Helvetica-Bold-R-Normal-*-*-140-*-*-*-*-*-*
- set fonts(icon) -Adobe-Helvetica-Bold-R-Normal-*-*-140-*-*-*-*-*-*
- set fonts(big) -Adobe-Helvetica-Medium-R-Normal-*-*-180-*-*-*-*-*-*
- set fonts(msgname) -Adobe-Helvetica-Medium-R-Normal-*-*-140-*-*-*-*-*-*
- set fonts(fixed) FixedSys
- set fonts(balloon) -Adobe-Helvetica-Medium-R-Normal-*-*-140-*-*-*-*-*-*
- }
- if {$tcl_platform(platform) == "unix"} {
- option add *Scrollbar.width 12
- option add *Menubutton.font $fonts(normal)
- option add *Menu.font $fonts(normal)
- option add *Label.font $fonts(normal)
- option add *Entry.font $fonts(normal)
- option add *Listbox.font $fonts(fixed)
- option add *Text.font $fonts(fixed)
- option add *Button.font $fonts(bold)
- }
- }
- proc checkVersion {} {
- global tk_version tk_patchLevel
- catch {package require Tk}
- if {$tk_version<8.0} {
- wm deiconify .
- wm title . "Bad news..."
- frame .f
- pack .f -expand 1 -fill both -padx 2 -pady 2
- label .f.l1 -text "Your version of Tcl/Tk is too old!"
- label .f.l2 -text "Tcl/Tk 8.0 or later required."
- button .f.b -text "OK" -command {exit}
- pack .f.l1 .f.l2 -side top -padx 5
- pack .f.b -side top -pady 5
- focus .f.b
- wm protocol . WM_DELETE_WINDOW {exit}
- tkwait variable ok
- }
- if {[string compare $tk_patchLevel "8.0p1"]<0} {
- tk_messageBox -title {Warning} -type ok -icon warning \
- -message {Old Tcl/Tk version. At least 8.0p1 is strongly recommended!}
- }
- }
- set tk_strictMotif 1
- cd [file dirname [info script]]
- checkVersion
- generic_bindings
- font_bindings
- createWindow
|