Page suivantePage pr�c�denteTable des mati�res

8. Les filtres

Si avec les explications pr�c�dentes, tout marche c'est formidable, mais en r�gle g�n�ral, cela ne suffit pas. Regardez ci-dessous ce que l'on obtient sur la DeskJet 500, lorsque j'envoie un fichier texte:

Ceci est la premiere ligne.
 Celle-ci est la deuxieme.
 Voici la troisieme.

Et alors l'impression d'un fichier PostScript... Vous obtenez le listing complet du code PostScript avec les m�me effets d'escalier. Une horreur.

Il faut donc quelque chose de plus et c'est le r�le des filtres. Les plus observateurs d'entre vous auront peut-�tre remarqu� l'existence des param�tres if (input filter) et of (output filter) dans le fichier printcap. Pour l'instant nous avons besoin de if.

Un filtre est un simple programme ex�cutable qui lit les donn�es sur son entr�e standard et sort le r�sultat sur sa sortie standard.

Commen�ons par �crire un script que vous appellerez filtre et qui ajoute des retours chariot avant chaque caract�re fin de ligne. Ceci �limine l'effet d'escalier.

 #!/usr/local/bin/perl
 # La ligne ci-dessous doit contenir le chemin complet vers perl
 # Ce script doit etre executable: chmod 755 filtre
 while(<STDIN>){chop $_; print "$_\r\n";};
 # Vous pouvez aussi vouloir terminer avec une fin de page: print "\f";

Dans /etc/printcap, l'entr�e est modifi�e en cons�quence:

lp|dj|deskjet:\
 :sd=/var/spool/lpd/dj:\
 :mx#0:\
 :lp=/dev/lp0:\
 :if=/var/spool/lpd/dj/filtre:\
 :sh:

Essayez d'�crire le filtre en shell qui sera plus efficace que de charger perl. Bon allez, je vous aide un peu:

 #!/bin/sh
 if [ "$1" = -c ]; then
 cat
 else
 sed -e s/$/^M/
 fi
 # echo -ne suppose que /bin/sh correspond a bash
 echo -ne \\f

Notez que '^M' symbolise le caract�re retour-chariot et non pas un `^' suivi d'un 'M'. Dans emacs, pour saisir ce caract�re, entrez la s�quence C-q C-m, alors que sous vi, entrez C-v C-m. Le test de $1 permet d'invalider l'insertion du retour-chariot par la commande lpr -l A savoir que lpr g�n�re des param�tres qui sont pass�s au filtre. Par d�faut il passe -w0. Si l'option -l est donn�e, il passe -c. Ce script est traditionnellement nomm� /usr/lib/lpf. Si vous avez plusieurs scripts de la sorte, une bonne id�e consiste � les mettre tous dans un sous-r�pertoire, par exemple /usr/lib/lpd.

Il se peut aussi que votre imprimante puisse passer dans un mode permettant l'ajout de retour-chariots gr�ce � une s�quence d'�chappement. Voici un exemple de filtre utilisant la commande echo -ne pour envoyer cette s�quence:

 #!/bin/sh
 # Filtre pour imprimantes HP, permettant de traiter LF comme CRLF
 # La commande echo -ne suppose que /bin/sh correspond a bash
 echo -ne \\033&k2G
 cat
 echo -ne \\f

Vous pouvez compliquer les filtres comme bon vous semble. Le mieux est d'avoir un filtre qui reconna�t le fichier d'entr�e et le convertit au bon format pour votre imprimante. Un tel filtre est appel� filtre magique. Ne vous emb�tez pas � les �crire vous-m�me, il en existe s�rement d�j� un qui vous convient. Allez voir sur tsx-11.mit.edu:/pub/linux/sources/usr.bin/magic-filter-x.y.tar.gz.


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:43