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. Отступ пред-
          шествует каждой выходной строке до тех пор, пока
          не будет изменен;

ti      - установить временный отступ. Форма вызова коман-
          ды  ti  -  .ti _N, начальное значение - нет, нет
          аргументов - игнорируется, примечание  -  B,E,n.
          Устанавливается   временный   отступ.  Следующая
          строка выходного текста будет иметь отступ _N по
          отношению  к текущему отступу. Получающийся сум-
          марный отступ не может быть отрицательным. Теку-
          щий отступ не изменяется.
















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


          7. МАКРОКОМАНДЫ, ЦЕПОЧКИ, ОТВЕДЕНИЯ И
                        "ЛОВУШКИ"


     7.1. Макрокоманды и цепочки

     Макрокоманда (макро) - это имеющая  определенное  имя
последовательность   произвольных   строк,  которую  можно
вызвать по имени или с помощью механизма захвата  ("ловуш-
ки").  Цепочка  -  это имеющая определенное имя последова-
тельность символов, не включающая символ новой строки, ко-
торую с помощью имени можно вставить в любое место текста.
Имена команд, макро и  цепочек  хранятся  в  одном  списке
имен.  Имена  макро и цепочек могут содержать один или два
символа и могут совпадать с именами команд, макро или  це-
почек,  определенных  ранее (в этом случае прежний вариант
об'екта с этим именем игнорируется). Имена макро или цепо-
чек не могут содержать русские буквы. Любой из этих об'ек-
тов может быть переименован  с  помощью  команды  .rn  или
исключен  с помощью команды .rm. Макро создаются по коман-
дам de и di, а для внесения к ним добавлений  используются
команды  am  и  da. В результате команд di и da нормальный
выходной текст должен быть записан в макрокоманду. Цепочки
создаются по команде ds а для добавления к ним использует-
ся команда as. Макро вызывается таким же  образом,  как  и
команда;  управляющая  строка,  начинающаяся  с  .хх будет
вставлять в текст содержимое макро хх.  Последующая  часть
управляющей  строки  может содержать до девяти аргументов.


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

Цепочки х и хх вставляются в  любое  нужное  место  текста
посредством  функций \*х и \*(хх соответственно. Ссылки на
цепочки и вызовы макро могут быть вложенными.

     7.2. Интерпретация ввода в режиме копирования

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

-  содержимое числовых  регистров  вставляется  с  помощью
   функции \n;

-  вставляются цепочки, указанные функцией \*;

-  вставляются аргументы, указанные функцией \$;

-  исключаются скрытые  символы  новой  строки,  указанные
   функцией \(символ новой строки);

-  исключаются комментарии, указанные функцией \";

-  последовательности \t и \a соответственно интерпретиру-
   ются  как ASCII символы HT (горизонтальная табуляция) и
   SOH (началo заголовка);

-  \\ интерпретируется как \;

-  \. интерпретируется как ".".




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

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

     7.3. Аргументы

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

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




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

(1<=N<=9).  Если  вызванный аргумент не существует, то ре-
зультатом будет нулевая цепочка. Например, макрокоманду xx
можно определить следующим образом:
      .de xx        \"начало определения
      Сегодня \\$1,\\$2.
      ..            \"конец определения
и вызвать:
      .хх Понедельник 14-е
чтобы получить выходной текст
      Сегодня Понедельник,14-е.

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

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


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


     7.4. Отведения

     Обработанный выходной текст можно  отвести  в  макро,
например  для  обработки сноски или определения размера по
горизонтали и вертикали некоторого  текста  для  изменения
страниц или колонок в соответствии с определенными услови-
ями. В отведении можно установить единственную ловушку  по
определенной вертикальной позиции. В числовых регистрах dn
и dl содержатся соответственно вертикальный и горизонталь-
ный размеры последнего отведения. При последующем считыва-
нии отведенного текста в режиме  "без  заполнения"  верти-
кальный размер каждой из его строк сохраняется, независимо
от текущего значения интервала между строками (V).  Текст,
при отведении которого была установлена постоянная разряд-
ка, или текст с выделенными символами, может быть правиль-
но считан только в том случае, если эти режимы будут снова
задействованы во время последующего считывания. Одним   из
способов достижения этого является встраивание в текст от-
ведения соответствующих команд с помощью "механизма  проз-
рачного вывода" (См. подразд.10.4).

     Отведенные в макро тексты могут быть вложены  друг  в
друга,  и некоторые параметры и регистры связаны с текущим
уровнем отведения (верхний, не  относящийся  к  отведению,
уровень  можно  считать  нулевым уровнем отведения). К ним
(параметрам и регистрам) относятся: "ловушка" по отведению
и соответствующее ей макро, режим "без прогонов", сохраня-
емая во внутреннем регистре отмеченная вертикальная  пози-


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

ция  (см.  разд. 3), текущая вертикальная позиция (регистр
гистр .h) и имя текущего отведения (регистр .z).

     7.5. "Ловушки"

     Существует три типа "ловушек": ловушки  по  месту  на
странице,  ловушки по месту в отведении и ловушки по числу
входных строк. Ловушки для вызова макрокоманды  можно  по-
местить,  используя  команду wh, в любую позицию страницы,
включая верхний край. Позицию такой ловушки можно изменить
с помощью запроса ch. Ловушки, позиции которых расположены
на основании страницы или ниже, не действуют до  тех  пор,
пока  они  не  будут  смещены внутрь страницы или не будет
увеличен размер страницы. Две ловушки могут  оказаться  на
одной  позиции только в результате первоначального помеще-
ния их в разные позиции и последующего  перемещения  одной
из  них; первая из двух ловушек, помещенных в одну и ту же
позицию будет "скрывать" вторую, до тех пор, пока  она  не
переместится.  Если  первая  ловушка возвращается обратно,
она снова "скрывает" вторую ловушку. Макрокоманда, связан-
ная  с ловушкой по месту на странице, вызывается автомати-
чески  как  только  выводимая  строка  текста  перекрывает
какую-нибудь  ловушку  (то есть позиция ловушки попадает в
очередной вертикальный интервал). При достижении основания
(низа)  страницы происходит переключение на ловушку по на-
чалу (верхней части) страницы, если вообще существует  та-
кая  ловушка. Расстояние до позиции следующей ловушки хра-
нится в регистре .t. Если между текущей позицией и основа-


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

нием страницы ловушек нет, то содержимое регистра .t равно
расстоянию до основания страницы.

     Макровызов по ловушке, действующей в текущем  отведе-
нии,  можно  установить  с  помощью команды dt. Регистр .t
также используется в случае отведения текста в макро. Если
не  имеется  последующих  ловушек, то в регистр засылается
достаточно большое число. Описание ловушки  по  количеству
входных строк приводится ниже в пояснениях к команде it.

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

de      - определить или  переопределить  макроопределение
          Форма  вызова  команды de - .de xx yy, начальное
          значение - нет, нет аргументов - .yy=..,  приме-
          чание - нет. Определить или переопределить макро
          xx. Текст макро начинается со  следующей  строки
          входного  текста. Строки входного текста записы-
          вются в рабочий файл в режиме копирования до тех
          пор,  пока  в  определении  макро  не встретится
          строка, начинающаяся  с  .yy,  которая  вызывает
          макро  yy. Если аргумент yy отсутствует, опреде-
          ление макро заканчивается строкой,  начинающейся
          с  "..". Макро может содержать вложенные команды
          de при условии, что имена макрокоманд,  заверша-
          ющих определение, различны или признак конца оп-
          ределения является неявным. Признак  конца  ".."
          можно  замаскировать  с  помощью  дополнительных




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

          символов ``\'' - \\.., которые при записи  внеш-
          него  макроопределения будут преобразованы в \..
          и при последующем считывании в "..";

am      - добавить к макрокоманде. Форма вызова команды am
          - .am xx yy, начальное значение - нет, нет аргу-
          ментов - .yy=.., примечание - нет. Версия коман-
          ды de для добавления текста в макро;

ds      - определить цепочку. Форма вызова  команды  ds  -
          .ds  xx  цепочка,  начальное значение - нет, нет
          аргументов -  игнорируется,  примечание  -  нет.
          Определяет  цепочку  xx,  содержащую  "цепочку".
          Цепочка определена от первого непробельного сим-
          вола после указания имени цепочки до конца стро-
          ки (или начала комментария). Символ двойной  ка-
          вычки  (  " ) перед "цепочкой" не записывается и
          служит для разрешения начальных пробелов в  "це-
          почке";

as      - добавить к цепочке. Форма вызова  команды  as  -
          .as  xx  цепочка,  начальное значение - нет, нет
          аргументов -  игнорируется,  примечание  -  нет.
          Добавляет "цепочку" к цепочке xx (версия команды
          ds для добавления к цепочке);

rm      - удалить команду, макро или цепочку. Форма вызова
          команды  rm  - .rm xx, начальное значение - нет,
          нет аргументов - игнорируется, примечание - нет.
          Имя xx удаляется из списка имен и любая, связан-


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

          ная с ним область памяти, освобождается.  После-
          дующие ссылки на это имя не будут вызывать ника-
          ких действий;

rn      - переименовать команду, макро или цепочку.  Форма
          вызова  команды rn - .rn xx yy, начальное значе-
          ние - нет, нет аргументов - игнорируется, приме-
          чание  - нет. Переименовывает команду, макро или
          цепочку xx в yy. Если yy уже существует,  преды-
          дущая версия yy удаляется;

di      - отвести выходной текст. Форма вызова команды  di
          - .di xx, начальное значение - нет, нет аргумен-
          тов - конец, примечание -  D.  Отводит  выходной
          текст  в макро xx. В процессе отведения происхо-
          дит нормальная обработка текста  за  исключением
          того,   что  не  считаются  страницы.  Обработка
          текста в макро заканчивается, когда  встречаются
          команды di или  da без аргумента. Чуждые команды
          этого типа не должны появляться, при использова-
          нии вложенных отведений;

da      - добавить выходной текст к отведенному. Форма вы-
          зова  команды  da - .da xx, начальное значение -
          нет, нет аргументов -  конец,  примечание  -  D.
          Отводит  текст, добавляя  его в макро xx (версия
          команды di для добавления текста);

wh      - установить ловушку по позиции на странице. Форма
          вызова команды wh - .wh N xx, начальное значение


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

          - нет, нет аргументов -  нет,  примечание  -  V.
          Установить  ловушку для вызова макро xx на пози-
          цию страницы N, отрицательное значение  N  будет
          интерпретироваться  как  расстояние от основания
          (низа) страницы. Если на позицию  N  ранее  была
          установлена  ловушка с другим макро, то теперь с
          позицией N будет связано макро xx. Нулевое  зна-
          чение  N  относится  к верхнему краю страницы. В
          случае отсутствия xx ловушка, найденная в  пози-
          ции N, удаляется;

ch      - изменить позицию ловушки. Форма  вызова  команды
          ch - .ch xx N. начальное значение - нет, нет ар-
          гументов -нет, примечание - v. Изменяet  позицию
          ловушки для макро xx на N. В случае отсутствия N
          ловушка, если она была установлена, удаляется;

dt      - установить ловушку по позиции в отведении. Форма
          вызова команды dt - .dt N xx, начальное значение
          - нет, нет аргументов - выключить, примечание  -
          D,v.  Устанавливает ловушку в позицию N текущего
          отведения для вызова макро xx. Еще одна  команда
          .dt  переопределит ловушку отведения. Если аргу-
          менты не заданы, ловушка удаляется;

it      - установить  ловушку  по   количеству   введенных
          строк.  Форма  вызова команды it - .it N xx, на-
          чальное значение - нет, нет аргументов -  выклю-
          чить,  примечание - Е. Устанавливает ловушку для



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

          вызова макро xx после чтения N  строк  исходного
          текста  (управляющие  строки  и строки команд не
          учитываются). Учитывается  текст,  считанный  из
          исходного  файла или текст, вставляемый макроко-
          мандами, содержащимися в строке исходного  файла
          или вызванными при обнаружении "ловушек";

em      - конечное макроопределение. Форма вызова  команды
          em - .em xx, начальное значение - нет, нет аргу-
          ментов - нет, примечание - нет. Макро  xx  будет
          вызвана  после  окончания всего ввода. Результат
          будет таким же, как если бы содержимое xx  нахо-
          дилось в конце последнего обрабатываемого файла.


















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


                   8. ЧИСЛОВЫЕ РЕГИСТРЫ

     Пользователю доступны множество различных, определен-
ных  системой  (системных) именованных числовых регистров.
Кроме того пользователь может определить собственные  чис-
ловые регистры. Имена регистров содержат один или два сим-
вола и могут совпадать с именами команд, макро  или  цепо-
чек.  Имена  регистров  также  не  могут содержать русских
букв. За исключением некоторых системных регистров,  пред-
назначенных только для чтения, числовые регистры допускают
чтение, запись, автоматическое увеличение  или  уменьшение
содержимого  и  вставку  их содержимого в вводимый текст в
различных форматах. Обычно пользователи используют эти ре-
гистры  для автоматической нумерации разделов, параграфов,
строк и т.д. Числовые регистры можно использовать  всегда,
когда  требуется цифровой ввод, а также в числовых выраже-
ниях.

     Числовые регистры создаются и  изменяются  с  помощью
команды nr, которая задает имя, численное значение и вели-
чину автоматического приращения. Регистры также  изменяют-
ся,  если  они используются в последовательности операций,
содержащих автоприращения. Если регистры x и xx содержат N
и  шаг автоматического приращения равен M, то их использо-
вание в следующих последовательностях приводит к результа-
там, представленным в табл.3:




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

                                Таблица 3
 -----------------------------------------------
 |последова-|    состояние         |вставляемоe|
 |тельность |    регистра          |значение   |
 |----------|----------------------|-----------|
 |  \nx     | не меняется          |     N     |
 |  \n(xx   | не меняется          |     N     |
 |  \n+х    | х увеличивается на М |    N+M    |
 |  \n-х    | х уменьшается на М   |    N-M    |
 |  \n+(xx  | xx увеличивается на М|    N+M    |
 |  \n-(xx  | xx уменьшается на М  |    N-M    |
 -----------------------------------------------

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

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

nr      - определить и установить числовой регистр.  Форма
          вызова команды nr - .nr R _N M, начальное значе-
          ние - нет, нет аргументов - нет, примечание - U.
          Числовому  регистру  R присваивается значение _N
          по отношению к предыдущему  значению,  если  оно




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

          было.  Шаг автоматического приращения устанавли-
          вается равным M;

af      - определить формат числового регистра. Форма  вы-
          зова  команды af - .af R c, начальное значение -
          арабские, нет аргументов  -  нет,  примечание  -
          нет. Задает формат c для содержимого регистра R.
          Могут быть использованы форматы, приведенные  на
          рис.1.
                Форматы для регистра r
       -------------------------------------------
       | формат | последовательность нумерации   |
       |--------|--------------------------------|
       |   1    | 0,1,2,3,4,5,........           |
       |  001   | 000,001,002,003,004,005,...... |
       |   i    | 0,i,ii,iii,iv,v,.......        |
       |   I    | 0,I,II,III,IV,V,.......        |
       |   a    | 0,a,b,c,..,z,aa,ab,..zz,aaa,.. |
       |   A    | 0,A,B,C,..,Z,AA,AB,..ZZ,AAA,.. |
       -------------------------------------------
                      рис.1     ;

rr      - удалить числовой регистр. Форма  вызова  команды
          rr  - .rr R, начальное значение - нет, нет аргу-
          ментов - игнорируется, примечание  -  нет.  Если
          динамически  создается  большое  количество  ре-
          гистров, может возникнуть необходимость  удалить
          неиспользуемые  больше  регистры для того, чтобы



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

          освободить область внутренней памяти  для  вновь
          создаваемых регистров.




























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


               9. ТАБУЛЯЦИИ, ЛИДЕРЫ И ПОЛЯ


     9.1. Табуляции и лидеры

     ASCII-символы горизонтальной табуляции (HT) и  начала
залоговка  (SOH),  который далее будет называться лидером,
могут использоваться  либо  для  генерации  горизонтальных
подвижек, либо для формирования цепочки повторяющихся сим-
волов. Длина горизонтальной подвижки или цепочки регулиру-
ется  внутренними табуляционными остановами (табуляциями),
устнавливаемыми с помощью команды ta. Различие  состоит  в
том,  что, по умолчанию, символ tab генерирует подвижку, а
лидер формирует цепочку точек; с помощью команд  lc  и  tc
можно изменить, соответственно, символы лидеров или подви-
жек. Существует три типа внутренних табуляционных  остано-
вов: для выравнивания по левому краю табуляции, для вырав-
нивания по правому краю табуляции и по центру табуляции. В
табл.4,  приведенной ниже, D - расстояние от текущей пози-
ции входной строки  (где  был  обнаружен  символ  tab  или
лидер)  до следующей табуляции; "цепочка" состоит из вход-
ных символов, содержащихся за символом  tab  (лидером)  до
следующего  символа tab (или лидера) или конца строки; W -
ширина "цепочки".






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

                                       Таблица 4
  -----------------------------------------------
  |тип табуляции|длина подвижки  |расположение  |
  |             |или повторение  |  "цепочки"   |
  |             |  символов      |              |
  |-------------+----------------+--------------|
  | Левый       |       D        |после пропуска|
  |             |                |расстояния D  |
  |             |                |              |
  | Правый      |     D - W      |выравнена по  |
  |             |                |правому краю  |
  |             |                |в пределах D  |
  |             |                |              |
  | Центральный |    D - W/2     |центрирована  |
  |             |                |относительно  |
  |             |                |правого края  |
  |             |                |интервала D   |
  -----------------------------------------------

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

     Символы табуляции и ведущие символы не  интерпретиру-
ются в режиме копирования. Функции еt и еa всегда порожда-
ют неинтерпретируемые символы табуляции и  лидеров,  соот-


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

ветственно,  и в режиме копирования эквивалентны фактичес-
ким символам табуляции и ведущим символам.

     9.2. Поля

     Поле заключено между  парой  символов-разграничителей
полей и состоит из подцепочек, разделенных символами инди-
катора заполнения. Длина поля равна расстоянию от  позиции
начала  поля  во  входной строке и до следующей табуляции.
Разность между длиной поля и суммарной длиной всех  подце-
почек  определяет пространство горизонтального заполнения,
которое распределяется  между  соответствуюшими  областями
заполнения.  Величина  заполнямого пространства может быть
отрицательной. Например, если ограничителем поля  является
символ #, а указателем заполнения ^, то #^xxx^right# обоз-
начает выровненную по правому  краю  цепочку,  с  цепочкой
xxx, отцентрованной на оставшемся пространстве.

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

ta      - установить табуляции. Форма вызова команды та  -
          .ta  Nt ...., начальное значение - 0.81, нет ар-
          гументов - отсутствует, примечание - Е, n. Уста-
          навливает табуляции и их типы. t=R соответствует
          выравниванию справа; t=C соответствует центриро-
          ванию; при отсутствии t подразумевается выравни-
          вание слева. По умолчанию установлены  табуляцци
          на  каждые 0.8 дюйма (или 8n). Значения аргумен-
          тов разделяются пробелами; значение, перед кото-


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

          рым стоит знак плюс (``+''), рассматривается как
          приращение к значению предыдущей табуляции;

tc      - установить символ  заполнения  табуляций.  Форма
          вызова  команды tc - .tc c, начальное значение -
          отсутствует, нет аргументов - отсутствует,  при-
          мечание  -Е. Символом, заполняющим табуляционные
          подвижки становится символ c, или  (если  c  от-
          сутствует)  удаляется,  обозначая тем самым под-
          вижки;

lc      - установить символ заполнения лидеров. Форма  вы-
          зова  команды  lc  - .lc c, начальное значение -
          нет, нет аргументов - отсутствует, примечание  -
          Е.   Символом,  заполняющим  лидеры,  становится
          символ c, или (если  c  отсутствует)  удаляется,
          обозначая тем самым подвижки;

fc      - установить символы  ограничителя  и  заполнителя
          поля. Форма вызова команды fc - .fc a b, началь-
          ное значение - выключить, нет аргументов -  вык-
          лючить,  примечание  -  нет. Символ ограничителя
          поля устанавливается  в a; индикатор  заполнения
          устанавливается в b, а в случае отсутствия b - в
          пробел. Если аргументы отсутствуют, механизм уп-
          равления полями выключается.






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


             10. СОГЛАШЕНИЯ О ВВОДЕ/ВЫВОДЕ И
                 ПРЕОБРАЗОВАНИЯ СИМВОЛОВ


     10.1. Преобразования входных символов

     Pif воспринимает некоторые управляющие  символы  кода
ASCII,  такие  как  символ  горизонтальной табуляции (HT),
символ начала заголовка  (SOH),  символ  возврата  на  шаг
(BS). Символ новой строки (NL) (или LF) используется в ка-
честве разграничителя входных строк. Кроме того, восприни-
маются служебные символы начала текста (STX), конца текста
(ETX), опроса (ENQ), опознания (ACK) и "звонок" (BEL), ко-
торые могут использоваться в качестве разграничителей. Все
прочие символы игнорируются.

     Символ переключения ``\'' указывает, что за ним будет
следовать  символ,  который обозначает другой определенный
символ или некоторую функцию. Полный перечень этих  после-
довательностей приведен в разд.23. Символ ``\'' не следует
путать с символом переключения кода (ESC) кода ASCII. Что-
бы в выходном тексте появился символ ``\'', нужно восполь-
зоваться последовательностью  ``\\''  во  входном  тексте.
Символ  переключения  можно изменить с помощью команды ec.
Для распечатки действующего в данный момент символа перек-
лючения можно воспользоваться функцией \e. При желании или
необходимости механизм переключения кода может быть отклю-
чен и восстановлен при помощи команды eo.



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

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

ec      - установить символ переключения. Форма вызова ко-
          манды  ec  -  .ec c, начальное значение - е, нет
          аргументов - е, примечание - нет.  Устанавливает
          символ переключения в c, а при его отстутствии в
          е;

eo      - изменить состояние механизма переключения. Форма
          вызова  команды  eo  - .eo, начальное значение -
          выключить, нет аргументов -  нет,  примечание  -
          нет.

     10.2. Возврат и подчеркивание

     Если выключен режим копирования, то  символ  возврата
на шаг (BS) кода ASCII обычно заменяется на горизонтальную
подвижку в обратном направлении на ширину символа пробела.
Функция  подчеркивания, как одна из форм построения линий,
описана в подразд.12.3. В системе pif подчеркивание произ-
водится автоматически при помощи включения курсива (коман-
дой ft или функцией \f) или при помощи команды ul. Следует
отметить,  что  подчеркиваются  не  все  символы, а только
буквы и цифры; знаки и пробелы остаются неподчеркнутыми.

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

ul      - подчеркивать следующие N строк исходного текста.
          Форма  вызова команды ul - .ul N, начальное зна-


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

          чение - выключить, нет аргументов - N=1,  приме-
          чание  -  Е.  Подчеркнуть  текст, содержащийся в
          следующих N строках входного  текста,  при  этом
          режим  "без  заполнения"  не  включается. Выход,
          сгенерированный командой tl, попадает  под  дей-
          ствие  команды ul, но при этом N не уменьшается.
          Если N>1, то имеется опасность того, что  интер-
          полированное  "захватыванием" макро может выдать
          строки текста в пределах  данного  пространства.
          Чтобы избежать этого можно соответствующим обра-
          зом изменять окружение (см. разд. 17);

ft      - изменить текущий шрифт. Форма вызова команды  ft
          - .ft F, начальное значение - обычный, нет аргу-
          ментов - предыдущий, примечание  -  Е.  Заменяет
          текущий  шрифт на F. Чтобы последующий текст был
          подчеркнут, нужно указать F=I. Чтобы вернуться к
          обычному шрифту (без подчеркивания) надо указать
          F=R. Аналогичный результат получится, если  вос-
          пользоваться  функцией  пepeключения шрифта \fN,
          где N - тип шрифта;

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




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

     10.3. Управляющие символы

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

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

cc      - установить основной  управляющий  символ.  Форма
          вызова  команды cc - .cc c, начальное значение -
          ., нет аргументов - ., примечание - Е.  Основной
          управляющий  символ  устанавливается  в "c" или,
          если c отсутствует, устанавливается в ".";

c2      - установить управляющий  символ  без  прерывания.
          Форма вызова команды c2 - c2 c, начальное значе-
          ние - ', нет аргументов -  ',  примечание  -  Е.
          Управляющий символ, не вызывающий прерывания за-
          полнения, устанавливается в "c" или, если c  от-
          сутствует, устанавливается в " ' " (апостроф).








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

     10.4. "Прозрачный" вывод

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

     10.5. Комментарии и скрытые символы новой строки

     Слишком длинные входные строки, которые должны  оста-
ваться  одной  строкой  (например, определение цепочки или
незаполняемый текст), можно разбить на несколько  физичес-
ких  строк, каждая из которых, кроме последней, должна за-
канчиваться  знаком  переключения  \.   Последовательность
"\(символ  новой строки)" всегда игнорируется, если только
она не появляется в комментариях. Комментарий можно  вста-
вить  в  конец  любой строки, написав перед ним \". Символ
новой строки, находящийся в конце  комментария,  не  может
быть  скрытым.  Строка, начинающаяся с \", будет восприни-
маться как пустая строка и обрабатываться как команда  .sp
1.  Комментарий может также занимать целую строку если она
начинается с ``.\"''.





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


               11. ЛОКАЛЬНЫЕ ВЕРТИКАЛЬНЫЕ И
           ГОРИЗОНТАЛЬНЫЕ ПЕРЕМЕЩЕНИЯ И ФУНКЦИЯ
                          ШИРИНЫ


     11.1. Локальные перемещения

     Функции \v'N' и \h'N' можно использовать для  локаль-
ных  перемещений по вертикали и горизонтали, соответствен-
но. Расстояние N может быть отрицательным. Перемещениями в
положительных  направлениях считаются перемещения вправо и
вниз. Локальным перемещением является любое перемещение  в
пределах  одной  строки. Чтобы избежать неожиданных верти-
кальных смещений, необходимо следить за тем,  чтобы  общее
перемещение  по  вертикали, в пределах слова в заполненном
тексте и в пределах строки в остальных случаях,  равнялось
нулю. Последовательности переключения, обеспечивающие раз-
личные подвижки, указаны в табл.5.












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

                                           Таблица 5
         Переключательные последовательности
---------------------------------------------------
Iверти-  | действие      Iгоризон-| действие      I
Iкальные |               Iталные  |               I
Iподвижки|               Iподвижки|               I
I--------+---------------+--------+-------------- I
I \v'N'  |подвинуть      I  \h'N' |подвинуть      I
I        |на расстояние NI        |на расстояние NI
I  \u    |1/2 строки     I\(проб.)|незаполнять    I
I        |    вверх      I        |пробел         I
I  \d    |1/2 строки     I  \0    |пробел рав-    I
I        |    вниз       I        |ный ширине     I
I  \r    |1 строку       I        |цифры          I
I        |   вверх       I        |               I
---------------------------------------------------

     11.2. Функция ширины

     Функция ширины \w'цепочка' вычисляет ширину "цепочки"
(в базовых единицах). Изменения типа шрифта можно безопас-
но вставлять в цепочку, при этом текущие условия  формати-
рования  не  изменяются.  Например,  команду  .ti -\w'1.'u
можно было бы  использовать  для  формирования  временного
отступа слева равного размеру цепочки "1."





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

     11.3. Отметка горизонтального положения

     Переключающая последовательность \kx вызовет  запоми-
нание в регистре x текущей горизонтальной позиции во вход-
ной строке.

     Переключающая последовательность \jx вызовет  запоми-
нание в регистре x текущей горизонтальной позиции в выход-
ной строке.

     Например, конструкция
     \jxслово \h'|\nx+2u'слово
будет выделять "слово", посредством возврата к
его началу и повторной его печати, в результате чего
будет напечатано жирным шрифтом "слово".
При использовании этой конструкции следует иметь в виду,
что занесение значения в регистр произойдет после того,
как будет сформировано слово, и в такой конструкции
     \jxслово\h'|\nx+2u'слово
содержимое регистра x будет равно нулю (если этот регистр
ранее не был определен).










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


             12. НЕКОТОРЫЕ СПЕЦИАЛЬНЫЕ ПРИЕМЫ
                          ПЕЧАТИ


     12.1. Печать с наложением на одной позиции

     Функция печати с наложением в одной позиции \o'цепоч-
ка'  обеспечивает  автоматически  центрированную печать на
одной позиции до девяти символов. Символы "цепочки"  печа-
таются  один поверх другого с выравниванием по центру каж-
дого символа. Общая ширина будет равнa ширине самого широ-
кого символа. Цепочка не должна содержать локальных верти-
кальных перемещений. Например,  последовательность  \o'+_'
даст _.

     12.2. Символы нулевой ширины

     Функция \zc будет выводить символ c, не  оставляя  за
ним  интервала,  и  может  быть использована для получения
комбинации символов посредством печати на  одном  месте  с
выравниванием по левому краю. Например, последовательность
\zO/ напечатает перечеркнутое O, а последовательность \z|_
напечатает _.







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

     12.3. Рисование линий

     При использованиии функции \l'Nc' будет формироваться
цепочка повторяющихся символов 'c' слева направо длиной N.
Если 'c' можно понять как продолжение выражения N, то  его
можно  отделить  от  N символом \&. Если 'c' не задано, то
используется символ подчеркивания '_'. При отрицательном N
перед  "рисованием" цепочки выполняется горизонтальное пе-
ремещение в обратном направлении на расстояние N. Если от-
ношение  N/(ширина 'c') имеет остаток, то интервал, равный
значению остатка, помещается в начале (с левого края)  це-
почки. В тех случаях, когда символы должны быть напечатаны
слитно,  например,   линейка   подчеркивания,   оставшееся
пространство  закрывается  с  помощью  наложения.  Если  N
меньше ширины символа 'c', то печатается один символ  'c',
и  его середина находится на расстоянии N. Например, можно
написать следующую макрокоманду для подчеркивания цепочки:
 .de us
 \\$1\\l'-\\w%\\$1%u_'
 ..
Таким образом, вызвав макро
 .us "Подчеркнутые слова"
получим
__________________

     Функция \L'Nc' будет "вычерчивать"  вертикальную  ли-
нию,  состоящую  из  символов c, расположенных в столбец с
интервалом в одну строку; если  "c"  не  указано,  то,  по



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

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

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




















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


                     13. ПЕРЕНОС СЛОВ

     Механизм автоматического переноса слов  можно  отклю-
чить и включить. Символ указателя переноса (последователь-
ность \%)можно вставить в слово для указания желаемых  по-
зиций  переноса или написать перед словом для отмены пере-
носа только этого слова.

     Для автоматического переноса подходят  только  слова,
содержащие  внутри цепочку алфавитных символов, окруженную
цепочками неалфавитных символов. Слова  исходного  текста,
содержащие  дефисы  (минусы),  например,  такие как из-за,
темно-серо-фиолетовый или Семенов-Тянь-Шаньский переносят-
ся  после  этих символов независимо от того, действует или
нет режим автоматического переноса.

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

nh      - отключить режим автоматического переноса.  Форма
          вызова  команды  nh  - .nh, начальное значение -
          да, нет аргументов - нет, примечание - Е;

hy      - включить режим  автоматического  переноса  слов.
          Форма  вызова команды hy - .hy N, начальное зна-
          чение - N=1, нет аргументов - N=1, примечание  -
          Е. Включить автоматический перенос слов при N>=1
          или отключить при N=0.

hc      - установить символ указателя переноса. Форма  вы-
          зова  команды  hc  - .hc c, начальное значение -


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

          нет, нет аргументов - нет, примечание -Е. Символ
          указателя  переноса  устанавливается  в c или по
          умолчанию \%. Указатель переноса при  печати  не
          выводится.


























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


               14. ЗАГОЛОВКИ ИЗ ТРЕХ ЧАСТЕЙ

     Команда формирования заголовка tl обеспечивает  авто-
матическое   размещение   в   трех  полях  строки:  левом,
центральном и правом. Длина заголовка определяется  коман-
дой  lt. Команду tl можно использовать где угодно и она не
зависит от процесса обработки обычного текста. Как  прави-
ло, эта команда используется в макрокомандах обработки на-
чала и конца страницы.

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

tl      - "заголoвок из трех частей". Форма вызова команды
          tl - .tl 'лев.'центр.'прав.', начальное значение
          - нет, нет аргументов -  нет,  примечание  -нет.
          Цепочки "лев.", "центр." и "прав." выравниваются
          по левому краю, центрируются и выравниваются  по
          правому краю, соответственно, в пределах текущей
          длины заголовка. Любая  из  цепочек  может  быть
          пустой  и  допускается  перекрытие.  В  качестве
          разграничителя цепочек можно использовать  любой
          символ. Если в любом из полей встречается символ
          номера страницы (изначально %), то он заменяется
          на текущий номер сраницы, в формате, который ус-
          тановлен для регистра %, содержащего номер стра-
          ницы;




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

pc      - установить символ номера страницы. Форма  вызова
          команды  pc - .pc c, начальное значение - %, нет
          аргументов - выключить, примечание - нет. Символ
          номера страниц устанавливается в c или (если ар-
          гумент   отсутствует)   символ    ликвидируется.
          Регистром номера страницы остается %;

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

















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


           15. НУМЕРАЦИЯ СТРОК ВЫХОДНОГО ТЕКСТА

         С помощью команды nm можно подключить механизм  авто-
    матической   последовательной  нумерации  строк  выходного
    текста. При задании этого  режима  перед  каждой  выходной
  4 строкой   печатается   трехзначный  номер  строки  в  виде
    арабских цифр, за которым следует пробел.  Таким  образом,
    строки смещаются на четыре позиции, но длина строки сохра-
    няется. Для того чтобы обеспечить совпадение правого  края
  8 с  имевшимся  ранее,  может потребоваться уменьшение длины
    строк. Пустые строки и прочие промежутки, а также  строки,
    сгенерированные  по  команде  tl, не нумеруются. Нумерацию
    можно временно отменить с помощью  команды  nn;  ее  также
 12 можно  отменить,  используя команду .nm без параметров, за
    которой позднее  для восстановления нумерации с последнего
    номера  последует .nm +0. Кроме того, в поле номера строки
    можно задать отступ I для номера строки и количество  про-
 16 белов  S,  отделяющих  текст  от  номера.  Далее можно по-
    пробовать, чтобы печатались только те номера строк,  кото-
    рые  кратны  некоторому числу M (при этом поле нумерации у
    других строк остается незаполненным).

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

nm      - включить режим нумерации выходных  строк.  Форма
          вызова команды nm - .nm _N M S I, начальное зна-
          чение - нет, нет аргументов - выключить,  приме-
          чание  -Е.  Если _N задано, включается нумерация



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

          строк и следующей строке присваивается номер  _N
          по отношению к последней пронумерованной строке.
          Значениями по умолчанию являются M=1, S=1 и I=0.
          Параметры,  соответствующие пропущенным аргумен-
          там, не меняются; нецифровой аргумент  считается
          отсутствующим.  При  отсутствии  всех аргументов
          режим  нумерации  отменяется.  Номер   следующей
          строки  сохраняется  для  возможного дальнейшего
          использования в числовом регистре ln;

nn      - не нумеровать следующие N  строк.  Форма  вызова
          команды nn - .nn N, начальное значение -нет, нет
          аргументов - N=1, примечание -  Е.  Следующие  N
          строк выходного текста не нумеруются.

         В качестве примера,  текст данного раздела был прону-
    мерован  при помощи команды .nm 1 4, которая расположена в
    начале раздела. В конце первого абзаца стояло .nm, а перед
 24 этим  абзацем  нумерация была восстановлена при помощи ко-
    манды .nm +0, и в конце раздела  стоит  снова  .nm.  Длина
    строк была также изменена в соответствующих местах. Другим
    примером  может служить запись вида .nm +5 5 x 3,  которая
 28 включает  режим нумерации, при этом номер очередной строки
    текста будет на 5 больше номера последней  пронумерованной
    строки;  М=5  означает,  что  номер  ставится пeред каждой
    пятой строкой; интервал между текстом и номером не изменя-
 32 ется и отступ I устанавливается равным 3.




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


                 16. УСЛОВНЫЙ ВВОД ТЕКСТА

     Через "c" обозначено  односимвольное  встроенное  имя
условия, "!" обозначает отрицание, "N" - численное выраже-
ние; "цеп1"  и  "цеп2"  являются  цепочками,  разделенными
любым  символом, не встречающимся в цепочках и отличным от
пробела и цифры; "что-либо" - то, что вводится по условию.

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

if      - 1-ая форма вызова команды - .if c что-либо,  на-
          чальное  значение  -  нет,  нет аргументов -нет,
          примечание - нет. Если условие c истинно, ввести
          "что-либо"; в случае, когда вводимый текст зани-
          мает несколько строк, используйте \- что-либо \-
          .  2-ая  форма вызова команды - .if !с что-либо,
          начальное значение - нет, нет аргументов -  нет,
          примечание -нет. Если условие с ложно, то ввести
          "что-либо". 3-я форма вызова  команды  -  .if  N
          что-либо, начальное значение - нет, нет аргумен-
          тов - нет, примечание - u. Если выражение N > 0,
          то  ввести "что-либо". 4-ая форма вызова команды
          - .if !N что-либо, начальное значение - нет, нет
          аргументов - нет, примечание - u. Если выражение
          N <= 0, то ввести "что-либо". 5-ая форма  вызова
          команды  -  .if  'цеп1'цеп2' что-либо, начальное
          значение - нет, нет аргументов - нет, примечание
          - нет. Если "цеп1" совпадает с "цеп2", то ввести



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

          "что-либо". 6-ая  форма  вызова  команды  -  .if
          !'цеп1'цеп2' что-либо, начальное значение - нет,
          нет аргументов - нет,  примечание  -  нет.  Если
          "цеп1"  не  совпадает  с "цеп2", то ввести "что-
          либо";

ie      - часть if конструкции if-else. Форма  вызова  ко-
          манды  ie - .ie c что-либо, начальное значение -
          нет, нет аргументов - нет, примечание -  u.  Все
          перечисленные  выше формы справедливы и для этой
          команды (аналогичной if);

el      - часть else конструкции if-else. Форма вызова ко-
          манды  el - .el c что-либо, начальное значение -
          нет, нет аргументов - нет, примечание - u. Имена
          встроенных условий приводятся на рис.2
               Встроенные условия
    -------------------------------------------
    |  имя  |  имеет значение "истина", если  |
    |условия|                                 |
    |-------|---------------------------------|
    |   o   | номер текущей страницы -нечетный|
    |   e   | номер текущей страницы - четный |
    -------------------------------------------
                    рис.2

     Если условие c истинно, или если число N больше нуля,
или если цепочки тождественно совпадают (включая перемеще-




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

ния, размер символов и  шрифт),  то  вводится  "что-либо".
Если условию, числу или сравниваемым цепочкам предшествует
знак !, то смысл условия меняется на противоположный.

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

     Команда ie (if-else) идентична команде if за исключе-
нием того, что запоминается условие ввода. Последующая до-
полняющая команда el (else)  будет  использовать  обратное
значение этого условия. Блоки ie-el могут быть вложенными.

     Приведем несколько примеров:
 .if e .tl'Четная страница' %'''
эта команда выводит заголовок, если номер текущей страницы
четный. В следующем примере:
  .ie \n%>1 \{\
  'sp 3v
  .tl 'страница %'''
  'sp  |7v \}\
  .el .sp |15v
первая страница обрабатывается не так, как остальные.





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


                17. ПЕРЕКЛЮЧЕНИЯ ОКРУЖЕНИЯ

     Некоторые  параметры,  которые  управляют  обработкой
текста  собираются вместе в "окружение", которое может пе-
реключаться пользователем. Параметры  "окружения"  это  те
параметры, в колонке примечаний к описанию которых указано
E; добавим, что частично собранные строки и слова тоже по-
падают в "окружение". Все другие параметры  глобальны и не
зависят    от    "окружения",     например,     странично-
ориентированные  параметры,  параметры отведений, числовые
регистры и определения  макро  и  цепочек.  При  начальном
включениии  какого-либо  окружения все параметры принимают
значения по умолчанию. Используется команда ev -  переклю-
чить окружение. Форма вызова команды ev - .ev N, начальное
значение - N=0, нет аргументов - предыдущее, примечание  -
нет.   Текущее  окружение  переключается  на  окружение  N
(0<=N<=2). Переключение производится как-бы "упрятыванием"
текущего  окружения, и, поэтому, восстановление ("извлече-
ние") предыдущего окружения  должно  обязательно  произво-
диться  при помощи команды .ev, а не какой-либо определен-
ной ссылки.









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


            18. ВСТАВКИ ИЗ СТАНДАРТНОГО ВВОДА

     Ввод может быть  временно  переключен  на  устройство
стандартного  ввода при помощи команды rd. Обратное перек-
лючение происходит  при  обнаружении  двух  подряд  пустых
строк (дополнительная пустая строка не используется). Этот
механизм позволяет вносить исправления и дополнения,  нап-
ример,  в  документацию  типа писем. В системе ДЕМОС стан-
дартными средствами ввода могут быть клавиатура  пользова-
теля,  линия передачи или файл. Используются следующие ко-
манды:

rd      - читать вставку со стандартного ввода. Форма  вы-
          зова  команды rd - .rd подсказка, начальное зна-
          чение - нет. нет аргументов - BEL, примечание  -
          нет.  Читать  вставку  с устройства стандартного
          ввода до тех пор, пока не будут  найдены  подряд
          два знака новой строки. Если стандартным устрой-
          ством ввода является клавиатура пользователя, на
          терминал  пользователя  выводится "подсказка". С
          командой rd можно обращаться как с макрокомандой
          и помещать после "подсказки" аргументы;

ex      - выход из системы pif. Форма вызова команды ex  -
          .ex,  начальное значение - нет, нет аргументов -
          нет, примечание -  нет.  По  этой  команде  осу-
          ществляется  выход  из  системы  pif.  Обработка




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

          текста прекращается,  как  в  случае  завершения
          всего ввода.

     Если изменения должны быть введены с клавиатуры  тер-
минала,  в то время как выходной текст выводится на терми-
нал, параметр командной строки - q будет отменять  отобра-
жение  на  терминале  вводимой  с  клавиатуры информации и
подсказки, за исключением сигнала "звонок" (BEL).

     Регулярный ввод и ввод вставок не может производиться
одновременно с устройства стандартного ввода.

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














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


          19. ПЕРЕКЛЮЧЕНИЕ ВХОДНОГО И ВЫХОДНОГО
                          ФАЙЛА

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

so      - переключить исходный файл. Форма вызова  команды
          so - .so имяфайла, начальное значение - нет, нет
          аргументов - нет, примечание - нет. Верхний уро-
          вень  ввода (чтение файла) переключается на файл
          "имяфайла". Команда so, обнаруженная в  макроко-
          манде не действует до тех пор, пока уровень вво-
          да не возвращается  к  уровню  ввода  из  файла.
          Когда новый файл исчерпан, ввод опять происходит
          из первоначального файла. Команды so могут  быть
          вложенными;

nx      - начать чтение другого файла. Форма вызова коман-
          ды  nx - .nx имяфайла, начальное значение - нет,
          нет аргументов - конец, примечание - нет.  Теку-
          щий файл считается законченным и ввод переключа-
          ется немедленно на файл "имяфайла";

pi      - передать результат программе. Форма  вызова  ко-
          манды  pi  - .pi программа, начальное значение -
          нет, нет аргументов - нет, примечание - нет. Эта
          команда должна появиться раньше любых операторов
          печати. Никакие аргументы в программу не переда-
          ются.



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


                    20. ПРОЧИЕ КОМАНДЫ

     К этим командам относятся команды:

mc      - указать граничный символ. Форма  вызова  команды
          mc  - .mc c N, начальное значение - нет, нет ар-
          гументов - выключить, примечание - E, n.  Указы-
          вает,   какой  символ  должен  располагаться  на
          расстоянии  N  после  каждой   непустой   строки
          (исключая строки, формируемые командой tl). Если
          строка выходного текста является слишком длинной
          (например,  в случае работы в режиме "без запол-
          нения"), то признак  будет  добавлен  к  строке.
          Если N не задано, используется предыдущее значе-
          ние N; начальное значение N равно 2n.

tm      - выдать на терминал "цепочку". Форма  вызова  ко-
          манды  tm  -  .tm  цепочка, начальное значение -
          нет, нет аргументов  -  NL,  примечание  -  нет.
          После пропуска начальных пробелов "цепочка" (ос-
          таток строки команды) считывается в режиме копи-
          рования и выводится на терминал пользователя;

ig      - игнoрировать строки исходного текста. Форма  вы-
          зова  команды  ig - .ig yy, начальное значение -
          нет, нет аргументов  -  ..,  примечание  -  нет.
          Команда  действует  точно так же, как команда de
          (см. подразд.7.5) за исключением того, что  ввод
          не  происходит. Исходный текст считывается в ре-


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

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

pm      - напечатать список макрокоманд. Форма вызова  ко-
          манды  pm - .pm T, начальное значение - нет, нет
          аргументов - все,  примечание  -  нет.  Печатать
          макрокоманды.  На терминале пользователя печата-
          ются имена и размеры всех определенных  макроко-
          манд и цепочек; если t задано, то печатается ин-
          формация только об общем размере. Единицей изме-
          рения является блок из 128 символов.

fl      - сбросить накопленный вывод. Форма вызова команды
          fl - .fl, начальное значение - нет, нет аргумен-
          тов - нет, примечание - нет. Сбросить буфер  вы-
          вода.  Используется  для вынужденного вывода при
          отладке в диалоговом режиме.














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


          21. ВЫХОДНЫЕ СООБЩЕНИЯ И СООБЩЕНИЯ ОБ
                         ОШИБКАХ

     Выходные результаты работы команд tm, pm и  "подсказ-
ка" команды rd, так же как и сообщения об ошибках, выдают-
ся на стандартное  устройство  выдачи  сообщений  (STDERR)
системы  ДЕМОС.  Это  устройство  отличается от устройства
стандартного вывода, в который pif пересылает отформатиро-
ванный текст. По умолчанию и те и другие выводятся на тер-
минал пользователя, но их выводом можно управлять  незави-
симо.

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


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

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


























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


               22. КРАТКОЕ ОПИСАНИЕ КОМАНД

стр. Команда:    Краткое описание:
 13  .pl _N      Установить длину страницы
 13  .bp _N      Начать новую страницу
 14  .pn _N      Присвоить номер следующей странице
 14  .ne N       Требуется место по вертикали
 14  .mk R       Заомнить вертикальную позицию
 15  .rt _N      Вернуться к вертикальной позиции
 18  .br         Прекратить заполчнение строки
 18  .fi         Включить режим заполнения
 18  .nf         Выключить режим заполнения
 18  .ad c       Установить тип выравнивания
 19  .na         Отключить выравнивание строк
 19  .ce N       Отцентрировать следующие N входных строк
 22  .vs N       Установить интервал между строками
 22  .ls _N      Установить межстрочное расстояние
 23  .sp N       Прогон по вертикали на величину N
 23  .sv N       Сохранить вертикальный промежуток
 24  .os         Вывести сохраненный вертикальный промежуток
 24  .ns         Включить режим "без прогонов"
 24  .rs         Выключить режим "без прогонов"
 25  Пустая строка
                 То же самое,что и .sp 1
 26  .ll _N      Установить длину строки
 27  .in _N      Установить постоянный отступ
 27  .ti _N      Установить временный отступ
 34  .de xx yy   Определить или переопределить макроопреде-


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

                 ление
 35  .am xx yy   Добавить к макрокоманде
 35  .ds xx цепочка
                 Определить цепочку
 35  .as xx цепочка
                 Добавить к цепочке
 35  .rm xx      Удалить команду, макро или цепочку
 36  .rn xx yy   Переименовать команду, макро или цепочку
 36  .di xx      Отвести выходной текст
 36  .da xx      Добавить выходной текст к отведенному
 36  .wn N xx    Установить ловушку по позиции на странице
 37  .ch xx N    Изменить позицию ловушки
 37  .dt N xx    Установить ловушку по позиции в отведении
 37  .it N xx    Установить ловушку по количеству введенных
                 строк
 38  .em xx      Конечное макроопределение
 40  .nr R _N M  Определить и установить числовой регистр
 41  .af R c     Определить формат числового регистра
 41  .rr R       Удалить числовой регистр
 45  .ta Nt .... Установить табуляции
 46  .tc c       Установить символ  заполнения табуляции
 46  .lc c       Установить символ заполнения лидеров
 46  .fc a b     Установить символы ограничителя и заполни-
                 теля поля
 48  .ec c       Установить символ переключения
 48  .eo         Изменить состояние механизма переключения
 49  .ul N       Подчеркивать следующие N строк исходного
                 текста


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

 49  .ft F       Изменить текущий шрифт
 49  .cu N       Подчеркивать следующие N строк
 50  .cc c       Установить основной управляющий символ
 50  .c2 c       Установить управляющий символ без  прерыва-
                 ния
 58  .nh         Отключить режим автоматического переноса
 58  .hy N       Включить режим автоматического переноса
 58  .hc c       Установить символ указателя переноса
 60  .tl 'лев.'центр.'прав.'
                 Заголовок из трех частей
 61  .pc c       Установить символ номера страницы
 61  .lt _N      Установить длину заголовка из трех частей
 61  .nm _N M S I
                 Включить режим нумерации входных строк
 62  .nn N       Не нумеровать следующие N строк
 64  .if c что-либо
                 Если условие  c  истинно,  выполнить  "что-
                 либо"
 64  .if |c что-либо
                 Если условие c ложно, выполнить "что-либо"
 64  .if N что-либо
                 Если выражение N>0, выполнить "что-либо"
 64  .if |N что-либо
                 Если выражение N<=0, выполнить "что-либо"
 64  .if 'цеп1'цеп2' что-либо
                 Если "цеп1" совпадает с  "цеп2", выполнить
                 "что-либо"
 65  .if |'цеп1'цеп2' что-либо


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

                 Если "цеп1" не совпадает с  "цеп2",  выпол-
                 нить "что-либо"
 65  .ie c что-либо
                 Часть if конструкции if-else
 65  .el c что-либо
                 Часть else конструкции if-else
 67  .ev N       Переключить окружение
 68  .rd подсказка
                 Читать вставку со стандартного ввода
 68  .ex         Выход из системы pif
 70  .so имя файла
                 Переключить исходный файл
 70  .nx имя файла
                 Начать чтение другого файла
 70  .pi программа
                 Передать результат программе
 71  .mc c N     Указать граничный символ
 71  .tm цепочка Выдать на терминал "цепочку"
 71  .ig yy      Игнорировать строки исходного текста
 72  .pm t       Напечатать список макрокоманд
 72  .fl         Сбросить накопленный вывод









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


              23. ПЕРЕЧЕНЬ ПЕРЕКЛЮЧАТЕЛЬНЫХ
                   ПОСЛЕДОВАТЕЛЬНОСТЕЙ

     В системе pif используются следующие переключательные
последовательности:
последова-               значение:
тельность:

\\         - \ (для предотвращения или задержки  интерпре-
             тации \);

\e         - печатаемая текущая версия символа  переключе-
             ния;

\.         - точка;

\(пробел)  - символ незаполняемого пробела;

\&         - непечатаемый символ нулевой ширины;

\!         - указатель "прозрачной" строки;

\"         - начало комментария;

\$N        - рассматривать как аргумент (1<=N<=9);

\%         - по умолчанию символ переноса;

\*x,\*(xx  - вставить цепочку х или хх;

\a         - неинтерпретируемый лидер-символ;

\c         - прерывание обработки текста;



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

\d         - вертикальное смещение вперед  (вниз)  на  1/2
             строки;

\h'N'      - локальное перемещение в  горизонтальном  нап-
             равлении;  переместить вправо на N (при отри-
             цательном N - налево);

\jx        - поместить метку горизонтальной позиции выход-
             ного текста в регистр х;

\kx        - поместить метку горизонтальной позиции исход-
             ного текста в регистр х;

\l'Nc'     - функция вычерчивания горизонтальных линий;

\L'Nc'     - функция проведения вертикальных линий;

\nx,\n(xx  - вставить значение числового  регистра  x  или
             xx;

\o'abc...' - печатать на одном месте символы a,b,c...;

\p         - вызывает прерывание  и  растягивает  выходную
             строку;

\r         - обратное перемещение в вертикальном направле-
             нии на 1 строку;

\t         - неинтерпретируемый символ горизонтальной  та-
             буляции;

\u         - вертикальное перемещение в обратном направле-
             нии на 1/2 строки;



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

\v'N'      - локальное перемещение в вертикальном  направ-
             лении.  Переместить вниз на расстояние N (при
             отрицательном N-вверх);

\w'цепоч.' - подставляется значение ширины "цепоч.";

\x'N'      - функция  добавления   дополнительных   пустых
             строк  (при отрицательном аргументе перед те-
             кущей  строкой,  при  положительном  -  после
             нее);

\zc        - печатать символ "c" с  нулевой  шириной  (без
             последующего движения);

\{         - начать условный ввод;

\}         - закончить условный ввод;

\(newline) - скрытый символ новой строки (игнорируемый);

\X         - X, любой символ, не перечисленный выше.

     Переключательные последовательности \\, \.,  \",  \$,
\*,  \a, \n, \t и \(newline) интерпретируются в режиме ко-
пирован

                              СИСТЕМНЫЕ
                              ВЫЗОВЫ
     MAN3.FCPS                PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 3. БИБЛИОТЕЧНЫЕ
                              ФУНКЦИИ
     AI.FCPS                  PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 4. КОМАНДЫ
                              ОБЩЕГО НАЗНАЧЕНИЯ ОТ
                              А ДО J
     JZ.FCPS                  PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 5. КОМАНДЫ
                              ОБЩЕГО НАЗНАЧЕНИЯ ОТ
                              J ДО Z
     MAN8.FCPS                PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 6. СОПРОВОЖДЕНИЕ
                              СИСТЕМЫ
     MAN4.FCPS                PУKOBOДCTBO ПPOГPAM-
                              ЧАСТЬ 7. СПЕЦИАЛЬНЫЕ
                              ФАЙЛЫ
     MAN5.FCPS                PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 8. ФОРМАТЫ ФАЙЛОВ
     MAN7.FCPS                PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 9. МАКРОПАКЕТЫ
     NED.FCPS                 PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 10. ЭКРАННЫЙ
                              РЕДАКТОР ТЕКСТОВ
     MAN0.FCPS                PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 11. КРАТКИЙ
                              СПРАВОЧНИК ПО КОМПО-
                              НЕНТАМ СИСТЕМЫ
     DCON.FCPS                PУKOBOДCTBO ПPOГPAM-
                              МИСТА
                              ЧАСТЬ 12. ОТЛАДЧИК ДЛЯ
                              ЯЗЫКОВ СИ И ФОРТРАН
     ROP.FCPS                 PУKOBOДCTBO
                              ОПЕРАТОРА
     PASCAL.FCPS              ПACКAЛЬ.OПИCAНИE
                              ЯЗЫКА
     AS.FCPS                  ACCEМБЛEP.OПИCAНИE
                              ЯЗЫКА
     KPES.FCPS                OПИCAНИE КOНТPOЛЬНOГO
                              ПРИМЕРА
     BCDC.FCPS                ДИAЛOГOВAЯ EДИНAЯ      ПPOГPAММA
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ДЛЯ ВЫЧИСЛЕ-
                              СИСТЕМА                НИЯ С ПРОИЗ-
                              РУКОВОДСТВО ПРОГРАМ-   ВОЛЬНОЙ ТОЧ-
                              МИСТА ПРИЛОЖЕНИЕ 8     НОСТЬЮ ВCDC
     LEARN.FCPS               ДИAЛOГOBAЯ EДИHAЯ      OБУЧAЮЩAЯ
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ СИСТЕМА LEARN
                              СИСТЕМА
                              РУКОВОДСТВО ПРОГРАМ-
                              МИСТА ПРИЛОЖЕНИЕ 9
     ED.FCPS                  ДИAЛOГOВAЯ EДИНAЯ      PEДAКТOP
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ТЕКСТОВ ED
                              СИСТЕМА
                              РУКОВОДСТВО ПРОГРАМ-
                              МИСТА ПРИЛОЖЕНИЕ 10
     SED.FCPS                 ДИAЛOГOВAЯ EДИНAЯ      PEДAКТOP
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ТЕКСТОВ SED
                              СИСТЕМА
                              РУКОВОДСТВО ПРОГРАМ-
                              МИСТА ПРИЛОЖЕНИЕ 11
     FSCK.FCPS                ДИAЛOГOВAЯ EДИНAЯ      ПPOГPAММA
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ПРОВЕРКИ
                              СИСТЕМА                ФАЙЛОВОЙ
                              РУКОВОДСТВО ПРОГРАМ-   СТРУКТУРЫ
                              МИСТА ПРИЛОЖЕНИЕ 13
     PIF.FCPS                 ДИAЛOГOВAЯ EДИНAЯ      CИCТEМA
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ПОДГОТОВКИ
                              СИСТЕМА                ДОКУМЕНТА-
                              РУКОВОДСТВО ПРОГРАМ-   ЦИИ PIF
                              МИСТА ПРИЛОЖЕНИЕ 14
     M4.FCPS                  ДИAЛOГOВAЯ EДИНAЯ      MAКPO-
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ПРОЦЕССОР М4
                              СИСТЕМА
                              РУКОВОДСТВО ПРОГРАМ-
                              МИСТА ПРИЛОЖЕНИЕ 16
     YACC.FCPS                ДИAЛOГOВAЯ EДИНAЯ      OПИCAНИE
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ЯЗЫКА YACC
                              СИСТЕМА
                              РУКОВОДСТВО ПРОГРАМ-
                              МИСТА ПРИЛОЖЕНИЕ 17
     LEX.FCPS                 ДИAЛOГOВAЯ EДИНAЯ      OПИCAНИE
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ ЯЗЫКА LEX
                              СИСТЕМА
                              РУКОВОДСТВО ПРОГРАМ-
                              МИСТА ПРИЛОЖЕНИЕ 18
     F771.FCPS                ДИAЛOГOBAЯ EДИHAЯ
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ
                              СИСТЕМА
                              ФОРТРАН-77.ОПИСАНИЕ
                              ЯЗЫКА
     F772.FCPS                ДИAЛOГOBAЯ EДИHAЯ
                              МOБИЛЬНAЯ OПEPAЦИOННAЯ
                              СИСТЕМА
                              ФОРТРАН-77. ОПИСАНИЕ
                              ЯЗЫКА
     CC.FCPS                  ДИAЛOГOBAЯ EДИHAЯ
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ
                              СИСТЕМА
                              СИ. ОПИСАНИЕ ЯЗЫКА
     SH.FCPS                  ДИAЛOГOBAЯ EДИHAЯ
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ
                              СИСТЕМА
                              SHELL.OПИСАНИЕ ЯЗЫКА
     CSH.FCPS                 ДИAЛOГOВAЯ EДИНAЯ
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ
                              СИСТЕМА
                              CSHELL. OПИCAНИE
                              ЯЗЫКА
=========================================================================
     СИ. ОПИСАНИЕ ЯЗЫКА
     SH.FCPS                  ДИAЛOГOBAЯ EДИHAЯ
                              МОБИЛЬНАЯ ОПЕРАЦИОННАЯ
                              СИСТЕМА
                              SHELL.OПИСАНИЕ ЯЗЫКА
     CSH.FCPS                 ДИAЛOГOВAЯ EДИНAЯ
  rop.fcps

Популярность: 9, Last-modified: Tue, 30 Jun 1998 04:43:31 GMT