Страница:
Форма вызова команды 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)
системы ДЕМОС. Это устройство отличается от устройства
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)
системы ДЕМОС. Это устройство отличается от устройства