/usr/bin/extractres is in psutils 1.17-31.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #!/usr/bin/perl
eval 'exec perl -S $0 "$@"'
if $running_under_some_shell;
# extractres: extract resources from PostScript file
#
# Copyright (C) Angus J. C. Duggan 1991-1995
# See file LICENSE for details.
$prog = ($0 =~ s=.*/==);
%resources = (); # list of resources included
%merge = (); # list of resources extracted this time
%extn = ("font", ".pfa", "file", ".ps", "procset", ".ps", # resource extns
"pattern", ".pat", "form", ".frm", "encoding", ".enc");
%type = ("%%BeginFile:", "file", "%%BeginProcSet:", "procset",
"%%BeginFont:", "font"); # resource types
while (@ARGV) {
$_ = shift;
if (/^-m(erge)?$/) { $merge = 1; }
elsif (/^-/) {
print STDERR "Usage: $prog [-merge] [file]\n";
exit 1;
} else {
unshift(@ARGV, $_);
last;
}
}
if (defined($ENV{TMPDIR})) { # set body file name
$body = "$ENV{TMPDIR}/body$$.ps";
} else {
$body = "body$$.ps";
}
open(BODY, $body) && die "Temporary file $body already exists";
open(BODY, ">$body") || die "Can't write file $body";
sub filename { # make filename for resource in @_
local($name);
foreach (@_) { # sanitise name
s/[!()\$\#*&\\\|\`\'\"\~\{\}\[\]\<\>\?]//g;
$name .= $_;
}
$name =~ s@.*/@@; # drop directories
die "Filename not found for resource ", join(" ", @_), "\n"
if $name =~ /^$/;
$name;
}
$output = STDOUT; # start writing header out
while (<>) {
if (/^%%BeginResource:/ || /^%%BeginFont:/ || /^%%BeginProcSet:/) {
local($comment, @res) = split(/\s+/); # look at resource type
local($type) = defined($type{$comment}) ? $type{$comment} : shift(@res);
local($name) = &filename(@res, $extn{$type}); # make file name
$saveout = $output;
if (!$resources{$name}) {
print "%%IncludeResource: $type ", join(" ", @res), "\n";
if (!open(RES, $name)) {
open(RES, ">$name") || die "Can't write file $name";
$resources{$name} = $name;
$merge{$name} = $merge;
$output = RES;
} else { # resource already exists
close(RES);
undef $output;
}
} elsif ($merge{$name}) {
open(RES, ">>$name") || die "Can't append to file $name";
$output = RES;
} else { # resource already included
undef $output;
}
} elsif (/^%%EndResource/ || /^%%EndFont/ || /^%%EndProcSet/) {
if (defined $output) {
print $output $_;
close($output);
}
$output = $saveout;
next;
} elsif ((/^%%EndProlog/ || /^%%BeginSetup/ || /^%%Page:/)) {
$output = BODY;
}
print $output $_
if defined $output;
}
close(BODY); # close body output file
open(BODY, $body); # reopen body for input
while (<BODY>) { # print it all
print $_;
}
close(BODY);
unlink($body); # dispose of body file
|