#!/usr/bin/perl
# skriptas naudoja dvi isorines programas: gifsicle ir convert (is ImageMagick paketo)
# pirmoji naudojama skiriamosios gebos pakeitimui ir pilkumo lygiu sumazinimui,
# antrojo "thumbnail" pagaminimui ir konvertavimui i laisva png (portabe network
# graphics) formata.  

use strict;
#use warnings;

use Cwd 'abs_path';

my($dir,$name,$num,$psl,$pslnext,$pslprev,$dydis,$fullname,$pngname,$vaizdofailas,$vaizdofailasnext,$vaizdofailasprev,$vaizdofailas,%files);

my $index_file = "index.html";
my $col_num = 5;  #number of columns

if(@ARGV){
  $dir=$ARGV[0];
} else {
  $dir="."
}

$dir=abs_path($dir);

opendir IMGDIR, $dir or die "$0: cannot opendir $dir: $!";
while (defined($name = readdir(IMGDIR))){
  if ($name =~ /\.gif/){
    if ($name =~ /(\d+)/){
      $files{$1}=$name; # page number extracted from file name
    } else{
      warn "$0: file name $name does not contain page number.";
    }
  }
}
closedir IMGDIR;


while (($num, $name) = each %files){
  $fullname=$dir . "/" . $name;
  print "Converting $fullname\n";
  $pngname=$fullname;
  $pngname =~ s/\.gif/unoptimized.gif/;
  system "mv $fullname $pngname";
  system "/usr/home/acus/bin/gifsicle --resize 680x980 --optimize --colors 8 --use-colormap gray < $pngname > $fullname";
  system "rm $pngname";
  $pngname=$fullname;
  $pngname =~ s/\.gif/.png/;
  system "convert -level 30,0.6,60000 -quality 105 $fullname $pngname";
  $pngname=$fullname;
  $pngname =~ s/\.gif/unoptimized.gif/;
  system "mv $fullname $pngname";
  system "/usr/home/acus/bin/gifsicle --optimize --colors 4 --use-colormap gray < $pngname > $fullname";
  system "rm $pngname";
  $pngname=$fullname;
  $pngname =~ s/\.gif/_thumb.gif/;
  system "convert -geometry 100x140! $fullname $pngname";
  $fullname = $pngname;
  $pngname =~ s/\.gif/.png/;
  system "convert -quality 106 $fullname $pngname";
  }
 
$psl = keys %files; # number of files

$index_file=$dir . "/" . $index_file;

open INDEX, ">$index_file" or die "$0: cannot open $index_file for writing: $!";

# print header
print INDEX <<EOS;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1257" content="text/html; charset=iso-8859-13">
<title>Fizikų žinios</title>
<style type="text/css">
<!--BODY {color: #d0ffd0; background: #333333;
          font-family: Andale Mono, sans-serif;
          font-size: 14pt; margin: 8%};
H1       {color: #d0ffd0;}
TABLE    {margin-left: auto; margin-right: auto;}
TD       { color: #d0ffd0; padding: 1em}
--></style>
</head>
<body link="#FFFF00" vlink="#00FFFF">
<p align="left"><a href="../FZArchyvas.html">,,Fizikų žinių'' archyvas</a></b>
<hr width="100%">

EOS

$index_file=$dir . "/header.html";
open HEADER, "$index_file" or die "$0: cannot open $index_file : $!";
while (<HEADER>){
  print INDEX;
}
close(HEADER);

print INDEX <<EOS;
<hr>
<center>
<table>
<caption align=bottom>
Puslapių skaičius (įskaitant viršelius):  $psl
</caption>
<tr>
EOS

# the table
$num=0;
foreach $psl (sort { $a <=> $b } keys %files){
  $name = $files{$psl};
  $name =~ s/\.gif/.png/;
  $dydis = (-s ($dir . '/' . $name))/1024;
  $vaizdofailas =$dir . "/" . $name;
  $vaizdofailas =~ s/png/html/;
  $pslprev=$psl-1;
  if ($pslprev <10){
      $pslprev= '0' . $pslprev;
      }    
  else{
      $pslprev;
      }
  $vaizdofailasprev = $name;
  $vaizdofailasprev =~ s/png/html/;
  $vaizdofailasprev =~ s/$psl/$pslprev/;
  $pslnext=$psl+1;
  if ($pslnext <10){
      $pslnext= '0' . $pslnext;
      }    
  else{
      $pslprev;
      }
  $vaizdofailasnext = $name;
  $vaizdofailasnext =~ s/png/html/;
  $vaizdofailasnext =~ s/$psl/$pslnext/;

  open VAIZDOFAILAS, ">$vaizdofailas" or
    die "$0: cannot open $vaizdofailas for writing: $!\n";
  print VAIZDOFAILAS <<EOS;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Puslapis</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1257" content="text/html; charset=iso-8859-13">
<body>
<p>
<img border="0" src="$name" alt="$name" ALIGN=left WIDTH=680 HEIGHT=980>
<br>
<p>
<center>
<a href="$vaizdofailasprev">Ankstesnis puslapis</a>&nbsp &nbsp &nbsp
<a href="index.html">Turinys</a>&nbsp &nbsp &nbsp
<a href="$vaizdofailasnext">Kitas puslapis</a>
</center>
</body>
</html>
EOS
  close(VAIZDOFAILAS);
 
  $name =~ s/png/html/;
  print INDEX "<td align=\"center\">\n<a href=\"$name\">";
  $name = $files{$psl};
  $name =~ s/\.gif/_thumb.png/;
  print INDEX "<img border=\"0\" src=\"$name\" alt=\"$name\"></a>\n";
  printf INDEX "<div>%d puslapis<br>\n", $psl;
  printf INDEX "Dydis %d kb</div>\n</td>\n", $dydis;
  $num++;
  if ($num == $col_num){
    print INDEX "</tr>\n<tr>\n";
    $num=0;
  }
}

#print footer
print INDEX <<EOS;
</tr>
</table>
</center>
<hr>
EOS

$index_file=$dir . "/footer.html";
open HEADER, "$index_file" or die "$0: cannot open $index_file : $!";
while (<HEADER>){
  print INDEX;
}
close(HEADER);

print INDEX <<EOS;
</body>
</html>
EOS

close INDEX or die "$0: cannot close ${index_file}: $!";
