  
















            Операционная система МОС ВП



              Подсистема управления



          ПРОГРАММА ОПРЕДЕЛЕНИЯ КОМАНД





            Руководство пользователя





                 00152-01 92 09



                    Листов 97

















                       1987


                          - 2 -

                      00152-01 92 09


                         АННОТАЦИЯ



     Настоящий документ предназначен для всех  пользовате-

лей системы МОС ВП с целью изучения возможностей и функций

программы определения команд (CDU).

     В документе приводятся общие сведения о программе оп-

ределения команд, форматы, описания команд и  квалификато-

ров.

     В документе также  приводятся  подробные  сведения  о

файле определения команд,  являющемся  исходным  средством

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

описание сопровождается примерами.


                          - 3 -

                      00152-01 92 09


                        СОДЕРЖАНИЕ



1.       Назначение  и  условия  выполнения  программы

         определения команд.............................6

1.1.     Перечень операторов файла определения команд...8

1.2.     Обработка команды.............................13

1.3.     Состав командной строки.......................13

1.4.     Системная таблица  команд  и  таблица  команд

         процесса......................................14

2.       Использование программы CDU...................16

3.       Выбор таблицы.................................17

3.1.     Модификация таблицы команд  пользовательского

         процесса......................................17

3.2.     Добавление команды в системную таблицу команд 18

3.3.     Создание об'ектного модуля таблицы команд.....18

4.       Описание файла определения команд.............20

4.1.     Формат оператора DEFINE VERB..................21

4.2.     Определение изменений  синтаксиса  с  помощью

         оператора DEFINE SYNTAX.......................23

4.3.     Определение значений параметров, квалификато-

         ров и ключевых слов...........................24

4.3.1.   Встроенные типы...............................25

4.3.2.   Определение ключевых слов.....................26

4.4.     Описание характеристики действия DISALLOW.....28

4.4.1.   Указание об'ектов в выражении.................30

4.4.1.1. Имена и метки.................................30

4.4.1.2. Путь ключевого слова..........................31

4.4.1.3. Путь определения..............................33

4.4.2.   Операторы, используемые в выражении...........35

4.5.     Информация, идентифицирующая об'ектные модули 37


                          - 4 -

                      00152-01 92 09


5.       Обработка файла определения команд............39

5.1.     Добавление  определений  команд   в   таблицу

         команд........................................39

5.2.     Удаление определений команд...................40

5.3.     Создание об'ектного модуля....................41

5.4.     Создание новой таблицы команд.................41

6.       Использование подпрограмм языка команд........43

7.       Операторы файла определения команд............44

7.1.     Оператор DEFINE SYNTAX........................44

7.1.1.   Примеры определения синтаксиса................59

7.2.     Oператор DEFINE TYPE..........................61

7.2.1.   Характеристика типа KEYWORD...................61

7.2.2.   Примеры определения типа......................65

7.3.     Оператор DEFINE VERB..........................67

7.3.1.   Примеры определения действия..................74

7.4.     Оператор IDENT................................75

7.5.     Оператор MODULE...............................76

8.       Kвалификаторы команды SET COMMAND.............78

8.1.     Квалификатор /DELETE..........................78

8.2.     Квалификатор /LISTING.........................79

8.3.     Квалификатор /OBJECT..........................81

8.4.     Квалификатор /OUTPUT..........................82

8.5.     Квалификатор /REPLACE.........................84

8.6.     Квалификатор /TABLE...........................86

9.       Примеры использования программы CDU...........88

9.1.     Добавление   команды   в    таблицу    команд

         пользовательского процесса....................88

9.2.     Создание  об'ектного   модуля   таблицы   для

         программы пользователя........................90




                          - 5 -

                      00152-01 92 09


10.      Сообщения пользователю........................96

Перечень ссылочных документов..........................97


                          - 6 -

                      00152-01 92 09


       1. Назначение и условия выполнения программы

                    определения команд



     Программа определения команд (CDU) позволяет изменять

и расширять командный язык DCL. Она дает возможность поль-

зователю определить собственные команды (действия,  выпол-

няемые этими командами) для написанных им программ.  Опре-

деления собственных команд  пользователя  (или  сокращенно

определения команд) формируют файл определения  команд.  В

свою очередь, файл определения  команд  является  исходным

средством при создании или изменении таблицы команд.

     С помощью программы CDU вводятся, удаляются или изме-

няются определения команд в таблице команд. В качестве ис-

ходной информации она принимает таблицу команд и/или файл,

содержащий определения команд, обрабатывает их  и  создает

новую таблицу команд. Новая таблица может быть либо выпол-

няемой программой, либо об'ектным модулем.

     Программа CDU вызывается по команде DCL SET COMMAND.

     Формат команды:

     $ SET COMMAND[/квалификатор[...]] [спец_файла[,...]]

где  квалификатор - один или несколько квалификаторов, ис-

пользуемых в команде для выполнения указанных действий;

     Спец_файла - одна или несколько  спецификаций  файлов

определения команд. Если  указано  несколько  спецификаций

файлов, то они отделяются друг от друга запятыми. Тип фай-

ла по умолчанию  - CLD. В спецификации  файла  допускается

использование символа обобщения, например, звездочки (*).

     Квалификаторы команды SET COMMAND  и  соответствующие

им значения по умолчанию:

     1) /DELETE=(действие[,...]);


                          - 7 -

                      00152-01 92 09


     2) /[NO]LISTING[=спец_файла]              /NOLISTING;

     3) /OBJECT[=спец_файла];

     4) [NO]OUTPUT[=спец_файла]                   /OUTPUT;

     5) /REPLACE;

     6) /TABLE[=спец_файла]                         /TABLE

где  действие - команда, удаляемая из таблицы;

     Спец_файла - спецификация вводного или выводного фай-

ла.

     Для удаления определений команд из таблицы команд ис-

пользуется команда SET COMMAND/DELETE.

     Для создания об'ектного модуля из  файла  определения

команд используется команда SET COMMAND/OBJECT.

     Для добавления или замены определений в  таблице  ко-

манд используется команда SET COMMAND/REPLACE.

     Квалификаторы /DELETE,  /OBJECT  и  /REPLACE  взаимно

исключают друг  друга;  в  командной  строке  используется

только один из этих квалификаторов.

     При завершении  обработки  файла  определения  команд

и/или таблицы команд программой CDU на  экране  появляется

подсказка DCL $.

     По  умолчанию   по  командам   SET COMMAND/DELETE   и

SET COMMAND/REPLACE изменяется  таблица  команд  пользова-

тельского процесса и в пользовательский процесс передается

измененная таблица.  По  квалификатору  /TABLE  изменяется

таблица команд с заданным именем. По квалификатору /OUTPUT

таблица команд записывается в выводной файл.

     По команде SET COMMAND/OBJECT создается об'ектный мо-

дуль с тем же именем, что и имя файла определения  команд,

если не указано другое имя.

     Для того, чтобы изменить  системную  таблицу  команд,


                          - 8 -

                      00152-01 92 09


находящуюся в файле  SYS$LIBRARY:DCLTABLES.EXE,  требуется

привилегия SYSPRV.



     1.1. Перечень операторов файла определения команд



     1.1.1. Операторы файла определения команд:

     1) DEFINE SYNTAX имя_синтаксиса

               [характеристика_действия[,...]];

     2) DEFINE TYPE имя_типа[характеристика_типа[,...]];

     3) DEFINE VERB имя_действия

               [характеристика_действия[,...]];

     4) IDENT строка_идент;

     5) MODULE имя_модуля

где  имя_синтаксиса - имя определения альтернативного син-

таксиса;

     Характеристика_действия задает дополнительную  инфор-

мацию о синтаксисе (в операторе DEFINE SYNTAX) или о  дей-

ствии (в операторе DEFINE VERB);

     Имя_типа - имя списка ключевых слов;

     Характеристика_типа  указывает  допустимые   ключевые

слова и описывает каждое из них;

     Имя_действия - имя команды;

     Строка_идент - символьная строка длиной до 31  симво-

ла, которая содержит идентифицирующую информацию;

     Имя_модуля - символическое имя об'ектного модуля.



     1.1.2. Характеристики       действия       операторов

DEFINE SYNTAX и DEFINE VERB:

     1) DISALLOW выражение;

     2) IMAGE имя_образа;


                          - 9 -

                      00152-01 92 09


     3) NODISALLOWS;

     4) NOPARAMETERS;

     5) NOQUALIFIERS;

     6) PARAMETER имя_параметра

                  [характеристика_параметра[,...]];

     7) QUALIFIER имя_квалификатора

                  [характеристика_квалификатора[,...]];

     8) ROUTINE имя_подпрограммы;

     9) SYNONYM имя_синонима (данная характеристика приме-

няется только в операторе DEFINE VERB)

где  выражение - об'ект  или  группа  об'ектов,  связанных

операторами;

     Имя_образа - спецификация файла  образа,  вызываемого

интерпретатором после разбора команды. Она задается в виде

символьной строки длиной не более 63 символов;

     Имя_параметра - позиция параметра в командной строке.

она имеет вид PN, N - номер  позиции.  Позиции  нумеруются

последовательно от 1 до 8;

     Характеристика_параметра задает дополнительную инфор-

мацию о параметре;

     Имя_квалификатора - символическое имя  квалификатора,

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

     Характеристика_квалификатора  задает   дополнительную

информацию о квалификаторе;

     Имя_подпрограммы -  символическое  имя  подпрограммы,

которая   выполняется   при   обращении   к   подпрограмме

CLI$DISPATCH;

     Имя_синонима - символическое  имя  синонима,  которое

может использоваться вместо имени действия.




                          - 10 -

                      00152-01 92 09


     1.1.3. Характеристика типа оператора DEFINE TYPE:

     KEYWORD имя_ключевого_слова

             [характеристика_ключевого_слова[,...]]

где  имя_ключевого_слова - имя ключевого слова;

     Характеристика_ключевого_слова задает  дополнительную

информацию о ключевом слове.



     1.1.4. Характеристики параметра:

     1) DEFAULT;

     2) LABEL=имя_метки;

     3) PROMPT=строка_подсказки;

     4) VALUE[(характеристика_значения_параметра[,...])]

где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя параметра

(P1 - P8);

     Строка_подсказки - символьная строка длиной не  более

31 символа;

     Характеристика_значения_параметра задает дополнитель-

ную информацию о значении параметра.



     1.1.5. Характеристики квалификатора:

     1) BATCH;

     2) DEFAULT;

     3) LABEL=имя_метки;

     4) NEGATABLE;

     5) NONNEGATABLE;

     6) PLACEMENT=характеристика_расположения;

     7) SYNTAX=имя_синтаксиса;

     8) VALUE

           [(характеристика_значения_квалификатора[,...])]


                          - 11 -

                      00152-01 92 09


где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя  квалифи-

катора;

     Характеристика_расположения - одна из  характеристик:

GLOBAL, LOCAL, POSITIONAL;

     Имя_синтаксиса - символическое  имя,  соответствующее

указанному в операторе DEFINE SYNTAX;

     Характеристика_значения_квалификатора задает дополни-

тельную информацию о значении квалификатора.



     1.1.6. Характеристики ключевого слова:

     1) DEFAULT;

     2) LABEL=имя_метки;

     3) NEGATABLE;

     4) NONNEGATABLE;

     5) SYNTAX=имя_синтаксиса;

     6) VALUE

         [(характеристика_значения_ключевого_слова[,...])]

где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя ключевого

слова;

     Имя_синтаксиса - символическое  имя,  соответствующее

указанному в операторе DEFINE SYNTAX;

     Характеристика_значения_ключевого_слова дает дополни-

тельную информацию о значении ключевого слова.



     1.1.7. Характеристики значения параметра:

     1) CONCATENATE;

     2) DEFAULT=строка_умолчания;

     3) LIST;


                          - 12 -

                      00152-01 92 09


     4) NOCONCATENATE;

     5) REQUIRED;

     6) TYPE=имя_типа

где  строка_умолчания - значение параметра  по  умолчанию.

оно задается в виде символьной строки длиной не  более  95

символов;

     Имя_типа - либо имя встроенного типа, либо имя опера-

тора DEFINE TYPE,  в  котором  определен  список  ключевых

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

имя задается в символьном виде.



     1.1.8. Характеристики   значений   квалификатора    и

ключевого слова:

     1) DEFAULT=строка_умолчания;

     2) LIST;

     3) REQUIRED;

     4) TYPE=имя_типа

где  строка_умолчания - значение квалификатора или  ключе-

вого слова по умолчанию. Оно задается  в  виде  символьной

строки длиной не более 95 символов;

     Имя_типа - либо имя встроенного типа, либо имя опера-

тора DEFINE TYPE,  в  котором  определен  список  ключевых

слов, допустимых в качестве значения данного квалификатора

или ключевого слова. Имя задается в символьном виде.



     1.1.9. Характеристики расположения:

     1) GLOBAL;

     2) LOCAL;

     3) POSITIONAL.




                          - 13 -

                      00152-01 92 09


     1.2. Обработка команды



     Для того, чтобы писать определения команд и  изменять

таблицы команд, необходимо представлять, как интерпретатор

команд (DCL) обрабатывает команды. Обработка команды начи-

нается с того, что интерпретатор DCL запрашивает и получа-

ет командную строку. Затем  он  производит  грамматический

разбор командной строки, используя определения из  таблицы

команд пользовательского процесса. В этой  таблице  содер-

жится список допустимых команд и их атрибутов. Интерпрета-

тор DCL разбирает командную строку слева направо.

     При разборе командной строки интерпретатор DCL  вызы-

вает подпрограмму CLI$DCL_PARSE для проверки каждого  эле-

мента командной строки. Если все элементы являются  допус-

тимыми, интерпретатор DCL создает внутреннее представление

командной строки. Затем интерпретатор DCL, используя  под-

программу CLI$DISPATCH, вызывает образ или программу,  ко-

торые выполняют команду. Если командная  строка  неверная,

то интерпретатор DCL выдает сообщение об ошибке.

     Образ или программа, выполняющие команду, должны выз-

вать подпрограммы CLI$PRESENT и CLI$GET_VALUE для  получе-

ния информации об элементах,  присутствующих  в  командной

строке. Эта информация используется образом или программой

для выполнения команды.



     1.3. Состав командной строки



     Командная строка может содержать компоненты:

     1) действие, которое идентифицирует  выполняемую  ко-

манду;


                          - 14 -

                      00152-01 92 09


     2) параметр, который указывает, над  чем  совершается

действие. Для каждой команды в ее описании содержится спи-

сок допустимых значений параметров. Некоторые команды (SET

и SHOW) допускают в качестве  параметров  ключевые  слова.

Ключевое слово - это заранее определенная строка,  исполь-

зуемая в качестве значения  параметра,  квалификатора  или

другого ключевого слова;

     3) квалификатор, который описывает  или  модифицирует

функции действия. В определении команд указывается возмож-

ность задания значения квалификаторов. Кроме того, в опре-

делении команд описываются типы задаваемых значений.  При-

мерами значений квалификаторов являются спецификации  фай-

лов, целые числа, ключевые слова и символьные строки.

     Примеры:

     1. $ DIFFERENCES/MODE=ASCII MYFILE.DAT YOURFILE.DAT

     В командной строке  действием  является  DIFFERENCES,

/MODE - квалификатор, значением которого является ключевое

слово ASCII. Параметры MYFILE.DAT и YOURFILE.DAT  являются

спецификациями файлов.

     2. $ SHOW DEFAULT

     В командной строке действием является SHOW,  ключевое

слово DEFAULT используется в качестве значения параметра.



     1.4. Системная  таблица  команд  и   таблица   команд

                            процесса



     Системная   таблица   команд   содержится   в   файле

SYS$LIBRARY:DCLTABLES.EXE. По умолчанию,  когда  пользова-

тель регистрируется в системе MOC  ВП,  она  копируется  в

таблицу пользовательского процесса. Таблицу команд пользо-


                          - 15 -

                      00152-01 92 09


вательского процесса использует интерпретатор  команд  при

