Advertisement
Guest User

CUPS Brother HL-L2300D filter

a guest
Dec 25th, 2018
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.84 KB | None | 0 0
  1. [photon@Thinkpad-X200T ~]$ cat /usr/lib/cups/filter/brother_lpdwrapper_HLL2300D
  2. #! /opt/brother/Printers/HLL2300D/cupswrapper/brother_lpdwrapper_HLL2300D
  3. [photon@Thinkpad-X200T ~]$ cat /opt/brother/Printers/HLL2300D/cupswrapper/brother_lpdwrapper_HLL2300D
  4. #! /usr/bin/perl
  5. #
  6. # CUPS filter for Brother laser printers
  7. #
  8. # Copyright (C) 2014 Brother. Industries, Ltd. All Rights Reserved
  9. #
  10. # Ver2.00
  11.  
  12. # This program is free software; you can redistribute it and/or modify it
  13. # under the terms of the GNU General Public License as published by the Free
  14. # Software Foundation; either version 2 of the License, or (at your option)
  15. # any later version.
  16. #
  17. # This program is distributed in the hope that it will be useful, but WITHOUT
  18. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  19. # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  20. # more details.
  21. #
  22. # You should have received a copy of the GNU General Public License along with
  23. # this program; if not, write to the Free Software Foundation, Inc., 59 Temple
  24. # Place, Suite 330, Boston, MA 02111-1307 USA
  25. #
  26.  
  27.  
  28. #use Cwd 'realpath';
  29.  
  30.  
  31. $ppdcust = "";
  32.  
  33. # log functions
  34.  
  35. $LOGFILE="/tmp/br_cupswrapper_ml1.log";
  36. $LOGLEVEL=7;
  37. $DEBUG=0;
  38. $LOG_LATESTONLY=1;
  39. $DEVICEURILOCK=1;
  40. $LPD_DEBUG=0;
  41.  
  42. if ( $DEBUG > 0 ){
  43. $LPD_DEBUG=2;
  44. }
  45.  
  46. $width=-1;
  47. $height=-1;
  48.  
  49. #my $basedir = Cwd::realpath ($0);
  50. my $basedir = `readlink $0`;
  51. if ( $basedir eq '' ){
  52. $basedir = `realpath $0`;
  53. }
  54. chomp($basedir);
  55.  
  56. $basedir =~ s/$PRINTER\/cupswrapper\/.*$/$PRINTER\//g;
  57.  
  58.  
  59. %units = ( pt => \&pt2dot,
  60. mm => \&mm2dot,
  61. inch => \&inch2dot,
  62. in => \&inch2dot,
  63. cm => \&cm2dot,
  64. m => \&m2dot,
  65. ft => \&ft2dot
  66. );
  67.  
  68.  
  69.  
  70. $LPDCONFIGEXE="brprintconflsr3";
  71.  
  72. my $INPUT_PS = "/tmp/br_cupswrapper_ml1_input.ps";
  73. my $OUTPUT_PRN = "/tmp/br_cupswrapper_ml1_output.prn";
  74.  
  75.  
  76. # main
  77.  
  78. logprint( 0 , "START\n");
  79.  
  80.  
  81. my $cmdoptions=$ARGV[4];
  82. my $PPD = $ENV{PPD};
  83. my $PRINTER=$basedir;
  84. my $CUPSINPUT='';
  85. if ( @ARGV >= 6 ){
  86. $CUPSINPUT=$ARGV[7];
  87. }
  88.  
  89.  
  90. $PRINTER =~ s/^\/opt\/.*\/Printers\///g;
  91. $PRINTER =~ s/\/cupswrapper//g;
  92. $PRINTER =~ s/\///g;
  93.  
  94. for (my $i = 0 ; $i < @ARGV ; $i ++){
  95. logprint( 0 , "ARG$i = $ARGV[$i]\n");
  96. }
  97.  
  98. logprint( 0 , "PRINTER = $PRINTER \n");
  99. logprint( 0 , "PPD = $PPD\n");
  100. logprint( 0 , "BASEPATH = $basedir\n");
  101.  
  102. logprint( 0 , "export PPD=$PPD\n");
  103. logprint( 0 , "$0 \"$ARGV[1]\" \"$ARGV[2]\" \"$ARGV[3]\" \"$ARGV[4]\" \"$ARGV[5]\" \"$ARGV[6]\"\n");
  104.  
  105.  
  106. my $LPDFILTER =$basedir."/lpd/filter_".$PRINTER;
  107.  
  108. logprint( 0 , "\n");
  109.  
  110.  
  111. %vendor_commandline = (
  112. 'Resolution=300' => {"opt"=>"-res" , "val"=>"300"},
  113. 'Resolution=600' => {"opt"=>"-res" , "val"=>"600"},
  114. 'Resolution=600x300' => {"opt"=>"-res" , "val"=>"600x300"},
  115. 'Resolution=1200' => {"opt"=>"-res" , "val"=>"1200"},
  116. 'Resolution=HQ1200' => {"opt"=>"-res" , "val"=>"HQ1200"},
  117. 'Resolution=HQ1200A' => {"opt"=>"-res" , "val"=>"HQ1200A"},
  118. 'Resolution=HQ1200B' => {"opt"=>"-res" , "val"=>"HQ1200B"},
  119. 'PaperSource=Manual' => {"opt"=>"-ps" , "val"=>"MANUAL"},
  120. 'PaperSource=MPTray' => {"opt"=>"-ps" , "val"=>"MP"},
  121. 'PaperSource=Tray1' => {"opt"=>"-ps" , "val"=>"T1"},
  122. 'PaperSource=Tray2' => {"opt"=>"-ps" , "val"=>"T2"},
  123. 'PaperSource=Tray3' => {"opt"=>"-ps" , "val"=>"T3"},
  124. 'PaperSource=Tray4' => {"opt"=>"-ps" , "val"=>"T4"},
  125. 'PaperSource=Tray5' => {"opt"=>"-ps" , "val"=>"T5"},
  126. 'PaperSource=AutoSelect' => {"opt"=>"-ps" , "val"=>"AUTO"},
  127. 'Duplex=Simplex' => {"opt"=>"-dx" , "val"=>"OFF"},
  128. 'Duplex=Duplex' => {"opt"=>"-dx" , "val"=>"ON"},
  129. 'DuplexType=Long' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"LONG"},
  130. 'DuplexType=Short' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"SHORT"},
  131. 'PaperType=A4' => {"opt"=>"-pt" , "val"=>"A4"},
  132. 'PaperType=FanFoldGermanLegal' => {"opt"=>"-pt" , "val"=>"FOLIO"},
  133. 'PaperType=210x270mm' => {"opt"=>"-pt" , "val"=>"A4L"},
  134. 'PaperType=Letter' => {"opt"=>"-pt" , "val"=>"LT"},
  135. 'PaperType=Legal' => {"opt"=>"-pt" , "val"=>"LGL"},
  136. 'PaperType=Exective' => {"opt"=>"-pt" , "val"=>"EXE"},
  137. 'PaperType=Executive' => {"opt"=>"-pt" , "val"=>"EXE"},
  138. 'PaperType=A5' => {"opt"=>"-pt" , "val"=>"A5"},
  139. 'PaperType=A6' => {"opt"=>"-pt" , "val"=>"A6"},
  140. 'PaperType=B5' => {"opt"=>"-pt" , "val"=>"JISB5"},
  141. 'PaperType=ISOB5' => {"opt"=>"-pt" , "val"=>"B5"},
  142. 'PaperType=JISB5' => {"opt"=>"-pt" , "val"=>"JISB5"},
  143. 'PaperType=B6' => {"opt"=>"-pt" , "val"=>"JISB6"},
  144. 'PaperType=ISOB6' => {"opt"=>"-pt" , "val"=>"B6"},
  145. 'PaperType=JISB6' => {"opt"=>"-pt" , "val"=>"JISB6"},
  146. 'PaperType=C5' => {"opt"=>"-pt" , "val"=>"C5"},
  147. 'PaperType=EnvC5' => {"opt"=>"-pt" , "val"=>"C5"},
  148. 'PaperType=DL' => {"opt"=>"-pt" , "val"=>"DL"},
  149. 'PaperType=EnvDL' => {"opt"=>"-pt" , "val"=>"DL"},
  150. 'PaperType=Com10' => {"opt"=>"-pt" , "val"=>"COM-10"},
  151. 'PaperType=COM10' => {"opt"=>"-pt" , "val"=>"COM-10"},
  152. 'PaperType=Com-10' => {"opt"=>"-pt" , "val"=>"COM-10"},
  153. 'PaperType=COM-10' => {"opt"=>"-pt" , "val"=>"COM-10"},
  154. 'PaperType=EnvCOM10' => {"opt"=>"-pt" , "val"=>"COM-10"},
  155. 'PaperType=Env10' => {"opt"=>"-pt" , "val"=>"COM-10"},
  156. 'PaperType=Monarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
  157. 'PaperType=EnvMonarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
  158. 'PaperType=4x6' => {"opt"=>"-pt" , "val"=>"PC4X6"},
  159. 'PaperType=Postcard' => {"opt"=>"-pt" , "val"=>"POSTCARD"},
  160. 'PaperType=DoublePostcardRotated' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
  161. 'PaperType=DHagaki' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
  162. 'PaperType=EnvYou4' => {"opt"=>"-pt" , "val"=>"ENVYOU4"},
  163. 'PaperType=EnvChou3' => {"opt"=>"-pt" , "val"=>"ENVCHOU3"},
  164. 'PaperType=EnvChou4' => {"opt"=>"-pt" , "val"=>"ENVCHOU4"},
  165. 'PaperType=3x5' => {"opt"=>"-pt" , "val"=>"3X5"},
  166. 'PaperType=195x270mm' => {"opt"=>"-pt" , "val"=>"195x270mm"},
  167. 'PaperType=184x260mm' => {"opt"=>"-pt" , "val"=>"184x260mm"},
  168. 'PaperType=197x273mm' => {"opt"=>"-pt" , "val"=>"197x273mm"},
  169. 'PaperType=Custom\..*' => {"opt"=>"-pt" , "val"=>"CUSTOM0"},
  170. 'PaperType=CUSTOM1' => {"opt"=>"-pt" , "val"=>"CUSTOM1"},
  171. 'PaperType=CUSTOM2' => {"opt"=>"-pt" , "val"=>"CUSTOM2"},
  172. 'PaperType=CUSTOM3' => {"opt"=>"-pt" , "val"=>"CUSTOM3"},
  173. 'PaperType=CUSTOM4' => {"opt"=>"-pt" , "val"=>"CUSTOM4"},
  174. 'PaperType=CUSTOM5' => {"opt"=>"-pt" , "val"=>"CUSTOM5"},
  175. 'PaperType=CUSTOM6' => {"opt"=>"-pt" , "val"=>"CUSTOM6"},
  176. 'PaperType=CUSTOM7' => {"opt"=>"-pt" , "val"=>"CUSTOM7"},
  177. 'PaperType=CUSTOM8' => {"opt"=>"-pt" , "val"=>"CUSTOM8"},
  178. 'PaperType=CUSTOM9' => {"opt"=>"-pt" , "val"=>"CUSTOM9"},
  179. 'Media=PlainPaper' => {"opt"=>"-md" , "val"=>"PLAIN"},
  180. 'Media=ThinPaper' => {"opt"=>"-md" , "val"=>"THIN"},
  181. 'Media=ThickPaper' => {"opt"=>"-md" , "val"=>"THICK"},
  182. 'Media=ThickerPaper' => {"opt"=>"-md" , "val"=>"THICKER"},
  183. 'Media=BondPaper' => {"opt"=>"-md" , "val"=>"BOND"},
  184. 'Media=Transparencies' => {"opt"=>"-md" , "val"=>"TRANS"},
  185. 'Media=Envelopes' => {"opt"=>"-md" , "val"=>"ENV"},
  186. 'Media=Env.Thick' => {"opt"=>"-md" , "val"=>"ENV-THICK"},
  187. 'Media=Env.Thin' => {"opt"=>"-md" , "val"=>"ENV-THIN"},
  188. 'Media=Recycled' => {"opt"=>"-md" , "val"=>"RECYCLED"},
  189. 'Sleep=PrinterDefault' => {"opt"=>"-sp" , "val"=>"PRINTER"},
  190. );
  191.  
  192.  
  193.  
  194.  
  195. %DefaultResolution = (
  196. "optionname" => 'DefaultResolution' ,
  197. "optionlist" => {
  198. '300dpi' => {"opt"=>"-res" , "val"=>"300"},
  199. '600dpi' => {"opt"=>"-res" , "val"=>"600"},
  200. '600x300dpi' => {"opt"=>"-res" , "val"=>"600x300"},
  201. '1200dpi' => {"opt"=>"-res" , "val"=>"1200"},
  202. 'HQ1200dpi' => {"opt"=>"-res" , "val"=>"HQ1200"},
  203. '1200x600dpi' => {"opt"=>"-res" , "val"=>"HQ1200A"},
  204. '2400x600dpi' => {"opt"=>"-res" , "val"=>"HQ1200B"},
  205. }
  206. ) ;
  207. %DefaultPageSize = (
  208. "optionname" => 'DefaultPageSize' ,
  209. "optionlist" => {
  210. 'A4' => {"opt"=>"-pt" , "val"=>"A4"},
  211. 'FanFoldGermanLegal' => {"opt"=>"-pt" , "val"=>"FOLIO"},
  212. '210x270mm' => {"opt"=>"-pt" , "val"=>"A4L"},
  213. 'Letter' => {"opt"=>"-pt" , "val"=>"LT"},
  214. 'Legal' => {"opt"=>"-pt" , "val"=>"LGL"},
  215. 'Executive' => {"opt"=>"-pt" , "val"=>"EXE"},
  216. 'A5' => {"opt"=>"-pt" , "val"=>"A5"},
  217. 'A6' => {"opt"=>"-pt" , "val"=>"A6"},
  218. 'B5' => {"opt"=>"-pt" , "val"=>"JISB5"},
  219. 'ISOB5' => {"opt"=>"-pt" , "val"=>"B5"},
  220. 'JISB5' => {"opt"=>"-pt" , "val"=>"JISB5"},
  221. 'B6' => {"opt"=>"-pt" , "val"=>"JISB6"},
  222. 'ISOB6' => {"opt"=>"-pt" , "val"=>"B6"},
  223. 'JISB6' => {"opt"=>"-pt" , "val"=>"JISB6"},
  224. 'C5' => {"opt"=>"-pt" , "val"=>"C5"},
  225. 'EnvC5' => {"opt"=>"-pt" , "val"=>"C5"},
  226. 'DL' => {"opt"=>"-pt" , "val"=>"DL"},
  227. 'EnvDL' => {"opt"=>"-pt" , "val"=>"DL"},
  228. 'Env10' => {"opt"=>"-pt" , "val"=>"COM-10"},
  229. 'EnvMonarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
  230. 'Monarch' => {"opt"=>"-pt" , "val"=>"MONARCH"},
  231. '4x6' => {"opt"=>"-pt" , "val"=>"PC4X6"},
  232. 'Postcard' => {"opt"=>"-pt" , "val"=>"POSTCARD"},
  233. 'DoublePostcardRotated' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
  234. 'DHagaki' => {"opt"=>"-pt" , "val"=>"DHAGAKI"},
  235. 'EnvYou4' => {"opt"=>"-pt" , "val"=>"ENVYOU4"},
  236. 'EnvChou3' => {"opt"=>"-pt" , "val"=>"ENVCHOU3"},
  237. 'EnvChou4' => {"opt"=>"-pt" , "val"=>"ENVCHOU4"},
  238. '3x5' => {"opt"=>"-pt" , "val"=>"3X5"},
  239. '195x270mm' => {"opt"=>"-pt" , "val"=>"195x270mm"},
  240. '184x260mm' => {"opt"=>"-pt" , "val"=>"184x260mm"},
  241. '197x273mm' => {"opt"=>"-pt" , "val"=>"197x273mm"},
  242. 'Custom\..*' => {"opt"=>"-pt" , "val"=>"CUSTOM0"},
  243. 'CUSTOM1' => {"opt"=>"-pt" , "val"=>"CUSTOM1"},
  244. 'CUSTOM2' => {"opt"=>"-pt" , "val"=>"CUSTOM2"},
  245. 'CUSTOM3' => {"opt"=>"-pt" , "val"=>"CUSTOM3"},
  246. 'CUSTOM4' => {"opt"=>"-pt" , "val"=>"CUSTOM4"},
  247. 'CUSTOM5' => {"opt"=>"-pt" , "val"=>"CUSTOM5"},
  248. 'CUSTOM6' => {"opt"=>"-pt" , "val"=>"CUSTOM6"},
  249. 'CUSTOM7' => {"opt"=>"-pt" , "val"=>"CUSTOM7"},
  250. 'CUSTOM8' => {"opt"=>"-pt" , "val"=>"CUSTOM8"},
  251. 'CUSTOM9' => {"opt"=>"-pt" , "val"=>"CUSTOM9"},
  252. 'Envelopes' => {"opt"=>"-md" , "val"=>"ENV"},
  253. }
  254. ) ;
  255. %DefaultBrMediaType = (
  256. "optionname" => 'DefaultBrMediaType' ,
  257. "optionlist" => {
  258. 'PLAIN' => {"opt"=>"-md" , "val"=>"PLAIN"},
  259. 'THIN' => {"opt"=>"-md" , "val"=>"THIN"},
  260. 'THICK' => {"opt"=>"-md" , "val"=>"THICK"},
  261. 'THICKERPAPER2' => {"opt"=>"-md" , "val"=>"THICKER"},
  262. 'BOND' => {"opt"=>"-md" , "val"=>"BOND"},
  263. 'TRANSPARENCIES' => {"opt"=>"-md" , "val"=>"TRANS"},
  264. 'ENV' => {"opt"=>"-md" , "val"=>"ENV"},
  265. 'ENVTHICK' => {"opt"=>"-md" , "val"=>"ENV-THICK"},
  266. 'ENVTHIN' => {"opt"=>"-md" , "val"=>"ENV-THIN"},
  267. 'RECYCLED' => {"opt"=>"-md" , "val"=>"RECYCLED"},
  268. }
  269. ) ;
  270. %DefaultInputSlot = (
  271. "optionname" => 'DefaultInputSlot' ,
  272. "optionlist" => {
  273. 'MANUAL' => {"opt"=>"-ps" , "val"=>"MANUAL"},
  274. 'MPTRAY' => {"opt"=>"-ps" , "val"=>"MP"},
  275. 'TRAY1' => {"opt"=>"-ps" , "val"=>"T1"},
  276. 'TRAY2' => {"opt"=>"-ps" , "val"=>"T2"},
  277. 'TRAY3' => {"opt"=>"-ps" , "val"=>"T3"},
  278. 'TRAY4' => {"opt"=>"-ps" , "val"=>"T4"},
  279. 'TRAY5' => {"opt"=>"-ps" , "val"=>"T5"},
  280. 'AUTO' => {"opt"=>"-ps" , "val"=>"AUTO"},
  281. }
  282. ) ;
  283. %DefaultDuplex = (
  284. "optionname" => 'DefaultDuplex' ,
  285. "optionlist" => {
  286. 'DuplexTumble' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"SHORT"},
  287. 'DuplexNoTumble' => {"opt"=>"-dx" , "val"=>"ON" , "opt2"=>"-dxt" , "val2"=>"LONG"},
  288. 'None' => {"opt"=>"-dx" , "val"=>"OFF"},
  289. }
  290. ) ;
  291. %DefaultTonerSaveMode = (
  292. "optionname" => 'DefaultTonerSaveMode' ,
  293. "optionlist" => {
  294. 'OFF' => {"opt"=>"-ts" , "val"=>"OFF"},
  295. 'ON' => {"opt"=>"-ts" , "val"=>"ON"},
  296. }
  297. ) ;
  298. %DefaultSleep = (
  299. "optionname" => 'DefaultSleep' ,
  300. "optionlist" => {
  301. 'PrinterDefault' => {"opt"=>"-sp" , "val"=>"PRINTER"},
  302. '2minutes' => {"opt"=>"-sp" , "val"=>"2"},
  303. '10minutes' => {"opt"=>"-sp" , "val"=>"10"},
  304. '30minutes' => {"opt"=>"-sp" , "val"=>"30"},
  305. }
  306. ) ;
  307. %numeric_option = (
  308. "Sleep" => {"opt"=>"-sp" , "val"=>"*"},
  309. );
  310. %initial_configuration = (
  311. "-res" => "600" ,
  312. "-ps" => "AUTO" ,
  313. "-dx" => "OFF" ,
  314. "-dxt" => "LONG" ,
  315. "-pt" => "A4" ,
  316. "-md" => "PLAIN" ,
  317. "-cp" => "1" ,
  318. "-sp" => "PRINTER",
  319. "-ts" => "OFF" ,
  320. );
  321. %ppddefaultslist = (
  322. "DefaultResolution" => \%DefaultResolution,
  323. "DefaultPageSize" => \%DefaultPageSize,
  324. "DefaultBrMediaType" => \%DefaultBrMediaType,
  325. "DefaultInputSlot" => \%DefaultInputSlot,
  326. "DefaultDuplex" => \%DefaultDuplex,
  327. "DefaultTonerSaveMode" => \%DefaultTonerSaveMode,
  328. "DefaultSleep" => \%DefaultSleep
  329. );
  330. %mediaoptlist = (
  331. "DefaultPageSize" => \%DefaultPageSize,
  332. "DefaultBrMediaType" => \%DefaultBrMediaType,
  333. "DefaultInputSlot" => \%DefaultInputSlot,
  334. "DefaultDuplex" => \%DefaultDuplex,
  335. );
  336.  
  337.  
  338.  
  339. my $LATESTINFO="/tmp/".$PRINTER."_latest_print_info";
  340. unlink $LATESTINFO;
  341. `touch $LATESTINFO`;
  342.  
  343.  
  344.  
  345. my $TEMPRC = "/tmp/br".$PRINTER."rc_".$$;
  346.  
  347.  
  348. `cp $basedir/inf/br${PRINTER}rc $TEMPRC`;
  349. $ENV{BRPRINTERRCFILE} = $TEMPRC;
  350.  
  351. logprint( 0 , "TEMPRC = $TEMPRC\n");
  352.  
  353. $LOCKFILE="/tmp/$PRINTER"."_lf_".$ENV{DEVICE_URI};
  354.  
  355. if ( $DEVICEURILOCK == 1){
  356. open (FILE , "+> $LOCKFILE");
  357. flock(FILE , 2);
  358. }
  359.  
  360.  
  361. $ENV{LPD_DEBUG} = $LPD_DEBUG;
  362. $ENV{PS}=1;
  363.  
  364. $ENV{BRPAPERWIDTH} = $width;
  365. $ENV{BRPAPERHEIGHT} = $height;
  366.  
  367.  
  368.  
  369. my %lpr_options = &set_options ($PPD , $cmdoptions );
  370.  
  371. &exec_lpdconfig ( $basedir ,$PRINTER , \%lpr_options );
  372.  
  373. logprint( 2, "\n");
  374. if ( $DEBUG == 0 ){
  375. $command = "cat $CUPSINPUT | $LPDFILTER";
  376. logprint( 2 , "$command\n");
  377. system("$command");
  378. }
  379. elsif ($DEBUG == 1 ){
  380. $command = "cat $CUPSINPUT > $INPUT_PS && cat $INPUT_PS |".
  381. "$LPDFILTER > $OUTPUT_PRN";
  382.  
  383. logprint( 2, "export BRPAPERWIDTH=$ENV{BRPAPERWIDTH}\n");
  384. logprint( 2, "export BRPAPERHEIGHT=$ENV{BRPAPERHEIGHT}\n");
  385. logprint( 2, "export PPD=$ENV{PPD}\n");
  386. logprint( 2, "export BRPRINTERRCFILE=$LATESTINFO\n");
  387. logprint( 2, "export LPD_DEBUG=$ENV{LPD_DEBUG}\n");
  388. logprint( 2, "export PS=$ENV{PS}\n");
  389.  
  390. logprint( 2, "cat $INPUT_PS | $LPDFILTER > $OUTPUT_PRN \n");
  391. system("$command 2> /tmp/br_cupswrapper_ml1_lpderr");
  392. system("cat $OUTPUT_PRN");
  393.  
  394. logprint( 2, "$command\n");
  395.  
  396. }
  397. elsif ($DEBUG > 1 ){
  398. $command = "cat $CUPSINPUT > $INPUT_PS && cat $INPUT_PS |".
  399. "$LPDFILTER > $OUTPUT_PRN";
  400.  
  401. logprint( 2, "export BRPAPERWIDTH=$ENV{BRPAPERWIDTH}\n");
  402. logprint( 2, "export BRPAPERHEIGHT=$ENV{BRPAPERHEIGHT}\n");
  403. logprint( 2, "export PPD=$ENV{PPD}\n");
  404. logprint( 2, "export BRPRINTERRCFILE=$LATESTINFO\n");
  405. logprint( 2, "export LPD_DEBUG=$ENV{LPD_DEBUG}\n");
  406. logprint( 2, "export PS=$ENV{PS}\n");
  407.  
  408. logprint( 2, "cat $INPUT_PS | $LPDFILTER > $OUTPUT_PRN \n");
  409. system("$command 2> /tmp/br_cupswrapper_ml1_lpderr");
  410. print "\0";
  411.  
  412. }
  413.  
  414.  
  415. `mv "$TEMPRC" "$LATESTINFO"`;
  416. `echo "\n\nCUSTOM PAGE SIZE ${width}x${height}" >> $LATESTINFO`;
  417. #unlink $TEMPRC;
  418.  
  419.  
  420. if ( $DEVICEURILOCK == 1 ){
  421. close (FILE);
  422. }
  423.  
  424.  
  425. exit 0;
  426.  
  427. #-----------------------------------------------------------
  428.  
  429. sub logprint {
  430. ($level , $data) = @_;
  431. if ($DEBUG != 0 ){
  432. if ($LOG_LATESTONLY == 1){
  433. open (LOG , '>'.$LOGFILE) or return 0;
  434. $LOG_LATESTONLY = 0;
  435. }
  436. else{
  437. open (LOG , '>>'.$LOGFILE) or return 0;
  438. }
  439. if ( $level < $LOGLEVEL){
  440. print LOG $data;
  441. }
  442. close (LOG);
  443. }
  444. }
  445.  
  446.  
  447. #
  448. # set options to @cmdopt table
  449. #
  450.  
  451.  
  452. sub set_option_table {
  453. ($table_ref ,$key, $value, $lpr_options_ref) = @_;
  454. my %table = %$table_ref;
  455. my %lpr_opt = %$lpr_options_ref;
  456.  
  457. if ( exists ($table{$key})){
  458. my $cmdref = $table{$key};
  459. my $opt = $cmdref->{opt};
  460. my $val = $cmdref->{val};
  461. if (exists($lpr_opt{$opt})){
  462. $lpr_options_ref->{$opt} = $val;
  463. logprint( 2 , "$opt <= $lpr_options_ref->{$opt} : ($value)\n");
  464.  
  465. if ( $opt eq "-pt" && $val eq "CUSTOM0" ){
  466. $ppdcust = $value;
  467. }
  468.  
  469. }
  470. if ( exists ($cmdref->{opt2})){
  471. my $opt = $cmdref->{opt2};
  472. my $val = $cmdref->{val2};
  473. if (exists($lpr_opt{$opt})){
  474. $lpr_options_ref->{$opt} = $val;
  475. logprint( 2 , "$opt <= $lpr_options_ref->{$opt} : ($value)\n");
  476.  
  477. if ( $opt eq "-pt" && $val eq "CUSTOM0" ){
  478. $ppdcust = $value;
  479. }
  480.  
  481. }
  482. }
  483.  
  484.  
  485.  
  486.  
  487.  
  488. }
  489. }
  490. sub set_option_table_n {
  491. ($table_ref ,$key, $value , $lpr_options) = @_;
  492. my %table = %$table_ref;
  493. if ( exists ($table{$key})){
  494. ($table{$key})->{val} = $value;
  495. &set_option_table (\%table , $key , "" ,$lpr_options);
  496. }
  497. }
  498.  
  499.  
  500. #
  501. # Custom paper
  502. #
  503.  
  504. sub pt2dot{
  505. (my $xi, my $yi) = @_;
  506. my $xo = $xi * 600 / 72;
  507. my $yo = $yi * 600 / 72;
  508. return (int ($xo) , int ($yo) );
  509. }
  510. sub mm2dot{
  511. (my $xi, my $yi) = @_;
  512. my $xo = $xi * 6000 / 254;
  513. my $yo = $yi * 6000 / 254;
  514. return (int ($xo) , int ($yo) );
  515. }
  516. sub inch2dot{
  517. (my $xi, my $yi) = @_;
  518. my $xo = $xi * 600;
  519. my $yo = $yi * 600;
  520. return (int ($xo) , int ($yo) );
  521. }
  522. sub cm2dot{
  523. (my $xi, my $yi) = @_;
  524. my $xo = $xi * 60000 / 254;
  525. my $yo = $yi * 60000 / 254;
  526. return (int ($xo) , int ($yo) );
  527. }
  528. sub m2dot{
  529. (my $xi, my $yi) = @_;
  530. my $xo = $xi * 6000000 / 254;
  531. my $yo = $yi * 6000000 / 254;
  532. return (int ($xo) , int ($yo) );
  533. }
  534. sub ft2dot{
  535. (my $xi, my $yi) = @_;
  536. my $xo = $xi * 600 * 12;
  537. my $yo = $yi * 600 * 12;
  538. return (int ($xo) , int ($yo) );
  539. }
  540.  
  541.  
  542.  
  543. sub check_custom_paper {
  544. my $x = 0;
  545. my $y = 0;
  546. my $unitfunc;
  547. my $unit = '';
  548. my $ssize = '';
  549.  
  550. (my $PPD , my $lpr_options_ref) = @_;
  551.  
  552. if ( $lpr_options_ref->{'-pt'} eq "CUSTOM0" ){
  553.  
  554. foreach (keys %units){
  555.  
  556. if ( $ppdcust =~ /[0-9]$_$/) {
  557. logprint( 2 , "HIT $_\n");
  558. $unit = $_;
  559. $unitfunc = $units{$_};
  560. }
  561. }
  562. $ssize = $ppdcust;
  563. $ssize =~ s/^Custom\.//g;
  564. $ssize =~ s/$unit$//g;
  565.  
  566.  
  567. my @psiz = split (/x/,$ssize);
  568. ($x , $y) = &$unitfunc ( $psiz[0] ,$psiz[1]);
  569.  
  570. return ($x , $y);
  571. }
  572. elsif ( $lpr_options_ref->{'-pt'} =~ /CUSTOM[1-9]/ ){
  573.  
  574. my $tmp = '*PaperDimension '."$lpr_options_ref->{'-pt'}";
  575. my $ssize = `grep \"$tmp\" $PPD`;
  576. chomp($ssize);
  577. $ssize =~ s/\"$//;
  578. $ssize =~ s/^.*\"//;
  579. my @psiz = split (/ /,$ssize);
  580. ($x , $y) = &pt2dot ( $psiz[0] ,$psiz[1]);
  581. return ($x , $y);
  582. }
  583. return ("{Undefined}" , "{Undefined}");
  584. }
  585.  
  586.  
  587.  
  588. #
  589. # get options from PPD and command-line arguments
  590. #
  591. sub set_options {
  592. ($PPD , $cmdoptions) = @_;
  593.  
  594. my %cmdopt = ();
  595.  
  596.  
  597. # get command line options
  598.  
  599. foreach(split (/ /,$cmdoptions)) {
  600. my @eachcmdopt = split (/=/,$_);
  601. $cmdopt{$eachcmdopt[0]} = $eachcmdopt[1] ;
  602. }
  603.  
  604.  
  605. #get PPD options
  606.  
  607. my @ppddefaults = `grep '^*Default' $PPD`;
  608. my %ppdopt = ();
  609.  
  610. foreach(@ppddefaults){
  611. chomp();
  612. my $label = $_;
  613. $label =~ s/^\*//g;
  614. $label =~ s/: .*$//g;
  615. my $value = $_;
  616. $value =~ s/^.*: //g;
  617. $ppdopt{$label} = $value;
  618. }
  619.  
  620.  
  621. my %lpr_options = %initial_configuration;
  622.  
  623.  
  624. #set ppd options
  625.  
  626. logprint( 2 , "\nSET PPD OPTIONS\n");
  627. foreach(keys %ppdopt){
  628. my $option_name = $_ ;
  629. my $option_value = $ppdopt{$_};
  630. my $ppdoptdb_ref = $ppddefaultslist{$option_name};
  631.  
  632. $list = $ppdoptdb_ref->{optionlist};
  633. my @key = (keys %$list);
  634.  
  635. foreach(@key){
  636. my $tmp = '^'.$_.'$';
  637. if ( $option_value =~ /$tmp/){
  638. &set_option_table( $list , $_ , $option_value, \%lpr_options);
  639. }
  640.  
  641. }
  642. }
  643.  
  644. #set Vendor options (string)
  645.  
  646. logprint( 2 , "\nSET VENDOR COMMAND OPTIONS\n");
  647. foreach(keys %cmdopt){
  648. my $option_name_value = $_ . "=" .$cmdopt{$_};
  649. my $option_value = $cmdopt{$_};
  650.  
  651. foreach(keys %vendor_commandline){
  652. my $tmp= '^'.$_.'$';
  653. if ( $option_name_value =~ /$tmp/){
  654. &set_option_table( \%vendor_commandline,
  655. $_,
  656. $option_value ,
  657. \%lpr_options);
  658. }
  659. }
  660. }
  661.  
  662. logprint( 2 , "\nSET PPD CMD OPTIONS\n");
  663.  
  664. foreach(keys %cmdopt){
  665. my $option_name = "Default" . $_;
  666. my $option_value = $cmdopt{$_ };
  667. my $ppdoptdb_ref = $ppddefaultslist{$option_name};
  668.  
  669. $list = $ppdoptdb_ref->{optionlist};
  670.  
  671.  
  672. foreach(keys %$list){
  673. my $tmp= '^'.$_.'$';
  674. if ( $option_value =~ /$tmp/ ){
  675. &set_option_table( $list,
  676. $_,
  677. $option_value,
  678. \%lpr_options);
  679. }
  680. }
  681. }
  682.  
  683. #set Vendor options (numeric)
  684.  
  685. logprint( 2 , "\nSET VENDOR NUMERIC COMMAND OPTIONS\n");
  686.  
  687. foreach(keys %cmdopt){
  688. my $option_name = $_ ;
  689. my $n_value = $cmdopt{$_} ;
  690.  
  691. &set_option_table_n( \%numeric_option ,
  692. $option_name ,
  693. $n_value,
  694. \%lpr_options);
  695.  
  696. }
  697. #set MEDIA extension options
  698.  
  699. logprint( 2 , "\nSET MEDIA (STANDARD) COMMAND OPTIONS\n");
  700.  
  701. foreach my $option (split( /,/ , $cmdopt{media})){
  702.  
  703. foreach my $cur_optlist (keys %mediaoptlist){
  704. $cur_opttbl = $cur_optlist ->{optionlist};
  705. foreach (keys %$cur_opttbl ){
  706.  
  707. my $tmp = '^'.$_.'$';
  708. if ( $option =~ /$tmp/ ){
  709. &set_option_table( $cur_opttbl ,
  710. $_,
  711. $option,
  712. \%lpr_options);
  713. }
  714. }
  715. }
  716. }
  717.  
  718.  
  719. ($width , $height) = check_custom_paper ($PPD,
  720. \%lpr_options);
  721. if ( $width ne "{Undefined}" && $height ne "{Undefined}" ){
  722. $ENV{BRPAPERWIDTH} = ${width};
  723. $ENV{BRPAPERHEIGHT} = ${height};
  724. logprint( 0 , "\nCUSTOM PAPER x=$width y=$height\n\n");
  725. }
  726.  
  727. return %lpr_options;
  728. }
  729.  
  730.  
  731. #exec lpd config
  732.  
  733. sub exec_lpdconfig {
  734. (my $basedir , my $PRINTER , my $lpr_options_ref) = @_;
  735.  
  736. my $lpddir = $basedir;
  737. my %lpr_options = %$lpr_options_ref;
  738.  
  739. $lpddir = $basedir."/lpd/";
  740. my $lpdconf = $lpddir.'/'.$LPDCONFIGEXE;
  741.  
  742.  
  743. while(($op , $val) = each(%lpr_options)){
  744. my $lpdconf_command = "$lpdconf -P $PRINTER $op $val";
  745. logprint( 0 , "$lpdconf_command\n");
  746. `$lpdconf_command`;
  747. }
  748.  
  749. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement