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

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


Escape-последовательности файла описания принтера

Вложенные ссылки и логические схемы для значений атрибутов в файлах описания базы данных базовой программы принтера задаются с помощью escape-последовательностей, размещенных в соответствующих местах строк атрибутов. Эти escape-последовательности не следует путать с escape-последовательностями принтера. Первый символ в escape-последовательности - это всегда % (знак процента), означающий начало escape-последовательности. Второй символ (а иногда и последующие символы) определяют выполняемую операцию. Остальные символы escape-последовательности (если они есть) - это операнды.

При вычислениях, проводимых с помощью escape-последовательностей, можно применять стек для хранения целых чисел и указателей на обрабатываемые строки, а также внутренние переменные от a до z для хранения целых значений, предназначенных для использования в дальнейшем.

Так как символ % служит для обозначения начала escape-последовательности, символ %, относящийся к данным, представляется в базе данных в виде удвоенного символа % (%%). При выводе появится одиночный символ %.

Escape-последовательности, которые можно задавать в строке атрибутов, перечислены и описаны в следующей таблице. В их основе лежат предназначенные для терминалов escape-последовательности файла terminfo, которые были модифицированы и расширены для принтеров.

Escape-посл. Описание
%% Выдает символ % (знак процента).

ASCII-вывод из стека:  
%d Извлекает целое число из стека и преобразует его в формат ASCII без незначащих нулей. Создает поле с длиной, достаточной для хранения чисел в формате ASCII. Аналогична опции формата %d в подпрограмме printf.
%[1-9]d Извлекает целое число из стека и преобразует его в формат ASCII. При этом поле этого числа может быть шириной от 1 до 9 символов, в зависимости от цифры, указанной перед d. Если количество разрядов числа меньше ширины поля, то число дополняется нулями слева. Если число не помещается в поле, то лишние старшие разряды отбрасываются. Например, если из стека извлекается число 243, то в формате %4d оно будет выглядеть как 0243, а в формате %2d - как 43. Для того чтобы извлечь число -243 из стека в виде -0243, нужно воспользоваться форматом %5d.

Двоичный вывод из стека:  
%c Извлекает целое число из стека, отбрасывая при этом все байты, кроме младшего.
%h Извлекает целое число из стека, отбрасывая при этом все байты, кроме двух младших.
%a Аналогична %h, за исключением того, что два байта извлекаются из стека в обратном порядке: сначала младший, затем старший.

Строка ввода:  
%Ixx Добавляет строку атрибутов с именем xx. В %I допустима рекурсия, т.е. добавляемая строка также может содержать %I. Учтите, что что добавляемая строка не наследует текущий стек - ей ставится в соответствие новый стек.
%I[ . . . ] Если необходимо сделать несколько последовательных включений, то имена атрибутов должны быть разделены запятыми и заключены в квадратные скобки. Например, строка %Icp%Icc%IeW должна быть задана как %I[cp,cc,eW].
%Dxx Загружает на принтер содержимое файла, полное имя которого указано в атрибуте xx. У задания печати должны быть права на чтение файла. Чаще всего этот оператор применяется для загрузки шрифтов на принтер.
%"sss" Помещает в стек указатель на строковую константу sss. Единственная операция, которую можно выполнить с указателем строки, - это с помощью %= сравнить строку с другой строкой, указатель которой также находится в стеке.
%`xx Вставляет стандартный вывод, создаваемый при передаче в оболочку командной строки, заданной атрибутом xx. Обратите внимание, что ` - это символ тупого ударения.
%' "Строка " Строка в кавычках передается в качестве команды в подоболочку. Любые двойные кавычки, используемые внутри этой строки, должны быть заключены в обратные кавычки, чтобы не перепутать их с разделителями строки. Обратите внимание, что ` - это символ тупого ударения.

Ввод целого числа в стек:  
%#xx"..@.." Извлекает выбранную часть атрибута с именем xx. Критерий выбора определяется шаблоном "...@...". Шаблон выбора состоит из трех частей:
  1. Строка, предшествующая извлекаемой. Если префикс опущен, то извлекаемая строка будет полностью состоять из строки, предшествующей образцу, определяемому суффиксом.
  2. Извлекаемая строка, замещающая последовательность операций %#xx"..@.." в обрабатываемом атрибуте.
  3. Строка, следующая за извлекаемой. Если суффикс пропущен, то извлекаемая строка будет полностью состоять из строки, следующей за образцом, определяемым префиксом.

Если значение атрибута строки пустое, то строка не извлекается. Кроме того, строка не извлекается, если префикс или суффикс непустой, но у него нет соответствия в строке значений атрибута.