грамматическом разборе командных строк.

     Поскольку при изменении таблицы команд  пользователь-

ского процесса не портится постоянная таблица в библиотеке

SYS$LIBRARY, то не требуется особых привилегий для модифи-

кации таблицы команд пользовательского процесса. Для изме-

нения  системной  таблицы  команд   требуется   привилегия

SYSPRV.

     Системная таблица команд создается из  исходных  фай-

лов, вызывая файлы определения  команд.  Файл  определения

команд содержит имена и описания действий.




                          - 16 -

                      00152-01 92 09


               2. Использование программы CDU



     Для использования программы CDU необходимо:

     1) определить, какая таблица создается или  изменяет-

ся. В общем случае изменяется таблица команд пользователь-

ского процесса, системная таблица  команд  в  SYS$LIBRARY,

либо создается об'ектный модуль новой таблицы;

     2) выбрать имя и синтаксис для  определяемой  команды

или команд. Для создания файла определения команд, который

определяет команду или команды, используется текстовый ре-

дактор;

     3) с помощью команды SET COMMAND включить файл  опре-

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

манд. Можно модифицировать таблицу команд пользовательско-

го процесса, либо указанный  файл  таблицы  команд.  Можно

также создавать об'ектный модуль из файла определения  ко-

манд пользователя;

     4) написать текст образа  или  программы,  вызываемой

командой, которую пользователь добавляет в таблицу команд.

В тексте программы необходимо использовать соответствующие

подпрограммы интерпретатора команд.

     Примечание. Альтернативным способом  определения  ко-

манды действия является использование чужих команд.  Чужая

команда позволяет передать образу дополнительную  информа-

цию о командной строке. Однако,  при  использовании  чужих

команд программа пользователя должна  разбирать  командную

строку; интерпретатор команд не делает этого.




                          - 17 -

                      00152-01 92 09


                      3. Выбор таблицы



     Тип таблицы, которую пользователь изменяет или созда-

ет, влияет на способ написания определения  команд,  обра-

ботки этого определения и написания текста  программ,  вы-

полняющих команды пользователя.

     Можно модифицировать или создавать:

     1) таблицу команд пользовательского процесса;

     2) системную таблицу команд в SYS$LIBRARY;

     3) новые таблицы, позволяющие выполнять команды прог-

раммами пользователя.



     3.1. Модификация  таблицы  команд   пользовательского

                            процесса



     Для добавления команды в таблицу команд пользователь-

ского процесса необходимо определить новую команду в файле

определения команд. В определении команды указывается  имя

образа, который будет вызван этой командой. С помощью  ко-

манды SET COMMAND новая команда добавляется в таблицу  ко-

манд пользовательского процесса и новая таблица копируется

на место прежней.

     Пример.

     $ SET COMMAND NEWCOMMAND

     В примере показано, как в  таблицу  команд  пользова-

тельского   процесса   добавляется   команда   из    файла

NEWCOMMAND.CLD.

     На подсказку $ можно ввести новую команду,  а  интер-

претатор команд разберет ее и вызовет соответствующий  об-

раз.


                          - 18 -

                      00152-01 92 09


     При написании программы для выполнения новой  команды

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

CLI$PRESENT и CLI$GET_VALUE для получения информации о ко-

мандной строке.

     Чтобы сделать команду в файле NEWCOMMAND.CLD  доступ-

ной при каждом входе в систему, необходимо включить коман-

ду SET COMMAND NEWCOMMAND в командный файл LOGIN.COM.



     3.2. Добавление  команды  в  системную таблицу команд



     Для добавления команды в системную таблицу команд не-

обходимо определить эту команду в  файле  определения  ко-

манд. В этом определении указывается имя образа,  вызывае-

мого командой. По команде SET  COMMAND  новое  определение

добавляется в таблицу интерпретатора  команд,  после  чего

таблица   перезаписывается    в    системную    библиотеку

SYS$LIBRARY. Для изменения системной таблицы команд требу-

ется привилегия SYSPRV.

     Пример.

     $ SET COMMAND/TABLE=SYS$LIBRARY:DCLTABLES -

     $_ /OUTPUT=SYS$LIBRARY:DCLTABLES NEWCOMMAND

     При регистрации любого пользователя в  системе  новая

системная таблица команд будет копироваться в таблицу  ко-

манд пользователя и на подсказку $ можно ввести новую  ко-

манду.



     3.3. Создание об'ектного модуля таблицы команд



     Чтобы создать об'ектный модуль для новой таблицы  ко-

манд, необходимо определить команды  в  файле  определения


                          - 19 -

                      00152-01 92 09


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

полняющей эту команду. Затем создается об'ектный модуль из

данного файла определения команд, как показано в примере.

     Пример.

     $ SET COMMAND/OBJECT NEWCOMMAND

     Созданный об'ектный модуль компонуется с  программой,

использующей таблицу.  При  компоновке  таблицы  команд  с

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

интерпретатора команд. Программа пользователя должна полу-

чить командную строку и вызвать подпрограмму CLI$DCL_PARSE

для анализа и создания внутреннего представления командной

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

прогрAMму CLI$DISPATCH  для  обращения  к  соответствующей

подпрограмме. Программа пользователя  должна  использовать

подпрограммы   интерфейса   с    интерпретатором    команд

(CLI$PRESENT и CLI$GET_VALUE) для получения  информации  о

командной строке.




                          - 20 -

                      00152-01 92 09


          4. Описание файла определения команд



     Файл определения команд содержит информацию,  которая

определяет команду, ее параметры, квалификаторы и ключевые

слова. В файле определения команд  имеется  информация  об

образе или программе, вызываемой в случае успешного разбо-

ра командной строки.

     С помощью текстового редактора создается файл опреде-

ления  команд,  который  содержит  операторы,  необходимые

пользователю для описания новых  команд;  разрешается  ис-

пользование характеристик при задании  дополнительной  ин-

формации для операторов. Тип файла определения  команд  по

умолчанию  - CLD.

     В файле определения команд используются соглашения:

     1) комментарии ограничиваются восклицательным знаком;

вся информация в строке после восклицательного знака  счи-

тается комментарием;

     2) любой оператор и его характеристики допускают раз-

биение на несколько строк; специального символа  продолже-

ния не требуется. Нельзя разбивать на  две  строки  имена.

если оператор размещается на одной строке, то его характе-

ристики разделяются запятыми или пробелами;

     3) в языке определения команд нельзя сокращать назва-

ния операторов или характеристик; все названия  (например,

DEFINE SYNTAX, PARAMETER) должны быть написаны полностью.

     В большинстве операторов и характеристик  допускаются

данные, определяемые пользователем: имена действий,  имена

квалификаторов, имена образов. Эта информация задается ли-

бо в символьном виде, либо в виде строки. Если в операторе

требуется задать терм как строку, то  терм  заключается  в


                          - 21 -

                      00152-01 92 09


кавычки. В строке разрешаются любые  алфавитно-цифровые  и

специальные символы. Для включения в состав строки,  огра-

ниченной кавычками, подстроки, необходимо ее  заключить  в

двойные кавычки ("").

     Если в операторе требуется задать терм  в  символьном

виде, то терм не заключается в кавычки. Символическое  имя

может содержать от 1 до 31 символа, оно должно  начинаться

с буквы или знака денежной единицы и может содержать  бук-

вы, цифры, знаки денежной единицы и подчеркивания.

     Язык программы CDU включает операторы:

     1) DEFINE SYNTAX;

     2) DEFINE TYPE;

     3) DEFINE VERB;

     4) IDENT;

     5) MODULE.



     4.1. Формат оператора DEFINE VERB



     Оператор DEFINE VERB определяет новую команду  дейст-

вия и указывает ее различные характеристики. В одном файле

определения команд разрешается  определение  любого  числа

действий.

     Формат оператора DEFINE VERB:

     DEFINE VERB имя_действия

            [характеристика_действия[,...]]

где  имя_действия - имя команды;

     Характеристика_действия задает дополнительную  инфор-

мацию об этом действии. Характеристики действия могут сле-

довать в файле определения команд в любом порядке.  Указы-

вать характеристики действия не обязательно.


                          - 22 -

                      00152-01 92 09


     Характеристики действия оператора DEFINE VERB:

     1) DISALLOW ограничивает  использование  об'екта  или

комбинации об'ектов;

     2) IMAGE указывает образ, вызываемый действием;

     3) NODISALLOWS указывает, что нет недоступных  об'ек-

тов или комбинаций об'ектов;

     4) NOPARAMETERS указывает, что нет доступных парамет-

ров;

     5) NOQUALIFIERS указывает, что нет доступных квалифи-

каторов;

     6) PARAMETER определяет задаваемый параметр;

     7) QUALIFIER определяет задаваемый квалификатор;

     8) ROUTINE указывает подпрограмму, вызываемую по  оп-

ределенному в операторе действию;

     9) SYNONYM задает синоним действия.

     Пример.

     DEFINE VERB SEARCH

            IMAGE "SEARCH"

            PARAMETER P1

                      LABEL=SOURCE,PROMPT="FILE"

                      VALUE(REQUIRED)

     В примере оператор  DEFINE  VERB  указывает  действие

SEARCH (поиск).

     Характеристика действия IMAGE  идентифицирует  образ,

вызываемый   этим   действием.   Характеристика   действия

PARAMETER определяет первый параметр, идущий  в  командной

строке после действия. LABEL, PROMPT и VALUE являются  ха-

рактеристиками параметра, уточняющими определение парамет-

ра. LABEL определяет имя, по которому образ  обращается  к

параметру. PROMPT указывает строку-подсказку, которая  бу-


                          - 23 -

                      00152-01 92 09


дет выдана, если не задан  параметр  в  командной  строке.

VALUE использует характеристику REQUIRED для указания  то-

го, что параметр должен присутствовать в командной строке.



     4.2. Определение  изменений  синтаксиса   с   помощью

                  оператора DEFINE SYNTAX



     Оператор DEFINE SYNTAX определяет изменение синтакси-

са команды (синтаксис команды ранее  определен  оператором

DEFINE VERB, DEFINE TYPE или другим DEFINE SYNTAX).  Изме-

нение синтаксиса позволяет действию использовать различный

синтаксис в зависимости от  параметров,  квалификаторов  и

ключевых слов, присутствующих в командной строке.

     Для   указания    изменения    синтаксиса    оператор

DEFINE VERB, который определяет об'ект (первичный оператор

DEFINE),       должен       включать        характеристику

SYNTAX=имя_синтаксиса, задающую альтернативный  синтаксис.

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

DEFINE. Допускается, например, определение команды, в  ко-

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

ленного квалификатора. Если задан квалификатор, то синтак-

сис, определенный в следующем операторе DEFINE, применяет-

ся в командной строке.

     Формат оператора DEFINE SYNTAX:

     DEFINE SYNTAX имя_синтаксиса

            [характеристика_действия[,...]]

где  имя_синтаксиса - имя определения альтернативного син-

таксиса;

     Характеристика_действия содержит  дополнительную  ин-

формацию о синтаксисе. В операторе DEFINE SYNTAX  допуска-


                          - 24 -

                      00152-01 92 09


ются  такие  же  характеристики,   что   и   в   операторе

DEFINE VERB, только с одним исключением: в нем нельзя  ис-

пользовать характеристику действия SYNONYM.

     Пример.

     DEFINE VERB ERASE

            IMAGE "DISK1:[MYDIR]ERASE"

            QUALIFIER SCREEN

            QUALIFIER LINE,SYNTAX=LINE

     DEFINE SYNTAX LINE

            IMAGE "DISK1:[MYDIR]LINE"

            QUALIFIER NUMBER,VALUE(REQUIRED)

     В примере оператор  DEFINE  VERB  указывает  действие

ERASE (очистка). Для этого действия допустимы два квалифи-

катора: /SCREEN и  /LINE.  Квалификатор  /LINE  использует

альтернативный   синтаксис,    заданный    характеристикой

SYNTAX=LINE. Если издать команду ERASE/LINE, то  определе-

ния в операторе DEFINE SYNTAX LINE отвергают определения в

операторе DEFINE VERB ERASE. Однако, если  издана  команда

ERASE/SCREEN или не указаны какие-либо  квалификаторы,  то

определения в операторе DEFINE VERB ERASE имеют силу.

     В операторе DEFINE  SYNTAX  определен  альтернативный

синтаксис под именем LINE. По команде ERASE/LINE вызывает-

ся образ DISK1:[MYDIR]LINE.EXE. В новом синтаксисе  допус-

кается квалификатор /NUMBER, требующий указания значения.



     4.3. Определение значений  параметров, квалификаторов

                        и ключевых слов



     Для указания того,  что  параметр,  квалификатор  или

ключевое слово требует значения, используется  характерис-


                          - 25 -

                      00152-01 92 09


тика VALUE. При ее использовании дополнительно определяет-

ся тип значения в характеристике TYPE.

     По характеристике TYPE задается значение  встроенного

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

значением будет ключевое слово,  определяемое  пользовате-

лем.

     Если в характеристике VALUE не указан  тип  значения,

то интерпретатор команд  обрабатывает  значение  следующим

образом:

     1) если значение не заключено в кавычки, то интерпре-

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

щие пробелы и знаки табуляции до одного пробела;

     2) если значение заключено в кавычки, то  интерпрета-

тор удаляет кавычки, оставляет буквы без  изменения  и  не

убирает интервал табуляции и пробелы. Для включения в сос-

тав строки, ограниченной кавычками, подстроки,  необходимо

ее заключить в двойные кавычки ("").



     4.3.1. Встроенные типы



     В языке определения команд имеются встроенные типы:

     1) $ACL - значение является списком управления досту-

пом;

     2) $DATETIME - значение является абсолютным значением

времени или комбинацией абсолютного и дельта-времени.  Ин-

терпретатор преобразует значения времени и ключевые  слова

для значений времени (как, например, TODAY) в формат абсо-

лютного времени. Если в значении опущено  любое  из  полей

даты, то интерпретатор подставляет  текущую дату.  Если  в




                          - 26 -

                      00152-01 92 09


значении опущено любое из полей времени суток,  то  интер-

претатор заполняет эти поля нулями;

     3) $DELTATIME -  значение  является  дельта-временем.

если в значении опущено любое из полей времени  суток,  то

интерпретатор заполняет эти поля нулями;

     4) $FILE - значение является спецификацией файла;

     5) $NUMBER - значение является целым  числом.  В  ко-

мандной строке допускаются  десятичные,  восьмеричные  или

шестнадцатеричные числа. Интерпретатор преобразует все чи-

сла в десятичные;

     6) $QUOTED_STRING - при обработке значения  интерпре-

татор не удаляет из строки кавычки;

     7)  $REST_OF_LINE  -  значением  является  содержимое

строки до ее ограничителя.

     Пример.

     DEFINE VERB PLAY

            IMAGE "DISK1:[MYDIR]PLAY"

            PARAMETER P1,VALUE(TYPE=$FILE)

     В примере значением параметра  является  спецификация

файла.



     4.3.2. Определение ключевых слов



     Оператор DEFINE TYPE определяет ключевые слова, кото-

рые используются в качестве значений параметров,  квалифи-

каторов и других ключевых слов. Ключевые  слова,  перечис-

ленные в операторе DEFINE TYPE, принимают только те значе-

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

квалификатором или ключевым словом.

     Для указания того, что значением параметра,  квалифи-


                          - 27 -

                      00152-01 92 09


катора или ключевого слова является  ключевое  слово,  ис-

пользуется характеристика VALUE(TYPE=имя_типа).  Имя  типа

относится к оператору DEFINE TYPE, определяющему  допусти-

мые ключевые слова. С характеристики  VALUE(TYPE=имя_типа)

начинается путь ключевого слова (подпункт 4.4.1.2).

     Формат оператора DEFINE TYPE:

     DEFINE TYPE имя_типа[характеристика_типа[,...]]

где  имя_типа - имя списка ключевых слов;

     Характеристика_типа  указывает  допустимые   ключевые

слова и описывает каждое из них.

     Используемая в операторе DEFINE  TYPE  характеристика

