ftp://ftp.jp.xemacs.org/pub/NetBSD/packages/distfiles/xscreensaver-4.15.tar.gz
[xscreensaver] / hacks / vidwhacker
index b4378354fee7f73ecee5ddcc254d030632d368e5..bf6186e5ea3afe751b61f23eba5ff110c8c61a97 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.21 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.24 $ }; $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",
@@ -138,6 +139,32 @@ sub error {
   exit 1;
 }
 
+# Any files on this list will be deleted at exit.
+#
+my @all_tmpfiles = ();
+
+sub signal_cleanup {
+  unlink @all_tmpfiles;
+}
+
+sub init_signals {
+
+  $SIG{HUP}  = \&signal_cleanup;
+  $SIG{INT}  = \&signal_cleanup;
+  $SIG{QUIT} = \&signal_cleanup;
+  $SIG{ABRT} = \&signal_cleanup;
+  $SIG{KILL} = \&signal_cleanup;
+  $SIG{TERM} = \&signal_cleanup;
+
+  # Need this so that if giftopnm dies, we don't die.
+  $SIG{PIPE} = 'IGNORE';
+}
+
+END { signal_cleanup(); }
+
+
+
+
 # ####  Lifted from driver/xscreensaver-getimage-file
 #
 sub pick_displayer {
@@ -187,6 +214,7 @@ sub randcolors {
 }
 
 
+
 sub filter_subst {
   my ($filter, $width, $height, @tmpfiles) = @_;
   my $colors = randcolors();
@@ -218,8 +246,12 @@ sub frob_ppm {
 
   my $tmpdir = $ENV{TMPDIR};
   $tmpdir = "/tmp" unless $tmpdir;
-  my $fn = sprintf("$tmpdir/vw.%04x", $$);
-  my @files = ( "$fn", "$fn.1", "$fn.2", "$fn.3" );
+  my $fn =  sprintf ("%s/vidwhacker-0-%08x", $tmpdir, rand(0xFFFFFFFF));
+  my $fn1 = sprintf ("%s/vidwhacker-1-%08x", $tmpdir, rand(0xFFFFFFFF));
+  my $fn2 = sprintf ("%s/vidwhacker-2-%08x", $tmpdir, rand(0xFFFFFFFF));
+  my $fn3 = sprintf ("%s/vidwhacker-3-%08x", $tmpdir, rand(0xFFFFFFFF));
+  my @files = ( "$fn", "$fn1", "$fn2", "$fn3" );
+  push @all_tmpfiles, @files;
 
   my $n = int(rand($#filters+1));
   my $filter = $filters[$n];
@@ -388,9 +420,10 @@ sub dispose_ppm {
 
     my $tmpdir = $ENV{TMPDIR};
     $tmpdir = "/tmp" unless $tmpdir;
-    my $fn = sprintf("$tmpdir/vw.%04x", $$);
+    my $fn =  sprintf ("%s/vidwhacker-%08x", $tmpdir, rand(0xFFFFFFFF));
     local *OUT;
     unlink $fn;
+    push @all_tmpfiles, $fn;
     open (OUT, ">$fn") || error "writing $fn: $!";
     print OUT $ppm;
     close OUT;
@@ -462,6 +495,8 @@ sub main {
     else { usage; }
   }
 
+  init_signals();
+
   read_config;
 
   if (!$use_stdout) {