MAGICFILTER 的設定檔格式是這樣子的(這是講 1.x 不是用 m4 的 2.x)
offse=t magic facility
主要的概念就是根據你給的「特徵」來決定要作甚麼動作,offset 是指定「特徵」出現的位置,而 magic 就是「特徵」的內容,facility 是說碰到這樣子的 input 要怎麼處理。
指定從檔案開頭多少的位置會出現「特徵」
「特徵」長的樣子,可以用 C 裡面那種 \n 之類的,另外還有一個 \? 可用來當作 wildcard,如果這個「特徵」有空白,可以用 \ 跳脫,也可以把整串用 “” 包起來。字元可以直接寫,或者是用 \ooo 或 \xhh 來寫。通常這兩個部份可以參考 file(1) 用的 magic(5) 這個檔案,在 FreeBSD 上是放在 /usr/share/misc/magic。
大致上可以分成下面幾類:
直接把 input 丟到 output,也可在 input 前後加上一些東西。cat 是直接丟,而 text 則是在每行後面加上換行。
跟 text 一樣,不過會在 input 最後加上 EOT (Ctrl-D) 讓 PS 印表機知道東西完了,所以跟 text “” \004 一樣。
當作沒看到。
跟 ignore 一樣,不過會送封信給 user。
去跑後面那個 _command_,然後有這些變數可用: LPUSER, LPHOST, LPINDENT,LPRng 的話,還有 LPCLASS, LPFORMAT, LPJOB, LPCOPIES, BANNERNAME, PRINTER, LPQUEUE, LPACCT, ZOPT 可用。而 pipe 則是說處理完的東西再丟回 magicfilter 繼續處理。
跟上面一樣,不過 input 是給成檔案,用 FILE 去摸。
設定檔的前面是 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。