doc:magicfilter

Table of Contents

1.x

MAGICFILTER 的設定檔格式是這樣子的(這是講 1.x 不是用 m4 的 2.x)

offse=t    magic    facility

主要的概念就是根據你給的「特徵」來決定要作甚麼動作,offset 是指定「特徵」出現的位置,而 magic 就是「特徵」的內容,facility 是說碰到這樣子的 input 要怎麼處理。

offset

指定從檔案開頭多少的位置會出現「特徵」

magic

「特徵」長的樣子,可以用 C 裡面那種 \n 之類的,另外還有一個 \? 可用來當作 wildcard,如果這個「特徵」有空白,可以用 \ 跳脫,也可以把整串用 “” 包起來。字元可以直接寫,或者是用 \ooo 或 \xhh 來寫。通常這兩個部份可以參考 file(1) 用的 magic(5) 這個檔案,在 FreeBSD 上是放在 /usr/share/misc/magic。

facility

大致上可以分成下面幾類:

  • cat/text [_prefix_ [_suffix_]]

直接把 input 丟到 output,也可在 input 前後加上一些東西。cat 是直接丟,而 text 則是在每行後面加上換行。

  • postscript

跟 text 一樣,不過會在 input 最後加上 EOT (Ctrl-D) 讓 PS 印表機知道東西完了,所以跟 text “” \004 一樣。

  • ignore

當作沒看到。

  • reject _message_

跟 ignore 一樣,不過會送封信給 user。

  • filter/pipe _command_

去跑後面那個 _command_,然後有這些變數可用: LPUSER, LPHOST, LPINDENT,LPRng 的話,還有 LPCLASS, LPFORMAT, LPJOB, LPCOPIES, BANNERNAME, PRINTER, LPQUEUE, LPACCT, ZOPT 可用。而 pipe 則是說處理完的東西再丟回 magicfilter 繼續處理。

  • ffilter/fpipe _command_

跟上面一樣,不過 input 是給成檔案,用 FILE 去摸。

2.x

設定檔的前面是 m4 寫的 macro 定義印表機的一些東西(像是 DPI),接著才是原本的 filter:

/pattern/    action(facility)/hint    arguments

pattern 適用 file(1) 看出來的 output,用 regexp(?) 去 match。他用的 magic file 是 /usr/local/etc/mf.magic,他自己附的。 UPDATE:前面那段有的沒的 define 可以通通不用寫…

另外,因為是 m4,所以要 escape 一下: \{ for (, \} for ), \- for ', and \+ for `.

2.x 裡面有內附 libmagic,可是很舊 :-( 剛弄了一個叫他用 sysutils/flie 的 http://www.freebsd.org/cgi/query-pr.cgi?pr=79637

doc/magicfilter.txt · Last modified: 2007/03/06 13:54 (external edit)