ванный файл для виртуального считывающего устройства
виртуальной машины указанного идентификатора или, ecли
oн нe yкaзaн, oн берется из файла /etc/passwd.
-r пoдaвляeт пpeoбpaзoвaниe данных из КОИ-8 в ДКОИ;
-h посылает файл с заголовком;
-d удалить вводной файл после его перфорации;
-s перфорировать в режиме "stream". Данные перфори-
руются в формате "TWO BYTE <LENGTH> <DATA>...";
-q принимающая система ДЕМОС не извещает владельца
о прибытии файла;
-о режим переписывания. Сообщает принимающей систе-
ме ДЕМОС о необходимости переписать записанный
файл;
195
AПK.00210-01 33 01-5
-v идвм
идeнтификaтop BM, кoтopaя получает задание. Если
параметр имеет форму COMPLEX.VMID, тогда файл
передается в ПДП для направления его в систему,
указанную с помощью COMPLEX. Если -v не исполь-
зуеся, то команда будет использовать ввод из
/etc/passwd;
-i используется указанный идентификатор пользовате-
ля ДЕМОС для назначения пpaвa oблaдaния фaйлoм,
ecли данные перфорируются для системы ДЕМОС;
-f используйте "tег_файл" в кaчecтвe имeни, кoтopoe
дается файлу. Ecли нe иcпoльзyeтcя, тo команда
будет использовать имя ввoднoгo фaйлa, ecли этo
нe cтaндapтный ввoд, в этoм случае используется
"from.punch";
-c класс для перфорации. Обычно в;
-т использование указанной информации. Особенно по-
лезно это при перфорировании для ПДП;
-u использовать указанный идентификатор пользовате-
ля как идентификатор машины ДEMOC, paбoтaющeй
кaк ВМ. В этом случае генерируется карта userid
для принимающей машины;
-Х выполнить команду из /usr/spool/bin с аргумента-
ми Перфорируемый файл становится стандартным
вводом для команды в принимающей системе ДЕМОС.
196
AПK.00210-01 33 01-5
Данная команда не должна использоваться для перфорации
заданий для системы ОС ЕС. Для этого необходимо ис-
пользовать команду send.
Перфорируемые файлы между системами ДЕМОС используют
заголовок для пepeдaчи информации об идентификаторе
пользователя и местoнахождении файла. Для перемещений
между системами ДЕМОС используются флаги -i и -x.
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ:
send, vmread, spooler
197
AПK.00210-01 33 01-5
ИМЯ:
wc - подсчет слов.
ФОРМАТ:
wc [-lwcpt] [-bбод] [-sразм_стр] [-u]
[-v] [файл...]
ОПИСАНИЕ:
Команда wc подсчитывает число строк, слов, символов и
(если заказано) число листов и время передачи по линии
связи указанных файлов. Если отсутствуют аргументы
"файл", весь подсчет делается для информации из стан-
дартного файла ввода. Словом считается максимальная
строка символов, ограниченная пробелами, символами та-
буляции или символами новой строки.
Ключ, если он задается, может содержать символы "l",
"w", "c", "p", и "t" что соответствует подсчету строк
(l), слов (w), символов (c), числа листов (p) и време-
ни передачи (t).
-bбод Указывает, что скорость передачи ("бод") отлична
от принятой по умолчанию (300 бод).
-sразм_стр
Задает размер листа (по умолчанию 66 строк).
-u Указывает, что при определении времени печать
следует учитывать время передачи по сети.
-v Задает режим печати заголовков.
198
AПK.00210-01 33 01-5
ПРИМЕРЫ:
Подсчет числа слов, строк, листов в файле wc.1 и выда-
ча данной информации с заголовком:
wc -lwcpt -v wc.1
в результате выполнения этой команды будет выдано сле-
дующее сообщение:
lines words chars pages time@300
42 86 1312 1 43.0 se wc.1
ЗАМЕЧАНИЯ:
При подсчете времени печати не учитываются такие фак-
торы как степень загрузки машины, и т.п.
199
AПK.00210-01 33 01-5
ИМЯ:
whatis - выдать краткую справку о компоненте.
ФОРМАТ:
whatis name ...
ОПИСАНИЕ:
Команда whatis выдает краткую справку о назначении
каждой из перечисленных компонент системы ("name").
Полные документы по заданным компонентам можно полу-
чить с помощью команды man.
ФАЙЛЫ:
/usr/lib/whatis краткий справочник
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
man, catman, apropos
200
AПK.00210-01 33 01-5
ИМЯ:
whereis - поиск компоненты
ФОРМАТ:
whereis [-sbm] [-u] [-sbm справоник ... -f] name
ОПИСАНИЕ:
Команда whereis производит поиск всех вхождений ука-
занного имени ("name") в имена файлов стандартных
справочников. При сравнении заданного имени с базовым
именем файла, окончания типа ".c", ".bak" ".etc" и
т.п., не рассматриваются. Выдаются полные имена най-
денных файлов.
При вызове команды могут задаваться следующие ключи:
-s производить поиск в справочниках, содержащих ис-
ходные тексты команд (по умолчанию, просматрива-
ются справочники с исходными текстами команд ОС
ДЕМОС);
-b производить поиск в справочниках, содержащих го-
товые к выполнению команды (по умолчанию, прос-
матриваются справочники с командами ОС ДЕМОС);
-m производить поиск в справочниках, содержащих до-
кументацию. (по умолчанию, просматриваются спра-
вочники с оперативной документацией по ОС
ДЕМОС);
-u выдавать сообщения только о тех файлах, имена
201
AПK.00210-01 33 01-5
которых не содержат вхождений ни одного из эле-
ментов списка "name".
-f признак конца списка справочников.
Ключи "-b", "-m", и "-s" могут использоваться для за-
дания области просмотра команды whereis. В этом слу-
чае, после соответствующего ключа помещается список
справочников, содержащих файлы указанного типа.
ПРИМЕРЫ:
Поиск всех файлов в справочнике основных команд систе-
мы, которые не имеют соответствующих описаний в спра-
вочнике с оперативной документацией:
whereis -u -m /bin
ФАЙЛЫ:
/bin/*
/usr/bin/*
/usr/lib/*
/etc/*
Поскольку используется системный вызов chdir, имена
справочников, в которых осуществляется поиск, должны
приводится полностью.
202
AПK.00210-01 33 01-5
ИМЯ:
who - кто работает в системе.
ФОРМАТ:
who [who-файл] [am i]
ОПИСАНИЕ:
Команда who без аргумента выдает для каждого активного
пользователя системы ДЕМОС регистрационное имя, имя
терминала и время регистрации. Если задан аргумент,
печатается аналогичная строка о выходе из системы без
имени пользователя. Для повторных загрузок печатается
строка с "x" на месте имени устройства и время оконча-
ния работы системы.
Если заданы два аргумента, например, "who am I" (а
также "who are you"), who печатает имя под которым вы
зарегистрировались в системе.
ФАЙЛЫ:
/etc/utmp
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
getuid, utmp
203
AПK.00210-01 33 01-5
ИМЯ:
write - передача сообщения другому пользователю.
ФОРМАТ:
write имя_пользователя [имя_tty]
ОПИСАНИЕ:
Команда write используется для передачи сообщений на
терминал другого пользователя. Когда команда вызывает-
ся, она посылает сообщение:
Message from "username" "ttyname"..
Передача продолжается до тех пор пока не считывается
конец файла на терминале или не посылается прерывание.
По концу передачи, write печатает на другом терминале
"EOF" и завершает работу.
Если вы хотите послать сообщение пользователю, который
более чем один раз зарегистрировался в системе, можно
использовать аргумент "имя_tty" для того, чтобы ука-
зать соответствующее имя терминала.
С помощью команды mesg можно закрыть свой терминал на
прием сообщений от других пользователей. Вначале
запись разрешается. Некоторые команды, в частности re,
и pr, на время своей работы закрывают терминал на при-
ем сообщений, чтобы предотвратить беспорядочный вывод.
Если строка начинаетсяя символом "!", write вызывает
интерпретатор команд для того, чтобы выполнить остаток
204
AПK.00210-01 33 01-5
строки как команду.
При использовании write рекомендуется придерживаться
следующего протокола: при первом обращении к другому
пользователю, перед тем, как начинать свою посылку,
дождитесь его ответа. Каждая сторона должна заканчи-
вать каждое сообщение выделяющим сигналом "о". Код
"оо" используется, когда диалог близок к завершению.
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
mesg, who, mail
205
AПK.00210-01 33 01-5
ИМЯ:
xstr - выделение текстовых констант из программ на
языке Си.
ФОРМАТ:
xstr [-c] [-x] [-] [файл]
ОПИСАНИЕ:
Команда xstr предназначена для выноса текстовых строк
из программ на Си и сбора их либо в отдельный модуль,
либо во внешний файл. В первом режиме команда xstr
ведет файл "strings", в котором собраны текстовые
константы разных частей большой программы. Эти
константы заменяются в программе ссылками на соот-
ветствующую строку в этом файле вида "&xstr[номер]".
Во втором режиме создается файл "Messages", в который
собираются достаточно длинные (больше 12 байтов)
текстовые строки. Обращения к этим строкам заменяются
на обращения к программе "Xsline(адрес)", которая чи-
тает строку по указанному адресу в буфер и возвращает
адрес считанной строки.
Не всегда такая замена строк корректна. Команда "xstr"
при обработке текста программы воспринимает специаль-
ные комментарии, которые выключают или включают раз-
личные режимы обработки программы.
Команда
xstr -c имя
206
AПK.00210-01 33 01-5
выделяет из файла "имя", в котором находится исходный
текст программы на языке Си, строки и заменяет их
ссылками вида &xstr[число]. К файлу добавляется соот-
ветствующее об'явление массива xstr. Результирующий
текст на Си помещается в файл x.c и должен затем быть
скомпилирован. Выделенные строки размещяются в файле
strings, если их там до этого не было. Повторяющиеся
строки и строки, представляющие собой части существу-
ющих строк, не приводят к изменениям в файле strings.
После того, как все компоненты большой программы ском-
пилированы, должен быть создан файл xs.c, инициализи-
рующий массив xstr, с помощью команды вида:
xstr
Этот файл xs.c должен быть скомпилирован и загружен
вместе с остальной программой. Массив xstr можно пере-
вести из сегмента "data" в сегмент "text", (например,
оттранслировав его на язык ассемблера и поменяв слово
".data" на ".text" в полученном файле).
Xstr может также работать с одним файлом. Команда:
xstr имя
создает, как и прежде, файлы х.c и xs.c, не пользуясь
при этом никаким файлом strings в том же каталоге.
Выполнение xstr наиболее эффективно после работы преп-
роцессора Си, если какие-либо макроопределения создают
строки или если имеется условно транслируемые части
207
AПK.00210-01 33 01-5
программы, содержащие строки, которые фактически могут
не понадобиться. Если задан аргумент "-", xstr
считывает стандартный файл ввода. Для выполнения xstr
после препроцессора Си может использоваться следующая
последовательность команд:
cc -C -P имя.c
xstr -c имя.i
cc -c х.c
mv х.o имя.o
rm имя.i
Если не добавляются новые элементы, xstr не изменяет
файл strings; таким образом, можно избежать повторного
создания xs.o, за исключением случаев, когда это дей-
ствительно необходимо.
Команда:
xstr -x -c имя
собирает строки в файл "Mesages", и переписывает прог-
рамму в файл "x.c", заменяя строки на обращения к
функции "Xsline(адрес)", где "адрес" - адрес строки в
файле "Messages". В программу вставляется описание
функции Xsline. Команда:
xstr -x
создает файл "xs.c", содержащий текст функции Xsline.
При трансляции этот файл настраивается на имя файла с
208
AПK.00210-01 33 01-5
текстами диагностик с помощью макропеременной
"XSFILE":
cc -O -c -DXSFILE=
Для управления обработкой в программе на Си служат
псевдокомментарии:
/*NOXSTR*/
блокировка выноса строк в режиме "xstr -c" в
тексте за комментарием;
/*NOXXSTR*/
то же самое, но в режиме "xstr -c -x";
/*YESXSTR*/ или /*YESXXSTR*/
разрешение выноса строк в обоих режимах.
Естественно, что, если xstr используется после препро-
цессора, должен использоваться флаг команды cc "-C"
для того, чтобы препроцессор не уничтожал комментарии.
При использовании "xstr -c" вынос строк должен блоки-
роваться в конструкциях инициализации типа:
char x[]="строка";
При выносе строки в файл (режим "xstr -c -x") обработ-
ка должна блокироваться во всех инициализациях данных,
а также везде, где строка будет использоваться сколь
нибудь продолжительно. Это связано с тем, что при зап-
росе у функции Xsline следующей строки предыдущая сти-
рается.
209
AПK.00210-01 33 01-5
При использовании "xstr -x -c" в программах, которые
собираются с помощью команды "ldover", файл "Messages"
можно дозаписать в библиотеку разделов загрузки
"V.out.a"; в этом случае функцию Xsline (файл xs.c)
транслировать не нужно.
ЗАМЕЧАНИЯ:
Если строка является суффиксом другой строки, но более
короткая строка первой просматривается xstr, в файл
"strings" помещаются обе строки, хотя достаточно было
бы поместить только более длинную строку.
210
AПK.00210-01 33 01-5
ИМЯ:
yacc - компилятор компиляторов.
ФОРМАТ:
yacc [-vd][-f парсер] грамматика
ОПИСАНИЕ:
Yacc преобразовывает безконтекстную грамматику в набор
таблиц для простого автомата, который выполняет алго-
ритм грамматического разбора. Грамматика может быть
неоднозначной, для устранения неоднозначности исполь-
зуются правила старшинства, задаваемые пользователем.
Выходной файл должен быть скомпилирован компилятором
Си, в результате чего получается программа yyparse.
Эта программа должна быть загружена совместно с прог-
раммой лексического анализа yylex, а также программой
main и программой обработки ошибок yyerror. Эти прог-
раммы пишутся пользователем. Для создания лексических
анализаторов, которые могут работать с yacc, можно ис-
пользовать lex.
Если задан флаг -v, yacc составляет файл y.output, со-
держащий описание таблиц грамматического разбора и от-
чет о конфликтах, связанных с неоднозначностями грам-
матики.
Если задается флаг -d, генерируется файл с операторами
#define, в которых устанавливается связь между "кодами
знаков", присваиваемых yacc, и именами знаков, об'яв-
211
AПK.00210-01 33 01-5
ляемых пользователем. Этим самым создается возможность
доступа к кодам знаков из других исходных файлов.
Если задан флаг -f, используется нестандартный грамма-
тический анализатор из файла, имя которого задается
следующим за флагом аргументом, "парсер". По умолчанию
используется "/usr/lib/yaccpar".
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
lex
ДИАГНОСТИКА:
В стандартный файл вывода выдается число конфликтов
reduce-reduce и shift-reduce. Сообщается также, если
некоторые правила не достижимы со стартового символа.
ЗАМЕЧАНИЯ:
Поскольку имена файлов постоянны, в один и тот же
момент в заданном каталоге может быть активным только
один процесс yacc.
2
AПK.00210-01 33 01-5
АННОТАЦИЯ
Данный документ содержит команды общего назначения
системы демос, предназначенные для непосредственного вызо-
ва пользователем. Приводимые в приложении команды отражают
текущее состояние стандартной оперативной справочной доку-
ментации системы. Все команды в документе упорядочены в
алфавитном порядке. В документе для удобства пользования
описание команд начинается с нового листа.
3
AПK.00210-01 33 01-5
СОДЕРЖАНИЕ
1. КОМАНДЫ ОБЩЕГО НАЗНАЧЕНИЯ......................... 4
ПРИЛОЖЕНИЕ............................................ 5
виртуальной машины указанного идентификатора или, ecли
oн нe yкaзaн, oн берется из файла /etc/passwd.
-r пoдaвляeт пpeoбpaзoвaниe данных из КОИ-8 в ДКОИ;
-h посылает файл с заголовком;
-d удалить вводной файл после его перфорации;
-s перфорировать в режиме "stream". Данные перфори-
руются в формате "TWO BYTE <LENGTH> <DATA>...";
-q принимающая система ДЕМОС не извещает владельца
о прибытии файла;
-о режим переписывания. Сообщает принимающей систе-
ме ДЕМОС о необходимости переписать записанный
файл;
195
AПK.00210-01 33 01-5
-v идвм
идeнтификaтop BM, кoтopaя получает задание. Если
параметр имеет форму COMPLEX.VMID, тогда файл
передается в ПДП для направления его в систему,
указанную с помощью COMPLEX. Если -v не исполь-
зуеся, то команда будет использовать ввод из
/etc/passwd;
-i используется указанный идентификатор пользовате-
ля ДЕМОС для назначения пpaвa oблaдaния фaйлoм,
ecли данные перфорируются для системы ДЕМОС;
-f используйте "tег_файл" в кaчecтвe имeни, кoтopoe
дается файлу. Ecли нe иcпoльзyeтcя, тo команда
будет использовать имя ввoднoгo фaйлa, ecли этo
нe cтaндapтный ввoд, в этoм случае используется
"from.punch";
-c класс для перфорации. Обычно в;
-т использование указанной информации. Особенно по-
лезно это при перфорировании для ПДП;
-u использовать указанный идентификатор пользовате-
ля как идентификатор машины ДEMOC, paбoтaющeй
кaк ВМ. В этом случае генерируется карта userid
для принимающей машины;
-Х выполнить команду из /usr/spool/bin с аргумента-
ми Перфорируемый файл становится стандартным
вводом для команды в принимающей системе ДЕМОС.
196
AПK.00210-01 33 01-5
Данная команда не должна использоваться для перфорации
заданий для системы ОС ЕС. Для этого необходимо ис-
пользовать команду send.
Перфорируемые файлы между системами ДЕМОС используют
заголовок для пepeдaчи информации об идентификаторе
пользователя и местoнахождении файла. Для перемещений
между системами ДЕМОС используются флаги -i и -x.
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ:
send, vmread, spooler
197
AПK.00210-01 33 01-5
ИМЯ:
wc - подсчет слов.
ФОРМАТ:
wc [-lwcpt] [-bбод] [-sразм_стр] [-u]
[-v] [файл...]
ОПИСАНИЕ:
Команда wc подсчитывает число строк, слов, символов и
(если заказано) число листов и время передачи по линии
связи указанных файлов. Если отсутствуют аргументы
"файл", весь подсчет делается для информации из стан-
дартного файла ввода. Словом считается максимальная
строка символов, ограниченная пробелами, символами та-
буляции или символами новой строки.
Ключ, если он задается, может содержать символы "l",
"w", "c", "p", и "t" что соответствует подсчету строк
(l), слов (w), символов (c), числа листов (p) и време-
ни передачи (t).
-bбод Указывает, что скорость передачи ("бод") отлична
от принятой по умолчанию (300 бод).
-sразм_стр
Задает размер листа (по умолчанию 66 строк).
-u Указывает, что при определении времени печать
следует учитывать время передачи по сети.
-v Задает режим печати заголовков.
198
AПK.00210-01 33 01-5
ПРИМЕРЫ:
Подсчет числа слов, строк, листов в файле wc.1 и выда-
ча данной информации с заголовком:
wc -lwcpt -v wc.1
в результате выполнения этой команды будет выдано сле-
дующее сообщение:
lines words chars pages time@300
42 86 1312 1 43.0 se wc.1
ЗАМЕЧАНИЯ:
При подсчете времени печати не учитываются такие фак-
торы как степень загрузки машины, и т.п.
199
AПK.00210-01 33 01-5
ИМЯ:
whatis - выдать краткую справку о компоненте.
ФОРМАТ:
whatis name ...
ОПИСАНИЕ:
Команда whatis выдает краткую справку о назначении
каждой из перечисленных компонент системы ("name").
Полные документы по заданным компонентам можно полу-
чить с помощью команды man.
ФАЙЛЫ:
/usr/lib/whatis краткий справочник
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
man, catman, apropos
200
AПK.00210-01 33 01-5
ИМЯ:
whereis - поиск компоненты
ФОРМАТ:
whereis [-sbm] [-u] [-sbm справоник ... -f] name
ОПИСАНИЕ:
Команда whereis производит поиск всех вхождений ука-
занного имени ("name") в имена файлов стандартных
справочников. При сравнении заданного имени с базовым
именем файла, окончания типа ".c", ".bak" ".etc" и
т.п., не рассматриваются. Выдаются полные имена най-
денных файлов.
При вызове команды могут задаваться следующие ключи:
-s производить поиск в справочниках, содержащих ис-
ходные тексты команд (по умолчанию, просматрива-
ются справочники с исходными текстами команд ОС
ДЕМОС);
-b производить поиск в справочниках, содержащих го-
товые к выполнению команды (по умолчанию, прос-
матриваются справочники с командами ОС ДЕМОС);
-m производить поиск в справочниках, содержащих до-
кументацию. (по умолчанию, просматриваются спра-
вочники с оперативной документацией по ОС
ДЕМОС);
-u выдавать сообщения только о тех файлах, имена
201
AПK.00210-01 33 01-5
которых не содержат вхождений ни одного из эле-
ментов списка "name".
-f признак конца списка справочников.
Ключи "-b", "-m", и "-s" могут использоваться для за-
дания области просмотра команды whereis. В этом слу-
чае, после соответствующего ключа помещается список
справочников, содержащих файлы указанного типа.
ПРИМЕРЫ:
Поиск всех файлов в справочнике основных команд систе-
мы, которые не имеют соответствующих описаний в спра-
вочнике с оперативной документацией:
whereis -u -m /bin
ФАЙЛЫ:
/bin/*
/usr/bin/*
/usr/lib/*
/etc/*
Поскольку используется системный вызов chdir, имена
справочников, в которых осуществляется поиск, должны
приводится полностью.
202
AПK.00210-01 33 01-5
ИМЯ:
who - кто работает в системе.
ФОРМАТ:
who [who-файл] [am i]
ОПИСАНИЕ:
Команда who без аргумента выдает для каждого активного
пользователя системы ДЕМОС регистрационное имя, имя
терминала и время регистрации. Если задан аргумент,
печатается аналогичная строка о выходе из системы без
имени пользователя. Для повторных загрузок печатается
строка с "x" на месте имени устройства и время оконча-
ния работы системы.
Если заданы два аргумента, например, "who am I" (а
также "who are you"), who печатает имя под которым вы
зарегистрировались в системе.
ФАЙЛЫ:
/etc/utmp
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
getuid, utmp
203
AПK.00210-01 33 01-5
ИМЯ:
write - передача сообщения другому пользователю.
ФОРМАТ:
write имя_пользователя [имя_tty]
ОПИСАНИЕ:
Команда write используется для передачи сообщений на
терминал другого пользователя. Когда команда вызывает-
ся, она посылает сообщение:
Message from "username" "ttyname"..
Передача продолжается до тех пор пока не считывается
конец файла на терминале или не посылается прерывание.
По концу передачи, write печатает на другом терминале
"EOF" и завершает работу.
Если вы хотите послать сообщение пользователю, который
более чем один раз зарегистрировался в системе, можно
использовать аргумент "имя_tty" для того, чтобы ука-
зать соответствующее имя терминала.
С помощью команды mesg можно закрыть свой терминал на
прием сообщений от других пользователей. Вначале
запись разрешается. Некоторые команды, в частности re,
и pr, на время своей работы закрывают терминал на при-
ем сообщений, чтобы предотвратить беспорядочный вывод.
Если строка начинаетсяя символом "!", write вызывает
интерпретатор команд для того, чтобы выполнить остаток
204
AПK.00210-01 33 01-5
строки как команду.
При использовании write рекомендуется придерживаться
следующего протокола: при первом обращении к другому
пользователю, перед тем, как начинать свою посылку,
дождитесь его ответа. Каждая сторона должна заканчи-
вать каждое сообщение выделяющим сигналом "о". Код
"оо" используется, когда диалог близок к завершению.
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
mesg, who, mail
205
AПK.00210-01 33 01-5
ИМЯ:
xstr - выделение текстовых констант из программ на
языке Си.
ФОРМАТ:
xstr [-c] [-x] [-] [файл]
ОПИСАНИЕ:
Команда xstr предназначена для выноса текстовых строк
из программ на Си и сбора их либо в отдельный модуль,
либо во внешний файл. В первом режиме команда xstr
ведет файл "strings", в котором собраны текстовые
константы разных частей большой программы. Эти
константы заменяются в программе ссылками на соот-
ветствующую строку в этом файле вида "&xstr[номер]".
Во втором режиме создается файл "Messages", в который
собираются достаточно длинные (больше 12 байтов)
текстовые строки. Обращения к этим строкам заменяются
на обращения к программе "Xsline(адрес)", которая чи-
тает строку по указанному адресу в буфер и возвращает
адрес считанной строки.
Не всегда такая замена строк корректна. Команда "xstr"
при обработке текста программы воспринимает специаль-
ные комментарии, которые выключают или включают раз-
личные режимы обработки программы.
Команда
xstr -c имя
206
AПK.00210-01 33 01-5
выделяет из файла "имя", в котором находится исходный
текст программы на языке Си, строки и заменяет их
ссылками вида &xstr[число]. К файлу добавляется соот-
ветствующее об'явление массива xstr. Результирующий
текст на Си помещается в файл x.c и должен затем быть
скомпилирован. Выделенные строки размещяются в файле
strings, если их там до этого не было. Повторяющиеся
строки и строки, представляющие собой части существу-
ющих строк, не приводят к изменениям в файле strings.
После того, как все компоненты большой программы ском-
пилированы, должен быть создан файл xs.c, инициализи-
рующий массив xstr, с помощью команды вида:
xstr
Этот файл xs.c должен быть скомпилирован и загружен
вместе с остальной программой. Массив xstr можно пере-
вести из сегмента "data" в сегмент "text", (например,
оттранслировав его на язык ассемблера и поменяв слово
".data" на ".text" в полученном файле).
Xstr может также работать с одним файлом. Команда:
xstr имя
создает, как и прежде, файлы х.c и xs.c, не пользуясь
при этом никаким файлом strings в том же каталоге.
Выполнение xstr наиболее эффективно после работы преп-
роцессора Си, если какие-либо макроопределения создают
строки или если имеется условно транслируемые части
207
AПK.00210-01 33 01-5
программы, содержащие строки, которые фактически могут
не понадобиться. Если задан аргумент "-", xstr
считывает стандартный файл ввода. Для выполнения xstr
после препроцессора Си может использоваться следующая
последовательность команд:
cc -C -P имя.c
xstr -c имя.i
cc -c х.c
mv х.o имя.o
rm имя.i
Если не добавляются новые элементы, xstr не изменяет
файл strings; таким образом, можно избежать повторного
создания xs.o, за исключением случаев, когда это дей-
ствительно необходимо.
Команда:
xstr -x -c имя
собирает строки в файл "Mesages", и переписывает прог-
рамму в файл "x.c", заменяя строки на обращения к
функции "Xsline(адрес)", где "адрес" - адрес строки в
файле "Messages". В программу вставляется описание
функции Xsline. Команда:
xstr -x
создает файл "xs.c", содержащий текст функции Xsline.
При трансляции этот файл настраивается на имя файла с
208
AПK.00210-01 33 01-5
текстами диагностик с помощью макропеременной
"XSFILE":
cc -O -c -DXSFILE=
Для управления обработкой в программе на Си служат
псевдокомментарии:
/*NOXSTR*/
блокировка выноса строк в режиме "xstr -c" в
тексте за комментарием;
/*NOXXSTR*/
то же самое, но в режиме "xstr -c -x";
/*YESXSTR*/ или /*YESXXSTR*/
разрешение выноса строк в обоих режимах.
Естественно, что, если xstr используется после препро-
цессора, должен использоваться флаг команды cc "-C"
для того, чтобы препроцессор не уничтожал комментарии.
При использовании "xstr -c" вынос строк должен блоки-
роваться в конструкциях инициализации типа:
char x[]="строка";
При выносе строки в файл (режим "xstr -c -x") обработ-
ка должна блокироваться во всех инициализациях данных,
а также везде, где строка будет использоваться сколь
нибудь продолжительно. Это связано с тем, что при зап-
росе у функции Xsline следующей строки предыдущая сти-
рается.
209
AПK.00210-01 33 01-5
При использовании "xstr -x -c" в программах, которые
собираются с помощью команды "ldover", файл "Messages"
можно дозаписать в библиотеку разделов загрузки
"V.out.a"; в этом случае функцию Xsline (файл xs.c)
транслировать не нужно.
ЗАМЕЧАНИЯ:
Если строка является суффиксом другой строки, но более
короткая строка первой просматривается xstr, в файл
"strings" помещаются обе строки, хотя достаточно было
бы поместить только более длинную строку.
210
AПK.00210-01 33 01-5
ИМЯ:
yacc - компилятор компиляторов.
ФОРМАТ:
yacc [-vd][-f парсер] грамматика
ОПИСАНИЕ:
Yacc преобразовывает безконтекстную грамматику в набор
таблиц для простого автомата, который выполняет алго-
ритм грамматического разбора. Грамматика может быть
неоднозначной, для устранения неоднозначности исполь-
зуются правила старшинства, задаваемые пользователем.
Выходной файл должен быть скомпилирован компилятором
Си, в результате чего получается программа yyparse.
Эта программа должна быть загружена совместно с прог-
раммой лексического анализа yylex, а также программой
main и программой обработки ошибок yyerror. Эти прог-
раммы пишутся пользователем. Для создания лексических
анализаторов, которые могут работать с yacc, можно ис-
пользовать lex.
Если задан флаг -v, yacc составляет файл y.output, со-
держащий описание таблиц грамматического разбора и от-
чет о конфликтах, связанных с неоднозначностями грам-
матики.
Если задается флаг -d, генерируется файл с операторами
#define, в которых устанавливается связь между "кодами
знаков", присваиваемых yacc, и именами знаков, об'яв-
211
AПK.00210-01 33 01-5
ляемых пользователем. Этим самым создается возможность
доступа к кодам знаков из других исходных файлов.
Если задан флаг -f, используется нестандартный грамма-
тический анализатор из файла, имя которого задается
следующим за флагом аргументом, "парсер". По умолчанию
используется "/usr/lib/yaccpar".
ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
lex
ДИАГНОСТИКА:
В стандартный файл вывода выдается число конфликтов
reduce-reduce и shift-reduce. Сообщается также, если
некоторые правила не достижимы со стартового символа.
ЗАМЕЧАНИЯ:
Поскольку имена файлов постоянны, в один и тот же
момент в заданном каталоге может быть активным только
один процесс yacc.
2
AПK.00210-01 33 01-5
АННОТАЦИЯ
Данный документ содержит команды общего назначения
системы демос, предназначенные для непосредственного вызо-
ва пользователем. Приводимые в приложении команды отражают
текущее состояние стандартной оперативной справочной доку-
ментации системы. Все команды в документе упорядочены в
алфавитном порядке. В документе для удобства пользования
описание команд начинается с нового листа.
3
AПK.00210-01 33 01-5
СОДЕРЖАНИЕ
1. КОМАНДЫ ОБЩЕГО НАЗНАЧЕНИЯ......................... 4
ПРИЛОЖЕНИЕ............................................ 5