projects
/
xscreensaver
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ftp://netsw.org/x11/tools/desktop/xscreensaver-4.07.tar.gz
[xscreensaver]
/
hacks
/
vidwhacker
diff --git
a/hacks/vidwhacker
b/hacks/vidwhacker
index 8308cccac8236abd0d961c259c9106b546be1e4e..b4378354fee7f73ecee5ddcc254d030632d368e5 100755
(executable)
--- a/
hacks/vidwhacker
+++ b/
hacks/vidwhacker
@@
-21,7
+21,7
@@
use diagnostics;
use strict;
my $progname = $0; $progname =~ s@.*/@@g;
use strict;
my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.
19
$ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.
21
$ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
my $verbose = 0;
my $use_stdin = 0;
my $verbose = 0;
my $use_stdin = 0;
@@
-54,6
+54,10
@@
my @displayer_programs = (
# "xsri -scale -keep-aspect -center-horizontal -center-vertical",
);
# "xsri -scale -keep-aspect -center-horizontal -center-vertical",
);
+# apparently some versions of netpbm call it "pamoil" instead of "pgmoil"...
+#
+my $pgmoil = (which("pamoil") ? "pamoil" : "pgmoil");
+
# List of interesting PPM filter pipelines.
# In this list, the following magic words may be used:
# List of interesting PPM filter pipelines.
# In this list, the following magic words may be used:
@@
-68,7
+72,7
@@
my @displayer_programs = (
my @filters = (
"ppmtopgm FILE1 | pgmedge | pgmtoppm COLORS | ppmnorm",
"ppmtopgm FILE1 | pgmenhance | pgmtoppm COLORS",
my @filters = (
"ppmtopgm FILE1 | pgmedge | pgmtoppm COLORS | ppmnorm",
"ppmtopgm FILE1 | pgmenhance | pgmtoppm COLORS",
- "ppmtopgm FILE1 | pgmoil | pgmtoppm COLORS",
+ "ppmtopgm FILE1 |
$
pgmoil | pgmtoppm COLORS",
"ppmtopgm FILE1 | pgmbentley | pgmtoppm COLORS",
"ppmrelief FILE1 | ppmtopgm | pgmedge | ppmrelief | ppmtopgm |" .
"ppmtopgm FILE1 | pgmbentley | pgmtoppm COLORS",
"ppmrelief FILE1 | ppmtopgm | pgmedge | ppmrelief | ppmtopgm |" .
@@
-110,7
+114,7
@@
my @filters = (
" pnmflip -tb FILE3 | ppmnorm > FILE2 ; " .
" pnmarith -multiply FILE1 FILE2",
" pnmflip -tb FILE3 | ppmnorm > FILE2 ; " .
" pnmarith -multiply FILE1 FILE2",
- "ppmshift 30 FILE1 | ppmtopgm | pgmoil | pgmedge | " .
+ "ppmshift 30 FILE1 | ppmtopgm |
$
pgmoil | pgmedge | " .
" pgmtoppm COLORS > FILE2 ; " .
" pnmarith -difference FILE1 FILE2",
" pgmtoppm COLORS > FILE2 ; " .
" pnmarith -difference FILE1 FILE2",
@@
-157,6
+161,19
@@
sub pick_displayer {
}
}
+# returns the full path of the named program, or undef.
+#
+sub which {
+ my ($prog) = @_;
+ foreach (split (/:/, $ENV{PATH})) {
+ if (-x "$_/$prog") {
+ return $prog;
+ }
+ }
+ return undef;
+}
+
+
# Choose random foreground and background colors
#
sub randcolors {
# Choose random foreground and background colors
#
sub randcolors {
@@
-315,7
+332,7
@@
sub get_ppm {
if ($do_file_p) {
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 "");
my $fn = `$cmd`;
$fn =~ s/\n$//s;
error "didn't get a file?" if ($fn eq "");
@@
-325,17
+342,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\""; }
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";
}
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 {
$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);
$ppm = `$cmd`;
error "no data?" if ($ppm eq "");
error "not a PPM file" unless ($ppm =~ m/^P\d\n/s);
@@
-395,7
+416,14
@@
sub vidwhack {
}
$ppm = $stdin_ppm;
} else {
}
$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);
}
$ppm = frob_ppm ($ppm);