ftp://ftp.swin.edu.au/slackware/slackware-9.1/source/xap/xscreensaver/xscreensaver...
[xscreensaver] / hacks / vidwhacker
index 688895b8e323dda278831496ed81059c16e09d97..f243156256e1a7c59bfbe91e22070db219164f59 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-# vidwhacker, for xscreensaver.  Copyright (c) 1998-2001 Jamie Zawinski.
+# vidwhacker, for xscreensaver.  Copyright (c) 1998-2003 Jamie Zawinski.
 #
 # Permission to use, copy, modify, distribute, and sell this software and its
 # documentation for any purpose is hereby granted without fee, provided that
@@ -21,7 +21,7 @@ use diagnostics;
 use strict;
 
 my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.20 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.22 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
 
 my $verbose = 0;
 my $use_stdin = 0;
@@ -44,11 +44,12 @@ my $screen_width = -1;
 # If you add other programs to this list, please let me know!
 #
 my @displayer_programs = (
-  "xv         -root -quit -viewonly -maxpect -noresetroot -quick24 -rmode 5" .
-  "           -rfg black -rbg black",
-  "xli        -quiet -fullscreen -onroot -center -border black",
-  "xloadimage -quiet -fullscreen -onroot -center -border black",
-  "chbg       -once -xscreensaver -max_grow 4",
+  "xscreensaver-getimage -root -file",
+# "xv         -root -quit -viewonly -maxpect -noresetroot -quick24 -rmode 5" .
+# "           -rfg black -rbg black",
+# "xli        -quiet -fullscreen -onroot -center -border black",
+# "xloadimage -quiet -fullscreen -onroot -center -border black",
+# "chbg       -once -xscreensaver -max_grow 4",
 
 # this lame program wasn't built with vroot.h:
 # "xsri       -scale -keep-aspect -center-horizontal -center-vertical",
@@ -332,7 +333,7 @@ sub get_ppm {
 
     if ($do_file_p) {
 
-      print STDERR "$progname: running \"$cmd\"\n" if ($verbose > 1);
+      print STDERR "$progname: running: $cmd\n" if ($verbose > 1);
       my $fn = `$cmd`;
       $fn =~ s/\n$//s;
       error "didn't get a file?" if ($fn eq "");
@@ -342,17 +343,21 @@ sub get_ppm {
       if    ($fn =~ m/\.gif/i)   { $cmd = "giftopnm < \"$fn\""; }
       elsif ($fn =~ m/\.jpe?g/i) { $cmd = "djpeg < \"$fn\""; }
       elsif ($fn =~ m/\.png/i)   { $cmd = "pngtopnm < \"$fn\""; }
+      elsif ($fn =~ m/\.xpm/i)   { $cmd = "xpmtoppm < \"$fn\""; }
+      elsif ($fn =~ m/\.bmp/i)   { $cmd = "bmptoppm < \"$fn\""; }
+      elsif ($fn =~ m/\.tiff?/i) { $cmd = "tifftopnm < \"$fn\""; }
+      elsif ($fn =~ m/\.p[bgp]m/i) { return `cat \"$fn\"`; }
       else {
         error "unrecognized file extension on $fn";
       }
 
-      print STDERR "$progname: converting with \"$cmd\"\n" if ($verbose > 1);
+      print STDERR "$progname: converting with: $cmd\n" if ($verbose > 1);
       $cmd .= " 2>/dev/null" unless ($verbose > 1);
       $ppm = `$cmd`;
 
     } else {
 
-      print STDERR "$progname: running \"$cmd\"\n" if ($verbose > 1);
+      print STDERR "$progname: running: $cmd\n" if ($verbose > 1);
       $ppm = `$cmd`;
       error "no data?" if ($ppm eq "");
       error "not a PPM file" unless ($ppm =~ m/^P\d\n/s);
@@ -412,7 +417,14 @@ sub vidwhack {
     }
     $ppm = $stdin_ppm;
   } else {
-    $ppm = get_ppm();
+    my $max_err_count = 20;
+    my $err_count = 0;
+    while (!defined($ppm)) {
+      $ppm = get_ppm();
+      $err_count++ if (!defined ($ppm));
+      error ("too many errors, too few images!")
+        if ($err_count > $max_err_count);
+    }
   }
 
   $ppm = frob_ppm ($ppm);