
                           - 813 -

                        00152-01 97 06


       13.61. $GETLKIW  -   получить   информацию   о

              захвате и ждать


       Программа системного обслуживания $GETLKIW  возвращает

  информацию о базе данных захвата в операционной системе мос

  вп.

       Программа системного обслуживания $GETLKIW выполняется

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

  процессу вместе с запрошенной информацией.

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

  программу системного обслуживания  "получить  информацию  о

  захвате" ($GETLKI); $GETLKI возвращает управление  вызываю-

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

  мацию, не ожидая, когда данная информация будет возвращена.

       Во всех других аспектах  $GETLKIW  идентична  $GETLKI.

  Всю остальную информацию о программе системного  обслужива-

  ния $GETLKI можно найти в описании $GETLKIW (см.  подраздел

  2.5).

       Формат:

       SYS$GETLKIW     [EFN],LKIDADR,ITMLST,[IOSB],

                       [ASTADR],[ASTPRM],[NULLARG]



       13.62. $GETMSG - получить сообщение


       Программа системного обслуживания  $GETMSG  возвращает

  текст сообщения, связанного с  данным  кодом  идентификации

  сообщения. Сообщение может быть из файла системных  сообще-

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




                           - 814 -

                        00152-01 97 06


       Формат:

       SYS$GETMSG       MSGID,MSGLEN,BUFADR,[FLAGS]

                        ,[OUTADR]

       Аргументы:

       MSGID

       Использование в МОС ВП: COND_VALUE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Идентификатор сообщения, которое должно быть возвраще-

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

  содержащим значение идентификатора сообщения. Каждое  сооб-

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

  битах с 3 по 27 длинного  слова  значения  системного  кода

  состония.

       MSGLEN

       Использование в МОС ВП: WORD_UNSIGNED

       Тип:                    слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Длина  строки  сообщения,   возвращаемого   программой

  $GETMSG. Аргумент MSGLEN является адресом слова, в  которое

  программа GETMSG записывает данную длину.

       BUFADR

       Использование в МОС ВП: CHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только запись




                           - 815 -

                        00152-01 97 06


       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Буфер, принимающий строку сообщения.  Аргумент  BUFADR

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

  котором программа $GETMSG пишет  строку  сообщения.  Макси-

  мальный размер любой строки сообщения равен 256 байтам.

       FLAGS

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

  Аргумент FLAGS является длинным  словом,  содержащим  маску

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

  какая компонента сообщения должна возвращаться.

       Следующий список описывает значащие биты:

       0 - включить текст сообщения;

       1 - включить идентификатор сообщения;

       2 - включить индикатор серьезности;

       3 - включить имя средства.

       Если данный аргумент опущен, то при  вызове  программы

  из языков МАКРОАССЕМБЛЕР или БЛИСС, значение  по  умолчанию

  равно 15, то есть все флаги установлены  и  должны  возвра-

  щаться все компоненты сообщения. Если данный аргумент  опу-

  щен при вызове программы на языке фортран, то  значение  по

  умолчанию равно 0. Значение 0 заставляет программу  $GETMSG

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




                           - 816 -

                        00152-01 97 06


       OUTADR

       Использование в МОС ВП: VECTOR_BYTE_UNSIGNED

       Тип:                    байт (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Необязательная информация,  которую  может  возвращать

  программа  $GETMSG.  Аргумент   OUTADR   является   адресом

  4-байтового массива, в который данная программа  записывает

  следующую информацию:

       Байт 0 - зарезервирован;

       Байт 1 - счетчик аргументов FAO,  связанных  с  данным

  сообщением;

       Байт 2 - заданное пользователем значение  в  сообщении

  (может отсутствовать);

       Байт 3 - зарезервирован.

       Описание

       Операционная система МОС ВП использует данную програм-

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

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

  данных сообщений.

       Идентификаторы сообщений  соответствуют  символическим

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

  компонентами. Например, SS$ - код для  программ  системного

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

  данными СУД-32 и т.д.








                           - 817 -

                        00152-01 97 06


       Если в аргументе FLAGS установлены все биты, то  прог-

  рамма $GETMSG возвращает строку в следующем формате:

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

                                                сообщения

       Информация, содержащаяся в сегментах строки следующая:

  средство -

       Идентифицирует компоненту операционной системы МОС ВП;

  серьезность -

       Код серьезности (три младших бита значения  кода  сос-

       тояния);

  идентификатор -

       Уникальный идентификатор сообщения;

  текст-сообщения -

       Текст данного сообщения.

       Например,   если   аргумент   MSGID   имеет   значение

  MSGID=#SS_DUPLNAM,  то  программа  системного  обслуживания

  $GETMSG возвращает следующую строку:

       %SYSTEM-F-DUPLNAM,DUPLICATE PROCESS NAME

       Данная программа системного обслуживаня  не  проверяет

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

  щать  значение  кода  состояния  SS$_INSFARG  (недостаточно

  аргументов). Таким образом, необходимо обязательно задавать

  нужное число аргументов.

       Текст сообщения,  связанный  с  конкретным  32-битовым

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

  мест. Программа выполняет следующие  шаги  для  обнаружения

  текста сообщения:




                           - 818 -

                        00152-01 97 06


       1) просматриваются все секции сообщений,  скомпонован-

  ные с образом, выполняющимся в настоящий  момент,  с  целью

  поиска связанной информации;

       2) если данная информация не  найдена,  то  просматри-

  вается файл постоянных сообщений для процессов. (Файл  пос-

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

  MESSAGE);

       3) если данная информация не найдена,  просматривается

  файл общесистемных сообщений;

       4) если данная информация не найдена, то в регистре R0

  возвращается значение кода  состояния  SS$_MSGNOTFND,  а  в

  буфер вызывающего процесса возвращается сообщение в следую-

  щей форме:

       %средство-серьезность-NONAME,MESSAGE=XXXXXXXX[HEX]

           (средство=N, сообщение=N[DEC])

       Возвращаемые значения кода состояния:

       SS$_NORMAL     - программа   системного   обслуживания

                      успешно завершилась;

       SS$_BUFFEROVF  - программа   системного   обслуживания

                      успешно завершилась. Возвращенная стро-

                      ка переполнила предоставленный буфер  и

                      была усечена;

       SS$_MSGNOTFND  - программа   системного   обслуживания

                      успешно завершилась,  однако  указанный

                      код сообщения не найден и  возвращается

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






                           - 819 -

                        00152-01 97 06


       Пример.

  CODE:    .LONG    SS$_DUPLNAM  ;идентификатор

                                 ;сообщения

  LENGTH:  .WORD    0

  BUFDESC:

           .LONG    256

           .ADDRESS -

                   BUFFER

  BUFFER:  .BLKB   256

  FLAGS:   .WORD   ^B0001        ;флаги сообщения  -

                                 ;только текст

           $GETMSG_S -

                   MSGID=CODE, -

                   MSGLEN=LENGTH, -

                   BUFADR=BUFDESC, -

                   FLAGS=FLAGS




       В данном примере показан фрагмент  программы,  который

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

  щей текст, связанный с системным кодом SS$DUPLNAM.

       Программа $GETMSG возвращает следующую строку:


       DUPLICATE PROCESS NAME (повторяющееся имя процесса)












                           - 820 -

                        00152-01 97 06


       13.63. $GETQUI  -   получить   информацию   об

              очереди


       Программа системного обслуживания  $GETQUI  возвращает

  информацию об очередях и заданиях, инициируемых  из  данных

  очередей.  Программы  системного  обслуживания  $GETQUI   и

  $SNDJBC  вместе  обеспечивают  пользователя  интерфейсом  с

  контроллером заданий операционной системы МОС  ВП,  который

  является программой управления очередями и учетной информа-

  цией.

       Программа $GETQUI завершается асинхронно, то есть  она

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

  запроса в очередь, не ожидая завершения операции.

       Для синхронного завершения следует использовать  прог-

  рамму системного обслуживания "получить информацию об  оче-

  реди и  ждать"  ($GETQUIW).  Программа  $GETQUIW  полностью

  идентична программе $GETQUI за исключением того, что  прог-

  рамма $GETQUIW возвращает управление  вызывающему  процессу

  после завершения операции (см. подраздел 2.5).

       Формат:

       SYS$GETQUI [EFN],FUNC,[NULLARG],[ITMLST],

                  [IOSB],[ASTADR],[ASTPRM]

       Аргументы:

       EFN

       Использование в МОС ВП:  EF_NUMBER

       Тип:                     длинное слово (без знака)

       Доступ:                  только запись

       Механизм:                по значению



                           - 821 -

                        00152-01 97 06


       Номер флага  события,  который  устанавливается  после

  завершения программы $GETQUI. Аргумент EFN является длинным

  словом, содержащим данный номер. Аргумент EFN является нео-

  бязательным аргументом.

       Когда запрос ставится  в  очередь,  программа  $GETQUI

  сбрасывает указанный флаг события (или флаг события 0, если

  не задан аргумент EFN).  Затем  после  завершения  операции

  программа $GETQUI устанавливает указанный флаг события (или

  флаг события 0).

       FUNC

       Использование в МОС ВП:  FUNCTION_CODE

       Тип:                     слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Код функции, указывающий, какую функцию должна  выпол-

  нять программа  $GETQUI.  Аргумент  FUNC  является  словом,

  содержащим код функции.

       Для одного вызова программы $GETQUI можно задать толь-

  ко один код функции. Большинство кодов  функций  требуют  и

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

  дается при вызове программы. Данная информация передается с

  помощью аргумента ITMLST, который задает список  из  одного

  или более дескрипторов элементов. Каждый дескриптор элемен-

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

  вает конкретную информацию, которую дожна возвращать  прог-

  рамма $GETQUI, либо как-то влияет на  действия,  задаваемые

  кодом функции.




                           - 822 -

                        00152-01 97 06


       В следующем списке перечислены все коды функций,  опи-

  саны действия, которые они задают, и указаны относящиеся  к

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

  дено в пункте, касающемся аргумента ITMLST.

       Коды функций программы $GETQUI и допустимые коды  эле-

  ментов:

  QUI$_CANCEL_OPERATION -

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

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

       ванную предыдущим вызовом программы $GETQUI,  освобож-

       дая при этом блок контекста GETQUI (GQC), который сис-

       тема поддерживает для процесса пользователя. Поскольку

       в любой момент времени может быть только одна  необра-

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

       необходимости задавать какие-либо коды элементов.

       Когда пользователь вызывает программу  $GETQUI,  чтобы

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

  информации о характеристиках, формах или очередях  (и  свя-

  занных с ними заданиях и файлах), контроллер заданий  между

  вызовами формирует блоки, которые  указывают  на  следующий

  об'ект в  случайной  последовательности  запросов.  Система

  сохраняет данную информацию до тех пор, пока:

       1) пользователь вызвал программу $GETQUI, чтобы прове-

  рить каждый об'ект в последовательности;

       2) процесс пользователя был прекращен;

       3) пользователь явно прекратил операцию последователь-

  ностью    запросов,    используя     функциональный     код




                           - 823 -

                        00152-01 97 06


  QUI$_CANCEL_OPERATION.

       Если вызовы программы $GETQUI обнаружили все об'екты в

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

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

  вательностью запросов. Это освобождает ресурсы  контроллера

  заданий и позволяет пользователю инициировать другую опера-

  цию $GETQUI;

  QUI$_DISPLAY_CHARACTERISTIC -

       Данный запрос  возвращает  информацию  об  определении

       конкретной характеристики  или  определении  следующей

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

       сов. Успешная  операция  последовательностью  запросов

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

       $GETQUI вернет информацию обо всех определениях харак-

       теристик, включенных в  последовательность.  Программа

       системного обслуживания $GETQUI сигнализирует о завер-

       шении данной  последовательности  запросов,  возвращая

       значение кода состояния JBC$_NOMORECHAR в  блоке  сос-

       тояния ввода-вывода. Если программа системного  обслу-

       живания  $GETQUI  не  находит  ни  одного  определения

       характеристики, то она возвращает  в  блоке  состояния

       ввода-вывода значение кода состояния JBC$_NOSUCHCHAR.














                           - 824 -

                        00152-01 97 06


       Необходимо задать один из следующих входных кодов эле-

  мента. (Можно задать оба кода):

       1) QUI$_SEARCH_NAME;

       2) QUI$_SEARCH_NUMBER.

       Можно задать следующий входной код элемента:

       QUI$_SEARCH_FLAGS.

       Можно задать следующие выходные кода элемента:

       1) QUI$_CHARACTERISTIC_NAME;

       2) QUI$_CHARACTERISTIC_NUMBER;

  QUI$_DISPLAY_FILE -

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

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

       лах. Это означает, что  пользователь  перед  тем,  как

       сделать  вызов  программы  $GETQUI,  чтобы   запросить

       информацию о файле,  уже  сделал  два  предварительных

       вызова данной  программы,  чтобы  установить  очередь,

       контекст заданий и задание,  которые  содержат  файлы,

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

       системного обслуживания $GETQUI возвращает  информацию

       о следующем файле, определенном для текущего контекста

       задания. Программа $GETQUI сигнализирует, что она вер-

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

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

       состояния   JBC$_NOMOREFILE    в    блоке    состояния

       ввода-вывода.

       Если текущий контекст задания не содержит  файлов,  то

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




                           - 825 -

                        00152-01 97 06


  ние кода состояния JBC$_NOSUCHFILE. Пакетное задание  может

  вызвать программу $GETQUI,  чтобы  запросить  информацию  о

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

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

  обслуживания для установления очереди и контекста  задания.

  Чтобы это выполнить, пакетное  задание  определяет  возмож-

  ность       QUI$V_SEARCH_THIS_JOB       кода       элемента

  QUI$_SEARCH_FLAGS. Операционная система МОС ВП не сохраняет

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

  ве.

       Можно задать следующий входной код элемента.

            QUI$_SEARCH_FLAGS.

       Можно задать следующие выходные коды:

       1) QUI$_FILE_COPIES;

       2) QUI$_FILE_COPIES_DONE;

       3) QUI$_FILE_FLAGS;

       4) QUI$_FILE_SETUP_MODULES;

       5) QUI$_FILE_SPECIFICATION;

       6) QUI$_FILE_STATUS;

       7) QUI$_FIRST_PAGE;

       8) QUI$_LAST_PAGE;

  QUI$_DISPLAY_FORM -

       Данный запрос возвращает информацию о конкретном опре-

       делении формы или следующем определении формы в опера-

       ции последовательностью запросов. Успешная операция  с

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

       завершается, когда программа $GETQUI возвращает инфор-




                           - 826 -

                        00152-01 97 06


       мацию обо всех определениях формы включенных в  после-

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

       вания $GETQUI сигнализирует о завершении данной после-

       довательности запросов,  возвращая  в  блок  состояния

       ввода-вывода значение кода завершения JBC$_NOMOREFORM.

       Если программа не находит ни одного определения формы,

       то она возвращает в блоке состояния ввода-вывода  зна-

       чение кода состояния JBC$_NOSUCHFORM.

       Необходимо задать один из следующих входных  элементов

  кода. (Можно задать оба данных кода):

       1) QUI$_SEARCH_NAME;

       2) QUI$_SEARCH_NUMBER.

       Можно задать следующий входной код элемента:

       QUI$_SEARCH_FLAGS.

       Можно задать следующие выходные коды элементов:

       1) QUI$_FORM_DESKRIPTION;

       2) QUI$_FORM_FLAGS;

       3) QUI$_FORM_LENGTH;

       4) QUI$_FORM_MARGIN_BOTTOM;

       5) QUI$_FORM_MARGIN_LEFT;

       6) QUI$_FORM_MARGIN_RIGTH;

       7) QUI$_FORM_MARGIN_TOP;

       8) QUI$_FORM_NAME;

       9) QUI$_FORM_NUMBER;

       10) QUI$_FORM_SETUP_MODULES;

       11) QUI$_FORM_STOCK;

       12) QUI$_FORM_WIDTH;




                           - 827 -

                        00152-01 97 06


       13) QUI$_PAGE_SETUP_MODULES;

  QUI$_DISPLAY_JOB -

       Данный запрос обычно делается как часть последователь-

       ности операций с очередями и заданиями, то есть  перед

       тем как сделать вызов программы $GETQUI, чтобы  запро-

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

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

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

       ном случае программа возвращает информацию о следующем

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

       Операция QUI$_DISPLAY_FILE  также  устанавливает  кон-

       текст     задания     для     последующей     операции

       QUI$_DISPLAY_JOB. Данный контекст задания  сохраняется

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

       мы  $GETQUI   с   кодами   функций   QUI$_DISPLAY_JOB,

       QUI$_DISPLAY_QUEUE или QUI$_CANCEL_OPERATION. Програм-

       ма сигнализирует, что она вернула информацию обо  всех

       заданиях, содержащихся в  текущем  контексте  очереди,

       возвращая в блоке состояния ввода-вывода значение кода

       состояния JBC$_NOMOREFILE. Если текущий контекст  оче-

       реди не содержит заданий, то  программа  возвращает  в

       блок состояния ввода-вывода  значение  кода  состояния

       JBC$_NOSUCHFILE. Пакетное задание может сделать  вызов

       программы системного обслуживания $GETQUI, чтобы  зап-

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

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

       очереди. Чтобы выполнить это, пакетное задание  должно




                           - 828 -

                        00152-01 97 06


       задать возможность QUI$V_SEARCH_THIS_JOB кода элемента

       QUI$_SEARCH_FLAGS. Операционная система МОС ВП не сох-

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

       таком вызове.

       Можно задать следующий входной код элемента:

            QUI$_SEARCH_FLAGS.

       Можно указать следующие входные коды элементов:

       1) QUI$_ACCOUNT_NAME;

       2) QUI$_AFTER_TIME;

       3) QUI$_CHARACTERISTICS;

       4) QUI$_CHECKPOINT_DATA;

       5) QUI$_CLI;

       6) QUI$_COMPLETED_BLOCKS;

       7) QUI$_CONDITION_VECTOR;

       8) QUI$_CPU_LIMIT;

       9) QUI$_ENTRY_NUMBER;

       10) QUI$_FORM_NAME;

       11) QUI$_INTERVENING_BLOCKS;

       12) QUI$_INTERVENING_JOBS;

       13) QUI$_JOB_COPIES_DONE;

       14) QUI$_JOB_FLAGS;

       15) QUI$_JOB_NAME;

       16) QUI$_JOB_SIZE;

       17) QUI$_JOB_STATUS;

       18) QUI$_LOG_QUEUE;

       19) QUI$_LOG_SPECIFICATION;

       20) QUI$_NOTE;




                           - 829 -

                        00152-01 97 06


       21) QUI$_OPERATOR_REQUEST;

       22) QUI$_PARAMETER_1 до 8;

       23) QUI$_PRIORITY;

       24) QUI$_QUEUE_NAME;

       25) QUI$_REQUEUE_QUEUE_NAME;

       25) QUI$_SUBMISSION_TIME;

       27) QUI$_UIC;

       28) QUI$_USERNAME;

       29) QUI$_WSDEFAULT;

       30) QUI$_WSEXTENT;

       31) QUI$_WSQUOTA;

  QUI$_DISPLAY_QUEUE -

       Данный запрос возвращает информацию о конкретном опре-

       делении очереди или следующем  определении  очереди  в

       операции с последовательностью  запросов.  Если  вызов

       успешен, то данная операция также  устанавливает  кон-

       текст     очереди     для     последующей     операции

       QUI$_DISPLAY_JOB. Установленный контекст очереди  сох-

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

       программы $GETQUI с кодами функций  QUI$_DISPLAY_QUEUE

       или QUI$_CANCEL_OPERATION. Программа $GETQUI  сигнали-

       зирует, что она вернула информацию обо всех  очередях,

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

       возвращая в блоке состояния ввода-вывода значение кода

       состояния JBC$_NOMOREQUE. Если  не  найдено  ни  одной

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

       ввода-вывода значение кода  состояния  JBC$_NOSUCHQUE.




                           - 830 -

                        00152-01 97 06


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

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

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

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

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

       QUI$V_SEARCH_THIS_JOB кода элемента QUI$_SEARCH_FLAGS.

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

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

       Необходимо задать следующий входной код элемента:

            QUI$_SEARCH_NAME.

       Можно задать следующий входной код элемента:

            QUI$_SEARCH_FLAGS.

       Можно задать следующие выходные коды элементов:

       1) QUI$_ASSIGNED_QUEUE_NAME;

       2) QUI$_BASE_PRIORITY;

       3) QUI$_CHARACTERISTICS;

       4) QUI$_CPU_DEFAULT;

       5) QUI$_CPU_LIMIT;

       6) QUI$_DEVICE_NAME;

       7) QUI$_FORM_NAME;

       8) QUI$_GENERIC_TARGET;

       9) QUI$_JOB_LIMIT;

       10) QUI$_JOB_RESET_MODULES;

       11) QUI$_JOB_SIZE_MAXIMUM;

       12) QUI$_JOB_SIZE_MINIMUM;

       13) QUI$_LIBRARY_SPECIFICATION;

       14) QUI$_OWNER_UIC;




                           - 831 -

                        00152-01 97 06


       15) QUI$_PROCESSOR;

       16) QUI$_PROTECTION;

       17) QUI$_QUEUE_FLAGS;

       18) QUI$_QUEUE_NAME;

       19) QUI$_QUEUE_STATUS;

       20) QUI$_SCSNODE_NAME;

       21) QUI$_WSDEFAULT;

       22) QUI$_WSEXTENT;

       23) QUI$_WSQUOTA;

  QUI$_TRANSLATE_QUEUE -

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

       эквивалентное имя для данной очереди.  Логическое  имя

       задается кодом QUI$_SEARCH_NAME. Трансляция выполняет-

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

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

       допустимое системой.

       Необходимо задать следующий входной код элемента:

       QUI$_SEARCH_NAME.

       Можно указать следующий выходной код элемента:

            QUI$_QUEUE_NAME.

       NULLARGE

       Использование в МОС ВП: NULL_ARG

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Аргумент, занимающий место.






                           - 832 -

                        00152-01 97 06


       ITMLST

       Использование в МОС ВП: ITEM_LIST_3

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Список элементов, содержащий информацию, которая долж-

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

  том FUNC. Аргумент ITMLST является адресом  данного  списка

  элементов. Список элементов состоит  из  одного  или  более

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

  мента. Список элементов завершается кодом  элемента  0  или

  длинным словом содержащим 0. Структура дескриптора элемента

  описана на рис.67.



                 Структура дескриптора элемента

       31                        15                         0
       ------------------------------------------------------
       !      Код элемента       !       Длина буфера       !
       ------------------------------------------------------
       !                   Адрес буфера                     !
       ------------------------------------------------------
       !              Адрес возвращаемой длины              !
       ------------------------------------------------------

                         Рис. 67


       Поля дескрипторов элементов программы $GETQUI:

       1) длина буфера - слово, задающее длину буфера.

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

  должна использоваться  программой  $GETQUI,  либо  получает

  информацию от  данной  программы.  Требуемая  длина  буфера

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




                           - 833 -

                        00152-01 97 06


  в описании каждого кода элемента;

       2) код элемента  -  слово,  содержащее  код  элемента,

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

  раммой $GETQUI, либо получаемой от данной программы. Каждый

  код элемента имеет символическое имя. Данные  символические

  имена определяются  макрокомандой  $QUIDEF  и  имеет  форму

  QUI$_код.

       Имеется два типа кодов элементов:

       1) код входного значения.

       Программа $GETQUI имеет всего только три кода  элемен-

  тов входного значения: QUI$_SEARCH_NAME, QUI$_SEARCH_NUMBER

  и QUI$_SEARCH_FLAGS. Данные коды элементов задают  имя  или

  номер об'екта, для которого программа должна вернуть инфор-

  мацию, и указывают пределы,  в  которых  программа  $GETQUI

  должна искать данные  об'екты.  Большинство  кодов  функций

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

  ного значения. В описании каждого кода функции  перечислены

  обязательные и необязательные коды элементов входного  зна-

  чения.

       Для кодов  элементов  входного  значения  поля  "длина

  буфера" и "адрес буфера" дескриптора элемента  должны  быть

  ненулевыми. Поле "адрес  возвращаемой  длины"  должно  быть

  нулевым. Конкретные требования к длине буфера  приведены  в

  описании каждого кода элемента;










                           - 834 -

                        00152-01 97 06


       2) код выходного значения.

       Коды элементов  выходного  значения  задают  буфер,  в

  который программа $GETQUI возвращает информацию. Для данных

  кодов поля "длина буфера" и "адрес буфера" дескриптора эле-

  мента должны быть ненулевыми. Поле "адрес возвращаемой дли-

  ны" может быть нулевым или ненулевым. Конкретные требования

  к длине буфера приведены  в  описании  каждого  элементного

  кода.

       Некоторые коды элементов задают имя очереди, имя формы

  или имя характеристики для программы $GETQUI  или  требуют,

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

  кодов элементов буфер должен задавать или быть готовым при-

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

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

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

  писные буквы, строчные буквы (которые преобразуются в  про-

  писные), цифры, знак денежной единицы ($) и знак  подчерки-

  вания (_);

       3) адрес буфера.

       Который задает или получает информацию;

       4) адрес возвращаемой длины.

       Адрес слова, в которое  помещается  длина  информации,

  возвращаемой программой $GETQUI.

       Коды элементов программы $GETQUI:

  QUI$_ACCOUNT_NAME -

       Если задан данный код элемента, то  программа  возвра-

       щает 8-байтовое учетное имя владельца указанного зада-




                           - 835 -

                        00152-01 97 06


       ния. (QUI$_DISPLAY_JOB код элемента);

  QUI$_AFTER_TIME -

       Если задан данный код элемента, то  программа  возвра-

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

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

       выполняться указанное задание.  (QUI$_DISPLAY_JOB  код

       элемента);

  QUI$_ASSIGNED_QUEUE_NAME -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа  возвращает  в  виде

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

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

       $GETQUI. Поскольку имя очереди может  включать  до  31

       символа, то поле "длина буфера"  дескриптора  элемента

       должно задавать 31 байт;

  QUI$_BASE_PRIORITY -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа возвращает в длинном

       слове значение от 0 до  15,  означающее  приоритет,  с

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

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

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

  QUI$_CHARACTERISTIC_NAME -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_CHARACTERISTIC), то программа  возвращает

       в длинном слове значение в  диапазоне  от  0  до  127,

       номер указанной характеристики;




                           - 836 -

                        00152-01 97 06


  QUI$_CHARACTERISTICS -

       Если  задан   данный   код   элемента   (для   функций

       QUI$_DISPLAY_JOB,  QUI$_DISPLAY_QUEUE),  то  программа

       возвращает  в  виде  128-битовой  строки  (16-байтовое

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

       или заданием. Каждый установленный бит в  маске  битов

       представляет номер характеристики в диапазоне от 0  до

       127;

  QUI$_CHECKPOINT_DATA -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB),  то  программа  возвращает  в  виде

       строки   символов   значение   символического    имени

       BATCH$RESTART языка DCL при повторном старте указанно-

       го пакетного задания. Поскольку значение данного  сим-

       волического имени может включать в себя до 255  симво-

       лов, то в поле  "длина  буфера"  дескриптора  элемента

       следует задавать 255 байтов;

  QUI$_CLI -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  имя  файла

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

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

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

       SYS$SYSTEM и тип файла EXE. Поскольку имя файла  может

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

       ра" дескриптора элемента следует задавать  39  байтов.

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




                           - 837 -

                        00152-01 97 06


  QUI$_COMPLETED_BLOCKS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

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

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

       задания на печать. Данный код элемента относится толь-

       ко к заданиям на печать;

  QUI$_CONDITION_VECTOR -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

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

  QUI$_CPUDEFAULT -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа возвращает в длинном

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

       тый по умолчанию лимит времени центрального  процессо-

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

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

       мым очередям;

  QUI$_CPU_LIMIT -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB, DISPLAY_QUEUE), то программа возвра-

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

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

       процессора, заданный для указанного задания или очере-

       ди в 10-миллисекундных интервалах. Данный код относит-

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




                           - 838 -

                        00152-01 97 06


       очередям;

  QUI$_DEVICE_NAME -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то  программа  возвращает  строку

       символов длиной от 1 до 31, представляющее устройство,

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

  QUI$_ENTRY_NUMBER -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

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

       элемента очереди для указанного задания;

  QUI$_FILE_COPIES -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FILE), то программа возвращает в  длинном

       слове десятичное значение от  1  до  255,  указывающее

       сколько раз необходимо обрабатывать данный файл.  Дан-

       ный код относится только к выходным исполняемым очере-

       дям;

  QUI$_FILE_FLAGS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FILE), то программа возвращает в  длинном

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

       выбранные для указанного файла. Каждому варианту обра-

       ботки соответствует один бит. Если  программа  $GETQUI

       устанавливает бит,  то  файл  обрабатывается  согласно

       соответствующему варианту обработки. Каждый бит в век-

       торе имеет символическое имя.




                           - 839 -

                        00152-01 97 06


       Символические   имена   (определяются    макрокомандой

  $QUIDEF):

       1) QUI$V_FILE_BURST - страницы пакетов и флагов должны

  быть напечатаны перед файлом;

       2) QUI$V_FILE_DELETE - файл должен быть  удален  после

  выполнения запроса;

       3) QUI$V_FILE_DOUBLE_SPACE - симбионт форматирует файл

  с удвоением пробелов;

       4) QUI$V_FLAG - страница флагов должна быть напечатана

  перед файлом;

       5) QUI$V_FILE_TRAILER - дополнительная страница должна

  быть напечатана после файла;

       6) QUI$V_FILE_PAGE_HEADER - заголовок страницы  должен

  печататься на каждой выводимой странице;

       7) QUI$V_FILE_PAGINATE - симбионт  нумерует  страницы,

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

  ницы формы;

       8) QUI$V_FILE_PASSALL - симбионт  печатает  файл  в  в

  режиме PASSALL;

  QUI$_FILE_SETUP_MODULES -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FILE),  то  программа  возвращает  список

       имен (через запятую) текстовых модулей, которые должны

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

       распечатаны на  печатающем  устройстве  перед  печатью

       указанного  файла.  Поскольку  имя  текстового  модуля

       может включать в себя до 31 символа  и  отделяться  от




                           - 840 -

                        00152-01 97 06


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

       "длина буфера" дескриптора элемента должно задавать 32

       байта для каждого возможного текстового модуля. Данный

       код имеет смысл только для выходных исполняемых очере-

       дей;

  QUI$_FILE_SPECIFICATION -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FILE), то программа возвращает  полностью

       квалифицированную  спецификацию  файла,  информацию  о

       котором запрашивает пользователь. Поскольку специфика-

       ция файла может включать в себя до  255  символов,  то

       поле "длина буфера" дескриптора элемента должно  зада-

       вать 255 байтов;

  QUI$_FILE_STATUS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FILE), то программа возвращает информацию

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

       длинное слово. Каждый код состояния файла  представлен

       одним битом. Каждый бит в векторе имеет свое  символи-

       ческое имя.

       Символические   имена   (определяются    макрокомандой

  $QUIDEF):

       1) QUI$V_FILE_CHECKPOINT - файл копируется в контроль-

  ных точках;

       2) QUI$V_FILE_EXECUTING - файл обрабатывается;

  QUI$_FIRST_PAGE -

       Если  задан   данный   код   элемента   (для   функции




                           - 841 -

                        00152-01 97 06


       QUI$_DISPLAY_FILE), то программа возвращает в  длинном

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

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

       файла. Данный код относится только к  выходным  испол-

       няемым очередям;

  QUI$_FORM_DESCRIPTION -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то  программа  возвращает  в  виде

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

       операторов указанную форму. Поскольку данная текстовая

       строка может включать в себя до 255 символов, то  поле

       "длина буфера" дескриптора  элемента  должно  задавать

       255 байтов;

  QUI$_FORM_FLAGS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то программа возвращает в  длинном

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

       выбранные для указанной формы. Каждому варианту  обра-

       ботки соответствует один бит. Если  программа  $GETQUI

       устанавливает какой-то бит,  то  форма  обрабатывается

       согласно соответствующему варианту  обработки.  Каждый

       бит в векторе имеет свое символическое имя.

       Символические   имена   (определяются    макрокомандой

  $QUIDEF):

       1) QUI$V_FORM_SHEET_FEED -  симбионт  делает  паузу  в

  конце каждой физической страницы, так  что  можно  вставить

  новый лист бумаги;




                           - 842 -

                        00152-01 97 06


       2) QUI$V_FORM_TRUNCATE - печатающее устройство  отвер-

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

  вой границы;

       3) QUI$V_FORM_WRAP - печатающее устройство печатает на

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

  правой границы;

  QUI$_FORM_LENGTH -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то программа возвращает в  длинном

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

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

       только к выходным очередям;

  QUI$_FORM_MARGIN_BOTTOM -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM),то программа возвращает  в  длинном

       слове десятичное значение, представляющее нижнюю  гра-

       ницу указанной формы в строках;

  QUI$_FORM_MARGIN_LEFT(RIGHT) -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то программа возвращает в  длинном

       слове десятичное значение, представляющее левую  (пра-

       вую) границу указанной формы в символах;

  QUI$_FORM_MARGIN_TOP -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то программа возвращает в  длинном

       слове десятичное значение, представляющее верхнюю гра-

       ницу указанной формы в строках;




                           - 843 -

                        00152-01 97 06


  QUI$_FORM_NAME -

       Если  задан   данный   код   элемента   (для   функций

       QUI$_DISPLAY_FORM,                   QUI$_DISPLAY_JOB,

       QUI$_DISPLAY_QUEUE), то программа  возвращает  в  виде

       строки символов имя указанной формы или формы, связан-

       ной с указанным заданием или очередью.  Поскольку  имя

       формы может включать в себя до  31  символа,  то  поле

       "длина буфера" дескриптора элемента должно задавать 31

       байт;

  QUI$_FORM_NUMBER -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то программа возвращает в  длинном

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

       занной формы;

  QUI$_FORM_SETUP_MODULES -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM),  то  программа  возвращает  список

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

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

       ройствами и распечатаны на печатающем устройстве перед

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

       тового модуля может включать в себя до 31 символа плюс

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

       го модуля, то поле "длина буфера" дескриптора элемента

       должно задавать 32 байта для каждого возможного  текс-

       тового модуля.  Данный  код  имеет  смысл  только  для

       выходных исполняемых очередей;




                           - 844 -

                        00152-01 97 06


  QUI$_FORM_STOCK -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то  программа  возвращает  в  виде

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

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

       может включать в себя до 31 символа,  то  поле  "длина

       буфера" дескриптора элемента должно задавать 31 байт;

  QUI$_FORM_WIDTH -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM), то программа возвращает в  длинном

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

       занной формы в символах;

  QUI$_GENERIC_TARGET -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то  программа  возвращает  список

       имен (через  запятую)  исполняемых  очередей,  которым

       разрешено принимать работу из указанной общей очереди.

       Поскольку имя очереди может включать в себя до 31 сим-

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

       очереди, то поле "длины буфера"  дескриптора  элемента

       должно задавать 32 байта. Общая очередь может посылать

       работу максимум 124 исполняемым очередям.  Данный  код

       имеет смысл только для общих очередей;

  QUI$_INTERVENING_BLOCKS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

       слове десятичное значение, представляющее  число  бло-




                           - 845 -

                        00152-01 97 06


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

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

       только для выходных исполняемых очередей;

  QUI$_INTERVENING_JOBS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

       слове десятичное значение, представляющее число  зада-

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

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

       только для выходных исполняемых очередей;

  QUI$_JOB_COPIES -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

       слове десятичное число, означающее сколько раз  должно

       быть повторено указанное задание на печать;

  QUI$_JOB_FLAGS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

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

       выбранные для указанного задания. Каждый вариант обка-

       ботки представлен одним битом. Если программа  $GETQUI

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

       согласно соответствующему варианту  обработки.  Каждый

       бит в векторе имеет свое символическое имя.










                           - 846 -

                        00152-01 97 06


       Символические   имена   (определяются    макрокомандой

  $QUIDEF):

       1) QUI$V_JOB_CPU_LIMIT -  для  данного  задания  задан

  лимит времени центрального процессора;

       2) QUI$V_JOB_FILE_BURST  -  каждому  файлу  в  задании

  предшествуют страницы пакета и флагов;

       3) QUI$V_JOB_FILE_BURST_ONE - страницы пакета и флагов

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

       4) QUI$V_JOB_FILE_FLAG - страница флагов  предшествует

  каждому файлу в задании;

       5) QUI$V_JOB_FILE_FLAG_ONE - страница флагов предшест-

  вует только первой копии первого файла в задании;

       6) QUI$V_JOB_FILE_PAGINATE - симбионт нумерует  выход-

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

  нет нижней границы формы;

       7) QUI$V_JOB_FILE_TRAILER  -  дополнительная  страница

  следует за каждым файлом в задании;

       8) QUI$V_JOB_FILE_TRAILER_ONE - дополнительная страни-

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

  задании.

       9) QUI$V_JOB_LOG_DELETе - регистрационный журнал  уда-

  ляется после того, как он будет напечатан.

       10) QUI$V_JOB_LOG_NULL - регистрационный файл не  соз-

  дан;

       11) QUI$V_JOB_LOG_SPOOL - регистрационный файл задания

  поставлен в очередь для печати после завершения задания;

       12) QUI$V_JOB_LOWERCASE - задание должно печататься на




                           - 847 -

                        00152-01 97 06


  устройстве печати, которое может печатать как прописные так

  и строчные буквы;

       13) QUI$V_JOB_NOTIFY - когда выполнение задания завер-

  шается или отменяется, на терминал отправляется сообщение;

       14)  QUI$V_JOB_RESTART  -  после  сбоя  системы  будет

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

  тавлено в очередь во время выполнения;

       15) QUI$V_JOB_WSDEFAULT - для  задания  указан  размер

  рабочего набора, принятый по умолчанию.

       16) QUI$V_JOB_WSEXTENT - для  задания  указан  экстент

  рабочего набора;

       17) QUI$V_JOB_WSQUOTA  -  для  задания  указана  квота

  рабочего набора;

  QUI$_JOB_LIMIT -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE),  то  программа  возвращает  число

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

       занной очереди. Данное число  возвращается  в  длинном

       слове в виде десятичного значения в диапазоне от 1  до

       255. Данный код относится только к пакетным  исполняе-

       мым очередям;

  QUI$_JOB_NAME -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB),  то  программа  возвращает  в  виде

       строки символов имя указанного задания. Поскольку  имя

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

       "длина буфера" дескриптора элемента должно задавать 39




                           - 848 -

                        00152-01 97 06


       байтов;

  QUI$_JOB_RESET_MODULES -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то  программа  возвращает  список

       имен (через запятую) текстовых модулей, которые должны

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

       напечатаны на устройстве печати перед печатью  каждого

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

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

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

       модуля, то поле "длина  буфера"  дескриптора  элемента

       должно задавать 32 байта для каждого возможного  текс-

       тового модуля.  Данный  код  имеет  смысл  только  для

       выходных исполняемых очередей;

  QUI$_JOB_SIZE -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает  в  длинном

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

       блоков в указанном задании на печать;

  QUI$_JOB_SIZE_MAXIMUM(MINIMUM) -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа возвращает в длинном

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

       (минимальное) число блоков,  которое  может  содержать

       задание на печать, инициируемое из указанной  очереди.

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

       очередям;




                           - 849 -

                        00152-01 97 06


  QUI$_JOB_STATUS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает флаги  сос-

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

       торе битов размером в длинное слово.

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

  ляются макрокомандой $QUIDEF следующие:

       1)  QUI$V_JOB_ABORTING  -  система  пытается  отменить

  выполнение задания;

       2) QUI$V_JOB_EXECUTING - задание выполняется или печа-

  тается;

       3) QUI$V_JOB_HOLDING - задание будет задержано до  тех

  пор, пока не будет явно освобождено;

       4)  QUI$V_JOB_INACCESSIBLE  -  вызывающий  процесс  не

  имеет доступа с чтением  информации  указанного  задания  и

  файла в системном файле очередей.  Следовательно,  операции

  QUI$_DISPLAY_FILE  и  QUI$_DISPLAY_JOB   могут   возвращать

  информацию только для следующих  кодов  элементов  выходных

  значений:

       - QUI$_AFTER_TIME;

       - QUI$_COMPLETED_BLOCKS;

       - QUI$_ENTRY_NUMBER;

       - QUI$_INTERVENING_BLOCKS;

       - QUI$_INTERVENING_JOBS;

       - QUI$_JOB_SIZE;

       - QUI$_JOB_STATUS;

       5) QUI$V_JOB_REFUSED - задание  было  отвергнуто  сим-




                           - 850 -

                        00152-01 97 06


  бионтом и ждет, пока симбионт примет его для обработки;

       6) QUI$V_JOB_RETAINED - задание завершилось, но остав-

  лено в очереди;

       7) QUI$V_JOB_STARTING - контроллер заданий начал обра-

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

  да;

       8) QUI$V_JOB_TIMED - задание ждет определенного момен-

  та времени, чтобы начать выполнение;

  QUI$_LAST_PAGE -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FILE), то программа возвращает в  длинном

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

       ницы, на которой следует закончить  печать  указанного

       файла. Данный код относится только к  выходным  выпол-

       няемым очередям;

  QUI$_LIBRARY_SPECIFICATION -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа возвращает имя файла

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

       реди. Спецификация библиотеки предполагает  устройство

       и имя каталога SYS$LIBRARY и тип файла TLB.  Поскольку

       имя файла может включать в себя  до  39  символов,  то

       поле "длина буфера" дескриптора элемента должно  зада-

       вать 39 байтов. Данный  код  имеет  смысл  только  для

       выходных исполняемых очередей;

  QUI$_LOG_QUEUE -

       Если  задан   данный   код   элемента   (для   функции




                           - 851 -

                        00152-01 97 06


       QUI$_DISPLAY_JOB),  то  программа  возвращает  в  виде

       строки символов имя очереди,  в  которую  должен  быть

       введен для печати регистрационный файл, сформированный

       для указанного пакетного задания. Данный код относится

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

       может содержать до 31 символа, то поле "длина  буфера"

       дескриптора элемента должно задавать 31 байт;

  QUI$_LOG_SPECIFICATION -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает имя регист-

       рационного  файла,  который  формируется  для  данного

       задания. Поскольку спецификация файла может включать в

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

       тора элемента должно задавать 255 байтов.  Данный  код

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

       строка  представляет  из  себя   просто   спецификацию

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

       служебной процедуры $SNDJBC для создания задания. Сле-

       довательно, чтобы определить, должен ли быть сформиро-

       ван регистрационный файл или нет, недостаточно  прове-

       рить данный код  элемента  на  строку  нулевой  длины.

       Необходимо проверить бит QUI$V_JOB_LOG_NULL кода  эле-

       мента QUI_JOB_FLAGS;

  QUI$_NOTE -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB),  то  программа  возвращает  в  виде

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




                           - 852 -

                        00152-01 97 06


       на страницах флагов задания или файла  для  указанного

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

       255 символов, то поле "длина буфера" дескриптора  эле-

       мента должно задавать 255  байтов.  Данный  код  имеет

       смысл только для выходных исполняемых очередей;

  QUI$_OPERATOR_REQUEST -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB),  то  программа  возвращает  в  виде

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

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

       указанное задание. Поскольку сообщение может  включать

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

       риптора элемента должно задавать  255  байтов.  Данный

       код имеет смысл только для выходных исполняемых очере-

       дей;

  QUI$_OWNER_UIC -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа возвращает идентифи-

       катор UIC владельца для указанной очереди в  стандарт-

       ном формате длинного слова;

  QUI$_PAGE_SETUP_MODULES -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_FORM),  то  программа  возвращает  список

       имен (через запятую) текстовых модулей, которые должны

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

       отпечатаны на устройстве печати перед  печатью  каждой

       страницы указанной  формы.  Поскольку  имя  текстового




                           - 853 -

                        00152-01 97 06


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

       тая, отделяющая его  от  предыдущего  имени,  то  поле

       "длина буфера" дескриптора элемента должно задавать 32

       байта для каждого возможного текстового модуля. Данный

       код имеет смысл только для выходной исполняемой очере-

       ди;

  с QUI$_PARAMETER_1 по QUI$_PARAMETER_8 -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает строку сим-

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

       ленных пользователем. В пакетном режиме они составляют

       значения символов языка DCL с P1 по P8, со  значениями

       параметров, определенных пользователем;

  QUI$_PRIORITY -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа  возвращает  приоритет

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

       тичное значение в длинном слове. Спланированный  прио-

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

       задания,  назначенные  очереди.  Наименьшее   значение

       спланированного приоритета равно  0,  наивысшее  равно

       255, то есть, если очередь содержит задания  с  плани-

       рующим приоритетом 10 и с приоритетом 2, то  программа

       управления очередно сначала инициирует задание с прио-

       ритетом 10;

  QUI$_PROCESSOR -

       Если  задан   данный   код   элемента   (для   функции




                           - 854 -

                        00152-01 97 06


       QUI$_DISPLAY_QUEUE), то программа возвращает имя файла

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

       которое инициируется из указанной очереди.  Имя  файла

       обычно содержит имя устройства и каталога SYS$SYSTEM:,

       а также тип файла EXE. Поскольку имя файла может вклю-

       чать в себя до 39 символов,  то  поле  "длина  буфера"

       дескриптора элемента должно задавать 39 байтов;

  QUI$_PROTECTION -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа возвращает в длинном

       слове маску защиты очереди. Маска защиты очереди пока-

       зана на рис 68.



                    Маска защиты очереди

       -------------------------------------------------
       !               Значение защиты                 !
       -------------------------------------------------
       !    Все    !  Группа   !  Владелец !   Система !
       -------------------------------------------------
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       ! D! E! W! R! D! E! W! R! D! E! W! R! D! E! W! R!
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       -------------------------------------------------
        15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0


       -------------------------------------------------
       !             Значение возможных изменений      !
       -------------------------------------------------
       !    Все    !  Группа   !  Владелец !   Система !
       -------------------------------------------------
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       ! D! E! W! R! D! E! W! R! D! E! W! R! D! E! W! R!
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       -------------------------------------------------
        31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16

                          Рис. 68





                           - 855 -

                        00152-01 97 06


       Биты с 0 по 15 задают  значение  защиты:  четыре  типа

  доступа (читать, писать, исполнять, удалять), предоставлен-

  ной четырем классам пользователей  (система,  пользователь,

  группа, все). Установленный бит запрещает доступ,  а  сбро-

  шенный бит разрешает.

       Биты с 16 по 31 блокируют или разблокируют биты с 0 по

  15. Если бит во втором слове установлен, то соответствующий

  бит в первом слове игнорируется. По  умолчанию  значение  в

  слове имеет значение (S:E, O:D, G:R, W:W);

  QUI$_FLAGS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE), то программа возвращает в длинном

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

       которые должны быть  выбраны  для  указанной  очереди.

       каждому варианту обработки соответствует  один  бит  в

       векторе. Если программа $GETQUI устанавливает бит,  то

       задания, инициируемые из очереди, обрабатываются  сог-

       ласно соответствующему варианту обработки. Каждый  бит

       в векторе имеет символическое имя.

       Символические   имена   (определяются    макрокомандой

  $QUIDEF):

       1) QUI$V_QUEUE_BATCH - очередь является пакетной  оче-

  редью или общей пакетной очередью;

       2) QUI$V_QUEUE_CPU_DEFAULT - лимит времени процессора,

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

       3) QUI$V_QUEUE_CPU_LIMIT - максимальный лимит  времени

  процессора указан для всех заданий в очереди;




                           - 856 -

                        00152-01 97 06


       4) QUI$V_QUEUE_FILE_BURST - страницы пакета  и  флагов

  предшествуют каждому файлу в каждом задании, инициированном

  из очереди;

       5) QUI$V_QUEUE_FILE_BURST_ONE - страница пакета и фла-

  гов предшествуют только первой копии первого файла в каждом

  задании, инициированном из очереди;

       6) QUI$V_QUEUE_FILE_FLAG - страница  флагов  предшест-

  вует каждому файлу в каждом задании инициируемом из  очере-

  ди;

       7) QUI$V_QUEUE_FILE_FLAG_ONE - страница  флагов  пред-

  шествует только первой копии первого файла в  каждом  зада-

  нии, инициированном из очереди;

       8) QUI$V_QUEUE_FILE_PAGINATE - выходной симбионт нуме-

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

  го из данной очереди. Выходной симбионт нумерует  страницы,

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

  го края формы;

       9) QUI$V_QUEUE_FILE_TRAILER - дополнительная  страница

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

  очереди;

       10)  QUI$V_QUEUE_FILE_TRAILER_ONE   -   дополнительная

  страница следует только за последней копией последнего фай-

  ла в каждом задании, инициированном из очереди;

       11) QUI$V_QUEUE_GENERIC - очередь является общей  оче-

  редью;

       12) QUI$V_QUEUE_GENERIC_SELECTION -  очередь  является

  исполняемой очередью;




                           - 857 -

                        00152-01 97 06


       13) QUI$V_QUEUE_JOB_BURST - страницы пакета  и  флагов

  предшествуют каждому заданию, инициированному из очереди;

       14) QUI$V_QUEUE_JOB_FLAG - страница  флагов  предшест-

  вует каждому заданию, инициированному из очереди;

       15) QUI$V_QUEUE_JOB_SIZE_SCHEDH -  задания,  иницииро-

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

  При этом наименьшее задание  данного  приоритета  обрабаты-

  вается первым. Имеет смысл только для выходных очередей;

       16) QUI$V_QUEUE_JOB_TRAILER - дополнительная  страница

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

  ди;

       17) QUI$V_QUEUE_RECORD_BLOCKING - симбионту  разрешено

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

  он посылает на выходное устройство;

       18) QUI$V_QUEUE_RETAIN_ALL - все задания, инициирован-

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

  закончат выполнение. Завершение  задания  помечаются  кодом

  состояния завершения;

       19)  QUI$V_QUEUE_RETAIN_ERROR  -  в  очереди  остаются

  только те задания, которые не завершились успешно;

       20) QUI$V_QUEUE_SWAP - можно менять  местами  задания,

  инициированные из данной очереди;

       21) QUI$V_QUEUE_TERMINAL - очередь является общей оче-

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

  очереди;

       22) QUI$V_QUEUE_WSDEFAULT - для каждого задания,  ини-

  циированного из очереди,  указан  размер  рабочего  набора,




                           - 858 -

                        00152-01 97 06


  принятый по умолчанию;

       23) QUI$V_QUEUE_WSEXTENT  -  экстент  рабочего  набора

  задан для каждого задания, инициированного из очереди;

       24) QUI$V_QUEUE_WSQUATA - для каждого задания, иниции-

  рованного из очереди, задана квота рабочего набора;

  QUI$_QUEUE_NAME -

       Если  задан   данный   код   элемента   (для   функций

       QUI$_DISPLAY_QUEUE,  QUI$_DISPLAY_JOB),  то  программа

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

       ди или имя очереди, которая содержит  указанное  зада-

       ние. Поскольку имя очереди может включать в себя до 31

       символа, то поле "длина буфера"  дескриптора  элемента

       должно задавать 31 байт;

  QUI$_QUEUE_STATUS -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_QUEUE),  то  программа  возвращает  флаги

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

       битов;

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

  лены макрокомандой $QUIDEF:

       1) QUI$V_QUEUE_ALIGNING - очередь  печатает  указанное

  количество выводимой информации, так чтобы можно было  пра-

  вильно выровнять бумагу;

       2) QUI$V_QUEUE_IDLE - очередь не содержит запросов  на

  задания;

       3) QUI$V_QUEUE_LOWERCASE - очередь связана с устройст-

  вом печати, которое может печатать как большие так и строч-




                           - 859 -

                        00152-01 97 06


  ные буквы;

       4) QUI$V_QUEUE_PAUSED - выполнение всех текущих  зада-

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

       5) QUI$V_QUEUE_PAUSING - очередь временно приостанови-

  ла выполнение. Текущие выполняющиеся  задания  завершаются;

  временно ни одно новое задание не начинает выполняться;

       6) QUI$V_QUEUE_REMOTE - очередь назначена  физическому

  устройству, которое не связано с локальным узлом;

       7) QUI$V_QUEUE_RESETTING - очередь восстановлена зано-

  во и остановлена;

       8) QUI$V_QUEUE_RESUMING - очередь вновь  восстановлена

  после приостановки;

       9) QUI$V_QUEUE_STALLED - физическое устройство,  кото-

  рому назначена очередь, остановлено, то  есть  данное  уст-

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

  нему запроса на ввод-вывод;

       10) QUI$V_QUEUE_STARTING - очередь в состоянии  запус-

  ка;

       11) QUI$V_QUEUE_STOPPED - очередь остановлена;

       12) QUI$V_QUEUE_STOPPING - очередь останавливается;

       13) QUI$V_QUEUE_UNAVAILABLE  -  недоступно  физическое

  устройство, которому назначена очередь;

  QUI$_REQUEUE_QUEUE_NAME -

       Если  задан   данный   код   элемента   (для   функции

       QUI$_DISPLAY_JOB), то программа возвращает в виде сим-

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

       занное задание. Поскольку имя очереди может  содержать




                           - 860 -

                        00152-01 97 06


       до 31 символа, то поле "длина буфера" дескриптора эле-

       мента должно задавать до 31 байт;

  QUI$_SEARCH_FLAGS -

       Данное значение является значением входного кода  эле-

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

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

       ного  при  вызове  программы   $GETQUI.   Макрокоманда

       $QUIDEF определяет  символические  имена  для  каждого

       бита в  векторе  битов.  Вектор  битов  конструируется

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

       в логической операции OR (или). Табл.61 содержит  сим-

       волические имена для каждой возможности и код  функции

       для которого флаг имеет смысл.


                                                   Таблица 61

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

    Символическое имя   !       Описание

   (функциональный код) !

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

  QUI$V_SEARCH_ALL_JOB  !$GETQUI ищет все задания, включенные

  (QUI$_DISPLAY_JOB)    !в установленный контекст очереди.

                        !Если данный флаг не задан, то прог-

                        !рамма возвращает информацию только о

                        !тех заданиях, которые имеют то же

                        !имя пользователя, что и вызывающий

                        !процесс

  QUI$V_SEARCH_BATCH    !ограничивает область поиска для про-




                           - 861 -

                        00152-01 97 06


                                         Продолжение табл. 61

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

    Символическое имя   !       Описание

   (функциональный код) !

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

  (QUI$S_DISPLAY_QUEUE) !граммы только пакетными очередями

   QUI$V_SEARCH_SYMBIONT!ограничивает область поиска только

   QUI$S_DISPLAY_QUEUE) !выходными очередями

  QUI$V_SEARCH_THIS_JOB !программа  возвращает  информацию о

  (QUI$S_DISPLAY_FILE,  !вызывающем пакетном задании, выпол-

   QUI$S_DISPLAY_JOB,   !няющемся в файле команд или об оче-

   QUI$S_DISPLAY_QUEUE) !реди, связанной с вызывающим пакет-

                        !ным заданием. Программа устанавлива-

                        !ет новый контекст очереди и задания

                        !вызывающего процесса. Данный кон-

                        !текст очереди и задания аннулируется

                        !после выполнения программы $GETQUI.

                        !Если задан данный флаг, то программа

                        !игнорирует все другие возможности

                        !данного кода элемента

  QUI$V_SEARCH_WILDCARD !программа выполняет поиск в режиме

  (QUI$_DISPLAY_        !случайного запроса, даже если код не

   _CHARACTERISTIC      !содержит никаких символов, характер-

   QUI$_DISPLAY_FORM,   !ных для данного режима

   QUI$S_DISPLAY_QUEUE) !


  QUI$_SEARCH_NAME -





                           - 862 -

                        00152-01 97 06


       Данное значение входного кода элемента задает  в  виде

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

       об'екта, о котором программа возвращает информацию.  В

       буфере должно быть указано имя  характеристики,  формы

       или очереди. Чтобы заставить программу $GETQUI  выпол-

       нять   поиск   по    обобщенным    запросам,    строка

       QUI$_SEARCH_NAME должна содержать один или более  сим-

       волов обобщения (% или *);

  QUI$_SEARCH_NUMBER -

       Данное значение входного кода элемента задает в  длин-

       ном слове десятичное  значение,  представляющее  номер

       формы или  задания,  о  котором  программа  возвращает

       информацию. В буфере  должно  быть  задано  десятичное

       значение размером в длинное слово;

  QUI$_SUBMISSION_TIME -

       Если задан данный код элемента, то  программа  возвра-

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

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

       (Для функции QUI$_DISPLAY_JOB);

  QUI$_UIC -

       Если задан данный код элемента, то  программа  возвра-

       щает в стандартном формате длинного слова идентифкатор

       UIC  владельца  указанного   задания.   (Для   функции

       QUI$_DISPLAY_JOB);

  QUI$_USERNAME -

       Если задан данный код элемента, то  программа  возвра-

       щает "имя пользователя" владельца указанного  задания.




                           - 863 -

                        00152-01 97 06


       имя пользователя возвращается в виде 12-байтовой стро-

       ки    с    дополняющими    нулями.    (Для     функции

       QUI$_DISPLAY_JOB);

  QUI$_WSDEFAULT -

       Если задан данный код элемента, то  программа  возвра-

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

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

       из себя целое число от 1 до 65535 размером  в  длинное

       слово. Данный код  имеет  смысл  только  для  пакетных

       заданий и выходных исполняемых очередей. (Для  функций

       QUI$_DISPLAY_JOB, QUI$_DISPLAY_QUEUE);

  QUI$_WSEXTENT -

       Если задан данный код элемента, то  программа  возвра-

       щает экстент рабочего набора в виде целого числа от  1

       до 65535 размером  в  длинное  слово.  Данный  экстент

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

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

       мых   очередей.   (Для    функций    QUI$_DISPLAY_JOB,

       QUI$_DISPLAY_QUEUE);

  QUI$_WSQUOTA -

       Если задан данный код элемента, то  программа  возвра-

       щает квоту рабочего набора для указанного задания  или

       очереди в виде целого числа от 1 до 65535  размером  в

       длинное слово. Данное значение имеет смысл только  для

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

       функций QUI$_DISPLAY_JOB, QUI$_DISPLAY_QUEUE).






                           - 864 -

                        00152-01 97 06


       IOSB

       Использование в МОС ВП: IO_STATUS_BLOCK

       Тип:                    квадрослово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Блок  состояния  ввода-вывода,  в  который   программа

  $GETQUI записывает  состояние  завершения  после  окончания

  запрошенной операции. Аргумент IOSB является адресом  блока

  состояния ввода-вывода.

       При инициировании запроса программа устанавливает зна-

  чение квадрослова блока состояния  ввода-вывода  равным  0.

  После завершения запрошенной операции программа  записывает

  значение  кода  состояния  в  первое  длинное  слово  блока

  ввода-вывода. Во второе длинное  слово  она  записывает  0;

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

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

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

       1) если для сигнализации о завершении  программы  сис-

  темного обслуживания используется флаг  события,  то  можно

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

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

  тия не был установлен другим событием;

       2) если для синхронизации завершения программы систем-

  ного обслуживания используется программа  $SYNCH,  то  блок

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

  данной программы;

       3) значения кода состояния, возвращаемые в регистре R0




                           - 865 -

                        00152-01 97 06


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

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

  $GETQUI. Значение кода состояния, возвращаемое  в  регистре

  R0, предоставляет информацию  об  успешном  или  неуспешном

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

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

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

  системного обслуживания. Следовательно, для  точной  оценки

  результата вызова программы  $GETQUI  необходимо  проверить

  значения кодов состояния, возвращаемые как  в  регистре  R0

  так и блоке состояния ввода-вывода.

       ASTADR

       Использование в МОС ВП: AST_PROCEDURE

       Тип:                    маска входа в программу

       Доступ:                 вызов без развертывания стека

       Механизм:               по ссылке

       Подпрограмма обработки AST, которая должна выполняться

  после завершения программы $GETQUI. Аргумент ASTADR являет-

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

       Если задан данный аргумент, то подпрограмма AST выпол-

  няется в том же режиме доступа, что  и  процесс,  вызвавший

  программу $GETQUI.

       ASTPRM

       Использование в МОС ВП: USER_PARM

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению




                           - 866 -

                        00152-01 97 06


       Параметр AST, который должен быть передан подпрограмме

  обработки AST, адрес которой  задается  аргументом  ASTADR.

  Аргумент ASTPRM представляет длинное слово, содержащее дан-

  ный параметр.

       Описание:

       Чтобы получить информацию о задании или файле, пользо-

  ватель, вызывающий программу $GETQUI, должен иметь доступ с

  чтением или привилегию SYSPRV или OPER.  Если  пользователь

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

  операциях QUI$_DISPLAY_JOB или QUI$_DISPLAY_FILE, то  прог-

  рамма системного обслуживания $GETQUI  возвращает  успешный

  код состояния. Однако при этом  она  устанавливает  в  коде

  элемента QUI$_JOB_STATUS бит QUI$_JOB_INACCESSIBLE и  возв-

  ращает информацию только для следующих кодов элементов:

            1) QUI$_AFTER_TIME;

            2) QUI$_COMPLETED_BLOCKS;

            3) QUI$_ENTRY_NUMBER;

            4) QUI$_INTERVENING_BLOCKS;

            5) QUI$_INTERVENING_JOBS;

            6) QUI$_JOB_SIZE;

            7) QUI$_JOB_STATUS.

       Программа системного обслуживания  $GETQUI  возвращает

  информацию об об'ектах, содержащихся в системном файле оче-

  редей заданий. В частности,  она  возвращает  информацию  о

  следующих типах об'ектов: характеристики,  формы,  очереди,

  задания, содержащиеся в очередях, и файлы,  содержащиеся  в

  данных заданиях.




                           - 867 -

                        00152-01 97 06


       При вызове программы системного  обслуживания  $GETQUI

  контроллер заданий устанавливает внутренний блок  контекста

  GETQUI (GQC). Операционная система МОС ВП  использует  блок

  GQC для временного хранения информации и трассировки после-

  довательности запросов на  операции.  Система  обеспечивает

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

  может выполняться только одна операция программы $GETQUI.

       Чтобы дать возможность пользователю получить  информа-

  цию либо о конкретном об'екте в отдельном вызове программы,

  либо о нескольких об'ектах  в  последовательности  вызовов,

  программа $GETQUI поддреживает три различных режима поиска.

  Данные режимы поиска влияют на диспозицию блока GQC:

       1)  режим  поиска  по  одиночному  запросу.  Программа

  $GETQUI возвращает информацию о конкрентом об'екте в  одном

  вызове. После обработки вызова операционная система МОС  ВП

  аннулирует блок GQC;

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

  рамма возвращает информацию о  нескольких  об'ектах  одного

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

  вп сохраняет блок GQC между  вызовами  пока  не  завершится

  последовательность запросов;

       3) режим поиска по последователности  вложений  запро-

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

  возвращает информацию о заданиях, содрежащихся в  выбранном

  задании. После каждого запроса операционная система МОС  ВП

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

  очереди или задания для последующих вызовов.




                           - 868 -

                        00152-01 97 06


       В режиме одиночного запроса  программа  $GETQUI  может

  возвращать информацию о следующих об'ектах:

       1) конкретном определении  характеристики  или  формы,

  которые идентифицируются по имени или номеру;

       2) конкретном определении по очереди, которая  иденти-

  фицируется по имени;

       3) очереди,  которая  связана  с  вызывающим  пакетным

  заданием, самом вызывающем пакетном задании  или  командном

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

       Чтобы получить  информацию  о  конкретном  определении

  характеристики или формы,  необходимо  задать  код  функции

  QUI$_DISPLAY_CHARACTERISTIC   (для   характеристики)    или

  QUI$_DISPLAY_FORM (для формы). Необходимо также задать  имя

  конкретной  характеристики  или  формы  в   коде   элемента

  QUI$_SEARCH_NAME или номер данной характеристики или  формы

  в коде элемента QUI$_SEARCH_NUMBER. Строка имени не  должна

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

  довательности запросов (* или %).  Можно  задать  оба  кода

  элемента QUI$_SEARCH_NAME и QUI$_SEARCH_NUMBER, однако дан-

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

  кой или формой.

       Чтобы получить  информацию  о  конкретном  определении

  очереди,     следует     задать     функциональный      код

  QUI$_DISPLAY_QUEUE и имя очереди указать  в  коде  элемента

  QUI$_SEARCH_NAME. Строка имени не должна  содержать  симво-

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

  запросов (* или %). Можно ограничить область  поиска  конк-




                           - 869 -

                        00152-01 97 06


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

  QUE$V_SEARCH_BATCH  (для  поиска  пакетных  очередей)   или

  QUE$V_SEARCH_SYMBIONT (для поиска выходных  очередей)  кода

  элемента QUE$_SEARCH_FLAGS. Если же искомая очередь не при-

  надлежит   к    типу,    заданному    в    коде    элемента

  QUE$_SEARCH_FLAGS, то программа  $GETQUI  не  сможет  найти

  данную очередь.

       Программа $GETQUI предоставляет  возможность,  которая

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

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

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

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

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

  зав код функции QUI$_DISPLAY_QUEUE, чтобы получить информа-

  цию об очереди, из которой инициировано  пакетное  задание;

  или код функции QUI$_DISPLAY_JOB, чтобы получить информацию

  о    самом    пакетном    задании;    или    код    функции

  QUI$_DISPLAY_FILE,  чтобы  получить  информацию  о  файлах,

  содержащихся в данном пакетном задании. Для каждого из дан-

  ных     вызовов     необходимо     выбрать      возможность

  QUI$V_SEARCH_THIS_JOB кода QUI$_DISPLAY_FLAGS. Если указана

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

  можности в элементом коде.

       В режиме поиска по последовательности запросов  опера-

  ционная система МОС ВП сохраняет блоки GQC  между  вызовами

  программы $GETQUI так что можно выполнить последоватеьность

  вызовов  программы,  чтобы  получить  информацию  обо  всех




                           - 870 -

                        00152-01 97 06


  характеристиках, формах или очередях, содержащихся  в  сис-

  темном файле очередей заданий.

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

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

  димо          задавать          функциональный          код

  QUI$_DISPLAY_CHARACTERISTIC   (для    характеристик)    или

  QUI$_DISPLAY_FORM  (для  форм),   а   в   элементном   коде

  QUI$_SEARCH_NAME имя, которое включает один или более  сим-

  волов (* или %) характеристик для  данного  режима  поиска.

  Чтобы ограничить область поиска, можно  также  указать  тип

  очереди,   задав   возможность    QUI$V_SEARCH_BATCH    или

  QUI$V_SEARCH_SYMBIONT кода элемента QUI$_SEARCH_FLAGS. Если

  задана первая из данных возможностей, то программа  возвра-

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

  возможность, то программа возвращает информацию о  выходных

  очередях.

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

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

  характеристиках, формах или очередях, если в коде  элемента

  QUI$_SEARCH_FLAGS            указать            возможность

  QUI$V_SEARCH_WILDCARD. В данном случае операционная система

  МОС ВП сохраняет блок GQC между  вызовами  программы,  даже

  если имя, указанное в коде  элемента  QUI$_SEARCH_NAME,  не

  включает символов (* или %), характерных для режима  поиска

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

  режима полезен, если вызов программы $GETQUI  происходит  в

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




                           - 871 -

                        00152-01 97 06


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

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

  QUI$V_SEARCH_WILDCARD гарантирует включение  режима  поиска

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

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

  ности запросов, он работает до тех пор, пока не  произойдет

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

  блока GQC:

       1) программа $GETQUI по запросу на вывод информации об

  очереди, характеристики или формы возвращает значение  кода

  состояния JBC$_NOMOREXXX или $JBC_NOSUCHXXX,  где  "XXX"  -
                
  CHAR, FORM или QUE;

       2) пользователь явно отменяет операцию поиска по  пос-

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

  $GETQUI функциональный код QUI$_CANCEL_OPERATION;

       3) процесс завершается.

       В режиме поиска по последовательности вложенных запро-

  сов операционная система МОС ВП сохраняет  блок  GQC  между

  вызовами программы $GETQUI, так что можно выполнять  после-

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

  информации о заданиях, которые содержатся в выбранной  оче-

  реди, или о файлах выбранных заданий. Две из операций прог-

  раммы $GETQUI: QUI$_DISPLAY_JOB и QUI$_DISPLAY_FILE,  могут

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

  вложенных запросов, с одним исключением. Исключение касает-

  ся вызова программы $GETQUI из пакетного задания для выпол-

  нения двух данных операций.




                           - 872 -

                        00152-01 97 06


       Программа $GETQUI нуждается в режиме поиска по  после-

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

  программа отыскивает об'екты и взаимосвязи между очередями,

  заданиями и файлами. Программа $GETQUI выполняет одну  опе-

  рацию на один вызов. Таким образом, она  может  находить  и

  возвращать информацию  только  об  одном  об'екте  за  один

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

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

  которые  содержат  файлы.  Следовательно,  чтобы   получить

  информацию об об'екте, который содержится в другом об'екте,

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

  задает и локализует  содержащий  об'ект,  а  затем  сделать

  вызов, чтобы запросить  информацию  о  содержимом  об'екте.

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

  ложении содержащего об'екта в блоке GQC.

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

  ва программы $GETQUI, перед тем, как сделать запрос  инфор-

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

  операция QUI$_DISPLAY_QUEUE. Первая последовательность про-

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

  жащая задание, содержащее нужный файл. Данный  вызов  уста-

  навливает контекст очереди.  Во  второй  последовательности

  вызовов задается операция QUI$_DISPLAY_JOB.  Данные  вызовы

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

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

  ный файл.  Данный  вызов  устанавливает  контекст  задания.

  Теперь, найдя очередь и задание,  содержащее  нужный  файл,




                           - 873 -

                        00152-01 97 06


  можно использовать операцию QUI$_DISPLAY_FILE, чтобы запро-

  сить информацию о файле.

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

  женных запросов для получения информации о задании или фай-

  ле, необходимо выполнить программу $GETQUI в режиме  поиска

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

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

  операции информации о задании  или  файле.  Включить  режим

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

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

  имя, содержащее характерные для данного режима  символы  (*

  или %) в коде элемента QUI$_SEARCH_NAME; либо указав  обыч-

  ное имя очереди и выбрав возможность  QUI$V_SEARCH_WILDCARD

  кода элемента QUI$_SEARCH_FLAGS. Второй метод ввода  режима

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

  вателю требуется получить информацию  об  одном  или  более

  заданиях или файлах внутри заданий для указанной очереди и,

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

  при этом необходимо все же сохранить блок GQC  после  того,

  как установлен контекст очереди.

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

  QUI$_DISPLAY_JOB, то  по  умолчанию  программа  находит  те

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

  зователя", что и вызывающий  процесс.  Если  же  необходимо

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

  то необходимо  выбирать  возможности  QUI$V_SEARCH_ALL_JOBS

  кода элемента QUI$_SEARCH_FLAGS.




                           - 874 -

                        00152-01 97 06


       После того, как установлен контекст очереди, он сохра-

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

  вызвав  еще  раз  программу   $GETQUI   с   кодом   функции

  QUI$_DISPLAY_QUEUE, либо не  будет  аннулирован  блок  GQC.

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

  зователь не изменит контекст, сделав еще раз вызов програм-

  мы $GETQUI с кодом функции QUI$_DISPLAY_JOB, либо программа

  не вернет код состояния JBC$_NOMOREJOB или  JBC$_NOSUCHJOB.

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

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

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

  продолжает сопровождать контекст очереди.

       Возвращаемые значения кода состояния:

       SS$_NORMAL      - успешное завершение;

       SS$_ACCVIO      - вызывающая программа не может прочи-

                       тать  список  элементов  или   входной

                       буфер; или не может записать  в  буфер

                       возвращаемой длины, выходной буфер или

                       блок состояния;

       SS$_BADPARAM    - неверный код функции. Список элемен-

                       тов содержит  неверный  код  элемента.

                       Дескриптор буфера имеет неверную  дли-

                       ну. Зарезервированный  параметр  имеет

                       ненулевое значение;

       SS$_DEVOFFLINE  - не выполняется  процесс  контроллера

                       заданий;

       SS$_EXASTLM     - указан  аргумент  ASTADR  и  процесс




                           - 875 -

                        00152-01 97 06


                       превысил квоту ASTLM;

       SS$_ILLEFC      - аргумент  EFN   указывает   неверный

                       номер флага события;

       SS$_INSFMEM     - стек  режима  управляющей  программы

                       содержит  недостаточную   память   для

                       выполнения запроса;

       SS$_MBFULL      - почтовый  ящик  контроллера  заданий

                       переполнен;

       SS$_MBTOOSML    - сообщение,  посланное   в   почтовый

                       ящик,  слишком  велико  для  почтового

                       ящика контроллера заданий;

       SS$_UNASEFC     - аргумент EFN указывает на  неподсое-

                       диненный кластер флагов событий.

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

  ввода-вывода:

       JBC$_NORMAL      - нормальное завершение;

       JBC$_INVFUNCOD   - указан неверный код функции;

       JBC$_INVITMCOD   - список элементов содрежит  неверный

                        код элемента;

       JBC$_INVPARLEN   - длина заданной строки находится вне

                        допустимого  диапазона  для   данного

                        кода элемента;

       JBC$_INVQUENAM   - имя очереди синтаксически неверно;

       JBC$_JOBQUEDIS   - запрос  не  может  быть  обработан,

                        поскольку не была запущена  системная

                        программа;

       JBC$_MISREQPAR   - не задан код элемента, который тре-




                           - 876 -

                        00152-01 97 06


                        буется для указанного кода функции;

       JBC$_NOJOBCTX    - для операции  QUI$_DISPLAY_FILE  не

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

       JBC$_NOMORECHAR  - больше нет заданных  характеристик.

                        Отмечает     завершение      операции

                        QUI$_DISPLAY_CHARACTERISTIC в  режиме

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

                        сов;

       JBC$_NOMOREFILE  - больше  нет  файлов,  связанных   с

                        текущим контекстом заданий.  Отмечает

                        конец  операции  QUI$_DISPLAY_FILE  в

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

                        запросов для текущего контекста зада-

                        ний;

       JBC$_NOMOREFORM  - больше нет заданных форм.  Отмечает

                        завершение операции QUI$_DISPLAY_FORM

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

                        запросов;

       JBC$_NOMOREJOB   - больше  нет  заданий,  связанных  с

                        текущим контекстом заданий.  Отмечает

                        конец  операции  QUI$_DISPLAY_JOB   в

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

                        запросов для текущего контекста зада-

                        ний;

       JBC$_NOMOREQUE   - больше нет заданных очередей. Отме-

                        чает          конец          операции

                        QUI$_DISPLAY_QUEUE в режиме поиска по




                           - 877 -

                        00152-01 97 06


                        последовательности запросов;

       JBC$_NOQUECTX    - для опеарции  QUI$_DISPLAY_JOB  или

                        QUI$_DISPLAY_QUEUE не был  установлен

                        контекст очереди;

       JBC$_NOSUCHCHAR  - указанная  характеристика  отсутст-

                        вует;

       JBC$_NOSUCHFILE  - указанный файл отсутствует;

       JBC$_NOSUCHFORM  - указанная форма отсутствует;

       JBC$_NOSUCHJOB   - указанное задание отсутствует;

       JBC$_NOSUCHQUE   указанная очередь отсутствует.



       13.64. $GETQUIW  -  получить   информацию   об

              очереди и ждать завершения


       Программа системного обслуживания $GETQUIW  возвращает

  информацию об очередях и заданиях, инициированных из данных

  очередей. Программа системного обслуживания $SNDJBC являет-

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

  системы МОС ВП, которой является программой учета и  управ-

  ления очередями МОС ВП.

       Программа системного обслуживания $GETQUIW завершается

  синхронно, то есть  она  возвращает  управление  вызывающей

  программе вместе с запрошенной информацией. Для асинхронно-

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

  обслуживания "получить информацию  об  очереди"  ($GETQUI).

  Данная программа возвращает управление вызывающей программе

  поставив в очередь запрос на информацию  и  не  ожидая  при

  этом возврата данной информации.



                           - 878 -

                        00152-01 97 06


       Во всех  остальных  отношениях  программы  $GETQUIW  и

  $GETQUI идентичны. Всю информацию о программе $GETQUIW мож-

  но получить в описании  программы  $GETQUI.  Дополнительная

  информация о завершении  программ  системного  обслуживания

  приведена в описании программы "синхронизировать" ($SYNCH).

       Формат:

       SYS$GETQUIW     [EFN],FUNC[,NULLARG][,ITMLST][,IOSB]

                       [,ASTADR][,ASTPRM]



       13.65. $GETSYI - получить информацию о системе


       Программа системного обслуживания  $GETSYI  возвращает

  информацию о локальной системе МОС ВП.

       Программа $GETSYI завершается синхронно, то есть возв-

  ращает управление вызывающей программе вместе с запрошенной

  информацией.  Для  синхронного   завершения   рекомендуется

  использовать программу системного обслуживания $GETSYIW.

       Дополнительная информация о завершении программы  сис-

  темного обслуживания приведена в подразделе 2.5 и в  описа-

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

  ($SYNCH).

       Формат:

       SYS$GETSYI     [EFN],[CSIDADR],[NODENAME],ITMLST

                      ,[IOSB],[ASTADR],[ASTPRM]











                           - 879 -

                        00152-01 97 06


       Аргументы:

       EFN

       Использование в МОС ВП: EF_NUMBER

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Номер флага события, который должен  быть  установлен,

  когда программа $GETSYI обрабатывает запрос.  Аргумент  EFN

  является длинным словом, содержащим данный номер.

       После инициирования запроса программа $GETSYI  сбрасы-

  вает указанный флаг события (или флаг события с номером  0,

  если аргумент EFN не задан). Затем после  завершения  обра-

  ботки запроса устанавливается указанный флаг  события  (или

  флаг события с номером 0).

       CSIDADR

       Использование в МОС ВП: PROCESS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 модификация

       Механизм:               по ссылке

       Данный аргумент не используется.

       NODENAME

       Использование в МОС ВП: PROCESS_NAME

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Данный аргумент не используется.




                           - 880 -

                        00152-01 97 06


       ITMLST

       Использование в МОС ВП: ITEM_LIST_3

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Список элементов, указывающий, какая информация о сис-

  теме должна быть возвращена. Аргумент ITMLST является адре-

  сом списка дескрипторов, каждый из которых  описывает  эле-

  мент  информации.  Данный  список  дескрипторов   элементов

  завершается длинным словом, содержащим значение  0.  Рис.69

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


                    Дескриптор элемента

       31                        15                         0
       ------------------------------------------------------
       !      Код элемента        !     Длина буфера        !
       ------------------------------------------------------
       !                 Адрес буфера                       !
       ------------------------------------------------------
       !             Адрес возвращаемой длины               !
       ------------------------------------------------------

                        Рис. 69


       Поля дескриптора элемента программы $GETSYI:

  длина буфера -

       Слово, содержащее предоставленное пользователем  целое

       число, указывающее длину (в байтах) буфера, в  который

       программа должна  записывать  информацию.  Необходимая

       длина буфера зависит от  кода  элемента,  заданного  в

       поле "код элемента" дескриптора элемента. Если  значе-

       ние  поля  "длина  буфера"  слишком  мало,   программа

       $GETSYI усекает данные;



                           - 881 -

                        00152-01 97 06


  код элемента -

       Слово, содержащее предоставленный пользователем симво-

       лический код, указывающий элемент информации,  который

       должна вернуть  программа.  Данные  коды  определяются

       макрокомандой $SYIDEF;

  адрес буфера -

       Длинное слово, содержащее предоставленный  пользовате-

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

       вать информацию;

  адрес возвращаемой длины -

       Длинное слово, содержащее предоставленный  пользовате-

       лем адрес слова, в который программа  $GETSYI  записы-

       вает реальную длину в байтах возвращаемой информации;

       коды элементов программы $GETSYI:

  SYI$_BOOTTIME -

       Если задан данный код элемента, то  программа  возвра-

       щает время загрузки  системы.  Поскольку  возвращаемое

       время имеет стандартный 64-битовый формат  абсолютного

       времени, то поле "длина буфера"  дескриптора  элемента

       должно задавать 8 байтов;

  SYI$_CHARACTER_EMULATED -

       Если задан данный код элемента, то  программа  возвра-

       щает число 1, если инструкции символьных строк  эмули-

       рованы на центральном процессоре, и 0, если нет.  Пос-

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

       0), то поле  "длина  буфера"  в  дескрипторе  элемента

       должно задавать 1 байт;




                           - 882 -

                        00152-01 97 06


  SYI$_DECIMAL_EMULATED -

       Если задан данный код элемента, то  программа  возвра-

       щает число 1, если  операции  с  десятичными  строками

       эмулированы на центральном процессоре, и 0, если  нет.

       Поскольку данное число является булевым  значением  (1

       или 0), то поле "длина  буфера"  дескриптора  элемента

       должно задавать 1 байт;

  SYI$_D_FLOAT_EMULATED -

       Если задан данный код элемента, то  программа  возвра-

       щает число 1, если операции процессоре, и 0, если нет.

       Поскольку данное число является булевым  значением  (1

       или 0), то поле "длина  буфера"  дескриптора  элемента

       должно задавать 1 байт.

  SYI$_F_FLOAT_EMULATED -

       Если задан данный код элемента, то  программа  возвра-

       щает число 1, если операции над  числами  с  плавающей

       запятой F_формата эмулированы на центральном процессо-

       ре, и 0, если нет.  Поскольку  данное  число  является

       булевым значением (1 или 0), то  поле  "длина  буфера"

       дескриптора элемента должно задавать 1 байт;

  SYI$_G_FLOAT_EMULATED -

       Если задан данный код элемента, то  программа  возвра-

       щает число 1, если операции  над  числами  с  плвающей

       запятой G_формата эмулированы на центральном процессо-

       ре, и 0, если нет.  Поскольку  данное  число  является

       булевым значением (1 или 0), то  поле  "длина  буфера"

       дескриптора элемента должно задавать 1 байт;




                           - 883 -

                        00152-01 97 06


  SYI$_H_FLOAT_EMULATED -

       Если задан данный код элемента, то  программа  возвра-

       щает число 1, если операции над  числами  с  плавающей

       запятой H_формата эмулированы на центральном процессо-

       ре, и 0, если нет.  Поскольку  данное  число  является

       булевым значением (1 или 0), то  поле  "длина  буфера"

       дескриптора элемента должно задавать 1 байт;

  SYI$_NODE_AREA -

       Если задан данный код элемента, то  программа  возвра-

       щает область DECNET  узла.  Поскольку  область  DECNET

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

       ное слово, то поле "длина буфера" дескриптора элемента

       должно задавать 4 байта;

  SYI$NODE_NUMBER -

       Если задан данный код элемента, то  программа  возвра-

       щает номер DECNET данного узла. Поскольку номер DECNET

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

       то поле "длина  буфера"  дескриптора  элемента  должно

       задавать 4 байта;

  SYI$PAGEFILE_FREE -

       Если задан данный код элемента, то  программа  возвра-

       щает число свободных страниц в текущих страничных фай-

       лах. Поскольку данное число имеет размер длинного сло-

       ва, то поле "длина буфера" дескриптора должна задавать

       4 байта;

  SYI$PAGEFILE_PAGE -

       Если задан данный код элемента, то  программа  возвра-




                           - 884 -

                        00152-01 97 06


       щает число страниц в текущих страничных  файлах.  Пос-

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

       поле "длина буфера" дескриптора элемента должно  зада-

       вать 4 байта;

  SYI$_SID -

       Если задан данный код элемента, то  программа  возвра-

       шает содержание  регистра  системного  идентификатора.

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

       себя шестнадцатиричное число размером в длинное слово,

       то поле "длина  буфера"  дескриптора  элемента  должно

       задавать 4 байта;

  SYI$SWAPFILE_FREE -

       Если задан данный код элемента, то  программа  возвра-

       щает число свободных  страниц  в  текущих  свопинговых

       файлах. Поскольку данное число имеет  размер  длинного

       слова, то поле  "длина  буфера"  дескриптора  элемента

       должно задавать 4 байта;

  SYI$SWAPFILE_PAGE -

       Если задан данный код элемента, то  программа  возвра-

       щает число страниц в текущих свопинговых файлах.  Пос-

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

       поле "длина буфера" дескриптора элемента должно  зада-

       вать 4 байта;

  SYI$_VERSION -

       Если задан данный код элемента, то  программа  возвра-

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

       обеспечения для операционной системы МОС ВП. Поскольку




                           - 885 -

                        00152-01 97 06


       Номер версии является 8-байтовой строкой с дополняющи-

       ми пробелами, то поле "длина буфера" дескриптора  эле-

       мента должно задавать 4 байта;

  SYI$_XXXX -

       Если задан данный код элемента, то  программа  возвра-

       щает текущее значение  параметра  генерации  SYSGEN  с

       именем "XXXX". Буфер должен иметь размер длинного сло-

       ва, в котором программа записывает значение указанного

       параметра генерации SYSGEN.

       IOBS

       Использование в МОС ВП: IO_STATUS_BLOCK

       Тип:                    квадрослово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

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

  конечное состояние завершения. Аргумент IOBS является адре-

  сом квадрослова, содержащего блок состояния ввода-вывода.

       Если аргумент IOSB задан,  то  программа  $GETSYI  при

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

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

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

  второе длинное слово зарезервировано.

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

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

       1) если для сигнализации о заврешении  программы  сис-

  темного обслуживания используется флаг  событий,  то  можно

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




                           - 886 -

                        00152-01 97 06


  тояния, чтобы удостовериться, что  флаг  состояния  не  был

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

  ния программы;

       2) если для синхронизации завершения программы систем-

  ного обслуживания используется программа  $SYNCH,  то  блок

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

  данной программы;

       3) значение кода состояния, возвращаемое в регистре R0

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

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

  программы системного обслуживания  $GETSYI.  Значение  кода

  состояния, возвращаемое в регистре R0, дает  информацию  об

  успешном или неудачном вызове программы,  а  значение  кода

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

  дает информацию об успешном или неудачном выполнении опера-

  ции программы системного обслуживания. Таким образом, чтобы

  получить точную информацию о результате обращения  к  прог-

  рамме $GETSYI, необходимо проверить значения кодов  состоя-

  ния, возвращаемые как в регистре R0, так и в блоке  состоя-

  ния ввода-вывода.

       ASTADR

       Использование в МОС ВП: AST_PROCEDURE

       Тип:                    маска входа программы

       Доступ:                 вызов без разгрузки стека

       Механизм:               по ссылке

       Подпрограмма обработки AST, которая должна выполняться

  после завершения программы $GETSYI. Аргумент ASTADR являет-




                           - 887 -

                        00152-01 97 06


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

       Если задан аргумент ASTADR, то подпрограмма  обработки

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

  вызвавший программу системного обслуживания $GETSYI.

       ASTPRM

       Использование в МОС ВП: USER_ARG

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Параметр AST, который должен передаваться подпрограмме

  обработки AST, заданной аргументом ASTADR. Аргументы ASTPRM

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

  метр.

       Описание

       Данная программа  системного  обслуживания  использует

  квоту лимита AST процесса (ASTLM).

       Возвращаемые значения кода состояния:

       SS$_NORMAL    - программа   системмого    обслуживания

                     успешно завершилась;

       SS_BADPARAM   - список элементов содержит неверный код

                     элемента;

       SS_ACCVIO     - вызывающая программа не  может  прочи-

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

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

                     буфера"  дескриптора  элемента,  или  не

                     может записать в поле "адрес  возвращае-

                     мой длины" дескриптора элемента;




                           - 888 -

                        00152-01 97 06


       SS_EXASTLM    - процесс  превысил  свою  квоту  лимита

                     AST.

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

  ния ввода-вывода: совпадают со значениями, возвращаемыми  в

  регистре R0.



       13.66. $GETSYIW  -   получить   информацию   о

              системе и ждать


       Программа системного обслуживания $GETSYIW  возвращает

  информацию о системе МОС ВП.

       Программа  системного  обслуживания  $GETSYIW  подобна

  программе системного обслуживания  "получить  информацию  о

  системе" ($GETSYI). Программы $GETSYIW и $GETSYI завершают-

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

  программе вместе с запрошенной информацией.

       Всю остальную информацию о программе системного обслу-

  живания  $GETSYIW  можно  получить  из  описания  программы

  $GETSYI.

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

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

  ного обслуживания "синхронизировать" ($SYNCH) и в подразде-

  ле 2.5.

       Формат:

       SYS$$GETSYIW    [EFN],[CSIDADR],[NODENAME],ITMLST

                       [,IOSB][,ASTADR][,ASTPRM]







                           - 889 -

                        00152-01 97 06


       13.67. $GETTIM - получить время


       Программа системного обслуживания  $GETTIM  возвращает

  текущее системное время в 64-битовом формате.

       Формат:

       SYS$GETTIM     TIMADR

       Аргумент:

       TIMADR

       Использование в МОС ВП: DATE_TIME

       Тип:                    квадрослово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Адрес квадрослова, в которое требуется записать  теку-

  щее время в 64-битовом формате.

       Описание

       Системное время обновляется через каждые  10  миллисе-

  кунд, и возвращаемое время измеряется  в  100-наносекундных

  единицах от системного базового времени.

       Дополнительная информация о системном времни содержит-

  ся в разделе 9.

       Возвращаемые значения кода состояния:

       SS$_NORMAL  - успешное завершение;

       SS$_ACCVIO  - вызывающая программа не  может  записать

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

                   времени.









                           - 890 -

                        00152-01 97 06


       13.68. $GRANTID  -   назначить   идентификатор

              процессу


       Программа системного обслуживания  $GRANTID  добавляет

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

  или к системному списку прав. Если данный идентификатор уже

  есть в списке прав, то модифицируются его атрибуты в  соот-

  ветствии с заданием.

       Формат:

       SYS$GRANTID     [PIDADR],[PRCNAM],[ID],[NAME]

                       ,[PRVATR]

       Аргументы:

       PIDADR

       Использование в МОС ВП: PROCESS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 модификация

       Механизм:               по ссылке

       Идентификатор процесса (PID), с которым работает прог-

  рамма $GRANTID. Аргумент PIDADR является  адресом  длинного

  слова, содержащего PID данного процесса. Для  идентификации

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

  Когда передается аргумент PIDADR, он также и  возвращается,

  поэтому его необходимо передавать не как константу,  а  как

  переменную. Если не указан ни аргумент PIDADR, ни  аргумент

  PRCNAM, то  используется  процесс  пользователя,  вызвавший

  программу.







                           - 891 -

                        00152-01 97 06


       PRCNAM

       Использование в МОС ВП: PROCESS_NAME

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Имя процесса, с которым работает  программа  $GRANTID.

  Аргумент PRCNAM является адресом дескриптора строки  симво-

  лов, содержащей имя  процесса.  Максимальная  строка  имени

  равна 15 символам. Поскольку номер группы  UIC  интерпрети-

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

  аргумент PIDADR, чтобы задавать список прав процесса в дру-

  гой группе. Если не задан ни один из аргументов PIDADR  или

  PRCNAM, то  используется  процесс  пользователя,  вызвавший

  программу.

       ID

       Использование в МОС ВП: RIGHTS_HOLDER

       Тип:                    квадрослово (без знака)

       Доступ:                 модификация

       Механизм:               по ссылке

       Идентификатор и атрибуты, которые назначаются процессу

  при завершении программы $GRANTID. Аргумент является  адре-

  сом квадрослова, содержащего в первом длинном слове  двоич-

  ный код идентификатора, который должен быть  назначен  про-

  цессу, а во втором длинном слове - атрибуты.








                           - 892 -

                        00152-01 97 06


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

  темной макробиблиотеке (макрокоманда $KGBDEF):

            - KGB$V_RESOURCE - позволяет держателю затребо-

       Вать для идентификатора ресурсы типа блоков на диске.

       Символические значения  являются  смещениями  в  битах

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

  в виде маски с установленным соответствующим битом, исполь-

  зуя вместо префикса KGB$V префикс KGB$M.

       Один из аргументов ID или NAME должен быть задан. Пос-

  кольку аргумент ID возвращается, если указан аргумент  NAME

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

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

       NAME

       Использование в МОС ВП: CHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Имя идентификатора, назначаемого в  результате  работы

  программы $GRANTID. Аргумент NAME является адресом дескрип-

  тора, указывающего на имя идентификатора. Один из  аргумен-

  тов ID или NAME должен быть задан.

       PRVATR

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке




                           - 893 -

                        00152-01 97 06


       Предыдущие атрибуты  идентификатора.  Аргумент  PRVATR

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

  атрибутов идентификатора, если он ранее был  представлен  в

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

  фицируется, то данный параметр игнорируется.

       Описание

       Программа системного обслуживания "назначить идентифи-

  катор процессу" добавляет указанный идентификатор к  списку

  прав процесса или к системному  списку  прав.  Если  данный

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

  меняются на те, которые заданы. Данная программа системного

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

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

  зователя по установочному принципу.  Она  не  предназначена

  для использования обычным пользователем системы.

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

  требуется привилегия CMKRNL. Кроме  того,  для  модификации

  списка прав процесса в той же группе, что и вызывающий про-

  цесс (если процесс не имеет тот  же  идентификатор,  что  и

  вызывающий процесс), требуется привилегия GROUP. Для  моди-

  фикации списка прав процесса вне группы вызывающего процес-

  са требуется привилегия WORLD. Для  модификации  системного

  списка прав требуется привилеия SYSNAM.

       В  табл.62  сведены  результаты  передачи   аргументов

  PIDADR и PRCNAM в различных сочетаниях.








                           - 894 -

                        00152-01 97 06


                                                   Таблица 62

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

  PRCAAM!RIDADR!              Результат

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

  опущен!опущен!используется текущий идентификатор процесса.

        !      !Идентификатор процесса не возвращается

  опущен!  0   !используется текущий идентификатор процесса.

        !      !Идентификатор процесса возвращается

  опущен!задан !используется заданный идентификатор процесса.

        !      !Идентификатор процесса возвращается

  задан !опущен!используется заданное имя процесса. Идентифи-

        !      !катор процесса не возвращается

  задан !  0   !используется заданное имя процесса. Идентифи-

        !      !катор процесса возвращается

  задан !задан !используется заданный идентификатор процесса.

        !      !Идентификатор процесса возвращается. Имя про-

        !      !цесса игнорируется


       В табл.63 сведены результаты передачи аргументов ID  и

  NAME в различных сочетаниях.


                                                   Таблица 63

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

   NAME !  ID  !         Результат

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

  опущен!опущен!недопустимое сочетание

  опущен!задан !используется заданное значение идентификато-

        !      !ра. Значение идентификатора возвращается




                           - 895 -

                        00152-01 97 06


                                         Продолжение табл. 63

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

   NAME !  ID  !         Результат

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

  задан !опущен!используется заданное имя идентификатора.

        !      !Значение идентификатора не возвращается

  задан !  0   !используется заданное имя идентификатора.

        !      !Значение идентификатора возвращается

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

        !      !ра. Значение идентификатора возвращается, имя

        !      !идентификатора игнорируется

       Возвращаемые значения кода состояния:

       SS$_WASCLR      - программа  системного   обслуживания

                       успешно завершилась.  Список  прав  не

                       содержал указанного идентификатора;

       SS$_WASSET      - программа  системного   обслуживания

                       успешно завершилась. Список  прав  уже

                       содержит указанный идентификатор;

       SS$_ACCVIO      - невозможно  прочитать  или  записать

                       аргумент PIDADR; или невозможно прочи-

                       тать аргумент PRCNAM;  или  невозможно

                       прочитать или  записать  аргумент  ID;

                       или невозможно прочиать аргумент NAME;

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

                       PRVATR;

       SS$_IVIDENT     - заданный идентификатор или держатель

                       имеет неверный  формат.  Или  заданные




                           - 896 -

                        00152-01 97 06


                       идентификатор и держатель совпадают;

       SS$_INSFMEM     - для открытия базы  данных  прав  нет

                       доступной динамической памяти процесса

                       достаточного размера;

       SS$_NOPRIV      - вызывающий процесс не имеет привиле-

                       гии CMKRNL; или выполняется не в режи-

                       ме управления или ядра; или вызывающий

                       процесс не имеет требуемой  привилегии

                       GROUP, WORLD или SYSNAM;

       SS$_NOSUCHID    - заданное имя идентификатора отсутст-

                       вует в базе данных  прав.  Если  задан

                       двоичный идентификатор, то он не  про-

                       веряется в базе данных прав;

       SS$_RIGHTSFULL  - список  прав  процесса  или  системы

                       заполнен;

       SS$_NOSYSNAM    - операция требует привилегию SYSNAM;

       SS$_IVLOGNAM    - неверно задано логическое имя;

       SS$_NONEXPR     - задан несуществующий процесс;

       SS$_PRV         - пользователь не имеет доступа с чте-

                       нием в базе данных прав.

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

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

  ния данными СУД-32, то данная программа системного обслужи-

  вания может также возвращать коды состояния СУД-32, связан-

  ные с операциями над индексными файлами (см. документ [1]).








                           - 897 -

                        00152-01 97 06


       13.69. $HIBER - перевести в состояние спячки


       Программа  системного  обслуживания  $HIBER  позволяет

  процессу перевести себя в неактивное состояние, но остаться

  при этом известным системе, так что он может быть  прерван,

  например, для получения AST. Запрос на спячку - это  запрос

  "ждать пробуждения". Когда вызывается программа  системного

  обслуживания "пробудить процесс  от  спячки"  ($WAKE),  или

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

  живания "запланировать пробуждение" ($SCHDWK), процесс про-

  должает выполнение с инструкции, следующей за вызовом прог-

  раммы $HIBER.

       Формат:

       SYS$HIBER

       Аргументы:

       Нет.

       Описание:

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

  ния $HIBER можно вызвать  только  при  помощи  макрокоманды

  $HIBER_S.

       Процесс, находящийся в состоянии спячки, можно  выгру-

  зить из балансного набора, если данный процесс не  зафикси-

  рован в балансном наборе.

       Состояние ожидания, вызванное программой $HIBER, может

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

  ром выполняется AST, имеет равную или высшую привилегию  по

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

  на спячку, и процесс допускает AST данного режима доступа.



                           - 898 -

                        00152-01 97 06


       Когда программа обработки  AST  завершает  выполнение,

  система снова выполняет программу  системного  обслуживания

  $HIBER для данного процесса. Если во время выполнения прог-

  раммы обработки AST был выдан запрос на пробуждение (данным

  же или другим процессом), то процесс возобновляет  выполне-

  ние. Если запрос на пробуждение не  выдавался,  то  процесс

  продолжает спячку.

       Если для процесса, который не  находился  в  состоянии

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

  ние, то следующий вызов программы $HIBER сразу  же  возвра-

  щает управление, то есть, процесс не переходит в  состояние

  спячки. Для выставленных запросов на пробуждение счетчик не

  ведется.

       Хотя данная программа не имеет аргументов, в обращении

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

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

  примере:

       ISTAT=SYS$HIBER()

       Возвращаемое значение кода состояния:

       SS$_NORMAL  - успешное завершение.



       13.70. $IDTOASC - транслировать  идентификатор

              в имя идентификатора


       Программа системного обслуживания $IDTOASC транслирует

  заданное значение идентификатора в имя данного  идентифика-

  тора.





                           - 899 -

                        00152-01 97 06


       Формат:

       SYS$IDTOASC     ID,[NAMLEN],[NAMBUF],[RESID],[ATTRIB]

                       ,[CONTXT]

       Аргументы:

       ID

       Использование в МОС ВП: RIGHTS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

  раммой  $IDTOASC.  Аргумент  ID  является  длинным  словом,

  содержащим данное двоичное значение  идентификатора.  Чтобы

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

  дует задать аргумент ID=-1 и вызывать программу $IDTOASC  в

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

  SS$_NOSUCHID.  Идентификаторы  возвращаются  в  алфавитоном

  порядке.

       NAMLEN

       Использование в МОС ВП: WORD_UNSIGNED

       Тип:                    слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

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

  результате трансляции программой $IDTOASC. Аргумент  NAMLEN

  является адресом слова, содержащего длину имени идентифика-

  тора, которое записывается в аргумент NAMBUF.






                           - 900 -

                        00152-01 97 06


       NAMBUF

       Использование в МОС ВП: CHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только запись

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Текстовая строка имени идентификатора, которая возвра-

  щается в результате трансляции программой  $IDTOASC.  Аргу-

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

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

       RESID

       Использование в МОС ВП: RIGHTS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Значение идентификатора имени идентификатора,  возвра-

  щаемого в аргументе NAMBUF. Аргумент RESID является адресом

  длинного слова, содержащего 32-битовый код идентификатора.

       ATTRIB (атрибуты)

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Маска атрибутов, связанных с идентификатором,  возвра-

  щаемым в аргументе RESID. Аргумент ATTRIB является  адресом

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






                           - 901 -

                        00152-01 97 06


       В  системной  макробиблиотеке  (макрокоманда  $KGBDEF)

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

       1) KGB$V_RESOURCE -  позволяет  держателю  запрашивать

  для идентификатора ресурсы типа блоков на дисках.

       Символическое  значение  является  смещением  в  битах

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

  в виде маски, если вместо префикса KGB$V использовать  пре-

  фикс KGB$M.

       CONTXT

       Использование в МОС ВП: CONTEXT

       Тип:                    длинное слово (без знака)

       Доступ:                 модификация

       Механизм:               по ссылке

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

  вызовах программы $IDTOASC. Аргумент CONTXT является  адре-

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

  каторов. Значение контекста первоначально должно быть  рав-

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

  мы $IDTOASC должен быть представлен для каждого последующе-

  го вызова. После того, как аргумент CONTXT передан програм-

  ме $IDTOASC, его нельзя модифицировать.

       Описание

       Програма системного обслуживания "транслировать  иден-

  тификатор  в  имя  идентификатора"  транслирует   указанный

  двоичный идентификатор в имя идентификатора, она может быть

  также использована для нахождения  всех  идентификаторов  в

  базе данных прав. Чтобы определить все идентификаторы, сле-




                           - 902 -

                        00152-01 97 06


  дует вызывать программу $IDTOASC повторно до тех пор,  пока

  она не вернет код состояния SS$_NOSUCHID. То,  что  возвра-

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

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

  распределила цепочку записей.

       Чтобы прекратить вызовы программы  $IDTOASC  до  того,

  как  она  вернет  код  состояния  SS$_NOSUCHID,  необходимо

  использовать программу SYS$FINISH_RDB для очистки контекста

  и перераспределения цепочки записей.

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

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

  возвращаются в порядке имен идентификаторов.

       Возвращаемые значения кода состояния:

       SS$_NORMAL    - программа системного обслуживания нор-

                     мально завершилась;

       SS$_ACCVIO    - вызывающий процесс не  может  записать

                     аргументы NAMLEN, NAMBUF, RESID,  ATTRIB

                     или CONTXT;

       SS$_INSFMEM   - для открытия базы данных прав нет дос-

                     тупной динамической памяти  достаточного

                     размера;

       SS$_INVCHAN   - неверное  содержимое  длинного   слова

                     контекста;

       SS$_IVIDENT   - указанный идентификатор имеет неверный

                     формат;

       SS$_NOIOCHAN  - в базе данных прав нет больше  доступ-

                     ных цепочек контекста;




                           - 903 -

                        00152-01 97 06


       SS$_NOSUCHID  - заданное имя  идентификатора  отсутст-

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

                     уже вся база данных прав, если  значение

                     аргумента ID равно минус 1;

       SS$_PRV       - пользователь не имеет доступа  с  чте-

                     нием в базу данных прав.

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

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

  ния данными СУД-32, данная программа служебного  обслужива-

  ния может также возвращать коды состояния СУД-32 (см. доку-

  мент [1]).



       13.71. $LCKPAG  -  зафиксировать  страницы   в

              памяти


       Программа системного  обслуживания  $LCKPAG  фиксирует

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

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

  рабочий набор и затем фиксируются в памяти. Зафиксированная

  страница не выгружается из памяти, если выгружается рабочий

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

  на замещение страниц и в этом смысле они также зафиксирова-

  ны в рабочем наборе.

       Формат:











                           - 904 -

                        00152-01 97 06


       SYS$LCKPAG    INADR,[RETADR],[ACMODE]

       Аргументы:

       INADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Начальный и конечный виртуальные адреса диапазона фик-

  сируемых страниц. Аргумент INADR -  это  адрес  массива  из

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

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

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

  номер виртуальной страницы; младшие 9 битов игнорируются.

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

  фиксируется одна страница.

       RETADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Начальный и конечный виртуальные адреса  страниц  про-

  цесса, которые программа $LCKPAG фактически  зафиксировала.

  Аргумент RETADR - это адрес массива из двух  длинных  слов,

  содержащего по порядку  начальный  и  конечный  виртуальные

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








                           - 905 -

                        00152-01 97 06


       ACMODE

       Использование в МОС ВП: ACCESS_MODE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Режим доступа, который требуется присвоить фиксируемым

  страницам. Аргумент ACMODE - это длинное слово,  содержащее

  режим доступа. Макрокоманда $PSLDEF определяет четыре режи-

  ма доступа.

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

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

  цесса. Для успешного завершения программы $LCKPAG необходи-

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

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

  воен фиксируемым страницам.

       Описание

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

  жен иметь привилегию PSWAPM.

       Если требуется зафиксировать несколько страниц и  тре-

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

  вачены, то следует фиксировать страницы по одной.

       Если во время фиксации  страниц  возникла  ошибка,  то

  массив возвращаемых адресов, если он  запрошен,  показывает

  страницы, которые были успешно зафиксированы до возникнове-

  ния ошибки. Если не было зафиксировано ни  одной  страницы,

  то оба длинных слова в массиве возвращаемых адресов  содер-

  жат значение минус 1.




                           - 906 -

                        00152-01 97 06


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

  при помощи программы  системного  обслуживания  "освободить

  страницы в  памяти"  ($ULKPAG).  При  осуществлении  выхода

  образа зафиксированные страницы автоматически  освобождают-

  ся.

       Возвращаемые значения кода состояния:

       SS$_WASCLR     - успешное  завершение.  Все  указанные

                      страницы были прежде свободными;

       SS$_WASSET     - успешное завершение. По крайней  мере

                      одна из указанных страниц была зафикси-

                      рована ранее;

       SS$_ACCVIO     - вызывающая программа не может  прочи-

                      тать  массив  входных   адресов;   либо

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

                      недоступна или не существует;

       SS$_LCKPAGFUL  - достигнут определенный в системе мак-

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

                      которые можно зафиксировать в памяти;

       SS$_NOPRIV     - процесс не имеет привилегии для  фик-

                      сации страниц в памяти.



       13.72. $LKWSET  -   фиксировать   страницы   в

              рабочем наборе


       Программа системного  обслуживания  $LKWSET  фиксирует

  диапазон страниц в рабочем наборе; если данные страницы еще

  не включены в рабочий набор, то она  включает  и  фиксирует

  их. Страница, которая зафиксирована в  рабочем  наборе,  не



                           - 907 -

                        00152-01 97 06


  становится кандидатом на замещение.

       Формат:

       SYS$LKWSET     INADR,[RETADR],[ACMODE]

       Аргументы:

       INADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Начальный и конечный виртуальные адреса диапазона фик-

  сируемых в рабочем наборе страниц.  Аргумент  INADR  -  это

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

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

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

  представляет номер виртуальной страницы.  Младшие  9  битов

  игнорируются.

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

  фиксируется одна страница.

       RETADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

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

  страниц,  фактически  зафиксованных  программой   $LVKWSET.

  Аргумент RETADR - это адрес массива из двух слов,  содержа-

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




                           - 908 -

                        00152-01 97 06


  цесса.

       ACMODE

       Использование в МОС ВП: ACCESS_MODE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтеие

       Механизм:               по значению

       Режим доступа, который требуется присвоить фиксируемым

  страницам. Аргумент ACMODE - это длинное слово,  содержащее

  режим доступа. Макрокоманда $PSLDKF определяет четыре режи-

  ма доступа.

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

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

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

  живания $LKWSET необходимо, чтобы результирующий режим дос-

  тупа имел равную или высшую привилегию по сравнению  с  тем

  режимом доступа, который уже присвоен  фиксируемым  страни-

  цам.

       Описание

       Если требуется зафиксировать несколько страниц и  тре-

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

  зафиксированы, то следует фиксировать страницы по одной.

       Если во время фиксации  страниц  возникла  ошибка,  то

  массив возвращаемых адресов, если он  запрошен,  показывает

  страницы, которые были успешно зафиксированы до возникнове-

  ния ошибки. Если не было зафиксировано ни  одной  страницы,

  то оба длинных слова в массиве возвращаемых адресов страниц

  содержат минус 1.




                           - 909 -

                        00152-01 97 06


       Страницы,  зафиксированные  в  рабочем  наборе,  можно

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

  "освободить страницы в рабочем наборе" ($ULWSET).

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

  ровать в рабочем наборе.

       Возвращаемые значения кода состояния:

       SS$_WASCLR    - успешное  завершение.   Все   заданные

                     страницы были прежде свободны;

       SS$_WASSET    - успешное завершение. По  крайней  мере

                     одна из  указанных  страниц  была  ранее

                     зафиксирована в рабочем наборе;

       SS$_ACCVIO    - вызывающая программа не  может  прочи-

                     тать массив входных адресов или не может

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

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

                     недоступна или не существует;

       SS$_LKWSETFUL - рабочий набор полон. Если  фиксируется

                     несколько страниц, то, возможно, не хва-

                     тает доступных динамических страниц  для

                     того, чтобы продолжить выполнение;

       SS$_NOPRIV    - какая-то страница в заданном диапазоне

                     принадлежит системному адресному  прост-

                     ранству, либо указана глобальная страни-

                     ца с доступом на запись;

       SS$_PAGOWNVIO - страницы нельзя зафиксировать,  потому

                     что режим доступа, связанный  с  вызовом

                     $LKWSET, является менее  привилегирован-




                           - 910 -

                        00152-01 97 06


                     ным по сравнению с тем режимом  доступа,

                     который связан с фиксируемыми  страница-

                     ми.



       13.73. $MGBLSC - отобразить глобальную секцию


       Программа системного обслуживания  $MGBLSC  устанавли-

  вает соответствие (отображает) между страницами в виртуаль-

  ном адресном пространстве процесса и физическими  страница-

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

       Формат:

       SYS$MGBLSC     INADR,[RETADR],[ACMODE],[FLAGS],

                      GSDNAME,[IDENT],[RELPAG]

       Аргументы:

       INADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Начальный и конечный виртуальные адреса в  виртуальном

  адресном пространстве процесса (либо в области P0,  либо  в

  области P1), на которые необходимо отобразить секцию. Аргу-

  мент INADR - это адрес массива из двух длинных слов, содер-

  жащих по порядку начальный и  конечный  виртуальные  адреса

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

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

  младшие 9 битов игнорируются.





                           - 911 -

                        00152-01 97 06


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

  отображается одна страница  (за  исключением  того  случая,

  когда в аргументе FLAGS установлен бит SEC$M_EXPREG).

       Если в аргументе FLAGS установлен бит SEC$M_EXPREG, то

  начальный адрес (первое длинное слово), заданный в аргумен-

  те INADR,  определяет,  отображается  ли  данная  секция  в

  область программы  (P0)  или  в  область  управления  (P1);

  конечный адрес (второе длинное слово) игнорируется.

       RETADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Начальный и конечный виртуальные адреса  процесса,  на

  которые  $MGBLSC  фактически  отобразила  секцию.  Аргумент

  RETADR - это адрес массива из двух длинных слов, содержащих

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

  са.

       ACMODE

       Использование в МОС ВП: ACCESS_MODE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

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

  Аргумент ACMODE - это длинное слово, содержащее режим  дос-

  тупа. Макрокоманда $PSLDEF определяет обозначения для четы-




                           - 912 -

                        00152-01 97 06


  рех режимов доступа

       FLAGS

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Маска флагов,  задающая  варианты  операции.  Аргумент

  FLAGS - это битовый вектор размером в  длинное  слово,  где

  каждый установленный в 1 бит задает соответствующую возмож-

  ность.

       Символические имена для битов  определяют  при  помощи

  макрокоманды $SECDEF. Чтобы построить аргумент FLAGS, необ-

  ходимо указать символические имена каждой желаемой  возмож-

  ности в операции "логическое или".

       В следующем списке описаны значения флагов:

       1)  SEC$M_WRT  -  отобразить  секцию  с  доступом   на

  чтение/запись. По умолчанию секция отображатеся с  доступом

  только на чтение;

       2) SEC$M_SYSGBL - отобразить системную глобальную сек-

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

  цией;

       3) SEC$M_EXPREG - отобразить секцию на первый  доступ-

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

  ражается на диапазон, заданный аргументом INADR.










                           - 913 -

                        00152-01 97 06


       GSDNAM

       Использование в МОС ВП: SECTION_NAME

       Тип:                    строка текста

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Аргумент GSDNAM -  это  адрес  дескриптора  символьной

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

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

  МОС ВП интерпретирует UIC группы как часть имени глобальной

  секции; таким образом, все имена глобальных  секций  неявно

  квалифицируются их полями идентификации.

       IDENT

       Использование в МОС ВП: SECTION_ID

       Тип:                    квадрослово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

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

  цессов, отображающих существующую глобальную секцию, крите-

  рий соответствия идентификаций. Аргумент IDENT - это  адрес

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

       Первое длинное слово задает в трех младших битах  кри-

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

  ческие имена, при помощи которых их можно  задавать,  и  их

  значения, перечислены в табл.64.








                           - 914 -

                        00152-01 97 06


                                                   Таблица 64

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

  Значение!     Имя    ! Критерий соответствия

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

     0    !SEC$K_MATALL!соответствуют все версии секции

     1    !SEC$K_MATEQU!соответствуют только те секции, для

          !            !которых совпадает младшая и старшая

          !            !идентификации

     2    !SEC$K_MATLEQ!соответствуют только те секции, для

          !            !которых старшие идентификации равны,

          !            !а младшая идентификация, заданная

          !            !отображающим процессом, меньше или

          !            !равна младшей идентификации глобаль-

          !            !ной секции


       Во втором длинном слове содержится номер версии. Номер

  версии содержит два поля: младшую идентификацию  в  младших

  24-х битах и старшую идентификацию в старших 8-ми битах.

       Если аргумент IDENT не задан или равен 0, (по  умолча-

  нию), то поля номера  версии  и  критерия  соответствия  по

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

       RELPAG

       Использование в МОС ВП: LONGWORD_UNSIGNED

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Относительный номер  первой  отображаемой  страницы  в

  секции. Аргумент RELPAG -  это  длинное  слово,  содержащее



                           - 915 -

                        00152-01 97 06


  данный номер.

       Если аргумент RELPAG не задан или равен 0 (по  умолча-

  нию), то глобальная секция отображается, начиная с  первого

  виртуального блока в секции.

       Описание

       Маска защиты, задаваемая во время создания  глобальной

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

  только чтение), который имеет к секции отдельный процесс.

       Программа  $MGBLSC  использует   следующие   системные

  ресурсы:

       1) квота предела рабочего  набора  процесса  (WSQUOTA)

  должна быть достаточной для увеличивающегося при  отображе-

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

       2) если страницы секции являются копируемыми по  ссыл-

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

  обмена страниц (PQFLQUOTA).

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

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

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

  (WSQUOTA). Если размер рабочего набора процесса меньше дан-

  ной квоты, то размер рабочего  набора  увеличивается.  Если

  размер рабочего набора процесса  больше  данной  квоты,  то

  размер рабочего набора уменьшается.

       Когда программа $MGBLSC отображает глобальную  секцию,

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

  ву процесса. Секция отображается в направлении  от  младших

  адресов к старшим назависимо от того,  отображается  данная




                           - 916 -

                        00152-01 97 06


  секция в зону программы или в зону управления.

       Если во время отображения секции возникла  ошибка,  то

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

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

  ошибки. Если не было отображаемых страниц, то  оба  длинных

  слова в массиве возвращаемых адресов содержат минус 1.

       Возвращаемые значения кода состояния:

       SS$_NORMAL       - успешное завершение;

       SS$_ACCVIO       - вызывающая программа не может  про-

                        читать массив  входных  адресов,  имя

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

                        ни, или  поле  идентификации  секции,

                        либо не может записать массив возвра-

                        щаемых адресов;

       SS$_ENDOFFILE    - предупреждение.   Заданный    номер

                        начального виртуального  блока  нахо-

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

                        файла;

       SS$_EXQUOTA      - процесс превысил свою  квоту  файла

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

                        по ссылке страницы;

       SS$_INSFWSL      - предел рабочего набора процесса мал

                        для    увеличившегося    виртуального

                        адресного пространства;

       SS$_INTERLOCK    - захват битовой маски для назначения

                        глобальных секций из указанной разде-

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




                           - 917 -

                        00152-01 97 06


                        цессом;

       SS$_IVLOGNAM     - имя глобальной секции имеет нулевую

                        длину или длину более 15 символов;

       SS$_IVSECFLG     - установлен зарезервированный флаг;

       SS$_IVSECIDCTL   - недопустимое поле управления крите-

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

                        ции;

       SS$_NOPRIV       - маска  защиты  файла,  задававшаяся

                        при создании глобальной секциии, про-

                        тиворечит типу доступа,  запрошенному

                        вызывающим  процессом;  или  какая-то

                        страница из диапазона входных адресов

                        находится в системном адресном прост-

                        ранстве;

       SS$_NOSUCHSEC    - предупреждение. Заданная глобальная

                        секция не существует;

       SS$_PAGOWNVIO    - страница  из  указанного  диапазона

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

                        привилегированному режиму доступа;

       SS$_SHMNOTCNCT   - разделяемая  память,  имя   которой

                        задано в аргументе GSDNAM, неизвестна

                        системе. Данная ошибка может  возник-

                        нуть  в  результате   орфографической

                        ошибки в строке, неверно присвоенного

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

                        сбоя при  идентификации  памяти,  как

                        разделяемой, во время системной гене-




                           - 918 -

                        00152-01 97 06


                        рации;

       SS$_TOOMANYLNAM  - трансляция  логического  имени  для

                        строки  GSDNAM  превысила  допустимую

                        глубину;

       SS$_VASFULL      - переполенно  виртуальное   адресное

                        пространство процесса;  нет  места  в

                        таблице страниц для страниц,  которые

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

                        секцию.



       13.74. $MOD_HOLDER  -  модифицировать   запись

              держателя в базе данных прав


       Программа служебного обслуживания $MOD_HOLDER  модифи-

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

  фикатора в базе данных прав. При этом можно  добавлять  или

  удалять атрибуты идентификатора.

       Формат:

       SYS$MOD_HOLDER     ID,HOLDER,[SET_ATTRIB],

                          [CLR_ATTRIB]

       Аргументы:

       ID

       Использование в МОС ВП: RIGHTS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

  пограмма $MOD_HOLDER модифицирует запись  держателя.  Аргу-



                           - 919 -

                        00152-01 97 06


  мент ID является длинным словом, содержащим значение  иден-

  тификатора.

       HOLDER

       Использование в МОС ВП: RIGHTS_HOLDER

       Тип:                    квадрослово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

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

  выполнения программы системного  обслуживания  $MOD_HOLDER.

  Аргумент HOLDER является адресом  квадрослова,  содержащего

  идентификатор UIC держателя в первом длинном слове и  нуле-

  вое значение во втором длинном слове.

       SET_ATTRIB

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

  идентификатора в результате работы  программы  $MOD_HOLDER.

  Аргумент SET_ATTRIB  является  длинным  словом,  содержащим

  маску атрибутов.

       В  системной  макробиблиотеке  (макрокоманда  $KGBDEF)

  определено символическое значение:

       KGB$V_RESOURCE - позволяет держателю  запрашивать  для

  идентификатора ресурсы типа блоков на дисках.

       Символическое  значение  является  смещением  в  битах

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




                           - 920 -

                        00152-01 97 06


  в виде маски с соответствующим  установленным  битом,  если

  вместо префикса KGB$V использовать префикс KGB$M.

       CLR_ATTRIB

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

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

  $MOD_HOLDER. Аргумент CLR_ATTRIB является  длинным  словом,

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

       В  системной  макробиблиотеке  (макрокоманда  $KGBDEF)

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

       1KGB$V_RESOURCE - позволяет держателю запрашивать  для

  идентификатора ресурсы типа блоков на дисках.

       Символическое  значение  является  смещением  в  битах

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

  в виде маски с соответствующим  установленным  битом,  если

  вместо префикса KGB$V использовать префикс KGB$M.

       Описание:

       Программа  системного   обслуживания   "модифицировать

  запись держателя в базе данных прав" модифицирует указанную

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

  лять или удалять атрибуты идентификатора.

       Если заданы оба аргумента SET_ATTRIB и CLR_ATTRIB,  то

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

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




                           - 921 -

                        00152-01 97 06


  будет установка данного бита.

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

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

  данная база данных находится  в  группе  файлов  SYS$SYSTEM

  (что принимается по умолчанию), то для получения доступа  с

  записью в такую базу данных требуется привилегия SYSPRV.

       Возвращаемые значения кодов состояния:

       SS$_NORMAL   - успешное завершение;

       SS$_ACCVIO   - вызывающая программа не может прочитать

                    аргумент HOLDER;

       SS$_BADPARAM - указанные  атрибуты  содержат  неверные

                    флаги атрибутов;

       SS$_INSFMEM  - для открытия базы данных прав нет  дос-

                    тупной динамической  памяти  достаточного

                    размера;

       SS$_IVIDENT  - заданный идентификатор или  идентифика-

                    тор держателя имеет неверный формат;

       SS$_NOSUCHID - указанный идентификатор  отсутствует  в

                    базе данных прав; или указанный идентифи-

                    катор держателя отсутствует в базе данных

                    прав;

       RMS_PRV      - пользователь не имеет доступа с записью

                    в базу данных прав.

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

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

  ния данными СУД-32, данная программа системного  обслужива-

  ния может также возвращать коды состояния  системы  СУД-32,




                           - 922 -

                        00152-01 97 06


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

  [1]).



       13.75. $MOD_IDENT модифицировать идентификатор

              в базе данных прав


       Программа системного обслуживания $MOD_IDENT модифици-

  рует указанную запись идентификатора в  базе  данных  прав.

  При этом можно добавить или удалить атрибуты  идентификато-

  ра, изменить имя или значение идентификатора.

       Формат:

       SYS$MOD_IDENT     ID,[SET_ATTRIB],[CLR_ATTRIB]

                         ,[NEW_NAME],[NEW_VALUE]

       Аргументы:

       ID

       Использование в МОС ВП: RIGHTS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Двоичное  значение  идентификатора,  запись   которого

  модифицируется в результате  работы  программы  $MOD_IDENT.

  Аргумент ID является длинным  словом,  содержащим  значение

  идентификатора.

       SET_ATTRIB

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению



                           - 923 -

                        00152-01 97 06


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

  тификатора в результате работы программы $MOD_IDENT.  Аргу-

  мент SET_ATTRIB является длинным словом,  содержащим  маску

  атрибутов.

       В системной библиотеке (макрокоманда $KGBDEF)  опреде-

  ляется символическое значение:

       KGB$V_RESOURCE - позволяет держателю  запрашивать  для

  идентификатора ресурсы типа блоков на дисках.

       Символическое  значение  является  смещением  в  битах

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

  в виде маски с соответствующим  установленным  битом,  если

  вместо префикса KGB$V использовать префикс KGB$M.

       CLR_ATTRIB

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

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

  $MOD_IDENT. Аргумент CLR_ATTRIB  является  длинным  словом,

  содержащим маску атрибутов.

       В  системной  макробиблиотеке  (макрокоманда  $KGBDEF)

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

       KGB$V_RESOURCE - позволяет держателю  запрашивать  для

  идентификатора ресурсы типа блоков на дисках.

       Символическое  значение  является  смещением  в  битах

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




                           - 924 -

                        00152-01 97 06


  в виде маски с соответствующим  установленным  битом,  если

  вместо префикса KGB$V использовать префикс KGB$M.

       NEW_NAME

       Использование в МОС ВП: CHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

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

  идентификатору. Аргумент NEW_NAME является адресом дескрип-

  тора, указывающего на строку имени идентификатора.

       Имя идентификатора содержит от 1 до 31 символа,  вклю-

  чая знаки денежной единицы и подчеркивания, при этом в  имя

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

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

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

       NEW_VALUE

       Использование в МОС ВП: RIGHTS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Новое значение, которое должно быть назначено  указан-

  ному идентификатору. Аргумент  NEW_VALUE  является  длинным

  словом, содержащим двоичное значение указанного идентифика-

  тора.  При  изменении  значения  идентификатора   программа

  $MOD_IDENT меняет также значение данного идентификатора  во

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




                           - 925 -

                        00152-01 97 06


  идентификатор.

       Описание

       Программа  системного   обслуживания   "модифицировать

  идентификатор в базе данных  прав"  модифицирует  указанную

  запись идентификатора в базе данных прав. Если  заданы  оба

  аргумента SET_ATTRIB и CLR_ATTRIB, то атрибут сначала  уда-

  ляется. Таким образом, если один и тот же атрибут указан  в

  аргументах SET_ATTRIB и CLR_ATTRIB, то в  результате  этого

  бит будет установлен.

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

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

  база данных входит в группу файлов SYS$SYSTEM  (что  прини-

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

  базу данных требуется привилегия SYSPRV.

       Возвращаемые значения кодов состояния:

       SS$_NORMAL    - программа   системного    обслуживания

                     успешно завершилась;

       SS$_NOSUCHID  - указанный идентификатор отсутствует  в

                     базе данных прав;

       SS$_BADPARAM  - указанные атрибуты  содержат  неверные

                     флаги атрибутов;

       SS$_INSFMEM   - для открытия базы данных прав нет дос-

                     тупной динамической памяти  достаточного

                     размера;

       SS$_IVIDENT   - заданный идентификатор имеет  неверный

                     формат;

       RMS$_PRV      - пользователь  не   имеет   доступа   с




                           - 926 -

                        00152-01 97 06


                     записью в базу данных прав.

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

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

  ния данными СУД-32, данная программа системного  обслужива-

  ния может также возвращать коды состояния  системы  СУД-32,

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

  [1]).



       13.76. $MOUNT - монтировать том


       Программа  системного  обслуживания  $MOUNT  выполняет

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

  томов, а также задает варианты операции монтирования.

       Формат:

       SYS$MOUNT     ITMLST

       Аргументы:

       ITMLST

       Использование в МОС ВП: ITEM_LIST_3

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Список элементов,  задающий  параметры  для  программы

  MOUNT. Аргумент ITMLST является адресом списка дескрипторов

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

  необходимую для выполнения операции монтирования.

       Список элементов должен включать  в  себя  по  крайней

  мере один дескриптор устройства.  Список  элементов  завер-

  шается длинным словом, содержащим значение 0.



                           - 927 -

                        00152-01 97 06


       На рис.70 представлен формат дескриптора элемента.


                    Дескриптор элемента

       31                     15                            0
       ------------------------------------------------------
       !    Код элемента      !      Длина буфера           !
       ------------------------------------------------------
       !                  Адрес буфера                      !
       ------------------------------------------------------
       !            Адрес возвращаемой длины                !
       ------------------------------------------------------

                           Рис. 70

       Поля дескриптора элемента программы $MOUNT:

  длина буфера -

       Слово, задающее длину (в байтах) буфера, который  пре-

       доставляет информацию, необходимую  программе  $MOUNT,

       чтобы обработать данный код элемента. Требуемая  длина

       буфера зависит от кода элемента.  Если  значение  поля

       "длина буфера" слишком мало, то программа $MOUNT  усе-

       кает данные;

  код элемента -

       Слово, содержащее предоставляемый пользователем симво-

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

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

       $MNTDEF;

  адрес буфера -

       Длинное слово, содержащее адрес буфера,  который  пре-

       доставляет информацию программе $MOUNT;

  адрес возвращаемой длины -

       Данное поле не используется;






                           - 928 -

                        00152-01 97 06


       Коды элементов программы MOUNT:

  MNT$_DEVNAM -

       Данный код элемента  задает  имя  устройства,  которое

       должно монтироваться. Буфер  должен  содержать  строку

       символов длиной от 1 до 64 байтов, представляющую  имя

       устройства. Имя устройства может быть именем  физичес-

       кого устройства или логическим именем. Если это  логи-

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

       ческого устройства. Если монтируется группа томов,  то

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

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

       томов монтируется одно устройство;

  MNT$_VOLNAM -

       Данный код элемента задает имя  тома,  который  должен

       быть смонтирован на устройстве. Буфер должен содержать

       строку длиной от 1 до 12  символов,  которая  является

       именем тома. Код элемента MNT$_VOLNAM может появляться

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

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

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

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

       указаны  коды  MNT$_DEVNAM  и  MNT$_VOLNAM.  Программа

       MOUNT монтирует том, указанный в первом коде  элемента

       MNT$_VOLNAM, на устройстве, указанном  в  первом  коде

       элемента MNT$_DEVNAM списка; том, указанный во  втором

       коде элемента MNT$_VOLNAM,  монтирует  на  устройстве,

       указанном во втором коде элемента MNT$_DEVNAM  и  и.д.




                           - 929 -

                        00152-01 97 06


       Для всех заданных томов и устройств. Таким  образом  в

       списке дожно быть равное число данных двух кодов  эле-

       ментов. Если монтируется группа томов магнитных  лент,

       то число кодов элементов  MNT$_DEVNAM  не  обязательно

       должно быть равно числу  кодов  элемента  MNT$_VOLNAM,

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

       таких томов;

  MNT$_LOGNAM -

       Данный код элемента задает логическое имя тома. Данное

       логическое имя  становится  эквивалентным  имени  уст-

       ройства, заданному  первым  кодом  MNT$_DEVNAM.  Буфер

       должен содержать строку длиной от 1  до  64  символов,

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

       вариант (MNT$M_GROUP или MNT$M_SYSTEM), то  логическое

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

  MNT$_FLAGS -

       Данный код элемента задает вектор размером  в  длинное

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

       монтирования. Буфер должен  содержать  длинное  слово,

       которое является вектором битов.

       Макрокоманда $MNTDEF  определяет  символические  имена

  для каждого варианта в векторе битов. Вектор  битов  конст-

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

  вариантов в операции "логическое или".










                           - 930 -

                        00152-01 97 06


  Символические имена для всех битов следующие:

       MNT$M_FOREIGN - том должен  монтироваться  как  чужой;

  это означает, что том не  имеет  файловой  структуры.  Если

  указан данный вариант, то следующие  коды  элементов  могут

  появляться  в  списке   только   один   раз:   MNT$_DEVNAM,

  MNT$_VOLNAM,  MNT$_LOGNAM.  Чтобы  задать  данный  вариант,

  вызывающий процесс  должен  либо  быть  владельцем  данного

  тома, либо иметь привилегию VOLPRO;

       MNT$M_GROUP - логическое имя тома, который должен мон-

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

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

  ром группы UIC, что и вызывающий процесс. Чтобы задать дан-

  ный вариант, пользователь должен иметь  привилегию  GRPNAM.

  Данный вариант относится только к дискам;

       MNT$M_NOASIST - программа $MOUNT не запрашивает вмеша-

  тельства оператора, если  во  время  операции  монтирования

  произойдет ошибка. Если данный  вариант  не  указан,  то  в

  некоторых ошибочных ситуациях программа $MOUNT  запрашивает

  помощь у оператора для устранения данных ошибок;

       MNT$M_NODISKQ - монтируемому тому не навязываются дис-

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

  квоты навязываются. Чтобы задать данный вариант, вызывающий

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

  легию VOLPRO. Данный вариант относится только к дискам;

       MNT$M_NOHDR3 - при монтировании магнитных лент на  них

  не должны записываться  метки  HDR3  и  HDR4.  Если  данный

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




                           - 931 -

                        00152-01 97 06


  все ленты;

       MNT$M_NOWRITE - монтируемый том программно защищен  от

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

  что том имеет доступ с записью с чтением;

       MNT$M_OVR_ACCESS - если позволяет установка, то данный

  вариант замещает любой символ в поле доступности тома. Что-

  бы задать данный вариант,  пользователь  должен  либо  быть

  владельцем  тома,  либо  иметь  привилегию  VOLPRO.  Данный

  вариант относится только к магнитным лентам;

       MNT$M_OVR_EXP - магнитная лента, для  которой  еще  не

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

  другой информации. Чтобы указать данный вариант,  пользова-

  тель должен быть либо владельцем данного тома,  либо  иметь

  привилегию VOLPRO;

       MNT$M_OVR_IDENT - том можно монтировать,  не  указывая

  имя тома (используя код элемента MNT$_VOLNAM). Если  данный

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

  MNT$M_GROUP, MNT$M_SHARE и MNT$M_SYSTEM;

       MNT$M_OVR_LOCK - программная блокировка записи,  кото-

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

  памяти, может быть изменена;

       MNT$M_OVR_SETID - не должен выполняться контроль иден-

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

  руются катушки с лентами из группы  томов.  Данный  вариант

  относится только к магнитным лентам;

       MNT$M_READCHECK - после каждой операции чтения  должен

  выполняться контроль чтения;




                           - 932 -

                        00152-01 97 06


       MNT$M_SHARE - том должен монтироваться  как  общий  и,

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

  лям. Данный вариант относится только к дискам. Если том был

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

  щем вызове программы $MOUNT указывается вариант MNT$_SHARE,

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

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

  указал при вызове программы $MOUNT вариант  MNT$_SHARE,  то

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

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

       MNT$M_MESSAGE - сообщения  будут  посылаться  на  уст-

  ройство пользователя SYS$OUTPUT;

       MNT$M_SYSTEM - логическое имя монтируемого  тома  вво-

  дится в системную таблицу логических имен и том  становится

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

  защита на базе идентификаторов UIC разрешает доступ к  дан-

  ному тому. Чтобы задать данный вариант, пользователь должен

  иметь привилегию SYSNAM. Данный вариант относится только  к

  дискам.

       MNT$M_WRITECHECK - после каждой операции записи должен

  быть выполнен контроль записи;

       MNT$M_WRITETHRU - кэширование  обратной  записи  отме-

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

  на диск при каждой операции записи. Если данный вариант  не

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

  файл не закроется. Кэширование головных меток  файла  улуч-

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




                           - 933 -

                        00152-01 97 06


  в случае сбоя системы. Данный вариант  относится  только  к

  дискам;

       MNT$M_NOMNTVER - том не помечается  как  кандидат  для

  автоматической  верификации   монтирования.   Если   данный

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

  матической проверки монтирования. Данный вариант  относится

  только к дискам;

       MNT$M_NOCACHE - отменяется все кэширование,  связанное

  с данным  томом.  Указание  данного  варианта  эквивалентно

  заданию MNT$M_WRITETHRU, заданию величины 1  в  дескрипторе

  элемента MNT$_FIELD и заданнию величины  0  в  дескрипторах

  элементов MNT$_EXTENT данный  вариант  относится  только  к

  дискам;

       MNT$M_NOAUTO  -  отменяется  автоматическая   разметка

  томов (AVL) и автоматическое распознавание томов (AVR) если

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

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

  томов. После завершения обработки тома  оператор  указывает

  лентопротяжное устройство, на которое загружается следующий

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

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

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

  чить средства AVL и  AVR  указав  вариант  MNT$M_INIT_CONT.

  Вариант MNT$M_NOAUTO относится только к магнитным лентам;

       MNT$M_INIT_CONT -  последующие  тома  в  группе  томов

  должны  инициализироваться  без  вмешательства   оператора.

  Программа  $MOUNT  инициализирует  новые  тома  с  защитой,




                           - 934 -

                        00152-01 97 06


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

  дает уникальные имена меток томов максимум для 99 томов  из

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

  должен распределить ряд лентопротяжных устройств для группы

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

  во, на которое не загружена магнитная лента  или  загружена

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

  рузить правильную магнитную ленту. Программма $MOUNT демон-

  тирует и разгружает тома после  того  как  они  обработаны.

  Оператор может загрузить следующий том из группы  томов  до

  того, как достигнет конца текущая катушка с магнитной лент-

  ной из данной группы томов.  При  записи  на  группу  томов

  программа $MOUNT автоматически выполняет  следующие  опера-

  ции: переключается на следующее устройство;  инициализирует

  следующую магнитную ленту с теми же самыми  меткой  тома  и

  защитой, как и первый том в той же группе; сообщает  опера-

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

  $MOUNT генерирует метку следующего тома и  печатает  данный

  том. Имя метки, которое  программа  $MOUNT  генерирует  для

  каждого последующего тома из группы  томов,  состоит  из  6

  символов: первые четыре символа совпадают с первыми четырь-

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

  Данный вариант относится только к магнитным лентам;

       MNT$M_OVR_VOLO- в  метке  тома  не  обрабатывать  поле

  идентифиакатора владельца. Программа $MOUNT читает информа-

  цию о владельце тома из поля "владелец  тома"  меток  тома.

  Операционная система МОС  ВП  требует,  чтобы  пользователь




                           - 935 -

                        00152-01 97 06


  указывал данный вариант для обработки магнитных лент  когда

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

  МОС ВП или при инициализации тома была указана защита тома.

  Чтобы задать данный вариант вызывающий процесс должен иметь

  либо привилегию VOLPRO, либо быть владельцем  данный  тома.

  Данный вариант относится только к магнитным лентам;

  MNT$_ACCESSED -

       Данный код элемента задает число одновременно  исполь-

       зуемых каталогов на томе. Буфер должен содержать целое

       число в длинном слове в диапазоне от 0 до 255.  Данное

       число замещает то число каталогов, которое было указа-

       но при инициализации тома. Чтобы указать код  элемента

       MNT$_ACCESSED, взывающий процесс должен иметь привиле-

       гию OPER. Данный вариант относится только к дискам;

  MNT$_PROCESSOR -

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

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

       управляющего процесса (ACP), который должен  обрабаты-

       вать данный том. Указанный процесс ACP  замещает  тот,

       который связан с данным устройством. Для дисков с фай-

       ловой структурой уровня 2 данный элементный  код  эле-

       мента  управляет  распределением  кэша  блоков.  Чтобы

       задать код элемента MNT$_PRCESSOR, вызывающий  процесс

       должен иметь привилегию OPER.  Буфер  дожен  содержать

       строку символов, задающую либо строку UNIQUE, либо имя

       устройства, либо спецификацию файла.






                           - 936 -

                        00152-01 97 06


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

  случаев следующие:

       1) UNIQUE - для дисков с файловой структурой уровня  1

  строка UNIQUE указывает, что программа $MOUNT создает новый

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

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

  кодом MNT$_DEVNAM. Для дисков с файловой структурой  уровня

  2 строка UNIQUE распределяет отдельный кэш блоков;

       2) DDCU: - для магнинтых  лент  и  дисков  с  файловой

  структурой уровня 1 строка DDCU: указывает,  что  программа

  $MOUNT использует тот процесс ACP, который  используется  в

  текущий момент устройством DDCU. Заданное устройство должно

  иметь формат DDCU:, например, DUA3:. Для дисков с  файловой

  структурой уровня 2 строка указывает, что программа  $MOUNT

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

       3) FILE_SPEC - указывает, что программа $MOUNT создает

  новый процесс для выполнения образа  ACP  со  спецификацией

  файла FILE_SPEC. Символы обобщения недопустимы. Файл должен

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

  именем SYS$SYSTEM;

  MNT$_VOLSET -

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

       должен  содержать  строку,  содержащую  от  1  до   12

       алфавитно-цифровых символов,  которые  составляют  имя

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

       тома, заданные кодом MNT$_VOLNAM, связываются в  новую

       группу томов или добавляются к уже существующей группе




                           - 937 -

                        00152-01 97 06


       в зависимости от того, является  ли  указанное  имя  в

       коде эдемента MNT$_VOLSET, новым или уже  существующим

       именем. Если код  элемента  MNT$_VOLSET  задается  для

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

       невой том (RVN1) должен либо быть уже  смонтированным,

       либо указанным первым в списке  (кодами  MNT$DEVNAM  и

       MNT$_VOLNAM). Если код элемента  MNT$_VOLSET  задается

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

       ный  в   списке   кодами   элементов   MNT$_DEVNAM   и

       MNT$_VOLNAM, становится корневым томом;

  MNT$_BLOCKSIZE -

       Данный код элемента задает размер  блока,  принимаемый

       по умолчанию для томов на магнитных лентах. Буфер дол-

       жен содержать целое число размером в длинное  слово  в

       диапазоне от 20 до 65532 байтов для работы с  системой

       управления данными СУД-32, или от 10 до  65534  байтов

       для операций, которые не  используют  систему  СУД-32.

       Данный код элемента относится только к магнитным  лен-

       там. Если данный код элемента не задан, то по  умолча-

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

       магнитных лентах файловой структуры и 512  байтов  для

       "чужих" и непомеченных магнитных  лент.  Код  элемента

       MNT$_BLOCKSIZE нужно указывать при  монтировании  маг-

       нитных лент, которые не имеют меток HDR2  и  магнитных

       лент, которые должны содержать записи, которые  больше

       длины блока, принимаемой по умолчанию;






                           - 938 -

                        00152-01 97 06


  MNT$_DENSITY -

       Данный код элемента задает плотность, с которой данные

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

       магнитной ленте. Буфер должен содержать значение  раз-

       мером в длинное слово, которое задает одну из  следую-

       щих допустимых плотностей: 800, 1600 или 6250.  Данный

       код элемента относится только к магнитным лентам. Ука-

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

       лента является "чужой", непомеченной и  первой  опера-

       цией является запись;

  MNT$_EXTENT -

       Данный код элемента задает  размер  кэша  экстентов  в

       единицах указателей экстентов. Буфер должен  содержать

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

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

       OPER. Значение 0 (принимаемое по  умолчанию)  отменяет

       кэширование. Данный код элемента  относится  только  к

       дискам;

  MNT$_FILEID -

       Данный код элемента задает размер кэша идентификаторов

       файлов в единицах номеров файлов. Размер должен содер-

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

       размер. Чтобы указать данный код  элемента,  требуется

       привилегия OPER. Значение 1 отменяет кэширование. Дан-

       ный код элемента относится только к дискам;

  MNT$_LIMIT -

       Данный код элемента задает максимальную величину  сво-




                           - 939 -

                        00152-01 97 06


       бодного пространства в кэше  экстентов.  Буфер  должен

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

       мер свободного пространства на диске. Данный код  эле-

       мента относится только к дискам;

  MNT$_OWNER -

       Данный код элемента задает идентификатор UIC,  который

       должен быть назначен для владения томом. Буфер  должен

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

       представляющее идентификатор UIC. Для назначения иден-

       тифкатора UIC требуется либо привилегия  VOLPRO,  либо

       владение томом;

  MNT$_VPROT -

       Данный код элемента задает защиту, которая назначается

       тому. Буфер должен содержать  в  длинном  слове  маску

       защиты, которая определяет четыре типа доступа, разре-

       шенные четырем категориям пользователей.

       Маска защиты состоит из четырех 4-битовых полей.  Каж-

  дое поле предоставляет или запрещает доступ с чтением  (R),

  записью (W), логический (L) и  физический  (P)  доступ  для

  какой-то категории пользователей. Сброшенный бит  разрешает

  доступ, установленный бит запрещает доступ. На рис.71 пока-

  зана структура маски защиты.














                           - 940 -

                        00152-01 97 06


                        Маска защиты

       -------------------------------------------------
       !     Все   !  Группа   !  Владелец !  Система  !
       -------------------------------------------------
       ! P! L! W! R! P! L! W! R! P! L! W! R! P! L! W! R!
       -------------------------------------------------
        15 14 13 12 11 10 9  8   7 6   5  4  3  2  1 0

                          Рис. 71


       Если код элемента MNT$_VPROT не задан или задан равным

  0, то том получает защиту, которая ему была  назначена  при

  инициализации. Чтобы показать данный код элемента, вызываю-

  щий процесс должен либо быть владельцем данного тома,  либо

  иметь привилегию VOLPRO;

  MNT$_QUOTA -

       Данный код элемента задает размер кэша записей квот  в

       единицах записей квот. Буфер должен содержать  длинное

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

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

       OPER. Значение 0 отменяет кэширование. Данный код эле-

       мента относится только к дискам;

  MNT$_RECORDSIZ -

       Данный код элемента задает количество симвлов в каждой

       записи. Данный  код  элемента  используется  вместе  с

       кодом MNT$_BLOCKSIZE для указания форматов данных  для

       "чужих" томов. Буфер должен содержать  длинное  слово,

       значение которого меньше или равно размеру блока.  Код

       элемента MNT$_RECORDSIZ относится только  к  магнитным

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

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




                           - 941 -

                        00152-01 97 06


  MNT$_WINDOW -

       Данный код элемента задает число указателей соответст-

       вия, которые должны быть распределены для окон файлов.

       Буфер должен содержать длинное слово, значение которо-

       го находится в диапазоне от 7 до 80.  Данный  значение

       замещает значение, принимаемое по умолчанию  при  ини-

       циализации тома. Данный код элемента относится  только

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

       гия OPER;

  MNT$_EXTENTSION -

       Данный код элемента задает число  блоков,  на  которое

       могут быть расширены  файлы.  Буфер  должен  содержать

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

       от 0 до 65535. Данный код относится только к дискам;

  MNT$_COMMENT -

       Данный код задает текст, который должен быть связан  с

       запросом к оператору. Буфер  должен  содержать  строку

       символов длиной не  более  78  симвлов.  Данный  текст

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

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

       Описание:

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

  вавший программу $MOUNT, должен либо быть владельцем,  либо

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

  Требуемые привилегии  зависят  от  операции  и  перечислены

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

  ции.




                           - 942 -

                        00152-01 97 06


       Чтобы  выполнить  монтирование  с  помощью  оператора,

  вызывающий  процесс  должен  иметь  привилегию  TMPMBX  или

  PRMMBX.

       Программа $MOUNT для монтирования  томов  с  групповым

  или системным доступом использует следующие ресурсы:

       1) пул нестраничного обмена;

       2) системный динамический пул.

       Возвращаемые значения кода состояния:

       SS$_NORMAL     - программа   системного   обслуживания

                      успешно завершилась;

       SS$_ACCVIO     - нет доступа к  списку  элементов  или

                      адресу, указанному в списке;

       SS$_BADPARAM   - длина буфера равная нулю была указана

                      вместе с ненулевым кодом элемента;  или

                      был указан недопустимсый код  элемента;

                      или не было указано никакое устройство;

       SS$_NOGRPNAM   - вызывающий процесс не имеет  привиле-

                      гии GRPNAM;

       SS$_NOSYSNAM   - вызывающий процесс не имеет  привиле-

                      гии SYSNAM;

       SS$_NOOPER     - вызывающий процесс не имеет требуемой

                      привилегии OPER;

       SS$_NOPRIV     - вызывающий процесс не имеет достаточ-

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

                      тому;

       SS$_NOSUCHDEV  - предупреждение. Указанное  устройтсво

                      отсутствует.




                           - 943 -

                        00152-01 97 06


       Программа $MOUNT может также возвращать  коды  состоя-

  ния, специфичные для средства монтирования. Данные значения

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

  определения $MOUNDEF (см. подраздел 2.3).



       13.77. $MTACCESS - доступность магнитной ленты


       Программа системного обслуживания $MTACCESS  позволяет

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

  вывода поля доступности в метках VOL1 и HDR1 магнитных лент

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

       Формат:

       SYS$MTACCESS     LBLNAM,[UIC],[STD_VERSION]

                        ,[ACCESS_CHAR],[ACCESS_SPEC]

                        ,TYPE

       Аргументы:

       LBLNAM

       Использование в МОС ВП: ADDRESS

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Метка, которая должна обрабатываться. Аргумент  LBLNAM

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

  При вводе обрабатываемая метка является либо  меткой  VOL1,

  либо меткой HDR1, которые считываются  с  магнитной  ленты.

  При выводе меток данное поле равно нулю. Тип обрабатываемой

  метки опеределяет аргумент TYPE.





                           - 944 -

                        00152-01 97 06


       UIC

       Использование в МОС ВП: UIC

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Идентификатор UIC  пользователя,  выполняющего  данную

  операцию. Аргумент UIC является длинным словом,  содержащим

  данный UIC.

       STD_VERSION

       Использование в МОС ВП: LONGWORD_UNSIGNED

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Десятичный эквивалент версии стандарта, который считы-

  вается из метки VOL1. Аргумент STD_VERSION является длинным

  словом, содержащим номер версии стандарта.

       ACCESS_CHAN

       Использование в МОС ВП: LONGWORD_UNSIGNED

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Символ доступности, задаваемый пользователем. Аргумент

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

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










                           - 945 -

                        00152-01 97 06


       ACCESS_SPEC

       Использование в МОС ВП: LONGWORD_UNSIGNED

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

  ти, который передается в аргументе ACCESS_CHAN.

       Аргумент  ACCESS_SPEC  представляет  байт,  содержащий

  одно из следующих значений:

       1) MTA$K_CHARVALID - да;

       2) MTA$K_NOCHAR - нет.

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

       TYPE

       Использование в МОС ВП: LONGWORD_UNSIGNED

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

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

  Аргумент TYPE представляет байт, содержащий одно из следую-

  щих значений:

       1) MTA$K_INVOL1 - ввод метки VOL1;

       2) MTA$K_INHDR1 - ввод метки HDR1;

       3) MTA$K_OUTVOL1 - ввод метки VOL1;

       4) MTA$K_OUTHDR1 - вывод метки HDR1.










                           - 946 -

                        00152-01 97 06


       Описание:

       Программа системного обслуживания позволяет  обеспечи-

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

  ботки поля доступности в метках VOL1 и HDR1 магнитных  лент

  со стандартными метками. Можно заменить программу, принятую

  по  умолчанию,  установив  флаг   LOADMTACCESS   программой

  SYSGEN. При перезагрузке операционной системы МОС ВП  прог-

  рамма MTACCESS.EXE загружается в систему, а вектор  диспет-

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

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

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

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

  метке версию стандарта. Для магнитных лент с номером версии

  3 или меньше программа выводит либо  пробел,  либо  символ,

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

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

  состояния SS$_FILACCERR, если значение поля отлично от про-

  бела.

       Для магнитных лент с номером версии больше 3, програм-

  ма выводит либо символ,  заданный  аргументом  ACCESS_CHAR,

  либо 1 в коде кои-8, если никакой символ не задан. При вво-

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

  на пробел. Если поле содержит пробел, то регистр  R0  уста-

  навливается на 0. В данном случае пользователю дается  пол-

  ный доступ и защита операционной системы МОС  ВП  не  рабо-

  тает. Если поле содержит  1  в  коде  кои-8,  а  поле  VOL1

  IMPLEMENTATION IDENTIFIER (идентиифкатор реализации)  метки




                           - 947 -

                        00152-01 97 06


  VOL1 содержит системный код операционной системы МОС ВП, то

  в регистре R0 устанавливается код состояния  SS$_NORMAL.  В

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

  МОС ВП.

       Если поле отлично от пробела и не содержит символ 1  в

  коде КОИ-8, то в регистре R0 устанавливается код  состояния

  SS$_FILACCERR,  который  побуждает  пользователя   заменить

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

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

  темы МОС ВП.

       Возвращаемые значения кодов состояния:

       SS$_NORMAL     - успешное завершение;

       SS$_FILACCERR  - ошибка явной замены;

       SS$_NOFILACC   - пользователь не имеет доступа к  фай-

                      лу;

       SS$_NOVOLACC   - пользователь не имеет доступа к тому.



       13.78. $NUMTIM - преобразовать двоичное  время

              в цифровое


       Программа системного обслуживания $NUMTIM  преобразует

  абсолютное время или дельта-время из 64-битового системного

  формата времени в двоичные целые значения даты и времени.

       Формат:

       SYS$NUMTIM     TIMBUF,[TIMADR]









                           - 948 -

                        00152-01 97 06


       Аргументы:

       TIMBUF

       Использование в МОС ВП: VECTOR_WORD_UNSIGNED

       Тип:                    слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Буфер, в который  $NUMTIM  записывает  преобразованные

  дату и время. Аргумент TIMBUF - это адрес  структуры  из  7

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


                   Структура буфера TIMBUF

      31                        15                          0
       ------------------------------------------------------
       !           Месяц        !           Год             !
       ------------------------------------------------------
       !           Часы         !        День месяца        !
       ------------------------------------------------------
       !          Секунды       !            Минуты         !
       ------------------------------------------------------
                                !    сотые доли секунды     !
                                -----------------------------

                        Рис. 72


       Если аргумент TIMADR задает дельта-время,  то  $NUMTIM

  возвращает 0 в поля "Год" и "Месяц". В поле  "День  месяца"

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

  дельта-временем; данное количество должно быть меньше 10000

  дней.

       TIMADR

       Использование в МОС ВП: DATE_TIME

       Тип:                    квадрослово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке



                           - 949 -

                        00152-01 97 06


       64-битовое преобразуемое  значение  времени.  Аргумент

  TIMADR - это адрес квадрослова, содержащего  данное  время.

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

  цатеьное значение времени представляет дельта-время.

       Если аргумент TIMADR не задан, то  $NUMTIM  возвращает

  текущее системное время.

       Если аргумент TIMARD задан как 0, то  $NUMTIM  возвра-

  щает базовое время (17 ноября 1858 г.)

       Возвращаемые значения кода состояния:

       SS$_NORMAL  - успешное завершение;

       SS$_ACCVIO  - вызывающая программа не может  прочитать

                   64-битовое значение времени или  не  может

                   записать в буфер;

       SS$_IVTIME  - заданное дельта-время равно  или  больше

                   10000 дней.



       13.79. $PARSE_ALL -  проанализировать  элемент

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


       Программа системного обслуживания $PARSE_ALL  анализи-

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

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

  (ACE).

       Формат:

       SYS$PARSE_ACL     ACLSTR,ACLENT,[ERRPOS],[ACCNAM]









                           - 950 -

                        00152-01 97 06


       Аргументы:

       ACLSTR

       Использование в МОС ВП: CHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Форматированный элемент ACE,  анализ  которого  выпол-

  няется  в  результате  работы  программы.  Аргумент  ACLSTR

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

  текста, предназначенную для анализа.

       ACLENT

       Использование в МОС ВП: CHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

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

  тате работы данной программы. Аргумент ACLENT является  ад-

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

  вается элемент ACE. Первый  байт  данного  буфера  содержит

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

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

  определяет формат элемента ACE. Информация о типах  элемен-

  тов ACE и связанных с ними форматов  приведена  в  описании

  программы системного обслуживания SYS$FORMAT_ACL.






                           - 951 -

                        00152-01 97 06


       ERRPOS

       Использование в МОС ВП: WORD_UNSIGNED

       Тип:                    слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

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

  ACLSTR, которые обработаны программой $PARSE_ACL.  Аргумент

  ERRPOS является адресом слова, в которое записывается число

  символов, реально обработанных программой.  Если  программа

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

  место в строке, в которой произошел сбой.

       ACCNAM

       Использование в МОС ВП: ACCESS_BIT_NAMES

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

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

  $PARSE_ACL. Аргумент ACCNAM является адресом массива из  32

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

  Каждый элемент указывает на имя одного бита. Первый элемент

  дает имя биту 0, второй элемент дает имя биту 1 и т.д. Если

  аргумент ACCNAM опущен, то используются следующие имена:

       Бит 0  -   READ;

       Бит 1  -   WRITE;

       Бит 2  -   EXECUTE;

       Бит 3  -   DELETE;

       Бит 4  -   CONTROL;




                           - 952 -

                        00152-01 97 06


       Бит 5  -   BIT_5;

       Бит 6  -   BIT_6;

      .

      .

      .

       Бит 31 -   BIT_31.

       Описание

       Программа  системного  обслуживания  "проанализировать

  элемент списка управления доступом"  анализирует  указанную

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

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

       Возвращаемые значения кода состояния:

       SS$_NORMAL  - программа системного обслуживания успеш-

                   но завершилась;

       SS$_ACCVIO  - невозможно прочитать строку или ее деск-

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

                   тор  буфера;  или  невозможно  записать  в

                   буфер; или буфер слишком мал, чтобы  вмес-

                   тить элемент списка ACL;

       SS$_IVACL   - неверный формат списка управления досту-

                   пом.



       13.80. $PURGWS - очистить рабочий набор


       Программа  системного  обслуживания  $PURGWS   удаляет

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

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

  которые требуются новому сегменту программы. Однако,  прог-



                           - 953 -

                        00152-01 97 06


  рамма системного  обслуживания  "Изменить  размер  рабочего

  набора" ($ADJWSL) представляет более предпочтительный меха-

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

  памяти процессом.

       Формат:

       SYS$PURGWS     INADR

       Аргументы:

       INADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

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

  удаляемых страниц. Аргумент INADR - это  адрес  массива  из

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

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

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

  виртуальной страницы; младшие 9 битов игнорируются.

       Программа  системного  обслуживания  $PURGWS   находит

  страницы в заданном диапазоне и удаляет их, если они  нахо-

  дятся в рабочем наборе.

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

  удаляется только одна страница.

       Чтобы  очистить  рабочий  набор  целиком,   необходимо

  задать диапазон страниц от 0 до 7FFFFFFF; в данном  случае,

  образ будет продолжать выполняться  и  получать  страничный

  отказ на требуемые ему страницы в рабочем наборе.




                           - 954 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_NORMAL  - успешное завершение;

       SS$_ACCVIO  - вызывающая программа не может  прочитать

                   массив входных адресов.



       13.81. $PUTMSG - вывести сообщение


       Программа системного обслуживания $PUTMSG выводит одно

  или более сообщений об ошибке на устройство SYS$ERROR (и на

  SYS$OUTPUT, если оно  отличается  от  SYS$ERROR)  программа

  $PUTMSG является  обобщенной  программой  форматирования  и

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

  мой МОС ВП для записи информационных сообщений и  сообщений

  об ошибках для процессов.

       Формат:

       SYS$PUTMSG     MSGVEC,[ACTRTN],[FACNAM],[ACTPRM]

       Аргументы:

       MSGVEC

       Использование в МОС ВП: CNTRLBLK

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

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

  димое сообщение (или сообщения), а  также  поля  сообщения,

  которые должна использовать программа  $PUTMSG  при  записи

  сообщения (или сообщений). Аргумент MSGVEC является адресом

  вектора сообщения.





                           - 955 -

                        00152-01 97 06


       Вектор сообщения состоит из одного длинного слова,  за

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

  одному дескриптору на сообщение. Рис.74  показывает  содер-

  жиое первого длинного слова. 3


                      Вектор сообщения

       31                          15                      0
       ------------------------------------------------------
       ! Поля, принятые по умолчанию!  Счетчик аргументов   !
       ------------------------------------------------------

                           Рис. 73


       Поля вектора сообщений:

  счетчик аргументов -

       Данное поле длиной в слово задает общее число  длинных

       слов в векторе сообщения, не включая первого  длинного

       слова (частью которого оно является);

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

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

       сообщения будут записываться.  Поле  "Поля  сообщения,

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

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

       бит указывает, что должна  выводиться  соответствующая

       компонента сообщения.

       В табл.65 приведены номера значащих битов. Приведенные

  номера битов (0, 1, 2 ,3) являются  битовыми  позициями  от

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

  в длинном слове, то, чтобы определить  правильное  смещение

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

  число 16.



                           - 956 -

                        00152-01 97 06


                                                   Таблица 65

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

  Бит!Значение!           Описание

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

  0  !   1    !включить текст сообщения

     !   0    !не включать текст сообщения

  1  !   1    !включить мнемоническое имя для текста сообще-

     !        !ния

     !   0    !не включать мнемоническое имя для текста сооб-

     !        !щения

  2  !   1    !включить индикатор уровня серьезности

     !   0    !не включать индикатор уровня серьезности

  3  !   1    !включить префикс средства

     !   0    !не включать префикс средства


       Биты с 4 по 15 должны быть равны 0.

       Данную установку по умолчанию,  заданную  полем  "Поля

  сообщения, принятые по умолчанию", можно изменить для любо-

  го или для всех сообщений, задав другие  поля  сообщений  в

  поле "Новые поля сообщения" любого последующего дескриптора

  сообщения. Если задано поле "Новые поля сообщения", то ука-

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

  всех остальных сообщений, пока снова не будет  задано  поле

  "Новые поля сообщения".

       Программа $PUTMSG передает поле "Флаги сообщения, при-

  нятые  по  умолчанию"  программе  системного   обслуживания

  $GETMSG в качестве аргумента FLAGS.





                           - 957 -

                        00152-01 97 06


       Если поле "Флаги сообщения, принятые по умолчанию"  не

  задано, то используются поля  сообщения  по  умолчанию  для

  процесса. Поля сообщения по умолчанию  для  процесса  могут

  быть установлены с помощью коменды SET MESSAGE языка DCL.

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

  один или более дескрипторов сообщений. Дескриптор сообщения

  может иметь один из четырех возможных форматов,  в  зависи-

  мости от типа сообщения, которое он  описывает.  Существуют

  следующие типы сообщений:

       1) сообщения, предоставляемые пользователем;

       2) системные сообщения;

       3) сообщения системы СУД-32;

       4) сообщения об исключительных состояниях системы.

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

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



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

       31                       15                          0
       ------------------------------------------------------
       !                 Код сообщения                      !
       ------------------------------------------------------
       !  Новые поля сообщения   !  Счетчик параметров FAO  !
       ------------------------------------------------------
       !                 Первый параметр FAO                !
       ------------------------------------------------------
       !                 Второй параметр FAO                !
       ------------------------------------------------------
       !                         :                          !
       ------------------------------------------------------
       !                                                    !
       ------------------------------------------------------

                          Рис. 74






                           - 958 -

                        00152-01 97 06


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

  ленных пользователем:

  код сообщения -

       Длинное слово, значение которого уникально идентифици-

       рует сообщение;

  счетчик параметров FAO -

       Значение длинного слова, задающее число длинных слов с

       параметрами FAO, которые следуют за дескриптором сооб-

       щения. Число необходимых  параметров  FAO  зависит  от

       директив FAO, используемых в тексте сообщения. Некото-

       рые из директив FAO требуют одного или более  парамет-

       ров, а другие директивы не требуют ни одного  парамет-

       ра;

  новые поля сообщения -

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

       щения для текущего сообщения. Содержимое и формат дан-

       ного поля идентичны содержимому и формату  поля  "Поля

       сообщения, принятые по умолчанию";

  параметр FAO -

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

       вой FAO, появляющейся в  тексте  сообщения.  Параметры

       FAO, перечисленные  в  дескрипторе  сообщения,  должны

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

       зоваться директивами FAO из текста сообщения.

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

  на рис.75.






                           - 959 -

                        00152-01 97 06


          Дескриптор сообщения для системных сообщений

       31                                                  0
       ------------------------------------------------------
       !               Код сообщения                        !
       ------------------------------------------------------

                        Рис. 75


       Дескриптор сообщения для сообщений СУД-32  показан  на

  рис.76.


           Дескриптор сообщения для сообщений СУД-32

       31                                                  0
       ------------------------------------------------------
       !                 Код сообщения                      !
       ------------------------------------------------------
       !           Значение кода состояния (STV)            !
       ------------------------------------------------------

                           Рис. 76


       Поля дескриптора сообщения для сообщений СУД-32:

  код сообщения -

       Длинное слово, значение которого уникально идентифици-

       рует сообщение. Поле номера средства в коде  сообщения

       идентифицирует средство, связанное с сообщением. Сооб-

       щение системы СУД-32  имеет  номер  средства  1.  Поле

       "Счетчик параметров FAO",  "Новые  поля  сообщения"  и

       "Параметр FAO" не указываются. Длинное слово,  следую-

       щее за полем  "Код  сообщения"  в  векторе  сообщения,

       будет интерпретироваться как STV;

  значение кода состояния системы СУД-32 -

       Длинное слово, содержащее STV для использования  сооб-

       щением СУД-32, которое имеет связанное  значение  STV.

       Программа $PUTMSG использует STV в качестве  параметра



                           - 960 -

                        00152-01 97 06


       FAO или в качестве другого идентификатора сообщения, в

       зависимости от сообщения  СУД-32,  идентифицированного

       Полем "Код сообщения". Если сообщение СУД-32 не  имеет

       связанного STV, то программа $PUTMSG игнорирует  длин-

       ное слово STV, содержащееся в дескрипторе сообщения.

       Дескриптор сообщения для сообщения  об  исключительных

  состояниях системы показан на рис.77.



        Дескриптор сообщения для сообщения об исключительных
                      ситуациях системы

        31                                                 0
       ------------------------------------------------------
       !                  Код сообщения                     !
       ------------------------------------------------------
       !                 Первый параметр FAO                !
       ------------------------------------------------------
       !                 Второй параметр FAO                !
       ------------------------------------------------------
       !                         :                          !
       ------------------------------------------------------
       !                         :                          !
       ------------------------------------------------------

                         Рис. 77


       Поля в дескрипторе сообщения для сообщений об исключи-

  тельных состояниях системы:

  код сообщения -

       Длинное слово, значение которого уникально идентифици-

       рует сообщение. Поле "Номер средства" в коде сообщения

       идентифицирует средство, связанное с сообщением. Сооб-

       щение об исключительных состояниях системы имеет номер

       средства 0. Поля "Счетчик  параметров  FAO"  и  "Новые

       поля сообщения" не указываются. Длинные слова, следую-

       щие за полем  "Код  сообщения"  в  векторе  сообщения,



                           - 961 -

                        00152-01 97 06


       будут интерпретироваться как параметры FAO.

       ACTRTN

       Использование в МОС ВП: PROCEDURE

       Тип:                    маска входа в программу

       Доступ:                 вызов без развертывания стека

       Механизм:               по ссылке

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

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

  Аргумент ACTRTN является адресом маски входа в данную прог-

  рамму.

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

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

  поступает пользователю.

       Если аргумент ACTRTN не задан или задан равным 0 (дан-

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

  рамм обработки.

       Поскольку программа $PUTMSG записывает сообщение толь-

  ко в SYS$ERROR и SYS$OUTPUT, то программа обработки  полез-

  на, например, когда вывод должен быть направлен в файл.

       FACNAM

       Использование в МОС ВП: CHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

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

  вом  или  единственном  сообщении,  записанном   программой




                           - 962 -

                        00152-01 97 06


  $PUTMSG. Аргумент FACNAM является адресом дескриптора стро-

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

       Если арумент FACNAM не  задан,  то  программа  $PUTMSG

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

  связан с данным средством.

       ACTPRM

       Использование в МОС ВП: USER_ARG

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Параметр, который должен передаваться программе  обра-

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

  которого содержит данный параметр. Если аргумент ACTPRM  не

  задан, то никакие параметры не передаются.

       Первым параметром, передаваемым  программе  обработки,

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

  текст сообщения, а параметр, задаваемый аргументом  ACTPRM,

  передается вторым.

       Описание

       В операционной системе МОС  ВП  сообщение  идентифици-

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

  вается "Кодом сообщения". Чтобы сконструировать код сообще-

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

  программы  MESSAGE.  Рис.78  представляет  длинное   слово,

  содержащее код сообщения.








                           - 963 -

                        00152-01 97 06


                          Код сообщения

       31     27                15                     2    0
       ------------------------------------------------------
       ! CNTL !  Номер средства  !   Номер сообщения  !  УС !
       ------------------------------------------------------

                         Рис. 78


       Таким образом, каждое сообщение имеет связанное с  ним

  уникальное значение размером в длинное слово - код  данного

  сообщения. Можно дать данному значению  символическое  имя.

  Такое символическое имя  называется  "символическим  именем

  сообщения".

       Компоненты сообщения, которые записываются  программой

  $PUTMSG, формируются на основе как кода  сообщения,  так  и

  символического имени сообщения.

       Программа системного обслуживания $PUTMSG пишет компо-

  нетны сообщения в следующем формате:

            %средство - УС - идент,текст сообщения

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

          общения. Для остальных сообщений в качестве префик-

          са используется дефис (-);

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

                 имени сообщения. Данный префикс средства мо-

                 жет быть заменен префиксом средства, который

                 задан аргументом FACNAM при вызове программы

                 $PUTMSG;

      УС - индикатор уровня серьезности сообщения.  Индикатор

           уровня серьезности берется из кода сообщения;

      идент - мнемоническое имя для текста сообщения.  Данный




                           - 964 -

                        00152-01 97 06


              сегмент берется из символического имени сообще-

              ния;

      текст сообщения - текст сообщения определяется в исход-

                        ном файле сообщений.

       Программа системного обслуживания $PUTMSG не проверяет

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

  щать  значение  кода  состояния  SS$_INSFARG  (недостаточно

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

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

  аргументов.

       Если ошибка возникает при вызове из программы  $PUTMSG

  программы  системного  обслуживания  "форматировать  вывод"

  ($FAO), то параметры FAO, заданные в векторе сообщения,  не

  появятся на выходе.

       Программу системного обслуживания $PUTMSG нельзя вызы-

  вать из режима ядра.

       Возвращаемое значение кода состояния:

       SS$_NORMAL  - программа системного обслуживания завер-

                   шилась нормально.



       13.82. $QIO - поставить в  очередь  запрос  на

              ввод-вывод


       Программа системного обслуживания $QIO ставит  в  оче-

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

  устройством.

       Программа  системного  обслуживания  $QIO  завершается

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


                           - 965 -

                        00152-01 97 06


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

  ввод-вывод,   не   ожидая,   пока    закончится    операция

  ввода-вывода.

       Для синхронного завершения следует использовать  прог-

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

  на ввод-вывод и ждать" ($QIOW). Программа системного обслу-

  живания $QIOW идентична программе  системного  обслуживания

  $QIO во всем, кроме того факта, что программа $QIOW возвра-

  щает управление вызывающему процессу после завершения  опе-

  рации ввода-вывода (см. подраздел 2.5).

       Формат:

       SYS$QIO     [EFN],CHAN,FUNC,[IOSB],[ASTADR],[ASTPRM]

                   ,[P1],[P2],[P3],[P4],[P5],[P6]

       Аргументы:

       EFN

       Использование в МОС ВП: EF_NUMBER

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Флаг события, который устанавливается программой  $QIO

  после  действительного  завершения  операции  ввода-вывода.

  Аргумент EFN является длинным словом, содержащим номер дан-

  ного флага события.

       Если аргумент EFN не задан,  то  устанавливается  флаг

  события 0.

       Когда программа $QIO начинает выполнение, она  сбрасы-

  вает указанный флаг события или флаг события 0, если  аргу-




                           - 966 -

                        00152-01 97 06


  мент EFN не задан.

       Указанный флаг события устанавливается, если программа

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

  запрос на ввод-вывод.

       CHAN

       Использование в МОС ВП: CHANNEL

       Тип:                    слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Канал ввода-вывода, назначаемый устройству, на которое

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

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

  программа $QIO использует только младшую часть данного сло-

  ва.

       FUNC

       Использование в МОС ВП: FUNCTION_CODE

       Тип:                    слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Коды функции специфичные для  конкретных  устройств  и

  модификаторы  функции,  задающие,  какая  операция   должна

  выполняться. Аргумент FUNC является длинным словом,  содер-

  жащим код функции.

       Каждое устройство имеет свои коды функции и свои моди-

  фикаторы функции. В документе [2] приводится полная  инфор-

  мация о функциональных кодах и модификаторах функций, отно-

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




                           - 967 -

                        00152-01 97 06


  направлена данная операция ввода-вывода.

       IOSB

       Использование в МОС ВП: IO_STATUS_BLOCK

       Тип:                    квадрослово

       Доступ:                 только запись

       Механизм:               по ссылке

       Блок  состояния  ввода-вывода,  в  который   заносится

  конечное состояние завершения операции ввода-вывода.  Аргу-

  мент IOSB является адресом  квадрослова,  содержащего  блок

  состояния ввода-вывода. Формат IOSB изображен на рис.79.


                     Формат блока IOSB

       31                       15                         0
       ------------------------------------------------------
       !    Счетчик передачи     ! Значение кода состояния  !
       ------------------------------------------------------
       !       Информация, специфичная для устройтсва       !
       ------------------------------------------------------

                         Рис. 79


       Поля блока состояния ввода-вывода:

  значение кода состояния -

       Значение кода состояния размером в слово, возвращаемое

       программой $QIO после действительного завершения  опе-

       рации ввода-вывода;

  счетчик передачи -

       Число байтов данных,  действительно  перемещенных  при

       операции ввода-вывода;

  информация, зависящая от устройства -

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

       конкретного устройства и  заданного  кода  функции.  В



                           - 968 -

                        00152-01 97 06


       документе [2] приведена информация о том, как конкрет-

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

       ввода-вывода.

       Когда программа $QIO начинает выполняться, она очищает

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

  задан.

       Хотя IOSB является необязательным аргументом, рекомен-

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

       1) если для сигнализации о завершении данной программы

  системного обслуживания используется флаг события, то можно

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

  тояния, чтобы удостовериться, что данный  флаг  события  не

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

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

       2) если для синхронизации данной программы  системного

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

  $SYNCH, то блок состояния ввода-вывода является  обязатель-

  ным аргументом для программы $SYNCH;

       3) значение кода состояния,  возвращаемое  в  регистре

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

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

  обращения к программе $QIO. Значение кода состояния,  возв-

  ращаемое в регистре R0, дает  информацию  об  успешном  или

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

  вательно, чтобы иметь точное представление об успешном  или

  неудачном обращении к программе $QIO, необходимо  проверить

  значения кода состояния, возвращаемые как  в  регистре  R0,




                           - 969 -

                        00152-01 97 06


  так и в блоке состояния ввода-вывода.

       ASTADR

       Использование в МОС ВП: AST_PROCEDURE

       Тип:                    маска входа в программу

       Доступ:                 вызов без развертывания стека

       Механизм:               по ссылке

       Подпрограмма обработки прерывания AST, которая  должна

  выполняться после завершения ввода-вывода. Аргумент  ASTADR

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

  маска входа в подпрограмму AST.

       Подпрограмма AST выполняется в режиме доступа  процес-

  са, вызвавшего программу $QIO.

       ASTPRM

       Использование в МОС ВП: USER_ARG

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Параметр AST, который должен передаваться  в  подпрог-

  рамму обработки прерывания AST.  Аргумент  ASTPRM  является

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

       С P1 по P6

       Использование в МОС ВП: VARYING_ARG

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

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

  фичные для конкретного устройства и функции.




                           - 970 -

                        00152-01 97 06


       Первый параметр может быть задан как P1 или P1V.  Если

  функциональный код требует  адреса,  следует  задавать  P1,

  если он требует значения, то следует задавать P1V. Если при

  вызове программы $QIO не указано ключевое слово P1 или P1V,

  то предполагается параметр  P1,  означающий,  что  аргумент

  рассматривается как адрес.

       Ключевые слова с P2 по P6 всегда интерпретируются  как

  значения.

       Описание

       Программа $QIO работает только с назначенными каналами

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

  или являются более привилегированными, чем  режим  доступа,

  из которого было сделано первоначальное назначение канала.

       Программа $QIO использует следующие системные ресурсы:

       1) квоту процесса для лимита ввода-вывода с  буфериза-

  цией (BIOLM) или лимита прямого ввода-вывода (DIOLM);

       2) квоту счетчика байтов ввода-вывода  с  буферизацией

  (BYTLM);

       3) квоту лимита  AST  процесса  (ATSLM),  если  задана

  какая-либо подпрограмма обработки AST;

       4) может потребоваться дополнительная память в зависи-

  мости от конкретного устройства.

       Для программы $QIO завершение  можно  синхронизировать

  двумя способами:

       1) указав аргумент ASTADR, чтобы выполнить подпрограм-

  му AST после завершения ввода-вывода;

       2) вызвав программу  системного  обслуживания  $SYNCH,




                           - 971 -

                        00152-01 97 06


  что  позволит  ожидать  завершения  операции  ввода-вывода.

  Программа $QIOW завершается синхронно и это лучший  способ,

  если требуется синхронное завершение.

       Возвращаемые значения кода состояния:

       SS$_NORMAL       - программа  системного  обслуживания

                        завершилась   успешно.   Запрос    на

                        ввод-вывод успешно поставлен  в  оче-

                        редь;

       SS$_ABORT        - разорвана логическая связь в сети;

       SS$_ACCVIO       - либо нельзя сделать запись  в  блок

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

                        ректно  заданы  параметры  для  кодов

                        функций, зависящих от устройств;

       SS$_DEVOFFLINE   - указанное  устройство  находится  в

                        автономном  состоянии  и  в   текущий

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

       SS$_EXQUOTA      - процесс либо  превысил  свою  квоту

                        лимита  AST  (ASTLM);  либо  превысил

                        свою    квоту     счетчика     байтов

                        ввода-вывода с буферизацией  (BYTLM);

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

                        ввода-вывода с буферизацией  (BIOLM);

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

                        ввода-вывода (DIOLM); либо запрос для

                        ввода-вывода  с  буферизацией  меньше

                        лимита счетчика байтов с буферизацией

                        (BYTLM), но будучи добавленным к дру-




                           - 972 -

                        00152-01 97 06


                        гим текущим запросам  буфера,  вызвал

                        превышение  квоты   счетчика   байтов

                        буферизованного ввода-вывода;

       SS$_ILLEFC       - задан неверный номер флага события;

       SS$_INSFMEM      - для  завершения  данной   программы

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

                        динамической памяти достаточного раз-

                        мера;

       SS$_IVCHAN       - указан  неверный  номер  канал,  то

                        есть номер канала 0 или  номер  боль-

                        ший, чем число доступных каналов;

       SS$_NOPRIV       - указанный канал либо не существует,

                        либо был назначен из более привилеги-

                        рованного режима доступа; или процесс

                        не имеет необходимых  привилегий  для

                        выполнения заданных функций  на  уст-

                        ройстве, связанном с указанным  кана-

                        лом;

       SS$_UNASEFC      - процесс  не  связан  с   кластером,

                        содержащим указанный флаг события;

       - SS$_LINKABORT  задача  партнера  по  сети   прервала

                        логическую связь;

       SS$_LINKDISCON   - задача партнера по сети отсоединила

                        логическую связь;

       SS$_PATHLOST     - утерян путь к узлу задачи  партнера

                        по сети;

       SS$_PROTOCOL     - произошла  ошибка  протокола  сети.




                           - 973 -

                        00152-01 97 06


                        вероятнее всего это  произошло  из-за

                        ошибки программного обеспечения сети;

       SS$_CONNECFAIIL  - соединение  с  об'ектом  сети  было

                        отключено  из-за  превышения   лимита

                        времени или произошел сбой;

       SS$_FIALRACC     - к логической связи уже получен дос-

                        туп в канале (то есть, по предыдущему

                        соединению в канале);

       SS$_INVLOGIN     - в удаленном узле обнаружена  невер-

                        ная информация управления досупом;

       SS$_IVDEVNAM     - блок NCB имеет неверный формат  или

                        содержимое;

       SS$_LINKEXIT     - была запущена  задача  партнера  по

                        сети, но выход  произошел  без  подт-

                        верждения логической связи  (то  есть

                        ASSIGN в SYS$NET);

       SS$_NOLINKS      - нет  доступных  логических  связей.

                        Превышено максимальное число логичес-

                        ких связей, которое было  установлено

                        для управляющей программы  параметром

                        MAXIMUMLINKS;

       SS$_NOSUCHNODE   - указанный узел не известен системе;

       SS$_NOSUCHOBJ    - номер  об'екта  сети  неизвестен  в

                        удаленном узле; или в удаленном  узле

                        не найден названный программный  файл

                        DCL для команды TASK=CONNECT;

       SS$_NOSUCHUSER   - удаленный узел не  смог  распознать




                           - 974 -

                        00152-01 97 06


                        информацию, заданную при  подключении

                        к системе (LOGIN);

       SS$_PRTOCOL      - произошла ошибка протокола. Вероят-

                        нее всего это произошло из-за  ошибки

                        программного обеспечения сети;

       SS$_REJECT       - об'ект сети отверг соединение;

       SS$_REMRSRC      - связь  не  может  быть  установлена

                        из-за недостаточных системных  ресур-

                        сов в удаленном узле;

       SS$_SHUT         - локальный или удаленный узел больше

                        не принимает соединений;

       SS$_THIRDPARTY   - логическая  связь  была   завершена

                        третьей стороной (например, админист-

                        ратором системы);

       SS$_TOOMUCHDATA  - задача показала слишком много  нео-

                        бязателных данных или данных прерыва-

                        ния;

       SS$_UNREACHABLE  - удаленный  узел  в  текущий  момент

                        недоступен.

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

  ния ввода-вывода:

       В документе [2] перечислены значения  кодов  состояния

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

  ройство.










                           - 975 -

                        00152-01 97 06


       13.83. $QIOW - поставить в очередь  запрос  на

              ввод-вывод и ждать


       Программа системного обслуживания $QIOW ставит в  оче-

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

  устройством.

       Программа системного  обслуживания  $QIOW  завершается

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

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

  ввода-вывода.

       Для асинхронного завершения следует использовать прог-

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

  на ввод-вывод" ($QIO), которая возвращает управление  вызы-

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

  са   на   ввод-вывод,   не   ожидая   завершения   операции

  ввода-вывода.

       Во всех остальных отношениях программы  $QIOW  и  $QIO

  идентичны. Всю информацию, касающуюся программы  системного

  обслуживани $QIO можно использовть для програмы $QIOW  (см.

  подраздел 2.5).

       Формат:

       SYS$QIOW     [EFN],CHAN,FUNC[,IOSB][,ASTADR]

                    [,ASTPRM][,P1][,P2][,P3][,P4][,P5][,P6]













                           - 976 -

                        00152-01 97 06


       13.84. $READEF - читать флаги событий


       Программа системного обслуживания  $READEF  возвращает

  текущее состояние всех 32 флагов событий в кластере локаль-

  ных или общих флагов событий. Кроме того, возвращаемое зна-

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

  сброшен указанный флаг события.

       Формат:

       SYS$READEF     EFN,STATE

       Аргументы:

       EFN

       Использование в МОС ВП: EF_NUMBER

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Номер любого флага события в кластере, состояние кото-

  рого должна вернуть программа. Арумент EFN является длинным

  словом, содержащим данный  номер.  Указание  флага  события

  внутри кластера требует, чтобы  программа  $READEF  вернула

  состояния всех флагов событий в данном кластере.

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

  являются локальными для процесса - кластер 0 и  кластер  1.

  Кластер 0 содержит флаги событий с номерами с 0  по  31,  а

  кластер событий 1 содержит флаги событий с номерами с 32 по

  63.

       Имеется два кластера общих флагов событий - кластер  2

  и кластер 3. Кластер 2 содержит флаги событий с номерами  с

  64 по 95, а кластер 3 содержит флаги событий с  номерами  с



                           - 977 -

                        00152-01 97 06


  96 по 127.

       STATE

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Состояние всех флагов событий  в  указанном  кластере.

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

  программа $READEF записывает состояние (установлен или нет)

  всех 32 флагов событий в кластере.

       Возвращаемые значения кода состояния:

       SS$_WASCLR  - программа системного обслуживания успеш-

                   но  завершилась.  Указанный  флаг  события

                   сброшен;

       SS$_WASSET  - программа системного обслуживания завер-

                   шилась. Указанный флаг события установлен;

       SS$_ACCVIO  - вызывающий процесс не может  записать  в

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

                   текущее состояние всех флагов событий;

       SS$_ILLEFC  - указан неверный номер флага события;

       SS$_UNASEFC - процесс не связан с кластером,  содержа-

                   щим указанный флаг события.



       13.85. $REM_HOLDER - удалить запись  держателя

              из базы данных прав


       Программа системного обслуживания $REM_HOLDER  удаляет

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


                           - 978 -

                        00152-01 97 06


  вующего идентификатора.

       Формат:

       SYS$REM_HOLDER     ID,HOLDER

       Аргументы:

       ID

       Использование в МОС ВП: RIGTHS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Двоичное значение соответсвующего  идентификатра,  чей

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

  го обслуживания $REM_HOLDER. Аргумент ID  является  длинным

  словом, содержащим значение идентификатора.

       HOLDER

       Использование в МОС ВП: RIGHTS_HOLDER

       Тип:                    квадрослово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

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

  те работы программы  системного  обслуживания  $REM_HOLDER.

  Аргумент HOLDER является адресом  квадрослова,  содержащего

  идентификатор UIC держателя в длинном слове и нулевое  зна-

  чение во втором длинном слове.












                           - 979 -

                        00152-01 97 06


       Описание

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

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

  жателя из списка держателей соответствующего  идентификато-

  ра.

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

  живвания требуется доступ с записью  в  базу  данных  прав.

  Если база данных находится в группе файлов SYS$SYSTEM  (что

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

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

       Возвращаемые значения кодов состояния:

       SS$_NORMAL   - успешное завершение;

       SS$_ACCVIO   - вызывающий процесс не  может  прочитать

                    аргументы ID или HOLDER;

       SS$_INSFMEM  - для открытия базы данных прав нет  дос-

                    тупной динамической памяти процесса  дос-

                    таточного размера;

       SS$_IVIDENT  - указанный идентификатор или идентифика-

                    тор держателя имеет неверный формат;

       SS$_NOSUCHID - указанного идентификатора  нет  в  базе

                    данных прав; или указанного идентификато-

                    ра держателя нет в базе данных прав;

       RMS$_PRV     - пользователь не имеет доступа с записью

                    в базу данных прав.

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

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

  ными СУД-32, данная программа системного обслуживания может




                           - 980 -

                        00152-01 97 06


  также возвращать коды состояния системы СУД-32, связанные с

  операциями на индексном файле (см. документ [1]).



       13.86. $REM_IDENT - удалить  идентификатор  из

              базы данных прав


       Программа системного обслуживания  $REM_IDENT  удаляет

  запись указанного идентификатора и записи всех его держате-

  лей (если таковые имеются) из базы данных прав.

       Формат:

       SYS$REM_IDENT     ID

       Аргументы:

       ID

       Использование в МОС ВП:  RIGHTS_ID

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

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

  данных прав в результате работы программы $REM_IDENT. Аргу-

  мент ID является длинным словом, содержащим данное значение

  идентификатора.

       Описание.

       Программа системного обслуживания  $REM_IDENT  удаляет

  указанный идентификатор из базы  данных  прав.  Все  записи

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

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

  которые удерживал удаляемый идентификатор.





                           - 981 -

                        00152-01 97 06


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

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

  база данных прав находится в группе файлов SYS$SYSTEM  (что

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

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

       Возвращаемые значения кода состояния:

       SS$_NORMAL     - программа   системного   обслуживания

                      успешно завершилась;

       - SS$_INSFMEM  для открытия базы данных прав нет  дос-

                      тупной динамической  памяти  процессора

                      достаточного размера;

       - SS$_IVIDENT  указанный идентификатор имеет  неверный

                      формат;

       - SS$_NOSUCHID указанный идентификатор  отсутствует  в

                      базе данных прав;

       - RMS$_PRV     пользователь не имеет доступа с записью

                      в базу данных прав.

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

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

  ния данными СУД-32, данная программа системного  обслужива-

  ния может также возвращать коды состояния  системы  СУД-32,

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

  [1]).












                           - 982 -

                        00152-01 97 06


       13.87. $RESUME - возобнOвить процесс


       Программа системного обслуживания  $RESUME  заставляет

  процесс, ранее приостановленный программой системного  обс-

  луживания "приостановить  процесс"  ($SUSPND),  возобновить

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

  приостановку процесса.

       Формат:

       SYS$RESUME     [PIDADR],[PRCNAM]

       Аргументы:

       PIDADR

       Использование в МОС ВП:  PROCESS_ID

       Тип:                     длинное слово (без знака)

       Доступ:                  модификация

       Механизм:                по ссылке

       Идентификатор процесса (PID), который  нужно  возобно-

  вить. Аргумент PIDADR - это адрес длинного слова,  содержа-

  щего PID.

       Аргумент PIDADR нужно задавать для возобновления  про-

  цессов в других группах UIC.

       PRCNAM

       Использование в МОС ВП:  PROCESS_NAME

       Тип:                     строка текста

       Доступ:                  только чтение

       Механизм:                по дескриптору - дескриптор

                                строки с фиксированной длиной

       Имя  процесса,  который  нужно  возобновить.  Аргумент

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


                           - 983 -

                        00152-01 97 06


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

  ку длиной от 1 до 15 символов.

       Аргумент PRCNAM можно использовать  для  возобновления

  только тех процессов, которые  принадлежат  той  же  группе

  UIC, что и вызывающий процесс. Причина заключается  в  том,

  что имена процессов уникальны в пределах групп UIC,  и  мос

  вп использует номер группы UIC при интерпретации имени про-

  цесса, заданного аргументом PRCNAM. Для возобновления  про-

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

  PIDADR.

       Если не заданы ни аргумент PIDADR, ни аргумент PRCNAM,

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

  процесса.

       Описание.

       В зависимости  от  конкретной  операции  использование

  программы $RESUME может потребовать наличия  у  вызывающего

  процесса определенных привилегий:

       1) привилегия GROUP нужна для того, чтобы  возобновить

  выполнение процесса в той же группе,  если  данный  процесс

  имеет UIC, отличный от UIC вызывающего процесса;

       2) привилегия WORLD нужна для того, чтобы  возобновить

  выполнение любого процесса в системе.

       Если для процесса, который  не  приостановлен,  выданы

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

  щий запрос на приостановку завершится  сразу  же,  то  есть

  процесс не приостанавливается. Для выставленных запросов на

  возобновление счетчик не ведется.




                           - 984 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_NORMAL     - успешное завершение;

       SS$_ACCVIO     вызывающая строка  не  может  прочитать

                      строку имени  процесса  или  дескриптор

                      строки, либо не может записать  иденти-

                      фикацию процесса;

       - SS$_IVLOGNAM заданное  имя  процесса  имеет  нулевую

                      длину или длину более 15 символов;

       - SS$_NONEXPR  предупреждение.  Указанный  процесс  не

                      существует  или  была  задана  неверная

                      идентификация;

       - SS$_NOPPIV   у процесса нет привилегии для возобнов-

                      ления выполнения указанного процесса.



       13.88. $REVOKID - исключить  идентификатор  из

              процесса


       Программа системного обслуживания $REVOKID удаляет  из

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

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

  какого-то другого идентификатора, то соответствующие записи

  держателя также удаляются.

       Формат:

       SYS$REVOKID     [PIDARD],[PRCNAM],[ID],[NAME],[PRVATR]











                           - 985 -

                        00152-01 97 06


       Аргументы:

       PIDARD

       Использование в МОС ВП:  PROCESS_ID

       Тип:                     длинное слово (без знака)

       Доступ:                  модификация

       Механизм:                по ссылке

       Идентификатор процесса (PID) того процесса, с  которым

  работает программа $REVOKID. Аргумент PIDARD является адре-

  сом длинного слова, содержащего идентификатор  PID  данного

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

  задавать значение аргумента PIDARD равным  минус  1.  Когда

  аргумент PIDARD передается программе, он  также  и  возвра-

  щается программой, следовательно необходимо передавать  его

  как переменную, а не как константу.

       PRCNAM

       Использование в МОС ВП:  PROCESS_NAME

       Тип:                     текстовая строка

       Доступ:                  только чтение

       Механизм:                по дескриптору - дескриптор

                                строки фиксированной длины

       Имя процесса, с которым работает  программа  $REVOKID.

  Аргумент PRCNAM является адресом дескриптора строки  симво-

  лов, содержащего имя процесса. Максимальная  длина  данного

  имени составляет 15 символов. Поскольку групповой номер UIC

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

  чтобы указать список прав процесса из другой  группы,  сле-

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




                           - 986 -

                        00152-01 97 06


       ID

       Использование в МОС ВП:  RIGHTS_ID

       Тип:                     квадрослово (без знака)

       Доступ:                  модификация

       Механизм:                по ссылке

       Идентификатор и атрибуты, которые удаляются в  резуль-

  тате работы программы $REVOKID. Аргумент ID является  адре-

  сом квадрослова, содержащего в первом длинном слове, двоич-

  ный код идентификатора, а во втором длинном слове - атрибу-

  ты.

       В  системной  макробиблиотеке  (макрокоманда  $KGBDEF)

  определено символическое имя:

       1) KGB$V_RESOURCE - позволяет держателю   запрашивать

       Для идентификатора ресурсы типа блоков на дисках.

       Символическое  значение  является  смещением  в  битах

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

  в виде маски с установленным  соответствующим  битом,  если

  вместо префикса KGB$V использовать префикс KGB$M.

       Необходимо задать один из аргументов ID или NAME. Пос-

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

  аргумент NAME (а также, если задан сам аргумент ID),  то  в

  данном случае необходимо передавать аргумент ID  как  пере-

  менную, а не как константу.

       NAME

       Использование в МОС ВП:  CHAR_STRING

       Тип:                     текстовая строка

       Доступ:                  только чтение




                           - 987 -

                        00152-01 97 06


       Механизм:                по дескриптору - дескриптор

                                строки фиксированной длины

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

  работы программы $REVOKID. Аргумент NAME  является  адресом

  дескриптора, указывающего на имя идентификатора.

       PRVATR

       Использование в МОС ВП:  MASK_LONGWORD

       Тип:                     длинное слово (без знака)

       Доступ:                  только запись

       Механизм:                по ссылке

       Атрибуты удаляемого  идентификатора.  Aргумент  PRVATR

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

  хранения атрибутов идентификатора.

       Описание:

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

  идентификатор из процесса" удаляет указанный  идентификатор

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

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

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

  прав пользователя на доступ на основе установочной  страте-

  гии. Она не предназначена для использования обычными  поль-

  зователями операционной системы МОС ВП.

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

  требуется привилегия CMKRNL.  Кроме  того  для  модификации

  списка прав процесса, принадлежащего той же группе,  что  и

  вызывающий процесс, требуется привилегия GROUP (если только

  процесс не имеет тот же идентификатор UIC, что и вызывающий




                           - 988 -

                        00152-01 97 06


  процесс). Для модификации списка прав процесса  вне  группы

  вызывающего процесса требуется привилегия WORLD. Для  моди-

  фикации системного списка прав требуется привилегия SYSNAM.

       Результаты передачи аргументов PIDADR и  PRCNAM  прог-

  рамме $REWOKID приведены в табл.66.

                                                   Таблица 66

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

  PRCNAM  !  PIDADR  !  Результат

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

  опущен  !  опущен  !  используется идентификатор текущего

          !          !  процесса. Идентификатор процесса не

          !          !  возвращается

  опущен  !    0     !  используется идентификатор текущего

          !          !  процесса. Идентификатор процесса воз-

          !          !  вращается

  опущен  !  задан   !  используется заданный идентификатор

          !          !  процесса. Идентификатор процесса воз-

          !          !  вращается

  задан   !  опущен  !  используется заданное имя процесса.

          !          !  идентификатор процесса не возвраща-

          !          !  ется

  задан   !    0     !  используется заданное имя процесса.

          !          !  Идентификатор процесса возвращается

  задан   !  задан   !  используется заданный идентификатор

          !          !  процесса. Идентификатор процесса воз-

          !          !  вращается. Имя процесса игнорируется






                           - 989 -

                        00152-01 97 06


       Результаты передачи аргументов  ID  и  NAME  программе

  $REVOKID приведены в табл.67.


                                                   Таблица 67

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

  NAME    !    ID    !  Результат

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

  опущен  !  опущен  !  недопустимо

  опущен  !  задан   !  используется заданное значение иден-

          !          !  тификатора. Значение идентификатора

          !          !  возвращается

  задан   !  опущен  !  используется заданное имя идентифика-

          !          !  тора. Значение идентификатора не воз-

          !          !  вращается

  задан   !    0     !  используется заданное имя идентифика-

          !          !  тора. Значение идентификатора возвра-

          !          !  щается

  задан   !  задан   !  используется заданное значение иден-

          !          !  тификатора. Значение идентификатора

          !          !  возвращается. Имя идентификатора иг-

          !          !  норируется

       Возвращаемые значения кода состояния:

       SS$_WASCLR      - программа  системного   обслуживания

                       успешно завершилась;  список  прав  не

                       содержал указанного идентификатора;

       SS$_WASSET      - программа  системного   обслуживания

                       успешно   завершилась;   список   прав

                       содержал указанный идентификатор;



                           - 990 -

                        00152-01 97 06


       SS$_ACCVIO      - невозможно  прочитать  или  записать

                       аргумент PIDADR; невозможно  прочитать

                       аргумент PRCNAM; невозможно  прочитать

                       или записать аргумент  ID;  невозможно

                       прочитать  аргумент  NAME;  невозможно

                       записать аргумент PRVATR;

       SS$_INSFMEM     - нет  доступной  динамической  памяти

                       процесса достаточного размера для отк-

                       рытия базы данных прав;

       SS$_NOPRIV      - у вызывающего процесса нет  привиле-

                       гии CMKRNL; или он  не  выполняется  в

                       режиме  ядра  или  управления;  или  у

                       вызывающего  процесса  нет   требуемой

                       привилегии GROUP, WORLD или SYSNAME;

       SS$_NOSUCHID    - указанное     имя     идентификатора

                       отсутствует в базе данных  прав.  Если

                       задан двоичный идентификатор, то он не

                       проверяется в базе данных прав;

       SS$_RIGHTSFULL  - список  прав  процесса  или  системы

                       полон;

       SS$_IVIDENT     - указанный идентификатор  или  держа-

                       тель имеет неверный формат;  или  ука-

                       занные идентификатор и держатель иден-

                       тичны;

       SS$_NOSYSNAME   - операция требует привилегии SYSNAME;

       SS$_IVLOGNAM    - задано неверное логическое имя;

       SS$_NONEXPR     - задан несуществующий процесс;




                           - 991 -

                        00152-01 97 06


       RMS$_PRV        - пользователь не имеет доступа с чте-

                       нием в базу данных прав.

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

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

  ния данными СУД-32, данная программа системного  обслужива-

  ния может также возвращать коды состояния  системы  СУД-32,

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

  [1]).



       13.89. $SCHDWK - запланировать пробуждение


       Программа системного  обслуживания  $SCHDWK  планирует

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

  спячки при помощи программы системного обслуживания  "пере-

  вести в состояние спячки" ($HIBER). Пробуждение можно  зап-

  ланировать  на  заданное   абсолютное   время   или   через

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

  валы времени.

       Формат:

       SYS$SCHDWK     [PIDADR],[PRCNAM],DAYTIM,[REPTIM]

       Аргументы:

       PIDADR

       Использование в МОС ВП:  RPOCESS_ID

       Тип:                     длинное слово (без знака)

       Доступ:                  модификация

       Механизм:                по ссылке

       Идентификатор процесса (PID), который требуется пробу-

  дить. Аргумент PIDADR - это адрес длинного слова,  содержа-



                           - 992 -

                        00152-01 97 06


  щего PID.

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

  цессов в других группах UIC.

       PRCNAM

       Использование в МОС ВП:  PROCESS_NAME

       Тип:                     строка текста

       Доступ:                  только чтение

       Механизм:                по дескриптору - дескриптор

                                строки с фиксированной длиной

       Имя процесса, который нужно пробудить. Аргумент PRCNAM

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

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

  от 1 до 15 символов.

       Аргумент PRCNAM  можно  использовать  для  пробуждения

  только тех процессов, которые принадлежат к той  же  группе

  UIC, что и вызывающий процесс. Причина заключается  в  том,

  что имена процессов уникальны в пределах группы UIC, и  мос

  вп использует номер группы  UIC  вызывающего  процесса  при

  интерпретации имени процесса, заданного аргументом  PRCNAM.

  Для пробуждения процессов в других группах  UIC  необходимо

  использовать аргумент PIDADR.

       Если не заданы ни аргумент PIDADR, ни аргумент PRCNAM,

  то запрос на пробуждение выдается  для  самого  вызывающего

  процесса.










                           - 993 -

                        00152-01 97 06


       DAYTIM

       Использование в МОС ВП:  DATE_TIME

       Тип:                     квадрослово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

       Время, в которое  нужно  пробудить  процесс.  Аргумент

  DAYTIM - это адрес квадрослова, содержащего данное время  в

  64-битовом системном формате времени. Положительное  значе-

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

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

  времени задает смещение (дельта-время) от текущего времени.

       REPTIM

       Использование в МОС ВП:  DATE_TIME

       Тип:                     квадрослово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

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

  на пробуждение. Аргумент REPTIM -  это  адрес  квадрослова,

  содержащего данный интервал. Интервал времени нужно  предс-

  тавлять в формате дельта-времени.

       Нельзя задавать интервал времени менее 10 миллисекунд;

  если он меньше 10 миллисекунд, $SCHDWK автоматически увели-

  чивает его до 10 миллисекунд.

       Если аргумент REPTIM не задан,  по  умолчанию  исполь-

  зуется значение 0; нуль означает, что запрос на пробуждение

  не нужно повторять.






                           - 994 -

                        00152-01 97 06


       Описание.

       В зависимости  от  конкретной  операции  использование

  программы $SCHDWK  может  потребовать  наличия  у  процесса

  определенных привилегий:

       1) привилегия GROUP нужна для того, чтобы  планировать

  запросы на пробуждение для процесса в той же группе,  но  с

  другим UIC;

       2) привилегия WORLD нужна для того, чтобы  планировать

  запросы на пробуждение для любого другого процесса в систе-

  ме.

       $SCHDWK использует следующие системные ресурсы:

       1) для планирования запроса на пробуждение использует-

  ся квота предела AST (ASTLM) вызывающего процесса;

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

  зуется системная динамическая память.

       Если для процесса, который не  находится  в  состоянии

  спячки, выданы один или несколько запросов на  пробуждение,

  то последующий запрос на спячку для данного процесса завер-

  шится сразу же, то есть процесс не  переходит  в  состояние

  спячки.  Для  востановленных  запросов  на  пробуждение  не

  ведется счетчик.

       Запланированные запросы на пробуждение, если  они  еще

  не обработаны, можно отменить при помощи программы  систем-

  ного обслуживания "отменить пробуждение" ($CANWAK).

       Если заданное абсолютное время уже прошло и время пов-

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

  часов (в пределах 10 миллисекунд).




                           - 995 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_NORMAL     - успешное завершение;

       - SS$_ACCVIO   вызывающая программа не может  прочесть

                      время  окончания,   время   повторения,

                      строку имени  процесса  или  дескриптор

                      строки, либо не может записать  иденти-

                      фикатор процесса;

       - SS$_EXQUOTA  процесс превысил свою квоту предел;

       - SS$_INSFMEM  не хватает системной динамической памя-

                      ти для назначения элемента в очереди  к

                      таймеру;

       - SS$_IVLOGNAM строка  имени  процесса  имеет  нулевую

                      длину или длину более 15 символов;

       - SS$_IVTIME   заданное    дельта-время     повторения

                      является положительной величиной,  либо

                      абсолютное время плюс дельта-время пов-

                      торения меньше текущего времени;

       - SS$_NONEXPR  предупреждение.  Указанный  процесс  не

                      существует или был задан неверный иден-

                      тификатор процесса.

       SS$_NOPRIV     у процесса нет привилегии на планирова-

                      ние запросов пробуждения для указанного

                      процесса.












                           - 996 -

                        00152-01 97 06


       13.90. $SETAST - установить AST


       Программа системного обслуживания $SETAST включает или

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

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

  луживания.

       Формат:

       SYS$SETAST     ENBFLG

       Аргументы:

       ENBFLG

       Использование в МОС ВП:  BOOLEAN

       Тип:                     байт (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Значение, указывающее, должна ли быть включена достав-

  ка AST. Аргумент ENBFLG является байтом, содержащим  данное

  значение. Значение 1 включает доставку AST для  вызывающего

  режима доступа, а значение 0 выключает доставку AST.

       Описание.

       Если образ выполняется в режиме пользователя, то  дос-

  тавка AST включается для всех более привилегированных режи-

  мов доступа.

       Если доставка AST отключается для  более  привилегиро-

  ванного режима доступа, то операционная система МОС  ВП  не

  может доставлять прерывания AST для менее привилегированных

  режимов доступа до тех пор, пока доставка AST не будет сно-

  ва включена для более  привилегированного  режима  доступа.

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


                           - 997 -

                        00152-01 97 06


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

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

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

       Возвращаемые значения кода состояния

       - SS$_WASCLR  программа системного обслуживания успеш-

                     но завершилась доставка AST  ранее  была

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

                     процесса;

       - SS$_WASSET  программа системного обслуживания успеш-

                     но завершилась. Доставка AST ранее  была

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

                     процесса.



       13.91. $SETEF - установить флаг события


       Программа системного обслуживания $SETEF устанавливает

  флаг события в кластере локальных или общих флагов событий.

  Значение кода состояния,  возвращаемое  программой  $SETEF,

  индицирует, был ли  ранее  указанный  флаг  установлен  или

  сброшен. После того как флаг события устанавливается,  про-

  цессы, ожидающие данный флаг события, возобновляют выполне-

  ние.

       Формат:

       SYS$SETEF     EFN











                           - 998 -

                        00152-01 97 06


       Аргументы:

       EFN

       Использование в МОС ВП:  EF_NUMвER

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Номер флага события, который должен быть установлен  в

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

  словом, содержащим данный номер.

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

  локальны для процесса: кластер 0 и  кластер  1.  Кластер  0

  содержит флаги событий с номерами от 0 до 31, а  кластер  1

  содержит флаги событий с номерами от 32 до 63.

       Имеется два кластера общих флагов событий: кластер 2 и

  кластер 3. Кластер 2 содержит флаги событий с  номерами  от

  64 до 95, а кластер 3 содержит флаги событий с номерами  от

  96 до 127.

       Возвращаемые значения кода состояния:

       SS$_WASCLR    - программа   системного    обслуживания

                     успешно  завершилась.   Указанный   флаг

                     события ранее был сброшен;

       - SS$_WASSET  программа системного обслуживания успеш-

                     но завершилась; указанный  флаг  события

                     ранеее был установлен;

       - SS$_ILLEFC  указан недопустимый номер флага события;

       - SS$_UNASEFC процесс не связан с кластером,  содержа-

                     щим указанный флаг события.




                           - 999 -

                        00152-01 97 06


       13.92. $SETEXV     -     установить     вектор

              исключительной ситуации


       Программа системного  обслуживания  $SETEXV  назначает

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

  или окончательного  вектора  исключительной  ситуации,  или

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

  трех векторов.

       Формат:

       SYS$SETEXV     [VECTOR],[ADDRES],[ACMODE],[PRVHND]

       Аргументы:

       VECTOR

       Использование в МОС ВП:  LONGWORD_UNSIGNED

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Вектор, для которого  надо  организовать  или  удалить

  обработчик кода состояния. Aргумент VECTOR -  это  значение

  размером в длинное слово. Значение 0 (принимаемое по  умол-

  чанию) задает первичный вектор; значение 1 - вторичный век-

  тор и значение  2  -  окончательный  вектор  исключительной

  ситуации.

       ADDRES

       Использование в МОС ВП:  PROCEDURE

       Тип:                     маска входа программы

       Доступ:                  вызов без развертывания стека

       Механизм:                по ссылке





                          - 1000 -

                        00152-01 97 06


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

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

  VECTOR. Аргумент ADDRES  -  это  значение  длинного  слова,

  содержащего адрес маски входа программы обработки кода сос-

  тояния.

       Если аргумент ADDRES не задан или равен  0,  то  адрес

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

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

  размером в длинное слово устанавливается в 0.

       ACMODE

       Использование в МОС ВП:  ACCESS_MODE

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

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

  исключительной ситуации. Аргумент ACMODE - это длинное сло-

  во, содержащее режим доступа. Макрокоманда $PSLDEF  опреде-

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

       Наивысший  привилегированный  режим  доступа,  который

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

  цесса. Нельзя модифицировать векторы исключительной  ситуа-

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

  доступа вызывающего процесса.

       PRVHND

       Использование в МОС ВП:  PROCEDURE

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение




                          - 1001 -

                        00152-01 97 06


       Механизм:                по ссылке

       Адрес предыдущего обработчика кода  состояния,  содер-

  жавшийся в указанном векторе исключительной ситуации. Аргу-

  мент PRVHND - это адрес длинного слова, в  которое  $SETEXV

  записывает адрес обработчика.

       Описание.

       Процесс не может модифицировать  вектор,  связанный  с

  наиболее привилегированным режимом доступа.

       МОС ВП обеспечивает два различных способа для  органи-

  зации обработчиков кода состояния:

       1) использование стеков вызовов, связанного  с  каждым

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

  которое должно содержать адрес обработчика кода  состояния,

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

  тельных программ LIB$ESTABLISH организует  обработчик  кода

  состояния; программа LIB$REVERT удаляет обработчик;

       2)  использование  векторов  исключительной   ситуации

  программного обеспечения (при помощи $SETEXV), связанных  с

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

  пределах области управления процесса (пространство P1).

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

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

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

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

  первичный вектор исключительной  ситуации  и  окончательный

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

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




                          - 1002 -

                        00152-01 97 06


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

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

       Векторы  исключительной   ситуации   пользовательского

  режима отменяются при осуществлении выхода образа.

       Возвращаемые значения кода состояния:

       SS$_NORMAL    - успешное завершение;

       - SS$_ACCVIO  вызывающая программа не  может  записать

                     длинное слово, предназначенное для полу-

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



       13.93. $SETIME - установить системное время


       Программа  системного  обслуживания  $SETIME  изменяет

  значение системного времени или заново калибрует  системное

  время.

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

  которое задает количество 100-наносекундных интервалов с 00

  часов 17 ноября 1858.

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

  компонентами программного обеспечения в МОС ВП,  связанными

  с таймером.

       Формат:

       SYS$SETIME     [TIMADR]













                          - 1003 -

                        00152-01 97 06


       Аргументы:

       TIMADR

       Использование в МОС ВП:  DATE_TIME

       Тип:                     квадрослово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

       Новое значение системного времени. Аргумент  TIMADR  -

  это адрес квадрослова, содержащего новое значение системно-

  го времени. Новое значение системного времени - это  значе-

  ние    абсолютного     времени,     задающее     количество

  100-наносекундных интервалов с 00  часов  17  ноября  1858.

  Отрицательное значение (дельта) времени не допускается.

       Если аргумент TIMADR не указан или равен 0, то $SETIME

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

  года.

       Описание:

       Для того, чтобы установить системное время, вызывающий

  процесс должен иметь привилегии OPER и LOG_IO.

       После  изменения  или  повторной   калибровки   часов,

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

  элемент в очереди к таймеру с учетом разницы между  прежним

  системным временем и новым системным временем.

       Программа системного  обслуживания  $SETIME  сохраняет

  новое время (для будующих операций перезагрузки) в  систем-

  ном образе SYS$SYSTEM:SYS.EXE. Чтобы сохранить данное  вре-

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

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




                          - 1004 -

                        00152-01 97 06


  обслуживания $QIOW. Данная  операция  ввода-вывода  требует

  привилегии LOG_IO.

       Возвращаемые значения кода состояния:

       SS$_NORMAL     - успешное завершение;

       - SS$_IVTIME   вызывающий процесс  не  задал  значение

                      времени или задал отрицательное  значе-

                      ние времени и  обнаружилась  некоррект-

                      ность процессорных часов;

       - SS$_ACCVIO   вызывающая программа не может прочитать

                      квадрослово, содержащее значение нового

                      системного времени;

       - SS$_NOIOCHAN нет канала ввода-вывода, доступного для

                      назначения;

       - SS$_NOPRIV   у процесса нет привилегии на  установку

                      системного времени.



       13.94. $SETIMR - установить таймер


       Программа системного обслуживания  $SETIMR  устанавли-

  вает таймер на срабатывание в заданный момент времени. Ког-

  да  таймер  срабатывает,  устанавливается  флаг  события  и

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

       Формат:

       SYS$SETIMR     [EFN],DAYTIM,[ASTADR],[REQIDT]











                          - 1005 -

                        00152-01 97 06


       Аргументы:

       EFN

       Использование в МОС ВП:  EF_NUMBER

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Флаг события,  который  необходимо  установить,  когда

  срабатывает таймер. Аргумент EFN -  это  значение  длинного

  слова, содержащего номер флага события. Если EFN не  задан,

  то устанавливается флаг события 0.

       Перед началом работы  $SETIMR  очищает  заданный  флаг

  события или флаг события 0.

       DAYTIM

       Использование в МОС ВП:  DATE_TIME

       Тип:                     квадрослово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

       Время, в которое срабатывает таймер. Аргумент DAYTIM -

  это адрес квадрослова, содержащего значение времени.  Поло-

  жительное значение времени задает абсолютное время срабаты-

  вания таймера; отрицательное значение времени задает смеще-

  ние (дельта-время) от текущего времени.

       Если заданное значение абсолютного времени уже прошло,

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

  тупает в пределах 10 миллисекунд.

       Программа системного обслуживания "преобразовать стро-

  ку в коде КОИ-8 в  двоичное  время"  ($BINTIM)  преобразует




                          - 1006 -

                        00152-01 97 06


  значение времени, представленное в коде КОИ-8,  в  значение

  времени размером в квадрослово, необходимое $SETIMR.

       ASTADR

       Использование в МОС ВП:  AST_PROCEDURE

       Тип:                     маска входа программы

       Доступ:                  вызов без развертывания стека

       Механизм:                по ссылке

       Подпрограмма обработки AST, которая должна  выполнять-

  ся, когда сработает таймер. Аргумент  ASTADR  -  это  адрес

  маски входа данной подпрограммы. Если ASTADR не  задан  или

  равен 0 (по умолчанию), то подпрограмма AST не выполняется.

       Подпрограмма AST, если она указана, работает в  режиме

  доступа вызывающей программы.

       REQIDT

       Использование в МОС ВП:  USER_ARG

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Идентификатор запроса к таймеру. Аргумент REQIDT - это

  значение длинного слова, содержащего номер, который  одноз-

  начно идентифицирует данный запрос к таймеру.  Если  REQIDT

  не задан, то используется значение 0.

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

  служебного обслуживания "отменить таймер"  ($CANTIM)  пере-

  дается (как аргумент REQIDT) идентификатор данного запроса.

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

  таймеру, нужно обеспечить, чтобы в вызове $SETIMR для аргу-




                          - 1007 -

                        00152-01 97 06


  мента REQIDT было указанно ненулевое значение,  потому  что

  $CANIMR интерпретирует нуль, заданный в  качестве  значения

  идентификатора, как запрос на отмену всех запросов к тайме-

  ру.

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

  значения,  но  взаимосвязанным  запросам  к  таймеру  можно

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

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

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

       Если в вызове $SETIMR задан аргумент ASTADR, то значе-

  ние, заданное аргументом REQIDT,  передается  как  параметр

  подпрограмме AST. Если подпрограмма AST  требует  несколько

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

  адрес; тогда подпрограмма AST может интерпретировать данный

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

       Описание.

       Программа системного обслуживания "установить  таймер"

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

  очередь к таймеру (TQELM), выделенную процессу. Если задана

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

  использует квоту предела AST (ASTLM), выделенную процессу.

       Программа системного обслуживания $SETIMR  работает  в

  режиме доступа вызывающей программы, так же, как и подпрог-

  рамма AST, если она указана.










                          - 1008 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_NORMAL     - успешное завершение;

       - SS$_ACCVIO   вызывающая программа не может прочитать

                      время срабатывания;

       - SS$_EXQUOTA  процесс превысил свою  квоту  входов  в

                      очередь к  таймеру  или  квоту  предела

                      AST; или недостаточно системной динами-

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

       - SS$_ILLEFC   задан недопустимый номер флага события;

       - SS$_INSFMEM  не хватает динамической памяти для наз-

                      начения входа в очередь к таймеру;

       - SS$_UNASEFC  процесс не связан с кластером, содержа-

                      щим заданный флаг события.



       13.95. $SETPRA - установить AST восстановления

              питания


       Программа системного обслуживания  $SETPRA  устанавли-

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

  тановления питания.

       Формат:

       SYS$SETPRA     ASTADR,[ACMODE]

       Аргументы:

       ASTADR

       Использование в МОС ВП:  AST_PROCEDURE

       Тип:                     маска входа в программу

       Доступ:                  вызов без развертывания стека

       Механизм:                по ссылке



                          - 1009 -

                        00152-01 97 06


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

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

  дет восстановление питания. Аргумент ASTADR является  адре-

  сом маски входа в данную подпрограмму.

       Если агрумент ASTADR имеет значение 0,  то  прерывание

  AST не доставляется процессу при восстановлении питания.

       Операционная система МОС ВП передает  указанной  подп-

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

  вом, значение которого содержит промежуток времени, в тече-

  нии которого было отключено питание, выраженное в виде чис-

  ла интервалов в 1/100 секунды.

       ACMODE

       Использование в МОС ВП:  ACCESS_MODE

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

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

  восстановления питания. Аргумент  ACMODE  является  длинным

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

  $PCLDEF определяет символические имена для четырех  режимов

  доступа.

       Наиболее привилегированным  режимом  доступа  является

  режим доступа вызывающего процесса.

       Описание.

       Программа системного обслуживания  $SETPRA  использует

  квоту лимита AST процесса (ASTLM).

       Для процесса можно указать  только  одну  подпрограмму




                          - 1010 -

                        00152-01 97 06


  AST восстановления питания. При выходе образа адрес входа в

  подпрограмму AST очищается.

       Соглашения о входе и выходе для подпрограммы AST восс-

  тановления питания такие же  как  и  для  всех  подпрограмм

  обработки AST. Данные соглашения описаны в разделе 5.

       Возвращаемые значения кода состояния:

       SS$_NORMAL     - программа   системного   обслуживания

                      успешно завершилась;

       - SS$_EXQUOTA  процесс превысил свою квоту для необра-

                      ботанных запросов AST.



       13.96. $SETPRI - установить приоритет


       Программа  системного  обслуживания  $SETPRI  изменяет

  базовый приоритет процесса. Базовый приоритет определяет, в

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

       Формат:

       SYS$SETPRI     [PIDADR],[PRCNAM],PRI,[PRVPRI]

       Аргументы:

       PIDADR

       Использование в МОС ВП:  PROCESS_ID

       Тип:                     длинное слово (без знака)

       Доступ:                  модификация

       Механизм:                по ссылке

       Идентификатор процесса (PID) того процесса, чей  прио-

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

  Аргумент PIDADR является адресом идентификатора PID.





                          - 1011 -

                        00152-01 97 06


       PRCNAM

       Использование в МОС ВП:  PROCESS_NAME

       Тип:                     текстовая строка

       Доступ:                  только чтение

       Механизм:                по дескриптору - дескриптор

                                строки фиксированной длины

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

  результате работы данной программы. Аргумент PRCNAM являет-

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

  строку имени процесса длиной от 1 до 15 символов.

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

  надлежащих той же группе UIC,  что  и  вызывающий  процесс.

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

  другим группам, следует задавать аргумент PIDADR.

       Если не задан ни один из аргументов PIDADR  и  PRCNAM,

  то программа $SETPRI устанавливает базовый приоритет  вызы-

  вающего процесса.

       PRI

       Использование в МОС ВП:  LONGWORD_USINGNED

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

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

  лен для процесса. Аргумент  PRI  является  длинным  словом,

  значение которого содержит новый приоритет. Приоритеты,  не

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

  от 0 до 15, а приоритеты, относящиеся  к  режиму  реального




                          - 1012 -

                        00152-01 97 06


  времени лежат в диапазоне от 16 до 31.

       Если заданный приоритет выше базового приоритета соот-

  ветствующего процесса, а вызывающий процесс не имеет приви-

  легии ALTPRI, то используется базовый приоритет  соответст-

  вующего процесса.

       PRVPRI

       Использование в МОС ВП:  LONGWORD_USINGNED

       Тип:                     длинное слово (без знака)

       Доступ:                  только запись

       Механизм:                по ссылке

       Базовый приоритет  процесса  перед  вызовом  программы

  $SETPRI. Аргумент PRVPRI является адресом длинного слова, в

  которое программа $SETPRI записывает  предыдущий  приоритет

  процесса.

       Описание.

       В зависимости  от  операции,  использование  программы

  $SETPRI может потребовать, чтобы  вызывающий  процесс  имел

  одну из следующих привилегий:

       1) чтобы изменить приоритет процесса в той же  группе,

  требуется привилегия GPOUP, если только процесс,  приоритет

  которого изменяется, не имеет тот же идентификатор UIC, что

  и вызывающий процесс;

       2) чтобы изменить приоритет любого другого процесса  в

  системе, требуется привилегия WORLD;

       3) чтобы изменить базовый приоритет процесса на  боль-

  шее значение, требуется привилегия ALTPRI.

       Базовый приоритет процесса действует до тех пор,  пока




                          - 1013 -

                        00152-01 97 06


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

  удален.

       Если процесс не имеет  привилегии  ALTPRI  и  пытается

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

  выше базового приоритета данного другого процесса,  то  ему

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

  тету и возвращается код состояния SS$_NORMAL.

       Чтобы определить приоритет,  установленный  программой

  системного обслуживания $SETPRI, следует использовать прог-

  рамму системного обслуживания "получить информацию о  зада-

  нии или процессе" ($GETJPI).

       Возвращаемые значения кода состояния:

       SS$_NORMAL     - программа   системного   обслуживания

                      успешно завершилась;

       - SS$_ACCVIO   вызывающий процесс  не  может  получить

                      строку имени  процесса  или  дескриптор

                      строки; или не может записать идентифи-

                      катор процесса или длинное слово преды-

                      дущего приоритета;

       - SS$_IVLOGNAM строка  имени  процесса  имеет  нулевую

                      длину или длину большую 15 символов;

       - SS$_NONEXPR  предупреждение.  Указанный  процесс  не

                      существует или указан неверный  иденти-

                      фикатор процесса;

       - SS$_NOPRIV   процесс не имеет привилегий для  оказа-

                      ния влияния на другие процессы.






                          - 1014 -

                        00152-01 97 06


       13.97. $SETPRN - установить имя процесса


       Программа системного  обслуживания  $SETPRN  позволяет

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

  са.

       Формат:

       SYS$SETPRN     [PRCNAM]

       Аргументы:

       PRCNAM

       Использование в МОС ВП:  PROCESS_NAME

       Тип:                     строка текста

       Доступ:                  только чтение

       Механизм:                по дескриптору - дескриптор

                                строки с фиксированной длиной

       Имя, которое надо дать вызывающему процессу.  Аргумент

  PRCNAM - это адрес дескриптора строки символов, указывающе-

  го на строку имени процесса длиной от  1  до  15  символов.

  Если аргумент PRCNAM не задан, вызывающий процесс не  полу-

  чает имени.

       Описание.

       Имя процесса остается в действии до тех пор, пока  оно

  не изменится (при помощи $SETPRN),  либо  пока  процесс  не

  будет удален.

       Имена процесса обеспечивают механизм идентификации для

  процессов, работающих с одинаковым номером группы.  Процесс

  можно также идентифицировать при помощи его  идентификатора

  (PID).





                          - 1015 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_NORMAL     - успешное завершение;

       - SS$_ACCVIO   вызывающая программа не может прочитать

                      строку имени  процесса  или  дескриптор

                      строки;

       - SS$_DUPLNAM  заданное  имя  процесса  дублирует  уже

                      существующее имя в данной группе UIC;

       - SS$_IVLOGNAM заданное  имя  процесса  имеет  нулевую

                      длину или длину более 15 символов.



       13.98. $SETPRT - установить защиту страниц


       Программа системного  обслуживания  $SETPRT  позволяет

  процессу изменить защиту одной страницы или диапазона стра-

  ниц.

       Формат:

       SYS$SETPRT     INADR,[RETADR],[ACMODE],PROT,[PRVPRT]

       Аргументы:

       INADR

       Использование в МОС ВП:  ADDRESS_RANGE

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

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

  страниц, для которых надо изменить защиту. Аргумент INADR -

  это адрес массива  из  двух  длинных  слов,  содержащих  по

  порядку начальный и конечный виртуальные адреса процесса. В

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


                          - 1016 -

                        00152-01 97 06


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

  битов игнорируются.

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

  изменяется защита для одной страницы.

       RETADR

       Использование в МОС ВП:  ADDRESS_RANGE

       Тип:                     длинное слово (без знака)

       Доступ:                  только запись

       Механизм:                по ссылке

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

  страниц, для которых $SETPRT  фактически  изменила  защиту.

  Аргумент RETADR - это адрес массива из двух  длинных  слов,

  содержащих по  порядку  начальный  и  конечный  виртуальные

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

       Если во время изменения  защиты  возникла  ошибка,  то

  $SETPRT записывает в RETADR диапазон страниц, которые  были

  успешно изменены до возникновения ошибки. Если до возникно-

  вения ошибки таких страниц не было, то $SETPRT записывает в

  каждое длинное слово массива значение "минус 1".

       ACMODE

       Использование в МОС ВП:  ACCESS_MODE

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Режим доступа, связанный с $SETPRT. Аргумент ACMODE  -

  это длинное слово, содержащее режим  доступа.  Макрокоманда

  $PSLDEF определяет обозначения для четырех режимов доступа.




                          - 1017 -

                        00152-01 97 06


       $SETPRT использует наименее привилегированный из  сле-

  дующих режимов доступа: режим доступа, заданный  аргументом

  ACMODE и режим доступа вызывающего процесса. Для того, что-

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

  диапазоне, результирующий режим доступа должен иметь равную

  или высшую привилегию по сравнению с режимом  доступа  вла-

  дельца данной страницы.

       PROT

       Использование в МОС ВП:  PAGE_PROTECTION

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Защита страниц, которую надо присвоить указанным стра-

  ницам. Аргумент PROT - это значение длинного слова,  содер-

  жащего код защиты. Используются только биты с 0 по 3;  биты

  с 4 по 31 игнорируются.

       Макрокоманда $PRTDEF определяет следующие  символичес-

  кие имена для кодов защиты:

       1) PRT$C_NA - нет доступа;

       2) PRT$C_KR - только чтение в режиме ядра;

       3) PRT$C_KW - запись в режиме ядра;

       4) PRT$C_ER - только чтение в режиме управления;

       5) PRT$C_EW - запись в режиме управления;

       6) PRT$C_SR - только чтение в режиме супервизора;

       7) PRT$C_SW - запись в режиме супервизора;

       8) PRT$C_UR - только чтение в режиме пользователя;

       9) PRT$C_UW - запись в режиме пользователя;




                          - 1018 -

                        00152-01 97 06


       10) PRT$C_ERKW - чтение в режиме управления, запись  в

  режиме ядра;

       11) PRT$C_SRKW - чтение в режиме супервизора, запись в

  режиме ядра;

       12) PRT$C_SREW - чтение в режиме супервизора, запись в

  режиме управления;

       13) PRT$C_URKW - чтение в режиме пользователя,  запись

  в режиме ядра;

       14) PRT$C_UREW - чтение в режиме пользователя,  запись

  в режиме управления;

       15) PRT$C_URSW - чтение в режиме пользователя,  запись

  в режиме супервизора.

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

  только чтение в режиме ядра.

       PRVPRT

       Использование в МОС ВП:  PAGE_PROTECTION

       Тип:                     байт (без знака)

       Доступ:                  только запись

       Механизм:                по ссылке

       Защита, присвоенная раньше последней странице в данном

  диапазоне. Аргумент PRVPRT - это  адрес  байта,  в  который

  $SETPRT записывает защиту данной страницы. Аргумент  PRVPRT

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

  страницы.










                          - 1019 -

                        00152-01 97 06


       Описание:

       Если процесс изменяет защиту каких-либо страниц в лич-

  ной  секции   с   доступа   "только   чтение"   на   доступ

  "чтение/запись", то $SETPRT использует квоту  файла  обмена

  сраниц (PGFLQUOTA) процесса.

       Для страниц в глобальных секциях можно  вводить  новую

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

  ссылке.

       Возвращаемые значения кода состояния:

       - SS$_NORMAL   успешное завершение;

       - SS$_ACCVIO   вызывающая программа не может прочитать

                      массив входных адресов; либо  не  может

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

                      байт,  предназначенный  для   получения

                      прежней  защиты;  либо   была   сделана

                      попытка изменить защиту не существующей

                      страницы;

       - SS$_EXQUOTA  процесс превысил свою квоту файла обме-

                      на страниц во  время  изменения  защиты

                      страницы в личной секции доступа "толь-

                      ко чтение" на доступ "чтение/запись";

       - SS$_LENVIO   страница в заданном диапазоне находится

                      за концом области программы или области

                      управления;

       - SS$_NOPRIV   страница в заданном диапазоне находится

                      в системном адресном пространстве;

       - SS$_PAGOWNVI нарушения владения страницей. Была сде-




                          - 1020 -

                        00152-01 97 06


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

                      которая принадлежит более  привилегиро-

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



       13.99. $SETPRV - установить привилегии


       Программа системного  обслуживания  $SETPRV  разрешает

  или запрещает для вызывающего процесса заданные привилегии.

       Формат:

        SYS$SETPRV     [ENBFLG],[PRVADR],[PRMFLG],[PRVPRV]

       Аргументы:

        ENBFLG

        использование в МОС ВП: BOOLEAN

        тип:                    байт (без знака)

        доступ:                 только чтение

        механизм:               по значению

       Индикатор, который указывает, необходимо разрешить или

  запретить заданные привилегии. Аргумент ENBFLG - это  одно-

  байтовое значение. Значение 1  указывает,  что  привилегии,

  заданные аргументом PRVADR, необходимо разрешить.  Значение

  0 (принимаемое  по  умолчанию)  указывает,  что  привилегии

  необходимо запретить.

        PRVADR

        использование в МОС ВП: MASK_PRIVILEGES

        тип:                    квадрослово (без знака)

        доступ:                 только чтение

        механизм:               по ссылке





                          - 1021 -

                        00152-01 97 06


       Привилегии, которые необходимо разрешить или запретить

  для вызывающего процесса. Аргумент PRVADR - это адрес бито-

  вого вектора размером в квадрослово, в котором  каждый  бит

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

  шаемой.

       Каждый бит имеет символическое имя; данные имена опре-

  деляет макрокоманда $PRVDEF. Битовый вектор формируется при

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

  легии в операции "логическое или".  В  табл.  68  приведены

  символические имена и описания привилегий.

                                                   Таблица 68

                          Привилегии

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

  Привилегии! Символическое !    Допустимые действия

            ! имя           !

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

  ALLSPOOL  ! PRV$V_ALLSPOOL ! назначить устройство, обслужи-

            !                ! вающее через спул

  BUGCHK    ! PRV$V_BUGCHK   ! создавать входы в журнал оши-

            !                ! бок

  BYPASS    ! PRV$V_BYPASS   ! обходить защиту,основанную на

            !                ! UIC

  CMEXEC    ! PRV$V_CMEXEC   ! изменить режим на режим управ-

            !                ! ления

  CMKRNL    ! PRV$V_CMKRNL   ! изменить режим на режим ядра

  DETACH    ! PRV$V_DETACH   ! создавать отсоединенные про-

            !                ! цессы




                          - 1022 -

                        00152-01 97 06


                                         Продолжение табл. 68

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

  Привилегии! Символическое !    Допустимые действия

            ! имя           !

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

  DIAGNOSE  ! PRV$V_DIAGNOSE ! осуществлять диагностику уст-

            !                ! ройств

  DOWNGRADE ! PRV$V_DOWNGRADE! понижать классификацию

  EXQUOTA   ! PRV$V_EXQUOTA  ! превышать квоты

  GROUP     ! PRV$V_GROUP    ! управлять группой процессов

  GRPNAM    ! PRV$V_GRPNAM   ! помещать имя в групповую таб-

            !                ! лицу логических имен

  GRPPRV    ! PRV$V_GRPPRV   ! осуществлять доступ в  группе

            !                ! через поля с системной защитой

  LOG_IO    ! PRV$V_LOG_IO   ! выполнять операции логического

            !                ! ввода-вывода

  MOUNT     ! PRV$V_MOUNT    ! ставить в очередь ввода-вывода

            !                ! запрос на монтирование тома

  NETMBX    ! PRV$V_NETMBX   ! создавать устройство сети

  ACNT      ! PRV$V_NOACNT   ! создавать процессы, для кото-

            !                ! рых не ведется учет

  OPER      ! PRV$V_OPER     ! все операторские привилегии

  PFNMAP    ! PRV$V_PFNMAP   ! отображать секцию по номеру

            !                ! физической страницы

  PHY_IO    ! PRV$V_PHY_IO   ! выполнить операции физического

            !                ! ввода-вывода

  PRMCEB    ! PRV$V_PRMCEB   ! создавать постоянные кластеры




                          - 1023 -

                        00152-01 97 06


                                         Продолжение табл. 68

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

  Привилегии! Символическое !    Допустимые действия

            ! имя           !

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

            !                ! общих флагов событий

  PRMGBL    ! PRV$V_PRMGBL   ! создавать постоянные глобаль-

            !                ! ные секции

  PRMJNL    ! PRV$V_PRMJNL   ! создавать постоянные журналы

  PRMMBX    ! PRV$V_PRMMBX   ! создавать постоянные почтовые

            !                ! ящики

  PSWAPM    ! PRV$V_PSWAPM   ! изменять режим обмена процес-

            !                ! сов

  READALL   ! PRV$V_READALL  ! иметь доступ на чтение ко всем

            !                ! данным

  SECURITY  ! PRV$V_SECURITY ! выполнять операции по обеспе-

            !                ! чению защиты

  ALTPRI    ! PRV$V_SETPRI   ! устанавливать (изменять) любой

            !                ! приоритет процесса

  SETPRV    ! PRV$V_SETPRV   ! устанавливать любые привилегии

            !                ! процесса

  SHARE     ! PRV$V_SHARE    ! назначать канал неразделяемому

            !                ! устройству

  SHMEM     ! PRV$V_SHMEM    ! создавать структуры в памяти,

            !                ! разделяемой несколькими про-

            !                ! цессорами

  SYSGBL    ! PRV$V_SYSGBL   ! создавать системные глобальные




                          - 1024 -

                        00152-01 97 06


                                         Продолжение табл. 68

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

  Привилегии! Символическое !    Допустимые действия

            ! имя           !

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

            !                ! секции

  SYSLCK    ! PRV$V_SYSLCK   ! ставить  в очередь захват   на

            !                ! общесистемные ресурсы

  SYSNAM    ! PRV$V_SYSNAM   ! помещать имя в системную таб-

            !                ! лицу логических имен

  SYSPRV    ! PRV$V_SYSPRV   ! получать доступ к файлам и

            !                ! другим процессам так, как если

            !                ! бы процесс  имел   системный

            !                ! UIC

  TMPJNL    ! PRV$V_TMPJNL   ! создавать временные журналы

  TMPMBX    ! PRV$V_TMPMBX   ! создавать временные почтовые

            !                ! ящики

  UPGRADE   ! PRV$V_UPGRADE  ! повышать классификацию

  VOLPRO    ! PRV$V_VOLPRO   ! подавлять защиту тома

  WORLD     ! PRV$V_WORLD    ! управлять всеми процессами


       Имена битов  привилегий  PRV$V_NOACNT  и  PRV$V_SETPRI

  соответствуют именам привилегий диалогового командного язы-

  ка ACNT и ALTPRI, хотя они и различаются по написанию.

       Если аргумент PRVADR не указан или равен 0, то  приви-

  легии не изменяются.







                          - 1025 -

                        00152-01 97 06


       PRMFLG

       Использование в МОС ВП: BOOLEAN

       Тип:                    байт (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Индикатор, который указывает, должны привилегии  изме-

  няться временно или постоянно. Аргумент PRMFLG - это  одно-

  байтовое значение. Значение  1  указывает,  что  привилегии

  необходимо изменить навсегда, то есть, до тех пор, пока  их

  снова не изменят при помощи $SETPRV  или  пока  процесс  не

  будет удален. Значение 0 (принимаемое по умолчанию)  указы-

  вает, что привилегии необходимо изменить временно, то есть,

  до тех пор, пока текущий образ не осуществит выход (в то же

  время постоянно разрешаемые привилегии процесса будут  сох-

  ранены).

       PRVPRV

       Использование в МОС ВП: MASK_PRIVILEGES

       Тип:                    квадрослово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Привилегии, которыми прежде  обладал  вызывающий  про-

  цесс. Аргумент PRVPRV - это адрес битового вектора размером

  в квадрослово, в котором каждый бит соответствует некоторой

  привилегии, разрешенной или запрещенной ранее.  Если  аргу-

  мент PRVPRV не задан или равен 0, то маска прежних привиле-

  гий не возвращается.






                          - 1026 -

                        00152-01 97 06


       Описание.

       Чтобы  установить  какую-либо  привилегию   постоянно,

  вызывающий процесс должен  быть  авторизован  на  установку

  данной привилегии, либо процесс должен выполняться в режиме

  ядра или в режиме управления.

       Для временной установки какой-либо  привилегии  нужно,

  чтобы выполнялось одно из следующий условий:

       1) вызывающий процесс должен быть авторизован на уста-

  новку заданной привилегии;

       2) вызывающий процесс должен выполняться в режиме ядра

  или в режиме управления.

       3) текущий работающий образ должен быть образом, кото-

  рый был установлен с заданной привилегией.

       Операционная  система  МОС  ВП   поддреживает   четыре

  отдельных маски привилегий для каждого процесса:

  AUTHPRIV -

       Привилегии, которые авторизованно  разрешены  процессу

       так, как их назначил администратор системы или  созда-

       тель процесса. Маска AUTHPRIV никогда не изменяется  в

       течение жизни процесса;

  PROCPRIV -

       Привилегии, которые назначаются процессу, как временно

       разрешенные. Маску PROCPRIV можно  модифицировать  при

       помощи $SETPRV;

  IMAGPRIV -

       Привилегии, с которыми был установлен текущий образ;






                          - 1027 -

                        00152-01 97 06


  CURPRIV -

       Привилегии, которые разрешены на текущий момент. Маску

       CURPRIV можно модифицировать при помощи $SETPRV.

       При создании процесса его маски AUTHPRIV,  PROCPRIV  и

  CURPIV  имеют  одинаковое  содержание.  Всякий  раз,  когда

  какой-либо программой системного обслуживания (отличной  от

  $SETPRV) нужно проверить привилегии процесса, данная  прог-

  рамма проверяет маску CURPRIV.

       Когда процесс выполняет установленный образ,  привиле-

  гии, с которыми был установлен данный образ,  включаются  в

  маску  CURPRIV.  Когда  установленный  образ   осуществляет

  выход, в маску CURPRIV копируется маска PRCPRIV.

       Программа системного обслуживания $SETPRV может  уста-

  навливать биты только в масках CUPRIV и PRCPRIV, но $SETPRV

  проверяет маску AUTHPRIV, когда требуется узнать, может  ли

  процесс устанавливать заданные  биты  привилегий  в  масках

  CURPIV или PROCPRIV. Следовательно, процесс может дать себе

  привилегию SETPRV только в том случае, если данная привиле-

  гия разрешена в маске AUTHPRIV.

       Каждую из  четырех  масок  привилегий  процесса  можно

  получить при помощи вызова программы системного  обслужива-

  ния "получить информацию о задании или процессе" ($GETJPI),

  указав требуемую маску (маски) привилегий  как  код  (коды)

  элемента в аргументе ITMLST. Код элемента для маски  приви-

  легии строится при помощи добавления символического префик-

  са JPI$_ к имени маски привилегии (например, JPI$_CURPRIV -

  это код элемента для текущей маски привилегий).




                          - 1028 -

                        00152-01 97 06


       Команда    диалогового    командного     языка     SET

  PROCESS/PRIVILEGES также разрешает или  запрещает  заданные

  привилегии.

       Возвращаемые значения кода состояния:

       SS$_NORMAL     - успешное завершение.  Все  привилегии

                      были разрешены или запрещены, как  ука-

                      зано;

       SS$_NOTALLPRIV - успешное завершение; не все указанные

                      привилегии были разрешены;

       SS$_ACCVIO     - вызывающая программа не может  прочи-

                      тать  маску  привилегий  или  не  может

                      записать прежнюю маску привилегий.



       13.100. $SETRWM  -  установить  режим  ожидания

               ресурса


       Программа системного  обслуживания  $SETRWM  позволяет

  процессу указать, какие действия должны предпринимать прог-

  раммы системного обслуживания,  когда  необходимые  для  их

  выполнения системные ресурсы недоступны.

       Если режим ожидания ресурса разрешен,  программы  сис-

  темного обслуживания будут ждать, когда требуемые системные

  ресурсы станут доступными, а затем продолжат выполнение.

       Если режим ожидания ресурса запрещен,  программы  сис-

  темного обслуживания будут возвращать управление вызывающей

  программе, если требуемые системные ресурсы недоступны.

       Код состояния, возвращаемый программой $SETRWM,  пока-

  зывает, был ли режим ожидания ресурса разрешен  или  запре-



                          - 1029 -

                        00152-01 97 06


  щен.

       Формат:

       SYS$SETRWM     [WATFLG]

       Аргументы:

       WATFLG

       Использование в МОС ВП: LONGWORD_UNSIGNED

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Индикатор, показывающий, должны ли программы системно-

  го обслуживания ожидать требуемые ресурсы. Аргумент  WATFLG

  - это значение размером в длинное слово. Значение 0 (прини-

  маемое по умолчанию) указывает,  что  программы  системного

  обслуживания должны ждать, пока ресуры, необходимые для  их

  выполнения, не станут доступными.

       Значение 1 указывает, что программы системного  обслу-

  живания, должны сразу же возвращать управление с кодом сос-

  тояния ошибки, если необходимые для их  выполнения  ресурсы

  недоступны.

       Операционная система МОС ВП разрешает  режим  ожидания

  ресурса для всех процессов. Режим  ожидания  ресурса  можно

  запретить только при помощи вызова $SETRWM. Если режим ожи-

  дания ресуса запрещен, то он остается  запрещенным  до  тех

  пор, пока его явно не разрешат, или пока процесс  не  будет

  удален.








                          - 1030 -

                        00152-01 97 06


       Описание.

       Режим ожидания ресурса использует следующие  системные

  ресурсы и квоты процесса:

       1) системную динамическую память;

       2) регистры отображения адаптера общей шины;

       3) квоту предела прямого ввода-вывода (DIOLM);

       4) квоту предела буферизованного ввода-вывода (BIOLM);

       5)  квоту  предела  счетчика  байтов   буферизованного

  ввода-вывода (BYTLM).

       Возвращаемые значения кода состояния:

       SS$_WASCLR - успешное   завершение.   Режим   ожидания

                  ресурса был прежде разрешен;

       SS$_WASSET - успешное   завершение.   Режим   ожидания

                  ресурса был прежде запрещен.



       13.101. $SETSFM     -     установить      режим

               исключительной   ситуации   по   ошибке

               программы системного обслуживания


       Программа системного  обслуживания  $SETSFM  позволяет

  процессу указать, необходимо или  нет,  чтобы  операционная

  система МОС ВП создавала исключительную ситуацию, порожден-

  ную программным обеспечением, в тех случаях, когда програм-

  ма системного обслуживания возвращает вызывающему  процессу

  код состояния ошибки.

       $SETSFM указывает в значении кода возврата, был  режим

  исключительной ситуации по ошибке программы системного обс-

  луживаня разрешен или запрещен прежде (до вызова $SETSFM).



                          - 1031 -

                        00152-01 97 06


       Режим исключительной ситуации по ошибке программы сис-

  темного обслуживания изначально запрещен, поэтому  вызываю-

  щему процессу следует  после  вызова  программы  системного

  обслуживания явно проверять,  насколько  успешным  было  ее

  завершение.

       Формат:

       SYS$SETSFM     [ENBFLG]

       Аргументы:

       ENBFLG

       Использование в МОС ВП: BOOLEAN

       Тип:                    байт (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Число, определяющее, разрешается ли режим исключитель-

  ной ситуации по ошибке программы  системного  обслуживания.

  Аргумент ENBFLG - это  однобайтовое  значение.  Значение  1

  указывает, что  режим  исключительной  ситуации  по  ошибке

  программы системного обслуживания разрешается.  Значение  0

  (принимаемое по умолчанию) указывает,  что  режим  исключи-

  тельной ситуации по ошибке программы системного  обслужива-

  ния запрещается.

       Описание:

       Если данный режим разрешен, то, когда  программа  сис-

  темного обслуживания возвращает код состояния ошибки,  соз-

  дается исключительная ситуация, вызванная программным обес-

  печением. Исключительные ситуации по ошибке программы  сис-

  темного обслуживания создаются только в  том  случае,  если




                          - 1032 -

                        00152-01 97 06


  вызов программы системного обслуживания происходит от поль-

  зовательского режима. Однако, программу системного обслужи-

  вания $SETSFM можно вызывать из любого режима доступа.

       Режим исключительной ситуации по ошибке программы сис-

  темного обслуживания, если он разрешен, остается  разрешен-

  ным до тех пор, пока его явно не запретят или пока образ не

  осуществит выход. Можно указать обработчик кода состояния в

  первом длинном слове стека  вызовов  программы  при  помощи

  программы системного обсуживания "установить вектор  исклю-

  чительной ситуации" ($SETEXV). Если пользователь не  указал

  обработчик условия, то используется принимаемый по  умолча-

  нию системный обработчик. Данный обработчик кода  состояния

  организует выход образа и затем выводит на дисплей  состоя-

  ние выхода.

       Список аргументов, который передается обработчику кода

  состояния, содержит в аргументе "имя состояния" сигнального

  массива код SS$_SSFAIL.

       Возвращаемые значения кода состояния:

       SS$_WASCLR - успешное    завершение.    Исключительные

                  ситуации по ошибке были прежде запрещены;

       SS$_WASSET - успешное    завершение.    Исключительные

                  ситуации по ошибке были прежде разрешены.



       13.102. $SETSSF -  установить  фильтр  программ

               системмого обслуживания


       Программа системного  обслуживания  $SETSSF  подавляет

  вызовы из пользовательского  режима  определенных  программ



                          - 1033 -

                        00152-01 97 06


  системного обслуживания. При помощи программы $SETSSF нель-

  зя подавить вызовы следующих программ системного обслужива-

  ния:

       1) $ASCTIM;

       2) $BINTIM;

       3) $EXIT;

       4) $FAO;

       5) $FAOL;

       6) $PUTMSG;

       7) $UNWIND.

       Формат:

       SYS$SETSSF     [MASK]

       Аргументы:

       MASK

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Категория программ  системного  обслуживания,  которые

  нужно подавлять для вызовов  из  пользовательского  режима.

  Аргумент MASK - это значение длинного слова, в котором зна-

  чащим является только первый байт. Первый байт - это  бито-

  вый вектор, в котором установленный  бит  задает  категорию

  программ системного обслуживания, которые  нужно  подавить.

  Используются только биты 0 и 1; биты со 2 по 7  игнорируют-

  ся.

       Если установлен бит 0, то  подавляются  все  программы




                          - 1034 -

                        00152-01 97 06


  системного обслуживания, включая  написанные  пользователем

  программы системного обслуживания.

       Если установлен бит 1, то  подавляются  все  программы

  системного обслуживания, включая  написанные  пользователем

  программы системного обслуживания, кроме следующих:

            1) $ADJSTK;

            2) $CRETVA;

            3) $DELTVA;

            4) $GETMSG;

            5) $SETSFM.

       Бит 1 подавляет меньшее количество программ  системого

  обслуживания, чем бит 0.  Конкретно,  бит  1  не  подавляет

  программы системного обслуживания, которые  необходимы  для

  программ системного обслуживания обработки кода состояния и

  свертывания образа, тогда как бит 0 это делает.

       Описание:

       Для успешного вызова $SETSSF надо, чтобы режим доступа

  вызывающей программы имел равную или высшую  привилегию  по

  сравнению с супевизорным режимом доступа, и чтобы при  заг-

  рузке системы был установлен параметр  системной  генерации

  (SYSGEN) SSINHIBIT.

       Если программа системного  обслуживания,  которая  уже

  подавлена, вызывается из пользовательского режима, то возв-

  ращается одно из следующих двух значений кода состояния:

       SS$_INHCHME - вызвана запрещенная программа системного

  обслуживания с режимом управления;

       SS$_INHCHMK - вызвана запрещенная программа системного




                          - 1035 -

                        00152-01 97 06


  обслуживания с режимом ядра.

       Возвращаемые значения кода состояния:

       SS$_NORMAL - успешное завершение;

       SS$_NOPRIV  - процесс не  имеет  привилегии  на  вызов

                   данной программы системного обслуживания.



       13.103. $SETSTK - установить границы стека


       Программа системного  обслуживания  $SETSTK  позволяет

  процессу изменить размер  его  стеков  режима  супервизора,

  режима управления и режима ядра посредством изменения  зна-

  чений в массивах размера и основания стека, содержащихся  в

  области P1 (для каждого процесса).

       Формат:

       SYS$SETSTK     INADR,[RETADR],[ACMODE]

       Аргументы:

       INADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Диапазон адресов, который представляет  новые  границы

  стека. Аргумент INADR - это адрес массива из  двух  длинных

  слов, содержащих адрес верхушки  стека  и  адрес  основания

  стека. Поскольку стеки в области P1 расширяются по  направ-

  лению от старших адресов к младшим, адрес основания  должен

  быть больше, чем адрес верхушки стека.





                          - 1036 -

                        00152-01 97 06


       RETADR

       Использование в МОС ВП: ADDRESS_RANGE

       Тип:                    длинное слово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Диапазон адресов, который представляет прежние границы

  стека. Аргумент RETADR - это адрес массива из двух  длинных

  слов, в которые $SETSTK записывает, в первое длиное слово -

  прежний адрес верхушки стека, и во  второе  длинное  слово-

  прежний адрес основания стека.

       ACMODE

       Использование в МОС ВП: ACCESS_MODE

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Режим доступа изменяемого стека. Аргумент ACMODE - это

  длинное  слово,  содержащее  режим  доступа.   Макрокоманда

  $PSLDEF определяет обозначения для четырех режимов доступа.

  Наиболее привилегированный  режим  доступа,  который  может

  использоваться - это режим доступа вызывающего процесса.

       Если аргумент ACMODE задает пользовательский режим, то

  $SETSTK не выполняет никаких действий и возврашает код сос-

  тояния SS$_NORMAL.

       Описание:

       Вызывающий процесс может регулировать  размеры  стеков

  только для тех режимов доступа, которые  имеют  равную  или

  меньшую привилегию по сравнению с режимом доступа  вызываю-




                          - 1037 -

                        00152-01 97 06


  щего процесса.

       Возвращаемые значения кода состояния:

       SS$_NORMAL - успешное завершение;

       SS$_ACCVIO - вызывающая программа не  может  прочитать

                  массив входных  адресов;  входной  диапазон

                  неверен; или вызывающая программа не  может

                  записать массив возвращаемых адресов.



       13.104. $SETSWM  -  установить   режим   обмена

               процесса


       Программа системного  обслуживания  $SETSWM  позволяет

  процессу указать, может или нет он выгружаться из балансно-

  го набора.

       Когда режим обмена процесса  разрешен,  процесс  может

  быть  выгружен;  когда  он  запрещен,  процесс  остается  в

  балансном наборе до тех пор, пока снова не  будет  разрешен

  режим обмена, или пока процесс не будет удален.

       Программа системного  обслуживаня  $SETSWM  возвращает

  значение кода  состояния,  которое  показывает,  был  режим

  обмена процесса разрешен или запрещен до вызова $SETSWM.

       Для того, чтобы зафиксировать некоторые,  но  необяза-

  тельно все, страницы процесса в балансном  наборе,  следует

  использовать программу системного обслуживания  "зафиксиро-

  вать страницы в памяти" ($LCKPAG).









                          - 1038 -

                        00152-01 97 06


       Формат:

       SYS$SETSWM     [SWPFLG]

       Аргументы:

       SWPFLG

       Использование в МОС ВП: LONGWORD_UNSIGNED

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Индикатор, который показывает, можно выгружать процесс

  или нет. Аргумент SWPFLG - это значение размером в  длинное

  слово. Значение  0  (принимаемое  по  умолчанию)  разрешает

  режим обмена процесса, то есть процесс может быть выгружен.

  Значение 1 запрещает режим обмена процесса, то есть процесс

  нельзя выгрузить.

       Описание:

       Чтобы изменить свой режим обмена,  вызывающий  процесс

  должен иметь привилегию $PSWAPM.

       Возвращаемые значения кода состояния:

       SS$_WASCLR - успешное завершение.  Процесс  прежде  не

                  был зафиксирован в балансном наборе;

       SS$_WASSET - успешное завершение. Процесс  прежде  был

                  зафиксирован в балансном наборе;

       SS$_NOPRIV - процесс не имеет  необходимой  привилегии

                  PSWAPM.










                          - 1039 -

                        00152-01 97 06


       13.105. $SNDERR - послать  сообщение  в  журнал

               регистрации ошибок


       Программа системного обслуживания $SNDERR записывает в

  системный файл регистрации ошибок сообщение, сформированное

  пользователем, с указанием даты и времени в начале  сообще-

  ния.

       Формат:

       SYS$SNDERR     MSGBUF

       Аргументы:

       MSGBUF

       Использование в МОС ВП: SHAR_STRING

       Тип:                    текстовая строка

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки фиксированной длины

       Сообщение, которое  записывается  в  файл  регистрации

  ошибок. Аргумент MSGBUF является адресом дескриптора строки

  символов, указывающего на текст сообщения.

       Описание.

       Чтобы отослать сообщение в  файл  регистрации  ошибок,

  вызывающий процесс должен иметь привилегию BUGCHK.

       Программе системного  обслуживания  $SNDERR  требуется

  системная динамическая память.











                          - 1040 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_NORMAL  - программа системного обслуживания успеш-

                   но завершилась;

       SS$_ACCVIO  - вызывающий процесс  не  может  прочитать

                   буфер сообщения или дескриптор буфера;

       SS$_INSFMEM - для завершения программы системного обс-

                   луживания нет доступной системной  динами-

                   ческой памяти достаточного размера;

       SS$_NOPRIV  - процесс не  имеет  требуемой  привилегии

                   BUGCHK.



       13.106. $SNDJBC - сообщить диспетчеру заданий


       Программа системного обслуживания  $SNDJBC  создает  и

  приостанавливает очереди, а  также  управляет  очередями  и

  пакетными и печатающими заданиями в данных очередях.  Прог-

  раммы системного обслуживания $SNDJBC и $GETQUI в  совокуп-

  ности обеспечивают  пользователю  интерфейс  с  диспетчером

  заданий операционной системы МОС ВП.

       Программа системного обслуживания $SNDJBC  завершается

  асинхронно, то есть, она возвращает управление  вызывающему

  процессу после постановки в очередь, не  ожидая  завершения

  операции.

       Для синхронизации завершения большинства операций сле-

  дует использовать программу системного обслуживания  "сооб-

  щить диспетчеру заданий и ждать" ($SNDJBCW). Программа сис-

  темного обслуживания $SNDJBCW  во  всем  идентична  $SNDJBC

  кроме того, что $SNDJBCW возвращает управление  вызывающему



                          - 1041 -

                        00152-01 97 06


  процессу после завершения операции (см. подраздел 2.5).

       Формат:

       SYS$SNDJBC     [EFN],FUNC,[NULLARG],[ITMLST]

                      ,[IOSB],ASTADR],[ASTPRM]

       Аргументы:

       EFN

       Использование в МОС ВП: EF_NUMBER

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Номер того флага события, который нужно установить  по

  завершении $SNDJBC.  Аргумент  EFN  -  это  длинное  слово,

  содержащее данный номер. Аргумент EFN является необязатель-

  ным.

       Когда запрос ставится в очередь, $SNDJBC очищает  ука-

  занный флаг события (или флаг события 0, если аргумент  EFN

  не был задан). Потом,  кода  операция  завершится,  $SNDJBC

  устанавливает в 1 указанный флаг события (или флаг  события

  0).

       FUNC

       Использование в МОС ВП: FUNCTION_CODE

       Тип:                    слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Код функции, который указывает, какую  функцию  должна

  выполнить программа $SNDJBC. Аргумент  FUNC  -  это  слово,

  содержащее данный код функции. Макрокоманда $SJCDEF опреде-




                          - 1042 -

                        00152-01 97 06


  ляет имена для каждого кода функции.

       В одном вызове $SNDJBC можно задавать один  код  функ-

  ции. Большинство кодов функции требуют или допускают  пере-

  дачу дополнительной информации вызывающей программе. Данная

  информация передается при помощи аргумента ITMLST,  который

  задает список из одного или нескольких дескрипторов элемен-

  та. В свою очередь, каждый дескриптор элемента  задает  код

  элемента, который  модифицирует,  ограничивает  или  как-то

  иначе изменяет действия, обозначенные данным кодом функции.

       Коды функций $SNDJBC и допустимые для них коды элемен-

  тов:

       SJC$_ABORT_JOB - данный  запрос  прерывает  выполнение

  текущего задания. Задание может быть  удалено,  либо,  если

  оно является повторно выполняемым, может быть снова постав-

  лено в очередь.

       Обязательный входной код элемента:

       SJC$_QUEUE.

       Для пакетных заданий обязательный входной код  элемен-

  та:

       SJC$_ENTRY_NUMBER.

       Необязательные входные коды элемента:

       1) SJC$_DESTINATION_QUEUE;

       2) SJC$_HOLD;

       3) SJC$_PRIORITY;

       4) SJC$_REQUEUE;

       5) SJC$_NO_HOLD.

       SJC$_ADD_FILE - данный запрос добавляет файл к  откры-




                          - 1043 -

                        00152-01 97 06


  тому заданию, принадлежащему запрашивающему процессу.  Дан-

  ная  операция  используется  как  часть  последовательности

  вызовов программы системного обслуживания $SNDJBC,  создаю-

  щих задание с одним или несколькими файлами. Первый вызов в

  данной последовательности задает  операцию  SJC$_CREATE_JOB

  для создания открытого задания. Каждый  последующий  запрос

  SJC$_ADD_FILE связывает с  данным  заданием  дополнительный

  файл. Чтобы завершить спецификацию пакетного или печатающе-

  го задания, делается запрос SJC$_CLOSE_FILE. Для того, что-

  бы создать задание, которое содержит только один файл, мож-

  но сделать один вызов  $SNDJBC  с  указанием  кода  фукнции

  SJC$_ENTER_FILE.

       Обязателен один из следующих кодов элемента:

       1) SJC$_FILE_IDENTIFICATION;

       2) SJC$_FILE_SPECIFICATION.

       Необязательные входные коды элемента:

       1) SJC$_DELETE_FILE;

       2) SJC$_NO_DELETE_FILE;

       3) SJC$_DOUBLE_SPACE;

       4) SJC$_NO_DOUBLE_SPACE;

       5) SJC$_FILE_BURST;

       6) SJC$_NO_FILE_BURST;

       7) SJC$_FILE_COPIES;

       8) SJC$_FILE_FLAG;

       9) SJC$_NO_FILE_FLAG;

       10) SJC$_FILE_SETUP_MODULES;

       11) SJC$_NO_FILE_SETUP_MODULES;




                          - 1044 -

                        00152-01 97 06


       12) SJC$_FILE_TRAILER;

       13) SJC$_NO_FILE_TRAILER;

       14) SJC$_FIRST_PAGE;

       15) SJC$_NO_FIRST_PAGE;

       16) SJC$_LAST_PAGE;

       17) SJC$_NO_LAST_PAGE;

       18) SJC$_PAGE_HEADER;

       19) SJC$_NO_PAGE_HEADER;

       20) SJC$_PAGINATE;

       21) SJC$_NO_PAGINATE;

       22) SJC$_PASSALL;

       23) SJC$_NO_PASSALL.

       SJC$_ALTER_JOB  -  данный  запрос  изменяет  параметры

  существующего задания, которое в настоящий момент не выпол-

  няется.

       Обязательные входные коды элемента:

       1) SJC$_QUEUE;

       2) SJC$_ENTRY_NUMBER.

       Необязательные входные коды элемента:

       1) SJC$_AFTER_TIME;

       2) SJC$_NO_AFTER_TIME;

       3) SJC$_CHARACTERISTIC_NAME;

       4) SJC$_NO_CHARACTERISTICS;

       5) SJC$_CHARACTERISTIC_NUMBER;

       6) SJC$_NO_CHECKPOINT_DATA;

       7) SJC$_CLI;

       8) SJC$_NO_CLI;




                          - 1045 -

                        00152-01 97 06


       9) SJC$_CPU_LIMIT;

       10) SJC$_NO_CPU_LIMIT;

       11) SJC$_NO_DELETE_FILE;

       12) SJC$_DESTINATION_QUEUE;

       13) SJC$_DOUBLE_SPACE;

       14) SJC$_NO_DOUBLE_SPACE;

       15) SJC$_FILE_BURST;

       16) SJC$_NO_FILE_BURST;

       17) SJC$_FILE_COPIES;

       18) SJC$_FILE_FLAG;

       19) SJC$_NO_FILE_FLAG;

       20) SJC$_FILE_SETUP_MODULES;

       21) SJC$_NO_FILE_SETUP_MODULES;

       22) SJC$_FILE_TRAILER;

       23) SJC$_NO_FILE_TRAILER;

       24) SJC$_FIRST_PAGE;

       25) SJC$_NO_FIRST_PAGE;

       26) SJC$_FORM_NAME;

       27) SJC$_FORM_NUMBER;

       28) SJC$_HOLD;

       29) SJC$_NO_HOLD;

       30) SJC$_JOB_COPIES;

       31) SJC$_JOB_NAME;

       32) SJC$_LAST_PAGE;

       33) SJC$_NO_LAST_PAGE;

       34) SJC$_LOG_DELETE;

       35) SJC$_NO_LOG_DELETE;




                          - 1046 -

                        00152-01 97 06


       36) SJC$_LOG_QUEUE;

       37) SJC$_LOG_SPECIFICATION;

       38) SJC$_NO_LOG_SPECIFICATION;

       39) SJC$_LOG_SPOOL;

       40) SJC$_NO_LOG_SPOOL;

       41) SJC$_LOWERCASE;

       42) SJC$_NO_LOWERCASE;

       43) SJC$_NOTE;

       44) SJC$_NO_NOTE;

       45) SJC$_NOTIFY;

       46) SJC$_NO_NOTIFY;

       47) SJC$_OPERATOR_REQUEST;

       48) SJC$_NO_OPERATOR_REQUEST;

       49) SJC$_PAGE_HEADER;

       50) SJC$_NO_PAGE_HEADER;

       51) SJC$_PAGINATE;

       52) SJC$_NO_PAGINATE;

       53) SJC$_PARAMETR_1 до 8;

       54) SJC$_NO_PARAMETERS;

       55) SJC$_PASSALL;

       56) SJC$_NO_PASSALL;

       57) SJC$_PRIORITY;

       58) SJC$_RESTART;

       59) SJC$_NO_RESTART;

       60) SJC$_WSDEFAULT;

       61) SJC$_NO_WSDEFAULT;

       62) SJC$_WSEXTENT;




                          - 1047 -

                        00152-01 97 06


       63) SJC$_NO_WSEXTENT;

       64) SJC$_WSQUOTA;

       65) SJC$_NO_WSQUOTA.

       SJC$_ALTER_QUEUE - данный  запрос  изменяет  параметры

  очереди. На выполнение текущих заданий он не влияет.

       Обязательный входной код элемента:

       SJC$_QUEUE

       Необязательные входные коды элемента:

       1) SJC$_BASE_PRIORITY;

       2) SJC$_CHARACTERISTIC_NAME;

       3) SJC$_NO_CHARACTERISTICS;

       4) SJC$_CHARACTERISTIC_NUMBER;

       5) SJC$_CPU_DEFAULT;

       6) SJC$_NO_CPU_DEFAULT;

       7) SJC$_CPU_LIMIT;

       8) SJC$_NO_CPU_LIMIT;

       9) SJC$_FILE_BURST;

       10) SJC$_NO_FILE_BURST;

       11) SJC$_FILE_BURST_ONE;

       12) SJC$_FILE_FLAG;

       13) SJC$_NO_FILE_FLAG;

       14) SJC$_FILE_FLAG_ONE;

       15) SJC$_FILE_TRAILER;

       16) SJC$_NO_FILE_TRAILER;

       17) SJC$_FILE_TRAILER_ONE;

       18) SJC$_FORM_NAME;

       19) SJC$_FORM_NUMBER;




                          - 1048 -

                        00152-01 97 06


       20) SJC$_GENERIC_SELECTION;

       21) SJC$_NO_GENERIC_SELECTION;

       22) SJC$_JOB_BURST;

       23) SJC$_NO_JOB_BURST;

       24) SJC$_JOB_FLAG;

       25) SJC$_NO_JOB_FLAG;

       26) SJC$_LIMIT;

       27) SJC$_JOB_RESET_MODULES;

       28) SJC$_NO_JOB_RESET_MODULES;

       29) SJC$_JOB_SIZE_MAXIMUM;

       30) SJC$_NO_JOB_SIZE_MAXIMUM;

       31) SJC$_JOB_SIZE_MINIMUM;

       32) SJC$_NO_JOB_SIZE_MINIMUM;

       33) SJC$_JOB_SIZE_SCHEDULING;

       34) SJC$_NO_JOB_SIZE_SCHEDULING;

       35) SJC$_JOB_TRAILER;

       36) SJC$_NO_JOB_TRAILER;

       37) SJC$_OWNER_UIC;

       38) SJC$_PAGINATE;

       39) SJC$_NO_PAGINATE;

       40) SJC$_PRTECTION;

       41) SJC$_RECORD_BLOCKING;

       42) SJC$_NO_RECORD_BLOCKING;

       43) SJC$_RETAIN_ALL_JOBS;

       44) SJC$_NO_RETAIN_JOBS;

       45) SJC$_RETAIN_ERROR_JOBS;

       46) SJC$_SWAP;




                          - 1049 -

                        00152-01 97 06


       47) SJC$_NO_SWAP;

       48) SJC$_WSDEFAULT;

       49) SJC$_NO_WSDEFAULT;

       50) SJC$_WSEXTENT;

       51) SJC$_NO_WSEXTENT;

       52) SJC$_WSQUOTA;

       53) SJC$_NO_WSQUOTA.

       SJC$_ASSIGN_QUEUE - данный запрос назначает логическую

  очередь для очереди выполнения. Логическую  очередь  задают

  при помощи кода элемента SJC$_QUEUE; очередь  выполнения  -

  при помощи кода элемента SJC$_DESTINATION_QUEUE.

       Обязательные коды элемента:

       1) SJC$_QUEUE;

       2) SJC$_DESTINATION_QUEUE.

       SJC$_BATCH_CHECKPOINT - данный запрос организует конт-

  рольную точку в пакетном задании. Если  запрашивающий  про-

  цесс не является пакетным процессом, то никакие действия не

  выполняются.

       Обязательный входной код элемента:

       SJC$_SHECKPOINT_DATA;

       SJC$_CLOSE_DELETE -  данный  запрос  удаляет  открытое

  задание, принадлежащее запрашивающему процессу.  Коды  эле-

  мента не допускаются;

       SJC$_CLOSE_JOB - данный запрос завершает  спецификацию

  открытого задания, принадлежащего запрашивающему  процессу,

  и помещает задание  в  очередь,  указанную  в  том  запросе

  SJC$__CREATE_JOB, который открыл данное задание. Если  зап-




                          - 1050 -

                        00152-01 97 06


  рос SJC$_CLOSE_JOB завершается успешно, то  задание  больше

  не  является  открытым  заданием;  оно  становится  обычным

  пакетным или печатающим заданием.

       Необязательный выходной код элемента:

       SJC$_JOB_STATUS_OUTPUT;

       SJC$_CREATE_JOB - данный запрос создает открытое зада-

  ние для запрашивающего процесса. Если процессу уже  принад-

  лежит какое-то открытое задание, то оно удаляется. Открытое

  задание - это пакетное или печатающее задание, которое  еще

  не полностью специфицировано. После того, как сделан запрос

  SJC$_CREATE_JOB, открывающий задание, можно сделать  после-

  дующие вызовы $SNDJBC, используя код функции  SJC$_ADD_FILE

  для того, чтобы задать файлы, связанные с данным  заданием.

  Наконец, можно завершить спецификацию  задания  при  помощи

  запроса  SJC$_CLOSE_JOB.  Если   операция   SJC$_CREATE_JOB

  завершается успешно, то созданному открытому заданию  прис-

  ваивается номер входа; данному заданию не назначается  оче-

  редь, указанная в операции  SJC$_CREATE_JOB,  до  тех  пор,

  пока успешно не завершится SJC$_CLOSE_JOB.

       Обязательный входной код элемента:

       SJC$_QUEUE

       Необязательные входные коды элемента:

       1) SJC$_ACCOUNT_NAME;

       2) SJC$_AFTER_TIME;

       3) SJC$_NO_AFTER_TIME;

       4) SJC$_CHARACTERISTIC_NAME;

       5) SJC$_NO_CHARACTERISTICS;




                          - 1051 -

                        00152-01 97 06


       6) SJC$_CHARACTERISTIC_NUMBER;

       7) SJC$_CLI;

       8) SJC$_NO_CLI;

       9) SJC$_CPU_LIMIT;

       10) SJC$_NO_CPU_LIMIT;

       11) SJC$_FILE_BURST;

       12) SJC$_NO_FILE_BURST;

       13) SJC$_FILE_BURST_ONE;

       14) SJC$_FILE_FLAG;

       15) SJC$_NO_FILE_FLAG;

       16) SJC$_FILE_FLAG_ONE;

       17) SJC$_FILE_TRAILER;

       18) SJC$_NO_FILE_TRAILER;

       19) SJC$_FILE_TRAILER_ONE;

       20) SJC$_FORM_NAME;

       21) SJC$_FORM_NUMBER;

       22) SJC$_HOLD;

       23) SJC$_NO_HOLD;

       24) SJC$_JOB_COPIES;

       25) SJC$_JOB_NAME;

       26) SJC$_LOG_DELETE;

       27) SJC$_NO_LOG_DELETE;

       28) SJC$_LOG_QUEUE;

       29) SJC$_LOG_SPECIFICATION;

       30) SJC$_NO_LOG_SPECIFICATION;

       31) SJC$_LOG_SPOOL;

       32) SJC$_NO_LOG_SPOOL;




                          - 1052 -

                        00152-01 97 06


       33) SJC$_LOWERCASE;

       34) SJC$_NO_LOWERCASE;

       35) SJC$_NOTE;

       36) SJC$_NO_NOTE;

       37) SJC$_NOTIFY;

       38) SJC$_NO_NOTIFY;

       39) SJC$_OPERATOR_REQUEST;

       40) SJC$_NO_OPERATOR_REQUEST;

       41) SJC$_PARAMETER_1 до 8;

       42) SJC$_NO_PARAMETERS;

       43) SJC$_PRIORITY;

       44) SJC$_RESTART;

       45) SJC$_NO_RESTART;

       46) SJC$_UIC;

       47) SJC$_USERNAME;

       48) SJC$_WSDEFAULT;

       49) SJC$_NO_WSDEFAULT;

       50) SJC$_WSEXTENT;

       51) SJC$_NO_WSEXTENT;

       52) SJC$_WSQUOTA;

       53) SJC$_NO_WSQUOTA.

       Необязательный выходной код элемента:

       SJC$_ENTRY_NUMBER_OUTPUT;

       SJC$_CREATE_QUEUE -  данный  запрос  создает  очередь.

  Если такая очередь уже существует и не остановлена, то дан-

  ный запрос не  выполняет  никаких  операций.  Однако,  если

  такая очередь уже существует и остановлена, то запрос изме-




                          - 1053 -

                        00152-01 97 06


  няет параметры очереди на основании кодов элемента,  задан-

  ных в запросе; если задан код  элемента  SJC$_CREATE_START,

  то запрос запускает данную очередь.

       Обязательный входной код элемента:

       SJC$_QUEUE.

       Необязательные входные коды элемента:

       1) SJC$_BASE_PRIORITY;

       2) SJC$_BATCH;

       3) SJC$_NO_BATCH;

       4) SJC$_CHARACTERISTIC_NAME;

       5) SJC$_NO_CHARACTERISTICS;

       6) SJC$_CHARACTERISTIC_NUMBER;

       7) SJC$_CPU_DEFAULT;

       8) SJC$_NO_CPU_DEFAULT;

       9) SJC$_CPU_LIMIT;

       10) SJC$_NO_CPU_LIMIT;

       11) SJC$_CREATE_START;

       12) SJC$_DEVICE_NAME;

       13) SJC$_FILE_BURST;

       14) SJC$_NO_FILE_BURST;

       15) SJC$_FILE_BURST_ONE;

       16) SJC$_FILE_FLAG;

       17) SJC$_NO_FILE_FLAG;

       18) SJC$_FILE_FLAG_ONE;

       19) SJC$_FILE_TRAILER;

       20) SJC$_NO_FILE_TRAILER;

       21) SJC$_FILE_TRAILER_ONE;




                          - 1054 -

                        00152-01 97 06


       22) SJC$_FORM_NAME;

       23) SJC$_FORM_NUMBER;

       24) SJC$_GENERIC_QUEUE;

       25) SJC$_NO_GENERIC_QUEUE;

       26) SJC$_GENERIC_SELECTION;

       27) SJC$_NO_GENERIC_SELECTION;;

       28) SJC$_GENERIC_TARGET;

       29) SJC$_JOB_BURST;

       30) SJC$_NO_JOB_BURST;

       31) SJC$_JOB_FLAG;

       32) SJC$_NO_JOB_FLAG;

       33) SJC$_JOB_LIMIT;

       34) SJC$_JOB_RESET_MODULES;

       35) SJC$_NO_JOB_RESET_MODULES;

       36) SJC$_JOB_SIZE_MAXIMUM;

       37) SJC$_NO_JOB_SIZE_MAXIMUM;

       38) SJC$_JOB_SIZE_MINIMUM;

       39) SJC$_NO_JOB_SIZE_MINIMUM;

       40) SJC$_JOB_SIZE_SCHEDULIN;

       41) SJC$_NO_JOB_SIZE_SCHEDULING;

       42) SJC$_JOB_TRAILER;

       43) SJC$_NO_JOB_TRAILER;

       44) SJC$_LIBRARY_SPECIFICATION;

       45) SJC$_NO_LIBRARY_SPECIFICATION;

       46) SJC$_OWNER_UIC;

       47) SJC$_PAGINATE;

       48) SJC$_NO_PAGINATE;




                          - 1055 -

                        00152-01 97 06


       49) SJC$_PROCESSOR;

       50) SJC$_NO_PROCESSOR;

       51) SJC$_PROTECTION;

       52) SJC$_RECORD_BLOCKING;

       53) SJC$_NO_RECORD_BLOCKING;

       54) SJC$_RETAIN_ALL_JOBS;

       55) SJC$_NO_RETAIN_JOBS;

       56) SJC$_RETAIN_ERROR_JOBS;

       57) SJC$_SCSNODE_NAME;

       58) SJC$_SWAP;

       59) SJC$_NO_SWAP;

       60) SJC$_TERMINAL;

       61) SJC$_NO_TERMINAL;;

       62) SJC$_WSDEFAULT;

       63) SJC$_NO_WSDEFAULT;

       64) SJC$_WSEXTENT;

       65) SJC$_NO_WSEXTENT;

       66) SJC$_WSQUOTA;

       67) SJC$_NO_WSQUOTA.

       SJC$_DEASSIGN_QUEUE - данный запрос отменяет  логичес-

  кую очередь для очереди выполнения.

       Обязательный входной код элемента:

       SJC$_QUEUE;

       SJC$_DEFINE_CHARACTERISTIC - данный запрос  определяет

  имя и номер характеристики и вставляет данное определение в

  файл очереди. Каждое имя  характеристики  имеет  уникальный

  номер в диапазоне от 0 до 127. Если такое имя характеристи-




                          - 1056 -

                        00152-01 97 06


  ки уже определено, то запрос  изменяет  определение  данной

  характеристики.

       Задание не может выполняться в той же очереди выполне-

  ния, которая не обладает всеми характеристиками,  принадле-

  жащими данному заданию; но очередь может обладать  дополни-

  тельными характеристиками, и задание будет выполняться.

       Обязательные входные коды элементов:

       1) SJC$_CHARACTERISTIC_NAME;

       2) SJC$_CHARACTERISTIC_NUMBER;

       SJC$_DEFINE_FORM -  данный  запрос  определяет  имя  и

  номер формы наряду с другими физическими атрибутами  ассор-

  тимента бумаги и вставляет данное определение  в  системный

  файл очереди задания. Если такое имя формы уже  определено,

  то запрос изменяет определение данной формы.

       Формы используются только выходными очередями выполне-

  ния и печатающими заданиями. Печатающее  задение  не  может

  выполниться, если имя ассортимента, заданное  для  очереди,

  отличается от имени  ассортимента,  заданного  для  данного

  задания. Имя  ассортимента,  принадлежащее  форме,  которое

  задано при помощи кода элемента SJC$_FORM_STOCK,  указывает

  ассортимент бумаги, используемой ацпу. Другие коды элемента

  задают такие параметры печати для задания, как поля,  длину

  бумаги и т.п.

       Каждая форма должна иметь уникальный номер. Когда соз-

  дается новый файл очереди, система обеспечивает определение

  формы по имени DEFAULT с номером 0 и принимаемые по умолча-

  нию характеристики.




                          - 1057 -

                        00152-01 97 06


       Обязательные входные коды элемента:

       1) SJC$_FORM_NAME;

       2) SJC$_FORM_NUMBER.

       Необязательные входные коды элемента:

      1) SJC$_FORM_DESCRIPTION;

       2) SJC$_FORM_LENGTH;

       3) SJC$_FORM_MARGIN_BOTTOM;

       4) SJC$_FORM_MARGIN_LEFT;

       5) SJC$_FORM_MARGIN_RIGHT;

       6) SJC$_FORM_MARGIN_TOP;

       7) SJC$_FORM_SETUP_MODULES;

       8) SJC$_NO_FORM_SETUP_MODULES;

       9) SJC$_FORM_SHEET_FEED;

       10) SJC$_NO_FORM_SHEET_FEED;

       11) SJC$_FORM_STOCK;

       12) SJC$_FORM_TRUNCATE;

       13) SJC$_NO_FORM_TRUNCATE;

       14) SJC$_FORM_WIDTH;

       15) SJC$_FORM_WRAP;

       16) SJC$_NO_FORM_WRAP;

       17) SJC$_PAGE_SETUP_MODULES;

       18) SJC$_NO_PAGE_SETUP_MODULES;

       SJC$_DELETE_CHARACTERISTIC  -  данный  запрос  удаляет

  определение имени характеристики.










                          - 1058 -

                        00152-01 97 06


       Обязательный входной код элемента:

       SJC$_CHARACTERISTIC_NAME;

       SJC$_DELETE_FORM - данный запрос  удаляет  задание  из

  системного файла очереди или задания, в которых есть  обра-

  щение к данной форме.

       Обязательный входной код элемента:

       SJC$_FORM_NAME;

       SJC$_DELETE_JOB - данный  запрос  удаляет  задание  из

  системного файла очереди заданий. Если задание в  настоящий

  момент выполняется, то оно прерывается.

       Обязательные входные коды элемента:

       1) SJC$_QUEUE;

       2) SJC$_ENTRY_NUMBER;

       SJC$_DELETE_QUEUE - данный запрос  удаляет  очередь  и

  все задания в очереди. Данная очередь должна быть  останов-

  ленной, и не должно существовать других очередей или  зада-

  ний, в которых есть обращение к данной очереди.

       Обязательный входной код элемента:

       SJC$_QUEUE;

       SJC$_ENTER_FILE  -  данный  запрос  создает   задание,

  содержащее один файл, и помещает данное задание в указанную

  очередь. Для того, чтобы создать задание с несколькими фай-

  лами, нужно последовательно вызывать  программу  системного

  обслуживания    $SNDJBC,     используя     коды     функции

  SJC$_CREATE_JOB, SJC$_ADD_FILE и SJC$_CLOSE_JOB.








                          - 1059 -

                        00152-01 97 06


       Обязательный входной код элемента:

       SJC$_QUEUE.

       Обязателен один из следующих входных кодов элемента:

       1) SJC$_FILE_IDENTIFICATION;

       2) SJC$_FILE_SPECIFICATION.

       Необязательные входные коды элемента:

       1) SJC$_ACCOUNT_NAME;

       2) SJC$_AFTER_TIME;

       3) SJC$_NO_AFTER_TIME;

       4) SJC$_CHARACTERISTIC_NAME;

       5) SJC$_NO_CHARACTERISTICS;

       6) SJC$_CHARACTERISTIC_NUMBER;

       7) SJC$_CLI;

       8) SJC$_NO_CLI;

       9) SJC$_CPU_LIMIT;

       10) SJC$_NO_CPU_LIMIT;

       11) SJC$_DELETE_FILE;

       12) SJC$_NO_DELETE_FILE;

       13) SJC$_DOUBLE_SPACE;

       14) SJC$_NO_DOUBLE_SPACE;

       15) SJC$_FILE_BURST;

       16) SJC$_NO_FILE_BURST;

       17) SJC$_FILE_COPIES;

       18) SJC$_FILE_FLAG;

       19) SJC$_NO_FILE_FLAG;

       20) SJC$_FILE_SETUP_MODULES;

       21) SJC$_NO_FILE_SETUP_MODULES;




                          - 1060 -

                        00152-01 97 06


       22) SJC$_FILE_TRAILER;

       23) SJC$_NO_FILE_TRAILER;

       24) SJC$_FIRST_PAGE;

       25) SJC$_NO_FIRST_PAGE;

       26) SJC$_FORM_NAME;

       27) SJC$_FORM_NUMBER;

       28) SJC$_HOLD;

       29) SJC$_NO_HOLD;

       30) SJC$_JOB_COPIES;

       31) SJC$_JOB_NAME;

       32) SJC$_LAST_PAGE;

       33) SJC$_NO_LAST_PAGE;

       34) SJC$_LOG_DELETE;

       35) SJC$_NO_LOG_DELETE;

       36) SJC$_LOG_QUEUE;

       37) SJC$_LOG_SPECIFICATION;

       38) SJC$_NO_LOG_SPECIFICATION;

       39) SJC$_SPOOL;

       40) SJC$_NO_SPOOL;

       41) SJC$_LOWERCASE;

       42) SJC$_NO_LOWERCASE;

       43) SJC$_NOTE;

       44) SJC$_NO_NOTE;

       45) SJC$_NOTIFY;

       46) SJC$_NO_NOTIFY;

       47) SJC$_OPERATOR_REQUEST;

       48) SJC$_NO_OPERATOR_REQUEST;




                          - 1061 -

                        00152-01 97 06


       49) SJC$_PAGE_HEADER;

       50) SJC$_NO_PAGE_HEADER;

       51) SJC$_PAGINATE;

       52) SJC$_NO_PAGINATE;

       52) SJC$_PARAMETER_1 до 8;

       54) SJC$_NO_PARAMETERS;

       55) SJC$_PASSALL;

       56) SJC$_NO_PASSALL;

       57) SJC$_PRIORITY;

       58) SJC$_RESTART;

       59) SJC$_NO_RESTART;

       60) SJC$_UIC;

       61) SJC$_USERNAME;

       62) SJC$_WSDEFAULT;

       63) SJC$_NO_WSDEFAULT;

       64) SJC$_WSEXTENT;

       65) SJC$_NO_WSEXTENT;

       66) SJC$_WSQUOTA;

       67) SJC$_NO_WSQUOTA.

       Необязательные выходные коды элемента:

       1) SJC$_ENTRY_NUMBER_OUTPUT;

       2) SJC$_JOB_STATUS_OUTPUT;

       SJC$_MERGE_QUEUE -  данный  запрос  предоставляет  все

  задания из очереди, указанной кодом элемента SJC$_QUEUE,  в

  свою      очередь      указанную       кодом       элемента

  SJC$_DESTINATION_QUEUE. На выполнение текущих  заданий  это

  не влияет.




                          - 1062 -

                        00152-01 97 06


       Обязательные входные коды элементов:

       1) SJC$_QUEUE;

       2) SJC$_DESTINATION_QUEUE;

       SJC$_PAUSE_QUEUE  -  данный  запрос   приостанавливает

  выполнение текущих заданий в указанной очереди и прекращает

  запуск заданий в данной очереди.

       Обязательный входной код элемента:

       SJC$_QUEUE;

       SJC$_RESET_QUEUE - данный запрос сбрасывает  указанную

  очередь следующим образом:  заканчивает  и  удаляет  каждое

  выполняющееся задание, которое не является повторно  запус-

  каемым, заканчивает и снова ставит в очередь каждое  выпол-

  няющееся задание, которое является повторно  запускаемым  и

  останавливает очередь.

       Обязательный входной код элемента:

       SJC$_QUEUE;

       SJC$_START_ACCOUNTING - данный  запрос  выполняет  две

  функции. Если задан код элемента SJC$_ACCOUNTING_TYPES,  то

  запрос  разрешает  регистрацию  учетных  записей  указанных

  типов; если SJC$_ACCOUNTING_TYPES не задан, то данный  зап-

  рос запускает планировщик учетной  информации  и  открывает

  системный учетный файл.

       Обязателен один из следующих кодов элемента:

       1) SJC$_ACCOUNTING_TYPES;

       2) SJC$_NEW_VERSION;

       SJC$_START_QUEUE  -  данный  запрос  разрешает  запуск

  заданий в указанной очереди. Если очередь была  приостанов-




                          - 1063 -

                        00152-01 97 06


  лена, то возобновляются текущие задания.

       Обязательный входной код элемента:

       SJC$_QUEUE.

       Необязательные входные коды элемента:

       1) SJC$_ALIGNMENT_MASK;

       2) SJC$_ALIGNMENT_PAGES;

       3) SJC$_BASE_PRIORITY;

       4) SJC$_BATCH;

       5) SJC$_NO_BATCH;

       6) SJC$_CHARACTERISTIC_NAME;

       7) SJC$_NO_CHARACTERISTICS;

       8) SJC$_CHARACTERISTIC_NUMBER;

       9) SJC$_CPU_DEFAULT;

       10) SJC$_NO_CPU_DEFAULT;

       11) SJC$_CPU_LIMIT;

       12) SJC$_NO_CPU_LIMIT;

       13) SJC$_DEVICE_NAME;

       14) SJC$_FILE_BURST;

       15) SJC$_NO_FILE_BURST;

       16) SJC$_FILE_BURST_ONE;

       17) SJC$_FILE_FLAG;

       18) SJC$_NO_FILE_FLAG;

       19) SJC$_FILE_FLAG_ONE;

       20) SJC$_FILE_TRAILER;

       21) SJC$_NO_FILE_TRAILER;

       22) SJC$_FILE_TRAILER_ONE;

       23) SJC$_FORM_NAME;




                          - 1064 -

                        00152-01 97 06


       24) SJC$_FORM_NUMBER;

       25) SJC$_GENERIC_QUEUE;

       26) SJC$_NO_GENERIC_QUEUE;

       27) SJC$_GENERIC_SELECTION;

       28) SJC$_NO_GENERIC_SELECTION;

       29) SJC$_GENERIC_TARGET;

       30) SJC$_JOB_BURST;

       31) SJC$_NO_JOB_BURST;

       32) SJC$_JOB_FLAG;

       33) SJC$_NO_JOB_FLAG;

       34) SJC$_JOB_LIMIT;

       35) SJC$_JOB_RESET_MODULES;

       36) SJC$_NO_JOB_RESET_MODULES;

       37) SJC$_JOB_SIZE_MAXIMUM;

       38) SJC$_NO_JOB_SIZE_MAXIMUM;

       39) SJC$_JOB_SIZE_MINIMUM;

       40) SJC$_NO_JOB_SIZE_MINIMUM;

       41) SJC$_JOB_SIZE_SCHEDULING;

       42) SJC$_NO_JOB_SIZE_SCHEDULING;

       43) SJC$_JOB_TRAILER;

       44) SJC$_NO_JOB_TRAILER;

       45) SJC$_LIBRARY_SPECIFICATION;

       46) SJC$_NO_LIBRARY_SPECIFICATION;

       47) SJC$_NEXT_JOB;

       48) SJC$_OWNER_UIC;

       49) SJC$_PAGINATE;

       50) SJC$_NO_PAGINATE;




                          - 1065 -

                        00152-01 97 06


       51) SJC$_PROCESSOR;

       52) SJC$_NO_PROCESSOR;

       53) SJC$_PROTECTION;

       54) SJC$_RECORD_BLOCKING;

       55) SJC$_NO_RECORD_BLOCKING;

       56) SJC$_RELATIVE_PAGE;

       57) SJC$_RETAIN_ALL_JOBS;

       58) SJC$_NO_RETAIN_JOBS;

       59) SJC$_RETAIN_ERROR_JOBS;

       60) SJC$_SEARCH_STRING;

       61) SJC$_SWAP;

       62) SJC$_NO_SWAP;

       63) SJC$_TERMINAL;

       64) SJC$_NO_TERMINAL;

       65) SJC$_TOP_OF_FILE;

       66) SJC$_WSDEFAULT;

       67) SJC$_NO_WSDEFAULT;

       68) SJC$_WSEXTENT;

       69) SJC$_NO_WSEXTENT;

       70) SJC$_WSQUOTA;

       71) SJC$_NO_WSQUOTA;

       SJC$_START_QUEUE_MANAGER  -  данный  запрос  запускает

  планировщик очередей, применяя принятые по умолчанию специ-

  фикации файла из SYS$SYSTEM:JBCSYSQUE.DAT; либо  он  откры-

  вает существующий системный файл очереди заданий, либо соз-

  дает новый. Использование кода  элемента  SJC$_$NEW_VERSION

  приводит к созданию нового системного файла  очереди  зада-




                          - 1066 -

                        00152-01 97 06


  ний.

       Необязательные входные коды элементов:

       1) SJC$_BUFFER_COUNT;

       2) SJC$_EXTENT_QUANTITY;

       3) SJC$_QUEUE_FILE_SPECIFICATION;

       4) SJC$_NEW_VERSION;

       SJC$_STOP_ACCOUNTING -  данный  запрос  выполняет  две

  функции. Если задан код элемента SJC$_ACCOUNTING_TYPES,  то

  данный запрос запрещает регистрацию учетных записей указан-

  ных типов. Если SJC$_ACCOUNTING_TYPES не задан,  то  запрос

  останавливает планировщик учетной  информации  и  закрывает

  системный учетный файл.

       Необязательный входной код элемента:

       SJC$_ACCOUNTING_TYPES;

       SJC$_STOP_QUEUE - данный запрос запрещает запуск зада-

  ний в указанной очереди. На выполнение текущих заданий  это

  не влияет.

       Обязательный входной код элемента:

       SJC$_QUEUE;

       SJC$_STOP_QUEUE_MANAGER  -  данный  запрос   завершает

  выполнение планировщика  очередей.  Он  останавливает  свою

  очередь; прерывает каждое выполняющееся  в  текущий  момент

  задание,  снова  помещая  в  очередь  те  задания,  которые

  являются повторно запускаемыми; и закрывает системный  файл

  очереди заданий. Никакие коды элементов не допускаются;

       SJC$_SYNCHRONIZE_JOB - данный запрос ожидает  заверше-

  ния какого-либо задания, затем устанавливает флаг  события,




                          - 1067 -

                        00152-01 97 06


  об'являет AST завершения и возвращает код завершения данно-

  го задания в блок состояния ввода-вывода при условии, что в

  вызове программы системного обслуживания $SNDJBC был  задан

  аргумент IOSB.

       Обязательный входной код элемента:

       SJC$_QUEUE.

       Обязателен один из следующих входных кодов элемента:

       1) SJC$_ENTRY_NUMBER;

       2) SJC$_JOB_NAME;

       SJC$_WRITE_ACCOUNTING - данный запрос записывает учет-

  ную запись.

       Обязательный входной код элемента:

       SJC$_ACCOUNTING_MESSAGE.

       NULLARG

       Использование в МОС ВП: NULL_ARG

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Данный аргумент не используется.

       ITMLST

       Использование в МОС ВП: ITEM_LIST_3

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по ссылке

       Список элементов, обеспечивающих  информацию,  которая

  должна  использоваться  при  выполнении  функции,  заданной

  аргументом FUNC. Аргумент ITMLST - это адрес списка элемен-




                          - 1068 -

                        00152-01 97 06


  тов. Список элементов  состоит  из  одного  или  нескольких

  дескрипторов элементов, каждый из  которых  определяет  код

  элемента. Список элементов заканчивается кодом  элемента  0

  или длинным словом, содержащим 0. Рис.80 показывает  струк-

  туру одного дескриптора элемента.



                     Дескриптор элемента

       31                       15                         0
       ------------------------------------------------------
       !       Код элемента     !      Длина буфера         !
       ------------------------------------------------------
       !                    Адрес буфера                    !
       ------------------------------------------------------
       !               Адрес возвращаемой длины             !
       ------------------------------------------------------

                             Рис. 80


       Поля дескриптора элемента $SNDJBC:

  длина буфера -

       Слово, задающее длину буфера; данный буфер либо  обес-

       печивает информацию, которую использует $SNDJBC,  либо

       получает информацию от $SNDJBC. Требуемая длина буфера

       изменяется в зависимости от указанного кода элемента и

       задается в описании каждого кода элемента;

  код элемента -

       Слово, содержащее код элемента, который определяет тип

       информации, обеспечиваемой для $SNDJBC или  получаемой

       от $SNDJBC. Каждый код  элемента  имеет  символическое

       имя; данные имена определяются при помощи макрокоманды

       $SJCDEF и имеют формат: SJC$_код.

       Существуют три типа кодов элемента:




                          - 1069 -

                        00152-01 97 06


       1) булев код элемента.  Булевы  коды  элемента  задают

  значение "истина" или "ложь"; формат SJC_код задает  значе-

  ние "истина", а формат SJC$_NO_код задает значение  "ложь".

  Для булевых кодов элемента поля дескриптора элемента "длина

  бууфера", "адрес буфера" и "возвращаемая длина" должны быть

  нулевыми;

       2) входной код элемента. Входные коды элемента  задают

  входные значения, которые используются программой  $SNDJBC.

  Для входных кодов элемента, поля дескриптора элемента "дли-

  на буфера" и "адрес буфера" должны  быть  ненулевыми;  поле

  "адрес возвращаемой длины" должно быть нулевым.  Конкретные

  требования к длине буфера задаются в описании каждого  кода

  элемента;

       3) выходной код элемента. Выходные коды элемента опре-

  деляют  буфер  для  информации,   возвращаемой   программой

  $SNDJBC. Для выходных кодов элемента поля десприптора  эле-

  мента "длина буфера" и "адрес буфера" должны быть ненулевы-

  ми; поле "адрес возвращаемой длины" может быть нулевым  или

  ненулевым. Конкретные требования к длине буфера задаются  в

  описании каждого кода элемента.

       Несколько кодов элемента задают имя очереди, имя формы

  или имя характеристики. Для таких кодов элемента буфер дол-

  жен задавать строку, содержащую от 1 до 31 символа,  исклю-

  чая пробелы, знаки  табуляции  и  пустые  символы,  которые

  игнорируются. Допустимыми символами в строке являются  про-

  писные буквенные символы, строчные буквенные символы (кото-

  рые преобразуются  в  прописные),  цифровые  символы,  знак




                          - 1070 -

                        00152-01 97 06


  денежной единицы ($) и знак подчеркивания (_);

  адрес буфера -

       Адрес буфера, который задает или получает информацию;

  адрес возвращаемой длины -

       Адрес слова, которое получает длину информации (в бай-

       тах), возвращаемой  программой  $SNDJBC.  Если  данный

       адрес был задан равным 0, то длина не возвращается.

       Коды элементов программы $SNDJBC:

       SJC$_ACCOUNT_NAME - это входной код  элемента.  Данное

       значение задает 8-байтовое учетное  имя  пользователя,

       для которого  делается  данный  запрос.  По  умолчанию

       учетное имя берется от запрашивающего процесса. Данный

       код требует привилегии CMKRNL;

  SJC$_ACCOUNTING_MESSAGE -

       Это входной  код  элемента.  Он  заставляет  поместить

       содержимое буфера в учетную  запись  "пользовательские

       данные". Буфер должен задавать строку длиной от  1  до

       255 символов;

  SJC$_ACCOUNTING_TYPES -

       Это входной код элемента. Он разрешает  или  запрещает

       определенные типы учетных записей. Если  какой-то  тип

       учетной записи разрешен, то событие, обозначенное дан-

       ным типом, будет занесено  в  данную  учетную  запись.

       Буфер должен содержать битовую маску размером в  длин-

       ное слово, где каждый бит определяет тип учетной запи-

       си. Неиспользованные биты должны быть нулевыми.

       такие типы имеют символические имена, которые  опреде-




                          - 1071 -

                        00152-01 97 06


  ляют при помощи макрокоманды $SJCDEF. Битовая маска  разме-

  ром в длинное словов строится при помощи операции "логичес-

  кое или", выполненной для символических имен всех требуемых

  типов учетных записей.

       Типы учетных записей и системные события,  которые  им

  соответствуют:

       1) SJC$V_ACCT_IMAGE - завершение образа;

       2) SJC$V_ACCT_LOGIN_FAILURE - ошибки при подключении;

       3) SJC$V_ACCT_MESSAGE - посланные пользователем  сооб-

  щения;

       4) SJC$V_ACCT_PRINT - завершение печатающих заданий;

       5) SJC$V_ACCT_PROCESS - завершение процесса.

       Следующие типы учетных записей, когда  они  разрешены,

  обеспечивают дополнительную информацию о завершении  образа

  и процесса; а именно, они описывают тип образа или  процес-

  са, который завершился:

       1) SJC$V_ACCT_BATCH - пакетный процесс;

       2) SJC$V_ACCT_DETACHED - отсоединенный процесс;

       3) SJC$V_ACCT_INTERACTIVE - интерактивный процесс;

       4) SJC$V_ACCT_NETWORK - сетевой процесс;

       5) SJC$V_ACCT_SUBPROCESS - подпроцесс;

  SJC$_AFTER_TIME -

       Это входной код элемента. Он  указывает,  что  задание

       может выполняться только в том случае, если  системное

       время больше или равно значению времени в квадрослове,

       содежащемуся в буфере.  Буфер  должен  содержать  либо

       значение   абсолютного    времени,    либо    значение




                          - 1072 -

                        00152-01 97 06


       дельта-времени;    $SNDJBC    преобразует     значение

       дельта-времени в значение абсолютного времени, прибав-

       ляя текущее системное время;

  SJC$_NO_AFTER_TIME -

       Это булев код  элемента.  Он  указывает,  что  задание

       может выполняться немедленно.  Данный  код  принят  по

       умолчанию;

  SJC$_ALIGNMENT_MASK -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения и только  в  том  случае,

       если   задан   код   элемента    SJC$_ALIGNMENT_PAGES.

       SJC$_ALIGNMENT_MASK  означает,  что  данные,   которые

       печатаются на страницах выравнивания форм, должны быть

       замаскированы: все буквенные символы заменяются буквой

       "X", а все цифровые символы - цифрой 9;

  SJC$_ALIGNMENT_PAGES -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения.  Данный  код  указывает,

       что очередь необходимо перевести в состояние выравнив-

       нания форм, и  надо  напечатать  некоторое  количество

       страниц выравнивания. Буфер должен содержать  значение

       в диапазоне от 1 до 20 размером в длинное слово;  дан-

       ное значение указывает, сколько  страниц  выравнивания

       требуется напечатать;

  SJC$_BASE_PRIORITY -

       Это входной код элемента. Он имеет значение только для

       очередей выполнения. Данный код задает базовый приори-




                          - 1073 -

                        00152-01 97 06


       тет для пакетных заданий, инициированных  из  пакетной

       очереди, или для симбионтных  процессов,  связанных  с

       выходной  очередью  выполнения.  Симбионтный   процесс

       может управлять несколькими очередями; однако, базовый

       приоритет симбионтного процесса устанавливается первой

       очередью, с которой он связан. Буфер должен  содержать

       значение размером в длинное слово в диапазоне от 1  до

       15; данное значение задает базовый приоритет. По умол-

       чанию базовым приоритетом является значение  параметра

       системной генерации DEFPRI. Если значение DEFPRI равно

       0, то по умолчанию базовый  приоритет  равен  базовому

       приоритету запрашивающего процесса;

  SJC$_BATCH -

       Это булев код  элемента.  Он  указывает,  что  очередь

       является пакетной очередью для  выполнения  или  общей

       пакетной очередью, и, таким образом,  может  обрабаты-

       вать только печатающие задания. Данный код  принят  по

       умолчанию;

  SJC$_BUFFER_COUNT -

       Это входной код элемента. Он задает  количество  буфе-

       ров, которое диспетчер заданий должен выделить  своему

       кэшу  локальных  буферов   для   выполнения   операций

       ввода-вывода в системный файл очереди  заданий.  Буфер

       данного кода должен содержать целое значение  размером

       в длинное слово в диапазоне от 1 до 127 или 0;  данное

       значение определяет количество буферов,  которое  дис-

       петчер заданий  выделяет  для  своего  кэша  локальных




                          - 1074 -

                        00152-01 97 06


       буферов. Если задан 0, то используется  принимамое  по

       умолчанию значение 50;

  SJC$_CHARACTERISTIC_NAME и SJC$_CHARACTERISTIC_NUMBER -

       Это входные коды элементов. Оба определяют характерис-

       тики заданий или очереди и могут использоваться  взаи-

       мозаменяемо. Характеристики  определяет  пользователь.

       Коды     функций     SJC$_DEFINE_CHARACTERISTIC      и

       SJC$_DELETE_CHARACTERISTIC соответственно  включают  и

       удаляют заданные характеристики  из  системного  файла

       очереди заданий. Задание не может работать  в  очереди

       выполняющихся заданий, если данная очередь не обладает

       всеми характиристиками, присущими заданию; но  очередь

       может иметь дополнительные характеристики,  и  задание

       будет        выполняться.        Коды        элементов

       SJC$_CHARACTERISTIC_NAME и  SJC$_CHARACTERISTIC_NUMBER

       могут появлятся в одном вызове  столько  раз,  сколько

       это необходимо; полученый таким образом в вызове набор

       характеристик замещает набор характеристик, определен-

       ный предыдущим вызовом. По умолчанию очередь или зада-

       ние не  имеет  определенных  характеристик.  Для  кода

       SJC$_CHARACTERISTIC_NAME строка имени может  содержать

       прописные или строчные символы (строчные преобразуются

       в прописные), цифровые символы, знаки денежной единицы

       и подчеркивания. Если строка является логическим  име-

       нем, то SYS$SNDJBC итеративно транслирует его  до  тех

       пор, пока не будет найдена  эквивалентная  строка  или

       пока  количество  трансляций  не  достигнет  значения,




                          - 1075 -

                        00152-01 97 06


       допускаемого системой. Максимальная длина  окончатель-

       ной символьной строки  -  31  символ;  пробелы,  знаки

       табуляции и  пустые  символы  игнорируются.  Для  кода

       SJC$_CHARACTERISTIC_NUMBER буфер должен содержать зна-

       чение в диапазоне от 0 до 127 размером в длинное  сло-

       во. Данный номер идентифицирует характеристику;

  SJC$_NO_CHARACTERISTIC -

       Это булев код элемента. Он отменяет  все  определенные

       для данного задания или очереди характеристики;

  SJC$_CHECKPOINT_DATA -

       Это входной код  элемента.  Он  задает  для  пакетного

       задания, которое является повторно запускаемым, значе-

       ние символа DCL BATCH$RESTART. Буфер должен  содержать

       строку длиной не более  255  символов;  данная  строка

       является значением символа BATCH_RESTART;

  SJC$_NO_CHECKPOINT_DATA -

       Это булев код элемента. Он отменяет предыдущее опреде-

       ление символа BATCH$RESTART; он также  отменяет  конт-

       рольную точку в  печатающем  задании,  так  что  снова

       печатается все задание целиком.  По  умолчанию  символ

       BATCH$RESTART не определен;

  SJC$_CLI -

  Это входной код элемента. Он имеет значение только для паке

       данный  код  указывает,  что   интерпретатором   языка

       команд,      подлежащим      выполнению,      является

       SYS$SYSTEM:имя.EXE, где "имя"  -  это  допустимое  имя

       файла. Буфер должен задавать строку имени длиной от  1




                          - 1076 -

                        00152-01 97 06


       до 39 символов;

  SJC$_NO_CLI -

       Это булев код элемента. Он указывает,  что  необходимо

       выполнять интерпретатор языка команд, заданный в файле

       авторизации пользователя. Данный  код  принимается  по

       умолчанию;

  SJC$_CPU_DEFAULT -

       Это входной код элемента. Он имеет значение только для

       пакетных очередей выполнения. Данный код задает прини-

       маемый  по  умолчанию  предел  времени  процессора   в

       10-миллисекундных единицах. Буфер содержит данное зна-

       чение размером в длинное слово. Значение  0  указывает

       на неогрниченное время процессора;

  SJC$_NO_CPU_DEFAULT -

       Это булев код элемента. Он имеет значение  только  для

       пакетных очередей выполнения.  Данный  код  указывает,

       что к данному заданию не применяется принятый по умол-

       чанию предел времени процессора. Данный код принимает-

       ся по умолчанию.

       Предел времени процессора для  процесса  включается  в

  каждую пользовательскую запись в системном файле  авториза-

  ции пользователя (UAF). Кроме того, можно задать  некоторые

  или все из следующих значений:  предел  времени  процессора

  для отдельных заданий,  принимаемый  по  умолчанию,  предел

  времени процессора для всех заданий в данной очереди и пре-

  дел максимального времени процессора  для  всех  заданий  в

  данной очереди. В табл.69 описаны действия, которые  предп-




                          - 1077 -

                        00152-01 97 06


  ринимаются, если для SJC$_CPU_DEFAULT задано какое-то  зна-

  чение.


                                                   Таблица 69

  -----------------------------------------------------------

  Предел !Принимаемый !Максима-!

  времени!по умолчанию!льное   !

  процес-!предел вре- !время   !         Предпринимаемые

  сора   !мени процес-!процесс-!            действия

  для за-!сора очереди!сора для!

  дания  !указан?     !очереди !

  указан?!            !указано?!

  -----------------------------------------------------------

    нет  !     нет    !   нет  !используется значение UAF

    да   !     нет    !   нет  !используется меньшее из зна-

         !            !        !чений предела задания и UAF

    да   !     да     !   нет  !используется меньшее из зна-

         !            !        !чений задания и UAF

    да   !     нет    !   да   !используется меньшее из пре-

         !            !        !дела задания и максимального

         !            !        !значения

    да   !     да     !   да   !используется меньшее из пре-

         !            !        !дела задания и максимального

         !            !        !значения

    нет  !     да     !   да   !используется меньшее из при-

         !            !        !нятого по умолчанию и макси-

         !            !        !мального значений для очереди





                          - 1078 -

                        00152-01 97 06


                                         Продолжение табл. 69

  -----------------------------------------------------------

  Предел !Принимаемый !Максима-!

  времени!по умолчанию!льное   !

  процес-!предел вре- !время   !         Предпринимаемые

  сора   !мени процес-!процесс-!            действия

  для за-!сора очереди!сора для!

  дания  !указан?     !очереди !

  указан?!            !указано?!

  -----------------------------------------------------------

    нет  !     нет    !   да   !используется максимальное

         !            !        !значение

    нет  !     да     !   нет  !используется меньшее из зна-

         !            !        !чения UAF и принятого по

         !            !        !умолчанию значения для очере-

         !            !        !ди


  SJC$_CPU_LIMIT -

       Это входной код элемента. Он имеет значение только для

       пакетных очередей выполнения и для  пакетных  заданий.

       Данный код задает максимальный предел времени  процес-

       сора в 10-миллисекундных единицах. Буфер должен содер-

       жать данное значение размером в длинное слово.  Значе-

       ние 0 указывает на неограниченное время процессора;

  SJC$_NO_CPU_LIMIT -

       Это булев код элемента. Он имеет значение  только  для

       пакетных очередей выполнения и для  пакетных  заданий.

       он указывает, что к данному заданию неприменим  макси-



                          - 1079 -

                        00152-01 97 06


       мальный предел времени процессора. Данный  код  прини-

       мается по умолчанию.

       Информация о действиях, которые предпринимаются,  если

  для SJC$_CPU_LIMIT задано какое-то значение,  приводится  в

  описании кода элемента SJC$_CPU_DEFAULT и в табл.69;

  SJC$_CREATE_START -

       Это булев код элемента. Он указывает на то,  что  оче-

       редь можно запустить после того, как она будет  созда-

       на. По умолчанию очередь после  ее  создания  остается

       остановленной;

  SJC$_DELETE_FILE -

       Это булев код элемента. Он указывает, что после завер-

       шения задания файл необходимо удалить. Данный код эле-

       мента нельзя указывать с кодом функции SJC$_ALTER_JOB,

       который изменяет параметры уже существующего  задания;

       запрос на удаление файла можно сделать  только  в  том

       случае, когда задание впервые ставится в очередь;

  SJC$_NO_DELETE_FILE -

       Это булев код элемента. Он указывает, что после выпол-

       нения задания файл не необходимо удалять.  Это  прини-

       мается по умолчанию. Данный код элемента  можно  зада-

       вать с кодом функции SJC$_ALTER_JOB; это дает  возмож-

       ность отменить запрос на удаление файла,  который  был

       сделан, когда данное задание впервые ставилось в  оче-

       редь;

  SJC$_DESTINATION_QUEUE -

       Это входной код элемента.  Когда  указан  код  функции




                          - 1080 -

                        00152-01 97 06


       SJC$_ASSIGN_QUEUE, SJC$_DESTINATION_QUEUE  задает  имя

       очереди  выполнения,  которой  назначается  логическая

       очередь. Когда указаны  коды  функции  SJC$_ABORT_JOB,

       SJC$_ALTER_JOB  или  SJC$_MERGE_QUEUE,  код   элемента

       SJC$_DESTINATION_QUEUE задает имя той очереди, в кото-

       рую помещаются задания. По умолчанию задания  остаются

       в исходной очереди.

       Строка имени может содержать  прописные  или  строчные

  символы (строчные преобразуются в прописные), цифровые сим-

  волы, знаки денежной единицы и подчеркивания.  Если  строка

  является логическим именем, SYS$SNDJBC итеративно  трансли-

  рует до тех пор, пока не будет найдена эквивалентная строка

  или пока не выпонится такое количество трансляций,  которое

  допускается операционной системой МОС ВП. Максимальная дли-

  на окончательной символьной строки -  31  символ;  пробелы,

  знаки табуляции и пустые символы игнорируются;

  SJC$_DEVICE_NAME -

       Это входной код элемента. Он имеет значение только для

       очередей заданий. Данный код задает  узел  и/или  уст-

       ройтсво,  на  котором  размещается  указанная  очередь

       выполнения.  Для  пакетных  очередей  можно  указывать

       только имя узла. Буфер должен задавать  строку  длиной

       от 1 до 31 символа;

  SJC$_DOUBLE_SPACE -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения.  Данный  код  указывает,

       что выходной симбионт должен печатать один файл  через




                          - 1081 -

                        00152-01 97 06


       два интервала. По умолчанию файл печатается через один

       интервал;

  SJC$_ENTRY_NUMBER -

       Это выходной код элемента. Он задает номер входа зада-

       ния, для которого выполняется  данная  функция.  Буфер

       должен содержать данный номер входа;

  SJC$_ENTRY_NUMBER_OUTPUT -

       Это выходной  код  элемента.  Буфер  должен  содержать

       длинное слово, в которое $SNDJBC запишет  номер  входа

       созданного задания;

  SJC$_EXTENT_QUANTITY -

       Это входной код элемента. Он  задает  размер  экстента

       системного файла очереди заданий в блоках. Данный раз-

       мер экстента используется при создании файла  очередей

       для определния начального размера распределения. Буфер

       должен содержать целое  значение  размером  в  длинное

       слово в диапазоне от 10 до 65535 или 0. Данное  значе-

       ние определяет количество блоков, на  которое  следует

       расширять очередь. По умолчанию  принимается  значение

       100 блоков. Если задано значение  0,  то  используется

       принятый по умолчанию размер;

  SJC$_FILE_BURST -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения.  Данный  код  указывает,

       что перед файлом требуется напечатать страницу  разры-

       ва. Если код SJC$_FILE_BURST указан для задания, то по

       умолчанию он распространяется  на  все  файлы  данного




                          - 1082 -

                        00152-01 97 06


       задания; если он указан для входной  очереди  выполне-

       ния, то по умолчанию его действие распространяется  на

       все задания, выполняемые из данной очереди;

  SJC$_FILE_BURST_ONE -

       Это булев код элемента. Он имеет  значение  толко  для

       выходных очередей выполнения.  Данный  код  указывает,

       что перед файлом необходимо напечатать страницу разры-

       ва. Если код SJC$_FILE_BURST_ONE указан  для  задания,

       то он означает, что  страницу  разрыва  надо  печатать

       только перед первой копией первого  файла  в  задании;

       если код задан для выходной очереди выполнения, то  по

       умолчанию он определяет  действия  для  всех  заданий,

       выполняемых из данной очереди;

  SJC$_NO_FILE_BURST -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он указывает, что  стра-

       ницу разрыва печатать не требуется. Данный код  принят

       по умолчанию;

  SJC$_FILE_COPYES -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения.  Он  указывает,  сколько

       раз необходимо повторить файл. По умолчанию файл  пов-

       торяется один раз. Буфер должен содержать значение  от

       1 до 255 размером в  длинное  слово;  данное  значение

       является счетчиком повторений;

  SJC$_FILE_FLAG -

       Это булев код элемента. Он имеет значение  только  для




                          - 1083 -

                        00152-01 97 06


       выходных очередей выполнения. Он указывает, что  перед

       файлом необходимо печатать страницы флагов.  Если  код

       SJC$_FILE_FLAG указан для  задания,  то  по  умолчанию

       распространяется на все файлы в данном  задании;  если

       код задан для выходной очереди выполнения, то по умол-

       чанию он распространяется на все задания,  выполненные

       из данной очереди;

  SJC$_FILE_FLAG_ONE -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он указывает, что  перед

       файлом необходимо напечатать страницу флагов. Если код

       SJC$_FILE_FLAG_ONE указан для задания, то  он  обозна-

       чает, что страницу флага задания  необходимо  печатать

       только перед первой копией первого  файла  в  задании;

       если код указан для выходной очереди выполнения, то по

       умолчанию он определяет такие действия для всех  зада-

       ний, выполненных из данной очереди;

  SJC$_NO_FILE_FLAG -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он указывает, что  стра-

       ницу флагов печатать не требуется. Данный  код  принят

       по умолчанию;

  SJC$_FILE_IDENTIFICATION -

       Это входной код элемента. Он задает  файл,  подлежащий

       обработке. Буфер содержит 28-байтовое значение,  кото-

       рое идентифицирует файл, подлежащий обработке.  Данное

       значение  задает  (по  порядку)  следующие  три  поля:




                          - 1084 -

                        00152-01 97 06


       16-байтовое поле NAM$T_DVI, 6-байтовое поле  NAM$W_FID

       и 6-байтовое поле NAM$W_DID. Данные поля располагаются

       в блоке NAM последовательно и в том порядке,  как  они

       перечислены.

       Если задан код SJC$_FILE_IDENTIFICATION, то  код  эле-

  мента SJC$_FILE_SPECIFICATION дожен быть опущен;

  SJC$_FILE_SETUP_MODULES -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Он указывает, что  перед

       тем, как печатать файл, необходимо извлечь  из  управ-

       ляющей библиотеки устройтсва список текстовых  модулей

       и скопировать их на ацпу. Буфер должен содержать  спи-

       сок имен текстовых модулей, разделенных запятыми;

  SJC$_NO_FILE_SETUP_MODULES -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он указывает, что  перед

       печатью файла не требуется копировать текстовые  моду-

       ли. Данный код принят по умолчанию;

  SJC$_FILE_SPECIFICATION -

       Это входной код элемента. Он идентифицирует файл, под-

       лежащий обработке. Буфер должен содержать спецификацию

       файла,  подлежащего  обработке.  Программа  системного

       обслуживания $SNDJBC преобразует спецификацию файла  в

       соответсвтующую идентифкацию файла и  дальше  работает

       так,   как    если    был    указан    код    элемента

       SJC$_FILE_IDENTIFICATION.     Если      задан      код

       SJC$_FILE_SPECIFICATION,     то      код      элемента




                          - 1085 -

                        00152-01 97 06


       SJC$_FILE_IDENTIFICATION должен быть опущен;

  SJC$_FILE_TRAILER -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он указывает, что  после

       файла  необходимо  печатать  дополнительную  страницу.

       Если код SJC$_FILE_TRAILER указан для задания,  то  по

       умолчанию он распространяется на все  файлы  в  данном

       задании; если код указан для выходной очереди выполне-

       ния, то по умолчанию он распространяется на все  зада-

       ния, выполненные в данной очереди;

  SJC$_FILE_TRAILER_ONE -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он указывает, что  после

       файла требуется печатать дополнительную страниц;  если

       код SJC$_FILE_TRAILER_ONE указан для  задания,  то  он

       означает, что дополнительнуую страницу требуется печа-

       тать только за последней  копией  последнего  файла  в

       данном задании; если код указан для  выходной  очереди

       выполнения, то он по умолчанию определяет такие  дейс-

       тия для всех заданий, выполненных из данной очереди;

  SJC$_NO_FILE_TRAILER -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он означает, что  допол-

       нительную страницу печатать не требуется.  Данный  код

       принят по умолчанию;

  SJC$_FIRST_PAGE -

       Это выходной код элемента. Он  имеет  значение  только




                          - 1086 -

                        00152-01 97 06


       для выходных  очередей  выполнения.  Он  задает  номер

       страницы, с которой требуется начать  печатать.  Буфер

       должен содержать ненулевое значение размером в длинное

       слово, задающее данный номер страницы;

  SJC$_NO_FIRST_PAGE -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он означает, что  печать

       требуется начинать с первой страницы. Данный код  при-

       нят по умолчанию;

  SJC$_FORM_DESCRIPTION -

       Это входной код элемента. Он задает текст, описывающий

       данную форму для пользоватаелй и операторов. По  умол-

       чанию используется имя формы.  Буфер  должен  задавать

       строку длиной не более 255 символов;

  SJC$_FORM_LENGTH -

       Это входной код элемнта. Он имеет значение только  для

       выходных очередей  выполнения.  Он  задает  физическую

       длину формы в строках. Буфер должен содержать  ненуле-

       вое целое значение размером в длинное слово. По  умол-

       чанию длина формы - 66 строк;

  SJC$_FORM_MARGIN_BOTTOM -

       Это входной код элемента. Он задает нижнее поле  формы

       В строках.  По  умолчанию  нижнее  поле  составляет  6

       строк;

  SJC$_FORM_MARGIN_LEFT -

       Это входной код элемента. Он задает левое поле формы в

       символах. По умолчанию поле равно 0. Буфер должен ука-




                          - 1087 -

                        00152-01 97 06


       зывать значение размером в длинное слово;

  SJC$_FORM_MARGIN_RIGHT -

       Это входной код элемента. Он задает правое поле  формы

       В символах. По умолчанию правое поле  равно  0.  Буфер

       должен указывать значение размером в длинное слово;

  SJC$_FORM_MARGIN_TOP -

       Это входной код элемента. Он задает верхнее поле формы

       С строках. По умолчанию поле равно 0;

  SJC$_FORM_NAME и SJC$_FORM_NUMBER -

       Это входные коды элементов. Они задают форму соотвест-

       венно по имени и по номеру. Для  SJC$_FORM_NAME  буфер

       должен содержать имя формы. Для SJC$_FORM_NUMBER буфер

       должен содержать значение размером  в  длинное  слово.

       Коды  функций  SJC$_DEFINE_FORM  и   SJC$__DELETE_FORM

       соответственно включают  и  удаляют  указанное  имя  и

       номер формы из системного файла очереди заданий. Зада-

       ние не может  выполняться  в  выходной  очереди,  если

       заданная (по имени или по номеру) для данного  задания

       форма не совпадает с именем ассортимента формы, задан-

       ным (по имени или по номеру) для  данной  очереди.  По

       умолчанию форма имеет номер 0. Строка может  содержать

       прописные или строчные символы (строчные преобразуются

       в прописные), цифровые символы, знаки денежной единицы

       и подчеркивания. Если строка является логическим  име-

       нем, то $SNDJBC итеративно транслирует ее до тех  пор,

       пока не будет найдено эквивалентное имя или пока коли-

       чество выполненных трансляций  не  достигнет  предела,




                          - 1088 -

                        00152-01 97 06


       допустимого системой. Максимальная длина окончательной

       символьной строки - 31 символ; пробелы, знаки  табуля-

       ции и пустые символы игнорируются;

  SJC$_FORM_SETUP_MODULES -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения.  Буфер  должен  задавать

       одно или несколько имен текстовых модулей, разделенных

       запятыми. Данный код  элемента  означает,  что  данные

       модули необходимо извлечь  из  управляющей  библиотеки

       устройства и скопировать на ацпу перед каждым  файлом,

       который печатается в данной форме;

  SJC$_NO_FORM_SETUP_MODULES -

       Это булев код элемента. Он означает,  что  управляющие

       модули устройства печатать не  требуется.  Данный  код

       принят по умолчанию;

  SJC$_FORM_SHEET_FEED -

       Это булев код элемента. Он означает, что симбионт дол-

       жен останавливаться в конце каждой физической страницы

       так, чтобы можно было вставить новую форму;

  SJC$_NO_FORM_SHEET_FEED -

       Это булев код элемента. Он означает, что выходной сим-

       бионт не должен останавливаться после каждой  физичес-

       кой страницы. Данный код принят по умолчанию;

  SJC$_FORM_STOCK -

       Это выходной код элемента. Он задает имя для  ассорти-

       мента бумаги. Буфер должен содержать строку длиной  от

       1 до 31  символа.  По  умолчанию  именем  ассортимента




                          - 1089 -

                        00152-01 97 06


       Бумаги является имя формы;

  SJC$_FORM_TRUNCATE -

       Это булев код элемента. Он означает, что симбионт дол-

       жен отсекать строки, которые продолжаются  за  пределы

       правого поля. Задание кода SJC$_FORM_TRUNCATE отменяет

       действие кода SJC$_FORM_WRAP.  Данный  код  принят  по

       умолчанию;

  SJC$_NO_FORM_TRUNCATE -

       Это булев код элемента. Он означает, что выходной сим-

       бионт не должен отсекать строки, которые  продолжаются

       за пределы правого поля;

  SJC$_FORM_WIDTH -

       Это входной код элемента. Он задает физическую  ширину

       формы в символах.  Буфер  должен  содержать  ненулевое

       целое значение размером в длинное слово. По  умолчанию

       ширина формы - 132 символа;

  SJC$_FORM_WRAP -

       Это булев код элемена. Он означает, что симбионт  дол-

       жен переносить строки, которые продолжаются за пределы

       правого поля.  Задание  кода  SJC$_FORM_WRAP  отменяет

       действие кода SJC$_FORM_TRUNCATE;

  SJC$_FORM_NO_FORM_WRAP -

       Это булев код элемента. Он означает, что выходной сим-

       бионт не должен переносить строки. Данный  код  принят

       по умолчанию;

  SJC$_GENERIC_QUEUE -

       Это булев  код  элемента.  Он  означает,  что  очередь




                          - 1090 -

                        00152-01 97 06


       является общей очередью;

  SJC$_NO_GENERIC_QUEUE -

       Это булев код элемента. Он означает,  что  очередь  не

       является общей очередью. Данный код принят по  умолча-

       нию. По умолчанию очередь является  очередью  выполне-

       ния;

  SJC$_GENERIC_SELECTION -

       Это булев  код  элемента.  Он  означает,  что  очередь

       выполнения может принимать задания из  общей  очереди.

       данный код принят  по  умолчанию.  Он  имеет  значение

       только для очередей выполнения;

  SJC$_NO_GENERIC_SELECTION -

       Это булев  код  элемента.  Он  означает,  что  очередь

       выполнения не может принимать задания из общей  очере-

       ди;

  SJC$_GENERIC_TARGET -

       Это входной код элемента. Буфер  должен  задавать  имя

       очереди. Данное  имя  очереди  идентифицирует  очередь

       выполнения, которая может принимать задания  из  общей

       очереди. Данный код элемента имеет значение только для

       общих очередей. В одном вызове $SNDJBC можно  задавать

       данный код элемента до 124 раз. Набор очередей,  опре-

       деленных при одном вызове, полностью  замещает  набор,

       определенный предыдущим вызовом.  Строка  имени  может

       содержать  прописные  и  строчные  символы   (строчные

       преобразуются в прописные),  цифровые  символы,  знаки

       денежной единицы и подчеркивания. Если строка является




                          - 1091 -

                        00152-01 97 06


       логическим именем, то SYS$SNDJBC  итеративно  трансли-

       рует ее до тех пор, пока не будет найдена  эквивалнет-

       ная строка или количество  выполненных  трансляций  не

       достигнет предела, допустимого в системе. Максимальная

       длина окончательной символьной  строки  -  31  символ;

       пробелы, знаки табуляции и пустые символы  игнорируют-

       ся;

  SJC$_HOLD -

       Это булев код элемента. Он означает, что задание нель-

       зя выполнить и его необходимо задержать;

  SJC$_NO_HOLD -

       Это булев код элемента. Он означает, что задание можно

       выполнить немедленно; он также дает право на  выполне-

       ние следующим типам заданий:

       1) заданию, которое задержано на заданное время;

       2) заданию, которое задержано по запросу симбионта;

       3) заданию, которое было задержано после выполнения;

  SJC$_JOB_BURST -

       Это булев код элемента. Он означает, что перед  каждым

       заданием требуется печатать страницу разрыва. Он имеет

       значение только для выходных очередей выполнения;

  SJC$_NO_JOB_BURST -

       Это булев код элемента. Он означает, что не  требуется

       печатать страницу разрыва перед  каждым  заданием.  Он

       имеет значение только для выходных  очередей  задания.

       данный код принят по умолчанию;






                          - 1092 -

                        00152-01 97 06


  SJC$_JOB_COPIES -

       Это входной код элемента. Он  указывает,  сколько  раз

       требуется повторить все печатающее задание. Буфер дол-

       жен содержать  ненулевое  целое  значение  размером  в

       длинное слово. По умолчанию печатающее задание  выпол-

       няется один раз;

  SJC$_JOB_FLAG -

       Это булев код элемнента. Он означает, что перед каждым

       заданием необходимо печатать страницу флагов. Он имеет

       значение только для выходных очередей выполнения;

  SJC$_NO_JOB_FLAG -

       Это булев код элемента. Он означает, что не  требуется

       печатать страницу флагов  перед  каждым  заданием.  Он

       имеет значение только для выходных  очередей  выполне-

       ния. Данный код принят по умолчанию;

  SJC$_JOB_LIMIT -

       Это входной код элемента. Он задает максимальное коли-

       чество заданий, которые могут одновременно выполняться

       на одной очереди. Буфер должен содержать значение раз-

       мером в длинное слово в диапазоне  от  1  до  255.  Он

       имеет значение только для пакетных  очередей  выполне-

       ния. По умолчанию предел заданий равен 1;

  SJC$_JOB_NAME -

       Это входной код элемента. Он  указывает  имя  задания.

       Буфер должен содержать строку длиной от 1 до 39 симво-

       лов.    Для     кодов     функций     SJC$_ENTER_FILE,

       SJC$_CREATE_JOB   и   SJC$_ALTER_JOB.   Код   элемента




                          - 1093 -

                        00152-01 97 06


       SJC$_JOB_NAME определяет имя,  которое  идентифицирует

       данное задание. По умолчанию используется имя  первого

       файла     в     задании.     Для     кода      функции

       SJC$_SYNCHRONIZE_JOB, код элемента SJC$_JOB_NAME опре-

       деляет имя того задания, которое необходимо  синхрони-

       зировать. Данное имя  задания  неявно  квалифицируется

       именем пользователя;

  SJC$_JOB_RESET_MODULES -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Буфер  должен  содержать

       имена одного или нескольких текстовых модулей,  разде-

       ленные запятыми. Данный  код  элемента  означает,  что

       данные модули необходимо извлечь из  управляющей  биб-

       лиотеки устройтсва и копировать перед каждым  печатаю-

       щим заданием;

  SJC$_NO_JOB_RESET_MODULES -

       Это булев код элемента.  Он  означает,  что  текстовые

       модули не требуется копировать  на  ацпу.  Данный  код

       принят по умолчанию;

  SJC$_JOB_SIZE_MAXIMUM -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Он означает,  что  печа-

       тающее задание может выполняться только в том  случае,

       если его общий размер в блоках меньше или равен задан-

       ной величине. Буфер определяет данное ненулевое значе-

       ние размером в длинное слово;






                          - 1094 -

                        00152-01 97 06


  SJC$_NO_JOB_SIZE_MAXIMUM -

       Это булев код элемента. Он  означает,  что  печатающее

       задание может выполняться  немедленно,  независимо  от

       его размеров. Данный код принят по умолчанию;

  SJC$_JOB_SIZE_MINIMUM -

       Это входной код элемента. Он имеет значение только для

       выходных очередей печатающих заданий. Он означает, что

       печатающее задание может выполняться только в том слу-

       чае, если его общий размер в блоках больше  или  равен

       заданной величине. Буфер определяет  данное  ненулевое

       значение размером в длинное слово;

  SJC$_NO_JOB_SIZE_MINIMUM -

       Это булев код элемента. Он  означает,  что  печатающее

       задание может выполниться  немедленно,  независимо  от

       его размера. Данный код принят по умолчанию;

  SJC$_JOB_SIZE_SCHEDULING -

       Это булев код  элемента.  Он  означает,  что  задания,

       которые вводятся в выходную очередь выполнения,  необ-

       ходимо планировать во времени в соответствии с их раз-

       мером так, чтобы наименьшее  задание  с  установленным

       приоритетом обрабатывалось первым. Данный  код  принят

       по умолчанию;

  SJC$_NO_JOB_SIZE_SCHEDULING -

       Это булев код элемента. Он  означает,  что  печатающие

       задания с установленным приоритетом не требуется  пла-

       нировать в соответствии с их размером. Изменение  зна-

       чения данного кода элемента для очереди  в  то  время,




                          - 1095 -

                        00152-01 97 06


       когда в очереди  есть  ожидающие  печатающие  задания,

       будет давать непредсказуемые результаты;

  SJC$_JOB_STATUS_OUTPUT -

       Это выходной код  элемента.  Если  он  задан,  $SNDJBC

       возвращает в виде символьной строки текстовое  сообще-

       ние, описывающее состояние подчиненного задания.  Пос-

       кольку сообщение может включать до 255 символов, то  в

       поле "длина буфера"  дескриптора  элемента  необходимо

       указывать 255 (байтов);

  SJC$_JOB_TRAILER -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он означает,  что  после

       каждого  задания  необходимо  печатать  дополнительную

       страницу;

  SJC$_NO_JOB_TRAILER -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он означает, что не тре-

       буется печатать дополнительную страницу после  каждого

       задания. Данный код принят по умолчанию;

  SJC$_LAST_PAGE -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Он задает номер  страни-

       цы, которой должна заканчиваться печать. Буфер  задает

       данное ненулевое значение размером в длинное слово;

  SJC$_NO_LAST_PAGE -

       Это булев код элемента. Он означает, что печать должна

       заканчиваться последней страницей. Данный  код  принят




                          - 1096 -

                        00152-01 97 06


       по умолчанию;

  SJC$_LIBRARY_SPECIFICATION -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Он означает, что  управ-

       ляющей      библиотекой      устройства       является

       SYS$LIBRARY:имя.TLB, где "имя" -  это  допустимое  имя

       файла. Буфер должен содержать данное имя файла;

  SJC$_NO_LIBRARY_SPECIFICATION -

       Это булев код элемента. Он означает,  что  управляющей

       библиотекой            устройства             является

       SYS$LIBRARY:SYSDEVCTL.TLB. Данный код принят по  умол-

       чанию;

  SJC$_LOG_DELETE -

       Это булев код элемента. Он означает, что файл  регист-

       рации, созданный  для  пакетного  задания,  необходимо

       удалить. Он имеет значение только для  пакетных  зада-

       ний. Данный код принят по умолчанию;

  SJC$_NO_LOG_DELETE -

       Это булев код элемента. Он означает, что файл  регист-

       рации, созданный для пакетного задания,  не  требуется

       удалять;

  SJC$_LOG_QUEUE -

       Это входной код элемента. Он имеет значение только для

       пакетных заданий. Он задает очередь, в которую вводит-

       ся файл регистрации, созданный для пакетного  задания.

       Буфер должен содержать имя данной очереди. По  умолча-

       нию файл регистрации  вводится  в  очередь  SYS$PRINT.




                          - 1097 -

                        00152-01 97 06


       Строка имени может содержать  строчные  или  прописные

       символы (строчные преобразуются в прописные), цифровые

       символы, знаки денежной единицы и подчеркивания.  Если

       строка является логическим именем, то SYS$SNDJBC  ите-

       ративно транслирует ее до тех пор, пока не будет  най-

       дена эквивалентная строка, или пока количество  выпол-

       ненных трансляций не достигнет предела, допустимого  в

       системе. Максимальная длина  окончательной  символьной

       строки - 31 символ; пробелы, знаки табуляции и  пустые

       символы игнорируются;

  SJC$_LOG_SPECIFICATION -

       Это входной код элемента. Он имеет значение только для

       пакетных заданий. Он  задает  спецификацию  для  файла

       регистраци, который создается для  пакетного  задания.

       Буфер должен содержать спецификацию файла. Поля,  опу-

       щенные в данной спецификации файла, обеспечиваются  из

       принятой    по    умолчанию     спецификации     файла

       SYS$LOGIN:имя.LOG, где "имя" - это имя  задания.  Если

       файл регистрации создается по умолчанию, то для  гене-

       рации его спецификации используется данная принятая по

       умолчанию спецификаци файла;

  SJC$_NO_LOG_SPECIFICATION -

       Это булев код элемента. Он означает, что для созданно-

       го пакетного задания  файл  регистрации  создавать  не

       требуется;

  SJC$_LOG_SPOOL -

       Это булев код элемента. Он означает, что файл  регист-




                          - 1098 -

                        00152-01 97 06


       рации,  созданный  для  пакетного  задания,  требуется

       печатать. Он имеет значение только для пакетных  зада-

       ний. Данный код принят по умолчанию;

  SJC$_NO_LOG_SPOOL -

       Это булев код элемента. Он означает, что файл  регист-

       рации пакетного задания не требуется печатать.

  SJC$_LOWERCASE -

       Это булев код элемента. Он означает, что задание можно

       выполнять только на том устройстве, которое имеет свя-

       занную с устройством характеристику LOWERCASE  (строч-

       ные символы). Он имеет  значение  только  для  выходых

       очередей выполнения;

  SJC$_NO_LOWERCASE -

       Это булев код элемента. Он означает, что задание может

       выполняться независимо от того, имеет или нет выходное

       устройство характеристику LOWERCASE  (строчные  симво-

       лы). Данный код принят по умолчанию;

  SJC$_NEW_VERSION -

       Это булев код элемента. Он  означает,  что  необходимо

       создать новую версию системного файла очереди заданий,

       независимо от того, существует данный файл или нет. По

       умолчанию системный файл очереди заданий  создается  в

       том случае, если он еще не существует;

  SJC$_NEXT_JOB -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он означает, что текущее

       задание требуется прерывать, а печать возобновлять  со




                          - 1099 -

                        00152-01 97 06


       следующего задания;

  SJC$_NOTE -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Он задает строку,  кото-

       рую требуется напечатать на страницах флагов задания и

       флагов файла. Буфер должен содержать данную строку;

  SJC$_NO_NOTE -

       Это булев код элемента. Он означает, что никакую стро-

       ку не требуется печатать на страницах флагов задания и

       флагов файла. Данный код принят по умолчанию;

  SJC$_NOTIFY -

       Это булев код элемента. Он означает, что по завершении

       задания  необходимо  на  все  подключенные   терминалы

       разослать сообщение от имени того пользователя,  кото-

       рому подчинено задание;

  SJC$_NO_NOTIFY -

       Это булев код элемента. Он означает, что по завершении

       задания не требуется рассылать сообщение.  Данный  код

       принят по умолчанию;

  SJC$_OPERATOR_REQEST -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Буфер  должен  содержать

       строку текста. Данный код означает, что когда  задание

       начинает выполняться,  очередь  выполнения  необходимо

       остановить, а заданную строку текста  требуется  вклю-

       чить в сообщение, предназначенное для программы обслу-

       живания запросов к оператору очереди;




                          - 1100 -

                        00152-01 97 06


  SJC$_NO_OPERATOR_REQEST -

       Это булев код элемента. Он означает, что входную  оче-

       редь выполнения не требуется останавливать, и  никакое

       сообщение не  тербуется  посылать  оператору  очереди.

       Данный код принят по умолчанию;

  SJC$_OWNER_UIC -

       Это входной код элемента. Он задает UIC владельца оче-

       реди. Буфер должен содержать UIC  размером  в  длинное

       слово. По умолчанию UIC владельца - [1,4];

  SJC$_PAGE_HEADER -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он означает, что заголо-

       вок страницы необходимо печатать на  каждой  выводимой

       странице;

  SJC$_NO_PAGE_HEADER -

       Это булев код элемента. Он означает, что не  требуется

       печатать заголовок  страницы.  Данный  код  принят  по

       умолчанию;

  SJC$_PAGE_SETUP_MODULES -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Буфер  должен  содержать

       одно или несколько имен текстовых модулей, разделенных

       запятыми. Данный код означает, что перед печатью  каж-

       дой  страницы  необходимо  извлечь  данные  модули  из

       управляющей библиотеки устройства и скопировать их  на

       АЦПУ;






                          - 1101 -

                        00152-01 97 06


  SJC$_NO_PAGE_SETUP_MODULES -

       Это булев код элемента. Он означает,  что  управляющие

       модули устройства не надо копировать. Данный код  при-

       нят по умолчанию;

  SJC$_PAGINATE -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он  означает,  что  сим-

       бионт должен делить выводимую информацию на  страницы,

       вставляя продвижение формы всякий раз, когда выводимая

       информация достигает нижнего поля  формы.  Данный  код

       принят по умолчанию;

  SJC$_NO_PAGINATE -

       Это булев код элемента. Он означает, что  симбионт  не

       должен делить на страницы выводимую информацию;

  код от SJC$_PARAMETER_1 до SJC$_PARAMETER_8 -

       Это входные коды элемента; их восемь, последняя  цифра

       кода элемента может изменяться от 1 до 8. Для  каждого

       заданного кода элемента буфер должен содержать  строку

       длиной не более 255  символов.  Для  пакетных  заданий

       данная строка  становится  значением  параметра  соот-

       ветственно от P1 до P8 внутри самой внешней  командной

       процедуры. Для печатающих заданий система делает  дан-

       ную строку доступной симбионту, хотя стандартные печа-

       тающие симбионты МОС ВП не используют данную  информа-

       цию. По умолчанию каждый из  восьми  парамеров  задает

       пустую строку. Если какой-либо элемент  SJC$_PARAMETER

       задан для кода функции  SJC$_ALTER_JOB,  то  значением




                          - 1102 -

                        00152-01 97 06


       каждого незаданного элемента является пустая строка;

  SJC$_NO_PARAMETRES -

       Это булев код  элемента.  Он  означает,  что  элементы

       SJC$_PARAMETER не передаются пакетному или печатающему

       заданию. Данный код принят по умолчанию;

  SJC$_PASSALL -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он  означает,  что  сим-

       бионт должен печатать файл в режиме PASSALL;

  SJC$_NO_PASSALL -

       Это булев код элемента. Он означает, что  симбионт  не

       должен печатать файл в режиме PASSALL. Данный код при-

       нят по умолчанию;

  SJC$_PRIORITY -

       Это входной код элемента. Буфер должен задавать значе-

       ние размером в длинное слово в диапазоне от 0 до  255.

       Данное  значение  определяет  диспетчерский   проритет

       задания в очереди относительно диспетчерских приорите-

       тов других заданий в той же очереди. По умолчанию дис-

       петчерским приоритетом задания является значение пара-

       метра системной  генерации  DEFQUEPRI.  Если  значение

       DEFQUEPRI равно 0, то принятым  по  умолчанию  диспет-

       черским приоритетом является базовый приоритет  запра-

       шивающего  процесса.  Если  значение,  указанное   для

       SJC$_PRIORITY больше, чем параметр системной генерации

       MAXQUEPRI, то используется значение MAXQUEPRI;






                          - 1103 -

                        00152-01 97 06


  SJC$_PROCESSOR -

       Это входной код элемента. Буфер должен задавать допус-

       тимое имя файла.  Если  код  SJC$_PRCESSOR  задан  для

       выходной очереди выполнения, то он означает, что необ-

       ходимо выполнить образ  симбионта  SYS$SYSTEM:имя.EXE,

       где "имя" - это имя файла, содержащееся в буфере. Если

       код SJC$_PROCESSOR задан для общей  выходной  очереди,

       то он означает, что общая очередь может помещать зада-

       ния только  в  служебные  очереди,  которые  выполняют

       образ симбионта SYS$SYSTEM:имя.EXE, где ""имя"  -  это

       имя файла, содержащееся в буфере;

  SJC$_NO_PROCESSOR -

       Это булев код элемента. Он означает, что должен выпол-

       няться образ симбионта  SYS$SYSTEM:PRTSMB.EXE.  Данный

       код принят по умолчанию;

  SJC$_PRоTECTION -

       Это входной код элемента. Он определяет зашиту  очере-

       ди. Буфер должен содержать длинное  слово  в  формате,

       показанном на рис.81.




















                          - 1104 -

                        00152-01 97 06


                   Маска защиты очереди

       -------------------------------------------------
       !             Значение, защиты                  !
       -------------------------------------------------
       !    Все    ! Группа    ! Владелец  !  Система  !
       -------------------------------------------------
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       ! D! E! W! R! D! E! W! R! D! E! W! R! D! E! W! R!
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       -------------------------------------------------
        15 14 13 12 11 10  9  8  7  6  5  4 3  2   1  0

       -------------------------------------------------
       !         Разрешение изменения значения         !
       -------------------------------------------------
       !   Все     ! Группа    ! Владелец  !  Система  !
       -------------------------------------------------
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       ! D! E! W! R! D! E! W! R! D! E! W! R! D! E! W! R!
       !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
       -------------------------------------------------
        31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16

                       Рис. 81


       Биты с 0 по 15 задают значение защиты  -  четыре  типа

  доступа: чтение (R), запись (W), выполнение  (E),  удаление

  (D), которые должны предоставляться четырем классам пользо-

  вателей (система, владалец, группа, все). Установленные в 1

  биты запрещают доступ, а очищенные биты позволяют доступ.

       Биты с 16 по 31 включают или выключают биты с 0 по 15.

  Если какой-то бит во втором слове установлен в 1, то  соот-

  ветствующий бит в первом слове будет влиять на защиту  оче-

  реди. Если бит во втором слове очищен,  то  соответствующий

  бит в первом слове игнорируется.

       По умолчанию защита очереди - (S:E, O:D, G:R, W:W);

  SJC$_QUEUE -

       Это входной код элемента. Он задает очередь, на  кото-

       рую направлена данная операция. Буфер должен содержать



                          - 1105 -

                        00152-01 97 06


       имя очереди.  Строка  может  содержать  прописные  или

       строчные символы (строчные преобразуются в прописные),

       цифровые символы, знаки денежной единицы и подчеркива-

       ния.  Если  строка  является  логическим  именем,   то

       SYS$SNDJBC итеративно транслирует ее до тех пор,  пока

       не будет найдена эквивалентная строка или  пока  коли-

       чество выполненных трансляций  не  достигнет  предела,

       допустимого в системе. Максимальная длина  окончатель-

       ной символьной строки  -  31  символ;  пробелы,  знаки

       табуляции и пустые символы игнорируются;

  SJC$_QUEUE_FILE_SPECIFICATION -

       Это входной код элемента. Он  определяет  спецификацию

       файла для системного файла очереди заданий. Буфер дол-

       жен содержать  допустимую  спецификацию  файла.  Поля,

       опущенные в данной спецификации файла, берутся из при-

       нятой     по     умолчанию     спецификации      файла

       SYS$SYSTEM:JBCSYSQUE.DAT;

  SJC$_RECORD_BLOCKING -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей выполнения. Он  означает,  что  сим-

       бионт может сцеплять выходные записи, которые он посы-

       лает на выходное устройство. Для стандартных  симбион-

       тов операционная система МОС ВП  блокирование  записей

       может дать значительные преимущества в  производитель-

       ности по сравнению с режимом единичных записей. Данный

       код принят по умолчанию;






                          - 1106 -

                        00152-01 97 06


  SJC$_NO_RECORD_BLOCKING -

       Это булев код элемента. Он означает, что симбионт дол-

       жен посылать каждую запись на  выходное  устройство  в

       отдельном запросе ввода-вывода;

  SJC$_RELATIVE_PAGE -

       Это входной код элемента. Он имеет значение только для

       выходных очередей выполнения. Буфер  должен  содержать

       целое значение со знаком  размером  в  длинное  слово.

       Данный код элемента означает,  что  печать  необходимо

       возобновить после пропуска вперед (если в буфере поло-

       жительное значение) или назад (если в  буфере  отрица-

       тельное значение) заданного количества страниц;

  SJC$_REQUEUE -

       Это булев код элемента. Он означает, что задание необ-

       ходимо снова поставить в очередь. По умолчанию задание

       удаляется;

  SJC$_RESTART -

       Это булев код элемента. Он означает, что задание можно

       снова запускать после системного сбоя или  снова  ста-

       вить в очередь после выполнения. Данный код принят  по

       умолчанию для печатающих заданий;

  SJC$_NO_RESTART -

       Это булев код элемента. Он означает, что задание нель-

       зя выполнять после системного сбоя или после повторной

       постановки в очередь. Данный код принят  по  умолчанию

       для пакетных заданий;






                          - 1107 -

                        00152-01 97 06


  SJC$_RETAIN_ALL_JOBS -

       Это булев код элемента. Он означает, что задания после

       их выполнения необходимо сохранять в очереди вместе  с

       кодом завершения;

  SJC$_RETAIN_ERROR_JOBS -

       Это булев код элемента. Он  означает,  что  необходимо

       сохранять только те задания, которые выполнялись неус-

       пешно (в коде завершения задания младший бит очищен);

  SJC$_NO_RETAIN_JOBS -

       Это булев код элемента. Он означает, что задания после

       их завершения не требуется оставлять в очереди. Данный

       код принят по умолчанию;

  SJC$_SEARCH_STRING -

       Это входной код элемента. Он имеет значение только для

       выходных  очередей  выполнения.  Данный  код  элемента

       означает, что печать нобходимо возобновить со  страни-

       цы, на которой  впервые  появляется  заданная  строка.

       Поиск данной строки осуществляется в направлении  впе-

       ред;

  SJC$_SWAP -

       Это булев код элемента. Он имет  значение  только  для

       пакетных очередей выполнения. Он означает,  что  зада-

       ние, инициированное из очереди, можно выгружать.  Дан-

       ный код принят по умолчанию;

  SJC$_NO_SWAP -

       Это булев код элемента. Он означает, что задание нель-

       зя выгружать;




                          - 1108 -

                        00152-01 97 06


  SJC$_TERMINAL -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей. Он определяет тип очереди, как оче-

       редь, направляемую на терминал вместо ацпу;

  SJC$_NO_TERMINAL -

       Это булев код элемента.  Он  определяет  очередь,  как

       очередь, направляемую на ацпу вместо терминала;

  SJC$_TOP_OF_LINE -

       Это булев код элемента. Он имеет значение  только  для

       выходных очередей. Он означает, что печать  необходимо

       возобновить с начала файла;

  SJC$_UIC -

       Это входной код элемента.  Он  задает  4-байтовый  код

       идентификации (UIC) того  пользователя,  для  которого

       делается данный запрос. По умолчанию имя  пользователя

       берут из запрашивающего процесса. Данный код  элемента

       требует привилегии CMKRNL;

  SJC$_WSDEFAULT -

       Это входной код элемента. Он имеет значение только для

       пакетных заданий и для очередей выполнения. Он опреде-

       ляет принимаемый по умолчанию размер  рабочего  набора

       для пакетных заданий или  заданий,  инициированных  из

       пакетной очереди, либо принимаемый по умолчанию размер

       рабочего набора симбионтного  процесса,  связанного  с

       выходной очередью. Симбионтный процесс может управлять

       несколькими выходными очередями;  однако,  принимаемый

       по умолчанию размер рабочего набора  для  симбионтного




                          - 1109 -

                        00152-01 97 06


       процесса устанавливается первой очередью, к которой он

       подсоединяется. Буфер должен содержать целое  значение

       от 1 до 65535;

  SJC$_NO_WSDEFAULT -

       Это булев код элемента.  Он  означает,  что  значения,

       принимаемые по умолчанию для рабочего набора,  опреде-

       ляет система. Данный  код  принят  по  умолчанию.  Для

       пакетных заданий принимаемый по умолчанию размер рабо-

       чего набора и экстент  рабочего  набора  (максимальный

       размер) включаются в каждую пользовательскую запись  в

       системном файле авторизации пользоватля (UAF).  Значе-

       ния для данных элементов можно задавать для  отдельных

       заданий и/или  для  всех  заданий  данной  очереди.  В

       табл.70 показано, какие действия предпринимаются, если

       для SJC$_WSDEFAULT задано какое-либо значение;

                                                   Таблица 70

  -----------------------------------------------------------

  Задано      !Задано      !

  значение    !значение    !        Предпринимаемые

  для задания?!для очереди?!           действия

  -----------------------------------------------------------

      нет     !    нет     !используется значение UAF

      нет     !    да      !используется значение для очереди

      да      !    да      !используется меньшее из двух зна-

              !            !чений

      да      !    нет     !сравнивается заданное значение со

              !            !значением UAF; используется мень-




                          - 1110 -

                        00152-01 97 06


                                         Продолжение табл. 70

  -----------------------------------------------------------

  Задано      !Задано      !

  значение    !значение    !        Предпринимаемые

  для задания?!для очереди?!           действия

  -----------------------------------------------------------

              !            !шее


  SJC$_WSEXTENT -

       Это входной код элемента. Он имеет значение только для

       пакетных заданий и очередей выполнения. Он задает экс-

       тент рабочего набора для пакетных заданий или заданий,

       инициированных из пакетной очереди, либо экстент рабо-

       чего набора для симбионтного  процесса,  связанного  с

       выходной очередью. Симбионтный процесс может управлять

       несколькими выходными очередями; однако, экстент рабо-

       чего набора для симбионтного процесса  устанавливается

       первой очередью, к которой  он  подсоединяется.  Буфер

       должен содержать целое  значение  размером  в  длинное

       слово в диапазоне от 1 до 65535;

  SJC$_NO_WSEXTENT -

       Это булев код элемента. Он означает, что экстент рабо-

       чего набора определяет система. Данный код  принят  по

       умолчанию. Действия, которые предпринимаются, если для

       пакетного   задания   указано    некоторое    значение

       SJC$_WSEXTENT, описаны при  обсуждении  кода  элемента

       SJC$_WSDEFAULT и в табл.70;





                          - 1111 -

                        00152-01 97 06


  SJC$_WSQUOTA -

       Это входной код элемента. Он имеет значение только для

       пакетных заданий и очередей выполнения. Он задает кво-

       ту рабочего набора для пакетных заданий  или  заданий,

       инициированных из пакетной очереди, либо квоту рабоче-

       го набора  для  симбионтного  процесса,  связанного  с

       выходной очередью. Симбионтный процесс может управлять

       несколькими выходными очередями; однако, квота рабоче-

       го набора для  симбионтного  процесса  устанавливается

       первой очередью, к которой  он  подсоединяется.  Буфер

       должен содержать целое  значение  размером  в  длинное

       слово в диапазоне от 1 до 65535;

  SJC$_NO_WSQUOTA -

       Это булев код элемента. Он означает, что квоту рабоче-

       го набора определяет система.  Данный  код  принят  по

       умолчанию.

       Действия, которые предпринимаются, если для  пакетного

  задания указано некоторое  значение  SJC$_WSQUOTA,  описаны

  при обсуждении кода элемента SJC$_WSDEFAULT и в табл.70;

       IOSB

       Использование в МОС ВП: IO_STATUS_BLOCK

       Тип:                    квадрослово (без знака)

       Доступ:                 только запись

       Механизм:               по ссылке

       Блок состояния ввода-вывода, в который $SNDJBC записы-

  вает код завершения после окончания  запрошенной  операции.

  Аргумент IOSB - это адрес блока состояния ввода-вывода.




                          - 1112 -

                        00152-01 97 06


       При инициации запроса $SNDJBC записывает 0 в блок сос-

  тояния ввода-вывода размером в квадрослово.  По  завершении

  запрошенной операции $SNDJBC  записывает  код  состояния  в

  первое длинное слово блока состояния ввода-вывода. Во  вто-

  рое длинное слово $SNDJBC записывает 0; данное длинное сло-

  во не используется.

       Коды состояния, которые $SNDJBC возвращает в блок сос-

  тояния ввода-вывода, - это обычно коды состояния из диспет-

  чера заданий. Данные коды состояния определяют  при  помощи

  макрокоманды $JBCMSGDEF. В некоторых случаях $SNDJBC  может

  возвращать коды состояния, полученные в результате ошибки в

  программе системного обслуживания или в  программе  СУД-32,

  которые используются при выполнении  данного  запроса.  Для

  запроса SJC$_SYNCHRONIZE_JOB  возвращается  код  завершения

  запрошенного задания.

       Хотя данный аргумент не является  обязательным,  реко-

  мендуется указывать его по следующим причинам:

       1) если для сигнализации о завершении  программы  сис-

  темного обслуживания используется флаг события, то код сос-

  тояния в блоке состояния ввода-вывода можно проверить, что-

  бы убедиться в том, что данный флаг не был установлен собы-

  тием, отличным от завершения программы системного  обслужи-

  вания;

       2) если для синхронизации завершения программы систем-

  ного обслуживания используется программа системного  обслу-

  живания $SYNCH, то  блок  состояния  ввода-вывода  является

  обязательным аргументом для $SYNCH;




                          - 1113 -

                        00152-01 97 06


       3) код состояния, возвращаемый в R0, и  код  состояния

  возвращаемый в блок  состояния  ввода-вывода,  обеспечивают

  информацию о разных аспектах  вызова  программы  системного

  обслуживания $SNDJBC. Код  состояния,  возвращаемый  в  R0,

  дает информацию о том, насколько успешно  осуществился  сам

  вызов программы  системного  обслуживания;  код  состояния,

  возвращаемый в блок состояния ввода-вывода, дает информацию

  о том, насколько успешно  отработала  программа  системного

  обслуживания. Следовательно, для того, чтобы точно оценить,

  насколько успешным был вызов $SNDJBC, необходимо  проверить

  коды состояния, возвращаемые как в R0, так и в блок состоя-

  ния ввода-вывода.

       ASTADR

       Использование в МОС ВП:  AST_PROCEDURE

       Тип:                     маска входа программы

       Доступ:                  вызов без развертывания стека

       Механизм:                по ссылке

       Подпрограмма обработки AST, которую необходимо  выпол-

  нить по завершении $SNDJBC. Аргумент  ASTADR  -  это  адрес

  маски входа данной подпрограммы.

       Подпрограмма AST, если она задана, выполняется  в  том

  же режиме доступа, что и процесс, вызывающий $SNDJBC.

       ASTPRM

       Использование в МОС ВП:  USER_ARG

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению




                          - 1114 -

                        00152-01 97 06


       Параметр AST, который необходимо передать подпрограмме

  обработки AST, заданной аргументом ASTADR. Аргумент  ASTPRM

  - это параметр размером в длинное слово.

       Описание:

       Типы очередей
       -------------

       Операционная система  МОС  ВП  поддерживает  несколько

  типов очередей, которые помогают  в  обработке  пакетных  и

  печатающих заданий. Различные типы очередей можно разделить

  на три основные категории в соответствии со способом, кото-

  рым система обрабатывает задания, назначенные в данную оче-

  редь. Существует три типа очередей  -  очередь  выполнения,

  общая и логическая очередь.  Очередь  выполнения  планирует

  задания для выполнения; общие и логические очереди передают

  задания в очереди выполнения. Внутри данных трех  категорий

  тип очереди далее определяется видами заданий, которые дан-

  ная очередь может принимать для обработки.  Некоторые  типы

  общей очереди и очереди выполнения допускают пакетные зада-

  ния; другие типы допускают печатающие  задания.  Логические

  очереди ограничиваются печатающими заданиями.

       Очередь создается при помощи вызова $SNDJBC  с  указа-

  нием кода функции SJC$_CREATE_QUEUE. Коды элемента, которые

  заданы в данном вызове, определяют тип создаваемой очереди.

       Очередь выполнения планирует  задания  для  обработки.

  Существует два типа очереди  выполнения:  пакетная  очередь

  выполнения и выходная очередь выполнения.

       Пакетная очередь выполнения может  планировать  работу

  только пакетных  заданий.  Пакетное  задание  работает  как



                          - 1115 -

                        00152-01 97 06


  отсоединенный процесс,  который  последовательно  выполняет

  одну или несколько  командных  процедур;  список  командных

  процедур определяют как часть начального описания  задания.

  Пакетную очередь выполнения создают, задавая  код  элемента

  SJC$_BATCH  в  вызове  программы  системного   обслуживания

  $SNDJBC.

       Выходная очередь выполнения планирует печатающие зада-

  ния для обработки  их  независимым  симбионтным  процессом,

  который связан с данной очередью. Диспетчер  заданий  посы-

  лает данному симбионту список  файлов,  которые  необходимо

  обработать;  данный  список  файлов  определяют  как  часть

  начального описания задания. По  мере  того,  как  симбионт

  обрабатывает каждый файл, он формирует выходную  информацию

  для устройства, которым он управляет, такое  как  ацпу  или

  терминал.

       Стандартный образ печатающего симбионта,  обеспечивае-

  мый операционной системой МОС ВП, предназначен  для  печати

  файлов. Кроме того, могут быть симбионты,  модифицированные

  или написанные пользователем, которые предназначены для той

  или иной деятельности по обработке файлов  под  управлением

  средств пакетной обработки. Образ симбионта, который  обра-

  батывает задания из выходной  очереди,  задают  при  помощи

  кода элемента SJC$_PROCESSOR. Если данный код элемента опу-

  щен, то с очередью связывается стандартный образ печатающе-

  го симбионта МОС ВП, PRTSMB.








                          - 1116 -

                        00152-01 97 06


       Существует три типа выходной очереди выполнения:

       1) очередь выполнения ацпу. Данный тип очереди  обычно

  использует стандартный печатающий симбионт для того,  чтобы

  направить выходную информацию  на  ацпу.  В  коде  элемента

  SJC$_PROCESSOR можно задавать симбионт, обеспеченный  поль-

  зователем. Очередь выполнения ацпу  -  это  принимаемый  по

  умолчанию тип выходной очереди выполнения;

       2) очередь выполнения терминала.  Данный  тип  очереди

  обычно использует стандартный печатающий симбионт для того,

  чтобы направить выходную информацию  на  терминал.  В  коде

  элемента SJC$_PROCESSOR можно задавать симбионт, обеспечен-

  ный пользователем. Очередь выполнения терминала задают  при

  помощи кода элемента SJC$_TERMINAL во время создания выход-

  ной очереди выполнения;

       3) служебная очередь выполнения.  Данный  тип  очереди

  используется для обработки файлов, принадлежащих заданиям в

  очереди, модифицированным или написанным пользователем сим-

  бионтом, который указан  в  коде  элемента  SJC$_PROCESSOR.

  Выходную очередь выполнения нельзя пометить при  ее  созда-

  нии, как служебную очередь выполнения. Только  обеспеченный

  пользователем симбионт может указать, что очередь,  которая

  с ним связана, должна быть помечена как  служебная  очередь

  выполнения.

       Следовательно, при создании выходной очереди  выполне-

  ния ее можно изначально  пометить  как  очередь  выполнения

  либо ацпу, либо терминала. Однако, когда очередь уже  запу-

  щена, симбионтный процесс,  связанный  с  данной  очередью,




                          - 1117 -

                        00152-01 97 06


  может изменить тот тип очереди, который был назначен при ее

  создании, на очередь выполнения ацпу, терминала или служеб-

  ную очередь выполнения:

       1) если запускается выходная очередь выполнения, кото-

  рая связана со стандартным печатающим  симбионтом  МОС  ВП,

  симбионт определяет, управляет он ацпу или  терминалом.  Он

  сообщает данную информацию диспетчеру заданий.  Затем  дис-

  петчер заданий изменяет, если необходимо, тип,  назначенный

  выходной очереди выполнения;

       Если запускается выходная очередь выполнения,  которая

  связана с  модифицированным  или  написанным  пользователем

  симбионтом, симбионт может идентифицировать данную очередь,

  как служебную, для диспетчера заданий. Если написанный  или

  модифицированный пользователем симбионт не извещает диспет-

  чера заданий о том, что он хочет изменить обозначение  типа

  очереди, то выходной очереди выполнения будет оставлено  то

  обозначение типа очереди, которое она получила  при  созда-

  нии. То есть, она остается помеченной, как очередь выполне-

  ния ацпу или терминала, несмотря на то, что она  связана  с

  нестандартным симбионтом.

       Общая очередь сохраняет задания до тех  пор,  пока  не

  появится соответствующая очередь выполнения, способная ини-

  циировать данное задание, тогда диспетчер заданий перестав-

  ляет данное задание в имеющуюся очередь выполнения.

       Общую  очередь  создают  при  помощи   кода   элемента

  SJC$_GENERIC_QUEUE, заданного в вызове программы системного

  обслуживания $SNDJBC. Пользователь  определяет  при  помощи




                          - 1118 -

                        00152-01 97 06


  кода элемента SJC$_GENERIC_TARGET каждую  очередь  выполне-

  ния, в которую данная общая очередь может направлять  зада-

  ния. Поскольку общая очередь  может  направлять  задания  в

  несколько очередей выполнения, то пользователь может указы-

  вать  код  элемента  SJC$_GENERIC_TARGET  в  одном   вызове

  $SNDJBC до 124 раз, чтобы определить полный набор  очередей

  выполнения для какой-либо общей очереди. Если код  элемента

  SJC$_GENERIC_TARGET не указан, то общая очередь  направляет

  задания в любую очередь выполнения, которая  имеет  тот  же

  тип очереди, что и общая очередь: то есть,  общая  пакетная

  очередь будет направлять задание в любую доступную пакетную

  очередь выполнения, и т.д. Имеется одно  исключение:  общая

  очередь не будет направлять задание в ту  очередь  выполне-

  ния,  которая  была  создана  с  указанием  кода   элемента

  SJC$_NO_GENERIC_SELECTION в вызове $SNDJBC.

       Существует два типа общей очереди: общая пакетная оче-

  редь и общая выходная очередь.

       Общая пакетная очередь может направлять задания только

  в пакетные очереди выполнения. Общую пакетную очередь  соз-

  дают, задавая в вызове  программы  системного  обслуживания

  $SNDJBC  как  код  элемента   SJC$_GENERIC_QUEUE,   так   и

  SJC$_BATCH.

       Общая выходная  очередь  может  направлять  задания  к

  любому из трех типов выходной очереди  выполнения:  очереди

  ацпу, терминала или служебной очереди. Можно создать  общую

  выходную очередь, которая направляет задания к любой комби-

  нации данных трех типов выходной очереди выполнения.  Одна-




                          - 1119 -

                        00152-01 97 06


  ко, обычно при создании выходной очереди задают список оче-

  редей об'ектов конкретного типа. Таким образом, такая общая

  выходная очередь направляет задания к одному типу  выходной

  очереди выполнения.  Следовательно,  можно  управлять  тем,

  будут ли задания, подчиненые общей выходной очереди  выпол-

  нения выводить информацию на ацпу или будут посылать инфор-

  мацию для обработки служебному  симбионту.  Общую  выходную

  очередь создают, задавая код элемента SJC$_GENERIC_QUEUE.

       Логическая очередь выполняет  ту  же  функцию,  что  и

  общая выходная очередь, за исключением того, что логическая

  очередь может направлять  задания  только  в  одну  очередь

  выполнения ацпу, терминала или в служебную  очередь.  Логи-

  ческая очередь - это выходная  очередь,  которой  назначено

  передавать ее задания в одну из очередей выполнения.

       Для того, чтобы сделать  какую-либо  выходную  очередь

  логической, необходимо вызвать программу системного  обслу-

  живания $SNDJBC, при этом данная  выходная  очередь  должна

  быть остановлена. Данный вызов должен указывать код функции

  SJC$_ASSIGN_QUEUE и  код  элемента  SJC$_DESTINATION_QUEUE.

  Код элемента SJC$_DESTINATION_QUEUE  используют  для  того,

  чтобы указать очередь выполнения, в которую логическая оче-

  редь должна направлять задания.  Когда  логическая  очередь

  запускается, она автоматически переставляет свои задания  в

  указанную очередь выполнения,  как  только  данная  очередь

  выполнения становиться доступной. Логическую очередь  можно

  вернуть к ее исходному определению выходной очереди,  зада-

  вая код функции SJC$_DEASSIGN_QUEUE  в  последующем  вызове




                          - 1120 -

                        00152-01 97 06


  программы системного обслуживания $SNDJBC.

       Защита очереди и задания
       ------------------------

       Существуют три аспекта защиты очереди:

       1) очередь имеет  соответствующий  UIC.  При  создании

  очереди  ей  назначается  UIC  при  помощи  кода   элемента

  SCJ$_OWNER_UIC. Если данный код элемента не задан, то  оче-

  редь получает принятый по умолчанию UIC;

       2) очереди можно присвоить маску защиты,  задавая  код

  элемента SCJ$_PROTECTION. Данная  маска  защиты  определяет

  доступ на чтение, запись, выполнение и удаление для четырех

  категорий пользователя: владелец, группа, система и все;

       3) некоторые операции, связанные с очередями,  требуют

  наличия определенных  привилегий  у  процесса,  вызывающего

  $SNDJBC.

       Защита задания осуществляется  единственным  способом.

  Если задание подчинено очереди, то ему присваивается  такой

  же UIC, как UIC процесса, которому подчинено  данное  зада-

  ние, за исключением того случая, когда указан код  элемента

  SJC$_UIC, задающий другой UIC.

       Для каждой запрошенной операции  программа  системного

  обслуживания $SNDJBC сравнивает UIC и  привилегии  запраши-

  вающего процесса с UIC очереди, с  защитой,  указанной  для

  очереди, и с привилегией (привилегиями),  если  для  данной

  операции требуются какие-либо привилегии.  Данная  проверка

  осуществляется таким же способом, каким проверяется возмож-

  ность доступа к файлу, сравнивая  UIC  владельца  и  защиту

  файла с UIC и привилегиями запрашивающего процесса.



                          - 1121 -

                        00152-01 97 06


       Для операций, которые осуществляются  применительно  к

  заданиям, проверяется защита "R" (чтение) и "D" (удаление),

  указанная для той очереди, в которую введено  данное  зада-

  ние, и UIC владельца задания. Вообще доступ "R"  к  заданию

  дает пользователю возможность определить, что данное  зада-

  ние существует; доступ "D" к заданию дает пользоватлю  воз-

  можность воздействовать на данное задание.

       Для операций, которые осуществляются  применительно  к

  очередям, проверяется защита "W" (запись) и  "E"  (выполне-

  ние), указанная для данной очереди, и UIC владельца  очере-

  ди. В общем случае доступ "W" к очереди  дает  пользователю

  возможность подчинять задания данной очереди; доступ "E"  к

  очереди дает пользователю возможность поступать как  опера-

  тор очереди, включая способность воздействовать на  задания

  в данной очереди, на ведение учетной  информации,  а  также

  изменять очереди. Привилегия OPER предоставляет доступ  "E"

  ко всем очередям.

       Привилегии и ограничения
       ------------------------

       Для того, чтобы задать следующие коды  функции,  вызы-

  вающий процесс должен иметь одновременно привилегии OPER  и

  SYSNAM:

       1) SJC$_START_QUEUE_MANAGER;

       2) SJC$_STOP_QUEUE_MANAGER.

       Для того, чтобы задать следующие коды  функции,  вызы-

  вающий процесс должен иметь привилегию OPER:

       1) SJC$_CREATE_QUEUE;

       2) SJC$_DEFINE_CHARACTERISTIC;



                          - 1122 -

                        00152-01 97 06


       3) SJC$_DEFINE_FORM;

       4) SJC$_DELETE_CHARACTERISTIC;

       5) SJC$_DELETE_FORM;

       6) SJC$_DELETE_QUEUE;

       7) SJC$_START_ACCOUNTING;

       8) SJC$_STOP_ACCOUNTING.

       Для того, чтобы задать следующий код функции, вызываю-

  щий процесс должен иметь привилегию OPER, доступ "E" к оче-

  реди, которая содержит указанное задание или доступ  "R"  к

  указанному заданию:

       SJC$_SYNCHRONIZE_JOB.

       Для того, чтобы задать следующие коды  функций,  вызы-

  вающий процесс должен иметь привилегию OPER, доступ  "E"  к

  указанной очереди или доступ "W" к указанной очереди:

       1) SJC$_CREATE_JOB;

       2) SJC$_ENTER_FILE.

       Для того, чтобы задать следующие коды  функций,  вызы-

  вающий процесс должен иметь привилегию OPER, доступ  "E"  к

  указанной очереди (очередям):

       1) SJC$_ALTER_QUEUE;

       2) SJC$_ASSIGN_QUEUE;

       3) SJC$_DEASSIGN_QUEUE;

       4) SJC$_MERGE_QUEUE;

       5) SJC$_PAUSE_QUEUE;

       6) SJC$_RESET_QUEUE;

       7) SJC$_START_QUEUE;

       8) SJC$_STOP_QUEUE.




                          - 1123 -

                        00152-01 97 06


       Для того, чтобы задать следующие коды  функции,  вызы-

  вающий процесс должен иметь привилегию OPER, доступ  "E"  к

  очереди, которая содержит указанное задание или доступ  "D"

  (удаление) к указанному заданию:

       1) SJC$_ABORT_JOB;

       2) SJC$_ALTER_JOB;

       3) SJC$_DELETE_JOB.

       Для того, чтобы задать следующие коды функции, никакие

  привилегии не требуются:

       1) SJC$_ADD_FILE;

       2) SJC$_BATCH_CHECKPOINT;

       3) SJC$_CLOSE_DELETE;

       4) SJC$_CLOSE_JOB;

       5) SJC$_WRITE_ACCOUNTING.

       Для того, чтобы задать базовый приоритет  (при  помощи

  кода элемента SJC$_BASE_PRIORITY) более высокий, чем  базо-

  вый приоритет запрашивающего процесса, требуется привилегия

  OPER или ALTPRI.

       Для того, чтобы задать базовый приоритет  (при  помощи

  кода элемента SJC$_BASE_PRIORITY) более высокий, чем значе-

  ние параметра системной генерации DEFQUEPRI, требуется при-

  вилегия OPER или ALTPRI. Наибольшее значение, которое можно

  задавать,  определяется  параметром   системной   генерации

  MAXQUEPRI.

       Для того, чтобы задать следующие коды элемента,  вызы-

  вающий процесс должен иметь привилегию OPER:






                          - 1124 -

                        00152-01 97 06


       1) SJC$_PROTECTION;

       2) SJC$_OWNER_UIC.

       Для того, чтобы задать следующие коды элемента,  вызы-

  вающий процесс должен иметь привилегию CMKRNL:

       1) SJC$_ACCOUNT_NAME;

       2) SJC$_UIC;

       3) SJC$_USERNAME.

  Возвращаемые значения кода состояния:

       SS$_NORMAL     - успешное завершение;

       SS$_ACCVIO     - вызывающий процесс не может прочитать

                      список  элементов  или  входной  буфер,

                      либо не может записать буфер возвращае-

                      мой длины, выходной буфер или блок сос-

                      тояния;

       SS$_BADPARAM    - недопустимый  код  функции;   список

                       элементов  содержит  недопустимый  код

                       элемента;  дескриптор   буфера   имеет

                       недопустимую длину или зарезервирован-

                       ный параметр имеет ненулевое значение;

       SS$_DEVOFFLINE  - процесс диспетчера заданий не  рабо-

                       тает;

       SS$_EXASTLM     - задан  аргумент  ASTADR,  и  процесс

                       превысил свою квоту ASTLM;

       SS$_ILLEFC      - аргумент  EFN  задает   недопустимый

                       номер флага события;

       SS$_INSFMEM     - в стеке режима управления не хватает

                       места для выполнения данного запроса;




                          - 1125 -

                        00152-01 97 06


       SS$_MBFULL      - почтовый  ящик  диспетчера   заданий

                       переполнен;

       SS$_MBTOOSML    - сообщение,  посылаемое  в   почтовый

                       ящик,  слишком  велико  для  почтового

                       ящика диспетчера заданий;

       SS$_UNASEFC     - аргумент EFN задает  кластер  флагов

                       событий, с которым процесс  не  соеди-

                       нен.

       Коды  состояния,   возвращаемые   в   блок   состояния

  ввода-вывода:

       JBC$_NORMAL     - успешное завершение;

       JBC$_DELACCESS  - защита указанного файла, который был

                       введен с операцией "удаление",  запре-

                       щает доступ на  удаление  для  данного

                       вызывающего процесса;

       JBC$_DUPFORM    - заданный  номер  формы   недопустим,

                       потому что он  уже  определен;  каждая

                       форма должна иметь уникальный номер;

       JBC$_EMPTYJOB   - открытое  задание  нельзя   закрыть,

                       потому что оно не содежит файлов;

       JBC$_EXECUTING  - параметры указанного задания  нельзя

                       модифицировать, потому что задание уже

                       выполняется;

       JBC$_INCDSTQUE  - тип очереди с указанным обозначением

                       несовместим с запрошенной операцией;

       JBC$_INCFORMPAR - указанные параметры длины и  ширины,

                       формы и  размеры  полей  несовместимы;




                          - 1126 -

                        00152-01 97 06


                       значение разности размеров верхнего  и

                       нижнего поля должно быть  меньше,  чем

                       длина формы, разность  размеров  пара-

                       метров левого и  правого  поля  должна

                       быть меньше, чем ширина строки;

       JBC$_INCOMPLETE - запрошенную операцию управления оче-

                       редью нельзя выполнить, поскольку  еще

                       не завершилась ранее запрошенная  опе-

                       рация управления очередью;

       JBC$_INCQUETYP  - тип указанной операции несовместим с

                       запрошенной операцией;

       JBC$_INVCHANAM  - заданное имя характеристики  синтак-

                       сически неверно;

       JBC$_INVDSTQUE  - имя очереди назначения синтаксически

                       неверно;

       JBC$_INVFORNAM  - имя формы синтаксически неверно;

       JBC$_INVFUNCOD  - указанный код функции недопустим;

       JBC$_INVITMCOD  - список элементов содержит недопусти-

                       мый код элемента;

       JBC$_INVPARLEN  - длина  указанной  строки   превышает

                       допустимый диапазон для  данного  кода

                       элемента;

       JBC$_INVPARVAL  - значение  параметра,  заданного  для

                       кода элемента,  выходит  за  диапазон,

                       допустимый для данного кода элемента;

       JBC$_INVQUENAM  - имя очереди синтаксически неверно;

       JBC$_JOBQUEDIS  - запрос нельзя выполнить, потому  что




                          - 1127 -

                        00152-01 97 06


                       не запущен системный планировщик  оче-

                       реди заданий;

       JBC$_MISREQPAR  - не  задан  код   элемента,   который

                       является обязательным  для  указанного

                       кода функции;

       JBC$_NODSTQUE   - указанная  очередь   назначения   не

                       существует;

       JBC$_NOOPENJOB  - запрашивающий  процесс  не  открывал

                       задание с функцией SJC$_CREATE_JOB;

       JBC$_NOPRIV     - защита очереди  запрещает  доступ  к

                       очереди для заданной операции;

       JBC$_NOQUESPACE - системный файл очереди заданий пере-

                       полнен, и его нельзя расширить;

       JBC$_NORESART   - указанное задание нельзя снова  пос-

                       тавить в очередь, потому  что  оно  не

                       было определено, как  повторно  запус-

                       каемое;

       JBC$_NOSUCHCHAR - указанная характеристика не  сущест-

                       вует;

       JBC$_NOSUCHFORM - указанная форма не существует;

       JBC$_NOSUCHJOB  - указанное задание не существует;

       JBC$_NOSUCHQUE  - указанная очередь не существует;

       JBC$_NOTASSIGN  - нельзя отменить назначение указанной

                       очереди, потому что она не назначена;

       JBC$_QUENOTSTOP - указанную очередь  нельзя  отменить,

                       потому то она не остановлена;

       JBC$_REFERENCED - указанную  очердь  нельзя  отменить,




                          - 1128 -

                        00152-01 97 06


                       потому  что  существуют  обращения  из

                       других очередей или заданий;

       JBC$_STARTED    указанную  очередь  нельзя  запустить,

                       потому что она уже работает.



       13.107. $SNDJBCW - сообщить диспетчеру  заданий

               и ждать завершения


       Программы системного обслуживания $SNDJBCW и $GETQUI в

  совокупности обеспечивают пользователю интерфейс со средтс-

  вом "диспетчер задания" (JBC). Программа системного  обслу-

  живания $SNDJBC позволяет создавать и останавливать  очере-

  ди, а также управлять очередями и заданиями в данных очере-

  дях.

       Программа системного обслуживания $SNDJBCW ставит зап-

  рос в очередь к диспетчеру заданий. Для большинства  опера-

  ций $SNDJBCW завершается  синхронно,  то  есть,  возвращает

  управление вызывающему процессу после завершения  операции.

  Однако, если запрашивающая операция заключается в том, что-

  бы приостановить очередь, остановить очередь  или  прервать

  работу задания, то $SNDJBCW возвращает управление  вызываю-

  щему  процессу  после  постановки  запроса  в  очередь.  Не

  существует средств для синхронизации завершения данных опе-

  раций. Кроме того, $SNDJBCW  не  ждет  завершения  задания,

  прежде чем вернуть  управление  вызывающему  процессу;  для

  того, чтобы синхронизировать завершение задания, вызывающий

  процесс должен указать код функции SJC$SYNCHRONIZE_JOB.





                          - 1129 -

                        00152-01 97 06


       Программа системного обслуживания  $SNDJBCW  идентична

  программе "сообщить диспетчеру заданий" ($SNDJBC) за исклю-

  чением того, что $SNDJBCW завершается синхронно;  программа

  системного обслуживания $SNDJBC возвращает управление вызы-

  вающему процессу после завершения постановки запроса в оче-

  редь, не ожидая завершения операции.

       Дополнительная информация о программе системного  обс-

  луживания $SNDJBCW содержится в описании программы  систем-

  ного обслуживания $SNDJBC.

       Формат:

       SYS$SNDJBCW     [EFN],FUNC,NULLARG[,ITMLST][,IOSB]

                       [,ASTADR][,ASTPRM]



       13.108. $SNDOPR - послать сообщение оператору


       Программа системного  обслуживания  $SNDOPR  выполняет

  следующие функции:

       1) посылает пользовательский  запрос  на  операторские

  терминалы;

       2) посылает запрос на отмену запроса  пользователя  на

  операторские терминалы;

       3) посылает ответ оператора на пользовательский терми-

  нал;

       4)  разрешает  использовать  какой-либо   терминал   в

  качестве операторского;

       5) показывает состояние операторского терминала;

       6) инициализирует операторский файл регистрации.





                          - 1130 -

                        00152-01 97 06


       Формат:

       SYS$SNDOPR     MSGBUF,[CHAN]

       Аргументы:

       MSGBUF

       Использование в МОС ВП: CHAR_STRING

       Тип:                    строка текста

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки с фиксированной длиной

       Пользовательский  буфер,  задающий  операцию,  которую

  необходимо выполнить, и информацию, необходимую для  выпол-

  нения данной операции. Аргумент MSGBUF - это адрес дескрип-

  тора символьной строки, указывающего на буфер.

       Формат и содержимое буфера меняются в  зависимости  от

  запрошенной операции; однако, первый байт в любом буфере  -

  это код запроса, который задает операцию, подлежащую выпол-

  нению.

       Макрокоманда $OPCMSG  определяет  символические  имена

  для данных кодов запроса:

       OPC$_RQ_RQST -  посылает  пользовательский  запрос  на

  операторские терминалы. Данный код запроса используется для

  того, чтобы сделать запрос оператору. Если указано, что  на

  запрос необходимо  получить  ответ  (при  помощи  аргумента

  CHAN), то запрос оператору останется активным до  тех  пор,

  пока оператор не ответит;

       OPC$_RQ_CANCEL - посылает  запрос  на  отмену  запроса

  пользователя на операторские терминалы. Данный код  запроса




                          - 1131 -

                        00152-01 97 06


  используется для того, чтобы сообщить одному или нескольким

  операторам, что предыдущий запрос необходимо отменить. Если

  задан код OPC$RQ_CANCEL, то аргумент CHAN также должен быть

  указан;

       OPC$_RQ_REPLY - посылает ответ оператора пользователю,

  который сделал запрос. Данный код запроса используется опе-

  раторами для отчета о состоянии пользовательского  запроса.

  Форматом буфера сообщения для данного запроса остается фор-

  мат ответа, найденного в пользовательском почтовом ящике по

  завершении вызова $SNDOPR.  Все  функции  $SNDOPR,  которые

  доставляют ответ в почтовый ящик,  делают  это  в  формате,

  описанном для данного кода запроса;

       OPC$_RQ_TERME  -  разрешает  использовать  терминал  в

  качестве операторского терминала. Данный запрос использует-

  ся для того, чтобы разрешить указанному терминалу  получать

  операторские сообщения;

       OPC$_RQ_STATUS - сообщает  о  состоянии  операторского

  терминала. Данный запрос используется операторами для того,

  чтобы показать классы операторов, для которых доступен ука-

  занный терминал, и список выставленных запросов;

       OPC$_RQ_LOGI  -   инициализирует   операторский   файл

  регистрации.

       На рис.82, рис.83, рис.84, рис.85, рис.86, рис.87 опи-

  сан буфер сообщения для каждого из перечисленных кодов зап-

  роса. Каждое поле на схеме имеет символическое имя, которое

  служит для идентификации данного поля; данные имена  задают

  смещения в буфере сообщения. Макрокоманда  $OPCDEF  опреде-




                          - 1132 -

                        00152-01 97 06


  ляет имена полей, и все другие символические имена, которые

  можно указывать в качестве содержимого какого-нибудь поля.

       На рис. 82 показан формат буфера  сообщения  для  кода

  OPC$_RQ_RQST.



         Формат буфера сообщения для OPC$_RQ_RQST

        31                               7                  0
        -----------------------------------------------------
        !      OPC$B_MS_TARGET           !   OPC$B_MS_TYPE  !
        -----------------------------------------------------
        !                    OPC$L_MS_RQSTID                !
        -----------------------------------------------------
        !                                                   !
        =                                                   =
                        OPC$L_MS_TEXT
        =                                                   =
        !                                                   !
        -----------------------------------------------------

                           Рис. 82


       Поля буфера сообщения:

       OPC$B_MS_TYPE - данное однобайтовое поле содержит  код

  запроса OPC$_RQ_RQST;

       OPC$B_MS_TARGET - данное  трехбайтовое  поле  содержит

  24-битовый вектор, который указывает, какие типы операторс-

  ких терминалов должны получить данный запрос. Данный  бито-

  вый вектор строится при помощи  операции  "логическое  или"

  над указанными символическими именами требуемых типов. Сле-

  дующий список дает символическое имя  каждого  типа  опера-

  торского терминала:

       OPC$M_NM_CENTRL - центральный оператор;

       OPC$M_NM_DEVICE - информация о состоянии устройства;

       OPC$M_NM_DISKS - оператор дисковых устройств;




                          - 1133 -

                        00152-01 97 06


       OPC$M_NM_NTWORK - оператор сети;

       OPC$M_NM_TAPES - оператор ленточных устройств;

       OPC$M_NM_PRINT - оператор ацпу;

       OPC$M_NM_SECURITY - оператор системы защиты;

       OPC$M_NM_OPER1 - имена       от    OPC$M_NM_OPER1   до

             .          OPC$M_NM_OPER12  задают  операторские

             .          функции, определенные администратором

       OPC$M_NM_OPER12  системы;

       OPC$L_MS_RQSTID - это поле размером  в  длинное  слово

  содержит обеспечиваемый пользователем код сообщения  разме-

  ром в длинное слово;

       OPC$L_MS_TEXT - это  поле  переменной  длины  содержит

  строку символов, задающую текст, который требуется  послать

  на указанные операторские терминалы.  Длина  строки  должна

  быть в диапазоне от 0 до 255 байтов.

       Формат буфера сообщения для кода OPC$_RQ_CANCEL  пока-

  зан на рис.83.



           Формат буфера сообщения для OP$_RQ_CANCEL

       31                        15           7             0
       ------------------------------------------------------
       !            OPC$B_MS_TARGET           !OPC$B_MS_TYPE!
       ------------------------------------------------------
       !                    OPC$L_MS_RQSTID                 !
       ------------------------------------------------------

                       Рис. 83











                          - 1134 -

                        00152-01 97 06


       Поля буфера сообщения:

       OPC$B_MS_TYPE - данное однобайтовое поле содержит  код

  запроса OPC$_RQ_CANCEL;

       OPC$B_MS_TARGET - данное  трехбайтовое  поле  содержит

  24-битовый вектор, который указывает, какие типы операторс-

  ких терминалов должны получить  запрос  на  отмену.  Данный

  битовый вектор строится  при  помощи  операции  "логическое

  или" над указанными символическими именами требуемых типов.

  Следующий список дает символическое имя  для  каждого  типа

  операторского терминала:

       OPC$M_NM_CENTRL - центральный оператор;

       OPC$M_NM_DEVICE - информация о состоянии устройства;

       OPC$M_NM_DISKS - оператор дисковых устройств;

       OPC$M_NM_NTWORK - оператор сети;

       OPC$M_NM_TAPES - оператор ленточных устройств;

       OPC$M_NM_PRINT - оператор ацпу;

       OPC$M_NM_SECURITY - оператор системы защиты;

       OPC$M_NM_OPER1 - имена от OPC$M_NM_OPER1 до

           .            OPC$M_NM_OPER12 задают операторские

           .            Функции, определенные администатором

       OPCM$_NM_OPER12  системы;

       OPC$L_MS_RQSTID - данное поле размером в длинное слово

  содержит обеспечиваемый пользователем код сообщения  разме-

  ром в длинное слово.

       Формат буфера сообщения для кода OPC$_RQ_REPLY показан

  на рис.84.






                          - 1135 -

                        00152-01 97 06


             Формат буфера сообщения для OPC$_RQ_REPLY

       31                       15            7           0
       ------------------------------------------------------
       !    OPC$W_MS_STATUS     ! Зарезервиро-!OPC$B_MS_TYPE!
       !                        ! вано        !             !
       ------------------------------------------------------
       !                 OPC$L_MS_RPLYID                    !
       ------------------------------------------------------
       !                        !     OPC$W_MS_OUNIT        !
       !                        -----------------------------
       .                                                    !
       .                 OPC$T_MS_ONAME                     !
       .                                                    .
       !                                                    .
       --------------------------                           .
       !                        !                           !
       !                        -----------------------------
       .                                                    !
       .                 OPC$L_MS_OTEXT                     !
       .                                                    .
       !                                                    .
       --------------------------                           .
                                !                           !
                                -----------------------------

                        Рис. 84


       Поля буфера сообщения:

       OPC$B_MS_TYPE - данное однобайтовое поле содержит  код

  запроса OPC$RQ_REPLY.

       Зарезервировано - данное однобайтовое поле не  исполь-

  зуется;

       OPC$W_MS_STATUS - данное  двухбайтовое  поле  содержит

  младшее слово значения кода состояния  размером  в  длинное

  слово, которое $SNDOPR возвращет в почтовый ящик,  заданный

  аргументом CHAN. Чтобы проверить код завершения, необходимо

  извлечь младшее слово из длинного слова  кода  состояния  и

  сравнить его с содержимым поля OPC$W_MS$STATUS;

       OPC$L_MS_PRLYID  -  данное  4-байтовое  поле  содержит

  обеспечиваемый пользователем код сообщения;



                          - 1136 -

                        00152-01 97 06


       OPC$W_MS_OUNIT -  данное  двухбайтовое  поле  содержит

  номер устройства терминала, на который  необходимо  послать

  ответ оператора. Чтобы  получить  данный  номер  устройства

  терминала, можно  вызвать  $GETDVI,  задавая  код  элемента

  DVI$_FULLDEVNAM. Возвращаемая  информация  будет  содержать

  имя узла и имя устройства как  сплошную  строку.  Поскольку

  номер устройства находится в конце данной строки, то  необ-

  ходимо сделать грамматический разбор строки. Это можно сде-

  лать одним способом - искать, начиная от конца, первый бук-

  венный символ; цифры справа от буквеннго символа составляют

  номер устройства. Из остатка строки затем  строится  строка

  символов со счетчиком, которая используется для  следующего

  поля, OPC$T_MS_ONAME;

       OPC$T_MS_ONAME - данное поле переменной длины содержит

  строку со счетчиком,  задающую  имя  устройства  терминала,

  который должен получить ответ оператора. Максимальная общая

  длина строки - 14 байтов;

       OPC$L_MS_OTEXT - данное поле переменной длины содержит

  строку  символов,  задающую  написанный  оператором  текст,

  который необходимо  послать  на  пользователький  терминал.

  Длина строки должна быть в диапазоне от 0  до  255  байтов.

  Данное поле не является обязательным.

       Формат буфера сообщения для кода OPC$RQ_TERME  показан

  на рис.85.










                          - 1137 -

                        00152-01 97 06


              Формат буфера сообщения для OPC_RQ_TERME

       31                      15            7             0
       ------------------------------------------------------
       !            OPC$B_MS_ENAB            ! OPC$B_MS_TYPE!
       ------------------------------------------------------
       !                    OPC$L_MS_MASK                   !
       ------------------------------------------------------
       !                       !       OPC$W_MS_OUNIT       !
       !                       ------------------------------
       .                                                    !
       .                    OPC$T_MS_ONAME                  !
       .                                                    .
       !                                                    .
       -------------------------                            .
                               !                            !
                               ------------------------------

                            Рис. 85


       Поля буфера сообщения:

       OPC$B_MS_TYPE - данное однобайтовое поле содержит  код

  запроса OPC$_RQ_TERME;

       OPC$B_MS_ENAB  -  данное  трехбайтовое  поле  содержит

  обеспечиваемое пользователем значение. Значение 0 указывает

  на то, что заданный терминал необходимо запретить для  ука-

  занного класса операторов. Любое ненулевое значение  указы-

  вает на то, что заданный терминал необходимо разрешить  для

  указанного класса операторов;

       OPC$B_MS_MASK - данное 4-байтовое поле содержит  бито-

  вый вектор, который  указывает,  каким  типам  операторских

  терминалов необходимо разрешить или запретить использование

  заданного терминала. Битовый  вектор  строится  при  помощи

  операции "логическое или" над заданными символическими име-

  нами желаемых типов. Следующий список содержит  символичес-

  кие имена каждого типа операторского терминала:





                          - 1138 -

                        00152-01 97 06


       OPC$M_NM_CENTRL - центральный оператор;

       OPC$M_NM_CESURITY - оператор системы защиты;

       OPC$M_NM_DEVICE - информация о состоянии устройства;

       OPC$M_NM_DISKS - оператор дисковых устройств;

       OPC$M_NM_NTWORK - оператор сети;

       OPC$M_NM_TAPES - оператор ленточных устройств;

       OPC$M_NM_PRINT - оператор ацпу;

       OPC$M_NM_OPER1 - имена от OPC$M_NM_OPER1 до

           .            OPC$M_NM_OPER12 задают операторские

           .            функции, определенные администратором

      OPC$M_NM_OPER12   системы;

       OPC$W_MS_OUNIT - это двухбайтовое поле содержит  номер

  устройства операторского  терминала,  который  должен  быть

  запрещен или разрешен для указанных типов операторских тер-

  миналов. Чтобы получить данный номер устройтсва  терминала,

  необходимо   вызвать   $GETDVI,   задавая   код    элемента

  DVI$_FULLDEVNAM. Возвращаемая  информация  будет  содержать

  имя узла и имя устройства как  сплошную  строку.  Поскольку

  номер устройства находится в конце данной строки, то  необ-

  ходимо сделать грамматический разбор строки. Это можно сде-

  лать одним способом - искать, начиная от конца, первый бук-

  венный символ; цифры справа от первого  буквенного  символа

  составляют  номер  устройства.  Из  остатка  строки   затем

  строится строка символов со счетчиком, которая используется

  для следующего поля, OPC$T_MS_ONAME;

       OPC$T_MS_ONAME - это поле  переменной  длины  содержит

  строку символов со счетчиком, задающую имя устройства  опе-




                          - 1139 -

                        00152-01 97 06


  раторского терминала, который необходимо запретить или раз-

  решить для заданного типа операторского  терминала.  Макси-

  мальная общая длина строки - 16 байтов.

       Формат буфера сообщения для кода OPC$_RQ_STATUS  пока-

  зан на рис.86.



           Формат буфера сообщения для OPC_RQ_STATUS

       31                       15            7            0
       ------------------------------------------------------
       !            Зарезервировано           !OPC$B_MS_TYPE!
       ------------------------------------------------------
       !                   Зарезервировано                  !
       ------------------------------------------------------
       !                         !       OPC$W_MS_OUNIT     !
       !                         ----------------------------
       !                                                    !
       .                                                    .
       .                    OPC$T_MS_ONAME                  .
       .                                                    .
       !                                                    !
       !--------------------------                          !
                                 !                          !
                                 ----------------------------

                           Рис. 86


       Поля буфера сообщения:

       OPC$B_MS_TYPE - данное однобайтовое поле содержит  код

  запроса OPC$_RQ_STATUS;

       Зарезервировано - данное трехбайтовое поле не  исполь-

  зуется;

       Зарезервировано  -  данное  четырехбайтовое  поле   не

  используется;

       OPC$W_MS_OUNIT -  данное  двухбайтовое  поле  содержит

  номер устройства операторского терминала, состояние которо-

  го требуется запросить. Чтобы получить данный номер,  можно




                          - 1140 -

                        00152-01 97 06


  вызвать  $GETDVI,  задавая  код  элемента  DVI$_FULLDEVNAM.

  Возвращаемая информация будет содержать имя узла и имя уст-

  ройства как сплошную  строку.  Поскольку  номер  устройства

  находится в конце данной строки, необходимо сделать грамма-

  тический разбор строки. Это можно сделать одним способом  -

  искать, начиная от конца, первый  буквенный  символ;  цифры

  справа от первого буквенного символа составляют номер  уст-

  ройства. Из остатка строки затем строится  строка  символов

  со счетчиком, которая  используется  для  следующего  поля,

  OPC$T_MS_ONAME;

       OPC$T_MS_ONAME - данное поле переменной длины содержит

  строку символов со счетчиком, задающую имя устройства  опе-

  раторского терминала, состояние которого необходимо  запро-

  сить. Максимальная общая длина строки - 14 байтов.

       Формат буфера сообщения для кода  OPC$RQ_LOGI  показан

  на рис.87.


























                          - 1141 -

                        00152-01 97 06


            Формат буфера сообщения для OPC_RQ_LOGI

       31                       15            7            0
       ------------------------------------------------------
       !            Зарезервировано           !OPC$B_MS_TYPE!
       ------------------------------------------------------
       !                     OPC$L_MS_RQSTID                !
       ------------------------------------------------------
       !                         !       OPC$W_MS_OUNIT     !
       !                         ----------------------------
       !                                                    !
       .                                                    .
       .                    OPC$T_MS_ONAME                  .
       .                                                    .
       !                                                    !
       !--------------------------                          !
                                 !                          !
                                 ----------------------------

                        Рис. 87


       Поля буфера сообщения:

       OPC$B_MS_TYPE - данное однобайтовое поле содержит  код

  запроса OPC$_RQ_LOGI;

       Зарезервировано - данное трехбайтовое поле не  исполь-

  зуется;

       OPC$L_MS_RQSTID - это поле размером  в  длинное  слово

  содержит значение, обеспеченное пользователем.  Значение  0

  указывает, что текущий операторский файл регистрации  необ-

  ходимо закрыть, а новый файл регистрации - открыть.  Значе-

  ние 1 указывает, что текущий операторский файл  регистрации

  необходимо закрыть, но новый файл регистрации открывать  не

  требуется;

       OPC$W_MS_OUNIT -  данное  двухбайтовое  поле  содержит

  номер устройства операторского  терминала,  который  делает

  запрос на инициализацию. Чтобы получить данный  номер  уст-

  ройства терминала, можно вызвать $GETDVI, задавая код  эле-




                          - 1142 -

                        00152-01 97 06


  мента DVI$_FULLDEVNAM. Возвращаемая информация будет содер-

  жать имя узла и имя устройства как  сплошную  строку.  Пос-

  кольку номер устройства находится в конце данной строки, то

  необходимо сделать грамматический разбор строки. Это  можно

  сделать одним способом - искать, начиная от  конца,  первый

  буквенный символ; цифры справа от первого буквенного симво-

  ла составляют номер устройства.  Из  остатка  строки  затем

  строится строка символов со счетчиком, которая используется

  для следующего поля, OPC$T_MS_ONAME;

       OPC$T_MS_ONAME - это поле  переменной  длины  содержит

  строку символов со счетчиком, задающую имя устройства  опе-

  раторского терминала, который делает запрос на  инициализа-

  цию. Максимальная общая длина строки - 14 байтов.

       CHAN

       Использование в МОС ВП: CHANNEL

       Тип:                    слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Канал, назначенный почтовому ящику, в который требует-

  ся послать ответ.  Аргумент  CHAN  -  это  значение  слова,

  содержащего данный номер канала. Если аргумент CHAN не ука-

  зан или задан равным 0 (принимается по умолчанию), то ответ

  не посылается.

       Аргумент  CHAN  необходимо  задавать,  если  требуется

  ответ от оператора.

       Описание:

       В зависимости  от  конкретной  операции  использование




                          - 1143 -

                        00152-01 97 06


  программы $SNDOPR может потребовать наличия  у  вызывающего

  процесса привилегии OPER для выполнения следующих функций:

       1) разрешить использование терминала в качестве опера-

  торского;

       2) ответить на пользовательский  запрос  или  отменить

  его;

       3)  инициализировать  файл  регистрации   операторских

  сообщений.

       Кроме того, для выполнения функций, связанных с систе-

  мой защиты, процесс должен иметь,  кроме  привилегии  OPER,

  привилегию SECURITY.

       Программа системного обслуживания  "послать  сообщение

  оператору" использует системную динамическую память.

       В общем случае данная программа используется следующим

  образом:

       Строится буфер сообщения  и  его  окончательная  длина

  помещается в первое слово дескриптора буфера;

       Вызывается программа системного обслуживания $SNDOPR;

       Проверяется код состояния, возвращаемый в регистре R0,

  для гарантии того, что вызов сделан успешно;

       Выдается запрос на чтение почтового ящика, если почто-

  вый ящик задан;

       Когда чтение завершится,  проверяется  2-байтовый  код

  состояния в поле OPC$W_MS_STATUS  для  гарантии  того,  что

  операция была выполнена успешно.

       Сообщения,  отображаемые  на  операторские  терминалы,

  имеют следующий формат:




                          - 1144 -

                        00152-01 97 06


       %%%%%%%%%%% OPCOM ДД-МММ-ГГГГ ЧЧ:ММ:СС.СС информация

                              конкретного сообщения

       Возвращаемые значения кода состояния:

       SS$_NORMAL    - успешное завершение;

       SS$_ACCVIO    - вызывающая программа не  может  прочи-

                     тать  буфер  сообщения  или   дескриптор

                     буфера;

       SS$_BADPARAM  - указанное сообщение имеет нулевую дли-

                     ну или длину более 986 байтов;

       SS$_DEVNOTMBX - указанный канал не назначен  почтовому

                     ящику;

       SS$_INSFMEM   - для  выполнения  программы  системного

                     обслуживания не хватает системной  дина-

                     мической памяти;

       SS$_IVCHAN    - указан  недопустимый   номер   канала.

                     Недопустимым является тот номер  канала,

                     котоый равен 0 или превышает  количество

                     доступных каналов;

       SS$_NOPRIV    - у процесса нет привилегии, необходимой

                     для того, чтобы ответить на запрос поль-

                     зователя или отменить  его;  процесс  не

                     имеет доступа на чтение/запись к указан-

                     ному почтовому ящику; или канал был наз-

                     начен из более привилегированного режима

                     доступа.








                          - 1145 -

                        00152-01 97 06


       Коды состояния, возвращаемые в почтовый ящик:

       OPC$_BLANKTAPE  - успешное завершение; оператор  отве-

                       тил командой REPLY/BLANK_TAPE=N;

       OPC$_INITAPE    - успешное завершение; оператор  отве-

                       тил командой REPLY/INITIALIZE_TAPE=N;

       OPC$_NOPERATOR  - успешное завершение; нет  операторс-

                       кого терминала, который может получить

                       сообщение;

       OPC$_RQSTCMPLTE - успешное завершение; оператор выпол-

                       нил запрос;

       OPC$_RQSTPEND   - успешное завершение; оператор выпол-

                       нит запрос, когда будет возможность;

       OPC$_RQSTABORT  - оператор не может удовлетворить зап-

                       рос;

       OPC$_RQSTCAN    - вызывающий процесс отменил запрос.



       13.109. SUSPND - приостановить процесс


       Программа  системного  обслуживания  SUSPND  позволяет

  процессу приостановить себя или другой процесс. Приостанов-

  ленный процесс не  может  получать  AST  или  как-то  иначе

  выполняться, до тех пор, пока другой процесс не  возобновит

  или не удалит его.

       Формат:

       SYS$SUSPND     [PIDADR],[PRCNAM]









                          - 1146 -

                        00152-01 97 06


  Аргументы:

       PIDADR

       Использование в МОС ВП: PROCESS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 модификация

       Механизм:               по ссылке

       Идентификатор  процесса  (PID),   который   необходимо

  приостановить. Аргумент PIDADR - это адрес длинного  слова,

  содержащего PID.

       Аргумент PIDADR обязателен, если необходимо приостано-

  вить процесс, номер группы UIC которого отличен  от  номера

  группы UIC вызывающего процесса.

       PRCNAM

       Использование в МОС ВП: PROCESS_NAME

       Тип:                    строка текста

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки с фиксированной длиной

       Имя процесса, который необходимо приостановить.  Аргу-

  мент PRCNAM - это адрес дескриптора строки символов, указы-

  вающего на строку имени процесса длиной от 1 до  15  симво-

  лов.

       Имя процесса неявно квалифицируется его номером группы

  UIC. Поэтому аргумент PRCNAM можно использовать только  для

  того, чтобы приостановить  процесс,  принадлежащий  той  же

  группе UIC, что и вызывающий процесс.

       Для того, чтобы приостановить процессы в других  груп-




                          - 1147 -

                        00152-01 97 06


  пах, необходимо использовать аргумент PIDADR.

       Если ни аргумент PIDADR, ни аргумент PRCNAM не  указа-

  ны, то приостанавливается вызывающий процесс.

       Описание:

       В зависимости  от  конкретной  операции  использование

  программы $SUSPND может потребовать наличия  у  вызывающего

  процесса одной из перечисленных привилегий:

       1) привилегия GROUP требуется для того, чтобы приоста-

  новить другой процесс в той же группе, если UIC приостанав-

  ливаемого процесса отличается от UIC вызываемого процесса;

       2) привилегия WORLD необходима для того, чтобы  приос-

  тановить любой процесс в системе.

       Программа системного обслуживания $SUSPND требует сис-

  темной динамической памяти.

       Приостановленный процесс,  если  только  он  не  имеет

  страниц, зафиксированных в памяти, можно удалить из баланс-

  ного набора, чтобы дать возможность выполняться другим про-

  цессам.

       Программа системного  обслуживания  "возобновить  про-

  цесс" ($RESUME) позволяет продолжить приостановленный  про-

  цесс. Если для  процесса,  который  не  был  приостановлен,

  выдан один или несколько запросов на возобновление, то сле-

  дующий запрос на приостановку процесса сразу же  завершает-

  ся, то есть, процесс не приостанавливается.

       Для выставленных запросов на возобновление счетчик  не

  ведется.






                          - 1148 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_NORMAL   - успешное завершение;

       SS$_ACCVIO   - вызывающая программа не может прочитать

                    строку  имени  процесса  или   дескриптор

                    строки, либо не может записать  идентифи-

                    катор процесса;

       SS$_INSFMEM  - недостаточно   системной   динамической

                    памяти для выполнения программы системно-

                    го обслуживания;

       SS$_IVLOGNAM - заданное  имя  процесса  имеет  нулевую

                    длину или длину более 15 символов;

       SS$_NONEXPR  - предупреждение;  указанный  процесс  не

                    существует,  или  была  задана   неверная

                    идентификация процесса;

       SS$_NOPRIV   - заданный процесс был создан не вызываю-

                    щим процессом, а  вызывающий  процесс  не

                    имеет привилегии GROUP или WORLD.



       13.110. $SYNCH - синхронизировать


       Программа  системного  обслуживания  $SYNCH  проверяет

  состояние  завершения  программы  системного  обслуживания,

  которая завершается асинхронно.

       Программа  системного  обслуживания,   чье   состояние

  завершения контролируется, должна вызываться с явно  задан-

  ными аргументами EFN и  IOSB,  поскольку  программа  $SYNCH

  использует флаг события и блок состояния ввода-вывода конт-

  ролируемой программы системного обслуживания.



                          - 1149 -

                        00152-01 97 06


       В подразделе 2.5 подробно обсуждается завершение прог-

  рамм системного обслуживания.

       Формат:

       SYS$SYNCH     [EFN],[IOSB]

       Аргументы:

       EFN

       Использование в МОС ВП:  EF_NUMBER

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по значению

       Номер флага события, заданный в вызове программы  сис-

  темного обслуживания, чье состояние завершения должно  про-

  веряться программой $SYNCH. Аргумент EFN  является  длинным

  словом, содержащим данный номер.

       IOSB

       Использование в МОС ВП:  IO_STATUS_BLOCK

       Тип:                     квадрослово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

       Блок состояния ввода-вывода, заданный в  вызове  прог-

  раммы системного обслуживания, чье состояние должно  прове-

  ряться программой $SYNCH. Аргумент  IOSB  является  адресом

  данного квадрослова блока состояния ввода-вывода.

       Описание:

       Программа системного обслуживания  выполняет  действи-

  тельный тест на завершение асинхронной программы системного

  обслуживания такой как, например, $GETJPI.




                          - 1150 -

                        00152-01 97 06


  программа $SYNCH работает следующим образом:

       После вызова программа $SYNCH ожидает (вызывает  прог-

  рамму  системного  обслуживания  $WAITFR)  установки  флага

  события;

       После установки флага события программа $SYNCH  прове-

  ряет содержимое блока состояния ввода-вывода.  Если  данное

  содержимое ненулевое, то, следовательно, асинхронная  прог-

  рамма системного обслуживания действительно завершилась,  и

  программа $SYNCH возвращает управление вызывающему  процес-

  су;

       Если блок состояния  ввода-вывода  содержит  нуль,  то

  асинхронная программа системного обслуживания еще не завер-

  шилась, а флаг события был установлен завершением  события,

  не связанного с завершением  программы  $GETJPI.  В  данном

  случае программа $SYNCH сбрасывает  флаг  события  (вызывая

  программу $CLREF) и снова ожидает установки  данного  флага

  события (вызывая программу $WAITFR). Данный цикл повторяет-

  ся до тех пор, пока содержимое блока состояния ввода-вывода

  не будет отличаться от нуля.

       Программа системного обслуживания $SYNCH всегда  уста-

  навливает указанный  флаг  события,  когда  она  возвращает

  управление вызывающему процессу. Это гарантирует, что  дру-

  гие сегменты программы смогут  использовать  этот  же  флаг

  события без возникновения конфликтных  ситуаций.  Предполо-

  жим, что вызовы двух программ $GETJPI и $GETSYI задают один

  и тот же флаг события, а программа  $SYNCH  вызывается  для

  проверки завершения из программы $GETJPI. Если данный  флаг




                          - 1151 -

                        00152-01 97 06


  события устанавливается программой  $GETSYI,  то  программа

  $SYNCH сбрасывает данный флаг  и  ожидает,  пока  он  будет

  установлен  программой  $GETJPI.  Когда  программа  $GETJPI

  устанавливает флаг, программа $SYNCH возвращает  управление

  вызывающему процессу и устанавливает данный  флаг  события.

  При таком способе работы установка флага программой $GETSYI

  не будет потеряна и другой вызов программы  $SYNCH  покажет

  завершение программы $GETSYI.

       Программа системного обслуживания $SYNCH полезна, ког-

  да программа вызывает асинхронную программу системного обс-

  луживания, но  должна  выполнить  некоторую  другую  работу

  перед тем, как проверить завершение асинхронной  программы.

  В данном случае программа должна вызывать программу  $SYNCH

  в той точке, где она должна знать, что асинхронная програм-

  ма завершилась и где  требуется  подождать  действительного

  завершения данной программы.

       Если программа вызывает асинхронную программу  систем-

  ного обслуживания (например, $QIO) и действительно  ожидает

  (с помощью вызова  программы  $WAITFR)  ее  завершения,  не

  выполняя при этом никакой другой работы, то данную програм-

  му можно было бы  улучшить,  если  использовать  синхронную

  форму данной программы системного  обслуживания  (например,

  $QIOW). Синхронные программы системного обслуживания, такие

  как $QIOW проверяют действительное состояние завершения тем

  же способом, как это делает программа $SYNCH.








                          - 1152 -

                        00152-01 97 06


       Возвращаемые значения кодов состояния:

       SS$_NORMAL     - программа   системного   обслуживания

                      завершилась. Асинхронная программа сис-

                      темного обслуживания завершилась и блок

                      состояния ввода-вывода содержит  значе-

                      ние кода состояноя, описывающее состоя-

                      ние  завершения  асинхронной  программы

                      системного обслуживания.



       13.111. $TRNLNM - транслировать логическое имя


       Программа системного обслуживания  $TRNLNM  возвращает

  информацию о логическом имени.

       Формат:

       SYS$TRNLNM      [ATTR],TABNAM,LOGNAM,[ACMODE],[ITMLST]

       Аргументы:

       ATTR

       Использование в МОС ВП:  MASK_LONGWORD

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

       Атрибуты контролирующие поиск логического имени. Аргу-

  мент ATTR  является  адресом  длинного  слова,  содержащего

  битовую маску, которая задает данные атрибуты.

       Каждый бит в длинном слове  соответствует  атрибуту  и

  имеет символическое имя. Чтобы задать  атрибут,  необходимо

  задать символическое имя или установить соответствующий ему

  бит. Все неопределенные биты в длинном  слове  должны  быть



                          - 1153 -

                        00152-01 97 06


  сброшены на 0.

       Если данный аргумент не задан или задан равным 0  (нет

  установленных битов), то не используются никакие атрибуты.

       Макрокоманда $LNMDEF определяет следующее имя  атрибу-

  та:

            LNM$M_CASE_BLIND - если  данный  бит  установлен,

  программа $TRNLNM  не  делает  различия  между  большими  и

  строчными буквами в транслируемом логическом имени.

       TABNAM

       Использование в МОС ВП:  LOGICAL_NAME

       Тип:                     текстовая строка

       Доступ:                  только чтение

       Механизм:                по дескриптору - дескриптор

                                строки фиксированной длины

       Имя таблицы или имя списка таблиц, в котором необходи-

  мо  выполнить  поиск  логического  имени.  Аргумент  TABNAM

  является адресом дескриптора, указывающего на  данное  имя.

  Это обязательный аргумент.

       Если имя таблицы не является именем таблицы логических

  имен, то полагается, что данное логическое имя  и  трансли-

  руется итеративно до тех пор, пока либо  не  будет  найдено

  имя таблицы логических имен, либо не будет выполнено допус-

  тимое системой число трансляций. Если имя таблицы  трансли-

  руется в список таблиц логических имен, то таблицы просмат-

  риваются в указанном порядке.








                          - 1154 -

                        00152-01 97 06


       LOGNAM

       Использование в МОС ВП:  LOGICAL_NAME

       Тип:                     текстовая строка

       Доступ:                  только чтение

       Механизм:                по дескриптору - дескриптор

                                строки фиксированной длины

       Логическое имя, о котором должна вернуться информация.

  Аргумент LOGNAM является адресом дескриптора,  указывающего

  на строку логического имени. Это обязательный аргумент.

       ACMODE

       Использование в МОС ВП:  ACCESS_MODE

       Тип:                     байт (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

       Режим  доступа,  который  должен  использоваться   при

  трансляции. Аргумент ACMODE является адресом байта,  задаю-

  щего режим доступа. Макрокоманда $PSLDEF определяет  симво-

  лические имена для четырех режимов доступа.

       Если аргумент ACMODE задан, то программа $TRNLNM игно-

  рирует все имена (как логические имена, так и имена таблиц)

  в режимах доступа менее  привилегированных,  чем  указанный

  режим доступа. Указанный режим доступа  не  сравнивается  с

  режимом доступа вызывающего процесса.

       Если аргумент ACMODE не задан,  то  программа  $TRNLNM

  выполняет трансляцию, не обращая внимания на режим доступа,

  однако процесс трансляции продолжается от  самого  внешнего

  режима доступа к самому внутреннему режиму  доступа.  Таким




                          - 1155 -

                        00152-01 97 06


  образом, если в одной таблице имеются два логических  имени

  с одинаковым именем, но разными режимами доступа, то  прог-

  рамма $TRNLNM будет транслировать имя с самым внешним режи-

  мом доступа.

       ITMLST

       Использование в МОС ВП:  ITEM_LIST_3

       Тип:                     длинное слово (без знака)

       Доступ:                  только чтение

       Механизм:                по ссылке

       Список элементов, описывающий, какую информацию должна

  возвращать  программа  $TRNLNM.  Аргумент  ITMLST  является

  адресом списка дескрипторов элементов,  каждый  из  которых

  задает или контролирует элемент информации, которая возвра-

  щается программой. Список дескрипторов элементов завершает-

  ся длинным словом, содержащим 0.

       Рис. 88 описывает формат дескриптора элемента.



                 Формат дескриптора элемента

       31                         15                       0
       -----------------------------------------------------
       !      Kод элемента        !     Dлина буфера       !
       -----------------------------------------------------
       !                   Aдрес буфера                    !
       -----------------------------------------------------
       !            Aдрес  возвращаемой длины              !
       -----------------------------------------------------

                        Rис. 88











                          - 1156 -

                        00152-01 97 06


       Поля элементного дескриптора программы $TRNLNM:

  длина буфера -

       Слово, задающее число байтов в буфере, на который ука-

       зывает поле "адрес буфера";

  код элемента -

       Слово, содержащее символический код, описывающий  сущ-

       ность информации в буфере, или возвращаемой  в  буфер,

       на который указывает поле "адрес буфера";

  адрес буфера -

       Длинное слово, содержащее адрес буфера, который задает

       или принимает информацию;

  адрес возвращаемой длины -

       Длинное слово, содержащее адрес слова, которое  задает

       действительную длину в байтах информации, возвращаемой

       программой $TRNLNM в буфер, на который указывает  поле

       "адрес буфера".

       Коды элементов программы $TRNLNM:

  LNM$_ACMODE -

       Если задан данный код элемента, то  программа  возвра-

       щает режим доступа, связанный с данным логическим име-

       нем во время его создания. Поле "адрес  буфера"  деск-

       риптора элемента является  адресом  байта,  в  который

       программа $TRNLNM записывает режим доступа;

  LNM$_ATTRIBUTES -

       Если задан данный код элемента, то  программа  возвра-

       щает атрибуты логического имени и  эквивалентное  имя,

       связанное с текущим значением кода LNM$_INDEX.




                          - 1157 -

                        00152-01 97 06


       Поле "адрес буфера" дескриптора элемента указывает  на

  длинное слово, содержащее битовую маску, в  который  каждый

  бит соответствует атрибуту. Программа системного обслужива-

  ния $TRNLNM устанавливает каждый бит для каждого  атрибута,

  которым владеет либо  логическое  имя,  либо  эквивалентное

  имя.

       Символические имена для данных атрибутов  определяются

  макрокомандой $LNMDEF:

  LNM$M_CONCEALED -

       Если программа устанавливает данный  бит,  то  эквива-

       лентное имя при текущем значении индекса для  логичес-

       кого имени является скрытым логическим именем, как это

       интерпретируется системой СУД-32;

  LNM$M_CONFINE -

       Если программа устанавливает данный бит, то логическое

       имя не копируется из процесса ни в один из порожденных

       им подпроцессов. Команда SPAWN языка DCL создает подп-

       роцессы;

  LNM$M_CRELOG -

       Если программа устанавливает данный бит, то логическое

       имя создано с использованием программы системного обс-

       луживания $CRELOG;

  LNM$M_EXISTS -

       Если программа устанавливает данный бит, то существует

       эквивалентное имя с заданным индексом;

  LNM$M_NO_ALIAS -

       Если программа устанавливает данный бит, то имя  логи-




                          - 1158 -

                        00152-01 97 06


       ческого имени не может быть дано  другому  логическому

       имени, определенному в той  же  таблице  для  внешнего

       режима доступа;

  LNM$M_TABLE -

       Если программа устанавливает данный бит, то логическое

       имя является именем таблицы логических имен;

  LNM$M_TERMINAL -

       Если программа устанавливает данный  бит,  то  эквива-

       лентное имя для логического имени не может  быть  под-

       вергнуто дальнейшей (рекурсивной) трансляции;

  LNM$_CHAIN -

       Если задан данный код элемента, то программа обрабаты-

       вает другой список элементов, который  непосредственно

       следует за текущим списком. Поле "адрес буфера"  деск-

       риптора элемента указывает на следующий список элемен-

       тов;

  LNM$_INDEX -

       Если задан данный  код  элемента,  то  программа  ищет

       эквивалентное имя, имеющее указанное значение индекса.

       Поле "адрес буфера" дескриптора элемента указывает  на

       длинное слово, содержащее заданное пользователем целое

       число в диапазоне от 0 до  127.  Если  данный  код  не

       задан. То  подразумевается  значение  кода  LNM$_INDEX

       равное 0 и программа $TRNLNM возвращает информацию  об

       эквивалентном имени с индексом 0. Поскольку логическое

       имя может иметь более одного  эквивалентного  имени  и

       каждое эквивалентное имя определяется значением индек-




                          - 1159 -

                        00152-01 97 06


       са, то следует задавать код LNM$_INDEX первым в списке

       элементов, перед тем как указывать  коды  LNM$_STRING,

       LNM$_LENGTH или LNM$_ATTRIBUTES, поскольку данные коды

       возвращают информацию об эквивалентном имени,  которое

       идентифицируется текущим значением индекса LNM$_INDEX;

  LNM$_LENGTH -

       Если задан данный код элемента, то  программа  возвра-

       щает действительную длину строки эквивалентного имени,

       соответствующего текущему значению эквивалентного име-

       ни. Поле "адрес буфера" дескриптора элемента  является

       адресом длинного слова, в  которое  программа  $TRNLNM

       записывает данную длину. Если  для  текущего  значения

       кода LNM$_INDEX не существует эквивалентного имени, то

       программа возвращает нуль в поле, на которое указывает

       поле "адрес возвращаемой длины" дескриптора элемента;

  LNM$_MAX_INDEX -

       Каждое эквивалентное имя для логического  имени  имеет

       связанный с ним индекс. Если задан данный код  элемен-

       та, то программа возвращает значение равное максималь-

       ному  значению  индекса  эквивалентного  имени.   Поле

       "адрес буфера" дескриптора элемента  является  адресом

       длинного слова, в которое программа $TRNLNM записывает

       данное значение. Если нет никаких  эквивалентных  имен

       (и, следовательно, нет значений индексов), то програм-

       ма $TRNLNM возвращает значение минус 1;

  LNM$_TABLE -

       Если задан данный код элемента, то  программа  возвра-




                          - 1160 -

                        00152-01 97 06


       щает имя таблицы, содержащей логическое  имя,  которое

       должно транслироваться. Поле "адрес буфера" дескрипто-

       ра элемента указывает на буфер,  в  который  программа

       $TRNLNM возвращает данное имя. Поле "адрес  возвращае-

       мой длины" дескриптора элемента задает адрес слова,  в

       которое программа $TRNLNM пишет размер имени  таблицы.

       Максимальная длина имени таблицы равна 31 символу.

  LNM$_STRING -

       Если задан данный код элемента, то  программа  возвра-

       щает  строку  эквивалентного  имени,  соответствующего

       текущему  значению  LNM$_INDEX.  Поле  "адрес  буфера"

       дескриптора элемента указывает  на  буфер,  содержащий

       данную строку. Поле "адрес возвращаемой  длины"  деск-

       риптора элемента содержит адрес слова, которое  содер-

       жит длину в байтах данной строки.  Максимальная  длина

       строки эквивалентного имени составляет  255  символов.

       Если для текущего значения кода LNM$_INDEX не  сущест-

       вует эквивалентного имени, то программа $TRNLNM  возв-

       ращает нулевое значение  в  поле  "адрес  возвращаемой

       длины" дескриптора элемента.

       Описание:

       Для транслирования логического имени, расположенного в

  разделяемой таблице логических имен требуется доступ с чте-

  нием в данной таблице.










                          - 1161 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$_ACCVIO        - программа системного  обслуживания

                         не может получить доступ  к  ячейкам

                         памяти,  заданным  одним  или  более

                         аргументами;

       SS$_BADPARAM      - один или  более  аргументов  имеют

                         неверное значение, или не задано имя

                         таблицы логических имен или логичес-

                         кое имя;

       SS$_BUFFEROVF     - успешное завершение.  Поле  "длина

                         буфера" дескриптора элемента  задает

                         недостаточное значение, чтобы  вмес-

                         тить требуемые данные;

       SS$_IVLOGNAM      - аргумент   TABNAM   или   аргумент

                         LOGNAM задает строку, длина  которой

                         лежит вне требуемого диапазона от  1

                         до 255 символов;

       SS$_IVLOGTAB      - аргумент TABNAM  не  указывает  на

                         таблицу логических имен;

       SS$_NOLOGNAM      - логическое имя не найдено  в  ука-

                         занной таблице (или таблицах)  логи-

                         ческих имен;

       SS$_NOPRIV        - у вызывающего процесса нет необхо-

                         димой привилегии для доступа к  ука-

                         занному имени;

       SS$_NORMAL        - успешное завершение. Найдено экви-

                         валентное имя для логического имени;




                          - 1162 -

                        00152-01 97 06


       SS$_TOOMANYLNAM   - трансляция логического  имени  для

                         имени таблицы  превысила  допустимую

                         глубину (10 трансляций).



       13.112. $ULKPAG - освободить страницы в памяти


       Программа системного обслуживания $ULKPAG  освобождает

  страницы, которые были раньше зафиксированы  в  памяти  при

  помощи  программы  системного  обслуживания  "зафиксировать

  страницы в памяти" ($LCKPAG). Страницы автоматически  осво-

  бождаются и удаляются при выходе образа.

       Формат:

        SYS$ULKPAG     INADR, [RETADR], [ACMODE]

       Аргументы:

        INADR

        использование в МОС ВП: ADDRESS_RANGE

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по ссылке

       Начальный и конечный виртуальные адреса  освобождаемых

  страниц. Аргумент INADR - это адрес массива из двух длинных

  слов, содержащих по порядку начальный и конечный  виртуаль-

  ные адреса процесса. В каждом  виртуальном  адресе  исполь-

  зуется только та часть,  которая  представляет  номер  вир-

  туальной  страницы;  младшие  9  битов  игнорируются.  Если

  начальный виртуальный адрес равен  конечному,  то  освобож-

  дается одна страница.





                          - 1163 -

                        00152-01 97 06


       Если освобождается  несколько  страниц,  и  необходимо

  конкретно определить, какие страницы были прежде  свободны,

  то следует освобождать страницы по  одной,  то  есть,  одну

  страницу за один вызов $ULKPAG. Код состояния, возвращаемый

  программой $ULKPAG, покажет была ли данная страница  прежде

  освобожденной.

        RETADR

        использование в МОС ВП: ADDRESS_RANGE

        тип:                    длинное слово (без знака)

        доступ:                 только запись

        механизм:               по ссылке

       Начальный и конечный виртуальные адреса страниц,  фак-

  тически освобожденных программой $ULKPAG. Аргумент RETADR -

  это адрес массива  из  двух  длинных  слов,  содержащих  по

  порядку начальный и конечный виртуальные адреса процесса.

       Если во время освобождения нескольких страниц возникла

  ошибка, то RETADR  показывает  те  страницы,  которые  были

  успешно освобождены до возникновения ошибки. Если  не  было

  успешно освобожденных страниц, то оба длинных слова в  мас-

  сиве RETADR будут содержать значение минус 1.

        ACMODE

        использование в МОС ВП: ACCESS_MODE

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по значению

       Режим доступа, для которого  делается  данный  запрос.

  Аргумент ACMODE - это длинное слово, содержащее режим  дос-




                          - 1164 -

                        00152-01 97 06


  тупа. Макрокоманда $PSLDEF определяет обозначения для четы-

  рех режимов доступа.

       Наиболее  привилегированный   режим,   который   может

  использоваться, - это режим доступа вызывающей программы.

       Для освобождения какой-либо указанной страницы резуль-

  тирующий режим доступа должен иметь равную или высшую  при-

  вилегию по сравнению с  режимом  доступа  владельца  данной

  страницы.

       Описание:

       Для того, чтобы вызвать программу системного  обслужи-

  вания $ULKPAG, процесс должен иметь привилегию PSWAPM.

       Возвращаемые значения кода состояния:

       SS$_WASCLR - успешное завершение. По крайней мере одна

                  из указанных страниц была ранее  освобожде-

                  на;

       SS$_WASSET - успешное завершение. Все заданные страни-

                  цы были раньше зафиксированы;

       SS$_ACCVIO - вызывающая программа не  может  прочитать

                  входной массив или не может записать выход-

                  ной массив; либо какая-то страница  в  ука-

                  занном диапазоне недоступна или не  сущест-

                  вует.



       13.113. $ULWSET - освободить страницы в рабочем

               наборе


       Программа системного обслуживания $ULWSET  освобождает

  страницы, которые были раньше зафиксированы в рабочем набо-



                          - 1165 -

                        00152-01 97 06


  ре при помощи программы системного обслуживания "зафиксиро-

  вать страницы в рабочем  наборе"  ($LKWSET).  Освобожденные

  страницы становятся кандидатами на замещение внутри рабоче-

  го набора процесса.

       Формат:

        SYS$ULWSET  INADR, [RETADR], [ACMODE]

       Аргументы:

        INADR

        использование в МОС ВП: ADDRESS_RANGE

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по ссылке

       Начальный и конечный виртуальные адреса  освобождаемых

  страниц. Аргумент INADR - это адрес массива из двух длинных

  слов, содержащих по порядку начальный и конечный  виртуаль-

  ные адреса процесса. В каждом  виртуальном  адресе  исполь-

  зуется только та часть,  которая  представляет  номер  вир-

  туальной  страницы;  младшие  9  битов  игнорируются.  Если

  начальный виртуальный адрес равен  конечному,  то  освобож-

  дается одна страница.

       Если освобождается  несколько  страниц,  и  необходимо

  конкретно определить, какие страницы были прежде  свободны,

  то следует освобождать страницы по  одной,  то  есть,  одну

  страницу за один вызов $ULWSET. Код состояния, возвращаемый

  программой $ULWSET, покажет, была ли данная страница прежде

  освобожденной.






                          - 1166 -

                        00152-01 97 06


        RETADR

        использование в МОС ВП: ADDRESS_RANGE

        тип:                    длинное слово (без знака)

        доступ:                 только запись

        механизм:               по ссылке

       Начальный и конечный виртуальные адреса страниц,  фак-

  тически освобожденных программой $ULWSET. Аргумент RETADR -

  это адрес массива  из  двух  длинных  слов,  содержащих  по

  порядку начальный и конечный виртуальные адреса процесса.

       Если во время освобождения нескольких страниц возникла

  ошибка, то RETADR  показывает  те  страницы,  которые  были

  успешно освобождены до возникновения ошибки. Если  не  было

  успешно освобожденных страниц, то оба длинных  слова  аргу-

  мента RETADR будут содержать значение "минус 1".

        ACMODE

        использование в МОС ВП: ACCESS_MODE

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по значению

       Режим доступа, для которого  делается  данный  запрос.

  Аргумент ACMODE - это длинное слово, содержащее режим  дос-

  тупа. Макрокоманда $PSLDEF определяет обозначения для четы-

  рех режимов доступа.

       Наиболее  привилегированный   режим,   который   может

  использоваться, - это режим доступа  вызывающей  программы.

  Для освобождения какой-либо указанной страницы результирую-

  щий режим доступа должен иметь равную или высшую привилегию




                          - 1167 -

                        00152-01 97 06


  по сравнению с режимом доступа владельца данной страницы.

       Возвращаемые значения кода состояния:

       SS$_WASCLR - успешное завершение. По крайней мере одна

                  из указанных страниц была раньше освобожде-

                  на;

       SS$_WASSET - успешное завершение. Все указанные  стра-

                  ницы были раньше захвачены в рабочем  набо-

                  ре;

       SS$_ACCVIO - вызывающая программа не  может  прочитать

                  аргумент INADR или не может записать  аргу-

                  мент RETADR; либо страница в заданном  диа-

                  пазоне недоступна или не существует;

       SS$_NOPRIV - страница в указанном диапазоне  принадле-

                  жит системному адресному пространству.



       13.114. $UNWIND - развернуть стек вызовов


       Программа системного обслуживания  $UNWIND  разворачи-

  вает стек вызовов программ; то есть, она  удаляет  заданное

  количество кадров вызова из стека. По требованию она  может

  после развертывания  стека  вернуть  управление  по  адресу

  нового  счетчика  инструкций  (PC).   Предполагается,   что

  $UNWIND должна вызываться из программы обработки кода  сос-

  тояния.











                          - 1168 -

                        00152-01 97 06


       Формат:

        SYS$UNWIND      [DEPADR], [NEWPC]

       Аргументы:

        DEPADR

        использование в МОС ВП: LONGWORD_UNSIGNED

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по ссылке

       Глубина, на которую необходимо развернуть стек вызовов

  программ. Аргумент DEPADR -  это  адрес  значения  длинного

  слова. Значение 0 задает  кадр  вызова  программы,  которая

  выполнялась в тот момент, когда возникло  данное  состояние

  (то есть, кадры вызовов  не  разворачиваются);  значение  1

  задает кадр программы,  вызывающей  тот  кадр;  значение  2

  задает кадр программы, вызывающей программу, которая  вызы-

  вает тот кадр, и т.д.

       Если аргумент DEPADR задан как 0, то развертывания  не

  происходит, а $UNWIND возвращает  в  регистре  R0  значение

  кода успешного завершения.

       Если аргумент DEPADR не задан, то $UNWIND развертывает

  стек до кадра вызова  программы,  вызвавшей  ту  программу,

  которая организовала обработчик кода  состояния,  вызвавший

  программу системного  обслуживания  $UNWIND.  Данный  метод

  развертывания стека вызовов  процедур  является  обычным  и

  принятым по умолчанию.








                          - 1169 -

                        00152-01 97 06


        NEWPC

        использование в МОС ВП: ADDRESS

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по ссылке

       Новое значение счетчика инструкций (PC); данное значе-

  ние замещает текущее значение PC в кадре вызова  той  прог-

  раммы, которая получит управление по  завершении  операиции

  развертывания. Аргумент NEWPC - это значение длинного  сло-

  ва, содержащего адрес, с  которого  необходимо  возобновить

  выполнение.

       Выполнение возобновляется с данного адреса после того,

  как завершится операция развертывания.

       Если аргумент NEWPC не задан, то выполнение  возобнов-

  ляется с адреса, задаваемого счетчиком инструкций  в  кадре

  вызова той программы, которая получит управление по  завер-

  шении операции развертывания.

       Описание:

       Фактическое развертывание выполняется не сразу. Снача-

  ла адреса возврата в стеке вызовов $UNWIND проверяет каждый

  кадр в стеке вызовов на  наличие  об'явленного  обработчика

  кода состояния. Если обработчик об'явлен, $UNWIND  вызывает

  данный обработчик, задавая в качестве аргумента  "имя  сос-

  тояния"  в  сигнальном  массиве  значения  кода   состояния

  SS$_UNWIND (указывающее на то, что осуществляется разверты-

  вание стека вызовов). Если вызываемый обработчик кода  сос-

  тояния получает данное значение кода  состояния,  он  может




                          - 1170 -

                        00152-01 97 06


  выполнить какие-либо необходимые операции очистки,  связан-

  ные со спецификой программы.  После  того,  как  обработчик

  кода состояния возвратит  управление,  данный  кадр  вызова

  удаляется из стека.

       Возвращаемые значения кода состояния:

       SS$_NORMAL    - успешное завершение;

       SS$_ACCVIO    - стек вызовов недоступен для вызывающей

                     программы. Данная ситуация обнаруживает-

                     ся при просмотре стеков вызовов с  целью

                     модификации адресов возврата;

       SS$_INSFRAME  - не хватает  кадров  вызова  для  того,

                     чтобы   осуществить   развертывание   на

                     заданную глубину;

       SS$_NOSIGNAL  - предупреждение. В текущий  момент  нет

                     активных сигналов о  состоянии  исключи-

                     тельной ситуации;

       SS$_UNWINDING - предупреждение. Операция развертывания

                     уже находится в развитии.



       13.115. $UPDSEC - обновить файл секции на диске


       Программа системного обслуживания  $UPDSEC  записывает

  все модифицированные страницы в активной  личной  или  гло-

  бальной секции обратно в файл секции на  диске.  В  очередь

  ставится  один   или   несколько   запросов   на   операцию

  ввода-вывода, в зависимости от количества  модифицированных

  страниц.





                          - 1171 -

                        00152-01 97 06


       Формат:

        SYS$UPDSEC  INADR,[RETADR],[ACMODE],[UPDFLG]

                    ,[EFN],[IOSB],[ASTADR],[ASTPRM]

       Аргументы:

        INADR

        использование в МОС ВП: ADDRESS_RANGE

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по ссылке

       Начальный и конечный виртуальные адреса страниц, кото-

  рые необходимо записать в файл секции, если они были  моди-

  фицированы. Аргумент INADR -  это  адрес  массива  из  двух

  длинных слов, содержащих по порядку  начальный  и  конечный

  виртуальные адреса процесса. В  каждом  виртуальном  адресе

  используется только та часть,  которая  представляет  номер

  виртуальной страницы; младшие 9 битов игнорируются.

       Программа системного обслуживания  $UPDSEC  просматри-

  вает страницы, начиная с  адреса,  содержащегося  в  первом

  длинном слове,  заданном  аргументом  INADR,  и  заканчивая

  адресом, содержащимся во втором длинном слове. Внутри  дан-

  ного диапазона $UPDSEC локализует страницы  с  доступом  на

  чтение/запись, которые были модифицированы, и записывает их

  (по возможности, друг за другом) в файл  секции  на  диске.

  Немодифицированные страницы также перезаписываются на диск,

  если они разделяют один и тот же кластер с модифицированны-

  ми страницами.

       Если начальный виртуальный адрес равен конечному, то в




                          - 1172 -

                        00152-01 97 06


  файл секции записывается одна страница, если она была моди-

  фицирована.

       Адрес, заданный  вторым  длинным  словом,  может  быть

  меньше адреса, заданного первым длинным словом.

        RETADR

        использование в МОС ВП: ADDRESS_RANGE

        тип:                    длинное слово (без знака)

        доступ:                 только запись

        механизм:               по ссылке

       Адрес первой и последней страниц, которые были  факти-

  чески поставлены в очередь на запись обратно в файл  секции

  на диске в первом запросе $QIO. Аргумент RETADR - это адрес

  массива из двух длинных слов, содержащих по  порядку  адрес

  первой страницы и адрес последней страницы.

       Если $UPDSEC возвращает в регистре  R0  значение  кода

  состояния ошибки, то каждое длинное слово,  заданное  аргу-

  ментом RETADR, будет содержать значение "минус 1". В данном

  случае флаг события не устанавливается, AST не доставляется

  и блок состояния ввода-вывода не записывается.

        ACMODE

        использование в МОС ВП: ACCESS_MODE

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по значению

       Режим доступа, для которого выполняется  данная  прог-

  рамма системного обслуживания. Аргумент ACMODE - это  длин-

  ное слово, содержащее режим доступа.  Макрокоманда  $PSLDEF




                          - 1173 -

                        00152-01 97 06


  определяет обозначения для четырех режимов доступа.

       Наиболее  привилегированный  режим  доступа,   который

  может использоваться, - это режим доступа вызывающего  про-

  цесса. Страницу нельзя записать на диск, если режим  досту-

  па, используемый программой $UPDSEC, не будет иметь  равную

  или высшую привилегию по сравнению с режимом  доступа  вла-

  дельца той страницы, которую необходимо записать.

        UPDFLG

        использование в МОС ВП: LONGWORD_UNSIDNED

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по значению

       Указатель обновления для глобальных секций с  доступом

  на чтение/запись. Аргумент UPDFLG - это значение размером в

  длинное слово. Значение 0 (принимаемое по умолчанию) указы-

  вает, что все страницы с доступом на чтение/запись в данной

  глобальной секции, необходимо записать  в  файл  секции  на

  диске, независимо от того, были они модифицированы или нет.

  Значение  1  указывает,  что  вызывающий  процесс  является

  единственным процессом, который фактически пишет в глобаль-

  ную секцию и в файл  секции  на  диск  необходимо  записать

  только те страницы, которые были фактически  модифицированы

  вызывающим процессом.

        EFN

        использование в МОС ВП: EFN_NUMBER

        тип:                    длинное слово (без знака)

        доступ:                 только чтение




                          - 1174 -

                        00152-01 97 06


        механизм:               по значению

       Флаг события,  который  необходимо  установить,  когда

  файл секции на диске будет фактически обновлен. Аргумен EFN

  - это длинное слово, задающее номер флага события.

       Если EFN не задан, то используется флаг события 0.

       Когда $UPDSEC вызывается, то заданный флаг события или

  флаг события 0 очищается; когда операция обновления  завер-

  шается, то флаг события устанавливается в 1.

        IOSB

        использование в МОС ВП: IO_STATUS_BLOCK

        тип:                    квадрослово (без знака)

        доступ:                 только запись

        механизм:               по ссылке

       Блок состояния ввода-вывода, который  должен  получить

  окончательный код завершения операции обновления.  Аргумент

  IOSB - это адрес квадрослова,  содержащего  блок  состояния

  ввода-вывода.

       При вызове $UPDSEC блок  состояния  ввода-вывода  очи-

  щается. Как  только  операция  обновления  завершается,  то

  есть, завершаются все операции ввода-вывода на диск, в блок

  состояния ввода-вывода записывается следующее:

       1) первое слово содержит код  состояния,  возвращаемый

  программой $QIO, который показывает окончательное состояние

  завершения;

       2) первый бит второго слова будет установлен только  в

  том случае, если во время  операции  ввода-вывода  возникла

  ошибка, и это была аппаратная ошибка при записи;




                          - 1175 -

                        00152-01 97 06


       3) второе  слово  содержит  виртуальный  адрес  первой

  незаписанной страницы.

       Хотя данный аргумент не является  обязательным,  реко-

  мендуется указывать его по следующим причинам:

       1) если для сигнализации о завершении  программы  сис-

  темного обслуживания используется флаг  события,  то  можно

  проверить код состояния  в  блоке  состояния  ввода-вывода,

  чтобы убедиться, что флаг события не был  установлен  собы-

  тием, отличным от завершения программы системного  обслужи-

  вания;

       2) если для синхронизации завершения программы систем-

  ного обслуживания используется программа системного  обслу-

  живания $SYNCH, то  блок  состояния  ввода-вывода  является

  обязательным аргументом для $SYNCH;

       3) код состояния, возвращаемый в R0, и код  состояния,

  возвращаемый в блок  состояния  ввода-вывода,  обеспечивает

  информацию о разных аспектах  вызова  программы  системного

  обслуживания $UPDSEC. Код  состояния,  возвращаемый  в  R0,

  дает информацию о том, насколько успешно  осуществился  сам

  вызов программы  системного  обслуживания;  код  состояния,

  возвращаемый в блок состояния ввода-вывода, дает информацию

  о том, насколько успешной была работа программы  системного

  обслуживания. Следовательно, чтобы точно оценить, насколько

  успешным был вызов $UPDSEC, необходимо проверить коды  сос-

  тояния, которые возвращаются и в R0 , и  в  блок  состояния

  ввода-вывода.






                          - 1176 -

                        00152-01 97 06


        ASTADR

        использование в МОС ВП: AST_PROCEDURE

        тип:                    маска входа процедуры

        доступ:                 вызов без развертывания стека

        механизм:               по ссылке

       Подпрограмма обработки AST, которую необходимо  выпол-

  нить, когда файл секции будет обновлен. Аргумент  ASTADR  -

  это адрес маски входа данной подпрограммы.

       Если задан аргумент  ASTADR,  то  данная  подпрограмма

  выполняется в том же режиме доступа, из которого было  зап-

  рошено обновление файла секции.

        ASTPRM

        использование в МОС ВП: USER_ARG

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по значению

       Параметр AST, который необходимо передать подпрограмме

  AST. Аргумент ASTPRM - это параметр размером в длинное сло-

  во.

       Описание.

       Программа системного обслуживания  $UPDSEC  использует

  квоту предела прямого ввода-вывода (DIRIO) вызывающего про-

  цесса  при  постановке  в  очередь  запроса   на   операцию

  ввода-вывода и, если задан аргумент ASTADR, использует кво-

  ту предел AST (ASTLM) вызывающего процесса.

       Для корректного использования данной программы систем-

  ного обслуживания требуется, чтобы вызывающий процесс синх-




                          - 1177 -

                        00152-01 97 06


  ронизировал завершение запроса  на  обновление.  Для  этого

  сначала необходимо проверить  код  состояния,  возвращаемый

  программой $UPDSEC в регистре R0. Если возвращено  значение

  SS$_NOTMODIFIED, вызывающий процесс может продолжать  рабо-

  ту. Если возвращено значение SS$_NORMAL, то вызывающий про-

  цесс должен подождать завершения ввода-вывода и потом  про-

  верить окончательное состояние завершения в блоке состояния

  ввода-вывода.   Для   определения   того,   что    операция

  ввода-вывода  фактически  завершилась,  можно  использовать

  программу   системного   обслуживания    "синхронизировать"

  ($SYNCH).

       Возвращаемые значения кода состояния:

       SS$_NORMAL      - успешное завершение. В  очередь  был

                       поставлен один или несколько  запросов

                       на операцию ввода-вывода;

       SS$_NOTMODIFIED - успешное  завершение.  В   диапазоне

                       входных адресов не оказалось модифици-

                       рованных страниц. Запросы на  операции

                       ввода-вывода в очередь не ставились;

       SS$_ACCVIO      - вызывающая программа не может прочи-

                       тать массив  входных  адресов  или  не

                       может записать массив  выходных  адре-

                       сов;

       SS$_EXQUOTA     - процесс превысил свою квоту  предела

                       AST;

       SS$_ILLEFC      - указан  недопустимый   номер   флага

                       события;




                          - 1178 -

                        00152-01 97 06


       SS$_IVSECFLG    - задан недопустимый флаг;

       SS$_NOTCREATOR  - секция размещается в памяти,  разде-

                       ляемой несколькими процессорами, и она

                       была создана процессом, работающим  на

                       другом процессоре;

       SS$_NOPRIV      - страница в заданном диапазоне  нахо-

                       дится  в  системном  адресном   прост-

                       рантстве;

       SS$_PAGOWNVIO   - страница в заданном  диапазоне  при-

                       надлежит   более    привилегированному

                       режиму  доступа,  чем  режим   доступа

                       вызывающего процесса;

       SS$_SHMNOTCNCT  секция определена как  секция,  разме-

                       щенная в  разделяемой  памяти,  однако

                       такая  разделяемая  память  неизвестна

                       системе;

       SS$_UNASCEFC    - процесс  не  связан   с   кластером,

                       содержащим указанный флаг события.



       13.116. $UPDSECW  -  обновить  файл  секции  на

               диске и ждать


       Программа системного обслуживания $UPDSECW  записывает

  все модифицированные страницы в активной  личной  или  гло-

  бальной секции обратно в файл секции на  диске.  В  очередь

  ставится  один   или   несколько   запросов   на   операцию

  ввода-вывода, в зависимости от количества  модифицированных

  страниц.



                          - 1179 -

                        00152-01 97 06


       Программа системного обслуживания $UPDSECW завершается

  синхронно; то есть, она возвращает  управление  вызывающему

  процессу после записи всех обновленных страниц.

       Для асинхронного  завершения  необходимо  использовать

  программу системного обслуживания "обновить файл секции  на

  диске" ($UPDSEC); $UPDSEC возвращает управление вызывающему

  процессу после постановки в очередь запроса на  обновление,

  не ожидая, когда страницы будут обновлены.

       Во всех других отношениях программа $UPDSECW идентична

  $UPDSEC. Вся остальная информация  о  программе  системного

  обслуживания $UPDSECW содержится в  описании  $UPDSEC  (см.

  подраздел 2.5).

       Формат:

        SYS$UPDSECW      INADR[,RETADR][,ACMODE][,UPDFLG]

                         [,EFN][,IOSB][,ASTADR][,ASTPRM]



       13.117. $WAITFR - ждать один флаг события


       Программа системного  обслуживания  $WAITFR  проверяет

  указанный флаг события и сразу  же  возвращает  управление,

  если флаг установлен. В противном случае процесс переводит-

  ся в состояние ожидания до тех пор,  пока  данный  флаг  не

  будет установлен.

       Формат:

        SYS$WAITFR     EFN









                          - 1180 -

                        00152-01 97 06


       Аргументы:

        EFN

        использование в МОС ВП: EF-NUMBER

        тип:                    длинное слово (без знака)

        доступ:                 только чтение

        механизм:               по значению

       Номер флага события, установку  которого  контролирует

  программа системного обслуживания.  Аргумент  EFN  является

  длинным словом, содержащим данный номер.

       Описание:

       Состояние ожидания, вызванное данной  программой  сис-

  темного обслуживания, может быть прервано асинхронным  сис-

  темным прерыванием (AST),  если  режим  доступа  с  которым

  выполняется AST равен или является более привилегированным,

  чем режим доступа процесса, вызвавшего программу $WAITFR  и

  процессу разрешены прерывания в данном режиме доступа.

       Если состояние ожидания прерывается  прерыванием  AST,

  то после того  как  подпрограмма  обработки  AST  завершает

  выполнение, операционная система МОС  ВП  повторяет  запрос

  программы $WAITFR для процесса. В данной точке,  если  флаг

  события установлен, то процесс возобновляет выполнение.

       Возвращаемые значения кода состояния:

       SS$_NORMAL  - программа системного обслуживания успеш-

                   но завершилась;

       SS$_ILLEFC  - указан неверный номер флага события;

       SS$_UNASEFC - процесс не связан с кластером,  содержа-

                   щим указанный флаг события.




                          - 1181 -

                        00152-01 97 06


       13.118. $WAKE - пробудить процесс от спячки


       Программа системного обслуживания  $WAKE  активизирует

  процесс, который перевел себя в состояние спячки при помощи

  программы системного обслуживания "спячка" ($HIBER).

       Формат:

       SYS$WAKE     [PIDADR],[PRCNAM]

       Аргументы:

       PIDADR

       Использование в МОС ВП: PROCESS_ID

       Тип:                    длинное слово (без знака)

       Доступ:                 модификация

       Механизм:               по ссылке

       Идентификатор процесса (PID), который требуется пробу-

  дить. Аргумент PIDADR - это адрес длинного слова,  содержа-

  щего PID.

       PRCNAM

       Использование в МОС ВП: PROCESS_NAME

       Тип:                    строка текста

       Доступ:                 только чтение

       Механизм:               по дескриптору - дескриптор

                               строки с фиксированной длиной

       Имя процесса, который  требуется  пробудить.  Аргумент

  PRCNAM - это адрес дескриптора символьной строки, указываю-

  щего на строку имени процесса длиной от 1 до 15 символов.

       Имя процесса неявно квалифицируется номером группы UIC

  вызывающего процесса. Поэтому аргумент PRCNAM можно исполь-

  зовать только в тех  случаях,  когда  пробуждаемый  процесс



                          - 1182 -

                        00152-01 97 06


  находится в той же группе UIC, что  и  вызывающий  процесс.

  Для пробуждения процесса в  другой  группе  UIC  необходимо

  использовать аргумент PIDADR.

       Если не заданы ни аргумент PIDADR, ни аргумент PRCNAM,

  то запрос на пробуждение выдается для вызывающего процесса.

       Описание:

       В зависимости  от  конкретной  операции  использование

  программы $WAKE может  потребовать  наличия  у  вызывающего

  процесса одной из следующих привилегий:

       1) привилегия GROUP нужна для  того,  чтобы  пробудить

  другой процесс в той же группе  UIC,  если  данный  процесс

  имеет UIC, отличный от IC вызывающего процесса;

       2) привилегия WORLD требуется для  пробуждения  любого

  другого процесса в системе.

       Если для процесса, который в текущий момент  не  нахо-

  дится в состоянии спячки, выдан один или несколько запросов

  на пробуждение, то последующий запрос на  спячку  сразу  же

  завершится, то есть, процесс не будет переведен  в  спячку.

  Для выставленных запросов на пробуждение счетчик не  ведет-

  ся.

       Процесс, находящийся в спячке, можно  также  пробудить

  при помощи программы системного обслуживания "запланировать

  пробуждение" ($SCHDWK).












                          - 1183 -

                        00152-01 97 06


       Возвращаемые значения кода состояния:

       SS$NORMAL    - успешное завершение;

       SS$ACCVIO    - вызывающая программа не может прочитать

                    строку  имени  процесса  или   дескриптор

                    строки; либо не может записать  идентифи-

                    катор процесса;

       SS$IVLOGNAM  - заданная строка  имени  процесса  имеет

                    нулевую длину или длину более  15  симво-

                    лов;

       SS$NONEXPR   - предупреждение.  Указанный  процесс  не

                    существует, либо задан неверный идентифи-

                    катор процесса;

       SS$NOPRIV    - у процесса нет привилегии на  пробужде-

                    ние указанного процесса.



       13.119. $WFLAND - ждать логического "и"  флагов

               событий


       Программа системного  обслуживания  $WFLAND  позволяет

  процессу задавать группу флагов событий, которые  он  будет

  ожидать. Процесс переходит в состояние ожидания до тех пор,

  пока не будут установлены все указанные  флаги  событий.  В

  данный момент программа $WFLAND возвращает управление вызы-

  вающему процессу и выполнение возобновляется.











                          - 1184 -

                        00152-01 97 06


       Формат:

       SYS$WFLAND EFN,MASK

       Аргументы:

       EFN

       Использование в МОС ВП: EF_NUMBER

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Номер любого флага события в кластере флагов  событий,

  который  должен  использоваться  программой.  Аргумент  EFN

  является длинным словом, содержащим данный номер.  Указание

  какого-то флага события в кластере служит для идентификации

  данного кластера флагов событий.

       Имеется два кластера локальных флагов событий: кластер

  0 и кластер 1. Кластер 0 содержит флаги событий от 0 до 31,

  кластер 1 содержит флаги событий от 32 до 63.

       Имеется два кластера общих флагов событий: кластер 2 и

  кластер 3. Кластер 2 содержит флаги событий от 64 до 95,  а

  кластер 3 содержит флаги событий от 96 до 127.

       MASK

       Использование: MASK_LONGWORD

       Тип:           длинное слово (без знака)

       Доступ:        только чтение

       Механизм:      по значению

       Флаги событий, которых ожидает процесс. Аргумент  MASK

  является длинным словом, содержащим вектор битов, где  каж-

  дый бит, если он установлен, указывает соответствующий флаг




                          - 1185 -

                        00152-01 97 06


  события, который ожидает процесс.

       Описание:

       Состояние ожидания, вызванное данной  программой  сис-

  темного обслуживания, может быть прервано асинхронным  сис-

  темным прерыванием (AST), если  режим  доступа,  с  которым

  выполняется AST, равен или является  более  привилегирован-

  ным,  чем  режим  доступа  процесса,  вызвавшего  программу

  $WFLAND и процессу разрешены  прерывания  в  данном  режиме

  доступа.

       Если состояние ожидания прерывается по AST,  то  после

  того как программа обработки AST завершает выполнение, опе-

  рационная система МОС ВП повторяет запрос программы $WFLAND

  для процесса. В данной точке, если флаги событий установле-

  ны, то процесс возобновляет выполнение.

       Возвращаемые значения кода состояния:

       SS$NORMAL    - програма системного обслуживания успеш-

                    но завершилась;

       SS$ILLEFC    - указан неверный номер флага события;

       SS$UNASEFC   - процесс не связан с кластером, содержа-

                    щим указанный флаг события.



       13.120. $WFLOR - ждать логического "или" флагов

               событий


       Программа  системного  обслуживания  $WFLOR  позволяет

  процессу задавать группу флагов событий, которые  он  хочет

  ожидать. Процесс переводится в состояние  ожидания  до  тех

  пор, пока не будет установлен хотя  бы  один  из  указанных



                          - 1186 -

                        00152-01 97 06


  флагов событий,  после  чего  программа  $WFLOR  возвращает

  управление вызывающему процессу и выполнение  возобновляет-

  ся.

       Формат:

       SYS$WFLOR     EFN,MASK

       Аргументы:

       EFN

       Использование в МОС ВП: EF_NUMBER

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению

       Номер любого флага события в кластере флагов  событий,

  который должен использоваться данной  программой.  Аргумент

  EFN является длинным словом, содержащим данный номер.  Ука-

  зание какого-то флага события в кластере служит для иденти-

  фикации данного кластера флагов событий.

       Имеется два кластера локальных флагов событий: кластер

  0 и кластер 1. Кластер 0 содержит флаги событий от 0 до 31,

  кластер 1 содержит флаги событий от 32 до 63.

       Имеется два кластера общих флагов событий: кластер 2 и

  кластер 3. Кластер 2 содержит флаги событий от 64 до 95,  а

  кластер 3 содержит флаги событий от 96 до 127.

       MASK

       Использование в МОС ВП: MASK_LONGWORD

       Тип:                    длинное слово (без знака)

       Доступ:                 только чтение

       Механизм:               по значению




                          - 1187 -

                        00152-01 97 06


       Флаги событий, которых ожидает процесс. Аргумент  MASK

  является длинным словом, содержащим вектор битов, где  каж-

  дый бит, если о установлен, указывает соответствующий  флаг

  события, который ожидает процесс.

       Описание:

       Состояние ожидания, вызванное данной  программой  сис-

  темного обслуживания может быть прервано  асинхронным  сис-

  темным прерыванием (AST), если  режим  доступа,  с  которым

  выполняется AST, равен или является  более  привилегирован-

  ным,  чем  режим  доступа  процесса,  вызвавшего  программу

  $WFLOR и процессу разрешены прерывания в данном режиме дос-

  тупа.

       Если состояние ожидания прерывается  прерыванием  AST,

  то после того, как программа обработки AST завершает выпол-

  нение, операционная система МОС ВП повторяет  запрос  прог-

  раммы $WFLOR для процесса. В данной точке, если флаг  собы-

  тия установлен, то процесс возобновляет выполнение.

       Возвращаемые значения кода состояния:

       SS$NORMAL    - программа    системного    обслуживания

                    успешно завершилась;

       SS$ILLEFC    - указан неверный флаг события;

       SS$UNASEFC   - процесс не связан с кластером, содержа-

                    щим указанный флаг события.












           	       - 1188K - 

 		   2б.00152-01 97 06




                 Перечень ссылочных документов




       1. Операционная система  МОС  ВП.  Система  управления

  данными СУД-32. Программирование на  языке  макроассемблер.

  Руководство программиста 2б.00152-01 33 07

       2. Операционная система МОС ВП. Подсистема  системного

  сервиса. Управление вводом-выводом. Руководство программис-

  та 2б.00152-01 33 03

       3. Операционная система МОС ВП. Система программирова-

  ния на языке макроассемблер. Описание языка

  2б.00152-01 35 01

       4. Операционная система МОС ВП. Система программирова-

  ния  на  языке  макроассемблер.  Руководство   программиста

  2б.00152-01 33 01

       5. Операционная система МОС ВП. Архитектура и  система

  машинных инструкций. Справочный материал

  2б.00152-01 97 01-1

       6. Операционная система МОС ВП. Архитектура и  система

  машинных инструкций. Справочный материал

  2б.00152-01 97 01-2

       7. Операционная система МОС ВП. Подсистема управления.

  Права доступа. Справочный материал

  2б.00152-01 97 15-1

       8. Операционная система МОС ВП. Подсистема управления.

  Права доступа. Справочный материал 2б.00152-01 97 15-2




                          - 1189К -

		     2б.00152-01 97 06


       9. Операционная система МОС ВП. Подсистема управления.

  Сообщения системы и действия по восстановлению.  Справочный

  материал 2б.00152-01 97 02-1

       10. Операционная система МОС ВП.  Подсистема  управле-

  ния. Сообщения системы и действия по восстановлению.  Спра-

  вочный материал 2б.00152-01 97 02-2

       11. Операционная система МОС ВП.  Описание  применения

  2б.00152-01 31 01

       12. Операционная система МОС ВП.  Подсистема  исполни-

  тельной библиотеки. Руководство программиста  

  2б.00152-01 33 09-1

       13. Операционная система МОС ВП.  Подсистема  исполни-

  тельной библиотеки. Руководство программиста  

  2б.00152-01 33 09-2

       14. Операционная система МОС ВП.  Подсистема  исполни-

  тельной библиотеки. Руководство программиста  

  2б.00152-01 33 09-3

       15. Операционная система МОС ВП.  Подсистема  исполни-

  тельной библиотеки. Руководство программиста  

  2б.00152-01 33 09-4

       16. Операционная система МОС ВП.  Подсистема  исполни-

  тельной библиотеки. Руководство программиста  

  2б.00152-01 33 09-5

       17. Операционная система МОС ВП. Подсистема разработки

  программ. Программа компоновщик.  Руководство  программиста

  2б.00152-01 33 04

       18. Операционная система МОС ВП. Подсистема системного




                          - 1190К -

		      2б.00152-01 97 06


  программиста.  Управление  системой.  Справочный   материал

  2б.00152-01 97 10









































			- 1191К -

		   2б.00152-01 97 06


 ------------------------------------------------------------
 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
  
  
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!