1#!/usr/bin/perl
2
3#
4# adapted from a script by Bob Hain, 11/30/99
5#
6
7#
8# default values
9#
10
11$outfile = "new.index.html";
12
13
14#
15# process arguments
16#
17
18$use_large = 1;
19while ( $arg = shift @ARGV ) {
20    if ( $arg eq "--large" ) {
21	$use_large = 1;
22    }
23    if ( $arg eq "--outfile" ) {
24        $outfile = shift @ARGV;
25    }
26}
27
28
29#
30# Generate all images
31#
32
33$src = "Source";
34$ldir = "Large";
35$sdir = "Small";
36$mdir = "Movies";
37
38$columns = 2;
39
40$swidth = 320;
41$sheight = 233;
42
43$lwidth = 1024;
44$lheight = 768;
45
46
47#
48# Make sure directories exist
49#
50
51if ( ! -e $ldir ) {
52    mkdir $ldir, 0755;
53}
54
55if ( ! -e $sdir ) {
56    mkdir $sdir, 0755;
57}
58
59# return 1 if file1 is newer than rile2
60sub is_newer {
61    my($file1, $file2) = @_;
62    # print " - $file1 - $file2 - \n";
63
64    ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime1,
65     $ctime, $blksize, $blocks) = stat($file1);
66    ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime2,
67     $ctime, $blksize, $blocks) = stat($file2);
68
69    if ( $mtime1 > $mtime2 ) {
70	return 1;
71    } else {
72	return 0;
73    }
74}
75
76
77#
78# Make images (both large and small)
79#
80
81@FILES = `ls $src/*.jpg $src/*.JPG $src/*.png`;
82
83foreach $file ( @FILES ) {
84    chop $file;
85    $file =~ s/$src\///;
86
87    if ( is_newer( "$src/$file", "$ldir/$file" ) || ! -e "$ldir/$file" ) {
88	print "Updating $ldir/$file\n";
89	system("cp -f $src/$file $ldir");
90	system("mogrify -geometry \'$lwidth" . "X" .
91	       "$lheight>\' -interlace LINE -quality 80 $ldir/$file");
92    }
93
94    if ( is_newer( "$ldir/$file", "$sdir/$file" ) || ! -e "$sdir/$file" ) {
95	print "Updating $sdir/$file\n";
96	system("cp -f $ldir/$file $sdir");
97	system("mogrify -geometry \'$swidth" . "X" .
98	       "$sheight>\' -interlace LINE -quality 80 $sdir/$file");
99    }
100}
101
102
103#
104# Check for large and small images to remove
105#
106
107@FILES = `ls $ldir`;
108foreach $file ( @FILES ) {
109    chop($file);
110    # print "$file\n";
111    if ( ! -f "$src/$file" ) {
112	print "No matching src file - deleting large image $file ...\n";
113	unlink( "$ldir/$file" );
114    }
115}
116
117@FILES = `ls $sdir`;
118foreach $file ( @FILES ) {
119    chop($file);
120    if ( ! -f "$src/$file" ) {
121	print "No matching src file - deleting small image $file ...\n";
122	unlink( "$sdir/$file" );
123    }
124}
125
126
127#
128# Build image list (for next/previous/first/last links)
129#
130
131open( MASTER, "<master.idx" );
132
133@imagelist = ();
134
135while ( <MASTER> ) {
136    chop;
137    if ( m/\.jpg$/ || m/\.JPG$/ || m/\.png$/ ) {
138	push @imagelist, $_;
139    } else {
140	# just ignore everything else
141    }
142}
143
144close( MASTER );
145
146
147#
148# Prepair $link subdirectory
149#
150
151$link = "Link";
152system("rm -rf $link");
153mkdir $link, 0755;
154
155
156#
157# Assemble index.html
158#
159
160$dir = `pwd`;
161chop($dir);
162$title = `basename $dir`;
163chop($title);
164
165open( MASTER, "<master.idx" );
166open( OUT, ">$outfile" );
167
168$j = 1;
169$in_table = 0;
170
171while ( <MASTER> ) {
172    chop;
173    if ( m/^#/ ) {
174	# ignore comments
175    } elsif ( m/\.txt$/ ) {
176	# insert text
177
178	if ( $in_table ) {
179	    $in_table = 0;
180	    print OUT "</TR>\n";
181	    print OUT "</TABLE>\n";
182	}
183
184	$file = $_;
185	open( IN, "<$src/$file" );
186	while ( <IN> ) {
187	    print OUT $_;
188	}
189	close( IN );
190	print OUT "<P>\n";
191	$j = 1;
192	$in_table = 0;
193    } elsif ( m/\.jpg$/ || m/\.JPG$/ || m/\.png$/ ) {
194	# insert image in 3 wide tables
195
196	$in_table = 1;
197	$file = $_;
198
199	$i = `basename $file`;
200	chop($i);
201
202	if ( $j == 1 ) {
203	    print OUT "<!-- Begin Row -->\n";
204	    print OUT "<TABLE ALIGN=CENTER>\n";
205	    print OUT "<TR VALIGN=TOP>\n";
206	}
207
208        if ( $i =~ m/\.jpg$/ ) {
209	    $linkname = `basename $i .jpg`;
210        } elsif ( $i =~ m/\.JPG$/ ) {
211	    $linkname = `basename $i .JPG`;
212        } elsif ($i =~ m/\.png$/ ) {
213	    $linkname = `basename $i .png`;
214        }
215	chop($linkname);
216
217	$thumbinfo = `identify $sdir/$i`;
218	($name, $type, $geom, $junk) = split(/\s+/, $thumbinfo, 4);
219	($twidth, $theight) = split(/x/, $geom);
220	$theight =~ s/\+.*$//;
221
222	# print OUT "<TD WIDTH=220 HEIGHT=160>\n";
223	print OUT "<TD WIDTH=$twidth HEIGHT=$sheight>\n";
224
225	print OUT "<A HREF=\"$link/$linkname.html\">";
226	print OUT "<IMG WIDTH=$twidth HEIGHT=$theight SRC=\"$sdir/$i\" ALT=\"$linkname\">";
227	print OUT "</A><BR>\n";
228
229	if ( -f "$src/$linkname.txt" ) {
230	    print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
231	    open( IN, "<$src/$linkname.txt" );
232	    while ( <IN> ) {
233		print OUT $_;
234	    }
235	    close( IN );
236	    print OUT "</FONT>\n";
237	} else {
238	    print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
239	    print OUT "$linkname\n";
240	    print OUT "</FONT>\n";
241	}
242
243	print OUT "</TD>\n";
244
245	if ( $j == $columns ) {
246	    $in_table = 0;
247	    print OUT "</TR>\n";
248	    print OUT "</TABLE>\n";
249	}
250
251	if ( ++$j > $columns ) {
252	    $j = 1;
253	}
254    } elsif ( m/\.AVI$/ || m/\.mpg$/ || m/\.mov$/ ) {
255	# insert image in 3 wide tables
256
257	$in_table = 1;
258	$file = $_;
259
260	$i = `basename $file`;
261	chop($i);
262
263	if ( $j == 1 ) {
264	    print OUT "<!-- Begin Row -->\n";
265	    print OUT "<TABLE ALIGN=CENTER>\n";
266	    print OUT "<TR VALIGN=TOP>\n";
267	}
268
269        if ( $i =~ m/\.AVI$/ ) {
270	    $linkname = `basename $i .AVI`;
271        } elsif ( $i =~ m/\.mpg$/ ) {
272	    $linkname = `basename $i .mpg`;
273        } elsif ( $i =~ m/\.mov$/ ) {
274	    $linkname = `basename $i .mov`;
275        } else {
276	    die "unknown movie type\n";
277        }
278	chop($linkname);
279	# print OUT "<TD WIDTH=220 HEIGHT=160>\n";
280	print OUT "<TD WIDTH=$swidth HEIGHT=$sheight>\n";
281
282	$thumbinfo = `identify $mdir/$linkname.jpg`;
283	($name, $type, $geom, $junk) = split(/\s+/, $thumbinfo, 4);
284	$geom =~ s/\+.*//;
285	($twidth, $theight) = split(/x/, $geom);
286        print "movie thumb geom = $geom  $twidth  $theight\n";
287
288	print OUT "<A HREF=\"$mdir/$i\">";
289	if ( -f "$mdir/$linkname.jpg" ) {
290	    print OUT "<IMG WIDTH=$twidth HEIGHT=$theight SRC=\"$mdir/$linkname.jpg\" ALT=\"$linkname\">";
291	} else {
292	    print OUT "$linkname";
293	}
294	print OUT "</A>\n";
295
296	if ( -f "$mdir/$linkname.txt" ) {
297            print OUT "<BR>\n";
298	    print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
299	    open( IN, "<$mdir/$linkname.txt" );
300	    while ( <IN> ) {
301		print OUT $_;
302	    }
303	    close( IN );
304	    print OUT "</FONT>\n";
305	} else {
306            print OUT "<BR>\n";
307	    print OUT "<FONT SIZE=-1 id=\"fgfs\">\n";
308	    print OUT "$linkname\n";
309	    print OUT "</FONT>\n";
310        }
311
312	print OUT "</TD>\n";
313
314	if ( $j == $columns ) {
315	    $in_table = 0;
316	    print OUT "</TR>\n";
317	    print OUT "</TABLE>\n";
318	}
319
320	if ( ++$j > $columns ) {
321	    $j = 1;
322	}
323    } else {
324	# just pass along the rest as is
325
326	$j = 1;
327
328	if ( $in_table ) {
329	    $in_table = 0;
330	    print OUT "</TR>\n";
331	    print OUT "</TABLE>\n";
332	}
333	print OUT "$_\n";
334    }
335}
336
337
338#
339# Generate Links
340#
341
342# @FILES = `ls $src/*.jpg $src/*.JPG $src/*.png`;
343
344$first = $imagelist[0];
345if ( $first =~ m/\.jpg$/ ) {
346    # print "  ext = jpg\n";
347    $firstname = `basename $first .jpg`;
348} elsif ( $first =~ m/\.JPG$/ ) {
349    # print "  ext = JPG\n";
350    $firstname = `basename $first .JPG`;
351} else {
352    # print "  ext = png\n";
353    $firstname = `basename $first .png`;
354}
355chop($firstname);
356
357$last = $imagelist[$#imagelist];
358if ( $last =~ m/\.jpg$/ ) {
359    # print "  ext = jpg\n";
360    $lastname = `basename $last .jpg`;
361} elsif ( $last =~ m/\.JPG$/ ) {
362    # print "  ext = JPG\n";
363    $lastname = `basename $last .JPG`;
364} else {
365    # print "  ext = png\n";
366    $lastname = `basename $last .png`;
367}
368chop($lastname);
369
370for ($i = 0; $i <= $#imagelist; $i++) {
371    $file = $imagelist[$i];
372    # print "'$file'\n";
373
374    if ( $i > 0 ) {
375	$prev = $imagelist[$i - 1];
376    } else {
377	$prev = "null";
378    }
379
380    if ( $i < $#imagelist ) {
381	$next = $imagelist[$i + 1];
382    } else {
383	$next = "null";
384    }
385
386    if ( $file =~ m/\.jpg$/ ) {
387        $linkname = `basename $file .jpg`;
388        $ext = "jpg";
389    } elsif ( $file =~ m/\.JPG$/ ) {
390        $linkname = `basename $file .JPG`;
391        $ext = "JPG";
392    } else {
393        $linkname = `basename $file .png`;
394        $ext = "png";
395    }
396    chop($linkname);
397    $nice_name = $linkname;
398    $nice_name =~ s/\_/ /g;
399
400    if ( $prev =~ m/\.jpg$/ ) {
401	# print "  ext = jpg\n";
402        $prevname = `basename $prev .jpg`;
403    } elsif ( $prev =~ m/\.JPG$/ ) {
404	# print "  ext = JPG\n";
405        $prevname = `basename $prev .JPG`;
406    } else {
407	# print "  ext = png\n";
408        $prevname = `basename $prev .png`;
409    }
410    chop($prevname);
411
412    if ( $next =~ m/\.jpg$/ ) {
413        $nextname = `basename $next .jpg`;
414    } elsif ( $next =~ m/\.JPG$/ ) {
415        $nextname = `basename $next .JPG`;
416    } else {
417        $nextname = `basename $next .png`;
418    }
419    chop($nextname);
420
421    $outfile = "$link/$linkname.html";
422
423    open( OUT, ">$outfile" );
424    print OUT <<EOF;
425
426<HTML>
427
428<HEAD>
429  <TITLE>$linkname.$ext</TITLE>
430</HEAD>
431
432<!-- <BODY BGCOLOR="#000000" ALINK="#000000" VLINK="#000000" LINK="#000000" TEXT="#FFFFFF"> -->
433<BODY>
434
435<A HREF="$firstname.html">[First]</A>
436EOF
437
438    if ( $prevname ne "null" ) {
439	print OUT "<A HREF=\"$prevname.html\">[Previous]</A>\n";
440    } else {
441	print OUT "[Previous]\n";
442    }
443
444    if ( $nextname ne "null" ) {
445	print OUT "<A HREF=\"$nextname.html\">[Next]</A>\n";
446    } else {
447	print OUT "[Next]\n";
448    }
449
450    print OUT <<EOF;
451<A HREF="$lastname.html">[Last]</A>
452
453<TABLE ALIGN=CENTER>
454  <TR>
455  <TD ALIGN=CENTER>
456  <FONT SIZE=+1>
457  $nice_name
458  </FONT>
459  </TD>
460  </TR>
461
462  <TR>
463  <TD ALIGN=CENTER>
464  <FONT SIZE=-1>
465EOF
466
467    if ( -f "$src/$linkname.txt" ) {
468	# print OUT "<BR>\n";
469	open( IN, "<$src/$linkname.txt" );
470	while ( <IN> ) {
471	    print OUT $_;
472	}
473	close( IN );
474    }
475
476    print OUT <<EOF;
477  </FONT>
478  </TD>
479  </TR>
480
481</TABLE>
482
483Click on the image for the full size version.
484
485<TABLE ALIGN=CENTER>
486  <TR>
487  <TD ALIGN=CENTER>
488  <A HREF="../$src/$linkname.$ext">
489EOF
490
491    if ( $use_large ) {
492	print OUT "  <IMG SRC=\"../$ldir/$linkname.$ext\">\n";
493    } else {
494  	print OUT "  <IMG SRC=\"../$src/$linkname.$ext\">\n";
495    }
496
497    print OUT <<EOF;
498  </TD>
499  </A>
500  </TR>
501</TABLE>
502
503</BODY>
504</HTML>
505EOF
506
507    close( OUT );
508}
509
510