head	1.1;
branch	1.1.1;
access;
symbols
	RELENG_8_4:1.1.1.1.0.76
	RELENG_9_1_0_RELEASE:1.1.1.1
	RELENG_9_1:1.1.1.1.0.74
	RELENG_9_1_BP:1.1.1.1
	RELENG_8_3_0_RELEASE:1.1.1.1
	RELENG_8_3:1.1.1.1.0.72
	RELENG_8_3_BP:1.1.1.1
	RELENG_9_0_0_RELEASE:1.1.1.1
	RELENG_9_0:1.1.1.1.0.70
	RELENG_9_0_BP:1.1.1.1
	RELENG_9:1.1.1.1.0.68
	RELENG_9_BP:1.1.1.1
	RELENG_7_4_0_RELEASE:1.1.1.1
	RELENG_8_2_0_RELEASE:1.1.1.1
	RELENG_7_4:1.1.1.1.0.66
	RELENG_7_4_BP:1.1.1.1
	RELENG_8_2:1.1.1.1.0.64
	RELENG_8_2_BP:1.1.1.1
	RELENG_8_1_0_RELEASE:1.1.1.1
	RELENG_8_1:1.1.1.1.0.62
	RELENG_8_1_BP:1.1.1.1
	RELENG_7_3_0_RELEASE:1.1.1.1
	RELENG_7_3:1.1.1.1.0.60
	RELENG_7_3_BP:1.1.1.1
	RELENG_8_0_0_RELEASE:1.1.1.1
	RELENG_8_0:1.1.1.1.0.58
	RELENG_8_0_BP:1.1.1.1
	RELENG_8:1.1.1.1.0.56
	RELENG_8_BP:1.1.1.1
	RELENG_7_2_0_RELEASE:1.1.1.1
	RELENG_7_2:1.1.1.1.0.54
	RELENG_7_2_BP:1.1.1.1
	RELENG_7_1_0_RELEASE:1.1.1.1
	RELENG_6_4_0_RELEASE:1.1.1.1
	RELENG_7_1:1.1.1.1.0.52
	RELENG_7_1_BP:1.1.1.1
	RELENG_6_4:1.1.1.1.0.50
	RELENG_6_4_BP:1.1.1.1
	RELENG_7_0_0_RELEASE:1.1.1.1
	RELENG_6_3_0_RELEASE:1.1.1.1
	RELENG_7_0:1.1.1.1.0.48
	RELENG_7_0_BP:1.1.1.1
	RELENG_6_3:1.1.1.1.0.46
	RELENG_6_3_BP:1.1.1.1
	v4-1-28:1.1.1.1
	RELENG_7:1.1.1.1.0.44
	RELENG_7_BP:1.1.1.1
	v4-1-23:1.1.1.1
	RELENG_6_2_0_RELEASE:1.1.1.1
	RELENG_6_2:1.1.1.1.0.42
	RELENG_6_2_BP:1.1.1.1
	v4-1-13:1.1.1.1
	RELENG_5_5_0_RELEASE:1.1.1.1
	RELENG_5_5:1.1.1.1.0.40
	RELENG_5_5_BP:1.1.1.1
	RELENG_6_1_0_RELEASE:1.1.1.1
	RELENG_6_1:1.1.1.1.0.38
	RELENG_6_1_BP:1.1.1.1
	v4-1-10:1.1.1.1
	RELENG_6_0_0_RELEASE:1.1.1.1
	RELENG_6_0:1.1.1.1.0.36
	RELENG_6_0_BP:1.1.1.1
	RELENG_6:1.1.1.1.0.34
	RELENG_6_BP:1.1.1.1
	RELENG_5_4_0_RELEASE:1.1.1.1
	v4-1-8:1.1.1.1
	RELENG_5_4:1.1.1.1.0.32
	RELENG_5_4_BP:1.1.1.1
	RELENG_4_11_0_RELEASE:1.1.1.1
	RELENG_4_11:1.1.1.1.0.30
	RELENG_4_11_BP:1.1.1.1
	RELENG_5_3_0_RELEASE:1.1.1.1
	RELENG_5_3:1.1.1.1.0.28
	RELENG_5_3_BP:1.1.1.1
	RELENG_5:1.1.1.1.0.26
	RELENG_5_BP:1.1.1.1
	v3-4-35:1.1.1.1
	RELENG_4_10_0_RELEASE:1.1.1.1
	RELENG_4_10:1.1.1.1.0.24
	RELENG_4_10_BP:1.1.1.1
	RELENG_5_2_1_RELEASE:1.1.1.1
	RELENG_5_2_0_RELEASE:1.1.1.1
	RELENG_5_2:1.1.1.1.0.22
	RELENG_5_2_BP:1.1.1.1
	RELENG_4_9_0_RELEASE:1.1.1.1
	RELENG_4_9:1.1.1.1.0.20
	RELENG_4_9_BP:1.1.1.1
	RELENG_5_1_0_RELEASE:1.1.1.1
	RELENG_5_1:1.1.1.1.0.18
	RELENG_5_1_BP:1.1.1.1
	RELENG_4_8_0_RELEASE:1.1.1.1
	RELENG_4_8:1.1.1.1.0.16
	RELENG_4_8_BP:1.1.1.1
	v3-4-31:1.1.1.1
	RELENG_5_0_0_RELEASE:1.1.1.1
	RELENG_5_0:1.1.1.1.0.14
	RELENG_5_0_BP:1.1.1.1
	RELENG_4_7_0_RELEASE:1.1.1.1
	RELENG_4_7:1.1.1.1.0.12
	RELENG_4_7_BP:1.1.1.1
	v3-4-29:1.1.1.1
	RELENG_4_6_2_RELEASE:1.1.1.1
	RELENG_4_6_1_RELEASE:1.1.1.1
	RELENG_4_6_0_RELEASE:1.1.1.1
	v3-4-28:1.1.1.1
	RELENG_4_6:1.1.1.1.0.10
	RELENG_4_6_BP:1.1.1.1
	v3-4-27:1.1.1.1
	v3-4-26:1.1.1.1
	v3-4-25:1.1.1.1
	RELENG_4_5_0_RELEASE:1.1.1.1
	RELENG_4_5:1.1.1.1.0.8
	RELENG_4_5_BP:1.1.1.1
	RELENG_4_4_0_RELEASE:1.1.1.1
	RELENG_4_4:1.1.1.1.0.6
	RELENG_4_4_BP:1.1.1.1
	v3-4-20:1.1.1.1
	RELENG_4_3_0_RELEASE:1.1.1.1
	RELENG_4_3:1.1.1.1.0.4
	RELENG_4_3_BP:1.1.1.1
	v3-4-16:1.1.1.1
	rev:1.1.1.1
	RELENG_4_2_0_RELEASE:1.1.1.1
	v3-4-13:1.1.1.1
	v3-4-12:1.1.1.1
	RELENG_4_1_1_RELEASE:1.1.1.1
	PRE_SMPNG:1.1.1.1
	v3-4-9:1.1.1.1
	RELENG_4_1_0_RELEASE:1.1.1.1
	v3-4-8:1.1.1.1
	v3_4_4:1.1.1.1
	RELENG_4_0_0_RELEASE:1.1.1.1
	RELENG_4:1.1.1.1.0.2
	RELENG_4_BP:1.1.1.1
	v3_3_8:1.1.1.1
	v3_3_6:1.1.1.1
	v3_3_3:1.1.1.1
	DARRENR:1.1.1;
