5
АПК.00322-01 33 01-15


1. ВЫЗОВ PIF

Общая форма для вызова pif имеет следующий формат:
pif [параметры] [файлы]

где [параметры] означает любое число возможных параметров,
a [файлы] определяет список файлов, содержащих форматиру-
емый документ. Если имена файлов не заданы или указан па-
раметр, состоящий из одного знака минус (``-''), то чтение
производится из стандартного файла ввода. Ниже приводятся
параметры, которые могут быть заданы в любом порядке перед
списком файлов:

-oсписок - Печатать только те страницы, номера которых
присутствуют в "списке", содержащем номера и
интервалы номеров, разделенные запятыми. Интер-
вал номеров имеет вид N-M и означает: страницы
с N по M; если в качестве первого параметра
указано -N, то это означает: печатать с первой
по N-ю страницу, а, если последний параметр N-,
то это означает: печатать с N-й страницы и до
конца;

-nN - Присвоить номер N первой сформированной страни-
це;

-sN - Делать остановки через каждые N страниц. Через
каждые N страниц (по умолчанию N=1) pif будет
останавливать работу для того, чтобы дать воз-


6
АПК.00322-01 33 01-15

можность заправить или заменить бумагу, и во-
зобновит ее при получении символа новой строки;

-mимя - Присоединяет входныe файлы к файлу макро
/usr/lib/tmac.mимя;

-raN - В регистр a (имя из одного символа) помещается
N (целое число).

-i - после того, как входные файлы прочитаны, читать
данные со стандартного устройства ввода;

-q - вызвать режим одновременного ввода/вывода при
команде rd;

-Tимя - Задает имя типа устройства вывода;

-c - Выводит выровненные строки слов с одинаковыми
интервалами между словами, используя полную
разрешающую способность терминала.













7
АПК.00322-01 33 01-15


2. ОБЩИЕ СВЕДЕНИЯ


2.1. Структура входных данных

