Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [photon@Thinkpad-X200T ~]$ cat /usr/lib/cups/filter/brother_lpdwrapper_HLL2300D
- #! /opt/brother/Printers/HLL2300D/cupswrapper/brother_lpdwrapper_HLL2300D
- [photon@Thinkpad-X200T ~]$ cat /opt/brother/Printers/HLL2300D/cupswrapper/brother_lpdwrapper_HLL2300D
- #! /usr/bin/perl
- #
- # CUPS filter for Brother laser printers
- #
- # Copyright (C) 2014 Brother. Industries, Ltd. All Rights Reserved
- #
- # Ver2.00
- # This program is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the Free
- # Software Foundation; either version 2 of the License, or (at your option)
- # any later version.
- #
- # This program is distributed in the hope that it will be useful, but WITHOUT
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- # more details.
- #
- # You should have received a copy of the GNU General Public License along with
- # this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- # Place, Suite 330, Boston, MA 02111-1307 USA
- #
- #use Cwd 'realpath';
- $ppdcust = "";
- # log functions
- $LOGFILE="/tmp/br_cupswrapper_ml1.log";
- $LOGLEVEL=7;
- $DEBUG=0;
- $LOG_LATESTONLY=1;
- $DEVICEURILOCK=1;
- $LPD_DEBUG=0;
- if ( $DEBUG > 0 ){
- $LPD_DEBUG=2;
- }
- $width=-1;
- $height=-1;
- #my $basedir = Cwd::realpath ($0);
- my $basedir = `readlink $0`;
- if ( $basedir eq '' ){
- $basedir = `realpath $0`;
- }
- chomp($basedir);
- $basedir =~ s/$PRINTER\/cupswrapper\/.*$/$PRINTER\//g;
- %units = ( pt => \&pt2dot,
- mm => \&mm2dot,
- inch => \&inch2dot,
- in => \&inch2dot,
- cm => \&cm2dot,
- m => \&m2dot,
- ft => \&ft2dot
- );
- $LPDCONFIGEXE="brprintconflsr3";
- my $INPUT_PS = "/tmp/br_cupswrapper_ml1_input.ps";
- my $OUTPUT_PRN = "/tmp/br_cupswrapper_ml1_output.prn";
- # main
- logprint( 0 , "START\n");
- my $cmdoptions=$ARGV[4];
- my $PPD = $ENV{PPD};
- my $PRINTER=$basedir;
- my $CUPSINPUT='';
- if ( @ARGV >= 6 ){
- $CUPSINPUT=$ARGV[7];
- }
- $PRINTER =~ s/^\/opt\/.*\/Printers\///g;
- $PRINTER =~ s/\/cupswrapper//g;
- $PRINTER =~ s/\///g;
- for (my $i = 0 ; $i < @ARGV ; $i ++){
- logprint( 0 , "ARG$i = $ARGV[$i]\n");
- }
- logprint( 0 , "PRINTER = $PRINTER \n");
- logprint( 0 , "PPD = $PPD\n");
- logprint( 0 , "BASEPATH = $basedir\n");
- logprint( 0 , "export PPD=$PPD\n");
- logprint( 0 , "$0 \"$ARGV[1]\" \"$ARGV[2]\" \"$ARGV[3]\" \"$ARGV[4]\" \"$ARGV[5]\" \"$ARGV[6]\"\n");
- my $LPDFILTER =$basedir."/lpd/filter_".$PRINTER;
- logprint( 0 , "\n");
- %vendor_commandline = (
- 'Resolution=300' => {"opt"=>"-res" , "val"=>"300"},
- 'Resolution=600' => {"opt"=>"-res" , "val"=>"600"},
- 'Resolution=600x300' => {"opt"=>"-res" , "val"=>"600x300"},
- 'Resolution=1200' => {"opt"=>"-res" , "val"=>"1200"},
- 'Resolution=HQ1200' => {"opt"=>"-res" , "val"=>"HQ1200"},
- 'Resolution=HQ1200A' => {"opt"=>"-res" , "val"=>"HQ1200A"},
- 'Resolution=HQ1200B' => {"opt"=>"-res" , "val"=>"HQ1200B"},
- 'PaperSource=Manual' => {"opt"=>"-ps" , "val"=>"MANUAL"},
- 'PaperSource=MPTray' => {"opt"=>"-ps" , "val"=>"MP"},
- 'PaperSource=Tray1' => {"opt"=>"-ps" , "val"=>"T1"},
- 'PaperSource=Tray2' => {"opt"=>"-ps" , "val"=>"T2"},
- 'PaperSource=Tray3' => {"opt"=>"-ps" , "val"=>"T3"},
- 'PaperSource=Tray4' => {"opt"=>"-ps" , "val"=>"T4"},
- 'PaperSource=Tray5' => {"opt"=>"-ps" , "val"=>"T5"},
- 'PaperSource=AutoSelect' => {"opt"=>"-ps" , "val"=>"AUTO"},
- 'Duplex=Simplex' => {"opt"=>"-dx" , "val"=>"OFF"},
- 'Duplex=Duplex' => {"opt"=>"-dx" , "val"=>"ON"},
- 'DuplexType=Long' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"LONG"},
- 'DuplexType=Short' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"SHORT"},
- 'PaperType=A4' => {"opt"=>"-pt" , "val"=>"A4"},
- 'PaperType=FanFoldGermanLegal' => {"opt"=>"-pt" , "val"=>"FOLIO"},
- 'PaperType=210x270mm' => {"opt"=>"-pt" , "val"=>"A4L"},
- 'PaperType=Letter' => {"opt"=>"-pt" , "val"=>"LT"},
- 'PaperType=Legal' => {"opt"=>"-pt" , "val"=>"LGL"},
- 'PaperType=Exective' => {"opt"=>"-pt" , "val"=>"EXE"},
- 'PaperType=Executive' => {"opt"=>"-pt" , "val"=>"EXE"},
- 'PaperType=A5' => {"opt"=>"-pt" , "val"=>"A5"},
- 'PaperType=A6' => {"opt"=>"-pt" , "val"=>"A6"},
- 'PaperType=B5' => {"opt"=>"-pt" , "val"=>"JISB5"},
- 'PaperType=ISOB5' => {"opt"=>"-pt" , "val"=>"B5"},
- 'PaperType=JISB5' => {"opt"=>"-pt" , "val"=>"JISB5"},
- 'PaperType=B6' => {"opt"=>"-pt" , "val"=>"JISB6"},
- 'PaperType=ISOB6' => {"opt"=>"-pt" , "val"=>"B6"},
- 'PaperType=JISB6' => {"opt"=>"-pt" , "val"=>"JISB6"},
- 'PaperType=C5' => {"opt"=>"-pt" , "val"=>"C5"},
- 'PaperType=EnvC5' => {"opt"=>"-pt" , "val"=>"C5"},
- 'PaperType=DL' => {"opt"=>"-pt" , "val"=>"DL"},
- 'PaperType=EnvDL' => {"opt"=>"-pt" , "val"=>"DL"},
- 'PaperType=Com10' => {"opt"=>"-pt" , "val"=>"COM-10"},
- 'PaperType=COM10' => {"opt"=>"-pt" , "val"=>"COM-10"},
- 'PaperType=Com-10' => {"opt"=>"-pt" , "val"=>"COM-10"},
- 'PaperType=COM-10' => {"opt"=>"-pt" , "val"=>"COM-10"},
- 'PaperType=EnvCOM10' => {"opt"=>"-pt" , "val"=>"COM-10"},
- 'PaperType=Env10' => {"opt"=>"-pt" , "val"=>"COM-10"},
- 'PaperType=Monarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
- 'PaperType=EnvMonarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
- 'PaperType=4x6' => {"opt"=>"-pt" , "val"=>"PC4X6"},
- 'PaperType=Postcard' => {"opt"=>"-pt" , "val"=>"POSTCARD"},
- 'PaperType=DoublePostcardRotated' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
- 'PaperType=DHagaki' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
- 'PaperType=EnvYou4' => {"opt"=>"-pt" , "val"=>"ENVYOU4"},
- 'PaperType=EnvChou3' => {"opt"=>"-pt" , "val"=>"ENVCHOU3"},
- 'PaperType=EnvChou4' => {"opt"=>"-pt" , "val"=>"ENVCHOU4"},
- 'PaperType=3x5' => {"opt"=>"-pt" , "val"=>"3X5"},
- 'PaperType=195x270mm' => {"opt"=>"-pt" , "val"=>"195x270mm"},
- 'PaperType=184x260mm' => {"opt"=>"-pt" , "val"=>"184x260mm"},
- 'PaperType=197x273mm' => {"opt"=>"-pt" , "val"=>"197x273mm"},
- 'PaperType=Custom\..*' => {"opt"=>"-pt" , "val"=>"CUSTOM0"},
- 'PaperType=CUSTOM1' => {"opt"=>"-pt" , "val"=>"CUSTOM1"},
- 'PaperType=CUSTOM2' => {"opt"=>"-pt" , "val"=>"CUSTOM2"},
- 'PaperType=CUSTOM3' => {"opt"=>"-pt" , "val"=>"CUSTOM3"},
- 'PaperType=CUSTOM4' => {"opt"=>"-pt" , "val"=>"CUSTOM4"},
- 'PaperType=CUSTOM5' => {"opt"=>"-pt" , "val"=>"CUSTOM5"},
- 'PaperType=CUSTOM6' => {"opt"=>"-pt" , "val"=>"CUSTOM6"},
- 'PaperType=CUSTOM7' => {"opt"=>"-pt" , "val"=>"CUSTOM7"},
- 'PaperType=CUSTOM8' => {"opt"=>"-pt" , "val"=>"CUSTOM8"},
- 'PaperType=CUSTOM9' => {"opt"=>"-pt" , "val"=>"CUSTOM9"},
- 'Media=PlainPaper' => {"opt"=>"-md" , "val"=>"PLAIN"},
- 'Media=ThinPaper' => {"opt"=>"-md" , "val"=>"THIN"},
- 'Media=ThickPaper' => {"opt"=>"-md" , "val"=>"THICK"},
- 'Media=ThickerPaper' => {"opt"=>"-md" , "val"=>"THICKER"},
- 'Media=BondPaper' => {"opt"=>"-md" , "val"=>"BOND"},
- 'Media=Transparencies' => {"opt"=>"-md" , "val"=>"TRANS"},
- 'Media=Envelopes' => {"opt"=>"-md" , "val"=>"ENV"},
- 'Media=Env.Thick' => {"opt"=>"-md" , "val"=>"ENV-THICK"},
- 'Media=Env.Thin' => {"opt"=>"-md" , "val"=>"ENV-THIN"},
- 'Media=Recycled' => {"opt"=>"-md" , "val"=>"RECYCLED"},
- 'Sleep=PrinterDefault' => {"opt"=>"-sp" , "val"=>"PRINTER"},
- );
- %DefaultResolution = (
- "optionname" => 'DefaultResolution' ,
- "optionlist" => {
- '300dpi' => {"opt"=>"-res" , "val"=>"300"},
- '600dpi' => {"opt"=>"-res" , "val"=>"600"},
- '600x300dpi' => {"opt"=>"-res" , "val"=>"600x300"},
- '1200dpi' => {"opt"=>"-res" , "val"=>"1200"},
- 'HQ1200dpi' => {"opt"=>"-res" , "val"=>"HQ1200"},
- '1200x600dpi' => {"opt"=>"-res" , "val"=>"HQ1200A"},
- '2400x600dpi' => {"opt"=>"-res" , "val"=>"HQ1200B"},
- }
- ) ;
- %DefaultPageSize = (
- "optionname" => 'DefaultPageSize' ,
- "optionlist" => {
- 'A4' => {"opt"=>"-pt" , "val"=>"A4"},
- 'FanFoldGermanLegal' => {"opt"=>"-pt" , "val"=>"FOLIO"},
- '210x270mm' => {"opt"=>"-pt" , "val"=>"A4L"},
- 'Letter' => {"opt"=>"-pt" , "val"=>"LT"},
- 'Legal' => {"opt"=>"-pt" , "val"=>"LGL"},
- 'Executive' => {"opt"=>"-pt" , "val"=>"EXE"},
- 'A5' => {"opt"=>"-pt" , "val"=>"A5"},
- 'A6' => {"opt"=>"-pt" , "val"=>"A6"},
- 'B5' => {"opt"=>"-pt" , "val"=>"JISB5"},
- 'ISOB5' => {"opt"=>"-pt" , "val"=>"B5"},
- 'JISB5' => {"opt"=>"-pt" , "val"=>"JISB5"},
- 'B6' => {"opt"=>"-pt" , "val"=>"JISB6"},
- 'ISOB6' => {"opt"=>"-pt" , "val"=>"B6"},
- 'JISB6' => {"opt"=>"-pt" , "val"=>"JISB6"},
- 'C5' => {"opt"=>"-pt" , "val"=>"C5"},
- 'EnvC5' => {"opt"=>"-pt" , "val"=>"C5"},
- 'DL' => {"opt"=>"-pt" , "val"=>"DL"},
- 'EnvDL' => {"opt"=>"-pt" , "val"=>"DL"},
- 'Env10' => {"opt"=>"-pt" , "val"=>"COM-10"},
- 'EnvMonarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
- 'Monarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
- '4x6' => {"opt"=>"-pt" , "val"=>"PC4X6"},
- 'Postcard' => {"opt"=>"-pt" , "val"=>"POSTCARD"},
- 'DoublePostcardRotated' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
- 'DHagaki' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
- 'EnvYou4' => {"opt"=>"-pt" , "val"=>"ENVYOU4"},
- 'EnvChou3' => {"opt"=>"-pt" , "val"=>"ENVCHOU3"},
- 'EnvChou4' => {"opt"=>"-pt" , "val"=>"ENVCHOU4"},
- '3x5' => {"opt"=>"-pt" , "val"=>"3X5"},
- '195x270mm' => {"opt"=>"-pt" , "val"=>"195x270mm"},
- '184x260mm' => {"opt"=>"-pt" , "val"=>"184x260mm"},
- '197x273mm' => {"opt"=>"-pt" , "val"=>"197x273mm"},
- 'Custom\..*' => {"opt"=>"-pt" , "val"=>"CUSTOM0"},
- 'CUSTOM1' => {"opt"=>"-pt" , "val"=>"CUSTOM1"},
- 'CUSTOM2' => {"opt"=>"-pt" , "val"=>"CUSTOM2"},
- 'CUSTOM3' => {"opt"=>"-pt" , "val"=>"CUSTOM3"},
- 'CUSTOM4' => {"opt"=>"-pt" , "val"=>"CUSTOM4"},
- 'CUSTOM5' => {"opt"=>"-pt" , "val"=>"CUSTOM5"},
- 'CUSTOM6' => {"opt"=>"-pt" , "val"=>"CUSTOM6"},
- 'CUSTOM7' => {"opt"=>"-pt" , "val"=>"CUSTOM7"},
- 'CUSTOM8' => {"opt"=>"-pt" , "val"=>"CUSTOM8"},
- 'CUSTOM9' => {"opt"=>"-pt" , "val"=>"CUSTOM9"},
- 'Envelopes' => {"opt"=>"-md" , "val"=>"ENV"},
- }
- ) ;
- %DefaultBrMediaType = (
- "optionname" => 'DefaultBrMediaType' ,
- "optionlist" => {
- 'PLAIN' => {"opt"=>"-md" , "val"=>"PLAIN"},
- 'THIN' => {"opt"=>"-md" , "val"=>"THIN"},
- 'THICK' => {"opt"=>"-md" , "val"=>"THICK"},
- 'THICKERPAPER2' => {"opt"=>"-md" , "val"=>"THICKER"},
- 'BOND' => {"opt"=>"-md" , "val"=>"BOND"},
- 'TRANSPARENCIES' => {"opt"=>"-md" , "val"=>"TRANS"},
- 'ENV' => {"opt"=>"-md" , "val"=>"ENV"},
- 'ENVTHICK' => {"opt"=>"-md" , "val"=>"ENV-THICK"},
- 'ENVTHIN' => {"opt"=>"-md" , "val"=>"ENV-THIN"},
- 'RECYCLED' => {"opt"=>"-md" , "val"=>"RECYCLED"},
- }
- ) ;
- %DefaultInputSlot = (
- "optionname" => 'DefaultInputSlot' ,
- "optionlist" => {
- 'MANUAL' => {"opt"=>"-ps" , "val"=>"MANUAL"},
- 'MPTRAY' => {"opt"=>"-ps" , "val"=>"MP"},
- 'TRAY1' => {"opt"=>"-ps" , "val"=>"T1"},
- 'TRAY2' => {"opt"=>"-ps" , "val"=>"T2"},
- 'TRAY3' => {"opt"=>"-ps" , "val"=>"T3"},
- 'TRAY4' => {"opt"=>"-ps" , "val"=>"T4"},
- 'TRAY5' => {"opt"=>"-ps" , "val"=>"T5"},
- 'AUTO' => {"opt"=>"-ps" , "val"=>"AUTO"},
- }
- ) ;
- %DefaultDuplex = (
- "optionname" => 'DefaultDuplex' ,
- "optionlist" => {
- 'DuplexTumble' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"SHORT"},
- 'DuplexNoTumble' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"LONG"},
- 'None' => {"opt"=>"-dx" , "val"=>"OFF"},
- }
- ) ;
- %DefaultTonerSaveMode = (
- "optionname" => 'DefaultTonerSaveMode' ,
- "optionlist" => {
- 'OFF' => {"opt"=>"-ts" , "val"=>"OFF"},
- 'ON' => {"opt"=>"-ts" , "val"=>"ON"},
- }
- ) ;
- %DefaultSleep = (
- "optionname" => 'DefaultSleep' ,
- "optionlist" => {
- 'PrinterDefault' => {"opt"=>"-sp" , "val"=>"PRINTER"},
- '2minutes' => {"opt"=>"-sp" , "val"=>"2"},
- '10minutes' => {"opt"=>"-sp" , "val"=>"10"},
- '30minutes' => {"opt"=>"-sp" , "val"=>"30"},
- }
- ) ;
- %numeric_option = (
- "Sleep" => {"opt"=>"-sp" , "val"=>"*"},
- );
- %initial_configuration = (
- "-res" => "600" ,
- "-ps" => "AUTO" ,
- "-dx" => "OFF" ,
- "-dxt" => "LONG" ,
- "-pt" => "A4" ,
- "-md" => "PLAIN" ,
- "-cp" => "1" ,
- "-sp" => "PRINTER",
- "-ts" => "OFF" ,
- );
- %ppddefaultslist = (
- "DefaultResolution" => \%DefaultResolution,
- "DefaultPageSize" => \%DefaultPageSize,
- "DefaultBrMediaType" => \%DefaultBrMediaType,
- "DefaultInputSlot" => \%DefaultInputSlot,
- "DefaultDuplex" => \%DefaultDuplex,
- "DefaultTonerSaveMode" => \%DefaultTonerSaveMode,
- "DefaultSleep" => \%DefaultSleep
- );
- %mediaoptlist = (
- "DefaultPageSize" => \%DefaultPageSize,
- "DefaultBrMediaType" => \%DefaultBrMediaType,
- "DefaultInputSlot" => \%DefaultInputSlot,
- "DefaultDuplex" => \%DefaultDuplex,
- );
- my $LATESTINFO="/tmp/".$PRINTER."_latest_print_info";
- unlink $LATESTINFO;
- `touch $LATESTINFO`;
- my $TEMPRC = "/tmp/br".$PRINTER."rc_".$$;
- `cp $basedir/inf/br${PRINTER}rc $TEMPRC`;
- $ENV{BRPRINTERRCFILE} = $TEMPRC;
- logprint( 0 , "TEMPRC = $TEMPRC\n");
- $LOCKFILE="/tmp/$PRINTER"."_lf_".$ENV{DEVICE_URI};
- if ( $DEVICEURILOCK == 1){
- open (FILE , "+> $LOCKFILE");
- flock(FILE , 2);
- }
- $ENV{LPD_DEBUG} = $LPD_DEBUG;
- $ENV{PS}=1;
- $ENV{BRPAPERWIDTH} = $width;
- $ENV{BRPAPERHEIGHT} = $height;
- my %lpr_options = &set_options ($PPD , $cmdoptions );
- &exec_lpdconfig ( $basedir ,$PRINTER , \%lpr_options );
- logprint( 2, "\n");
- if ( $DEBUG == 0 ){
- $command = "cat $CUPSINPUT | $LPDFILTER";
- logprint( 2 , "$command\n");
- system("$command");
- }
- elsif ($DEBUG == 1 ){
- $command = "cat $CUPSINPUT > $INPUT_PS && cat $INPUT_PS |".
- "$LPDFILTER > $OUTPUT_PRN";
- logprint( 2, "export BRPAPERWIDTH=$ENV{BRPAPERWIDTH}\n");
- logprint( 2, "export BRPAPERHEIGHT=$ENV{BRPAPERHEIGHT}\n");
- logprint( 2, "export PPD=$ENV{PPD}\n");
- logprint( 2, "export BRPRINTERRCFILE=$LATESTINFO\n");
- logprint( 2, "export LPD_DEBUG=$ENV{LPD_DEBUG}\n");
- logprint( 2, "export PS=$ENV{PS}\n");
- logprint( 2, "cat $INPUT_PS | $LPDFILTER > $OUTPUT_PRN \n");
- system("$command 2> /tmp/br_cupswrapper_ml1_lpderr");
- system("cat $OUTPUT_PRN");
- logprint( 2, "$command\n");
- }
- elsif ($DEBUG > 1 ){
- $command = "cat $CUPSINPUT > $INPUT_PS && cat $INPUT_PS |".
- "$LPDFILTER > $OUTPUT_PRN";
- logprint( 2, "export BRPAPERWIDTH=$ENV{BRPAPERWIDTH}\n");
- logprint( 2, "export BRPAPERHEIGHT=$ENV{BRPAPERHEIGHT}\n");
- logprint( 2, "export PPD=$ENV{PPD}\n");
- logprint( 2, "export BRPRINTERRCFILE=$LATESTINFO\n");
- logprint( 2, "export LPD_DEBUG=$ENV{LPD_DEBUG}\n");
- logprint( 2, "export PS=$ENV{PS}\n");
- logprint( 2, "cat $INPUT_PS | $LPDFILTER > $OUTPUT_PRN \n");
- system("$command 2> /tmp/br_cupswrapper_ml1_lpderr");
- print "\0";
- }
- `mv "$TEMPRC" "$LATESTINFO"`;
- `echo "\n\nCUSTOM PAGE SIZE ${width}x${height}" >> $LATESTINFO`;
- #unlink $TEMPRC;
- if ( $DEVICEURILOCK == 1 ){
- close (FILE);
- }
- exit 0;
- #-----------------------------------------------------------
- sub logprint {
- ($level , $data) = @_;
- if ($DEBUG != 0 ){
- if ($LOG_LATESTONLY == 1){
- open (LOG , '>'.$LOGFILE) or return 0;
- $LOG_LATESTONLY = 0;
- }
- else{
- open (LOG , '>>'.$LOGFILE) or return 0;
- }
- if ( $level < $LOGLEVEL){
- print LOG $data;
- }
- close (LOG);
- }
- }
- #
- # set options to @cmdopt table
- #
- sub set_option_table {
- ($table_ref ,$key, $value, $lpr_options_ref) = @_;
- my %table = %$table_ref;
- my %lpr_opt = %$lpr_options_ref;
- if ( exists ($table{$key})){
- my $cmdref = $table{$key};
- my $opt = $cmdref->{opt};
- my $val = $cmdref->{val};
- if (exists($lpr_opt{$opt})){
- $lpr_options_ref->{$opt} = $val;
- logprint( 2 , "$opt <= $lpr_options_ref->{$opt} : ($value)\n");
- if ( $opt eq "-pt" && $val eq "CUSTOM0" ){
- $ppdcust = $value;
- }
- }
- if ( exists ($cmdref->{opt2})){
- my $opt = $cmdref->{opt2};
- my $val = $cmdref->{val2};
- if (exists($lpr_opt{$opt})){
- $lpr_options_ref->{$opt} = $val;
- logprint( 2 , "$opt <= $lpr_options_ref->{$opt} : ($value)\n");
- if ( $opt eq "-pt" && $val eq "CUSTOM0" ){
- $ppdcust = $value;
- }
- }
- }
- }
- }
- sub set_option_table_n {
- ($table_ref ,$key, $value , $lpr_options) = @_;
- my %table = %$table_ref;
- if ( exists ($table{$key})){
- ($table{$key})->{val} = $value;
- &set_option_table (\%table , $key , "" ,$lpr_options);
- }
- }
- #
- # Custom paper
- #
- sub pt2dot{
- (my $xi, my $yi) = @_;
- my $xo = $xi * 600 / 72;
- my $yo = $yi * 600 / 72;
- return (int ($xo) , int ($yo) );
- }
- sub mm2dot{
- (my $xi, my $yi) = @_;
- my $xo = $xi * 6000 / 254;
- my $yo = $yi * 6000 / 254;
- return (int ($xo) , int ($yo) );
- }
- sub inch2dot{
- (my $xi, my $yi) = @_;
- my $xo = $xi * 600;
- my $yo = $yi * 600;
- return (int ($xo) , int ($yo) );
- }
- sub cm2dot{
- (my $xi, my $yi) = @_;
- my $xo = $xi * 60000 / 254;
- my $yo = $yi * 60000 / 254;
- return (int ($xo) , int ($yo) );
- }
- sub m2dot{
- (my $xi, my $yi) = @_;
- my $xo = $xi * 6000000 / 254;
- my $yo = $yi * 6000000 / 254;
- return (int ($xo) , int ($yo) );
- }
- sub ft2dot{
- (my $xi, my $yi) = @_;
- my $xo = $xi * 600 * 12;
- my $yo = $yi * 600 * 12;
- return (int ($xo) , int ($yo) );
- }
- sub check_custom_paper {
- my $x = 0;
- my $y = 0;
- my $unitfunc;
- my $unit = '';
- my $ssize = '';
- (my $PPD , my $lpr_options_ref) = @_;
- if ( $lpr_options_ref->{'-pt'} eq "CUSTOM0" ){
- foreach (keys %units){
- if ( $ppdcust =~ /[0-9]$_$/) {
- logprint( 2 , "HIT $_\n");
- $unit = $_;
- $unitfunc = $units{$_};
- }
- }
- $ssize = $ppdcust;
- $ssize =~ s/^Custom\.//g;
- $ssize =~ s/$unit$//g;
- my @psiz = split (/x/,$ssize);
- ($x , $y) = &$unitfunc ( $psiz[0] ,$psiz[1]);
- return ($x , $y);
- }
- elsif ( $lpr_options_ref->{'-pt'} =~ /CUSTOM[1-9]/ ){
- my $tmp = '*PaperDimension '."$lpr_options_ref->{'-pt'}";
- my $ssize = `grep \"$tmp\" $PPD`;
- chomp($ssize);
- $ssize =~ s/\"$//;
- $ssize =~ s/^.*\"//;
- my @psiz = split (/ /,$ssize);
- ($x , $y) = &pt2dot ( $psiz[0] ,$psiz[1]);
- return ($x , $y);
- }
- return ("{Undefined}" , "{Undefined}");
- }
- #
- # get options from PPD and command-line arguments
- #
- sub set_options {
- ($PPD , $cmdoptions) = @_;
- my %cmdopt = ();
- # get command line options
- foreach(split (/ /,$cmdoptions)) {
- my @eachcmdopt = split (/=/,$_);
- $cmdopt{$eachcmdopt[0]} = $eachcmdopt[1] ;
- }
- #get PPD options
- my @ppddefaults = `grep '^*Default' $PPD`;
- my %ppdopt = ();
- foreach(@ppddefaults){
- chomp();
- my $label = $_;
- $label =~ s/^\*//g;
- $label =~ s/: .*$//g;
- my $value = $_;
- $value =~ s/^.*: //g;
- $ppdopt{$label} = $value;
- }
- my %lpr_options = %initial_configuration;
- #set ppd options
- logprint( 2 , "\nSET PPD OPTIONS\n");
- foreach(keys %ppdopt){
- my $option_name = $_ ;
- my $option_value = $ppdopt{$_};
- my $ppdoptdb_ref = $ppddefaultslist{$option_name};
- $list = $ppdoptdb_ref->{optionlist};
- my @key = (keys %$list);
- foreach(@key){
- my $tmp = '^'.$_.'$';
- if ( $option_value =~ /$tmp/){
- &set_option_table( $list , $_ , $option_value, \%lpr_options);
- }
- }
- }
- #set Vendor options (string)
- logprint( 2 , "\nSET VENDOR COMMAND OPTIONS\n");
- foreach(keys %cmdopt){
- my $option_name_value = $_ . "=" .$cmdopt{$_};
- my $option_value = $cmdopt{$_};
- foreach(keys %vendor_commandline){
- my $tmp= '^'.$_.'$';
- if ( $option_name_value =~ /$tmp/){
- &set_option_table( \%vendor_commandline,
- $_,
- $option_value ,
- \%lpr_options);
- }
- }
- }
- logprint( 2 , "\nSET PPD CMD OPTIONS\n");
- foreach(keys %cmdopt){
- my $option_name = "Default" . $_;
- my $option_value = $cmdopt{$_ };
- my $ppdoptdb_ref = $ppddefaultslist{$option_name};
- $list = $ppdoptdb_ref->{optionlist};
- foreach(keys %$list){
- my $tmp= '^'.$_.'$';
- if ( $option_value =~ /$tmp/ ){
- &set_option_table( $list,
- $_,
- $option_value,
- \%lpr_options);
- }
- }
- }
- #set Vendor options (numeric)
- logprint( 2 , "\nSET VENDOR NUMERIC COMMAND OPTIONS\n");
- foreach(keys %cmdopt){
- my $option_name = $_ ;
- my $n_value = $cmdopt{$_} ;
- &set_option_table_n( \%numeric_option ,
- $option_name ,
- $n_value,
- \%lpr_options);
- }
- #set MEDIA extension options
- logprint( 2 , "\nSET MEDIA (STANDARD) COMMAND OPTIONS\n");
- foreach my $option (split( /,/ , $cmdopt{media})){
- foreach my $cur_optlist (keys %mediaoptlist){
- $cur_opttbl = $cur_optlist ->{optionlist};
- foreach (keys %$cur_opttbl ){
- my $tmp = '^'.$_.'$';
- if ( $option =~ /$tmp/ ){
- &set_option_table( $cur_opttbl ,
- $_,
- $option,
- \%lpr_options);
- }
- }
- }
- }
- ($width , $height) = check_custom_paper ($PPD,
- \%lpr_options);
- if ( $width ne "{Undefined}" && $height ne "{Undefined}" ){
- $ENV{BRPAPERWIDTH} = ${width};
- $ENV{BRPAPERHEIGHT} = ${height};
- logprint( 0 , "\nCUSTOM PAPER x=$width y=$height\n\n");
- }
- return %lpr_options;
- }
- #exec lpd config
- sub exec_lpdconfig {
- (my $basedir , my $PRINTER , my $lpr_options_ref) = @_;
- my $lpddir = $basedir;
- my %lpr_options = %$lpr_options_ref;
- $lpddir = $basedir."/lpd/";
- my $lpdconf = $lpddir.'/'.$LPDCONFIGEXE;
- while(($op , $val) = each(%lpr_options)){
- my $lpdconf_command = "$lpdconf -P $PRINTER $op $val";
- logprint( 0 , "$lpdconf_command\n");
- `$lpdconf_command`;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement