5 print "Usage: $0 <options>\n";
7 where options are (in order):
9 NumberOfStreams How many streams to plot (windows)
10 Stream1_WindowSampleSize <Stream2...> This many window samples for each stream
11 Stream1_Title <Stream2_Title> ... Title used for each stream
12 (Optional) Stream1_geometry <Stream2_geometry>... X and Y position in pixels from the top left
14 The last parameters (the optionally provided geometries of the gnuplot windows)
16 WIDTHxHEIGHT+XOFF+YOFF
23 print "Expected parameter missing...\n\n";
31 my $numberOfStreams = Arg($argIdx++);
32 print "Will display $numberOfStreams Streams (in $numberOfStreams windows)...\n";
34 for(my $i=0; $i<$numberOfStreams; $i++) {
35 my $samples = Arg($argIdx++);
36 push @sampleSizes, $samples;
37 print "Stream ".($i+1)." will use a window of $samples samples\n";
40 for(my $i=0; $i<$numberOfStreams; $i++) {
41 my $title = Arg($argIdx++);
43 print "Stream ".($i+1)." will use a title of '$title'\n";
46 if ($#ARGV >= $argIdx) {
47 for(my $i=0; $i<$numberOfStreams; $i++) {
48 my $geometry = Arg($argIdx++);
49 push @geometries, $geometry;
50 print "Stream ".($i+1)." will use a geometry of '$geometry'\n";
54 open GNUPLOT_TERM, "echo 'show terminal;' | gnuplot 2>&1 |";
55 while (<GNUPLOT_TERM>) {
56 if (m/terminal type is (\w+)/) {
62 # unfortunately, the wxt terminal type does not support positioning.
68 my $x_space = 5; # gnuplot needs some space
75 my ($x_size, $y_size) = ( 1,1 );
77 foreach my $title (@titles) {
78 if ( $title =~ m/,$/ ) {
79 $y_size = $vertical if $vertical > $y_size;
87 $y_size = $vertical if $vertical > $y_size;
88 print "# grid $x_size x $y_size\n";
90 my $info = `xwininfo -root`;
91 if ( $info =~ m/-geometry (\d+)x(\d+)/ ) {
92 my ( $x_screen, $y_screen ) = ( $1, $2 );
93 $w = int( ( $x_screen - ( 2 * $x_start ) - ( ($x_size-1) * $x_space ) ) / $x_size );
94 $h = int( ( $y_screen - ( 2 * $y_start ) - ( ($y_size-1) * $y_space ) ) / $y_size );
95 print "# graph size $w x $h\n";
98 #@sampleSizes = ( $w x $numberOfStreams );
103 shift @ARGV; # number of streams
104 for(my $i=0; $i<$numberOfStreams; $i++) {
105 shift @ARGV; # sample size
107 shift @ARGV; # geometry
110 my $geometry = "${w}x${h}+${x}+${y}";
111 $geometries[$i] = $geometry;
112 print "# $i $titles[$i] $geometry\n";
113 $geometry = " -geometry $geometry";
115 if ( $titles[$i] =~ s/,$// ) {
122 open PIPE, "|gnuplot $geometry " || die "Can't initialize gnuplot number ".($i+1)."\n";
123 select((select(PIPE), $| = 1)[0]);
124 push @gnuplots, *PIPE;
125 print PIPE "set xtics\n";
126 print PIPE "set ytics\n";
127 # print PIPE "set style data linespoints\n";
128 print PIPE "set style data lines\n";
129 print PIPE "set grid\n";
130 if ($numberOfStreams == 1) {
131 print PIPE "set terminal $terminal title '".$titles[0]."' noraise\n";
133 print PIPE "set terminal $terminal noraise\n";
135 print PIPE "set autoscale\n";
137 push @buffers, @data;
141 select((select(STDOUT), $| = 1)[0]);
144 my @parts = split /:/;
145 $streamIdx = $parts[0];
146 my $buf = $buffers[$streamIdx];
147 my $pip = $gnuplots[$streamIdx];
148 my $xcounter = $xcounters[$streamIdx];
149 my $title = $titles[$streamIdx];
151 # data buffering (up to stream sample size)
152 push @{$buf}, $parts[1];
153 #print "stream $streamIdx: ";
154 print $pip "set xrange [".($xcounter-$sampleSizes[$streamIdx]).":".($xcounter+1)."]\n";
155 if ($numberOfStreams == 1) {
156 print $pip "plot \"-\"\n";
158 print $pip "plot \"-\" title '$title'\n";
161 for my $elem (reverse @{$buf}) {
163 print $pip ($xcounter-$cnt)." ".$elem."\n";
168 if ($cnt>=$sampleSizes[$streamIdx]) {
171 $xcounters[$streamIdx]++;
173 for(my $i=0; $i<$numberOfStreams; $i++) {
174 my $pip = $gnuplots[$i];
175 print $pip "exit;\n";