|
Server : Apache/2.2.2 (Fedora) System : Linux App1.pathumtani.go.th 2.6.20-1.2320.fc5smp #1 SMP Tue Jun 12 19:40:16 EDT 2007 i686 User : apache ( 48) PHP Version : 5.2.9 Disable Function : NONE Directory : /proc/self/root/usr/sbin/ |
Upload File : |
#!/usr/bin/perl
use Getopt::Std;
getopts("hdR:");
help() if $opt_h;
use Foomatic::PPD;
use Foomatic::Defaults;
my $file;
my $printer;
if ($opt_R) { # Remove entry
$printer = $opt_R;
} else { # Add entry
$file = $ARGV[0];
$printer = $ARGV[1];
}
if (!$opt_R) { # Add entry
if (! -f "$libdir/db/source/printer/$printer.xml") {
die "Printer $printer does not seem to exist in the database!\n";
}
if (! -f $file) {
die "The PPD file you specified, $file, does not seem to exist!\n";
}
# Load the PPD
my $p = new Foomatic::PPD $file, $printer;
if ($opt_d) {
# Parser PPD structure dump
use Data::Dumper;
local $Data::Dumper::Purity=1;
local $Data::Dumper::Indent=1;
print Dumper($p);
} else {
# Normal behavior, save as various option files by ID
my @opts = $p->foo_options();
for (@opts) {
my ($id, $xml) = ($_->{'id'}, $_->{'xml'});
my $ofile = "$libdir/db/source/opt/$id.xml";
open TMP, ">$ofile" or die "Cannot write $ofile!\n";
print STDERR "Writing $ofile\n";
print TMP join('',@{$xml});
close TMP;
}
# Add this printer to the ppd driver
# Read the driver entry file
open PPDENTRY, "< $libdir/db/source/driver/ppd.xml" or
die "Cannot read $libdir/db/source/driver/ppd.xml!\n";
print STDERR "Reading $libdir/db/source/driver/ppd.xml\n";
$ppdentry = join('', <PPDENTRY>);
close PPDENTRY;
# Either we've got it already
my $found =
($ppdentry =~ m!<id>[\s\n]*printer/$printer[\s\n]*</id>!s);
# Or we need to append a new item and write the file
if (! $found) {
$ppdentry =~ s!^(\s*)</printers>!$1 <printer>\n$1 <id>printer/$printer</id>\n$1 </printer>\n$1</printers>!m;
open PPDENTRY, "> $libdir/db/source/driver/ppd.xml" or
die "Cannot write $libdir/db/source/driver/ppd.xml!\n";
print STDERR "Writing $libdir/db/source/driver/ppd.xml\n";
print PPDENTRY $ppdentry;
close PPDENTRY;
} else {
print STDERR "Printer $printer already registered as supported by the \"ppd\" driver!\n";
}
}
} else { # Remove entry
# Read the driver entry file
open PPDENTRY, "< $libdir/db/source/driver/ppd.xml" or
die "Cannot read $libdir/db/source/driver/ppd.xml!\n";
print STDERR "Reading $libdir/db/source/driver/ppd.xml\n";
$ppdentry = join('', <PPDENTRY>);
close PPDENTRY;
# Do we have the requested entry?
my $found =
($ppdentry =~ m!<id>[\s\n]*printer/$printer[\s\n]*</id>!s);
# Then we have to remove it and to write the file
if ($found) {
$ppdentry =~ s!\n+\s*<printer>[\s\n]*<id>printer/$printer</id>[\s\n]*</printer>\s*\n+!\n!sg;
open PPDENTRY, "> $libdir/db/source/driver/ppd.xml" or
die "Cannot write $libdir/db/source/driver/ppd.xml!\n";
print STDERR "Writing $libdir/db/source/driver/ppd.xml\n";
print PPDENTRY $ppdentry;
close PPDENTRY;
} else {
print STDERR "Printer $printer not registered as supported by the \"ppd\" driver!\n";
}
# Remove the option entries
system("rm -f $libdir/db/source/opt/ppd-${printer}-*.xml");
}
exit(0);
sub help {
select STDERR;
print "\n";
print "Usage: foomatic-ppdload filename.ppd printer-id\n";
print " foomatic-ppdload -R printer-id\n";
print "\n";
print " The first form adds the printer with the ID printer-id\n";
print " and the PPD file filename.ppd to the \"ppd\" driver,\n";
print " the second form removes the printer with the ID\n";
print " printer-id from the \"ppd\" driver.\n";
print "\n";
exit(1);
}