home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
- # -*- perl -*-
- # $Revision: 3.4.2.6 $
-
- # This is a little Ghostscript regularization script. It massages
- # arguments to make Ghostscript execute properly as a filter, with
- # output on stdout and errors etc on stderr.
-
- # Arbitrary other option processing could happen here, too.
-
- # IT WOULD BE WRONG to have this file do any processing of the input
- # or output data. Such job transforms belong in actual filters, or
- # inside Ghostscript itself.
-
- my $prefix = "/usr";
- my $configpath = "/etc/foomatic";
- # Read config file if present
- %conf = readConfFile("$configpath/filter.conf");
-
- # Set GhostScript path
- my $gspath = "gs";
- $gspath = $conf{gspath} if defined(%conf) and defined $conf{gspath};
- my $execpath = "/usr/bin:/usr/local/bin:/usr/bin:/bin";
- # Get execution path from config file
- $execpath = $conf{execpath} if defined(%conf) and defined $conf{execpath};
- $ENV{'PATH'} = $execpath;
-
- grep (m!\-sOutputFile=\-!
- && do {
- # Send the job to fd 3; errors will be on 2(stderr) and job
- # ps program interpreter output on 1(stdout).
- $_ = '-sOutputFile=/dev/fd/3';
- # quoted properly below...
- }, @ARGV);
-
- grep (((m!^\-$!) || (m!^\-_$!))
- && do {
- # Get the input from fd 0.
- $_ = "/dev/fd/0";
- }, @ARGV);
-
- # Turn *off* -q (quiet!); now that stderr is useful! :)
- my @myargs = grep (! m!^\-q$!, @ARGV);
-
- # Escape any quotes, and then quote everything just to be sure...
-
- # Escaping a single quote inside single quotes is a bit complex as the shell
- # takes everything literal there. So we have to assemble it by concatinating
- # different quoted strings.
- # Finally we get e.g.: 'x'"'"'y' or ''"'"'xy' or 'xy'"'"'' or ...
- grep (s/\'/\'\"\'\"\'/g, @myargs);
- my $args = "'" . join("' '", @myargs) . "'";
-
- # Execute Ghostscript, with both job and gs errors on stderr, and job
- # output on stdout...
-
- print STDERR "foomatic-gswrapper: $gspath $args 3>&1 1>&2\n";
- exec "$gspath $args 3>&1 1>&2";
-
- die "Failed to execute Ghostscript?!";
-
- # Read the config file
-
- sub readConfFile {
- my ($file) = @_;
-
- my %conf;
- # Read config file if present
- if (open CONF, "< $file") {
- while (<CONF>)
- {
- $conf{$1}="$2" if (m/^\s*([^\#\s]\S*)\s*:\s*(.*?)\s*$/);
- }
- close CONF;
- }
-
- return %conf;
- }
-