1. Если в операторе RECEIVE (ПОЛУЧИТЬ) задана фраза NO DATA (НЕТ ДАННЫХ), то выполнение оператора RECEIVE (ПОЛУЧИТЬ) закапчивается указанием па завершение действия и управление передается повелителыгому-оператору-1. Выполне­ние продолжается согласно правилам, определенным для каждого оператора, указанного в повелительном-операторе-1.

Если это оператор ветвления процедур или условный оператор, который явно передает управление, то передача управления осу­ществляется согласно правилам для используемых операторов; в противном случае после выполнения повелительного-оператора-1 управление передается в конец оператора RECEIVE (ПОЛУ­ЧИТЬ), а фраза WITH DATA (ЕСТЬ ДАННЫЕ), если указана, игнорируется.

  1. Если фраза NO DATA (НЕТ ДАННЫХ) не задана в опера­торе RECEIVE (ПОЛУЧИТЬ), то выполнение объектной програм­мы приостанавливается до тех пор, пока данные не будут доступ­ны в области, определенной идентификатором-1.

  2. Если одна или несколько очередей / или подочередей I не известны системе управления сообщениями, то устанавливается со­ответствующий код и управление передается как в случае доступ­ности данных.

  1. При каждом выполнении оператора RECEIVE (ПОЛУ­ЧИТЬ) данные, определенные именем-коммуникации-1, обновля­ются системой управления сообщениями (см. п. 2.2 настоящей час­ти).

  2. Однократное выполнение оператора RECEIVE (ПОЛУ­ЧИТЬ) никогда не приводит к передаче более одного сообщения, если задана фраза MESSAGE (СООБЩЕНИЕ), или одного сег­мента, если задана фраза SEGMENT (СЕГМЕНТ), в область, определенную идентификатором-1. Вместе с тем, система управ­ления сообщениями не передает никакой части сообщения объ­ектной программе до тех пор, пока сообщение не станет полно­стью доступно во входной очереди, даже если задана фраза SEGMENT (СЕГМЕНТ) оператора RECEIVE (ПОЛУЧИТЬ).

  3. J При использовании фразы MESSAGE (СООБЩЕНИЕ) индикаторы конца сегмента игнорируются, а передача данных про­исходит по следующим правилам:

  1. если размер сообщения совпадает с размером области, опре­деленной идентификатором-!, сообщение запоминается в этой об­ласти;

  2. если размер сообщения меньше размера области, то оно вы­равнивается к самой левой позиции литеры области идентификато­ра-!; позиции, не занятые сообщением, не изменяются;

  3. если размер сообщения больше размера области, то сообще­ние заполняет область идентификатора-1 слева направо, начиная с самой левой литеры сообщения. В уровне 1 расположение остатка сообщения не определено. I в уровне 2 остаток можно передать в область, определенную идентификатором-!, следующими опе­раторами RECEIVE (ПОЛУЧИТЬ), относящимися к той же оче­реди, подочереди и так далее. Остаток сообщения рассматрива­ется как новое сообщение и к нему применимы приведенные вы- ше правила 8а, 86, 8в;

  4. если с текстом передаваемого оператором RECEIVE (ПО­ЛУЧИТЬ) сообщения связан индикатор конца группы, то предпо­лагается существование индикатора конца сообщения.

  1. Если используется фраза SEGMENT (СЕГМЕНТ), при­меняются следующие правила передачи данных:

  1. если размер сегмента совпадает с размером области, опре­деленной идентификатором-!, сегмент запоминается в этой об­ласти;

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

фикатора-1; позиции, ие занятые сообщением, не изменяются;

  1. если размер сегмента больше размера области идентифи­катора-1, сегмент заполняет область слева направо, начиная с самой левой литеры сегмента. Остаток сегмента может быть пе­редан в область, определенную идентификатором-1, следующи­ми операторами RECEIVE (ПОЛУЧИТЬ), относящимися к той же очереди, подочереди и так далее. Остаток сегмента рассмат­ривается как новый сегмент и к нему применимы приведенные выше правила 9а, 96, 9в;

  2. если с текстом, доступным по оператору RECEIVE (ПО­ЛУЧИТЬ), связан индикатор конца группы или индикатор конца сообщения, предполагается существование индикатора конца сегмента.

  1. Когда выполнение оператора RECEIVE (ПОЛУЧИТЬ) делает доступным часть сообщения, только последующее выпол­нение операторов RECEIVE (ПОЛУЧИТЬ) в этом же исполняе­мом модуле может привести к передаче оставшейся части сооб­щения.

• (11) Фраза END-RECEIVE (КОНЁЦЛЮЛУЧИТЬ) ограничи- вает область действия оператора RECEIVE (ПОЛУЧИТЬ) (см. ч. 4, п. 6.4.3).

3.6. Оператор SEND (ПОСЛАТЬ)

  1. Назначение

Оператор SEND (ПОСЛАТЬ) приводит к передаче сообщения, сегмента либо части сообщения или сегмента / в одну /или / несколько I выходных очередей посредством программы управ­ления сообщениями.

  1. Общий формат

