diff options
Diffstat (limited to 'editor/pnmquant')
-rwxr-xr-x | editor/pnmquant | 64 |
1 files changed, 45 insertions, 19 deletions
diff --git a/editor/pnmquant b/editor/pnmquant index 5edbe85e..93d452cd 100755 --- a/editor/pnmquant +++ b/editor/pnmquant @@ -1,6 +1,29 @@ -#!/usr/bin/perl -w +#!/bin/sh ############################################################################## +# This is essentially a Perl program. We exec the Perl interpreter specifying +# this same file as the Perl program and use the -x option to cause the Perl +# interpreter to skip down to the Perl code. The reason we do this instead of +# just making /usr/bin/perl the script interpreter (instead of /bin/sh) is +# that the user may have multiple Perl interpreters and the one he wants to +# use is properly located in the PATH. The user's choice of Perl interpreter +# may be crucial, such as when the user also has a PERL5LIB environment +# variable and it selects modules that work with only a certain main +# interpreter program. +# +# An alternative some people use is to have /usr/bin/env as the script +# interpreter. We don't do that because we think the existence and +# compatibility of /bin/sh is more reliable. +# +# Note that we aren't concerned about efficiency because the user who needs +# high efficiency can use directly the programs that this program invokes. +# +############################################################################## + +exec perl -w -x -S -- "$0" "$@" + +#!/usr/bin/perl +############################################################################## # pnmquant ############################################################################## # By Bryan Henderson, San Jose CA; December 2001. @@ -11,7 +34,6 @@ use strict; use English; use Getopt::Long; -#use File::Temp "tempfile"; # not available before Perl 5.6.1 use File::Spec; #use Fcntl ":seek"; # not available in Perl 5.00503 use Fcntl; # gets open flags @@ -22,22 +44,26 @@ my ($SEEK_SET, $SEEK_CUR, $SEEK_END) = (0, 1, 2); sub tempFile($) { -# Here's what we'd do if we could expect Perl 5.6.1 or later, instead -# of calling this subroutine: -# my ($file, $filename) = tempfile("pnmquant_XXXX", -# SUFFIX=>".pnm", -# DIR=>File::Spec->tmpdir()) -# UNLINK=>$TRUE); - my ($suffix) = @_; - my $fileName; - local *file; # For some inexplicable reason, must be local, not my - my $i; - $i = 0; - do { - $fileName = File::Spec->tmpdir() . "/pnmquant_" . $i++ . $suffix; - } until sysopen(*file, $fileName, O_RDWR|O_CREAT|O_EXCL); - - return(*file, $fileName); + # We trust Perl's File::Temp to do a better job of creating the temp + # file, but it doesn't exist before Perl 5.6.1. + + if (eval { require File::Temp; 1 }) { + return File::Temp::tempfile("pnmquant_XXXX", + SUFFIX=>".pnm", + DIR=>File::Spec->tmpdir(), + UNLINK=>$TRUE); + } else { + my ($suffix) = @_; + my $fileName; + local *file; # For some inexplicable reason, must be local, not my + my $i; + $i = 0; + do { + $fileName = File::Spec->tmpdir() . "/pnmquant_" . $i++ . $suffix; + } until sysopen(*file, $fileName, O_RDWR|O_CREAT|O_EXCL); + + return(*file, $fileName); + } } @@ -247,7 +273,7 @@ openSeekableAsStdin($cmdlineR->{infile}); # Save Standard Output for our eventual output open(OLDOUT, ">&STDOUT"); -select(OLDOUT); # avoids Perl bug where it says we never use STDOUT +select(OLDOUT); # avoids Perl bug where it says we never use OLDOUT my $mapfileSpec = makeColormap($cmdlineR->{ncolors}, |