#!/usr/bin/perl -w
use strict;
-use Data::Dumper;
+#use Data::Dumper;
use XFig;
my($grid_Y_size)=225; # xfig
-my($grid_X_size)=225; # xfig
+my($grid_X_size)=100550; # xfig
sub read_cat {
my(%Cat);
close INPUT;
}
+sub read_link {
+ my($filename)=@_;
+ my($line);
+ my(%link);
+
+ open INPUT, $filename;
+
+ while (defined($line=<INPUT>)) {
+ chomp $line;
+ if($line =~ /^16\s/) {
+ my($event,$date,$type,$father,$channel,$src,$key) = split(/\t+/,$line);
+ $link{$key}{src}=$src;
+ $link{$key}{src_date}=$date;
+ }
+ if($line =~ /^17\s/) {
+ my($event,$date,$type,$father,$channel,$dst,$key) = split(/\t+/,$line);
+ $link{$key}{dst}=$dst;
+ $link{$key}{dst_date}=$date;
+ }
+ }
+ close INPUT;
+ return \%link;
+}
+
sub build_cat_tree {
my($root,$Cat)=@_;
my($i)=0;
my($cat);
foreach $cat (@$cat_list) {
- $$Cat{$cat}{Y_min} = $i;
- $$Cat{$cat}{Y_max} = $i+1;
- $i++;
+ if(defined($$Cat{$cat}{state})) {
+ $$Cat{$cat}{Y_min} = $i;
+ $$Cat{$cat}{Y_max} = $i+1;
+ $i++;
+ }
}
}
}
sub draw_cat {
- my($fig,$Cat)=@_;
- my($cat,$e);
+ my($fig,$Cat,$Link)=@_;
+ my($cat,$e,$link);
foreach $cat (keys %$Cat) {
next unless (defined($$Cat{$cat}{Y_min}) &&
defined($$Cat{$cat}{Y_max}));
my($text) = new XFig ('text');
- $text->{'text'} = $cat;
+ $text->{'text'} = "$$Cat{$$Cat{$cat}{father}}{name}"."$$Cat{$cat}{name}";
$text->{'y'} = ($$Cat{$cat}{Y_min}+$$Cat{$cat}{Y_max})/2*$grid_Y_size+68;
$fig->add ($text);
}
my($line) = new XFig ('polyline');
+ $line->{'depth'} = 50; # line
$line->{'subtype'} = 1; # line
$line->{'points'} = [ [$old_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size],
[$new_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size],
}
}
}
+
+ foreach $link (keys %$Link) {
+ my($line) = new XFig ('polyline');
+ my($src_date)=$$Link{$link}{src_date};
+ my($src)=$$Link{$link}{src};
+ my($dst_date)=$$Link{$link}{dst_date};
+ my($dst)=$$Link{$link}{dst};
+ $line->{'subtype'} = 1; # line
+
+ print STDERR "$link: $src ($src_date) -> $dst ($dst_date)\n";
+
+ print STDERR "$$Cat{$src}{name} -> $$Cat{$dst}{name}\n";
+ $line->{'points'} = [ [$src_date*$grid_X_size,
+ ($$Cat{$src}{Y_min}+$$Cat{$src}{Y_max})/2*$grid_Y_size],
+ [$dst_date*$grid_X_size,
+ ($$Cat{$dst}{Y_min}+$$Cat{$dst}{Y_max})/2*$grid_Y_size] ];
+ $line->{'forwardarrow'} = ['1', '1', '1.00', '60.00', '120.00'];
+ $fig->add ($line);
+ }
}
sub main {
my($Cat) = read_cat($ARGV[0]);
my($cat_tree)=build_cat_tree("0",$Cat);
read_event($ARGV[0],$Cat);
+ my($Link)=read_link($ARGV[0]);
# print Dumper($cat_tree);
# print Dumper($Cat);
my($cat_list)=[];
set_cat_position($Cat,$cat_list);
my($fig)=create_fig("toto.fig");
- draw_cat($fig,$Cat);
+ draw_cat($fig,$Cat,$Link);
$fig->writefile ();
system "fig2dev -L pdf toto.fig toto.pdf";
}