From http://www.jwz.org/xscreensaver/xscreensaver-5.35.tar.gz
[xscreensaver] / hacks / vidwhacker
index aa7deb3803e46f1914c315ebdf96427367cab748..9646f6bd95dd67ca61fdf9acc4897f0854dbddcb 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-# vidwhacker, for xscreensaver.  Copyright (c) 1998-2005 Jamie Zawinski.
+# vidwhacker, for xscreensaver.  Copyright (c) 1998-2011 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.28 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my ($version) = ('$Revision: 1.33 $' =~ m/\s(\d[.\d]+)\s/s);
 
 my $verbose = 0;
 my $use_stdin = 0;
@@ -326,6 +326,7 @@ sub get_ppm() {
       my $fn = `$cmd`;
       $fn =~ s/\n$//s;
       error ("didn't get a file?") if ($fn eq "");
+      $fn = "$imagedir/$fn" unless ($fn =~ m@^/@s);
 
       print STDERR "$progname: selected file $fn\n" if ($verbose > 1);
 
@@ -378,7 +379,7 @@ sub dispose_ppm($) {
   } else {
     my $tmpdir = $ENV{TMPDIR};
     $tmpdir = "/tmp" unless $tmpdir;
-    my $fn =  sprintf ("%s/vidwhacker-%08x", $tmpdir, rand(0xFFFFFFFF));
+    my $fn =  sprintf ("%s/vidwhacker-%08x.ppm", $tmpdir, rand(0xFFFFFFFF));
     local *OUT;
     unlink $fn;
     push @all_tmpfiles, $fn;
@@ -439,7 +440,7 @@ sub error($) {
 
 sub usage() {
   print STDERR "VidWhacker, Copyright (c) 2001 Jamie Zawinski <jwz\@jwz.org>\n";
-  print STDERR "            http://www.jwz.org/xscreensaver/";
+  print STDERR "            https://www.jwz.org/xscreensaver/";
   print STDERR "\n";
   print STDERR "usage: $0 [-display dpy] [-verbose]\n";
   print STDERR "\t\t[-root | -window | -window-id 0xXXXXX ]\n";
@@ -451,7 +452,7 @@ sub usage() {
 sub main() {
   while ($_ = $ARGV[0]) {
     shift @ARGV;
-    if ($_ eq "--verbose") { $verbose++; }
+    if (m/^--?verbose$/) { $verbose++; }
     elsif (m/^-v+$/) { $verbose += length($_)-1; }
     elsif (m/^(-display|-disp|-dis|-dpy|-d)$/) { $ENV{DISPLAY} = shift @ARGV; }
     elsif (m/^--?stdin$/) { $use_stdin = 1; }
@@ -479,6 +480,12 @@ sub main() {
 
   read_config;
 
+  # sanity checking - is pbm installed?
+  # (this is a non-exhaustive but representative list)
+  foreach ("ppmtopgm", "pgmenhance", "pnminvert", "pnmarith", "pnmdepth") {
+    which ($_) || error "$_ not found on \$PATH.";
+  }
+
   if (!$use_stdout) {
     $_ = `xdpyinfo 2>&-`;
     ($screen_width) =~ m/ dimensions: +(\d+)x(\d+) pixels/;