Программа piobe может генерировать диагностические сообщения. Далее приведен пример такого сообщения; он используется при обсуждении следующих вопросов:
Обсуждаемые вопросы достаточно сложны и предназначены для читателей, которые хотят научиться работать с escape-последовательностями файла описания принтера на низком уровне, возможно, для того, чтобы создавать файлы описаний для уникальных и неподдерживаемых принтеров. Перед тем как начать чтение данного раздела, ознакомьтесь со следующими темами:
В следующей команде флаг (аргумент) -a1 служит для получения диагностических данных от базовой программы piobe. Оставшаяся часть команды указывает, что задание будет обрабатываться очередью asc, что будут напечатаны три копии файла /etc/motd шрифтом Courier с размером 12 пунктов, с поворотом на 90 градусов, что задание будет предварительно обработано фильтром pr и что все сообщения, создаваемые заданием, должны передаваться пользователю, запустившему задание.
qprt -a1 -Pasc -fp -z1 -p12 -scourier -C -N3 /etc/motd
При запуске этой команды будет выдано примерно следующее сообщение:
Сообщение от qdaemon: =====> СООБЩЕНИЕ ОТ ЗАДАНИЯ ПЕЧАТИ 31 (/etc/motd) <===== 0782-034 Ниже приведена предварительная информация, запрошенная с помощью флага -a1. Не будет напечатано ни одного файла.
ПРИНТЕР: [devices.cat,71,66;IBM 4029 LaserPrinter] (ASCII)
ЗНАЧЕНИЯ ФЛАГОВ: a=1, b=0, d=a, e=!, f=p, g=1, h=, i=0, j=1, l=48, p=12, q=, s=cou rier, t=0, u=1, v=6, w=128, x=2, y=!, z=1, A=1, B=nn, C=+, E=!, G=!, H=, I=, J=+, L=+, N=3, O=3, P=ascx:lxx, Q=1, W=!, X=ISO8859-1, Z=+
КОНВЕЙЕР ФИЛЬТРОВ: /usr/bin/pr -l48 -w128 /etc/motd | /usr/lib/lpd/pio/etc/pioformat -@/var/spool/lpd/pio/@local/ddi/ibm4029.asc.lp1.asc:lp1 -!/usr/lib/lpd/pio/fmtrs/piof5202 -l48 -w128 -p12 -scourier -z1
Сообщение содержит следующую информацию:
Значения флагов, использовавшихся в командной строке: a1, Pasc, fp, z1, p12, scourier, C и N3, можно найти в разделе ЗНАЧЕНИЯ ФЛАГОВ.
Наиболее интересен раздел сообщения, озаглавленный КОНВЕЙЕР ФИЛЬТРОВ. Здесь приведен конвейер фильтров, определяемых программой piobe и создаваемых оболочкой. Фильтр pr предварительно обрабатывает задание печати (/etc/motd) и отправляет его драйверу программы форматирования pioformat, не зависящему от устройства.
Именно в этом месте можно увидеть, каким образом piobe использует определение виртуального принтера, связанное с очередью asc. Файл описания (который содержит определение виртуального принтера для этой очереди) с помощью атрибута ia задает конвейер входного потока данных (см. раздел КОНВЕЙЕР ФИЛЬТРОВ) для текстовых (ASCII) заданий. Для данной очереди значение атрибута ia равно:
%Ide/pioformat -@%Idd/%Imm -!%Idf/piof5202 -l%IwL -w%IwW %f[begijpqstuvxyzEGIJLOQWXZ] %Uh
Отформатировать атрибут ia можно с помощью команды lsvirprt следующим образом:
%Id INCLUDE: (Каталог, содержащий другие модули) '/pioformat -@' %Idd INCLUDE: (Каталог, содержащий обработанные файлы базы данных) '/' %Imm INCLUDE: (Имя (обработанного) файла базы данных; запускается "piodigest" (mt.md.mn.mq:mv)) ' -!' %Idf INCLUDE: (Каталог, содержащий загружаемые процедуры форматирования) '/piof5202 -l' %IwL INCLUDE: (Длина страницы в символах; значение берется из базы данных (используется в конвейерах)) ' -w' %IwW INCLUDE: (Ширина страницы в символах; значение берется из базы данных (используется в конвейерах)) ' ' %f[begijpqstuvxyzEGIJLOQWXZ] Для каждого флага x в командной строке:"-xАргумент" -> ВЫВОД ' ' %Uh Сообщает программе piobe: передать указанные атрибуты последующим командам принтера
Опция %Id обрабатывает каталог /usr/lib/lpd/pio/etc, в котором находятся другие модули. К предыдущей строке добавляется '/pioformat -@' (без кавычек); получается /usr/lib/lpd/pio/etc/pioformat, т.е. полное имя драйвера программы форматирования. Символ -@ после pioformat - это флаг команды pioformat, который в данном примере задает полное имя применяемого обработанного файла базы данных.
Значение флага -@ задается путем конкатенации %Idd, '/' и %Imm. Для %Idd в файле описания указано значение %I@5/ddi. @5 - это автоматическая переменная, значение которой равно /var/spool/lpd/pio/@local, поэтому %Idd преобразуется в /var/spool/lpd/pio/@local/ddi. К этому имени добавляется символ '/' (без кавычек). Для %Imm в файле описания задано значение mt.md.mn.mq.mv - пять других атрибутов виртуального принтера. Эти пять атрибутов определяют:
Для данной очереди значение mt.md.mn.mq.mv равно ibm4029.asc.lp1.asc.lp1. Следовательно, флаг -@ для pioformat получает значение /var/spool/lpd/pio/@local/ddi/ibm4029.asc.lp1.asc.lp1 - полное имя обработанного файла базы данных, который определяет виртуальный принтер, связанный с данной очередью (asc).
Он задает полное имя зависящей от устройства программы форматирования, которую драйвер программы форматирования, pioformat, будет загружать, компоновать и запускать во время выполнения. Таким образом значение флага -@ команды pioformat становится равным /var/spool/lpd/pio/@local/ddi/ibm4029.asc.lp1.asc.lp1, то есть полному имени обработанного файла базы данных, описывающего виртуальный принтер связанный с этой очередью (asc).
Значение флага -! определяется путем конкатенации остальных escape-последовательностей файла описания принтера, приведенных в форматируемой части атрибута ia, начиная с %Idf и '/piof5202 -l'.
Для %Idf в файле описания указано значение %I@4/fmtrs. @4 - это автоматическая переменная, значение которой равно /usr/lib/lpd/pio, поэтому %Idf преобразуется в /usr/lib/lpd/pio/fmtrs.
К этой строке добавляется 'piof5202 -l' (без кавычек), так что значение флага -! @4 - это автоматическая переменная, значение которой равно, /usr/lib/lpd/pio, поэтому %Idf преобразуется в /usr/lib/lpd/pio/fmtrs. К этой строке добавляется выражение 'piof5202 -l' (без кавычек); таким образом значение флага -! становится равным /usr/lib/lpd/pio/fmtrs/piof5202 -l. -l - это флаг программы piof5202 (зависящей от устройства программы форматирования для потока данных ASCII на принтере IBM 4029 LaserPrinter), который задает ширину страницы в символах.
Вычисление аргумента %IwL для флага -l описано в разделе Вычисление длины страницы по escape-последовательностям в файле описания принтера.