Входная информация состоит из строк текста, предназ-
наченного для выдачи на печать, среди которых содержатся
строки команд, управляющие последующей обработкой текста.
Командные строки начинаются с управляющего символа (по
умолчанию точки ``.'' или апострофа `` ' ''), за которым
следует имя из одного или двух символов, определяющее ос-
новную команду или макрокоманду пользователя. Управляющий
символ `` ' '' (апостроф) блокирует функцию прерывания
(вынужденное прерывание заполнения частично заполненной
строки), происходящего при выполнении некоторых команд.
Управляющий символ можно отделять от имени команды (макро-
команды) пустым промежутком с помощью пробелов или симво-
лов табуляции. За именами должны следовать либо символ
``новая строка'' либо пробел, за которым следуют парамет-
ры. Командные строки с нераспознанными именами игнорируют-
ся.

Используя знак переключения кода, обычно ``\'', можно
вставить различные специальные функции в любое место ис-
ходного текста. Например, функция \nr вызывает подстановку
содержимого числового регистра r на место функции, здесь r
имя регистра, состоящее либо из одного символа, например




8
АПК.00322-01 33 01-15

\nx, либо, состоящее из двух символов с левой круглой
скобкой перед ним, например \n(хх.

2.2. Разрешающая способность устройств и системы

Разрешающая способность системы pif составляет 240
единиц/дюйм (94,5 единиц/см), что соответствует наименьше-
му общему множителю разрешающих способностей различных пе-
чатающих устройств. Система pif производит округление вво-
димых числовых параметров (где это требуется по смыслу) до
величины фактической разрешающей способности конкретного
устройства.

2.3. Ввод числовых параметров

Система pif может воспринимать числовые параметры,
указанные в различных единицах измерения. В данном доку-
менте чаще используется дюймовая шкала, потому что боль-
шинство печатающих устройств имеет разрешающую способность
кратную дюйму или долям дюйма. Но если дюймовая шкала не
устраивает, можно пользоваться метрической, указывая при
этом соответствующие единицы измерения согласно табл. 1, в
которой V - величина текущей разрядки по вертикали в базо-
вых единицах, а C - ширина символов в базовых единицах.






9
АПК.00322-01 33 01-15

Таблица 1
---------------------------------------------------
| указатель| значение | число базовых |
| шкалы | | единиц |
|----------|----------------------|----------------
| i | Дюйм | 240 |
| c | Сантиметр | 240*50/127 |
| P | Пика=1/6 дюйма | 240/6 |
| n | En=C базовых единиц | C |
| p | Пункт=1/72 дюйма | 240/72 |
| u | Базовая единица | 1 |
| v | Вертикальная разряд- | V |
| | ка | |
| ничего | По умолчанию | |
---------------------------------------------------

Единица En - это, фактически, ширина печатаемых зна-
ков, но в системе pif встречаются "сверхширокие" символь-
ные конструкции вида ``->'' , ``<-'' или ``3/4'', отобра-
жаемые при печати несколькими символами. По умолчанию,
масштаб берется в единицах En для горизонтально-
ориентированных команд ll, in, ti, ta, lt, mc и функций \h
и \l; в единицах вертикальной разрядки (v) для
вертикально-ориентированных команд pl, wh, ch, dt, sp, sv,
ne, rt и функций \v, \x и \L; в пунктах (p) для команды vs
и в базовых единицах (u) для команд nr, if и ie. При всех
других командах указание масштабных коэффициентов игнори-
руется. Следует заметить, что при определении числового



10
АПК.00322-01 33 01-15

регистра с каким-либо масштабным коэффициентом значение
этого регистра переводится в базовые единицы, и, если этот
регистр используется в командах, требующих численных аргу-
ментов, может потребоваться указание масштабного коэффици-
ента ``u'' во избежание дополнительного ошибочного масшта-
бирования по умолчанию. Допустим, регистр был определен
командой
.nr AA 40n
тогда, если указать
.ll \n(AA
то длина строки будет взята из регистра AA (где она хра-
нится в базовых единицах) и умножена на коэффициент ``En''
(по умолчанию). Чтобы избежать ошибки нужно указать следу-
ющим образом
.ll \n(AAu

Число N может указываться в форме десятичной дроби,
но при запоминании оно округляется до целого числа базовых
единиц.

Для получения расстояния от текущего места до верти-
кальной или горизонтальной позиции N можно использовать
индикатор абсолютного положения ``|'', который указывается
перед числом. Для вертикально-ориентированных команд и
функций |N становится расстоянием от текущего места до
вертикальной позиции N, а для всех остальных команд и
функций |N становится расстоянием от текущей горизонталь-
ной позиции на строке вывода до горизонтальной позиции N.
Например, в результате выполнения команды


11
АПК.00322-01 33 01-15

.sp |3.2c
получится сдвиг на позицию, расположенную на 3,2 сантимет-
ра от верхнего края страницы.

2.4. Численные выражения

Везде, где предполагается ввод числовых данных, можно
использовать выражения, содержащие скобки, арифметические
операторы +, -, /, *, % и логические операторы <, >, <=,
>=, =/ или ==/, &/ и /, :/ или /. Вычисление выражений вы-
полняется слева направо за исключением выражений, где по-
рядок выполнения операций зависит от наличия скобок. Для
некоторых команд первый символ + или - отделяется и ин-
терпрeтируется соответственно как индикатор увеличения или
уменьшения.

2.5. Система обозначений

Числовые параметры записываются двумя способами.
Запись _N означает, что аргумент может иметь вид N, +N, -N
и, что соответствующее действие состоит в задании нужному
параметру значения N, увеличении его на N или уменьшении
на N, соответственно. Простая запись N означает, что на-
чальный алгебраический знак не является индикатором прира-
щения, а просто знаком N. Обычно неприемлемые числовые
входные данные либо игнорируются, либо усекаются до прием-
лемых значений. Например, большинство команд предполагают
задание параметрам неотрицательных значений; к исключениям


12
АПК.00322-01 33 01-15

относятся команды sp, wh, сн, nr и if. Команды ft, vs, ls,
ll, in и lt при отсутствии аргумента восстанавливают пре-
дыдущее значение параметра.

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

При описании команд в колонке примечаний используются
следующие обозначения:

B - Команда обычно вызывает прерывание;

D - Режим или соответствующие параметры относятся к
текущему уровню отведения в макро;

E - Соответствующие параметры являются частью сово-
купности параметров, определяющих текущее окру-
жение;

O - Должен действовать до логического вывода;

P - Режим должен продолжать действовать или быть
снова подключен во время физического вывода.

v,p,n,u - Масштабный указатель по умолчанию. Если он не
задан, то масштабные указатели игнорируются.





13
АПК.00322-01 33 01-15


3. УПРАВЛЕНИЕ СТРАНИЦАМИ

Поля в верхней и нижней части страницы (верхний и
нижний титулы) автоматически не формируются. Для этого не-
обходимо определить две макрокоманды и устанавить для них
"ловушки" в вертикальных позициях (См. подразд. 7.5). Это:
0 (верхний край страницы) и -N (N от нижнего края).

Переход от первой псевдостраницы к первой странице
осуществляется либо, когда происходит первый обрыв запол-
нения, либо, когда происходит обработка первого не отве-
денного в макро текста (См. подразд. 7.4).

Установка прерываний, которые будут происходить при
достижении "ловушки" в верхнем поле первой страницы,
должна быть закончена до этого перехода.

Для управления страницей пользуются следующими коман-
дами:

pl - установить длину страницы. Форма вызова команды
pl - .pl _N, начальное значение - 66, нет аргу-
ментов -66, примечание - V. Длина страницы уста-
навливается равной _N. Текущая длина страницы
хранится в регистре .р;

bp - начать новую страницу. Форма вызова команды bp -
.bp _N, начальное значение - 1, нет аргументов -
нет, примечание - B, V. Текущая страница выво-



14
АПК.00322-01 33 01-15

дится и начинается новая страница. Если _N зада-
но, то номером новой страницы будет _N;

pn - присвоить номер следующей странице. Форма вызова
команды pn - .pn _N, начальное значение - 1, нет
аргументов - игнорируется. Следующая страница,
если она появится, будет иметь номер _N. Чтобы
можно было присвоить номер первой странице, ко-
манда pn должна встретиться до начального пере-
хода от псевдо-страницы к странице. Номер теку-
щей страницы находится в регистре %;

ne - требуется место по вертикали. Форма вызова ко-
манды ne - .ne _N, начальное значение - нет, нет
аргументов - 1v, примечание - D, V. Если рассто-
яние D до следующей позиции "ловушки" меньше N,
то будет пропущено расстояние D, а затем про-
изойдет прерывание. Если на оставшейся части
страницы нет "ловушек", то D - расстояние до
нижнего края страницы. Если D<V, то вывод еще
одной строки все же возможен и вызовет прерыва-
ние. Для "отведения" D - это расстояние до "ло-
вушки" отведенного текста, если она вообще име-
ется, либо очень большое число, если "ловушки"
нет;

mk - запомнить вертикальную позицию. Форма вызова ко-
манды mk - .mk R, начальное значение - нет, нет
аргументов - внутренний, примечание - D. Засыла-



15
АПК.00322-01 33 01-15

ет место текущей вертикальной позиции во внут-
ренний регистр или, если указан R, то в регистр
R;

rt - вернуться к вертикальной позиции. Форма вызова
команды rt - .rt _N, начальное значение -нет,
нет аргументов - внутренний, примечание - D, V.
Осуществляет возврат только вверх к помеченной
вертикальной позиции в текущем отведенном
тексте. Если параметр _N, относящийся к текущей
позиции, задан, то эта позиция находится на
расстоянии _N от верхнего края страницы или от-
веденного текста. Если N отсутствует, происходит
возврат к месту, отмеченному предыдущей командой
mk. Следует иметь в виду, что вместо команды .rt
в любых случаях может быть использована команда
.sp (см. разд.5) заданием промежутка до абсолют-
ного места, учтенного в регистре, явно указанном
в команде .mk, то есть при помощи последователь-
ности
.mk R
......
......
.sp |\n(Ru







16
АПК.00322-01 33 01-15


4. ФОРМИРОВАНИЕ, ВЫРАВНИВАНИЕ И
ЦЕНТРИРОВАНИЕ ТЕКСТА


4.1. Формирование и выравнивание

Обычно слова набираются из строк входного текста и
собираются в строку выходного текста до тех пор, пока для
какого-то слова не будет хватать места. Тогда делается по-
пытка перенести слово для того, чтобы поместить в выходной
строке его часть. Затем межсловные интервалы в выходной
строке увеличиваются для того, чтобы "растянуть" строку до
текущей длины строки без учета текущего отступа. Словом
является любая цепочка символов, отделенная символами про-
бела или признаком начала/конца входной строки. Любые
смежные два слова, которые должны храниться вместе (т.е.
не должны переноситься на другую выходную строку и не от-
даляться друг от друга в процессе выравнивания), могут
быть соединены вместе с помощью разделения их символом не-
заполняемого пробела ``\'' (обратная косая черта и про-
бел). В pif межсловные промежутки не одинаковы из-за ма-
ленькой разрешающей способности устройств по ширине симво-
лов. Однако использование параметра -е командной строки
дает возможность получить постоянный интервал с полной
разрешающей способностью устройства вывода. Формированием,
выравниванием и переносом слов на другую строку можно уп-
равлять или вообще отменить их. Длина текста последней вы-
ходной строки хранится в регистре .n, а позиция линии


17
АПК.00322-01 33 01-15

шрифта (основания строки) текста на странице хранится в
регистре nl. Место базисной линии последней строки текста
на текущей странице (самой нижней позиции) находится в ре-
гистре .h.

Несколько пробелов между словами, обнаруженные в ис-
ходном тексте, сохраняются за исключением концевых пробе-
лов. Начальные пробелы (в начале входной строки) вызывают
прерывание заполнения выходной строки. Чтобы вызвать пре-
рывание заполнения после определенного слова и получить
выходную строку, растянутую до текущей длины строки, при
заполнении строки можно вставить в слово или присоединить
к нему последовательность \р.

Строка исходного текста, которая начинается с управ-
ляющего символа, не будет рассматриваться как управляющая
строка, если перед ней указать непечатаемый признак запол-
нения \&.

4.2. Прерывание текста

Две строки исходного текста в режиме "незаполнения"
можно "склеить" в результирующем тексте, закончив первую
строку последовательностью \с. Аналогичным образом, слова
внутри "заполняемого" текста можно "склеить", если слово
(или строку) также закончить последовательностью \с. Пос-
ледующий текст будет воспринят как продолжение текста,
оканчивающегося этим словом. Если в тексте (между \c и
последующим словом (или строкой)) встретились управляющие


18
АПК.00322-01 33 01-15

строки, вызывающие прерывание заполнения, то "склеивания"
не произойдет, и накопленные строки будут выданы в выход-
ной текст. Для формирования и выравнивания строк использу-
ются следующие команды:

br - прекратить заполнение строки. Форма вызова ко-
манды br - .br, начальное значение - нет, нет
аргументов - нет, примечание - B. Заполнение
формируемой в данный момент строки прекращается
и строка выводится без выравнивания. Строки
текста, начинающиеся с пробелов, и пустые строки
текста также вызывают прерывание;

fi - включить режим заполнения. Форма вызова команды
fi - .fi, начальное значение - включить, нет ар-
гументов - нет, примечание - B, E. Последующие
строки будут обрабатываться автоматически с вы-
равниванием. Регистр .u содержит 1 если режим
заполнения включен и 0 если выключен;

nf - выключить режим заполнения. Форма вызова команды
nf - .nf, начальное значение - включить, нет ар-
гументов - нет, примечание - B, E. Последующие
строки исходного текста не будут обрабатываться
и копируются непосредственно в строки выходного
текста без учета текущего значения длины строки;

ad - установить тип выравнивания. Форма вызова коман-
ды ad - .ad c, начальное значение - оба, нет ар-
гументов - выравнивание, примечание - Е. Вклю-


19
АПК.00322-01 33 01-15

чить выравнивание строк. Если режим заполнения
текста выключен, то выравнивание будет отложено
до тех пор, пока он опять не будет включен. Если
присутствует указатель типа с, то тип выравнива-
ния изменяется в соответствии с табл. 2.
Таблица 2
----------------------------------------
| указатель | тип выравнивания |
|-------------|------------------------|
| l | только по левому краю |
| r | только по правому краю |
| с | по центру |
| b или n | по обоим краям |
| отсутствует | не изменяется |
----------------------------------------

na - отключить выравнивание строк. Форма вызова ко-
манды na - .na, начальное значение - нет, нет
аргументов - нет, примечание - Е. Отменить режим
с выравниванием. При заполнении строки выравни-
вание не делается. Тип выравнивания для команды
ad не меняется. Если режим заполнения включен,
то заполнение выходной строки все же происходит;

ce - отцентровать следующие N входных строк. Форма
вызова команды ce - .ce N, начальное значение -
нет, нет аргуметов - 1, примечание - Е. Располо-
жить по центру следующие N строк исходного
текста в пределах текущего размера текста (длина


20
АПК.00322-01 33 01-15

строки минус отступ). Если N=0 счетчик оставших-
ся для центрирования строк обнуляется (выключа-
ется режим центрирования). Если входная строка
является слишком длинной, она будет выровнена
слева.

























21
АПК.00322-01 33 01-15


5. ВЕРТИКАЛЬНЫЕ РАЗМЕРЫ


5.1. Интервал между строками

Интервал по вертикали (V) между основаниями всех пос-
ледующих строк выходного текста можно задать с помощью ко-
манды vs, при этом максимальная разрешающая способность
определяется типом устройства вывода. Используемая в
данный момент величина межстрочного интервала V хранится в
регистре .v. Возможно также получение увеличенного (напри-
мер, удвоенного) межстрочного интервала путем использова-
ния команды ls.

5.2. Дополнительное межстрочное расстояние

Имеется возможность задать дополнительное временное
(на одну выходную строку) межстрочное расстояние. Для это-
го используют функцию \x'N', которая встраивается в необ-
ходимое слово или пристраивается к нему. В данной функции,
как и в других функциях, параметр которой заключен между
символами-ограничителями (здесь символ '), могут использо-
ваться произвольные ограничители.

Если N отрицательно, то будет вертикальный прогон на
величину N перед строкой. Если N положительно, то верти-
кальный прогон на величину N будет после строки. Если не-
сколько следующих друг за другом указателей дополнительно-
го межстрочного расстояния относятся к одной и той же вы-


22
АПК.00322-01 33 01-15

ходной строке, то будет использована максимальная величи-
на. Величина использованного в последний раз дополнитель-
ного межстрочного расстояния хранится в регистре .a.

5.3. Блоки вертикальных промежутков

Блок пустых строк обычно формируется с помощью коман-
ды sp, при этом действует режим "без прогонов", если он
включен. Если внутри требуемого вертикального пространства
имеется "ловушка", то пространство после нее не формирует-
ся. Сплошной блок пустых строк можно сохранить, используя
команду sv. Для определения вертикальных размеров исполь-
зуются следующие команды:

vs - установить интервал между строками.
Форма вызова команды vs - .vs N, началь-
ное значение - 1/6i., нет аргументов -
предыдущее, примечание - Е, Р. Устано-
вить интервал между строками V (от линии
шрифта одной строки до линии шрифта дру-
гой). Временный дополнительный интервал
по вертикали устанавливается с помощью
функции \х'n';

ls - установить межстрочное расстояние. Форма
вызова команды ls - .ls _N, начальное
значение - N=1, нет аргументов - преды-
дущее, примечание - Е. Mежстрочное
расстояние (от низа одной строки до низа


23
АПК.00322-01 33 01-15

другой) устанавливается в _N. N-1 допол-
нительных интервалов длиной V (пустых
строк) добавляется к каждой строке вы-
ходного текста. Дополнительные пустые
строки не добавляются, если текст или
ранее добавленная пустая строка достига-
ет позиции "ловушки";

sp - прогон по вертикали на величину N в
любом направлении. Форма вызова команды
sp - .sp N, начальное значение - нет,
нет аргументов - N=1V, примечание - B,V.
Если N отрицательно, происходит движение
назад (вверх) и ограничивается рассто-
янием до верха страницы. Движение вперед
(вниз) ограничивается расстоянием до
ближайшей "ловушки". Если действует
режим "без прогонов", никаких промежут-
ков не появится;

sv - сохранить вертикальный промежуток. Форма
вызова команды sv - .sv N, начальное
значение - нет, нет аргуменов - N=1V,
примечание - V. Сохранить блок пустых
строк размера N. Если расстояние до сле-
дующей "ловушки" больше N, осуществляет-
ся прогон на величину N в выходном
тексте. Режим "без прогонов" на эту ко-
манду не действует. Если расстояние до


24
АПК.00322-01 33 01-15

следующей "ловушки" меньше N, то прогон
не осуществляется сразу, но N запомина-
ется для последующего использования (ко-
мандой os). При последующих командах sv
запоминаемая ранее величина N будет об-
новляться;

os - ввести сохраненный вертикальный промежу-
ток. Форма вызова команды os - .os, на-
чальное значение - нет, нет аргументов -
нет, примечание - нет. Осуществить про-
гон, величина которого была установлена
по команде .sv. Режим "без прогонов" на
эту команду не действует. Обычно исполь-
зуется для вывода в нужном месте пустого
места, запрошенного в предшествующей ко-
манде sv;

ns - включить режим "без прогонов". Форма вы-
зова команды ns - .ns, начальное значе-
ние - выключить, нет аргументов - нет,
примечание - D. При этом игнорируются
команды sp и bp, без номера следующей
страницы. Режим "без прогонов" отменяет-
ся при появлении строки вывода или по
команде rs;

rs - выключить режим "без прогонов". Форма
вызова команды rs - .rs, начальное зна-



25
АПК.00322-01 33 01-15

чение - выключить, нет аргументов - нет,
примечание - D. Разрешить прогоны. Режим
"без прогонов" выключается;

пустая строка - то же самое, что и .sp 1. Форма вызова
команды "пустая строка" - пустая строка,
начальное значение - нет, нет аргументов
- нет, примечание - B. Вызывает прерыва-
ние заполнения и выводит пустую строку
так же, как и команда .sp 1.





















26
АПК.00322-01 33 01-15


6. ДЛИНА СТРОК И ОТСТУПЫ

Максимальная длина строки при включенном режиме за-
полнения может быть установлена с помощью команды ll.
Величина отступа может быть установлена использованием ко-
манды in; отступ, действующий только на следующую строку
выходного текста, можно установить командой ti. Длина
строки включает абзацный отступ. Длина строки за вычетом
отступа является базовой величиной при центрировании
текста по команде .се. При наличии частично собранной
строки действие команд ll, in или ti (в случае вызова их с
управляющим символом, не вызывающим обрыва) задерживается
до тех пор, пока эта строка не будет выведена. В режиме
заполнения длина текста в выходной строке меньше или равна
длине строки минус отступ. Текущие значения длины строки и
отступа хранятся соответственно в регистрах .l и .i. Длина
заголовков, состоящих из трех частей, получаемых при ис-
пользовании команды tl, устанавливается независимо с по-
мощью команды lt.

Использутся следующие команды установки длины строки
и формирования отступа:

ll - установить длину строки. Форма вызова команды ll
- .ll _N, начальное значение - 65n, нет аргумен-
тов - предыдущее, примечание - Е,n. Длина строки
устанавливается равной _N;




27
АПК.00322-01 33 01-15

in - установить постоянный отступ. Форма вызова ко-
манды in - .in _N, начальное значение - N=0, нет
аргументов - предыдущее, примечание - B,E,n.
Отступ устанавливается равным _N. Отступ пред-
шествует каждой выходной строке до тех пор, пока