locks; strict;
comment	@# @;


1.1
date	99.11.08.20.51.06;	author guido;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	99.11.08.20.51.06;	author guido;	state Exp;
branches
	1.1.1.1.76.1;
next	;

1.1.1.1.76.1
date	99.11.08.20.51.06;	author svnexp;	state dead;
branches;
next	1.1.1.1.76.2;

1.1.1.1.76.2
date	2013.03.28.13.01.21;	author svnexp;	state Exp;
branches;
next	;


desc
@@


1.1
log
@Initial revision
@
text
@#!/usr/local/bin/perl

# isbgraph
# an example in not so hot perl programming....
# based around GraphMaker from Fabrizio Pivari
# A graph maker perl script

use GD;
use Getopt::Long;
$hr=0;

sub main{

$opt_conf="./graphmaker.cnf";

@@elem=("NUMBERYCELLGRIDSIZE","MAXYVALUE","MINYVALUE","XCELLGRIDSIZE","XMAX",
       "Data","Graph","Bar","Average","Graphnum","Title","Transparent","Rbgcolour",
       "Gbgcolour","Bbgcolour","Rfgcolour","Gfgcolour","Bfgcolour","Rcolour",
       "Gcolour","Bcolour","Racolour","Gacolour","Bacolour");

%option=(
      NUMBERYCELLGRIDSIZE => '8',
      MAXYVALUE => '7748',
      MINYVALUE => '6500',
      XCELLGRIDSIZE => '18',
      XMAX => '1000',
      Data => './graphmaker.dat',
      Graph => './graphmaker.gif',
      Bar => '1',
      Average => '1',
      Graphnum => '1',
      Title => 'GraphMaker 2.1',
      Transparent => 'yes',
      Rbgcolour => '255',
      Gbgcolour => '255',
      Bbgcolour => '255',
      Rfgcolour => '0',
      Gfgcolour => '0',
      Bfgcolour => '0',
      Rcolour => '0',
      Gcolour => '0',
      Bcolour => '255',
      Racolour => '255',
      Gacolour => '255',
      Bacolour => '0');

&GetOptions("conf=s","help") || &printusage ;


if ($opt_help) {&printusage};

open (CNF, $opt_conf) || die;
while (<CNF>) {
s/\t/ /g;  #replace tabs by space
next if /^\s*\#/; #ignore comment lines
next if /^\s*$/;  #ignore empty lines
foreach $elem (@@elem)
   {
   if (/\s*$elem\s*:\s*(.*)/) { $option{$elem}=$1; }
   }
}
close(CNF);
#########################################
#
#
#
#       number datapoints/24 hours is 1440 (minutes)
#
#       Split into N graphs where each graph has max of 240 datapoints (4 hours)
# 

$barset=0;
$m=0;
$YGRIDSIZE = 400;
$YCELLGRIDSIZE = $YGRIDSIZE/$option{'NUMBERYCELLGRIDSIZE'};
$XINIT = 30;
$XEND = 8;
$YINIT =20;
$YEND = 20;
#$XGRIDSIZE = ($option{'XMAX'}*$option{'XCELLGRIDSIZE'});
#$XGRIDSIZE = (240*$option{'XCELLGRIDSIZE'});
$XGRIDSIZE = 620;
$XGIF = $XGRIDSIZE + $XINIT + $XEND;
$XGRAPH = $XGRIDSIZE + $XINIT;
$YGIF = $YGRIDSIZE + $YEND + $YINIT;
$YGRAPH = $YGRIDSIZE + $YINIT;
$RANGE=$option{'MAXYVALUE'}-$option{'MINYVALUE'};
$SCALE=$YGRIDSIZE/$RANGE;

# NEW IMAGE
   $im=new GD::Image($XGIF,$YGIF);

$white=$im->colorAllocate(255,255,255);
$black=$im->colorAllocate(0,0,0);
$pink=$im->colorAllocate(255,153,153);
$red=$im->colorAllocate(255,0,0);
$blue=$im->colorAllocate(0,0,255);
$green=$im->colorAllocate(0,192,51);
$orange=$im->colorAllocate(255,102,0);
$pink=$im->colorAllocate(255,153,153);
$teal=$im->colorAllocate(51,153,153);
# gif background is $bg
   $bg=$white;
   $fg=$blue;
# LINE COLOUR HELP BY VAR $colour
   $colour=$red;
   $acolour=$yellow;
   # GRID
   if ($option{'Transparent'} eq "yes") {$im->transparent($bg)};
   $im->filledRectangle(0,0,$XGIF,$YGIF,$bg);

# Dot style
# vertical markers on Y axis grid
   $im->setStyle($fg,$bg,$bg,$bg);
   for $i (0..$option{'XMAX'})
      {
      $xspace= $XINIT+$option{'XCELLGRIDSIZE'}*$i +$i;
     # $im->line($xspace,$YINIT,$xspace,$YGRAPH,gdStyled);
      $num = $i+1;
      
      use integer;
     {
      $posis=$num - ($num/60)*60;
    }
      if ($posis eq 0)
         {
	   $outhr=0;
           $hr=($hr + 1) ;
	   $outhr=$hr+$option{'Graphnum'}*4;
#          shift minutes coords to correct stat hour!
           $im->string(gdMediumBoldFont,$xspace-3,$YGRAPH,"$outhr",$fg);
         }

      } # end of scan over X values (minutes)

   $YCELLVALUE=($option{'MAXYVALUE'}-$option{'MINYVALUE'})/$option{'NUMBERYCELLGRIDSIZE'};
   for $i (0..$option{'NUMBERYCELLGRIDSIZE'})
      {
      $num=$option{'MINYVALUE'}+$YCELLVALUE*($option{'NUMBERYCELLGRIDSIZE'}-$i);
      $im->string(gdMediumBoldFont,0,$YINIT+$YCELLGRIDSIZE*$i -6,"$num",$fg);
      }
   $im->string(gdSmallFont,$XGRIDSIZE/2-80,0,$option{'Title'},$fg);

   $odd_even = $option{'XCELLGRIDSIZE'}%2;
   #odd
   if ($odd_even eq 1) {$middle = $option{'XCELLGRIDSIZE'}/2 +0.5;}
   else {$middle = $option{'XCELLGRIDSIZE'}/2 +0.5;}

# start reading data
#   open (DATA,$option{'Data'}) || die "cant open $option{'Data'}";
# nextdata becomes Y on reading of second data set....
$nextdata="N";
@@datafiles=("./in.dat" , "./out.dat" );
   foreach  ( @@datafiles )
{
   $m=0;
   $count=0;
   $i=0;
   $fname=$_;
    
  print "fname $fname\n";
#  change entry for red in colour table to green for packets LEAVING target host

   open (DATA,$_) || die "cant open $_";
   print "$nextdata nextdata\n";
   while (<DATA>)
      {
      /(.*):(.*)/;
      if ($option{'Average'} eq 1) {$m+=$2;$i++;}
      if ($count eq 0){$XOLD=$1;$YOLD=$2;$count=1;next}
      $X=$1; $Y=$2;
# +($X-1) are the pixel of the line
      $xspace= $XINIT+$option{'XCELLGRIDSIZE'}*($X-1) +($X-1);
      $xspaceold= $XINIT+$option{'XCELLGRIDSIZE'}*($XOLD-1) +($XOLD-1);
      $yspace= $YGRAPH-($Y-$option{'MINYVALUE'})*$SCALE;
      $yspaceold= $YGRAPH-($YOLD-$option{'MINYVALUE'})*$SCALE;
      $barset=$option{'Bar'};
      if ($barset eq  0)
   {

     if($nextdata eq "Y")
     {
	
         #$im->line($XINIT,$YGRAPH,$X,$Y,$orange);
         $im->line($xspaceold,$yspaceold,$xspace,$yspace,$green);
     }
     else
     {
         $im->line($xspaceold,$yspaceold,$xspace,$yspace,$red);
     } 
    }
      else
         {
         if ($1 eq 2)
            {
            $im->filledRectangle($xspaceold,$yspaceold,
                                 $xspaceold+$middle,$YGRAPH,$colour);
            $im->rectangle($xspaceold,$yspaceold,
                           $xspaceold+$middle,$YGRAPH,$fg);
            }
         else
            {
            $im->filledRectangle($xspaceold-$middle,$yspaceold,
                                 $xspaceold+$middle,$YGRAPH,$colour);
            $im->rectangle($xspaceold-$middle,$yspaceold,
                           $xspaceold+$middle,$YGRAPH,$fg);
            }
         }
      $XOLD=$X; $YOLD=$Y;

      }  # end of while DATA loop

     $im->line(500,40,530,40,$red);
     $im->line(500,60,530,60,$green);
     $im->string(gdSmallFont,535,35,"Packets IN",$fg);
     $im->string(gdSmallFont,535,55,"Packets OUT",$fg);
     
   if ($option{'Bar'} ne 0)
      {
      if ($X eq $option{'XMAX'})
         {
         $im->filledRectangle($xspace-$middle,$yspace,
                              $xspace,$YGRAPH,$colour);
         $im->rectangle($xspace-$middle,$yspace,
                        $xspace,$YGRAPH,$fg);
         }
      else
         {
         $im->filledRectangle($xspace-$middle,$yspace,
                              $xspace+$middle,$YGRAPH,$colour);
         $im->rectangle($xspace-$middle,$yspace,
                        $xspace+$middle,$YGRAPH,$fg);
         }
      }
   close (DATA);


     $nextdata="Y";
# TOP LEFT is 0,0 on GIF (image)
# origin of plot is xinit,yinit 
 # print "little line\n";
     $im->line($xspace,$yspace,$xspace,$YGRAPH,$blue);
     $im->line($xspace,$YGRAPH,$XINIT,$YGRAPH,$blue);
#    (0,0) in cartesian space time=0 minutes, rate 0 packets/s
     $im->line($XINIT,$YGRAPH,$XINIT,$YGRAPH,$blue);
     $im->line($XINIT,$YGRAPH,$XINIT,$YGRAPH,$green);

} # close foreach loop on data file names




   if ($option{'Average'} eq 1)
      {
      # Line style
      $im->setStyle($acolour,$acolour,$acolour,$acolour,$bg,$bg,$bg,$bg);
      $m=$m/$i;
      $ym=$YGRAPH-($m-$option{'MINYVALUE'})*$SCALE;
      $im->line($XINIT,$ym,$XGRAPH,$ym,gdStyled)
      }
   $im->line($XINIT,$YINIT,$XINIT,$YGRAPH,$fg);
   $im->line($XINIT,$YINIT,$XGRAPH,$YINIT,$fg);
   $im->line($XGRAPH,$YINIT,$XGRAPH,$YGRAPH,$fg);
   $im->line($XINIT,$YGRAPH,$XGRAPH,$YGRAPH,$fg);

   $im->string(gdSmallFont,$XGIF-335,$YGIF - 12,"Time of Day (hours)",$fg);
   open (GRAPH,">$option{'Graph'}") || die "Error: Grafico.gif - $!\n";
   print GRAPH $im -> gif;
   close (GRAPH);




} # end of subroutine main

