www.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:16k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (C) 1998 by USC/ISI
  3. # All rights reserved.                                            
  4. #                                                                
  5. # Redistribution and use in source and binary forms are permitted
  6. # provided that the above copyright notice and this paragraph are
  7. # duplicated in all such forms and that any documentation, advertising
  8. # materials, and other materials related to such distribution and use
  9. # acknowledge that the software was developed by the University of
  10. # Southern California, Information Sciences Institute.  The name of the
  11. # University may not be used to endorse or promote products derived from
  12. # this software without specific prior written permission.
  13. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  14. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  15. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16. # $Header: /cvsroot/nsnam/nam-1/tcl/www.tcl,v 1.15 2007/02/18 22:44:54 tom_henderson Exp $
  17. # WWW "browser" - setup big table of what affects what
  18. set stackthese "h1 h2 h3 h4 h5 h6 b i ul ol dl a pre"
  19. set www_cancels(/h1) "h1 h2 h3 h4 h5 h6 i b"
  20. set www_cancels(/h2) "h1 h2 h3 h4 h5 h6 i b"
  21. set www_cancels(/h3) "h1 h2 h3 h4 h5 h6 i b"
  22. set www_cancels(/h4) "h1 h2 h3 h4 h5 h6 i b"
  23. set www_cancels(/h5) "h1 h2 h3 h4 h5 h6 i b"
  24. set www_cancels(/h6) "h1 h2 h3 h4 h5 h6 i b"
  25. set www_cancels(h1) "h1 h2 h3 h4 h5 h6 i b"
  26. set www_cancels(h2) "h1 h2 h3 h4 h5 h6 i b"
  27. set www_cancels(h3) "h1 h2 h3 h4 h5 h6 i b"
  28. set www_cancels(h4) "h1 h2 h3 h4 h5 h6 i b"
  29. set www_cancels(h5) "h1 h2 h3 h4 h5 h6 i b"
  30. set www_cancels(h6) "h1 h2 h3 h4 h5 h6 i b"
  31. set www_cancels(/b) "b"
  32. set www_cancels(/strong) "strong"
  33. set www_cancels(/i) "i"
  34. set www_cancels(/ul) "ul"
  35. set www_cancels(/ol) "ol"
  36. set www_cancels(/dl) "dl"
  37. set www_cancels(/a) "a"
  38. set www_cancels(/pre) "pre"
  39. set www_sets(h1) {{bold 1} {size 18}}
  40. set www_sets(h2) {{bold 1} {size 14}} ;# may not exists on some systems
  41. set www_sets(h3) {{bold 1} {size 14}}
  42. set www_sets(h4) {{bold 1} {size 12}}
  43. set www_sets(h5) {{bold 1} {size 10}}
  44. set www_sets(h6) {{bold 1} {size 10}}
  45. set www_sets(i) {{italic 1} {bold 0}}
  46. set www_sets(b) {{italic 0} {bold 1}}
  47. set www_sets(strong) {{italic 0} {bold 1}}
  48. set www_sets(verbatim) {{verbatim 1} {font courier}}
  49. set www_sets(normal) {{bold 0} {italic 0} {font helvetica} {size 12} {nl 0} {hr 0} {ltype ""} {bullet 0} {verbatim 0} {indent 0} {href ""}}
  50. set www_sets(ul) {{ltype ul} {indent [expr $indent+4]}}
  51. set www_sets(ol) {{ltype ol} {indent [expr $indent+4]}}
  52. set www_sets(dl) {{ltype dl} {indent [expr $indent+4]}}
  53. set www_sets(a) {{href XXX}}
  54. set www_runs(a) {extract_anchor}
  55. set www_runs(img) {extract_image}
  56. #www_sets is for tags that get stacked and need to be set continuously
  57. #www_fsets is only run the first time 
  58. set www_fsets(p) {{nl 2}}
  59. set www_fsets(br) {{nl 1}}
  60. set www_fsets(hr) {{hr 1}}
  61. set www_fsets(h1) {{nl 2}}
  62. set www_fsets(h2) {{nl 2}}
  63. set www_fsets(h3) {{nl 2}}
  64. set www_fsets(h4) {{nl 2}}
  65. set www_fsets(h5) {{nl 2}}
  66. set www_fsets(h6) {{nl 2}}
  67. set www_fsets(ul) {{nl 0}}
  68. set www_fsets(ol) {{nl 0}}
  69. set www_fsets(dl) {{nl 0}}
  70. set www_fsets(/h1) {{nl 2}}
  71. set www_fsets(/h2) {{nl 2}}
  72. set www_fsets(/h3) {{nl 2}}
  73. set www_fsets(/h4) {{nl 2}}
  74. set www_fsets(/h5) {{nl 2}}
  75. set www_fsets(/h6) {{nl 2}}
  76. set www_fsets(/ul) {{nl 1}}
  77. set www_fsets(/ol) {{nl 1}}
  78. set www_fsets(/dl) {{nl 1}}
  79. set www_fsets(li) {{nl 1} {bullet 1}}
  80. set www_fsets(dt) {{nl 1}}
  81. set fonts(normal) -*-helvetica-medium-r-normal--12-*
  82. set fonts(helvetica,0,0,16) -*-helvetica-medium-r-normal--17-*
  83. set fonts(helvetica,1,0,16) -*-helvetica-bold-r-normal--17-*
  84. set fonts(helvetica,1,1,16) -*-helvetica-bold-o-normal--17-*
  85. set fonts(helvetica,1,0,18) -*-helvetica-bold-r-normal--18-*
  86. set fonts(helvetica,1,1,18) -*-helvetica-bold-o-normal--18-*
  87. set fonts(helvetica,1,0,14) -*-helvetica-bold-r-normal--14-*
  88. set fonts(helvetica,1,1,14) -*-helvetica-bold-o-normal--14-*
  89. set fonts(helvetica,1,0,12) -*-helvetica-bold-r-normal--12-*
  90. set fonts(helvetica,1,1,12) -*-helvetica-bold-o-normal--12-*
  91. set fonts(helvetica,0,1,12) -*-helvetica-medium-o-normal--12-*
  92. set fonts(helvetica,1,0,10) -*-helvetica-bold-r-normal--10-*
  93. AnimControl instproc parse_html {w entry text} {
  94.     global www_sets www_fsets www_cancels www_runs stackthese fonts 
  95.     $self instvar href href_keep www_win
  96.     set www_win $w
  97.     set stack normal
  98.     set size normal
  99.     set font helvetica
  100.     set bold 0
  101.     set italic 0
  102.     set underline 0
  103.     set verbatim 0
  104.     set indent 0
  105.     set nl 0
  106.     set hr 0
  107.     set prevnl 0
  108.     set href ""
  109.     set bullet 0
  110.     set ltype ""
  111.     set parts [split $text "<>"]
  112.     set istag 0
  113.     $w delete 1.0 end
  114.     foreach part $parts {
  115. if {$istag==1} {
  116.     set tag [string tolower [lindex $part 0]]
  117.     set c ""
  118.     catch {set c $www_cancels($tag)}
  119.     set rm 0
  120.     set newstack {}
  121.     foreach frame $stack {
  122. set newframe {}
  123. if {([lsearch -exact $c $frame]>=0)&&($rm==0)} {
  124.     set rm 1
  125. } else {
  126.     lappend newstack $frame
  127. }
  128.     }
  129.     set stack $newstack
  130.     set newframe $tag
  131. #     puts "$tag, $stack"
  132.     #set all the stuff corresponding to this stack
  133.     foreach frame "$stack $newframe" {
  134. set t [lindex $frame 0]
  135. set s ""
  136. catch {set s $www_sets($t)}
  137. foreach item $s {
  138.     set cmd "set $item"
  139. #     puts "    $cmd"
  140.     eval $cmd
  141. }
  142.     }
  143.     #now deal with the one off stuff for this tag
  144.     set s ""
  145.     catch {set s $www_fsets($tag)}
  146.     foreach item $s {
  147. set cmd "set $item"
  148. # puts "    $cmd"
  149. eval $cmd
  150.     }
  151.     #now run any specific code for this tag
  152.     set s ""
  153.     catch {set s $www_runs($tag)}
  154.     foreach item $s {
  155. set cmd "$self $item $part"
  156. # puts "    $cmd"
  157. eval $cmd
  158.     }
  159.     if {[lsearch -exact $stackthese $tag]>=0} {
  160. lappend stack $newframe
  161.     }
  162. } else {
  163.     if {$hr==1} {
  164. $w insert end "n_____________________________________________________n"
  165. if {$prevnl==0} {set prevnl 1}
  166.     }
  167.     #handle all the newlines
  168.     for {set i 0} {$i < [expr $nl-$prevnl]} {incr i} {
  169. $w insert end "n"
  170.     }
  171.     set prevnl $nl
  172.     #sort out the indentation
  173.     if {$nl>0} {
  174. for {set i 0} {$i < $indent} {incr i} {
  175.     $w insert end " "
  176. }
  177.     }
  178.     #add any bullets
  179.     if {$bullet!=0} {
  180. $w insert end "* "
  181.     }
  182.     set ix [$w index end-1c]
  183.     if {$nl>0} {
  184. set part [string trimleft $part]
  185.     }
  186.     if {$verbatim==0} {
  187. set part [remove_nl $part]
  188. if {[string length $part]>0} {
  189.     set prevnl 0
  190. }
  191. $w insert end $part
  192.     } else {
  193. $w insert end $part
  194.     }
  195.     $self instvar tagnum
  196.     if {($size!=12)||($bold==1)||($italic==1)||($href!="")||
  197.     ($font!="helvetica")} {
  198. incr tagnum
  199. set ix2 [$w index end-1c]
  200. $w tag add t$tagnum $ix end-1c
  201.     }
  202.     if {($size!=12)||($bold==1)||($italic==1)||
  203.     ($font!="helvetica")} {
  204. set thisfont $fonts(normal)
  205. catch {
  206.     set thisfont $fonts($font,$bold,$italic,$size)
  207. }
  208. $w tag configure t$tagnum -font $thisfont
  209.     }
  210.     if {$href!=""} {
  211. $w tag configure t$tagnum -foreground red
  212. $w tag bind t$tagnum <Enter> 
  213. "$self set_entry $entry $href_keep"
  214. $w tag bind t$tagnum <Leave> 
  215. "$self set_entry $entry {}"
  216. $w tag bind t$tagnum <1> "$self goto $href_keep $w $entry"
  217.     }
  218.     
  219. }
  220. set istag [expr 1-$istag]
  221.     }
  222. }
  223. AnimControl instproc set_entry {entry str} {
  224.     $entry delete 0 end
  225.     $entry insert 0 $str
  226. }
  227. AnimControl instproc extract_anchor args {
  228.     $self instvar href_keep href
  229.     set href_keep ""
  230.     set href ""
  231.     foreach arg $args {
  232. if {[string range [string tolower $arg] 0 4]=="href="} {
  233.     set href_keep [string trim [string range $arg 5 end] {"}]
  234.     set href XXX
  235. }     
  236.     }
  237. }
  238. AnimControl instproc extract_image args {
  239.     $self instvar www_win wix
  240.     set img ""
  241.     foreach arg $args {
  242. if {[string range [string tolower $arg] 0 3]=="src="} {
  243.     set img [string trim [string range $arg 4 end] {"}]
  244. }     
  245.     }
  246.     $www_win window create end -create "label $www_win.w$wix -bitmap $img"
  247.     incr wix
  248. }
  249. AnimControl instproc goto {url win entry} {
  250.     global help_text
  251.     set res "xxxx"
  252.     set scheme [lindex [split $url ":"] 0]
  253.     if {$scheme=="help"} {
  254. $self parse_html $win $entry $help_text([string range $url 5 end])
  255. return
  256.     }
  257.     set proggy netscape
  258.     catch {
  259.         set res [exec $proggy -display :0 -remote openURL($url)]
  260.     }
  261.     if {$res=="xxxx"} {
  262.         catch {
  263.             set res [exec $proggy -display :0.1 -remote openURL($url)]
  264.         }
  265.     }
  266.     if {$res=="xxxx"} {
  267.         puts "failed to pass URL to $proggy"
  268.     }
  269. }
  270. proc lreverse {list} {
  271.     set res {}
  272.     foreach el $list {
  273. set res [concat [list $el] $res]
  274.     }
  275.     return $res
  276. }
  277. proc remove_nl {str} {
  278.     set parts [split $str "nr"] 
  279.     set res ""
  280.     set space 1
  281.     for {set i 0} {$i<[llength $parts]} {incr i} {
  282. set part [lindex $parts $i]
  283. if {$i>0} {
  284.     set part [string trimleft $part]
  285. } else {
  286.     if {$part==""} {set space 0}
  287. }
  288. if {($i+1)<[llength $parts]} {
  289.     set part [string trimright $part]
  290. }
  291. if {$space==0} {
  292.     set res "$res "
  293.     set space 1
  294. if {[string length $part] > 0} {
  295.     set res "$res$part"
  296.     set space 0
  297. }
  298.     }
  299.     return $res
  300. }
  301. set help_text(home) "<h1>NAM - The Network Animator</h1>
  302. Welcome to Nam 1.13
  303. <P>
  304. Developed by UCB and the VINT, SAMAN, and Conser projects at ISI.
  305. <P>
  306. Nam contains source code with the following copyrights:
  307. <P>
  308. Copyright (c) 1991-1994 Regents of the University of California.
  309. <BR>
  310. Copyright (c) 1997-1999 University of Southern California
  311. <BR>
  312. Copyright (c) 2000-2002 USC/Information Sciences Institute
  313. <P>
  314. "
  315. set help_text(about) "<h1>NAM - The Network Animator</h1>
  316. This version of nam is highly experimental - there will be bugs!.  
  317. Please mail <I><a href=mailto:ns-users@isi.edu>ns-users@isi.edu</a></I> if you 
  318. encounter any bugs, or with suggestions for desired functionality.
  319. <H2>History</h2>
  320. The network animator ``nam''
  321. began in 1990 as a simple tool for animating packet trace data.
  322. This trace data is typically
  323. derived as output from a network simulator like
  324. <a href=http://www-mash.cs.berkeley.edu/ns/>ns</a>
  325. or from real network measurements, e.g., using
  326. <a href=ftp://ftp.ee.lbl.gov/tcpdump.tar.Z>tcpdump</a>.
  327. <a href=http://www.cs.berkeley.edu/~mccanne>Steven McCanne</a>
  328. wrote the original version as a member of the
  329. <a href=http://www-nrg.ee.lbl.gov/>Network Research Group</a> at the
  330. <a href=http://www.lbl.gov/>Lawrence Berkeley National Laboratory</a>,
  331. and occasionally improved the design as he needed it in
  332. his research.  Marylou Orayani improved it further and used it
  333. for her Master's research over summer 1995 and into spring 1996.
  334. The nam development effort is now an ongoing
  335. collaboration at ISI in the SAMAN and Conser projects.
  336. Nam developers include:
  337. <a href=http://www.isi.edu/nsnam/>SAMAN and Conser projects</a>.
  338. <a href=http://netweb.usc.edu/vint/>VINT project</a>.
  339. <a href=http://north.east.isi.edu/~mjh/>Mark Handley</a>, 
  340. <a href=http://www.isi.edu/~haoboy/>Haobo Yu</a>, <a href=http://www.isi.edu/~johnh/>John Heidemann</a>,
  341.  <a href=http://www.isi.edu/~yaxu/>Ya Xu</a>, <a href=http://www.isi.edu/~kclan/>Kun-chan Lan</a>, and <a href=http://www-scf.usc.edu/~hyunahpa/>Hyunah Park</a>.
  342. <P>
  343. For information about ns and nam, please see
  344. <i><a href=http://mash.cs.berkeley.edu/nam/>http://mash.cs.berkeley.edu/nam/</a></i>.
  345. <h2>Funding</h2>
  346. Nam is currently funded by DARPA through the VINT project at LBL under
  347. DARPA grant DABT63-96-C-0105, at USC/ISI under DARPA grant
  348. ABT63-96-C-0054, at Xerox PARC under DARPA grant DABT63-96-C-0105. 
  349. <H2>Copyright</H2>
  350. Nam contains source code with the following copyrights:
  351. <p>
  352. Copyright (c) 1991-1994 Regents of the University of California.
  353. <br>
  354. Copyright (c) 1997-1999 University of Southern California
  355. <P>
  356. Copyright (c) 2000-2001 USC/Information Sciences Institute
  357. <hr>
  358. <i><a href=help:help>Help Index</a><I>
  359. "
  360. set help_text(help) "
  361. <H1>Nam Quick Help</H1>
  362. <B>Use the controls to move the animation through time:</B>
  363. <DL>
  364. <DT><img src=rew>Rewind the animation by 25 times the current time step
  365. <DT><img src=back>Play the animation backwards
  366. <DT><img src=stop>Stop the playing of the animation
  367. <DT><img src=play>Play the animation normally
  368. <DT><img src=ff>Fast forward the animation by 25 times the current time step
  369. </DL>
  370. The current time step is selected by the time slider.
  371. <P>
  372. When the animation is running
  373. <UL><LI>Click the left button on an object in the display window to view information about that object.
  374. <LI>Select "monitor" from the resulting popup window to <a href=help:monitors>monitor that object</a> over time.
  375. <LI>The "step" slider can be used to control how fast time flows in the animation.
  376. The "time" slider can be used to move to a specific point in time.
  377. </UL>
  378. <P>
  379. <hr>
  380. <i><a href=help:about>About Nam</a><I>
  381. "
  382. set help_text(monitors) "
  383. <H1>Nam Help: Monitors</H1>
  384. You can set monitors on various animation objects to examine 
  385. information about them over time.
  386. <H2>Packet Monitors</H2>
  387. To initiate a packet monitor, click the left button on the packet 
  388. you wish to examine.  Information that nam has about that packet 
  389. will then be displayed, and you are given the option to set a 
  390. monitor on the packet.
  391. <P>
  392. Setting a monitor on a packet labels the packet so that you can 
  393. more easily watch its flow through the network and through queues.
  394. An associated panel appears in the monitors window listing information 
  395. about the packet if the packet is visible.  
  396. <P>
  397. Click on the monitor panel for a packet to remove that monitor.
  398. <H2>Agent Monitors</H2>
  399. Protocol agents are displayed alongside the node they are 
  400. instantiated in.  To monitor an agent, click on it in the 
  401. network display, and select "monitor".
  402. Information about the agent will be displayed in the monitors 
  403. panel, and will be updated as protocol state in the agent 
  404. changes over time.
  405. <P>
  406. Click on the monitor panel for the agent to remove that monitor.
  407. <hr>
  408. <I><a href=help:help>Return to help index</a>
  409. "
  410. AnimControl instproc new_web {which} {
  411.     global help_text
  412.     if {[winfo exists .help]} {
  413. $self parse_html .help.text .help.f.ctl.e $help_text($which)
  414. return
  415.     }
  416.     toplevel .help
  417.     wm title  .help "About nam"
  418.     frame .help.f -relief groove -borderwidth 2
  419.     pack  .help.f -side top -fill both -expand true
  420.     frame .help.f.f
  421.     pack  .help.f.f -side top -fill both -expand true
  422.     text .help.f.f.w -width 60 -height 40 -wrap word -yscroll ".help.f.f.sb set"
  423.     bind .help.f.f.w <1> break
  424.     pack .help.f.f.w -side left -fill both -expand true
  425.     scrollbar .help.f.f.sb -command ".help.f.f.w yview"
  426.     pack .help.f.f.sb -side right -fill y
  427.     frame .help.f.ctl -borderwidth 2 -relief groove
  428.     pack .help.f.ctl -side top -fill x
  429.     label .help.f.ctl.l -text "go to:"
  430.     pack .help.f.ctl.l -side left
  431.     entry .help.f.ctl.e -width 20 -borderwidth 1 -relief sunken
  432.     pack .help.f.ctl.e -side left -fill x -expand true
  433.     button .help.f.ctl.b -borderwidth 1 -relief raised -text Dismiss 
  434.     -command {destroy .help}
  435.     pack .help.f.ctl.b -side left
  436.     $self parse_html .help.f.f.w .help.f.ctl.e $help_text($which)
  437. }
  438. #-----------------------------------------------------------------------
  439. # Creates nam console splash screen
  440. #-----------------------------------------------------------------------
  441. AnimControl instproc new_webhome {} {
  442.     global help_text
  443.     if {[winfo exists .help]} {
  444.         $self parse_html .help.f.f.w .help.f.ctl.e $help_text(hich)
  445.         return      
  446.     }           
  447.     set t [$self ScrolledText .help 60 15]
  448.     frame .help.f -relief groove -borderwidth 2
  449.     frame .help.f.ctl -borderwidth 2 -relief groove
  450.     entry .help.f.ctl.e -width 20 -borderwidth 1 -relief sunken
  451.     pack .help.f.ctl.e -side left -fill x -expand true
  452.     button .help.f.ctl.b -borderwidth 1 -relief raised -text Dismiss 
  453.             -command {destroy .help}
  454.     pack .help.f.ctl.b -side left
  455.     $self parse_html $t .help.f.ctl.e $help_text(home)
  456. }
  457. AnimControl instproc ScrolledText { f width height } {
  458.         frame $f
  459.         # The setgrid setting allows the window to be resized.
  460.         text $f.text -width $width -height $height 
  461.                 -setgrid true -wrap word 
  462.                 -xscrollcommand [list $f.xscroll set] 
  463.                 -yscrollcommand [list $f.yscroll set]
  464.         scrollbar $f.xscroll -orient horizontal 
  465.                 -command [list $f.text xview]
  466.         scrollbar $f.yscroll -orient vertical 
  467.                 -command [list $f.text yview]
  468.         pack $f.xscroll -side bottom -fill x
  469.         pack $f.yscroll -side right -fill y
  470.       
  471.         # The fill and expand are needed when resizing.
  472.         pack $f.text -side left -fill both -expand true
  473.         pack $f -side top -fill both -expand true
  474.         return $f.text
  475. }