Руководство FreeBSD


4.4. Дополнительные примеры фильтров преобразования - часть 3


Это отличное место для выполнения фильтрами своих действий, особенно потому, что (иногда) в каталоге спулинга места больше, чем в /tmp.

Вот, наконец, и сам фильтр:

#!/bin/sh # # hpdf - Печать данных DVI на принтере HP/PCL # Установлен в /usr/local/libexec/hpdf

PATH=/usr/local/bin:$PATH; export PATH

# # Определяем функцию для удаления временных файлов. Они существуют # в текущем каталоге - в каталоге спулинга для принтера. # cleanup() { rm -f hpdf$$.dvi }

# # Определяем функцию для обработки критических ошибок: напечатать заданное # сообщение и выйти с кодом 2. Код выхода 2 сообщает системе LPD, что не # надо повторно пытаться печатать задание. # fatal() { echo "$@" 1>&2 cleanup exit 2 }

# # Если пользователь удаляет задание, система LPD будет # посылать сигнал SIGINT, поэтому перехватываем SIGINT # (и пару других сигналов), чтобы убрать за собой. # trap cleanup 1 2 15

# # Гарантируем, что не конфликтуем с существующими файлами. # cleanup

# # Связываем входной файл DVI со стандартным входным # потоком (файлом для печати). # ln -s /dev/fd/0 hpdf$$.dvi fatal "Cannot symlink /dev/fd/0"

# # Заменяем LF = CR+LF # printf "\033&k2G" fatal "Cannot initialize printer"

# # Преобразуем и печатаем. Значение, возвращаемое программой # dvilj2p, не надежно, так что мы его игнорируем. # dvilj2p -M1 -q -e- dfhp$$.dvi

# # Убираем за собой и завершаем работу # cleanup exit 0




Начало  Назад  Вперед