типа KEYWORD определяет ключевое слово, допустимое  в  ка-

честве значения  параметра,  квалификатора  или  ключевого

слова, которое ссылается на список ключевых слов.

     Пример.

     DEFINE VERB SKIM

            IMAGE "USER:[TOOLS]SKIM"

            QUALIFIER SPEED,VALUE(TYPE=SPEED_KEYWORDS)

     DEFINE TYPE SPEED_KEYWORDS

            KEYWORD FAST,DEFAULT

            KEYWORD SLOW

     В примере оператор  DEFINE  VERB  указывает  действие

SKIM  (пролистать),  для  которого  допустим  квалификатор

/SPEED. Действие SKIM вызывает образ [TOOLS]SKIM.EXE и ис-

пользует квалификатор /SPEED.

     Характеристика VALUE указывает, что для квалификатора

/SPEED допустим список ключевых слов. Эти  ключевые  слова

определены в операторе DEFINE TYPE SPEED_KEYWORDS.

     В операторе DEFINE TYPE перечислены  ключевые  слова,

используемые  с  квалификатором   /SPEED;   можно   задать


                          - 28 -

                      00152-01 92 09


SKIM/SPEED=FAST, либо SKIM/SPEED=SLOW.  Если  квалификатор

/SPEED задан без значения, то его значением  по  умолчанию

будет FAST.



     4.4. Описание характеристики действия DISALLOW



     В операторе DEFINE может  быть  указано,  что  об'ект

(параметр, квалификатор или ключевое слово) или комбинация

об'ектов в некоторых случаях  не  допускаются.  Запрещение

использования об'екта или комбинации об'ектов  делается  с

помощью характеристики действия DISALLOW.

     Формат характеристики действия DISALLOW:

     DISALLOW выражение

где  выражение указывает об'ект командной строки или груп-

пу об'ектов, связанных операторами. При разборе  командной

строки проверяется каждый об'ект выражения, чтобы  устано-

вить, присутствует ли об'ект (истина) или нет (ложь). Если

об'ект присутствует по умолчанию, но явно не задан  в  ко-

мандной строке, то он считается отсутствующим (ложь).

     После определения наличия об'ектов  выполняются  ука-

занные операторы. Если результатом является истина, то ко-

мандная строка отвергается. Если же результат -  ложь,  то

командная строка принимается.

     Например, в определении команды может  быть  оператор

DEFINE VERB, определяющий действие SPORTS с тремя квалифи-

каторами: /TENNIS, /BOWLING, /BASEBALL. Можно сделать  эти

квалификаторы взаимоисключающими.

     В примере 1 показано, как используется характеристика

действия DISALLOW для задания такого ограничения  в  файле

определения команд.


                          - 29 -

                      00152-01 92 09


     Примеры:

     1. DEFINE VERB SPORTS

               IMAGE "DISK3:[WILSON]SPORTS"

               QUALIFIER TENNIS

               QUALIFIER BOWLING

               QUALIFIER BASEBALL

               DISALLOW ANY2(TENNIS,BOWLING,BASEBALL)

     Характеристика действия DISALLOW указывает,  что  ко-

мандная строка недопустима, если в  ней  содержится  более

одного из квалификаторов /TENNIS, /BOWLING или /BASEBALL.

     При указании какого-нибудь об'екта в выражении харак-

тиристики DISALLOW поиск происходит в  пределах  всей  ко-

мандной строки. Поэтому при обработке  DISALLOW  локальные

квалификаторы рассматриваются как глобальные.

     В примере 2 показан глобальный поиск.

     2. DEFINE VERB TEST

               IMAGE "DISK3:[WORK]TEST"

               PARAMETER P1

               PARAMETER P2

               QUALIFIER QUAL1

               QUALIFIER QUAL2,PLACEMENT=LOCAL

               QUALIFIER QUAL3,PLACEMENT=LOCAL

               DISALLOW  P1 AND QUAL1

               DISALLOW  QUAL2 AND QUAL3

     Таким образом, будут отвергнуты командные строки:

     $ TEST P1 P2/QUAL1

     $ TEST P1/QUAL2 P2/QUAL3

     Глобальный поиск для локальных  квалификаторов  отно-

сится только к DISALLOW, но не к общему разбору команды.




                          - 30 -

                      00152-01 92 09


     4.4.1. Указание об'ектов в выражении



     При указании об'ектов в выражении определяется, какие

об'екты запрещаются. Об'ект задается одним из способов:

     1) задание по имени или метке параметра, квалификато-

ра или ключевого слова;

     2) использование пути ключевого слова;

     3) использование пути определения.



     4.4.1.1. Имена и метки



     На параметр или квалификатор ссылаются по  имени  или

метке, если об'ект задан в текущем определении. На  ключе-

вое слово можно ссылаться по имени  или  метке,  если  это

ключевое слово находится на пути ключевого слова,  который

начинается с текущего определения, и имя  или  метка  уни-

кальны. Если об'екту присвоена метка с  помощью  ключевого

слова LABEL=имя_метки, то на об'ект ссылаются по метке.  В

противном случае, ссылаются по имени.

     Пример.

     DEFINE VERB COLOR

            IMAGE "WORK:[JUDY]COLOR"

            QUALIFIER RED

            QUALIFIER BLUE

            QUALIFIER GREEN,VALUE(TYPE=GREEN_AMOUNT)

            DISALLOW  RED AND ALL

            DISALLOW  BLUE AND ALL

     DEFINE TYPE GREEN_AMOUNT

            KEYWORD ALL

            KEYWORD HALF


                          - 31 -

                      00152-01 92 09


     В примере запрещаются комбинации об'ектов. В характе-

ристике действия DISALLOW используются имена  квалификато-

ров RED и BLUE, поскольку оба имени используются в текущем

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

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

чинается в текущем определении (путь начинается квалифика-

тором TYPE=GREEN_AMOUNT), а имя ключевого слова уникально.

     Согласно запретам DISALLOW будут отвергнуты командные

строки:

     $ COLOR/RED/GREEN=ALL

     $ COLOR/BLUE/GREEN=ALL

     Для ссылки на параметр или  квалификатор  из  другого

определения или для ссылки на ключевое слово, чей путь на-

чинается в другом операторе DEFINE, используется путь  оп-

ределения.



     4.4.1.2. Путь ключевого слова



     Путь ключевого  слова  является  способом  уникальной

идентификации ключевого слова. На ключевое слово  допуска-

ется ссылка этим способом, если ключевое  слово  находится

на пути, который начинается в текущем определении,  а  имя

или метка ключевого слова  не  уникальны.  Путь  ключевого

слова используется и тогда, когда такое же ключевое  слово

используется с несколькими параметрами или  квалификатора-

ми.

     Путь ключевого слова содержит список имен  или  меток

об'ектов, разделенных точками. Первое имя  пути  ключевого






                          - 32 -

                      00152-01 92 09


слова есть имя (или метка) первого об'екта пути, ссылающе-

гося на определение типа ключевого слова.  Путь  ключевого

слова может содержать до восьми имен (определение  первого

параметра или квалификатора плюс семь определений ключевых

слов в операторах DEFINE TYPE).

     Если ключевому слову присвоено имя метки, то это  имя

метки используется в пути  ключевого  слова.  В  противном

случае, используется имя ключевого слова.  Можно  опустить

имена с начала пути ключевого слова, если в них нет  необ-

ходимости для ссылки на ключевое слово. Однако, необходимо

включить столько имен, чтобы однозначно определить  ключе-

вое слово.

     Командная строка, приведенная в примере 1,  показыва-

ет, как для однозначной идентификации  ключевых  слов  ис-

пользуется путь ключевого слова. В этой  командной  строке

используются одни и те же  ключевые  слова  с  несколькими

квалификаторами (в файле определения команд это выражается

в том, что два квалификатора ссылаются на один  и  тот  же

оператор DEFINE TYPE).

     Примеры:

     1. $ NEWCOMMAND/QUAL1=(START=5,END=10) -

        $_ /QUAL2=(START=2,END=5)

     Путь ключевого слова QUAL1.START определяет  ключевое

слово START, используемое с QUAL1;  путь  ключевого  слова

QUAL2.START определяет ключевое слово START,  используемое

с QUAL2. Само имя START является неоднозначной ссылкой.

     Для   запрещения   использования   ключевого    слова

QUAL1.START при наличии третьего квалификатора  (QUAL3)  в






                          - 33 -

                      00152-01 92 09


файле определения команд задается строка:

     DISALLOW QUAL1.START AND QUAL3

     Хотя   при   наличии   QUAL3   нельзя    использовать

QUAL1.START, тем не менее при  наличии  QUAL3  допускается

использование QUAL2.START.

     В примере 2 ключевое слово (ALL)  содержится  в  двух

операторах DEFINE TYPE.

     2. DEFINE VERB COLOR

               IMAGE "WORK:[JUDY]COLOR"

               QUALIFIER RED,VALUE(TYPE=RED_AMOUNT)

               QUALIFIER GREEN,VALUE(TYPE=GREEN_AMOUNT)

               DISALLOW RED AND GREEN.ALL

               DISALLOW GREEN AND RED.ALL

        DEFINE TYPE RED_AMOUNT

               KEYWORD ALL

               KEYWORD MIXED

        DEFINE TYPE GREEN_AMOUNT

               KEYWORD ALL

               KEYWORD HALF

     В примере 2 следует  использовать  путь  RED.ALL  для

ссылки на ключевое слово ALL, когда оно используется в оп-

ределении типа RED_AMOUNT;  необходимо  использовать  путь

GREEN.ALL для ссылки на ключевое слово ALL, когда оно  ис-

пользуется в определении типа GREEN_AMOUNT.



     4.4.1.3. Путь определения



     Путь определения используется для ссылки  на  об'ект,

который определен в другом операторе DEFINE. Путь  опреде-

ления следует применять в  определении  синтаксиса,  когда


                          - 34 -

                      00152-01 92 09


параметры или квалификаторы передаются  из  первичного оп-

ределения, но добавляются новые запреты.

     Формат пути определения:

     <имя_определения>спец_об'екта

где  имя_определения - имя  оператора  DEFINE,  в  котором

об'ект определен или начинается путь ключевого слова.  Уг-

ловые скобки требуются по синтаксису;

     Спец_об'екта - имя об'екта, метка или путь  ключевого

слова.

     Примеры:

     1. DISALLOW <SKIP>FIRST

     В примере 1  характеристика  DISALLOW  запрещает  ко-

мандную строку при наличии об'екта FIRST (который  опреде-

лен в операторе DEFINE с именем SKIP).

     В примере 2 используется путь ключевого слова и  путь

определения.

     2. DISALLOW <FILE>BILLS.ELECT AND GAS

     В примере 2  характеристика  DISALLOW  запрещает  ко-

мандную строку при наличии об'екта, описанного путем  клю-

чевого слова BILLS.ELECT (который начинается  в  операторе

DEFINE с именем FILE).

     Программа CDU не проверяет  путь  определения,  чтобы

установить, что путь ссылается на об'ект, который допуска-

ется в данном контексте. Если путь определения использован

для указания об'екта, который не допускается  в  отдельном

контексте, то результат непредсказуем. В примере 3 показан

путь определения, являющийся  недопустимым  в  определении

синтаксиса, в котором он использован.






                          - 35 -

                      00152-01 92 09


     3. DEFINE VERB FILE

               QUALIFIER BILLS,SYNTAX=BILL_TYPES

               QUALIFIER RECEIPTS

        DEFINE VERB READ

               QUALIFIER NOTES

        DEFINE SYNTAX BILL_TYPES

               DISALLOW <READ>NOTES

     Несмотря на то, что характеристика DISALLOW правильно

идентифицирует об'ект в  файле  определения  команд,  этот

об'ект недопустим в операторе DEFINE SYNTAX.  Но  характе-

ристика DISALLOW <FILE>RECEIPTS будет приемлема в операто-

ре DEFINE SYNTAX. Оператор DEFINE SYNTAX получает квалифи-

катор RECEIPTS из первичного оператора DEFINE (FILE), пос-

кольку никаких квалификаторов не задано. Поэтому  квалифи-

катор RECEIPTS можно запретить.



     4.4.2. Операторы, используемые в выражении



     Если в выражении есть операторы, то операторы  выпол-

няются после определения истинности об'ектов.  Присутству-

ющие об'екты - истинны, отсутствующие -  ложны.  Если  ре-

зультат выражения - истина, данный синтаксис  запрещается.

если результат выражения - ложь, синтаксис допускается.

     Операторы с приоритетом 1 выполняются первыми. Опера-

торы с одинаковым приоритетом выполняются слева направо  в

порядке, каком они указаны в выражении в табл. 1.




                          - 36 -

                      00152-01 92 09


                                                Таблица 1

           Операторы, используемые в выражении

----------------------------------------------------------

 Оператор          ! Приоритет !  Результат выполнения

----------------------------------------------------------

ANY2(Oб'ект[,...]) !     1     !   Результат - истина, ес-

                   !           ! ли присутствуют  два  или

                   !           ! более из указанных об'ек-

                   !           ! тов

NEG об'ект         !     1     !   Результат - истина, ес-

                   !           ! ли задан об'ект в форме с

                   !           ! отрицанием

NOT об'ект         !     1     !   Результат - истина, ес-

                   !           ! ли об'ект отсутствует или

                   !           ! присутствует по умолчанию

Выражение AND      !     2     !   Результат - истина, ес-

         выражение !           ! ли оба выражения истинны

Выражение OR       !     3     !   Результат - истина, ес-

         выражение !           ! ли истинно хотя  бы  одно

                   !           ! из выражений



     Примеры:

     1. DISALLOW TERMINAL AND PRINTER

     В примере 1 оператор AND запрещает командную  строку,

если в ней присутствуют оба об'екта (TERMINAL и PRINTER).

     Порядок выполнения операторов изменяется  использова-

нием круглых скобок; операторы внутри скобок выполняются в

первую очередь.


                          - 37 -

                      00152-01 92 09


     2. DISALLOW FAST AND (SLOW OR STILL)

     В примере 2 оператор OR выполняется перед  оператором

AND. Поэтому, если результат SLOW OR STILL -  истина  и  в

командной строке присутствует FAST, строка запрещается.



     4.5. Информация,  идентифицирующая  об'ектные  модули



     Если файл определения команд используется для  созда-

ния об'ектного модуля по команде  SET  COMMAND/OBJECT,  то

следует указать операторы MODULE и IDENT  для  обеспечения

идентифицирующей информацией. Созданный  об'ектный  модуль

содержит таблицу команд, которая может быть скомпонована с

программой пользователя.

     Оператор MODULE присваивает символическое имя об'ект-

ному модулю, содержащему таблицу команд.

     Формат оператора MODULE:

     MODULE имя_модуля

где  имя_модуля - символическое имя об'ектного модуля.

     Оператор IDENT задает дополнительную  информацию  для

идентификации модуля.

     Формат оператора IDENT:

     IDENT строка_идент

где  строка_идент - информация о модуле.

     Пример.

     MODULE TABLE

     IDENT "UPDATED 4/15/84"

     DEFINE VERB SAVE

            ROUTINE SAVE_ROUT

     DEFINE VERB GET

            ROUTINE GET_ROUT


                          - 38 -

                      00152-01 92 09


     Оператор MODULE присваивает имя TABLE таблице,  полу-

ченной при создании об'ектного модуля  с  помощью  команды

SET COMMAND/OBJECT.

     Оператор IDENT задает дополнительную информацию о мо-

дуле. В примере оператор IDENT  указывает  дату  последней

редакции файла определения команд.

     Операторы DEFINE VERB определяют действия, используе-

мые в программе пользователя, которая будет скомпонована с

об'ектным модулем, содержащим таблицу команд. Каждое  дей-

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




                          - 39 -

                      00152-01 92 09


          5. Обработка файла определения команд



     Файл определения команд должен быть странслирован для

создания выполняемой таблицы команд до  того, как  команды

этой таблицы будут разобраны и выполнены.  При  выполнении

трансляции для вызова программы CDU  используется  команда

SET COMMAND.

     Режимы работы команды SET COMMAND:

     1) SET COMMAND/DELETE удаляет определения  команд  из

