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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 1993-1998 Regents of the University of California.
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. # This product includes software developed by the Computer Systems
  16. # Engineering Group at Lawrence Berkeley Laboratory.
  17. # 4. Neither the name of the University nor of the Laboratory may be used
  18. #    to endorse or promote products derived from this software without
  19. #    specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. # SUCH DAMAGE.
  32. #
  33. # @(#) $Header: /cvsroot/nsnam/nam-1/tcl/nam-lib.tcl,v 1.23 2001/08/17 02:12:40 mehringe Exp $ (LBL)
  34. #
  35. proc time2real v {
  36. global uscale
  37. foreach u [array names uscale] {
  38. set k [string first $u $v]
  39. if { $k >= 0 } {
  40. set scale $uscale($u)
  41. break
  42. }
  43. }
  44. if { $k > 0 } {
  45. set v [string range $v 0 [expr $k - 1]]
  46. set v [expr $scale * $v]
  47. }
  48. return $v
  49. }
  50. #XXX
  51. proc bw2real v {
  52. return [time2real $v]
  53. }
  54. proc step_format t {
  55. if { $t < 1e-3 } {
  56. return [format "%.1f" [expr $t * 1e6]]us
  57. } elseif { $t < 1. } {
  58. return [format "%.1f" [expr $t * 1e3]]ms
  59. }
  60. return [format "%.1f" $t]s
  61. }
  62. proc yesno attr {
  63. set v [resource $attr]
  64. if { [string match [0-9]* $v] } {
  65. return $v
  66. }
  67. if { $v == "true" || $v == "True" || $v == "t" || $v == "y" ||
  68. $v == "yes" } {
  69. return 1
  70. }
  71. return 0
  72. }
  73. proc resource s {
  74. return [option get . $s Nam]
  75. }
  76. #XXX
  77. proc mapf s { return $s }
  78. # XXX
  79. # I got a problem with the font setups in nam.tcl. Currently they are added
  80. # into the Tk option database by "option add Nam.<name> <font name>
  81. # <priority>" It seems to me that this requires the application name (as    
  82. # initialized in Tk_Init() or set by Tk_SetAppName) to be "nam".
  83. #
  84. # This is not desirable, however, because sometimes when we need to compare
  85. # two trace files, we'd like to use the peer functionality to synchronize   
  86. # the execution of two nam instances. It requires that different nam
  87. # instances have different application names. When I allow 
  88. # customized application names, I found that nam no longer recognizes the   
  89. # font resources, e.g., Nam.smallfont. Then I put all the following setups 
  90. # starting with "Nam." into the following function. 
  91. # Q: Is this harmful? Any better ideas?
  92. proc set_app_options { name } {
  93. global helv10 helv10b helv10o helv12 helv12b helv14 helv14b times14 
  94. ff tcl_platform
  95. option add $name.foundry adobe startupFile
  96. set ff [option get . foundry $name]
  97. set helv10 [mapf "-$ff-helvetica-medium-r-normal--*-100-75-75-*-*-*-*"]
  98. set helv10b [mapf "-$ff-helvetica-bold-r-normal--*-100-75-75-*-*-*-*"]
  99. set helv10o [mapf "-$ff-helvetica-bold-o-normal--*-100-75-75-*-*-*-*"]
  100. set helv12 [mapf "-$ff-helvetica-medium-r-normal--*-120-75-75-*-*-*-*"]
  101. set helv12b [mapf "-$ff-helvetica-bold-r-normal--*-120-75-75-*-*-*-*"]
  102. set helv14 [mapf "-$ff-helvetica-medium-r-normal--*-140-75-75-*-*-*-*"]
  103. set helv14b [mapf "-$ff-helvetica-bold-r-normal--*-140-75-75-*-*-*-*"]
  104. set times14 [mapf  "-$ff-times-medium-r-normal--*-140-75-75-*-*-*-*"]
  105. if {$tcl_platform(platform)!="windows"} {
  106. option add *font $helv12b startupFile
  107. option add *Font $helv12b startupFile
  108. }
  109.         option add *Balloon*background yellow widgetDefault
  110.         option add *Balloon*foreground black widgetDefault
  111.         option add *Balloon.info.wrapLegnth 3i widgetDefault
  112.         option add *Balloon.info.justify left widgetDefault
  113.         option add *Balloon.info.font 
  114.                 [mapf "-$ff-lucida-medium-r-normal-sans-*-120-*"] widgetDefault
  115. option add $name.disablefont $helv10o startupFile
  116. option add $name.smallfont $helv10b startupFile
  117. option add $name.medfont $helv12b  startupFile
  118. option add $name.helpFont $times14 startupFile
  119. option add $name.entryFont $helv10 startupFile
  120. option add $name.rate 2ms startupFile
  121. option add $name.movie 0 startupFile
  122. option add $name.granularity 40 startupFile
  123. option add $name.pause 1 startupFile
  124. }
  125. if {$tcl_platform(platform)!="windows"} {
  126. option add *foreground black startupFile
  127. option add *background gray80 startupFile
  128. option add *activeForeground black startupFile
  129. option add *activeBackground gray90 startupFile
  130. option add *viewBackground gray90 startupFile
  131. option add *disabledForeground gray50 startupFile
  132.     
  133. } else {
  134. # We need a default foreground for dialog boxes 
  135. # (checkfile in menu_file.tcl)
  136. option add *foreground SystemButtonText startupFile
  137. option add *background SystemButtonFace startupFile
  138. option add *viewBackground SystemButtonHighlight startupFile
  139. option add *activeForeground SystemHighlightText startupFile
  140. option add *activeBackground SystemHighlight startupFile
  141. option add *disabledForeground SystemDisabledText startupFile
  142. }
  143. option add *Radiobutton.relief flat startupFile
  144. #
  145. # use 2 pixels of padding by default
  146. #
  147. option add *padX 2 startupFile
  148. option add *padY 2 startupFile
  149. #
  150. # don't put tearoffs in pull-down menus
  151. #
  152. option add *tearOff 0 startupFile
  153. proc smallfont { } {
  154. return [option get . smallfont Nam]
  155. }
  156. proc mediumfont { } {
  157. return [option get . medfont Nam]
  158. }
  159. #
  160. # helper functions
  161. #
  162. proc nam_angle { v } {
  163. switch -regexp $v {
  164.        ^[0-9.]+deg$    { regexp  {([0-9.]+)deg$} $v a dval
  165.                 return [expr {fmod($dval,360)/180}] }
  166. ^[0-9.]+$ { return $v }
  167. ^up-right$ -
  168. ^right-up$ { return 0.25 }
  169. ^up$ { return 0.5 }
  170. ^up-left$ -
  171. ^left-up$ { return 0.75 }
  172. ^left$ { return 1. }
  173. ^left-down$ -
  174. ^down-left$ { return 1.25 }
  175. ^down$ { return 1.5 }
  176. ^down-right$ -
  177. ^right-down$ { return 1.75 }
  178. default { return 0.0 }
  179. }
  180. }
  181. proc remote_cmd { async interp cmd } {
  182. if $async {
  183. set rcmd "send -async "$interp" {$cmd}"
  184. } else {
  185. set rcmd "send "$interp" {$cmd}"
  186. }
  187. eval $rcmd
  188. }
  189. proc get_trace_item { tag traceevent} {
  190.     set next 0
  191.     foreach item $traceevent {
  192. if { $next == 1 } {
  193.     return $item
  194. }
  195. if { $item == $tag } {
  196.     set next 1
  197.     }
  198.     return ""
  199. }
  200. # Place a frame at (x, y)
  201. proc place_frame { w f x y } {
  202. # Place popup menu. Copied from start_info()
  203. set nh [winfo height $w]
  204. set nw [winfo width $w]
  205. place $f -x $nw -y $nh -bordermode outside
  206. update
  207. set ih [winfo reqheight $f]
  208. set iw [winfo reqwidth $f]
  209. set px $x
  210. set py $y
  211. if {($px + $iw) > $nw} {
  212. set px [expr $x - $iw]
  213. if {$px < 0} { set px 0 }
  214. }
  215. if {($py + $ih) > $nh} {
  216. set py [expr $y - $ih]
  217. if {$py < 0} {set py 0}
  218. }
  219. place $f -x $px -y $py -bordermode outside
  220. }
  221. # Sourcing various TCL scripts
  222. # In order to be expanded, there shouldn't be any spaces, etc., after 
  223. # file names
  224. source anim-ctrl.tcl
  225. source animator.tcl
  226. source balloon.tcl
  227. source snapshot.tcl
  228. source autoNetModel.tcl
  229. source annotation.tcl
  230. source node.tcl
  231. source netModel.tcl
  232. source menu_file.tcl
  233. source menu_view.tcl
  234. source monitor.tcl
  235. source www.tcl
  236. source build-ui.tcl
  237. source stats.tcl
  238. source observer.tcl
  239. source observable.tcl
  240. source wirelessNetModel.tcl
  241. source NamgraphView.tcl
  242. source NamgraphModel.tcl
  243. source TimesliderModel.tcl
  244. source TimesliderView.tcl
  245. source TimesliderNamgraphView.tcl
  246. source Editor.tcl
  247. #source EditorMenu.tcl
  248. source Editor-FileParser.tcl
  249. source editorNetModel.tcl
  250. source nam-default.tcl
  251. proc nam_init { trace_file args } {
  252.         # Create animation control object
  253.         # anim-ctrl.tcl: AnimControl instproc init{}
  254. set actrl [new AnimControl $trace_file $args]
  255. # User-defined initialization hook
  256. nam_init_hook
  257. }
  258. # XXX
  259. # User-defined initialization hook. Perhaps we need an OO approach here?
  260. proc nam_init_hook {} {
  261. }
  262. # Random number generator initialization
  263. set defaultRNG [new RNG]
  264. $defaultRNG seed 1
  265. $defaultRNG default
  266. #
  267. # Because defaultRNG is not a bound variable but is instead
  268. # just copied into C++, we enforce this.
  269. # (A long-term solution be to make defaultRNG bound.)
  270. # --johnh, 30-Dec-97
  271. #
  272. trace variable defaultRNG w { abort "cannot update defaultRNG once assigned"; }