Shingo@0: #!/usr/bin/env perl Shingo@0: Shingo@0: use strict; Shingo@0: use Digest::MD5 qw(md5_hex); Shingo@0: my $f_remove_unused_eps = 0; Shingo@0: Shingo@0: if (@ARGV != 1) { Shingo@0: die 'wrong number of argument'; Shingo@0: } Shingo@0: my $prnfile = $ARGV[0]; Shingo@0: Shingo@0: my $basename = $prnfile; $basename =~ s/\.prn$//; Shingo@0: my $dirname = $prnfile; $dirname =~ s![^/]*$!!; Shingo@0: my $notedumpfile = $basename . '.note.txt'; Shingo@0: my $md5file = $basename . '.md5'; Shingo@0: Shingo@0: my %prev_md5 = (); Shingo@0: my %curr_md5 = (); Shingo@0: Shingo@0: if (-e $md5file) { Shingo@0: open(MD5, $md5file) or die; Shingo@0: while () { Shingo@0: if (/^([01-9a-f]+)\s+([-_01-9a-zA-Z]+)/) { Shingo@0: $prev_md5{$1} = $2; Shingo@0: } Shingo@0: } Shingo@0: close(MD5); Shingo@0: } Shingo@0: Shingo@0: my $counter = 1; Shingo@0: open(NOTES, $notedumpfile) or die; Shingo@0: while () { Shingo@0: if (/\014/) { Shingo@0: $counter++; Shingo@0: } Shingo@0: if (/\@file=([-_01-9a-zA-Z]+)/) { Shingo@0: my $epsbase = $1; Shingo@0: my $page = $counter; Shingo@0: my $pngfile = $basename . '.ppt.tmp_slide' . $page . '.png'; Shingo@0: my $md5; Shingo@0: if (-e $pngfile) { Shingo@0: $md5 = md5_hex(`cat $pngfile`); Shingo@0: $curr_md5{$md5} = $epsbase; Shingo@0: } else { # can't happen Shingo@0: die "no png file: $pngfile"; Shingo@0: } Shingo@0: Shingo@0: if (exists $prev_md5{$md5}) { Shingo@0: if ($prev_md5{$md5} eq $epsbase) { Shingo@0: # not changed Shingo@0: delete $prev_md5{$md5}; Shingo@0: } else { Shingo@0: system("mv $dirname$prev_md5{$md5}.eps $dirname$epsbase.eps"); Shingo@0: delete $prev_md5{$md5}; Shingo@0: } Shingo@0: } else { Shingo@0: system("psselect $page $prnfile > $dirname$epsbase.ps"); Shingo@0: system("ps2eps -R + -B -f $dirname$epsbase.ps"); Shingo@0: system("ps2eps -C $dirname$epsbase.eps"); Shingo@0: system("mv $dirname$epsbase.eps.eps $dirname$epsbase.eps"); Shingo@0: system("rm $dirname$epsbase.ps"); Shingo@0: } Shingo@0: } Shingo@0: } Shingo@0: close(NOTES); Shingo@0: Shingo@0: if ($f_remove_unused_eps) { Shingo@0: # to be implemented Shingo@0: } Shingo@0: Shingo@0: open(MD5, '>', $md5file) or die; Shingo@0: foreach my $m (keys %curr_md5) { Shingo@0: print MD5 $m . "\t" . $curr_md5{$m} . "\r\n"; Shingo@0: } Shingo@0: close(MD5); Shingo@0: system("rm " . $basename . '.ppt.tmp_slide*.png');