таблицы команд;

     2) SET COMMAND/OBJECT  создает  об'ектный  модуль  из

файла определения команд;

     3) SET COMMAND/REPLACE добавляет или заменяет опреде-

ления в таблице команд, используя определения из файла оп-

ределения команд.

     Квалификаторы /DELETE,  /OBJECT  и  /REPLACE  взаимно

исключают друг друга, поэтому в командной строке использу-

ется только один из режимов  команды  SET  COMMAND.  Кроме

квалификаторов, задающих режимы, в команде SET COMMAND до-

пускаются квалификаторы:

     1) /[NO]LISTING управляет созданием файла листинга;

     2) /[NO]OUTPUT определяет, куда будет записана  изме-

ненная таблица команд;

     3) /TABLE задает таблицу команд, которая будет  моди-

фицирована.



     5.1. Добавление определений команд в  таблицу  команд



     Добавление или замена действий в таблице команд,  ко-

торая будет изменена, осуществляется с помощью  квалифика-


                          - 40 -

                      00152-01 92 09


тора /REPLACE. По умолчанию команда SET COMMAND использует

квалификатор /REPLACE при добавлении команд в таблицу  ко-

манд пользовательского процесса и передает в пользователь-

ский процесс измененную таблицу команд.

     В примере показано, как добавить новую команду SKIP в

таблицу команд пользовательского процесса.

     Пример.

     $ SET COMMAND SKIP

     В примере команда SET COMMAND  добавляет  определения

из файла определения  команд  SKIP.CLD  в  таблицу  команд

пользовательского процесса.  Измененная  таблица  заменяет

исходную таблицу команд пользовательского процесса. Квали-

фикатор /REPLACE действует по умолчанию, поэтому нет необ-

ходимости указывать его явно в командной строке. При моди-

фикации таблицы,  отличной  от  таблицы  пользовательского

процесса, используется квалификатор  /TABLE  для  указания

вводной (исходной) таблицы; если необходимо записать моди-

фицированную таблицу в файл (вместо того,  чтобы  передать

ее в пользовательский процесс), используется  квалификатор

/OUTPUT.



     5.2. Удаление определений команд



     Для удаления команды из  таблицы  команд  применяется

квалификатор /DELETE. По умолчанию  удаляются  команды  из

таблицы команд пользовательского процесса. В примере пока-

зано, как удалить команду SKIP из таблицы команд пользова-

тельского процесса.

     Пример.

     $ SET COMMAND/DELETE=SKIP


                          - 41 -

                      00152-01 92 09


     5.3. Создание об'ектного модуля



     Создание об'ектного модуля из файла  определения  ко-

манд осуществляется с помощью квалификатора /OBJECT.

     Пример.

     $ SET COMMAND/OBJECT NEWCOMS

     Команда SET COMMAND/OBJECT создает об'ектный  модуль,

содержащий таблицу команд с определениями действий, задан-

ными в NEWCOMS.CLD. Этот модуль может быть  скомпонован  с

программой, которая разбирает команды, используя скомпоно-

ванный с ней модуль таблицы команд.



     5.4. Создание новой таблицы команд



     Квалификатор /OBJECT  не  используется  для  создания

об'ектного модуля из файла определения команд,  в  котором

имеется характеристика IMAGE. Однако, можно создать пустую

таблицу команд, в которую затем добавляются действия,  вы-

зывающие соответствующие образы.

     Для создания пустой таблицы команд  формируется  файл

определения команд, который использует оператор MODULE для

определения имени модуля и, если необходимо,  используется

оператор  IDENT.   Например,   файл   определения   команд

TEST_TABLE.CLD имеет вид:

     MODULE TEST_TABLE

     IDENT "NEW COMMAND TABLE"

     Создается об'ектный модуль из файла TEST_TABLE.CLD  и

затем он компонуется для создания разделяемого образа:

     $ SET COMMAND/OBJECT TEST_TABLE.CLD

     $ LINK/SHARE TEST_TABLE


                          - 42 -

                      00152-01 92 09


     Создается файл определения команд,  чтобы  определить

действия для вызова соответствующих образов.

     Файл определения команд  VERBS.CLD,  например,  имеет

вид:

     DEFINE VERB PASS

            IMAGE "DISK4:[ROSEN]PASS"

     DEFINE VERB THROW

            IMAGE "DISK4:[ROSEN]THROW"

     .

     .

     .

     Новые команды из файла VERBS.CLD добавляются в пустую

таблицу команд в файле TEST_TABLE.EXE  и  модифицированная

таблица записывается обратно в  файл  TEST_TABLE.EXE.  Ре-

зультирующий файл будет  иметь  номер  версии  на  единицу

больше, чем номер версии исходной таблицы.

     $ SET COMMAND/TABLE=TEST_TABLE.EXE -

     $_ /OUTPUT=TEST_TABLE.EXE VERBS

     По квалификаторам /TABLE и /OUTPUT указываются  ввод-

ной и выводной файлы таблицы команд. Чтобы указать  вывод-

ной файл, используется квалификатор /OUTPUT. Если квалифи-

катор /OUTPUT не указан, измененная таблица  команд  будет

записана в таблицу команд пользовательского процесса.




                          - 43 -

                      00152-01 92 09


       6. Использование подпрограмм языка команд



     Программе пользователя, вызываемой командой,  которая

добавлена в таблицу команд пользовательского процесса (или

в системную таблицу), необходима информация об этой коман-

де. Для получения информации программой пользователя вызы-

ваются подпрограммы интерфейса языка команд:

     1) CLI$PRESENT, которая определяет наличие об'екта  в

командной строке;

     2) CLI$GET_VALUE, которая выбирает значение следующе-

го об'екта в командной строке.

     Если программа использует собственную таблицу  команд

(то есть, таблица команд скомпонована  с  программой),  то

программа может вызвать подпрограммы грамматического  раз-

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

подпрограмму для выполнения команды. После этого вызывают-

ся подпрограммы CLI$PRESENT и CLI$GET_VALUE для  получения

информации о командной строке.

     Имеются две подпрограммы разбора команд:

     1) CLI$DCL_PARSE, которая разбирает командную строку;

     2) CLI$DISPATCH, которая вызывает подпрограмму, соот-

ветствующую последнему разобранному действию.




                          - 44 -

                      00152-01 92 09


         7. Операторы файла определения команд



     7.1. Оператор DEFINE SYNTAX



     Оператор DEFINE SYNTAX описывает изменение ранее  за-

данного   синтаксиса   команды    (заданного    оператором

DEFINE VERB,   DEFINE TYPE   или   предыдущим   оператором

DEFINE SYNTAX). Изменение синтаксиса  позволяет  использо-

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

фикаторов  и  ключевых слов,  присутствующих  в  командной

строке.

     Оператор DEFINE,  который  обращается  к  изменяемому

синтаксису, называется первичным оператором DEFINE. Oпера-

тор DEFINE SYNTAX, вводящий  новый  синтаксис,  называется

вторичным оператором DEFINE.

     При разборе командной строки ее компоненты просматри-

ваются слева направо. Строка разбирается согласно текущему

определению, пока не встретится об'ект, указывающий  изме-

нение синтаксиса. Остальные об'екты разбираются уже по но-

вому синтаксису. Интерпретатор команд не  повторяет  прос-

мотр об'ектов, идущих в строке до  того  об'екта,  который

указывает изменение синтаксиса.

     Оператор DEFINE SYNTAX изменяет  текущее  определение

команды, если об'ект указывает изменение  синтаксиса.  Ин-

терпретатор сохраняет определение команды, существующее  в

момент окончания разбора всех об'ектов  командной  строки,

как показано в табл. 2.

     На основании запретов, заданных в  этом  определении,

интерпретатор определяет, нет ли недопустимых об'ектов,  и

вызывает образ или программу, указанные в сохраненном  оп-


                          - 45 -

                      00152-01 92 09


ределении, и использует  это  определение  для  выполнения

подпрограмм CLI$PRESENT и CLI$GET_VALUE.



                                                Таблица 2

      Изменение первичного оператора DEFINE с помощью

                  оператора DEFINE SYNTAX

----------------------------------------------------------

DEFINE SYNTAX задает !          Результат

----------------------------------------------------------

    Образ            !   Этот образ заменяет образ, задан-

                     ! ный  в  первичном операторе DEFINE.

                     ! после  разбора командной строки ин-

                     ! терпретатор вызывает новый образ

  Программу          !   Эта программа заменяет программу,

                     ! заданную  в   первичном   операторе

                     ! DEFINE. При обращении к подпрограм-

                     ! ме CLI$DISPATCH интерпретатор вызы-

                     ! вает новую программу

 Один или несколько  !   Эти запреты используются при раз-

 запретов (DISALLOW) ! боре команды; запреты, введенные  в

                     ! первичном операторе DEFINE, игнори-

                     ! руются.  Это  относится   ко   всем

                     ! об'ектам команды, которые не проти-

                     ! воречат новому определению  синтак-

                     ! сиса

 Отсутствие запретов !   При разборе команды  используются

                     ! запреты  из  первичного   оператора

                     ! DEFINE


                          - 46 -

                      00152-01 92 09


                                     Продолжение табл. 2

----------------------------------------------------------

DEFINE SYNTAX задает !             Результат

----------------------------------------------------------

 Характеристику      !   Характеристику NODISALLOWS нельзя

  NODISALLOWS        ! задавать вне зависимости от опреде-

                     ! лений в первичном операторе DEFINE

 Один или несколько  !   Параметры, которые уже разобраны,

     параметров      ! не разбираются вторично  по  новому

                     ! синтаксису. Однако, параметры,  за-

                     ! данные после  об'екта, указывающего

                     ! новый синтаксис, разбираются по но-

                     ! вым определениям. Новые определения

                     ! параметров используются интерпрета-

                     ! тором при обработке  подпрограммами

                     ! CLI$PRESENT и CLI$GET_VALUE. В опе-

                     ! раторе DEFINE SYNTAX P1 по-прежнему

                     ! относится к первому параметру в ко-

                     ! мандной строке. При определении па-

                     ! раметров   дополнительно   к   тем,

                     ! которые определены в первичном опе-

                     ! раторе DEFINE, следует использовать

                     ! характеристику PARAMETER для  пере-

                     ! определения исходных параметров  во

                     ! вторичном операторе DEFINE. Необхо-

                     ! димо определить эти параметры  явно

                     ! так же, как в  первичном  операторе

                     ! DEFINE, а  затем  определить  новые

                     ! параметры




                          - 47 -

                      00152-01 92 09


                                      Продолжение табл. 2

----------------------------------------------------------

DEFINE SYNTAX задает !             Результат

----------------------------------------------------------

 Отсутствие          !   При  разборе   остатка  командной

 параметров          ! строки интерпретатор использует оп-

                     ! ределения параметров  из первичного

                     ! оператора DEFINE.  Эти же определе-

                     ! ния  параметров используются интер-

                     ! претатором  при  обработке подпрог-

                     ! раммами CLI$PRESENT и CLI$GET_VALUE

 Характеристику      !   Разобранные  параметры   не  раз-

 NOPARAMETERS        ! бираются  вторично по новым опреде-

                     ! лениям.  Однако, при разборе об'ек-

                     ! тов,  расположенных  после об'екта,

                     ! указывающего новый синтаксис, пара-

                     ! метры не допускаются.

                     ! Определение NOPARAMETERS  использу-

                     ! ется  интерпретатором при обработке

                     ! подпрограммами    CLI$PRESENT     и

                     ! CLI$GET_VALUE

 Один или несколько  !   Разобранные  квалификаторы  игно-

  квалификаторов     ! рируются. Если  об'ект, указывающий

                     ! изменение синтаксиса, является ква-

                     ! лификатором, он также игнорируется.

                     ! квалификаторы, идущие  в  командной

                     ! строке после  изменения синтаксиса,

                     ! разбираются по  новым определениям.

                     ! новые   определения  квалификаторов

                     ! используются  интерпретатором   при


                          - 48 -

                      00152-01 92 09


                                      Продолжение табл. 2

----------------------------------------------------------

DEFINE SYNTAX задает !               Результат

----------------------------------------------------------

                     ! обработке            подпрограммами

                     ! CLI$PRESENT    и     CLI$GET_VALUE.

                     ! интерпретатор выдает  предупреждаю-

                     ! щее  сообщение,  если  в  командной

                     ! строке есть квалификаторы,  которые

                     ! игнорируются,  благодаря  изменению

                     ! синтаксиса

 Отсутствие          !   При  разборе   остатка  командной

 квалификаторов      ! строки   используются   определения

                     ! квалификаторов  из  первичного опе-

                     ! ратора DEFINE. Эти определения ква-

                     ! лификаторов  используются при обра-

                     ! ботке  подпрограммами CLI$PRESENT и

                     ! CLI$GET_VALUE

 Характеристику      !   Разобранные квалификаторы игнори-

 NOQUALIFIERS        ! руются.  При разборе об'ектов, рас-

                     ! положенных после об'екта, указываю-

                     ! щего новый синтаксис, квалификаторы

                     ! не допускаются.  Интерпретатор  ис-

                     ! пользует  определение  NOQUALIFIERS

                     ! при    обработке     подпрограммами

                     ! CLI$PRESENT и CLI$GET_VALUE



     Формат оператора DEFINE SYNTAX:

     DEFINE SYNTAX имя_синтаксиса

            [характеристика_действия[,...]]


                          - 49 -

                      00152-01 92 09


где  имя_синтаксиса - имя изменения синтаксиса. Имя обяза-

тельно и должно следовать  непосредственно  за  оператором

DEFINE SYNTAX;

     Характеристика_действия определяет атрибуты командной

строки.

     Характеристики действия оператора DEFINE SYNTAX:

     1) DISALLOW, NODISALLOWS;

     2) IMAGE;

     3) PARAMETER, NOPARAMETERS;

     4) QUALIFIER, NOQUALIFIERS;

     5) ROUTINE.



     Характеристика действия DISALLOW запрещает  командную

строку, если для нее результат выражения - истина.  Харак-

теристика действия NODISALLOWS означает, что нет  запретов

на об'екты или комбинации об'ектов.

     Формат характеристики действия DISALLOW:

     DISALLOW выражение

где  выражение - об'ект или комбинация об'ектов, связанных

операторами. Каждый об'ект в выражении проверяется на  на-

личие (истина) или отсутствие (ложь) в  командной  строке.

если об'ект присутствует по умолчанию, но явно  не  задан,

то он считается ложным.

     После вычисления каждого об'екта  выполняются  опера-

ции, указанные в операторах. Если результат -  истина,  то

командная строка запрещается. Если результат  -  ложь,  то

командная строка принимается.

     Об'екты в выражении задаются по имени  или  метке,  с

использованием пути ключевого слова или  пути определения.

можно задать операторы AND, ANY2, NEG, NOT, OR.


                          - 50 -

                      00152-01 92 09


     Характеристика действия IMAGE именует образ,  который

вызывается по новому синтаксису.

     Формат характеристики действия IMAGE:

     IMAGE имя_образа

где  имя_образа - спецификация файла образа, который вызы-

вается интерпретатором при получении команды. Если  специ-

фикация файла задана не полностью, то  интерпретатор  под-

ставляет спецификацию каталога по умолчанию SYS$SYSTEM:  и

тип файла по умолчанию  - EXE. Имя образа задается в  виде

символьной строки длиной не более 63 символов.

     Если характеристика действия IMAGE не  задана  и  ис-

пользована команда SET COMMAND/REPLACE для обработки опре-

деления команды, то CDU использует имя образа из оператора

DEFINE, KOTOрый ссылается на изменение синтаксиса. Если  в

этом операторе DEFINE нет имени образа, то CDU  ищет,  нет

ли других операторов DEFINE, ссылающихся на данный  опера-

тор DEFINE. Поиск продолжается, пока не будет найдено  имя

образа, который необходимо вызвать. Если образ  не  задан,

