--- foomatic-db-engine-3.0-20031217/foomatic-ppdload.in.ppdload 2003-12-19 15:26:40.360620848 +0000 +++ foomatic-db-engine-3.0-20031217/foomatic-ppdload.in 2003-12-19 15:26:56.289725866 +0000 @@ -0,0 +1,118 @@ +#!@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('', ); + close PPDENTRY; + + # Either we've got it already + my $found = + ($ppdentry =~ m![\s\n]*printer/$printer[\s\n]*!s); + + # Or we need to append a new item and write the file + if (! $found) { + $ppdentry =~ s!^(\s*)!$1 \n$1 printer/$printer\n$1 \n$1!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('', ); + close PPDENTRY; + + # Do we have the requested entry? + my $found = + ($ppdentry =~ m![\s\n]*printer/$printer[\s\n]*!s); + + # Then we have to remove it and to write the file + if ($found) { + $ppdentry =~ s!\n+\s*[\s\n]*printer/$printer[\s\n]*\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); +} --- foomatic-db-engine-3.0-20031217/foomatic-ppdload.8.in.ppdload 2003-12-19 15:26:45.290034426 +0000 +++ foomatic-db-engine-3.0-20031217/foomatic-ppdload.8.in 2003-12-19 15:26:56.034756198 +0000 @@ -0,0 +1,47 @@ +.\" This -*- nroff -*- source file is part of foomatic. +.\" +.TH FOOMATIC-PPDLOAD 8 "2001-05-07" "Foomatic Project" +.SH NAME +foomatic-ppdload \- +.SH SYNOPSIS +.B foomatic-ppdload \-h + +.B foomatic-ppdload +\fIfilename.ppd printer-id\fR + +.B foomatic-ppdload \-R +\fIprinter-id\fR + +.SH DESCRIPTION +.B foomatic-ppdload +takes a ppd filename and a printer ID as arguments. It +parses a PPD file and writes option data into the foomatic database +for use with the foomatic "ppd" driver and that printer. + +With the \fB-R\fR option you can remove a printer from the "ppd" +driver, and with \fB-h\fR a short help text is shown. + +Right now, it will handle Boolean and PickOne options that go in the +Prolog, DocumentSetup, or PageSetup spots. Also, PPD interoption +constraints (not to be confused with foomatic option to printer and +driver mapping constraints) are not supported by foomatic. And of +course, the interesting color and font information from the PPD has +no place in the current foomatic schema. All this will change over +time. + + +.\".SH SEE ALSO +.\".IR foomatic-XXX (1), + +.SH EXIT STATUS +.B foomatic-ppdload +returns ... + +.SH AUTHOR +Manfred Wassmann <\fImanolo@NCC-1701.B.Shuttle.de\fR> for the foomatic +project using output from the associated binary. + +.SH BUGS +There are several limitations, but it's an interesting experiment. + +Please send bug reports to foomatic-devel@linuxprinting.org. --- foomatic-db-engine-3.0-20031217/configure.ac.ppdload 2003-12-19 15:27:03.188905120 +0000 +++ foomatic-db-engine-3.0-20031217/configure.ac 2003-12-19 15:27:21.165766554 +0000 @@ -280,7 +280,7 @@ foomatic-configure foomatic-printjob foomatic-kitload foomatic-ppdfile foomatic-preferred-driver foomatic-cleanupdrivers foomatic-getpjloptions foomatic-addpjloptions -foomatic-compiledb foomatic-fix-xml +foomatic-compiledb foomatic-fix-xml foomatic-ppdload foomatic-nonumericalids foomatic-replaceoldprinterids foomatic-ppd-options ) --- foomatic-db-engine-3.0-20031217/Makefile.in.ppdload 2003-12-19 15:27:25.217284580 +0000 +++ foomatic-db-engine-3.0-20031217/Makefile.in 2003-12-19 15:28:09.349034667 +0000 @@ -145,6 +145,7 @@ foomatic-kitload foomatic-ppdfile foomatic-preferred-driver \ foomatic-cleanupdrivers foomatic-getpjloptions \ foomatic-addpjloptions foomatic-compiledb foomatic-fix-xml \ + foomatic-ppdload \ foomatic-nonumericalids foomatic-replaceoldprinterids \ foomatic-ppd-options @@ -155,7 +156,7 @@ foomatic-ppd-options # Administrative commands, only useful for admins -SBINFILES:=foomatic-kitload \ +SBINFILES:=foomatic-kitload foomatic-ppdload \ foomatic-getpjloptions foomatic-addpjloptions \ foomatic-preferred-driver foomatic-fix-xml \ foomatic-nonumericalids foomatic-replaceoldprinterids