[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:05977] Re: how can i get filter ?



From: MASAKI TOMIMOTO <m.tomimoto@xxxxxxxxx>
Subject: [debian-users:05970] Re: how can i get filter ?
Date: Tue, 19 May 1998 20:54:50 +0900

松原です。

> ちなみにフィルタって結構簡単に書けるようなもんなんでしょうか?

簡単かどうかは個人の技量によると思いますが、
プログラミングのレベルとしては高いものではないと思います。

私は
	% lpr filename
で、あらゆるファイルを印刷したいということで、
パッケージを探すまでもなく自作のフィルタを使用しています。

---------- /etc/printcap ----------
 1| lp:ls:lasershot:\
 2|	:lp=/dev/lp1:\
 3|	:sd=/var/spool/lpd/lasershot:\
 4|	:if=/usr/local/sbin/magic-filter:\
 5|	:mx#0:sh:\
 6|	:af=/var/log/lp-acct:\
 7|	:lf=/var/log/lp-errs:
---------- End of /etc/printcap ----------

/usr/local/sbin/magic-filter がフィルタです。

lpr によって magic-filter が呼ばれる時,

	入力は、標準入力。
	出力は、標準出力。
	引数には、ログイン名やホスト名など。
		(The UNIX Super Text[下] を参照)

引数は私には必要ないので無視して処理します。

入力のファイルの種類を file(1) によって判別させ、
TeX DVI なら dvi2ps と gs に渡す、
等の処理を行います。

perl スクリプトです。

---------- magic-filter 抜粋 ----------
 1| #!/usr/bin/perl
 2| require 4.035;
 3| 
 4| $tmpfile = "/tmp/.magic$$";
 5| 
 6| # 標準入力をいったんファイル $tmpfile に書き出す
 7| open (CAT, "| cat > $tmpfile") || die;
 8| print CAT <STDIN>; close (CAT);
 9| 
10| # file(1) で入力ファイルの判別
11| # $type にファイルの種類の文字列が格納される
12| open (M, "file $tmpfile|") || die;
13| ($name, $type) = split (/\s*:\s*/, <M>);
14| close (M);
15|
16| # ファイルの種類別に処理を別ける
17| if ($type =~ /^TeX DVI/) {
18|     system ("dvi2ps $tmpfile 2> /dev/null | \
		gs -q -r300 -sDEVICE=lips3  \
		-dSAFER -dNOPAUSE -sOutputFile=- - \
		2> /dev/null");
19| }
20| 
21| unlink $tmpfile;
22| exit (0);
---------- End of magic-filter ----------

あまり綺麗なものではありませんが、何とか動いています(^^;

	17| if ($type =~ /^TeX DVI/) {

の部分は、
	/etc/magic (bo)
		か
	/usr/share/misc/magic (hamm)
を参考にしてください。
file(1) で識別できるファイルであれば、何でも処理可能です。

	.gif	/^GIF image/
	.ps	/^PostScript/

などです。

参考になれば、幸です。

------------------------------------------------------------
            松原 司牧 (まつばら しまき)
            Shimaki MATSUBARA <shimaki@xxxxxxxxxxxx>
       URL: http://plaza27.mbn.or.jp/~shimaki/