то интерпретатор будет искать образ с именем файла, совпа-

дающим с именем действия, с именем устройства  SYS$SYSTEM:

и с типом файла  EXE.

     Характеристика действия PARAMETER позволяет  включить

параметры  в   состав   командной  строки.   В   операторе

DEFINE  SYNTAX  используется   до   восьми   характеристик

PARAMETER. Характеристика NOPARAMETERS указывает, что  па-

раметры запрещены.

     Формат характеристики действия PARAMETER:

     PARAMETER имя_параметра

               [характеристика_параметра[,...]]

где  имя_параметра - позиция параметра в командной строке.


                          - 51 -

                      00152-01 92 09


она имеет вид PN, N - номер позиции параметра. Позиция ну-

меруется последовательно от 1 до 8 и должна непосредствен-

но следовать за словом PARAMETER;

     Характеристика_параметра задает дополнительные харак-

теристики параметра.

     Характеристики параметра:

     1) DEFAULT;

     2) LABEL;

     3) PROMPT;

     4) VALUE.

     Характеристика параметра DEFAULT указывает, что  зна-

чением параметра по умолчанию является определенное  поль-

зователем ключевое слово. Эта  характеристика  применяется

только при одновременном задании характеристики VALUE, оз-

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

определенное пользователем ключевое слово.

     Для задания значения параметра по умолчанию,  которое

не является ключевым словом,  используется  характеристика

VALUE(DEFAULT=строка_умолчания).

     Характеристика параметра LABEL определяет  метку  для

ссылки на параметр.

     Формат характеристики параметра LABEL:

     LABEL=имя_метки

где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя параметра

(P1 - P8).

     Характеристика параметра PROMPT задает строку подска-

зки параметру, который отсутствует в командной строке. Ес-

ли параметр опущен, а строка подсказки не задана,  то  ин-

терпретатор использует в качестве строки подсказки имя па-


                          - 52 -

                      00152-01 92 09


раметра.

     Формат характеристики параметра PROMPT:

     PROMPT=строка_подсказки

где  строка_подсказки - символьная строка длиной не  более

31 символа.

     Если определено несколько параметров, из которых пер-

вый обязательный, остальные необязательные, а команда  за-

дана без каких-либо параметров, то интерпретатор  запраши-

вает первый (обязательный) параметр, пока не будет введено

его значение или отменена команда по CTRL/Z.

     После задания пользователем значения для P1 интерпре-

татор запрашивает значения остальных параметров,  несмотря

на то, что они необязательные. Если пользователь  на  под-

сказку введет CTRL/Z, то команда отменяется.

     Если пользователь нажмет возврат каретки без указания

значения, то команда выполняется. Если пользователь задает

значение, то интерпретатор запрашивает следующий  необяза-

тельный параметр.

     Характеристика параметра VALUE задает  дополнительные

характеристики параметра.

     Формат характеристики параметра VALUE:

     VALUE [(характеристика_значения_параметра[,...])]

где  характеристика_значения_параметра - одна или несколь-

ко характеристик значения параметра, приведенных в табл.3.

Если указано несколько характеристик  значения  параметра,

то они заключаются в круглые скобки и отделяются  друг  от

друга запятыми.




                          - 53 -

                      00152-01 92 09


                                                Таблица 3

        Характеристики значения параметра VALUE

----------------------------------------------------------

Характеристика  !               Об'яснение

и ее формат     !

----------------------------------------------------------

CONCATENATE     !   Указывает, что параметр связывается  с

                ! другим параметром при помощи  знака плюс

DEFAULT=        !   задает  значение параметра  по умолча-

строка_умолчания! нию.  Характеристики  DEFAULT и REQUIRED

                ! являются взаимоисключающими. Строка умо-

                ! лчания задается в виде символьной строки

                ! длиной не более 95 символов.

                ! если  значением  по  умолчанию  является

                ! ключевое слово, то данную характеристику

                ! использовать не следует;  ключевые слова

                ! по  умолчанию   задаются   в   операторе

                ! DEFINE TYPE,  используя   характеристику

                ! параметра DEFAULT

LIST            !   Указывает, что задается список параме-

                ! тров, отделенных  друг от друга запятыми

                ! или знаками плюс

NOCONCATENATE   !   Указывает, что параметр не может  быть

                ! соединен с другим параметром знаком плюс

REQUIRED        !   Указывает,  что  параметр - обязатель-

                ! ный.  Все  обязательные  параметры  дол-

                ! жны предшествовать необязательным. Вмес-

                ! те с  характеристикой  REQUIRED  следует

                ! указать строку подсказки. Характеристики

                ! REQUIRED и DEFAULT взаимоисключающие


                          - 54 -

                      00152-01 92 09


                                      Продолжение табл. 3

----------------------------------------------------------

Характеристика  !               Об'яснение

и ее формат     !

----------------------------------------------------------

TYPE=имя_типа   !   Дается либо имя встроенного типа, либо

                ! имя оператора DEFINE TYPE, в котором оп-

                ! ределен список ключевых слов, допустимых

                ! в качестве значения для  параметра.  Имя

                ! задается в символьном виде



     Характеристика действия QUALIFIER указывает  квалифи-

катор, который включается в командную строку. В  операторе

DEFINE SYNTAX допускается до 255 характеристик  QUALIFIER.

характеристика NOQUALIFIERS указывает,  что  квалификаторы

не допускаются.

     Формат характеристики действия QUALIFIER:

     QUALIFIER имя_квалификатора

               [характеристика_квалификатора[,...]]

где  имя_квалификатора - символическое  имя квалификатора,

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

     Характеристика_квалификатора  задает   дополнительные

характеристики:

     1) BATCH;

     2) DEFAULT;

     3) LABEL;

     4) NEGATABLE, NONNEGATABLE;

     5) PLACEMENT;

     6) SYNTAX;

     7) VALUE.


                          - 55 -

                      00152-01 92 09


     Характеристика квалификатора BATCH указывает, что при

использовании команды в пакетном задании квалификатор при-

сутствует по умолчанию.

     Характеристика квалификатора DEFAULT  указывает,  что

квалификатор присутствует по умолчанию как в пакетном, так

и в интерактивном режиме.

     Характеристика квалификатора LABEL  определяет  метку

для запроса информации о квалификаторе.

     Формат характеристики квалификатора LABEL:

     LABEL=имя_метки

где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя  квалифи-

катора.

     Характеристики квалификатора NEGATABLE и NONNEGATABLE

указывают, можно ли задавать квалификатор с отрицанием, то

есть с приставкой NO в имени квалификатора.  По  умолчанию

предполагается NEGATABLE; если не задана ни одна  из  этих

характеристик квалификатора, то добавление NO к имени ква-

лификатора означает его отсутствие.

     Характеристика квалификатора PLACEMENT  указывает,  в

каком месте командной строки может появиться квалификатор.

     Формат характеристики квалификатора PLACEMENT:

     PLACEMENT=характеристика_расположения

где  характеристика_расположения - одна из  характеристик:

GLOBAL, LOCAL, POSITIONAL, приведенных в табл. 4.












                          - 56 -

                      00152-01 92 09


                                                Таблица 4

         Характеристики расположения PLACEMENT

----------------------------------------------------------

Характеристика  !        Об'яснение

  и ее формат   !

----------------------------------------------------------

GLOBAL          !   Указывает, что  квалификатор относится

                ! ко всей команде  и  может  располагаться

                ! после действия или параметра (подразуме-

                ! вается по умолчанию); если характеристи-

                ! ка PLACEMENT не задана, то  квалификатор

                ! считается глобальным

LOCAL           !   Указывает, что  квалификатор  распола-

                ! гается только после значения параметра и

                ! относится только к этому параметру

POSITIONAL      !   Указывает, что квалификатор располага-

                ! ется в любом месте командной строки,  но

                ! его значение зависит от позиции, в кото-

                ! рой  он  использован. Если  квалификатор

                ! указан после  значения параметра, то  он

                ! относится только к этому параметру. Если

                ! квалификатор указан  после  действия, то

                ! он относится ко всем параметрам



     Характеристика квалификатора SYNTAX задает  альтерна-

тивное определение синтаксиса, которое вступает в силу при

наличии данного квалификатора.

     Формат характеристики квалификатора SYNTAX:

     SYNTAX=имя_синтаксиса

где  имя_синтаксиса - символическое  имя,  соответствующее


                          - 57 -

                      00152-01 92 09


указанному в операторе DEFINE SYNTAX.

     Характеристика квалификатора  VALUE  задает  дополни-

тельные характеристики квалификатора.

     Формат характеристики квалификатора VALUE:

     VALUE[(характеристика_значения_квалификатора[,...])]

где  характеристика_значения_квалификатора - одна или нес-

колько характеристик значения квалификатора, приведенных в

табл. 5. Они заключаются в  круглые  скобки  и  отделяются

друг от друга запятыми. Если какая-то характеристика  зна-

чения квалификатора не указана, то интерпретатор  преобра-

зует буквы в значении квалификатора в прописные.



                                                Таблица 5

       Характеристики значения квалификатора VALUE

----------------------------------------------------------

Характеристика    !               Об'яснение

и ее формат       !

----------------------------------------------------------

DEFAULT=          !   Задает   значение  квалификатора  по

строка_умолчания  ! умолчанию, если он явно не указан. Ха-

                  ! рактеристики DEFAULT и REQUIRED взаим-

                  ! но исключают друг друга.

                  ! Строка умолчания задается в виде  сим-

                  ! вольной строки длиной не более 95 сим-

                  ! волов. Если значение по умолчанию  яв-

                  ! ляется ключевым словом, то  нельзя ис-

                  ! пользовать  эту  характеристику;  клю-

                  ! чевые слова по  умолчанию  задаются  в


                          - 58 -

                      00152-01 92 09


                                      Продолжение табл. 5

----------------------------------------------------------

Характеристика    !             Об'яснение

и ее формат       !

----------------------------------------------------------

                  ! Операторе DEFINE TYPE,  используя  ха-

                  ! рактеристику квалификатора DEFAULT

LIST              !   Указывает, что  в  качестве значения

                  ! квалификатора задается  список  значе-

                  ! ний, отделенных друг от друга  запяты-

                  ! ми. Список заключается в круглые скоб-

                  ! ки. Элементы списка значений  квалифи-

                  ! катора нельзя отделять друг  от  друга

                  ! знаками плюс

REQUIRED          !   Указывает, что  квалификатор  должен

                  ! иметь явно  заданное  значение. Обяза-

                  ! тельное значение квалификатора  интер-

                  ! претатором специально не  запрашивает-

                  ! ся. Характеристики REQUIRED и  DEFAULT

                  ! взаимно исключают друг друга

TYPE=имя_типа     !   Дается либо  имя  встроенного  типа,

                  ! либо  имя оператора DEFINE TYPE, в ко-

                  ! тором перечислены  ключевые слова, до-

                  ! пустимые с данным квалификатором.  Имя

                  ! задается в символьном виде



     Характеристика действия ROUTINE дает имя подпрограммы

в программе пользователя, которая вызывается при использо-

вании измененного синтаксиса. Характеристика  ROUTINE  ис-

пользуется при создании об'ектного модуля из файла опреде-


                          - 59 -

                      00152-01 92 09


ления команд.

     Формат характеристики действия ROUTINE:

     ROUTINE имя_подпрограммы

где  имя_подпрограммы - символическое  имя   подпрограммы,

которая   выполняется   при   обращении   к   подпрограмме

CLI$DISPATCH.

     Если имя подпрограммы не указано, то вызывается  под-

программа из первичного оператора DEFINE. Если в первичном

операторе имя подпрограммы не указано, то никакого умолча-

ния не предусмотрено.



     7.1.1. Примеры определения синтаксиса



     Примеры:

     1. DEFINE VERB WRITER

               IMAGE "WORK:[JONES]WRITER"

               QUALIFIER LINE,SYNTAX=LINE

               QUALIFIER SCREEN,SYNTAX=SCREEN

        DEFINE SYNTAX LINE

               IMAGE "WORK:[JONES]LINE"

               QUALIFIER NUM

        DEFINE SYNTAX SCREEN

               IMAGE "WORK:[JONES]SCREEN"

               QUALIFIER AUDIT

     Пример  1  иллюстрирует   файл   определения   команд

WRITER.CLD, который содержит операторы DEFINE SYNTAX,  вы-

зывающие изменения синтаксиса  команды  в  зависимости  от

квалификаторов, заданных  в  командной  строке.  Действием

WRITER вызывается текстовый редактор  WRITER.EXE.  Однако,

используя квалификаторы SCREEN и LINE, можно вызвать  аль-


                          - 60 -

                      00152-01 92 09


тернативные текстовые редакторы.

     Данное определение команды добавляется в таблицу  ко-

манд пользовательского процесса командой:

     $ SET COMMAND WRITER

     Команда WRITER вызывает различные текстовые  редакто-

ры.

     Если, например, задана команда

     $ WRITER/LINE

то будет вызван редактор LINE вместо редактора  WRITER  по

умолчанию. Переопределение синтаксиса делается слева  нап-

раво, поскольку разбор строки также происходит слева  нап-

раво. Это значит, что, если указаны два квалификатора, вы-

зывающие разные определения синтаксиса, первый из них при-

оритетнее (ибо он разбирается первым).

     2. DEFINE VERB DISPLAY

               PARAMETER P1,LABEL=ITEM

                         VALUE(REQUIRED,TYPE=$FILE)

               QUALIFIER SAVE,SYNTAX=SAVE

        DEFINE SYNTAX SAVE

               IMAGE "WORK:[NEWMAN]SAVE_DISPLAY"

               PARAMETER P1,LABEL=ITEM

                         VALUE(REQUIRED,TYPE=$FILE)

               PARAMETER P2,LABEL=NAME

     В примере 2 показано изменение синтаксиса, в  котором

определен дополнительный параметр. В файле определения ко-

манд определено действие DISPLAY. Если команда DISPLAY ис-

пользуется без квалификатора /SAVE, то требуется один  па-

раметр. Этот параметр указывает имя файла,  который  нужно

вывести на экран. Если команда DISPLAY используется с ква-

лификатором /SAVE, то требуются два параметра: имя  файла,


                          - 61 -

                      00152-01 92 09


выводимого на экран, и имя файла, под которым он будет со-

хранен. В операторе DEFINE SYNTAX повторяется  определение

P1.



     7.2. Оператор DEFINE TYPE



     В операторе DEFINE TYPE описывается синтаксис  ключе-

вых слов, на которые  ссылаются  по  VALUE(TYPE=имя_типа).

характеристика    VALUE    используется    в    операторах

DEFINE VERB, DEFINE SYNTAX или DEFINE  TYPE  для  указания

заранее определенных значений (ключевых слов)  параметров,

квалификаторов или ключевых слов.

     Формат оператора DEFINE TYPE:

     DEFINE TYPE имя_типа[характеристика_типа[,...]]

где  имя_типа - имя оператора DEFINE TYPE, соответствующее

имени,      используемому         в         характеристике

VALUE(TYPE=имя_типа),  на   которую   ссылается   оператор

DEFINE TYPE;

     Характеристика_типа определяет ключевое слово, допус-

тимое в качестве значения об'екта,  на  который  ссылается

оператор DEFINE TYPE.  Характеристикой  типа  в  операторе

DEFINE TYPE является KEYWORD.



     7.2.1. Характеристика типа KEYWORD



     Характеристика типа KEYWORD  задает  ключевое  слово,

допустимое в качестве значения об'екта, на который  ссыла-

ется оператор DEFINE  TYPE.  Характеристика  типа  KEYWORD

повторяется для каждого  допустимого  ключевого  слова.  В

операторе DEFINE TYPE можно указать до 255 ключевых слов.


                          - 62 -

                      00152-01 92 09


     Формат характеристики типа KEYWORD:

     KEYWORD имя_ключевого_слова

             [характеристика_ключевого_слова[,...]]

где  имя_ключевого_слова - имя ключевого слова;

     Характеристика_ключевого_слова задает  одну  или  не-

