#!/usr/bin/perl
# -*- perl -*-
my $version_banner = <<END;
psselect 1.93
Copyright (c) Reuben Thomas 2016.
Released under the GPL version 3, or (at your option) any later version.
END

use warnings;
use strict;

BEGIN
{
# Relocatable header

if ("no" eq "yes") {
  my $exec_prefix = "/usr";
  my $orig_installdir = "/usr/bin"; # see Makefile.am's *_SCRIPTS variables
  my ($orig_installprefix, $curr_installprefix) = find_prefixes($orig_installdir, find_curr_installdir());
  sub relocate { # the subroutine is defined whether or not the enclosing block is executed
    my ($dir) = @_;
    if ("no" eq "yes") {
      $dir =~ s%^$orig_installprefix/%$curr_installprefix/%;
      $dir =~ s,/$,,;
    }
    return $dir;
  }
}

# Relocate the directory variables that we use.
my $pkgdatadir = &relocate("/usr/share/psutils");

# End of relocatable header; "real" Perl starts here.

  unshift (@INC, '/usr/share/psutils') unless $ENV{PSUTILS_UNINSTALLED};
}

use File::Basename;
use Getopt::Long;

use PSUtils;

our $program_name = basename($0);
my ($help_flag, $version_flag, $pages, $even_flag, $odd_flag, $reverse_flag, $quiet_flag);
$odd_flag = $even_flag = 0;

sub usage {
  my ($exit_code) = @_;
  print STDOUT <<END;
Usage: $program_name [OPTION...] [INFILE [OUTFILE]]
Select pages from a PostScript file.

  -R, --pages=PAGES    select the given page ranges
  -e, --even           select even-numbered pages
  -o, --odd            select odd-numbered pages
  -r, --reverse        reverse the order of the pages
  -q, --quiet          don't show page numbers being output
      --help           display this help and exit
      --version        display version information and exit

PAGES is a comma-separated list of pages and page ranges; see
pstops(1) for more details.
END
  exit $exit_code;
}

# Get arguments
Getopt::Long::Configure("bundling");
# Having configured bundling, must give short options explicitly
GetOptions(
  "pages|R|p=s" => \$pages,
  "even|e" => \$even_flag,
  "odd|o" => \$odd_flag,
  "reverse|r" => \$reverse_flag,
  "quiet|q" => \$quiet_flag,
  "help" => \$help_flag,
  "version" => \$version_flag,
 ) or usage(1);
if ($version_flag) {
  print STDOUT $version_banner;
  exit 0;
}
usage(0) if $help_flag;

# If we haven't gotten a page range yet, we'd better get one now
if (!$pages) {
  usage(1) if $#ARGV == -1;
  if (!$reverse_flag && !$even_flag && !$odd_flag && $#ARGV > -1) {
    $pages = shift @ARGV;
  } else {
    $pages = "1-_1";
  }
}

# Rearrange the pages
my @arg = ();
push @arg, "-r" if $reverse_flag;
push @arg, "-e" if $even_flag;
push @arg, "-o" if $odd_flag;
exec("pstops", "-R$pages", @arg, @ARGV) or Die("error running pstops");
