#!/perl -w
# NAME: genimgindex.pl
# AIM: Given a BASE folder, seek all IMAGE files, and build
# an 'index' table of images, as HTML ...
# Commands: in-folder [-out out-file]
use strict;
use warnings;
use File::Basename;
use File::stat;

require 'logfile.pl' or die "Unable to load logfile.pl ...\n";
# log file stuff
my ($LF);
my $outfile = 'temp.'.$0.'.txt';
if ($0 =~ /\w{1}:\\.*/) {
	my @tmpsp = split(/\\/,$0);
	$outfile = 'temp.'.($tmpsp[-1]).'.txt';
}
open_log($outfile);
prt( "$0 ... Hello, World ...\n" );

my $def_in = "G:\\HOMEPAGE\\Max5\\1lynesite";
my $in_folder = '';
my $out_file = 'tempmout.htm';
my @imgfiles = qw( .jpg .jpeg .gif .png );
my @htmfiles = qw( .htm .html .php );

my @imglist = ();
my @fpfolders = qw( _vti_cnf _vti_cnf _private _derived );
# debug stuff
my $dbg1 = 1;	# use default in folder
my $dbg2 = 0;	# use full file name, else relative

my $html_bgn = <<"EOF";
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Language" content="en-gb">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="generator" content="genindex3.pl">
<title>Misc Index</title>
<style type="text/css">
<!-- /* some style 2007.05.24 */
body {
   margin:0cm 1cm;
   background-image:url('clds3.jpg');
}
h1{
	background:#efefef;
	border-style:solid;
	border-color:#d9e2e2;
	border-width:1px;
	padding-top:2px;
	padding-bottom:2px;
	padding-left:2px;
	padding-right:2px;
	font-size:200%;
	text-align:center;
}
h2 { font-size: 12pt; font-weight: bold; background-color: #CCCCFF }
.ctr { text-align:center; }
-->
</style>
</head>

<body>
<h1>Misc Index</h1>
<p class="ctr"><a href="../home2.htm">home</a></p>
<div align="center">
  <center>
  <table border="2" cellpadding="2" bordercolor="#0000FF" id="Num1" summary="Table of Images">

EOF

my $html_end = <<"EOF";
  </table>
  </center>
</div>
<p class="ctr"><a href="../home2.htm">home</a></p>
</body>
</html>
EOF

parse_args(@ARGV);

collect_image_files( $in_folder );
my $cnt = scalar @imglist;
prt( "Found $cnt image files ...\n" );
open OUTF, ">$out_file" or mydie( "ERROR: Unable to open $out_file ...\n" );

print OUTF $html_bgn;

print OUTF "<tr>\n";
print OUTF "<th>Miscellaneous</th>\n";
print OUTF "</tr>\n";

#foreach my $fil (@imglist) {
for (my $i = 0; $i < $cnt; $i++) {
	my $fil = $imglist[$i];
	my $sf = substr( $fil, length($in_folder) + 1 );
	my ($nm, $dir, $ext) = fileparse( $sf, qr/\.[^.]*/ );
	my $sb = stat($fil);
	$dir = "." if (length($dir) == 0);
	my $of = dos_2_unix($sf);

	print OUTF "<tr>\n";
	print OUTF "<td><a href=\"$of\">$of</td>\n";
	print OUTF "</tr>\n";
	#prt( "$sf ...\n" );
}

print OUTF $html_end;
close OUTF;
system $out_file;
close_log($outfile,1);
exit(0);


sub parse_args {
	my (@av) = @_;
	while (@av) {
		my $arg = $av[0];
		if (substr($arg,0,1) eq "-") {
			if ($arg eq '-out') {
				shift @av;
				if (@av) {
					$out_file = $av[0];
					prt( "Set out file to [$out_file] ...\n" );
				} else {
					mydie( "ERROR: -out MUST have a following file name ...\n" );
				}
			}
		} else {
			if (length($in_folder)) {
				mydie( "ERROR: Already have IN-FOLDER [$in_folder]! What is this? [$arg]?\n" );
			}
			$in_folder = $arg;
			prt( "Set in folder to [$in_folder] ...\n" );
		}
		shift @av;
	}

	if (length($in_folder) == 0) {
		if ($dbg1) {
			$in_folder = $def_in;
			prt( "Set in folder to [$in_folder] debug default ...\n" );
		} else {
			mydie( "ERROR: No input folder found ...\n" );
		}
	}

}

sub my_img_file {
	my ($fil) = shift;
	my ($nm, $dir, $ext) = fileparse( $fil, qr/\.[^.]*/ );
	foreach my $e (@imgfiles) {
		if (lc($e) eq lc($ext)) {
			return 1;
		}
	}
	return 0;
}

sub my_htm_file {
	my ($fil) = shift;
	my ($nm, $dir, $ext) = fileparse( $fil, qr/\.[^.]*/ );
	foreach my $e (@htmfiles) {
		if (lc($e) eq lc($ext)) {
			return 1;
		}
	}
	return 0;
}

sub my_in_file {
	my ($fil) = shift;
	if ( my_img_file($fil) || my_htm_file($fil) ) {
		return 1;
	}

	return 0;
}


sub is_fp_folder {
	my ($fil) = shift;
	foreach my $fp (@fpfolders) {
		if (lc($fp) eq lc($fil)) {
			return 1;
		}
	}
	return 0;
}


sub collect_image_files {
	my $inf = shift;
	prt( "Processing $inf folder ...\n" );
	if ( opendir( DIR, $inf ) ) {
		my @files = readdir(DIR);
		closedir DIR;
		foreach my $fl (@files) {
			if (($fl eq '.') || ($fl eq '..') ||
				 is_fp_folder($fl) ) {
				next;
			}
			my $ff = $inf . "\\" . $fl;
			if (-d $ff) {
				collect_image_files($ff);
			} else {
				if (!my_in_file($fl)) {
					push(@imglist, $ff);
				}
			}
		}
	} else {
		prt( "WARNING: Can NOT open $inf ... $! ...\n" );
	}
}

sub get_nn { # perl nice number nicenum add commas
	my ($n) = shift;
	if (length($n) > 3) {
		my $mod = length($n) % 3;
		my $ret = (($mod > 0) ? substr( $n, 0, $mod ) : '');
		my $mx = int( length($n) / 3 );
		for (my $i = 0; $i < $mx; $i++ ) {
			if (($mod == 0) && ($i == 0)) {
				$ret .= substr( $n, ($mod+(3*$i)), 3 );
			} else {
				$ret .= ',' . substr( $n, ($mod+(3*$i)), 3 );
			}
		}
		return $ret;
	}
	return $n;
}

sub dos_2_unix {
	my ($du) = shift;
	$du =~ s/\\/\//g;
	return $du;
}

# eof - genimgindex.pl