сколько дополнительных характеристик ключевого слова.  Они

являются необязательными.

     Характеристики ключевого слова:

     1) DEFAULT;

     2) LABEL;

     3) NEGATABLE, NONNEGATABLE;

     4) SYNTAX;

     5) VALUE.

     Характеристика ключевого слова DEFAULT указывает, что

ключевое слово присутствует по умолчанию. Для того,  чтобы

ключевое слово могло быть признано существующим по умолча-

нию, необходимо, чтобы параметр, квалификатор или ключевое

слово, на которые ссылается данный оператор  DEFINE  TYPE,

тоже были определены характеристикой DEFAULT.

     Характеристика ключевого слова LABEL задает метку для

ссылки на данное ключевое слово.

     Формат характеристики ключевого слова LABEL:

     LABEL=имя_метки

где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя ключевого

слова.

     Характеристики   ключевого    слова    NEGATABLE    и

NONNEGATABLE указывают, можно ли задавать ключевое слово с

приставкой NO. По умолчанию считается  NONNEGATABLE;  если

не задана ни одна из этих характеристик, то ключевое слово


                          - 63 -

                      00152-01 92 09


нельзя задавать с приставкой NO. В этом отличие от  квали-

фикаторов, которые по умолчанию считаются NEGATABLE.

     Характеристика ключевого слова SYNTAX указывает  аль-

тернативное определение действия, которое  вызывается  при

наличии данного ключевого словA.

     Формат характеристики ключевого слова SYNTAX:

     SYNTAX=имя_синтаксиса

где  имя_синтаксиса - символическое  имя,  соответствующее

указанному в операторе DEFINE SYNTAX.

     Характеристика ключевого слова VALUE задает  дополни-

тельные характеристики ключевого слова.

     Формат характеристики ключевого слова VALUE:

     VALUE[(характеристика_значения_ключевого_слова[,..])]

где  характеристика_значения_ключевого_слова задает инфор-

мацию о значении ключевого слова, приведенную в табл. 6.



                                                Таблица 6

      Характеристики значения ключевого слова VALUE

----------------------------------------------------------

Характеристика  !              Об'яснение

и ее формат     !

----------------------------------------------------------

DEFAULT=        !   Задает значение по умолчанию,  которое

строка_умолчания! используется,  если  значение  ключевого

                ! слова  явно  не  указано. Характеристики

                ! DEFAULT  и  REQUIRED  взаимно  исключают

                ! друг друга. Строка умолчания задается  в

                ! виде символьной строки длиной  не  более

                ! 95 символов.

                ! Данную характеристику  нельзя  использо-


                          - 64 -

                      00152-01 92 09


                                      Продолжение табл. 6

----------------------------------------------------------

характеристика  !               Об'яснение

и ее формат     !

----------------------------------------------------------

                ! вать, если значением по умолчанию  явля-

                ! ется ключевое слово; в этом случае умол-

                ! чание задается в операторе  DEFINE TYPE,

                ! используя характеристику DEFAULT в опре-

                ! делении об'екта с данным ключевым словом

LIST            !   указывает, что значение ключевого сло-

                ! ва задается в виде списка. Он заключает-

                ! ся  в круглые скобки, а его элементы от-

                ! деляются друг от друга запятыми. Элемен-

                ! ты списка нельзя отделять знаками плюс

REQUIRED        !   означает, что указание явного значения

                ! ключевого слова обязательно. Для получе-

                ! ния  значения  обязательного   ключевого

                ! слова  не предусмотрено  подсказок. Если

                ! ключевое слово задано без указания  зна-

                ! чения, то интерпретатор выдает сообщение

                ! об  ошибке.  Характеристики  REQUIRED  и

                ! DEFAULT взаимно исключают друг друга

TYPE=имя_типа   !   Дается либо имя встроенного типа, либо

                ! имя оператора DEFINE TYPE, в котором оп-

                ! ределены  ключевые  слова, допустимые  в

                ! качестве значения данного ключевого сло-

                ! ва. Характеристику TYPE нельзя задавать,

                ! если задана характеристика DEFAULT.  Имя

                ! задается в символьном виде


                          - 65 -

                      00152-01 92 09


     7.2.2. Примеры определения типа



     Примеры:

     1. DEFINE VERB DISPLAY

               PARAMETER P1,LABEL=OPTION,PROMPT="WHAT"

                     VALUE(REQUIRED,TYPE=DISPLAY_OPTIONS)

        DEFINE TYPE DISPLAY_OPTIONS

               KEYWORD ANIMALS,SYNTAX=DISPLAY_ANIMALS

               KEYWORD FLOWERS,SYNTAX=DISPLAY_FLOWERS

        DEFINE SYNTAX DISPLAY_ANIMALS

               IMAGE "USER:[JOHNSON]ANIMALS"

               PARAMETER P1,LABEL=OPTION,VALUE(REQUIRED)

               QUALIFIER SMALL

               QUALIFIER LARGE

               QUALIFIER ALL,DEFAULT

        DEFINE SYNTAX DISPLAY_FLOWERS

               IMAGE "USER:[JOHNSON]FLOWERS"

               PARAMETER P1,LABEL=OPTION,VALUE(REQUIRED)

               NOQUALIFIERS

     В примере 1 показано определение ключевых слов, кото-

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

действия DISPLAY. Каждое ключевое  слово  использует  свое

определение синтаксиса для вызова  образа  при  выполнении

команды.

     После включения определения команды DISPLAY в таблицу

команд пользовательского процесса можно задать команды:

     $ DISPLAY ANIMALS

     $ DISPLAY FLOWERS

     В операторе  определения  синтаксиса  DISPLAY_ANIMALS

указаны три квалификатора, которые могут быть использованы


                          - 66 -

                      00152-01 92 09


только   с   командой    DISPLAY ANIMALS.    С    командой

DISPLAY FLOWERS использование квалификаторов не разрешает-

ся.

     2. DEFINE VERB DRAW

               QUALIFIER COLOR,TYPE=COLOR_NAMES

        DEFINE TYPE COLOR_NAMES

               KEYWORD RED

               KEYWORD BLUE

     В примере 2 показано определение действия, используе-

мого в операторе  DEFINE  TYPE  для  определения  ключевых

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

лификатора.

     После включения определения команды  DRAW  в  таблицу

команд пользовательского процесса можно издать команды:

     $ DRAW/COLOR=RED

     $ DRAW/COLOR=BLUE

     3. DEFINE VERB RANDOM

               PARAMETER P1,VALUE(TYPE=THINGS),DEFAULT

        DEFINE TYPE THINGS

               KEYWORD NUMBER,DEFAULT

               KEYWORD LETTER

     В  примере  3  определено  действие  RANDOM.  С  этим

действием допускается параметр, который должен быть  одним

из двух определенных пользователем ключевых слов NUMBER  и

LETTER. Если параметр не задан с действием RANDOM,  то  по

умолчанию будет NUMBER.

     Примечание. Для  указания  присутствия  по  умолчанию

ключевого слова NUMBER используется характеристика DEFAULT

в двух местах. Необходимо указать DEFAULT при  определении

параметра в  операторе  DEFINE  VERB  и  еще  раз  указать


                          - 67 -

                      00152-01 92 09


DEFAULT при определении ключевого слова NUMBER в операторе

DEFINE TYPE.



     7.3. Оператор DEFINE VERB



     Оператор DEFINE VERB определяет новую команду и  ука-

зывает информацию о параметрах и  квалификаторах,  которые

используются с этой командой. В операторе DEFINE VERB опи-

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

деленной командой.

     Формат оператора DEFINE VERB:

     DEFINE VERB имя_действия

            [характеристика_действия[,...]]

где  имя_действия - имя  команды  действия.  Оно  является

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

тором DEFINE VERB. Первые четыре  символа  имени  действия

должны быть уникальны;

     Характеристика_действия - одна или несколько необяза-

тельных характеристик, которые определяют атрибуты  коман-

дой строки.

     Характеристики действия:

     1) DISALLOW, NODISALLOWS;

     2) IMAGE;

     3) PARAMETER, NOPARAMETERS;

     4) QUALIFIER, NOQUALIFIERS;

     5) ROUTINE;

     6) SYNONYM.

     Характеристика действия DISALLOW запрещает  командную

строку, если для нее результат выражения - истина.  Харак-

теристика действия NODISALLOWS указывает, что нет запретов


                          - 68 -

                      00152-01 92 09


на об'екты или комбинации об'ектов.

     Формат характеристики действия DISALLOW:

     DISALLOW выражение

где  выражение - об'ект или комбинация об'ектов, связанных

операторами. Каждый об'ект в выражении проверяется на  на-

личие (истина) или отсутствие (ложь) в  командной  строке.

Об'ект, присутствующий по умолчанию, но явно не  указанный

в командной строке, считается ложным.

     После проверки истинности каждого  об'екта  над  ними

выполняются операции, указанные  в  операторах.  Если  ре-

зультат - истина, то командная  строка  отвергается.  Если

результат - ложь, то командная строка принимается.

     Об'екты задаются в выражении по имени  или  метке,  с

использованием пути ключевого слова или пути  определения.

допускается использование операторов AND, ANY2, NEG,  NOT,

OR.

     Характеристика действия IMAGE именует образ, вызывае-

мый данной командой.

     Формат характеристики действия IMAGE:

     IMAGE имя_образа

где  имя_образа - спецификация файла образа, который вызы-

вается интерпретатором при получении команды. Если в  спе-

цификации файла не указаны устройство и каталог, то интер-

претатор подставляет устройство  и  каталог  по  умолчанию

SYS$SYSTEM: и тип файла по умолчанию  EXE. Имя образа  за-

дается в виде символьной строки длиной до 63 символов.

     Если не задана характеристика действия IMAGE,  и  для

обработки файла определения  команд  используется  команда

SET COMMAND/REPLACE, то в качестве имени образа  использу-

ется имя действия. Интерпретатор ищет образ с именем  фай-


                          - 69 -

                      00152-01 92 09


ла, совпадающим с именем действия, и с именами  устройства

и каталога SYS$SYSTEM: и с типом файла  EXE.

     Характеристика действия PARAMETER определяет парамет-

ры в командной строке. В операторе DEFINE VERB допускается

до восьми параметров. Характеристика NOPARAMETERS указыва-

ет, что параметры запрещены.

     Формат характеристики действия PARAMETER:

     PARAMETER имя_параметра

               [характеристика_параметра[,...]]

где  имя_параметра - позиция параметра в командной строке.

она имеет вид PN, N - номер позиции  параметра.  Параметры

именуются от P1 до P8. Позиция должна непосредственно сле-

довать за словом PARAMETER;

     Характеристика_параметра задает дополнительные харак-

теристики параметра.

     Характеристики параметра:

     1) DEFAULT;

     2) LABEL;

     3) PROMPT;

     4) VALUE.

     Характеристика параметра DEFAULT  указывает,  что  по

умолчанию присутствует определенное пользователем ключевое

слово. Данная характеристика используется только совместно

с характеристикой  VALUE,  которая  включает  определенное

пользователем ключевое слово в качестве значения  парамет-

ра.

     Для указания значения параметра по умолчанию, не  яв-

ляющегося  ключевым  словом,  используется  характеристика

VALUE (DEFAULT=строка_умолчания).

     Характеристика параметра LABEL определяет  метку  для


                          - 70 -

                      00152-01 92 09


ссылки на параметр.

     Формат характеристики параметра LABEL:

     LABEL=имя_метки

где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя параметра

(P1 - P8).

     Характеристика   параметра   PROMPT   задает   строку

подсказки для получения данного параметра, если он не ука-

зан в командной строке. Если строка подсказки не задана, а

параметр опущен, то в качестве строки подсказки  интерпре-

татор использует имя параметра.

     Формат характеристики параметра PROMPT:

     PROMPT=строка_подсказки

где  строка_подсказки - символьная строка длиной  не более

31 символа.

     Если определяются несколько  параметров,  из  которых

первый обязательный, остальные необязательные,  а  команда

задана без каких-либо параметров, то интерпретатор  запра-

шивает первый (обязательный) параметр, пока не будет  вве-

дено его значение или отменена команда по CTRL/Z.

     Получив значение P1, интерпретатор запросит остальные

параметры, несмотря на то, что они являются необязательны-

ми. Если на подсказку пользователь введет CTRL/Z,  то  ко-

манда отменяется. Если пользователь нажмет клавишу возвра-

та каретки без указания значения параметра, то команда бу-

дет выполняться. Если пользователь введет значение, то ин-

терпретатор запросит значение  следующего  необязательного

параметра.

     Характеристика параметра VALUE задает  дополнительные

характеристики параметра.


                          - 71 -

                      00152-01 92 09


     Формат характеристики параметра VALUE:

     VALUE[(характеристика_значения_параметра[,...])]

где  характеристика_значения_параметра - одна  из характе-

ристик:

     1) CONCATENATE;

     2) DEFAULT;

     3) LIST;

     4) NOCONCATENATE;

     5) REQUIRED;

     6) TYPE.

     Характеристики значения параметра заключаются в круг-

лые  скобки  и  отделяются   друг   от   друга    запятыми

(см. табл. 3).

     Характеристика действия QUALIFIER  задает  квалифика-

тор,  допустимый   в   командной   строке.   В   операторе

DEFINE VERB можно указать до 255 характеристик  QUALIFIER.

Характеристика действия NOQUALIFIERS указывает, что квали-

фикаторы запрещены.

     Формат характеристики действия QUALIFIER:

     QUALIFIER имя_квалификатора

               [характеристика_квалификатора[,...]]

где  имя_квалификатора - символическое  имя квалификатора,

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

     Характеристика_квалификатора указывает дополнительные

характеристики квалификатора:

     1) BATCH;

     2) DEFAULT;

     3) LABEL;

     4) NEGATABLE;

     5) NONNEGATABLE;


                          - 72 -

                      00152-01 92 09


     6) PLACEMENT;

     7) SYNTAX;

     8) VALUE.

     Характеристика квалификатора BATCH указывает, что при

использовании команды в пакетном задании квалификатор при-

сутствует по умолчанию.

     Характеристика квалификатора DEFAULT  указывает,  что

квалификатор присутствует по умолчанию как в пакетном, так

и в интерактивном режимах.

     Характеристика квалификатора LABEL задает  метку  для

запрашиваемой информации о квалификаторе.

     Формат характеристики квалификатора LABEL:

     LABEL=имя_метки

где  имя_метки - символическое имя метки. Если оно не  за-

дано, то в качестве имени метки используется имя  квалифи-

катора.

     Характеристики квалификатора NEGATABLE и NONNEGATABLE

указывают, можно ли задавать квалификатор с приставкой от-

рицания NO. По умолчанию квалификатор считается NEGATABLE;

если ни одна из этих характеристик не указана, то добавле-

ние NO к имени квалификатора означает его отсутствие.

     Характеристика квалификатора PLACEMENT  указывает,  в

каком месте командной строки может появляться данный  ква-

лификатор.

     Формат характеристики квалификатора PLACEMENT:

     PLACEMENT=характеристика_расположения

где  характеристика_расположения - одна из характеристик:

     1) GLOBAL;

     2) LOCAL;

     3) POSITIONAL.


                          - 73 -

                      00152-01 92 09


     Характеристика квалификатора SYNTAX вводит  альтерна-

тивный синтаксис при наличии данного  квалификатора.  Аль-

тернативный синтаксис используется при вызове разных обра-

зов в зависимости от наличия разных квалификаторов.

     Формат характеристики квалификатора SYNTAX:

     SYNTAX=имя_синтаксиса

где  имя_синтаксиса - символическое  имя,  соответствующее

указанному в операторе DEFINE SYNTAX.

     Характеристика квалификатора  VALUE  задает  дополни-

тельные характеристики квалификатора.

     Формат характеристики квалификатора VALUE:

     VALUE[(характеристика_значения_квалификатора[,...])]

где  характеристика_значения_квалификатора - одна или  не-

сколько характеристик, которые заключаются в круглые скоб-

ки и отделяются друг от друга запятыми (см. табл. 5). Если

