[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по принтерам и печати


Каким образом piobe использует файлы описания принтера

Программа 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-последовательностям в файле описания принтера.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]