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

通讯编程

开发平台:

Visual C++

  1. #
  2. # cplot -- "cooked" plot
  3. # merge multiple cooked trace files together, eventually
  4. # to produce a final plot:
  5. #
  6. # Usage: cplot package graph-title cfile1 cname1 [cfile2 cname 2] ...
  7. #
  8. # this will take cooked trace files cfile{1,2,...}
  9. # and merge them into a combined graph of the type defined in
  10. # "package".  for now, package is either xgraph or gnuplot
  11. #
  12. # Sources for gnuplot, as of 10/20/97:
  13. #  gnuplot3.5: ftp://ftp.dartmouth.edu/pub/gnuplot/
  14. # gnuplot3.6beta: ftp://cmpc1.phys.soton.ac.uk/pub
  15. # gnuplot3.6beta-mirror: http://www.nas.nasa.gov/~woo/gnuplot/beta/
  16. set labelproc(xgraph) xgraph_label
  17. set labelproc(gnuplot) gnuplot_label
  18. set headerproc(xgraph) xgraph_header
  19. set headerproc(gnuplot) gnuplot_header
  20. set filext(xgraph) xgr
  21. set filext(gnuplot) plt
  22. set package default; # graphics package to use
  23. if { $argc < 4 || [expr $argc & 1] } {
  24. puts stderr "Usage: tclsh cplot graphics-package graph-title cfile1 cname1 [cfile2 cname2] ..."
  25. exit 1
  26. }
  27. proc init {} {
  28. global tmpchan tmpfile
  29. set tmpfile /tmp/[pid].tmp
  30. set tmpchan [open $tmpfile w+]
  31. }
  32. proc cleanup {} {
  33. global tmpchan tmpfile package filext
  34. seek $tmpchan 0 start
  35. exec cat <@ $tmpchan >@ stdout
  36. close $tmpchan
  37. exec rm -f $tmpfile
  38. }
  39. proc run {} {
  40. global labelproc headerproc package argv tmpchan
  41. init
  42. set package [lindex $argv 0]
  43. set title [lindex $argv 1]
  44. if { ![info exists labelproc($package)] } {
  45. puts stderr "cplot: invalid output package $package, known packages: [array names labelproc]"
  46. exit 1
  47. }
  48. set ifile 2
  49. set iname 3
  50. $headerproc($package) $tmpchan $title
  51. while {1} {
  52. set fname [lindex $argv $ifile]
  53. set label [lindex $argv $iname]
  54. if { $fname == "" || $label == "" } {
  55. break
  56. }
  57. do_file $fname $label $package $tmpchan
  58. incr ifile 2
  59. incr iname 2
  60. }
  61. cleanup
  62. }
  63. proc do_file { fname label graphtype tmpchan } {
  64. global labelproc
  65. $labelproc($graphtype) $tmpchan $label $fname
  66. }
  67. #
  68. # xgraph-specific stuff
  69. #
  70. proc xgraph_header { tmpchan title } {
  71.         puts $tmpchan "TitleText: $title"
  72.         puts $tmpchan "Device: Postscript"
  73. puts $tmpchan "BoundBox: true"
  74. puts $tmpchan "Ticks: true"
  75. puts $tmpchan "Markers: true"
  76. puts $tmpchan "NoLines: true"
  77. puts $tmpchan "XUnitText: time"
  78. puts $tmpchan "YUnitText: sequence/ack number"
  79. }
  80. proc xgraph_label { tmpchan label fname } {
  81. puts $tmpchan n"$label
  82. exec cat $fname >@ $tmpchan
  83. }
  84. #
  85. # gnuplot-specific stuff
  86. #
  87. proc gnuplot_header { tmpchan title } {
  88. puts $tmpchan "set title '$title'"
  89. puts $tmpchan "set xlabel 'time'"
  90. puts $tmpchan "set ylabel 'sequence/ack number'"
  91. puts $tmpchan "set grid"
  92. global gnu_first_time gnu_label_index
  93. set gnu_first_time 1
  94. set gnu_label_index 1
  95. }
  96. proc gnuplot_label { tmpchan label fname } {
  97. global gnu_first_time gnu_label_index
  98. if { $gnu_first_time } {
  99. puts $tmpchan "plot '$fname' title '$label' w points $gnu_label_index 2"
  100. set gnu_first_time 0
  101. } else {
  102. puts $tmpchan "replot '$fname' title '$label' w points $gnu_label_index 2"
  103. }
  104. incr gnu_label_index
  105. }
  106. run