какие-нибудь характеристики значения квалификатора не  за-

даны, то интерпретатор преобразует буквы в значении квали-

фикатора в прописные.

     Характеристики значения квалификатора:

     1) DEFAULT;

     2) LIST;

     3) REQUIRED;

     4) TYPE.

     Характеристика  действия   ROUTINE   определяет   имя

подпрограммы, вызываемой из программы пользователя при по-

лучении данной команды. Характеристика ROUTINE использует-

ся при создании об'ектного модуля  файла  определения  ко-

манд.

     Формат характеристики действия ROUTINE:

     ROUTINE имя_подпрограммы


                          - 74 -

                      00152-01 92 09


где  имя_подпрограммы - символическое   имя  подпрограммы,

которая   выполняется   при   обращении   к   подпрограмме

CLI$DISPATCH.

     Характеристика действия  SYNONYM  определяет  синоним

имени действия.

     Формат характеристики действия SYNONYM:

     SYNONYM имя_синонима

где  имя_синонима - символическое  имя  синонима,  которое

может использоваться вместо имени действия.



     7.3.1. Примеры определения действия



     Примеры:

     1. DEFINE VERB ERASE

               PARAMETER P1

                     VALUE(DEFAULT=DISK3:[JONES]STATS.DAT)

     В примере 1 определяется действие ERASE  (очистка)  и

один параметр. Значением параметра по  умолчанию  является

DISK3:[JONES]STATS.DAT.

     Поскольку имя образа не задано, действие ERASE  вызы-

вает образ SYS$SYSTEM:ERASE.EXE.

     2. DEFINE VERB SCATTER

               IMAGE "WRKD$:[MORRISON]SCATTER"

               PARAMETER P1,LABEL=INFILE

                     PROMPT="INPUT_FILE?",VALUE(REQUIRED)

               PARAMETER P2,LABEL=OUTFILE

                     PROMPT="OUTPUT_FILE?",VALUE(REQUIRED)

               QUALIFIER SLOW,DEFAULT

               QUALIFIER FAST

               DISALLOW SLOW AND FAST


                          - 75 -

                      00152-01 92 09


     В примере 2 показан файл определения команд, содержа-

щий новую команду с  именем  SCATTER  (разбрасывание).  По

этой команде вызывается образ WRKD$:[MORRISON]SCATTER.EXE.

команда имеет два обязательных параметра: вводной и вывод-

ной файлы. Она также  имеет  два  квалификатора:  /SLOW  и

/FAST. Если ни один из квалификаторов не задан явно, то по

умолчанию будет /SLOW. Одновременное задание обоих  квали-

фикаторов не допускается.



     7.4. Оператор IDENT



     Оператор IDENT задает идентифицирующую информацию для

об'ектного модуля, созданного из файла определения команд.

     Формат оператора IDENT:

     IDENT строка_идент

где  строка_идент - символьная строка длиной до 31  симво-

ла, которая содержит идентифицирующую информацию.

     Пример.

     МоDULE COMMAND_TABLE

     IDENT "V04-001"

     DEFINE VERB SPIN

     .

     .

     .

     Пример показывает, как файл  определения  команд  ис-

пользует оператор IDENT для идентификации файла.


                          - 76 -

                      00152-01 92 09


     7.5. Оператор MODULE



     Оператор MODULE задает символическое  имя  об'ектному

модулю, созданному из файла определения команд.

     Формат оператора MODULE:

     MODULE имя_модуля

где  имя_модуля - символическое имя об'ектного модуля. Оно

связано с адресом, по которому компоновщик находит  модуль

с таблицей команд, который компонуется с программой  поль-

зователя. Если имя модуля не указано, то программа  CDU  в

качестве имени по умолчанию использует имя об'ектного фай-

ла (указанное в квалификаторе /OBJECT). Если имя об'ектно-

го файла явно не задано, то CDU использует в качестве име-

ни модуля имя первого файла определения команд.

     Пример.

     $ CREATE TEST.CLD

          MODULE TEST_TABLE

          DEFINE VERB SEND

                 ROUTINE SEND_ROUT

                 PARAMETER P1

          .

          .

          .

          DEFINE VERB SEARCH

                 ROUTINE SEARCH_ROUT

                 PARAMETER P1

     ^Z

     $ SET COMMAND/OBJECT=TEST.OBJ TEST

     $ LINK PROG.TEST

     $ RUN PROG


                          - 77 -

                      00152-01 92 09


     В примере показан файл определения команд TEST.CLD, в

котором определены две команды: SEND  (посылка)  и  SEARCH

(поиск). Этими командами вызывается  одна  из  подпрограмм

программы PROG.EXE. Программа PROG.EXE является программой

пользователя, которая принимает командные строки и  разби-

рает их с помощью интерпретатора.

     По команде SET COMMAND/OBJECT создается об'ектный мо-

дуль,  содержащий  таблицу  команд  SEND  и  SEARCH.  Если

об'ектный  модуль   программы   PROG.OBJ   компонуется   с

об'ектным модулем таблицы команд TEST.OBJ, то результирую-

щий образ PROG.EXE содержит программу  и  таблицу  команд.

Символическое имя TEST_TABLE связано с адресом  в  образе,

по которому находится таблица команд.

     При выполнении программы PROG.EXE вызываются  подпро-

граммы разбора командной строки с  использованием  таблицы

команд в модуле TEST_TABLE.




                          - 78 -

                      00152-01 92 09


           8. Квалификаторы команды SET COMMAND



     Квалификаторы команды SET  COMMAND  используются  при

вызове программы CDU.

     Квалификаторы команды SET COMMAND:

     1) /DELETE;

     2) /LISTING;

     3) /OBJECT;

     4) /OUTPUT;

     5) /REPLACE;

     6) /TABLE.

     Квалификаторы /DELETE, /OBJECT и  /REPLACE  указывают

режимы работы команды SET COMMAND; эти квалификаторы  вза-

имно исключают друг друга.



     8.1. Квалификатор /DELETE



     Квалификатор /DELETE используется для удаления  имени

действия или синонима из  модифицируемой  таблицы  команд.

если имя действия имеет синонимы, то квалификатор  /DELETE

удаляет имя данного действия или синонима. Оставшиеся  си-

нонимы или оставшееся имя действия по-прежнему будут отно-

ситься к определению действия.

     При помощи квалификатора /DELETE  удаляется  действие

либо из таблицы команд пользовательского процесса, либо из

файла таблицы команд, указанного в  квалификаторе  /TABLE.

Если квалификатор /TABLE не использован для  задания  аль-

тернативной таблицы команд, то по умолчанию удаляются дей-

ствия из таблицы команд пользовательского  процесса.  Если

квалификатор /OUTPUT не использован для задания  выводного


                          - 79 -

                      00152-01 92 09


файла, то по  умолчанию  модифицированная  таблица  команд

возвращается в пользовательский процесс.

     С квалификатором /DELETE нельзя использовать квалифи-

каторы /LISTING, /OBJECT или /REPLACE.

     Формат квалификатора /DELETE:

     $ SET COMMAND/DELETE=(действие[,...])

где  действие - имя действия или синонима действия,  кото-

рое удаляется из указанной таблицы команд. Если задано не-

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

список имен заключается в круглые скобки.

     Примеры:

     1. $ SET COMMAND/DELETE=DO

     В примере 1 удаляется определение команды DO из  таб-

лицы команд пользовательского процесса.

     2. $ SET COMMAND/DELETE=(PUSH,SHOVE) -

        $_ /TABLE=TEST_TABLE/OUTPUT=NEW_TABLE

     Команды PUSH и  SHOVE  удаляются  из  таблицы  команд

TEST_TABLE.EXE. По квалификатору /OUTPUT  модифицированная

таблица записывается в файл NEW_TABLE.EXE. Если не указать

квалификатор /OUTPUT, то измененная таблица записывается в

пользовательский процесс вместо прежней таблицы.



     8.2. Квалификатор /LISTING



     Квалификатор /LISTING управляет созданием файла  лис-

тинга. Можно указать в квалификаторе  спецификацию  файла.

Файл листинга содержит распечатку определений команд вмес-

те с сообщениями об ошибках.

     Если квалификатор /LISTING задан без указания  специ-

фикации  файла, то  файл  листинга  выводится  на  устрой-


                          - 80 -

                      00152-01 92 09


ство и каталог по умолчанию; файл листинга будет иметь  то

же имя, что и первый файл определения команд, а его  типом

будет  LIS.

     Квалификатор /LISTING используется только с  квалифи-

каторами /OBJECT и /REPLACE; нельзя получить листинг в ре-

жиме  удаления.  В  режимах,   указанных   квалификаторами

/OBJECT и /REPLACE, по  умолчанию  действует  квалификатор

/NOLISTING.

     Формат квалификатора /LISTING:

     $ SET COMMAND/[NO]LISTING[=спец_файла_листинга]

                              [спец_файла[,...]]

где  спец_файла_листинга - спецификация   файла  листинга.

Если она не задана, то используется имя первого файла  оп-

ределения команд. Тип файла листинга -  LIS;

     Спец_файла - спецификация файла  определения  команд.

По умолчанию тип файла -  CLD. В спецификации файла допус-

кается использование символа обобщения, например, звездоч-

ки (*).

     Примеры:

     1. $ SET COMMAND/LISTING TEST

     В примере 1 файл определения команд TEST.CLD  обраба-

тывается программой  CDU  и  в  таблицу  команд  пользова-

тельского процесса добавляются новые действия (по  умолча-

нию команда SET COMMAND использует режим /REPLACE).  Изме-

ненная таблица заменяет прежнюю и создается файл  листинга

с именем TEST.LIS.

     2. $ SET COMMAND/LISTING=A TEST

     В примере 2 файл определения команд TEST.CLD  обраба-

тывается CDU и в таблицу команд пользовательского процесса

добавляются новые действия.  Измененная  таблица  заменяет


                          - 81 -

                      00152-01 92 09


прежнюю и создается файл листинга с именем A.LIS.

     3. $ SET COMMAND/LISTING/OBJECT GAMES

     В примере 3 создается об'ектный модуль  GAMES.OBJ  из

файла определения команд GAMES.CLD. Об'ектный модуль можно

скомпоновать с  программой  пользователя.  Создается  файл

листинга с именем GAMES.LIS.



     8.3. Квалификатор /OBJECT



     По квалификатору /OBJECT создается  об'ектный  модуль

из файла определения команд. В квалификаторе /OBJECT можно

указать  спецификацию   об'ектного   файла.   Квалификатор

/OBJECT не используется для создания об'ектного модуля  из

файла определения команд, в  котором  есть  характеристика

IMAGE.

     Об'ектный модуль, содержащий  таблицу  команд,  может

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

теля. Затем программа может использовать эту  таблицу  ко-

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

     При использовании команды SET COMMAND/OBJECT задается

только один файл определения команд.

     Если задан квалификатор /OBJECT и опущена  специфика-

ция об'ектного  файла,  то  об'ектный  файл  выводится  на

устройство и каталог по умолчанию;  об'ектный  файл  будет

иметь то же имя, что и вводной файл, тип файла будет .OBJ.

     С квалификатором /OBJECT нельзя использовать квалифи-

