PRINT perl script
El próposito de este código es tener la funcionalidad del PRINT del DOS
bajo linux. Es un script perl fácilmente editable, que esta diseñado para
manejar impresoras DESKJET serie 500 (y 600) con lenguaje PCL de HP.
Admite tanto la impresión de un fichero pasado como parámetro como una canalización; esto es, tanto "print <fichero>" como "cat fichero | print"
#!/usr/bin/perl
$num = scalar(@ARGV);
if ($num>0){
open IN,"<".$ARGV[0] || die "Cannot open $ARGV[0]";
@data = <IN>;
close IN;
}else{
@data = <STDIN>;
}
$reset = chr(27) . chr(69);
$selftest = chr(27) . chr(122);
$e = chr(27) . chr(38) . chr(108); # Escape codes DJ 500 (PCL)
$e2 = chr(27) . chr(38) . chr(107);
$e3 = chr(27) . chr(40) . chr(115);
$ejectpage = $e . chr(48) . chr(72);
$a4 = $e . chr(50) . chr(54) . chr(65);
$line_termination = $e2 . chr(48) . chr(71); # CR=CR; LF=LF; FF=FF;
$line_termination2 = $e2 . chr(49) . chr(71); # CR=CR+LF; LF=LF; FF=FF;
$line_termination3 = $e2 . chr(50) . chr(71); # CR=CR; LF=CR+LF; FF=CR+FF;
$line_termination4 = $e2 . chr(51) . chr(71); # CR=CR+LF; LF=CR+LF; FF=CR+FF;
$latin1 = chr(27) . chr(40) . chr(48) . chr(78);
$spanish = chr(27) . chr(40) . chr(50) . chr(83);
$fixed = $e3 . chr(48) . chr(80);
$proportional = $e3 . chr(49) . chr(80);
$compressed = $e2 . chr(50) . chr(83);
$elite12 = $e2 . chr(52) . chr(83);
$italic = $e3 . chr(49) . chr(83);
$bold = $e3 . chr(51) . chr(66);
$normal = $e3 . chr(48) . chr(66);
$courier = $e3 . chr(52) . chr(48) . chr(57) . chr(57) . chr(84);
$cgtimes = $e3 . chr(52) . chr(49) . chr(48) . chr(49) . chr(84);
$lettergothic = $e3 . chr(52) . chr(49) . chr(48) . chr(50) . chr(84);
$univers = $e3 . chr(52) . chr(49) . chr(52) . chr(56) . chr(84);
$helvetica = $e3 . chr(52) . chr(84);
$timesroman = $e3 . chr(53) . chr(84);
$garmond = $e3 . chr(49) . chr(48) . chr(49) . chr(84);
$letterq = $e3 . chr(50) . chr(81);
$economode = $e3 . chr(49) . chr(81);
open PRN, ">>/dev/lp0" || die "Cannot open /dev/lp0"; # must be root
print PRN $a4;
print PRN $line_termination4; # huh?
print PRN $elite12;
print PRN $courier;
print PRN $letterq;
print PRN @data;
print PRN $ejectpage;
close PRN;
__END__