main;
exit(0);

sub printusage {
    print <<USAGEDESC;

usage:
        graphmaker [-options ...]

where options include:
    -help                        print out this message
    -conf  file                  the configuration file (default graphmaker.cnf)

If you want to know more about this tool, you might want
to read the docs. They came together with graphmaker!

Home: http://www.geocities.com/CapeCanaveral/Lab/3469/graphmaker.html

USAGEDESC
    exit(1);
}

@


1.1.1.1
log
@Import of ipfilter 3.3.3  in anticipation of its revival.
More to come in the next days.
@
text
@@


1.1.1.1.76.1
log
@file Isbgraph was added on branch RELENG_8_4 on 2013-03-28 13:01:21 +0000
@
text
@d1 297
@


1.1.1.1.76.2
log
@## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/248810
## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated
@
text
@a0 297
#!/usr/local/bin/perl

# isbgraph
# an example in not so hot perl programming....
# based around GraphMaker from Fabrizio Pivari
# A graph maker perl script

use GD;
use Getopt::Long;
$hr=0;

sub main{

$opt_conf="./graphmaker.cnf";

@@elem=("NUMBERYCELLGRIDSIZE","MAXYVALUE","MINYVALUE","XCELLGRIDSIZE","XMAX",
       "Data","Graph","Bar","Average","Graphnum","Title","Transparent","Rbgcolour",
       "Gbgcolour","Bbgcolour","Rfgcolour","Gfgcolour","Bfgcolour","Rcolour",
       "Gcolour","Bcolour","Racolour","Gacolour","Bacolour");

%option=(
      NUMBERYCELLGRIDSIZE => '8',
      MAXYVALUE => '7748',
      MINYVALUE => '6500',
      XCELLGRIDSIZE => '18',
      XMAX => '1000',
      Data => './graphmaker.dat',
      Graph => './graphmaker.gif',
      Bar => '1',
      Average => '1',
      Graphnum => '1',
      Title => 'GraphMaker 2.1',
      Transparent => 'yes',
      Rbgcolour => '255',
      Gbgcolour => '255',
      Bbgcolour => '255',
      Rfgcolour => '0',
      Gfgcolour => '0',
      Bfgcolour => '0',
      Rcolour => '0',
      Gcolour => '0',
      Bcolour => '255',
      Racolour => '255',
      Gacolour => '255',
      Bacolour => '0');

&GetOptions("conf=s","help") || &printusage ;


if ($opt_help) {&printusage};

open (CNF, $opt_conf) || die;
while (<CNF>) {
s/\t/ /g;  #replace tabs by space
next if /^\s*\#/; #ignore comment lines
next if /^\s*$/;  #ignore empty lines
foreach $elem (@@elem)
   {
   if (/\s*$elem\s*:\s*(.*)/) { $option{$elem}=$1; }
   }
}
close(CNF);
#########################################
#
#
#
#       number datapoints/24 hours is 1440 (minutes)
#
#       Split into N graphs where each graph has max of 240 datapoints (4 hours)
# 

$barset=0;
$m=0;
$YGRIDSIZE = 400;
$YCELLGRIDSIZE = $YGRIDSIZE/$option{'NUMBERYCELLGRIDSIZE'};
$XINIT = 30;
$XEND = 8;
$YINIT =20;
$YEND = 20;
#$XGRIDSIZE = ($option{'XMAX'}*$option{'XCELLGRIDSIZE'});
#$XGRIDSIZE = (240*$option{'XCELLGRIDSIZE'});
$XGRIDSIZE = 620;
$XGIF = $XGRIDSIZE + $XINIT + $XEND;
$XGRAPH = $XGRIDSIZE + $XINIT;
$YGIF = $YGRIDSIZE + $YEND + $YINIT;
$YGRAPH = $YGRIDSIZE + $YINIT;
$RANGE=$option{'MAXYVALUE'}-$option{'MINYVALUE'};
$SCALE=$YGRIDSIZE/$RANGE;

# NEW IMAGE
   $im=new GD::Image($XGIF,$YGIF);

$white=$im->colorAllocate(255,255,255);
$black=$im->colorAllocate(0,0,0);
$pink=$im->colorAllocate(255,153,153);
$red=$im->colorAllocate(255,0,0);
$blue=$im->colorAllocate(0,0,255);
$green=$im->colorAllocate(0,192,51);
$orange=$im->colorAllocate(255,102,0);
$pink=$im->colorAllocate(255,153,153);
$teal=$im->colorAllocate(51,153,153);
# gif background is $bg
   $bg=$white;
   $fg=$blue;
# LINE COLOUR HELP BY VAR $colour
   $colour=$red;
   $acolour=$yellow;
   # GRID
   if ($option{'Transparent'} eq "yes") {$im->transparent($bg)};
   $im->filledRectangle(0,0,$XGIF,$YGIF,$bg);

# Dot style
# vertical markers on Y axis grid
   $im->setStyle($fg,$bg,$bg,$bg);
   for $i (0..$option{'XMAX'})
      {
      $xspace= $XINIT+$option{'XCELLGRIDSIZE'}*$i +$i;
     # $im->line($xspace,$YINIT,$xspace,$YGRAPH,gdStyled);
      $num = $i+1;
      
      use integer;
     {
      $posis=$num - ($num/60)*60;
    }
      if ($posis eq 0)
         {
	   $outhr=0;
           $hr=($hr + 1) ;
	   $outhr=$hr+$option{'Graphnum'}*4;
#          shift minutes coords to correct stat hour!
           $im->string(gdMediumBoldFont,$xspace-3,$YGRAPH,"$outhr",$fg);
         }

      } # end of scan over X values (minutes)

   $YCELLVALUE=($option{'MAXYVALUE'}-$option{'MINYVALUE'})/$option{'NUMBERYCELLGRIDSIZE'};
   for $i (0..$option{'NUMBERYCELLGRIDSIZE'})
      {
      $num=$option{'MINYVALUE'}+$YCELLVALUE*($option{'NUMBERYCELLGRIDSIZE'}-$i);
      $im->string(gdMediumBoldFont,0,$YINIT+$YCELLGRIDSIZE*$i -6,"$num",$fg);
      }
   $im->string(gdSmallFont,$XGRIDSIZE/2-80,0,$option{'Title'},$fg);

   $odd_even = $option{'XCELLGRIDSIZE'}%2;
   #odd
   if ($odd_even eq 1) {$middle = $option{'XCELLGRIDSIZE'}/2 +0.5;}
   else {$middle = $option{'XCELLGRIDSIZE'}/2 +0.5;}

# start reading data
#   open (DATA,$option{'Data'}) || die "cant open $option{'Data'}";
# nextdata becomes Y on reading of second data set....
$nextdata="N";
@@datafiles=("./in.dat" , "./out.dat" );
   foreach  ( @@datafiles )
{
   $m=0;
   $count=0;
   $i=0;
   $fname=$_;
    
  print "fname $fname\n";
#  change entry for red in colour table to green for packets LEAVING target host

   open (DATA,$_) || die "cant open $_";
   print "$nextdata nextdata\n";
   while (<DATA>)
      {
      /(.*):(.*)/;
      if ($option{'Average'} eq 1) {$m+=$2;$i++;}
      if ($count eq 0){$XOLD=$1;$YOLD=$2;$count=1;next}
      $X=$1; $Y=$2;
# +($X-1) are the pixel of the line
      $xspace= $XINIT+$option{'XCELLGRIDSIZE'}*($X-1) +($X-1);
      $xspaceold= $XINIT+$option{'XCELLGRIDSIZE'}*($XOLD-1) +($XOLD-1);
      $yspace= $YGRAPH-($Y-$option{'MINYVALUE'})*$SCALE;
      $yspaceold= $YGRAPH-($YOLD-$option{'MINYVALUE'})*$SCALE;
      $barset=$option{'Bar'};
      if ($barset eq  0)
   {

     if($nextdata eq "Y")
     {
	
         #$im->line($XINIT,$YGRAPH,$X,$Y,$orange);
         $im->line($xspaceold,$yspaceold,$xspace,$yspace,$green);
     }
     else
     {
         $im->line($xspaceold,$yspaceold,$xspace,$yspace,$red);
     } 
    }
      else
         {
         if ($1 eq 2)
            {
            $im->filledRectangle($xspaceold,$yspaceold,
                                 $xspaceold+$middle,$YGRAPH,$colour);
            $im->rectangle($xspaceold,$yspaceold,
                           $xspaceold+$middle,$YGRAPH,$fg);
            }
         else
            {
            $im->filledRectangle($xspaceold-$middle,$yspaceold,
                                 $xspaceold+$middle,$YGRAPH,$colour);
            $im->rectangle($xspaceold-$middle,$yspaceold,
                           $xspaceold+$middle,$YGRAPH,$fg);
            }
         }
      $XOLD=$X; $YOLD=$Y;

      }  # end of while DATA loop

     $im->line(500,40,530,40,$red);
     $im->line(500,60,530,60,$green);
     $im->string(gdSmallFont,535,35,"Packets IN",$fg);
     $im->string(gdSmallFont,535,55,"Packets OUT",$fg);
     
   if ($option{'Bar'} ne 0)
      {
      if ($X eq $option{'XMAX'})
         {
         $im->filledRectangle($xspace-$middle,$yspace,
                              $xspace,$YGRAPH,$colour);
         $im->rectangle($xspace-$middle,$yspace,
                        $xspace,$YGRAPH,$fg);
         }
      else
         {
         $im->filledRectangle($xspace-$middle,$yspace,
                              $xspace+$middle,$YGRAPH,$colour);
         $im->rectangle($xspace-$middle,$yspace,
                        $xspace+$middle,$YGRAPH,$fg);
         }
      }
   close (DATA);


     $nextdata="Y";
# TOP LEFT is 0,0 on GIF (image)
# origin of plot is xinit,yinit 
 # print "little line\n";
     $im->line($xspace,$yspace,$xspace,$YGRAPH,$blue);
     $im->line($xspace,$YGRAPH,$XINIT,$YGRAPH,$blue);
#    (0,0) in cartesian space time=0 minutes, rate 0 packets/s
     $im->line($XINIT,$YGRAPH,$XINIT,$YGRAPH,$blue);
     $im->line($XINIT,$YGRAPH,$XINIT,$YGRAPH,$green);

} # close foreach loop on data file names




   if ($option{'Average'} eq 1)
      {
      # Line style
      $im->setStyle($acolour,$acolour,$acolour,$acolour,$bg,$bg,$bg,$bg);
      $m=$m/$i;
      $ym=$YGRAPH-($m-$option{'MINYVALUE'})*$SCALE;
      $im->line($XINIT,$ym,$XGRAPH,$ym,gdStyled)
      }
   $im->line($XINIT,$YINIT,$XINIT,$YGRAPH,$fg);
   $im->line($XINIT,$YINIT,$XGRAPH,$YINIT,$fg);
   $im->line($XGRAPH,$YINIT,$XGRAPH,$YGRAPH,$fg);
   $im->line($XINIT,$YGRAPH,$XGRAPH,$YGRAPH,$fg);

   $im->string(gdSmallFont,$XGIF-335,$YGIF - 12,"Time of Day (hours)",$fg);
   open (GRAPH,">$option{'Graph'}") || die "Error: Grafico.gif - $!\n";
   print GRAPH $im -> gif;
   close (GRAPH);




} # end of subroutine main

main;
exit(0);

sub printusage {
    print <<USAGEDESC;

usage:
        graphmaker [-options ...]

where options include:
    -help                        print out this message
    -conf  file                  the configuration file (default graphmaker.cnf)

If you want to know more about this tool, you might want
to read the docs. They came together with graphmaker!

Home: http://www.geocities.com/CapeCanaveral/Lab/3469/graphmaker.html

USAGEDESC
    exit(1);
}

@


