Líneas por pulgada (III)

Lo malo de estar más sólo que la una es que no hay tiempo para explorar en profundidad nada de nada.

Dado que es el único listado impreso que depende de la posición exacta sobre el papel, y que no encuentro el motivo de tanta disparidad en los desempeños de las impresoras, voy a hacer una excepción y a crear un filtro de impresión para él en exclusiva.

Dicho filtro va a ser un programa Perl que desplace el tercer recibo una línea hacia abajo, insertando un salto de línea antes del recibo y quitando una del final para que mantenga la longitud de la página física. Para entendernos todos: es una ñapa.

El programita es más o menos éste:

  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. my $VERSION = 0.2;
  7.  
  8. my $lineas_x_recibo = 24;
  9.  
  10. my $insert_line_on = ($lineas_x_recibo * 2) + 1;
  11. my $delete_line = ($lineas_x_recibo * 3);
  12.  
  13. my $lines_counter = 0;
  14.  
  15. # Bucle de lectura de líneas
  16. while (my $line = <STDIN>) {
  17. # Contabilizamos
  18. $lines_counter ++;
  19.  
  20. # Si alcanzamos el punto de inserción de línea
  21. if ($lines_counter == $insert_line_on) {
  22. print STDOUT "\n";
  23. }
  24.  
  25. # Si no hemos llegado al punto de supresión enviamos copia de lo
  26. # recibido
  27. if ($lines_counter < $delete_line) {
  28. print STDOUT $line;
  29. }
  30. # Si estamos en el lugar donde suprimir la última línea
  31. else {
  32. $lines_counter = 0;
  33. }
  34. }
  35.  
  36. exit 0;

La puesta en marcha es sencilla porque el servidor donde lo hará es un veterano y sigue empleando lprng como sistema de impresión. Para instalar un filtro de impresión sólo es necesario modificar la entrada correspondiente en la configuración, que en este caso es el viejo y eficiente archivo

/etc/printcap

:

recibos:tc=.common:lp=hp2055@servidor.int
:filter=/etc/magicfilter/recibos