Примечание: Если амперсанд (@) или кавычки (") используются только как текстовые символы, их необходимо заключить в кавычки. В противном случае программа будет рассматривать их как разделители.

Если оператор %# указан внутри стандартного выражения другого оператора %#, то амперсанд (@) и кавычки ( ) нельзя использовать как текстовые символы. Во избежание этого, укажите вложенный оператор %# в отдельном значении атрибута и включите новый атрибут в стандартное выражение для внешнего оператора %#.

%Gxx Считывает целый атрибут с именем xx и помещает его в стек. Если атрибут - не целое число, а строка, то считается, что это целое число в формате ASCII. С помощью подпрограммы atoi такая строка преобразуется в двоичное целое и помещается в стек.
%'c' Помещает в стек символьную константу c, где она становится младшим байтом целого числа. В старших байтах записываются нули.
%{nn} Помещает целую константу nn в стек. Константа может быть положительным или отрицательным десятичным числом.

Внутренние переменные:  

Внутренние переменные от a до z - это переменные целого типа, предназначенные для использования escape-последовательностями %P, %Z и %g. При инициализации их значение равно нулю и может быть изменено только escape-последовательностями %P и %Z. Существуют два независимых набора этих переменных: один используется командой piobe для создания конвейеров, а второй - исключительно программой форматирования. Значения для набора переменных программы форматирования сохраняются в течение всего периода работы этой программы.

%P[a-z] Извлекает целое число из стека и присваивает его указанной внутренней переменной. Например, %Pf переносит целое число из стека в переменную f.
%Z[a-z] Обнуляет указанную внутреннюю переменную. Например, %Zg присваивает нулевое значение переменной g.
%g[a-z] Помещает значение указанной внутренней переменной в стек. При этом значение внутренней переменной не изменяется. Например, %gb считывает целое значение переменной b и помещает его в стек.

Арифметические операторы:  
%+ %- %* %/ %m Помещает результат в стек.
%+ Извлекает два числа из стека, складывает их и помещает результат в стек. Например, %{5}%{6}%+ помещает в стек число 11.
%- Извлекает два числа из стека, вычитает первое из второго и помещает результат в стек. Например, %{12}%{3}%- помещает в стек число 9.
%* Извлекает два числа из стека, перемножает их и помещает результат в стек. Например, %{2}%{3}%* помещает в стек число 6.
%/ Извлекает два числа из стека, делит первое на второе и помещает результат в стек. Например, %{6}%{2}%/ помещает в стек число 3.
%m (деление по модулю) Аналогична %/, но в стек помещается не частное, а остаток от деления. Например, %{17}%{9}%/ помещает в стек число 8.

Примечание: Значение, которое извлекается первым, помещается в стек последним, и наоборот.

Операторы отношения и логические операторы:

 
%= %> %< %! Помещает в стек 1, если значение выражения истинно, или 0 - если ложно.
%= Равны ли два значения, извлеченные из стека? Например, %{2}%{2}%= помещает в стек значение 1 (истина), а %{2}%{3}%= - значение 0 (ложь).
%> Второе число, извлеченное из стека, больше первого числа, извлеченного из стека? Например, %{2}%{3}%> помещает в стек значение 0 (ложь).
%< Второе число, извлеченное из стека, меньше первого числа, извлеченного из стека? Например, %{2}%{3}%< помещает в стек значение 1 (истина).
%! Произведите над взятым из стека числом операцию отрицания и поместите результат в стек: ненулевое значение заменяется нулем, нуль - единицей. Например, %{0}%! помещает в стек значение 1 (истина), %{1}%! - значение 0 (ложь), а %{2}%! помещает в стек значение 0 (ложь).

Примечание: Значение, которое извлекается первым, помещается в стек последним, и наоборот.

Побитовые логические операции:  
%& %| %^ %~ Помещает результат в стек.
%& Извлекает два числа из стека, логически перемножает их (И) и помещает результат в стек. Например, %{6}%{3}%& помещает в стек число 2.
%| Извлекает два числа из стека, логически складывает их (ИЛИ) и помещает результат в стек. Например, %{6}%{3}%| помещает в стек число 7.
%^ Извлекает два числа из стека, логически складывает их без переноса разряда (ИСКЛЮЧИТЕЛЬНОЕ ИЛИ) и помещает результат в стек. Например, %{6}%{3}%^ помещает в стек число 5.
%~ Извлекает число из стека, побитово инвертирует его (ДОПОЛНЕНИЕ) и помещает результат в стек. Например, %{-1}%~ помещает в стек значение 0 (все нулевые биты) (значение, дополнительное к -1).

Условные операторы (if-then-else):  
%? expr %t thenpart %e elsepart %; %t извлекает значение из стека и проверяет его. Если значение ИСТИННО (не равно нулю), выполняется thenpart. Иначе выполняется elsepart (если указано).

Конструкция else-if

%? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e b4 %;

где c1, c2, c3 обозначают условия, а b1, b2, b3, b4 - числа. Например, %?%{1}%t%{2}%e%{3}%; помещает в стек число 2, а %gx%{6}%?%=%t%{2}%e%{3}%;%d выдает значение 2, если внутренняя переменная x равна 6, или значение 3, если x не равна 6.

При создании логического выражения иногда полезно записывать его в структурированном виде. Предыдущий пример, например, можно записать так:

%gx Помещает в стек значение x.
%{6} Помещает в стек число 6.
%?%=%t Если значения, помещенные в стек, равны между собой, то
%{2} помещает в стек число 2
%e иначе
%{3} помещает в стек число 3
%; конец оператора if
%d Вывод
значения в ASCII-формате  

Передача без преобразования:  
%x (Только при вызове подпрограммы piocmdout.) Передает из входных в выходные данные число байтов, заданное в параметре passthru подпрограммы piocmdout.

Циклы  
%wx Цикл while. Везде, где указан оператор %;, происходит уменьшение внутренней переменной x (вместо x может быть указана буква от a до z) на единицу. Если результат больше нуля, выполнение программы продолжается с символа, следующего за %wx.

Режим:  
%o Выполняет запуск с исходными значениями по умолчанию из базы данных, а не со значениями, которые были позднее указаны в командной строке (или во время работы программы форматирования).
%r Возвращает к значениям, использовавшимся до применения %o.

Переопределения конвейера:  
%p Указывает, в каком месте основного конвейера следует подставить конвейер фильтра префикса. Если этот оператор отсутствует, то подстановка будет сделана в начале основного конвейера. Если первый символ имени атрибута отличен от i (т.е. это не основной конвейер), то команда игнорируется.
%z Указывает, в каком месте основного конвейера следует подставить строку pioout (процедуру интерфейса драйвера устройства). Если этот оператор отсутствует, то подстановка будет сделана в конце основного конвейера. Если первый символ имени атрибута отличен от i (т.е. это не основной конвейер), то команда игнорируется.
%ix Допустима только в строке фильтра префикса (т.е. если первый символ двухсимвольного имени атрибута - f). Переменная x задает символ идентификатора конвейера. Переменная %ix определяет, что именем атрибута для основного конвейера должно быть ix вместо iy, где y - это параметр, заданный (или определяемый по умолчанию) для флага -d. Особый случай: %i! указывает, что в качестве основного конвейера должна применяться пустая строка.

Флаги командной строки:  

Данные операторы обычно используются в определениях конвейера, где они применяются к флагам, устанавливаемым программой запуска задания печати. Если строки атрибутов используются программой форматирования, то они применяются к флагам, передаваемым программе форматирования. В флагах допустимы буквы от a до z и от A до Z и цифры от 0 до 9.

%Cy Помещает в стек значение 1 (истина), если в командной строке указан флаг y. В противном случается в стек помещается значение 0 (ложь).
%Fxy или %F[...] Краткое обозначение для %?%Cy%t-x %I_y%;. Если в командной строке указан флаг y, то генерируется -x yarg, где yarg - аргумент, заданный для флага y. Если оператор ! указан для x, -x не генерируется. Если yarg содержит одиночную или двойную кавычку, которой не предшествует нечетное число обратных косых черт, то будет выдано сообщение об ошибке и задание печати будет завершено.

Если с помощью %Fxy нужно указать несколько флагов, причем значения x и y для каждого флага одинаковы, то список букв флагов можно заключить в квадратные скобки. Например, %Faa%Fbb%Fcc можно записать как %F[abc].

В именах атрибутов, соответствующих y или [ . . . ], первый символ - это знак подчеркивания (_), а второй - буква y или символ в строке [ . . . ].

%fxy или %f[ . . . ]
   Аналогично %Fxy и %F[ . . . ], за исключением того, что между именем флага и аргументом нет пробела, если только аргумент - не пустая строка.
%vxy или %v[...] Аналогично %fxy и %f[ . . . ], но используется только в командной строке для команды pioout (программа интерфейса драйвера устройства) с целью создания флагов и аргументов, переопределяющих значения команды piobe (администратор заданий печати). Флаги не создаются, если их аргументы равны предопределенным значениям по умолчанию.

В случае %v в именах атрибутов, соответствующих y или [ . . . ], первый символ - это @, а второй - буква y или символ в строке [ . . . ].

%Ux  
или %U[ . . . ]
  Сообщает команде piobe, что флаг x (или каждый флаг в строке [ . . .]) действительно относится к ней, хотя и не относится к конвейеру; например, флаг x может относиться к команде принтера, а не к фильтру конвейера. Это позволяет избежать пропуска флагов командой piobe, когда они указаны в командной строке.


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