#! @PERL@

#
# npslpr: neo pslpr(1) utility
# 
# Copyright (C) 1995, 1996, Yves Arrouye <Yves.Arrouye@marin.fdn.fr>
# 
# This package and its included files may be redistributed under the
# terms of the GNU General Public License, a copy of which can be
# found in the file GPL.
# 
# I ask you to email me (preferrably in the form of context diffs)
# any changes you make to this code. This is a wish, not an obligation,
# but it will make maintaining the tools easier. Thanks!
# 

$dflt_printer{'lpr'} = 'PostScript';	# Default lpr(1) printer on this system.
$dflt_printer{'lp'} = 'PostScript';	# Default lp(1) printer on this system.

$slct_printer{'lpr'} = '-P';
$slct_printer{'lp'} = '-d ';

#

$no_psplpr_options = 1;

require 'psptools.pl';

$prog_lpr = 'lpr' unless $prog_lpr;
$prog_lp = 'lp' unless $prog_lp;

#

($myname = $0) =~ s,^.*/,,;

sub usage {
    local($code) = @_;

    if ($code) {
	select STDERR;
    }

    print "usage: $myname [ --version ] [ --lpr ] [ --lp ]"
	. " [ -Iresourcepath ] [ -p filename ]"
	. " [ -LRfGaz ] [ -ipagerange ] [ -Sfeature=value ]"
	. " [ spooler-options ]"
	. " [ file ... ]\n";

    exit $code;
}

if ($used_prog_lpr eq $prog_lpr) {
    $opt_lpr = 1;
} else {
    $opt_lp = 1;
}

while ($ARGV[0]) {
    if ($ARGV[0] eq "--version") {
        print "$myname";
	if ($myname eq 'pslpr') {
	    print " (npslpr)";
	}
	print " version @npslpr_version@, "
            . "by Yves Arrouye <Yves.Arrouye\@marin.fdn.fr>\n";
        exit(0);
    } elsif ($ARGV[0] eq "--lpr") {
	if ($chose_lpr) {
	    &usage(1) if ($opt_lp);
	} else {
	    $chose_lpr = 1;
	}
	$used_prog_lpr = $prog_lpr;
	$opt_lpr = 1;
	$opt_lp = 0;
    } elsif ($ARGV[0] eq "--lp") {
	if ($chose_lpr) {
	    &usage(1) if ($opt_lpr);
	} else {
	    $chose_lpr = 1;
	}
	$used_prog_lpr = $prog_lp;
	$opt_lp = 1;
	$opt_lpr = 0;
    } elsif ($ARGV[0] =~ '-i[0-9]+(-[0-9]+)') {
	local($opt) = $ARGV[0];
	$opt =~ s/i/p/;

	$cmd_psselect .= " $opt";
    } elsif ($ARGV[0] eq '-R') {
	$cmd_psselect .= " -r";
    } elsif ($ARGV[0] =~ '^-I') {
	;
    } elsif ($ARGV[0] eq '-p') {
	usage(1) if !($ARGV[1]);
	$cmd_psplpr .= " -o $ARGV[1]";
	shift(@ARGS);
    } elsif ($ARGV[0] eq '-f') {
	$cmd_psplpr .= " --warn";
    } elsif ($ARGV[0] eq '-F') {
	;
    } elsif ($ARGV[0] eq '-G') {
	;
    } elsif ($ARGV[0] eq '-a') {
	$cmd_psplpr .= " --stripdsc totally --stripcomments";
    } elsif ($ARGV[0] eq '-z') {
	;
    } elsif ($ARGV[0] =~ '^-S') {
	$cmd_psplpr .= " -u " . substr($ARGV[0], 2);
    } elsif ($ARGV[0] =~ '^-P(.+)') {
	&usage(1) if $opt_lp;
	$printer = $1;
	$opt_lpr = 1;
    } elsif ($ARGV[0] =~ '^-(#[0-9]*|[hmr])$') {
	&usage(1) if $opt_lp;
	$cmd_spooler .= " $ARGV[0]";
    } elsif ($ARGV[0] =~ '^-[CJ]$') {
	&usage(1) if $opt_lp;
	&usage(1) unless $ARGV[1];
	$cmd_spooler .= " $ARGV[0] $ARGV[1]";
	shift(@ARGV);
    } elsif ($ARGV[0] eq '-d') {
	&usage(1) if $opt_lpr;
	$printer = $1;
    } elsif ($ARGV[0] =~ '^-[chrsmw]$') {
	&usage(1) if $opt_lpr;
	$cmd_spooler .= " $ARGV[0]";
    } elsif ($ARGV[0] =~ '^-[nto]$') {
	&usage(1) if $opt_lpr;
	&usage(1) unless $ARGV[1];
	$cmd_spooler .= " $ARGV[0] $ARGV[1]";
	shift(@ARGV);
    } elsif ($ARGV[0] !~ '^-') {
	$files .= " $ARGV[0]";
    } else {
	&usage(1);
    }

    shift(@ARGV);
}

if (!defined($printer)) {
    $printer = &choose_default_printer;
    $cmd_psplpr .= " " . $slct_printer{&spooler_name} . "$printer";
}

if ($cmd_psselect) {
    $cmd = "psselect -q$cmd_psselect$files | ";
    $files='';
}
$cmd .= "psplpr$cmd_psplpr$cmd_spooler$files";

system($cmd);

