diff options
| -rwxr-xr-x | psresize2.pl | 57 | 
1 files changed, 40 insertions, 17 deletions
| diff --git a/psresize2.pl b/psresize2.pl index 483b413..b0e6748 100755 --- a/psresize2.pl +++ b/psresize2.pl @@ -1,5 +1,14 @@  #!/usr/bin/perl -w + +use Getopt::Long qw(:config no_ignore_case bundling);  +use Pod::Usage; +use IPC::Open2; +use IPC::Open3; +use POSIX qw(floor mkfifo); +use strict; + +  =head1 NAME  psresize2.pl - a better I<psresize> @@ -105,14 +114,7 @@ Version: 0.1, 25 September 2010  =cut -use Getopt::Long qw(:config no_ignore_case bundling);  -use Pod::Usage; -use IPC::Open2; -use IPC::Open3; -use POSIX qw(floor); -use strict; - - +my $tmpdir = "/tmp";  #  # Options & arguments  @@ -163,7 +165,7 @@ unless (defined $margin) {  &papersize ("a4", \$outwidth, \$outheight)      unless  (defined $outwidth  and  defined $outheight); -# Default unit: point +# Default unit: PostScript point  map {&topoints ($_)} ( \$outwidth, \$outheight,                         \$inwidth, \$inheight,                         \$margin ); @@ -177,17 +179,35 @@ if (lc $rotdir eq "left" or uc $rotdir eq 'L') {      die "Unknown rotation direction: `$rotdir'"  } +# Auxiliary files, to remove +my @auxfiles;  # Open input and output files  if (defined $infile && $infile ne "-") { -    open *FIN, '<', "$infile"  or  die "Can't read `$infile': $!"; - +    open FIN, '<', "$infile"  or  die "Can't read `$infile': $!";  } else {      *FIN = *STDIN; + +    # TODO: no need to such an ugly auxiliary file? +         +    $infile = "$tmpdir/psresize-stdin-" .  int(rand 2**16) . "ps"; + +    open FIN2, '>', "$infile" +        or die "Can't write into `$infile': $!"; +    push @auxfiles, "$infile"; + +    # cat > $filename +    while (<FIN>) { +         print FIN2 $_  or  die "Can't print: $!"; +    } +    close FIN2; +    close FIN; + +    open FIN, '<', "$infile"  or  die "Can't read `$infile': $!";  }  if (defined $outfile && $outfile ne "-") { -    open *FOUT, '>', "$outfile"  or  die "Can't create `$outfile': $!"; +    open FOUT, '>', "$outfile"  or  die "Can't create `$outfile': $!";  } else {      *FOUT = *STDOUT;  } @@ -245,17 +265,15 @@ if (defined $crop) {      @bbox = (0, 0, $inwidth, $inheight);  } else {      # Guess page size from the input file - -    # Duplicate the input filehandle, to avoid to seek into it -    open *FIN2, "<&FIN"  or  die "Can't dup FIN: $!"; -    while (<FIN2>) { +     +    while (<FIN>) {          if ($_ =~ m/^\%\%BoundingBox: (\d+) (\d+) (\d+) (\d+)/) {              @bbox = ($1, $2, $3, $4);              last;          }      }      die "Cannot guess input page size!"  unless  @bbox; -    close FIN2; +    seek FIN, 0, 0  or  die "$!";   } @@ -320,6 +338,9 @@ close FOUT;  # No zombie processes  waitpid $pid, 0; +# Delete auxiliary files +unlink @auxfiles; +  # Useless, but Perl doesn't see that this filehandle is used more than  # one time (and even automatically closed by `open3')  exit 0; @@ -460,6 +481,8 @@ sub papersize {      }  } + +  #  # Print a command just like you'd do it in a shell  # | 
