#!/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
##############################################################################
#  This is nothing but a compatibility interface for Pnmquant.
#  An old program coded to call Ppmquant will continue working because
#  this interface exists.  All new (or newly modified) programs should
#  call Pnmquant or Pnmremap instead.
#
#  In days past, Pnmquant and Pnmremap did not exist.  Ppmquant did
#  the job of both Pnmremap and Pnmquant, but only on PPM images.
##############################################################################

use strict;

sub doVersionHack($) {
    my ($argvR) = @_;

    my $arg1 = $argvR->[0];

    if (defined($arg1) && (($arg1 eq "--version") || ($arg1 eq "-version"))) {
        my $termStatus = system('pnmquant', '--version');
        exit($termStatus == 0 ? 0 : 1);
    }
}

doVersionHack(\@ARGV);

use Getopt::Long;

my @ppmquantArgv = @ARGV;

Getopt::Long::Configure('pass_through');

my $validOptions = GetOptions('mapfile' => \my $mapfileopt);

my $mapfileOptionPresent = ($validOptions && $mapfileopt);

if ($mapfileOptionPresent) {
    system('pnmremap', @ppmquantArgv);
} else {
    system('pnmquant', @ppmquantArgv);
}