Формат 1

SEND имя-коммуникации-1 FROM идентификатор-1

ПОСЛАТЬ имя-коммуникации-1 ИЗ ПОЛЯ идентификатор-1

Формат 2

SEND имя-коммуникации-1 [FROM идентификатор-1]

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

W

ADVANCING

IBEFORE 1
j AFTER j

ITH ESI

WITH EMI

WITH EGI

I идентификатор-3 ] [LINE 1

і целое-1 /[LINES]

(


МНЄМОНИЧЄСКОС-ИМЯ-1 I

PAGE

)

I [REPLACING LINE]

ПОСЛАТЬ имя-коммуникации-1 [ИЗ ПОЛЯ идентификатор-1]

С идентификатор-2 С ИКС

С ИКЩ

С икг

[/'идентификатор-З'Істрд^ -

, [[целое-1 J

{ ПОСЛЕ I ПРОДВИЖЕНИЯ {[м^ическое-им^І

I СТРАНИЦЫ

)

[ЗАМЕНЯЯ СТРОКУ]

  1. Синтаксические правила

  1. Имя-коммуникации-1 должно относиться к описанию ком­муникации для вывода или для ввода-вывода.

  2. Идентификатор-2 должен представлять целое из одной цифры без знака.

  3. Идентификатор-3 должен представлять целое.

  4. Если используется мнемоническое-имя-1, оно идентифи­цирует конкретные свойства, определяемые реализацией. Мнемо­ническое-имя-1 определяется в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования.

  5. Целое-1 или значение идентификатора-3 может быть ну­лем.

  1. Общие правила

Все форматы

Когда приемное коммуникационное устройство ориентиро­вано на фиксированный размер строки (например дисплей, перфо-карточное устройство вывода, печатающее устройство), выполня­ется следующее:

  1. каждое сообщение ] или сегмент сообщения | начинается в крайней левой позиции литеры физической строки;

  2. если размер сообщения или сегмента сообщения | мень­ше, чем размер физической строки, сообщение дополняется пробе­лами справа;

  3. избыточные литеры сообщения / или сегмента сообщения I не усекаются. После заполнения физической строки она выводится на устройство. Избыточные литеры переносятся на следующую строку.

  1. Когда приемное коммуникационное устройство ориентиро­вано на обработку сообщений переменной длины (как, например, перфоленточное устройство вывода, другая ЭВМ), каждое сооб­щение [ или сегмент сообщения I начинается со следующей до­ступной позиции литеры коммуникационного устройства.

  2. Во время выполнения оператора SEND (ПОСЛАТЬ) сис­тема управления сообщениями интерпретирует значение длины текста в области, к которой относится имя-коммуникации-1, как заданное пользователем число позиций литер, начиная от крайней слева, в области идентификатора-1, из которой будут передавать­ся данные.

Если значение длины текста равно нулю, то никакие литеры идентификатора-1 не передаются.

Если значение длины текста лежит вне диапазона чисел от ну­ля до размера идентификатора-1 включительно, то значение клю­ча состояния указывает на ошибку и данные не передаются.

  1. Во время выполнения оператора SEND (ПОСЛАТЬ) зна­чение ключа состояния, связанного с именем-коммуникации-1, об­новляется системой управления сообщениями.

  2. При наличии в значении идентификатора-1 специальных символов управления результат выполнения оператора не опреде­лен.

  3. I Однократное выполнение оператора SEND (ПОС­ЛАТЬ) формата 1 приводит к передаче в систему управления сообщениями только одной части сообщения или сегмента сооб- щения.

Однократное выполнение оператора SEND (ПОСЛАТЬ) фор­мата 2 передает системе управления сообщениями не более одного сообщения или сегмента сообщения | в соответствии со j значением идентификатора-2 или заданным индикатором [ ESI (ЙКС)7| ЕМ1 (ИКЩ), EGI (ИКГ).

Однако система управления сообщениями передает сооб­щение коммуникационному устройству только тогда, когда все сообщение будет полностью у нее.

  1. Во время выполнения единицы исполнения размещение части сообщения, не законченного по ЕМІ (ИКЩ), EGI (ИКГ) или не уничтоженного оператором PURGE (ОЧИСТИТЬ), не определено.

Для системы управления сообщениями такое сообщение ло­гически не существует и, следовательно, не может быть послано адресату.

  1. Если выполнение оператора SEND (ПОСЛАТЬ) переда­ет системе управления сообщениями часть сообщения, то только последующее выполнение оператора SEND (ПОСЛАТЬ) в той же единице исполнения может привести к передаче оставшейся части сообщения.

Формат 2

  1. Значение идентификатора-2 указывает, что. значение идентификатора-1, если он определен, имеет связанный с ним индикатор конца сегмента, индикатор конца сообщения, индика­тор конца группы или не имеет индикатора (что означает пере­дачу части сегмента или сообщения). Если идентификатор-1 не определен, то только индикатор пересылается системе управле­ния сообщениями.

Значение идентификатора-2

Тип индикатора, связанный со значением идентификатора-1

Комментарий

0

Нет индикатора

Часть сообщения или сег­мента

1

ESI (ИКС) (индикатор конца сегмента)

Конец текущего сегмента

2

EMI (ИКЩ) (индикатор конца сообщения)

Конец текущего сообще­ния

3

EGI (ИКГ) (индикатор конца группы)

Конец текущей группы со­общений



Любое другое значение идентификатора-2 будет трактовать­ся как нуль. В этом случае значение ключа состояния, связанно­го с именем-коммуникации-1, указывает на ошибку и данные не передаются.

Фраза WITH EGI (С ИКГ) указывает системе управления сообщениями, что закончена группа сообщений.Фраза WITH EMI (С ИКЩ) указывает системе управления со-, общениями, что сообщение закончено. ч]

Фраза WITH ESI (С ИКС) указывает системе управления сообщениями что сегмент сообщения закончен.

Система управления сообщениями распознает эти индикаторы и устанавливает необходимые средства управления группой, сооб­щением I и сегментом .

(И) Иерархия индикаторов конца следующая: EGI (ИКГ), EMI (ИКЩ), I ESI (ИКС) I .Индикатору EGI (ИКГ) могут не предшествовать ESI (ИКС), EMI (ИКЩ). | Индикатору

I EMI (ИКЩ) может не предшествовать ESI (ИКС).

  1. Фраза ADVANCING (ПРОДВИЖЕНИЯ) обеспечивает вертикальное позиционирование каждого сообщения или сег- | мента сообщения на коммуникационном устройстве, на кото­ром возможно вертикальное позиционирование.. Если вертикальное позиционирование невозможно на данном устройстве, система уп­равления сообщениями игнорирует заданное или подразумеваемое вертикальное позиционирование.

  2. Если задан идентификатор-2 и его значение равно ну­лю, то система управления сообщениями игнорирует фразу ADVANCING (ПРОДВИЖЕНИЯ) и фразу REPLACING (ЗА­МЕНЯЯ), если они указаны.

  3. На устройстве, где возможно вертикальное позициониро­вание, а фраза ADVANCING (ПРОДВИЖЕНИЯ) не задана, реа­лизация должна обеспечивать автоматическое продвижение, как если бы пользователь указал AFTER ADVANCING 1 LINE (ПОС­ЛЕ ПРОДВИЖЕНИЯ 1 СТРОК).

  4. Если явно или неявно указана фраза ADVANCING (ПРО­ДВИЖЕНИЯ) и вертикальное позиционирование возможно, при­меняются следующие правила: J

  1. если задан идентификатор-3 или целое, то литеры, переда­ваемые на коммуникационное устройство, будут перемещены вер­тикально вниз на количество строк, равное значению идентифика­тора-3 или целого;

  2. если значение данного, на которое ссылается идентификатор- 3, отрицательно, результат не определен;

если задано мнемоническое-имя-1, литеры, передаваемые на устройство, будут размещены по правилам, определенным ре- ализацией для этого устройства

  1. ;если используется фраза BEFORE (ДО), сообщение или сегмент сообщения передается на коммуникационное устрой­

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

  1. если используется фраза AFTER (ПОСЛЕ), сообщение или сегмент I передается на коммуникационное устройство пос­ле вертикального позиционирования в соответствии с указанными выше правилами;

ж) если задана фраза PAGE (СТРАНИЦЫ), то литеры, пере­даваемые на коммуникационное устройство, будут переданы на устройство до или после (в зависимости от используемого вариан­та) того, как устройство переведено на следующую страницу.

Если фраза PAGE (СТРАНИЦЫ) задана, но понятие страни­цы не имеет смысла для данного устройства, то продвижение дол­жно быть обеспечено реализацией как если бы пользователь ука­зал фразу BEFORE (ДО) или AFTER ADVANCING 1 LINE (ПОС­ЛЕ ПРОДВИЖЕНИЯ 1 СТРОК) (в зависимости от используемо­го варианта).

  1. Если принимающее коммуникационное устройство явля­ется устройством отображения символов, на котором возможно на одной и той же позиции представлять одну или более литер и, если устройство позволяет выбрать: либо последовательность литер на­кладывается на литеру, уже выведенную на дисплей, либо литера замещает другую литеру, предварительно выведенную на строку

дисплея, то:

а) если фраза REPLACING (ЗАМЕНЯЯ) указана, то лите­ры, передаваемые при помощи оператора SEND (ПОСЛАТЬ), замещают все литеры, ранее переданные на эту же строку, на­чиная с крайней левой позиции;

если фраза REPLACING (ЗАМЕНЯЯ) не указана, то литеры, передаваемые при помощи оператора SEND (ПОСЛАТЬ), будут накладываться на литеры, предварительно пересланные па эту же строку, начиная с крайней левой позиции.