#!/usr/local/bin/bltwish -f

# 
#   ttt variables 
#
### set interface to use
#set ttt_interface "le0"
### set colors to use
#set ttt_colors "red green blue cyan magenta yellow"
### set interval in milli second
#set ttt_interval 2000  
### set no host name translation
#set ttt_nohostname 1
### set udp port number
#set ttt_portno	6544
### set address
#set ttt_viewaddr 224.6.6.6
### set labels of graph axis
#set ttt_x_label = "Time (sec)"
#set ttt_y_label = "Traffic (Mbps)"
#
# set blt library path
#
if { [file exists /usr/local/blt/lib/blt2.1] } {
    global blt_library
    set blt_library /usr/local/blt/lib/blt2.1
}
if { [file exists /usr/local/lib/blt2.4] } {
    global blt_library
    set blt_library /usr/local/lib/blt2.4
}
global auto_path
lappend auto_path $blt_library

# Try to import the blt namespace into the global scope.  If it
# fails, we'll assume BLT was loaded into the global scope.

if { $tcl_version >= 8.0 } {
    catch {namespace import blt::*} 
} else {
    catch { import add blt }
}

#	Add a binding for convenience to let you exit with pressing 
#	the "quit" button.

wm protocol . WM_DELETE_WINDOW { DoExit 0 }
bind all <Control-KeyPress-c> { DoExit 0 } 
bind all <KeyPress-q> { DoExit 0 }
focus .

proc DoExit { code } {
    exit $code
}

if { [info commands "namespace"] == "namespace" } {
    if { $tcl_version >= 8.0 } {
	catch {namespace import -force blt::tile::*} 
    } else {
	catch { import add blt::tile }
    }
} else {
    foreach cmd { button checkbutton radiobutton frame label 
	scrollbar toplevel menubutton listbox } {
	if { [info command tile${cmd}] == "tile${cmd}" } {
	    rename ${cmd} ""
	    rename tile${cmd} ${cmd}
	}
    }
}

#image create photo bgTexture -file ./bitmaps/rain.gif

#option add *Graph.Tile			bgTexture
#option add *Label.Tile			bgTexture
#option add *Frame.Tile			bgTexture
#option add *Htext.Tile			bgTexture
option add *TileOffset			0
option add *HighlightThickness		0
option add *takeFocus			yes

set visual [winfo screenvisual .] 
if { $visual != "staticgray" } {
    option add *print.background yellow
    option add *quit.background red
}

proc FormatLabel { w value } {
    puts stderr "tick is $value"
    return $value
}

frame .f
set remote {}
set graph .graph
set graph2 .graph2
set num 0

graph $graph -title "Protocol Breakdown" -bufferelements false -plotbackground gray90
$graph xaxis configure \
	-loose 1 \
	-title $ttt_x_label 
$graph yaxis configure \
	-title $ttt_y_label
# to disable auto scale, specify the range by "-min" and "-max" 
# $graph yaxis configure -title $ttt_y_label -min 0 -max 5
$graph legend configure \
	-activerelief sunken \
	-background ""

graph $graph2 -title "Host Breakdown" -bufferelements false -plotbackground gray90
$graph2 xaxis configure \
	-loose 1 \
	-title $ttt_x_label
$graph2 yaxis configure \
	-title $ttt_y_label
# to disable auto scale, specify the range by "-min" and "-max" 
# $graph2 yaxis configure -title $ttt_y_label -min 0 -max 5
$graph2 legend configure \
	-activerelief sunken \
	-background ""

htext .footer -text {\
Hit the %%
button $htext(widget).quit -text quit -command { 
    send [winfo name .] {ttt cleanup}
    catch "send GraphConfig after 1 exit" 
    exit
} 
$htext(widget) append $htext(widget).quit 
%% button when you've seen enough.
To create postscript files "/tmp/{proto_*, host_*}.ps", 
press the %%
    button $htext(widget).print -text print -command {
        .graph postscript output "/tmp/proto_${num}.ps" \
	     -maxpect 1 -landscape 0 -center 1 -decorations 0
        .graph2 postscript output "/tmp/host_${num}.ps" \
	     -maxpect 1 -landscape 0 -center 1 -decorations 0
	incr num
    } 
    $htext(widget) append $htext(widget).print
%% button.}

# vectors X:time  P:protocols  H:hosts
if { $blt_version == 2.1 } {
    vector X 
    vector P0 P1 P2 P3 P4 P5 
    vector H0 H1 H2 H3 H4 H5
} else {
    # blt_version >= 2.3
    vector create X -variable ""
    for { set i 0 } { $i <= 5 } {incr i } {
	vector create P${i} -variable ""
	vector create H${i} -variable ""
    }
}

$graph element create p0 -xdata X -ydata P0 \
    -symbol none -label "" -color red
$graph element create p1 -xdata X -ydata P1 \
    -symbol none -label "" -color green -dashes { 8 4 }
$graph element create p2 -xdata X -ydata P2 \
    -symbol none -label "" -color blue -dashes { 5 4 }
$graph element create p3 -xdata X -ydata P3 \
    -symbol none -label "" -color orange -dashes { 3 5 }
$graph element create p4 -xdata X -ydata P4 \
    -symbol none -label "" -color purple -dashes { 3 6 }
$graph element create p5 -xdata X -ydata P5 \
    -symbol none -label "" -color yellow -dashes { 2 9 }

$graph2 element create h0 -xdata X -ydata H0 \
    -symbol none -label "" -color red
$graph2 element create h1 -xdata X -ydata H1 \
    -symbol none -label "" -color green -dashes { 8 4 }
$graph2 element create h2 -xdata X -ydata H2 \
    -symbol none -label "" -color blue -dashes { 5 4 }
$graph2 element create h3 -xdata X -ydata H3 \
    -symbol none -label "" -color orange -dashes { 3 5 }
$graph2 element create h4 -xdata X -ydata H4 \
    -symbol none -label "" -color purple -dashes { 3 6 }
$graph2 element create h5 -xdata X -ydata H5 \
    -symbol none -label "" -color yellow -dashes { 2 8 }


# capture stat:
set ttt_packets "0"
set ttt_drops "0"
set ttt_reportdrops "0"
label .packets -textvariable ttt_packets
label .drops -textvariable ttt_drops
label .reportdrops -textvariable ttt_reportdrops

htext .stat -text {\
pcap stat: recv [ %%
label $htext(widget).packets -textvariable ttt_packets
$htext(widget) append $htext(widget).packets \
%%] \
drop [ %%
label $htext(widget).drops -textvariable ttt_drops
$htext(widget) append $htext(widget).drops \
%%]
 ttt report: lost [ %%
label $htext(widget).reportdrops -textvariable ttt_reportdrops
$htext(widget) append $htext(widget).reportdrops \
%%] \
}


# ttt message shown at the bottom of the window
set ttt_message ""
label .bottomlabel -textvariable ttt_message -fg yellow

table .f \
    .graph 0,0  \
    .graph2 1,0  \
    .stat 2,0 -padx 20 \
    .footer 4,0 -padx 20 \
    .bottomlabel 5,0 -padx 30

table configure .f .graph .graph2 .stat \
	.footer .bottomlabel -fill both

table . .f -fill both
wm min . 0 0

#Blt_ZoomStack $graph
#Blt_Crosshairs $graph
#Blt_ActiveLegend $graph
#Blt_ClosestPoint $graph

#Blt_ZoomStack $graph2
#Blt_Crosshairs $graph2
#Blt_ActiveLegend $graph2
#Blt_ClosestPoint $graph2



syntax highlighted by Code2HTML, v. 0.9.1