Repository URL to install this package:
|
Version:
3.1.0-1 ▾
|
brgenml1cupswrapper
/
opt
/
brother
/
Printers
/
BrGenML1
/
cupswrapper
/
brother_lpdwrapper_BrGenML1
|
|---|
#! /usr/bin/perl
#
# CUPS filter for Brother laser printers
#
# Copyright (C) 2014 Brother. Industries, Ltd.
#
# 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`;
}
}