После- дующие ссылки на это имя не будут вызывать ника- ких действий; 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.