каторы /DELETE, /OUTPUT, /REPLACE и /TABLE.

     Формат квалификатора /OBJECT:

     $ SET COMMAND/OBJECT[=спец_об'ектного_файла]

                         спец_файла


                          - 82 -

                      00152-01 92 09


где  спец_об'ектного_файла - спецификация об'ектного  фай-

ла. Если имя файла не задано, то используется имя  первого

вводного файла (файла определения команд).  Тип  файла  по

умолчанию - .OBJ;

     Спец_файла - спецификация файла  определения  команд.

Тип файла - .CLD. В спецификации файла допускается исполь-

зование символа обобщения, например, звездочки (*).

     Примеры:

     1. $ SET COMMAND/OBJECT TEST

     В примере 1 обрабатывается  файл  определения  команд

TEST.CLD и создается новая таблица команд. Эта таблица бу-

дет  записана  в  формате  об'ектного  модуля   с   именем

TEST.OBJ.

     2. $ SET COMMAND/OBJECT=A TEST

     В примере 2 обрабатывается  файл  определения  команд

TEST.CLD и таблица команд будет записана в формате об'ект-

ного модуля с именем А.OBJ.



     8.4. Квалификатор /OUTPUT



     Квалификатор /OUTPUT управляет размещением измененной

таблицы команд. Если задана спецификация выводного  файла,

то измененная таблица команд будет записана в  этот  файл.

Если же спецификация выводного файла не задана,  то  изме-

ненная таблица команд заменит таблицу команд пользователь-

ского процесса. Квалификатор /NOOUTPUT указывает,  что  не

нужно создавать выводной файл.

     Квалификатор /OUTPUT может быть использован только  с

квалификаторами /DELETE или /REPLACE; по умолчанию  дейст-

вует квалификатор /OUTPUT без указания спецификации файла.


                          - 83 -

                      00152-01 92 09


Квалификатор /OUTPUT нельзя использовать в режиме создания

об'ектного модуля.

     Формат квалификатора /OUTPUT:

     $ SET COMMAND/OUTPUT[=спец_выводного_файла]

                         [спец_файла[,...]]

где  спец_выводного_файла - спецификация выводного  файла,

который  содержит  отредактированную  таблицу  команд.  По

умолчанию тип файла - .EXE. Выводной файл может быть задан

только    тогда,    когда    используется     квалификатор

/TABLE=спец_файла для вводной таблицы;

     Спец_файла - спецификация файла  определения  команд.

тип файла по умолчанию - .CLD. В спецификации файла допус-

кается использование символа обобщения, например, звездоч-

ки (*).

     Примеры:

     1. $ SET COMMAND/OUTPUT TEST

     В примере 1 обрабатывается файл TEST.CLD и его  опре-

деления команд добавляются в таблицу команд  пользователь-

ского процесса. Измененная таблица заменяет  прежнюю  (ре-

зультат тот же, что при издании команды SET COMMAND TEST).

     2. $ SET COMMAND/TABLE=A/OUTPUT=A TEST

     В примере 2 определения команд из файла TEST.CLD  до-

бавляются в таблицу команд A.EXE. Измененная таблица будет

записана в файл с именем A.EXE и номером версии, на едини-

цу большим, чем номер версии файла с исходной таблицей.

     Если используется  квалификатор  /TABLE,  указывающий

вводную таблицу команд, необходимо задать спецификацию вы-

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

манд будет записана в пользовательский процесс  и  заменит

таблицу команд пользовательского процесса.


                          - 84 -

                      00152-01 92 09


     3. $ SET COMMAND/NOOUTPUT TEST

     В примере 3 определения команд из TEST.CLD добавляют-

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

ная таблица никуда не записывается. Эту  командную  строку

можно использовать для проверки корректности записи  файла

определения команд.



     8.5. Квалификатор /REPLACE



     Квалификатор /REPLACE задает режим добавления или за-

мены действий в модифицируемой таблице команд.

     Квалификатор /REPLACE может быть использован для  из-

менения как таблицы команд процесса, так и  файла  таблицы

команд, указанного в квалификаторе /TABLE. Если квалифика-

тор /TABLE не используется для задания альтернативной таб-

лицы команд, то по  умолчанию  изменяется  таблица  команд

пользовательского процесса. Если и выводной файл не задан,

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

пользовательский процесс.

     С квалификатором /REPLACE нельзя использовать  квали-

фикаторы /OBJECT и /DELETE.

     Если не задан  ни  один  из  квалификаторов  /DELETE,

/OBJECT и /REPLACE, то по умолчанию действует /REPLACE.

     Формат квалификатора /REPLACE:

     $ SET COMMAND/REPLACE [спец_файла[,...]]

где  спец_файла - спецификация файла  определения  команд.

Тип файла по умолчанию - .CLD. В спецификации файла допус-

кается использование символа обобщения, например, звездоч-

ки (*).




                          - 85 -

                      00152-01 92 09


     Примеры:

     1. $ SET COMMAND SCROLL

     В примере 1 определения команд  из  файла  SCROLL.CLD

добавляются в таблицу команд  пользовательского  процесса.

По умолчанию действуют квалификаторы  /REPLACE,  /TABLE  и

/OUTPUT. Квалификатор /REPLACE указывает режим  добавления

или замены действий; квалификатор  /TABLE  указывает,  что

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

лификатор /OUTPUT указывает, что измененная таблица команд

будет записана в пользовательский процесс.

     2. $ SET COMMAND/TABLE/OUTPUT SCROLL

     В примере 2 определения команд  из  файла  SCROLL.CLD

добавляются в таблицу команд пользовательского процесса  и

измененная таблица возвращается  в  пользовательский  про-

цесс. Эта команда идентична команде SET COMMAND SCROLL.

     3. $ SET COMMAND/TABLE=COMMAND_TABLE -

        $_ /OUTPUT=NEW_TABLE TEST

     В примере 3 определения команд из файла TEST.CLD  до-

бавляются  в   таблицу   команд,   находящуюся   в   файле

COMMAND_TABLE.EXE. Измененная таблица команд будет записа-

на в файл NEW_TABLE.EXE.

     При указании вводной таблицы команд с  квалификатором

/TABLE необходимо указать спецификацию выводного файла.  В

противном случае измененная таблица команд будет  записана

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

     4. $ SET COMMAND/TABLE=TEST_TABLE MYCOMS

     В примере 4 определения команд  из  файла  MYCOMS.CLD

добавляются  в  таблицу  команд,  содержащуюся   в   файле

TEST_TABLE.EXE. Измененная таблица команд  будет  записана

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


                          - 86 -

                      00152-01 92 09


заменять таблицу команд пользовательского процесса следует

только тогда, когда в новой таблице команд содержатся  все

необходимые для работы команды; команды DCL, скопированные

в таблицу команд пользовательского процесса при  регистра-

ции в системе, будут заменены другими.



     8.6. Квалификатор /TABLE



     В квалификаторе /TABLE задается таблица команд, кото-

рую необходимо изменить. Если  квалификатор  /TABLE  задан

без спецификации файла, то изменяется текущая таблица  ко-

манд пользовательского процесса. Если включена  специфика-

ция файла, то изменяется  указанная  таблица  команд.  Тип

файла по умолчанию - .EXE.

     При задании файла вводной таблицы при помощи квалифи-

катора /TABLE необходимо указать файл выводной  таблицы  с

помощью квалификатора /OUTPUT. В противном  случае,  изме-

ненная таблица команд будет записана вместо прежней табли-

цы команд пользовательского процесса.

     Квалификатор /TABLE может быть использован с квалифи-

каторами /DELETE и /REPLACE; по умолчанию действует квали-

фикатор /TABLE без спецификации вводного файла. Квалифика-

тор /TABLE не используется с квалификатором /OBJECT.

     Формат квалификатора /TABLE:

     $ SET COMMAND/TABLE[=спец_вводного_файла]

                        [спец_файла[,...]]

где  спец_вводного_файла - спецификация  вводного   файла,

содержащего таблицу команд, которую необходимо  отредакти-

ровать. Тип файла по умолчанию - .EXE;

     Спец_файла - спецификация файла  определения  команд.


                          - 87 -

                      00152-01 92 09


Тип файла по умолчанию - .CLD. В спецификации файла допус-

кается использование символа обобщения, например, звездоч-

ки (*).

     Примеры:

     1. $ SET COMMAND/TABLE TEST

     В примере 1 команды из файла TEST.CLD  добавляются  в

таблицу команд пользовательского процесса и результат воз-

вращается в пользовательский процесс. Если в квалификаторе

/TABLE не указана спецификация файла, то изменяется табли-

ца команд пользовательского процесса. Эта  команда  анало-

гична команде SET COMMAND TEST.

     2. $ SET COMMAND/TABLE=A/OUTPUT=B TEST

     В примере 2 определения команд из файла TEST.CLD  до-

бавляются в таблицу команд в файле A.EXE. Измененная  таб-

лица команд будет записана в файл B.EXE.

     При задании вводной таблицы команд с помощью квалифи-

катора /TABLE необходимо  указать  спецификацию  выводного

файла. В противном случае, измененная таблица команд будет

записана вместо прежней таблицы  команд  пользовательского

процесса.

     3. $ SET COMMAND/TABLE=A

     В примере 3 таблица команд  в  файле  A.EXE  заменяет

таблицу команд пользовательского процесса. Таблица  команд

пользовательского процесса может быть заменена только тог-

да, когда в новой таблице команд есть все необходимые  для

работы команды; команды DCL, скопированные в  таблицу  ко-

манд пользовательского процесса при регистрации в системе,

будут заменены.




                          - 88 -

                      00152-01 92 09


          9. Примеры использования программы CDU



     9.1. Добавление    команды    в    таблицу     команд

                   пользовательского процесса



     В примере показано, как добавить  команду  в  таблицу

команд  пользовательского  процесса  и  как   использовать

подпрограммы командного языка в образе,  вызываемом  новой

командой.

     В файле определения команд определяется новое  дейст-

вие SAMPLE:

     DEFINE VERB SAMPLE

            IMAGE "USERDISK:[MYDIR]SAMPLE"

            PARAMETER P1,LABEL=FILESPEC

            QUALIFIER EDIT

     Файл определения команд обрабатывается с помощью  ко-

манды:

     $ SET COMMAND SAMPLE

     По этой команде вызывается программа CDU для обработ-

ки файла определения команд SAMPLE.CLD и добавления дейст-

вия SAMPLE в таблицу  команд  пользовательского  процесса.

Измененная таблица возвращается  в  пользовательский  про-

цесс.

     В качестве примера программы пользователя использует-

ся  программа,  составленная  на   языке  программирования

бейсик. Ее имя - SAMPLE.BAS. В этой программе используются

подпрограммы интерфейса CLI$PRESENT  и  CLI$GET_VALUE  для

получения информации о командной  строке,  анализ  которой

выполнен интерпретатором команд.




                          - 89 -

                      00152-01 92 09


     Текст программы SAMPLE.BAS:

1  EXTERNAL INTEGER FUNCTION CLI$PRESENT,CLI$GET_VALUE

10 IF CLI$PRESENT('EDIT') AND 1%

   THEN

      PRINT '/EDIT IS PRESENT',A$

20 IF CLI$PRESENT('FILESPEC') AND 1%

   THEN

      CALL CLI$GET_VALUE('FILESPEC',A$)

      PRINT 'FILESPEC = ',A$

30 END

     Программу  SAMPLE.BAS  необходимо  скомпилировать   и

скомпоновать, после чего она может быть вызвана  действием

SAMPLE. В результате компилирования и компоновки получает-

ся выполняемый образ с именем SAMPLE.EXE.

     Образ SAMPLE.EXE вызывается командой:

     $ SAMPLE

     Интерпретатор анализирует эту команду так же, как  он

анализирует системные команды; то есть, интерпретатор про-

веряет корректность синтаксиса команды и после этого вызы-

вает образ SAMPLE.EXE для исполнения действия SAMPLE.

     Командная строка может  включать  любые  параметры  и

квалификаторы, определенные для действия SAMPLE, например:

     $ SAMPLE MYFILE

     После издания этой команды на экран выводится:

     FILESPEC = MYFILE

     Командная строка включает квалификатор /EDIT:

     $ SAMPLE MYFILE/EDIT

     В этом случае на экране появится:

     /EDIT IS PRESENT

     FILESPEC = MYFILE


                          - 90 -

                      00152-01 92 09


     Если будет указан  квалификатор,  который  недопустим

для данного действия, то появится сообщение интерпретатора

об ошибке, например:

     $ SAMPLE MYFILE/UPDATE

     %DCL-W-IVQUAL, UNRECOGNIZED QUALIFIER -

          CHECK VALIDITY, SPELLING, AND PLACEMENT \UPDATE\

     Если указано несколько параметров в командной  строке

для действия, с которым допускается только один  параметр,

то вновь появится сообщение об ошибке:

     $ SAMPLE MYFILE INFILE

     %DCL-W-MAXPARM, TOO MANY PARAMETERS - REENTER COMMAND

                            WITH FEWER PARAMETERS \INFILE\



     9.2. Создание об'ектного модуля таблицы для программы

                           пользователя



     В примере показано, как  создается  об'ектный  модуль

таблицы для программы пользователя.

     Показано также использование  подпрограмм  командного

языка для разбора командной строки  и  вызова  выполняемой

подпрограммы.

     При написании файла определения команд,  из  которого

будет создан об'ектный модуль, для каждого действия  необ-

ходимо указать не образ, а подпрограмму. Эти  подпрограммы

вызываются из программы  пользователя  при  обработке  ко-

мандных строк.

     Файл определения команд TEST.CLD содержит имена  трех

действий:

     1) SEND (посылка);

     2) SEARCH (поиск);


                          - 91 -

                      00152-01 92 09


     3) EXIT (выход).

     Каждое  действие  вызывает   подпрограмму   программы

USEREXAMP.BAS.

     Текст файла определения команд TEST.CLD:

     MODULE TEST_TABLE

     DEFINE VERB SEND

            ROUTINE SEND_COMMAND

            PARAMETER P1,LABEL=FILESPEC

            QUALIFIER EDIT

     DEFINE VERB SEARCH

            ROUTINE SEARCH_COMMAND

            PARAMETER P1,LABEL=SEARCH_STRING

     DEFINE VERB EXIT

            ROUTINE EXIT_COMMAND

     Из  файла   TEST.CLD   создается   об'ектный   модуль

TEST.OBJ:

     $ SET COMMAND/OBJECT TEST

     Составляется программа,  принимающая  действия  SEND,

SEARCH и EXIT. Модуль TEST.OBJ компонуется с об'ектным мо-

дулем составленной программы.

     В качестве программы пользователя, принимающей дейст-

вия SEND, SEARCH и EXIT, используется программа,  написан-

ная  на  языке   программирования   бейсик.   Ее   имя   -

USEREXAMP.BAS. В ней использованы подпрограммы  командного

языка CLI$DCL_PARSE и CLI$DISPATCH для  разбора  командных

строк и вызова соответствующих выполняемых подпрограмм.  В

ней  также   использованы   подпрограммы   CLI$PRESENT   и

CLI$GET_VALUE для получения информации о  командных  стро-

ках.




                          - 92 -

                      00152-01 92 09


     Текст программы USEREXAMP.BAS:

10  SUB SEND_COMMAND

    EXTERNAL INTEGER FUNCTION CLI$PRESENT,CLI$GET_VALUE

    PRINT 'SEND COMMAND'

    PRINT ''

20  IF CLI$PRESENT ('EDIT') AND 1%

    THEN

      PRINT '/EDIT IS PRESENT'

30  IF CLI$PRESENT ('FILESPEC') AND 1%

    THEN

       CALL CLI$GET_VALUE ('FILESPEC',A$)

       PRINT 'FILE_SPEC = ',A$

90  SUBEND

100 SUB SEARCH_COMMAND

    EXTERNAL INTEGER FUNCTION CLI$PRESENT,CLI$GET_VALUE

    PRINT 'SEARCH COMMAND'

    PRINT ''

110 IF CLI$PRESENT('SEARCH_STRING') AND 1%

    THEN

       CALL CLI$GET_VALUE('SEARCH_STRING',A$)

       PRINT 'SEARCH_STRING = ',A$

190 SUBEND

200 SUB EXIT_COMMAND

    EXTERNAL INTEGER FUNCTION SYS$EXIT

    CALL SYS$EXIT(1%)

290 SUBEND

1   EXTERNAL INTEGER FUNCTION CLI$DCL_PARSE,CLI$DISPATCH,

    LIB$GET_INPUT

    EXTERNAL INTEGER FUNCTION SEND_COMMAND,SEARCH_COMMAND,

    EXIT_COMMAND


                          - 93 -

                      00152-01 92 09


    EXTERNAL INTEGER TEST_TABLE

2   IF NOT CLI$DCL_PARSE(0,TEST_TABLE,LIB$GET_INPUT,

    LIB$GET_INPUT,'TEST> ') AND 1%

    THEN

       GOTO 2

3   PRINT ''

    CALL CLI$DISPATCH

    PRINT ''

    GOTO 2

    END

     Программу USEREXAMP.BAS необходимо  скомпилировать  и

затем скомпоновать с об'ектным модулем, созданным  по  ко-

манде SET COMMAND/OBJECT.

     Для компиляции вызывается компилятор:

     $ BASIC USEREXAMP

     Полученный об'ектный модуль USEREXAMP.OBJ компонуется

с модулем TEST.OBJ по команде:

     $ LINK USEREXAMP,TEST

     В    результате    получается    выполняемый    образ

USEREXAMP.EXE, который вызывается по команде:

     $ RUN USEREXAMP

     Программа USEREXAMP.EXE выдает  на  экран  подсказку:

     TEST>

     В ответ на подсказку можно издавать команды,  опреде-

ленные в файле TEST.CLD, например:

     TEST> SEND

     Программа  вызывает  подпрограмму  CLI$DCL_PARSE  для

разбора командной строки SEND. Поскольку команда SEND  яв-

ляется допустимой, то подпрограмма  CLI$DISPATCH  передаст

управление подпрограмме SEND_COMMAND.


                          - 94 -

                      00152-01 92 09


     Подпрограмма SEND_COMMAND выдает на экран текст:

     SEND COMMAND

     TEST>

     В команде SEND можно указать параметр:

     TEST> SEND MESSAGE.TXT

     Вновь вызывается подпрограмма  SEND_COMMAND,  которая

выдаст на экран текст:

     SEND COMMAND

     FILE_SPEC = MESSAGE.TXT

     TEST>

     В команде SEND можно указать квалификатор /EDIT:

     TEST> SEND/EDIT MESSAGE.TXT

     SEND COMMAND

     /EDIT IS PRESENT

     FILE_SPEC = MESSAGE.TXT

     TEST>

     Можно задать и другие допустимые  команды,  например,

SEARCH:

     TEST> SEARCH

     По команде SEARCH вызывается  подпрограмма,  отличная

от той, которая была вызвана по команде SEND. На экран вы-

водится текст:

     SEARCH COMMAND

     TEST>

     В отличие от команды SEND в команде SEARCH квалифика-

торы не допускаются. При попытке  указать  квалификатор  в

командной  строке  SEARCH,  например  /EDIT,  подпрограмма

CLI$DCL_PARSE выдаст сообщение об ошибке:

     %CLI-W-NOQUAL, QUALIFIER NOT ALLOWED ON THIS COMMAND

     Для выхода из программы  USEREXAMP  задается  команда


                          - 95 -

                      00152-01 92 09


EXIT:

     TEST> EXIT




                          - 96 -

                      00152-01 92 09


                 10. Сообщения пользователю



     Сообщения, выдаваемые программой CDU, пояснения к ним

и действия по восстановлению приведены в  документах  [1],

[2], [3].


                          - 97 -

                      00152-01 92 09










                Перечень ссылочных документов



     1. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  00152-01 97 02-1

     2. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  00152-01 97 02-2

     3. Операционная система МОС ВП.  Подсистема  управле-

ния. Сообщения системы и действия по восстановлению. Спра-

вочный материал  00152-01 97 02-3




                          - 97K -

                      00152-01 92 09





                          - 98K -

                      00152-01 92 09

   ------------------------------------------------------------
   I                                                          I
   I                  Лист регистрации изменений              I
   I                                                          I
   I----------------------------------------------------------I
   IНомера листов (страниц)IВсего IN     IВходящий IПодп.IДатаI
   I-----------------------IлистовIдоку- IN сопро- I     I    I
   IИ IИз- IЗа- IНо- IАнну-I(стра-Iмента Iводитель-I     I    I
   Iз Iме- Iме- Iвых Iлиро-Iниц)  I      Iного до- I     I    I
   Iм Iнен-Iнен-I    Iван- Iв до- I      Iкум. и   I     I    I
   I. Iных Iных I    Iных  Iкум.  I      Iдата     I     I    I
   I----------------------------------------------------------I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I

               
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!