Если в операторе RECEIVE (ПОЛУЧИТЬ) задана фраза NO DATA (НЕТ ДАННЫХ), то выполнение оператора RECEIVE (ПОЛУЧИТЬ) закапчивается указанием па завершение действия и управление передается повелителыгому-оператору-1. Выполнение продолжается согласно правилам, определенным для каждого оператора, указанного в повелительном-операторе-1.
Если это оператор ветвления процедур или условный оператор, который явно передает управление, то передача управления осуществляется согласно правилам для используемых операторов; в противном случае после выполнения повелительного-оператора-1 управление передается в конец оператора RECEIVE (ПОЛУЧИТЬ), а фраза WITH DATA (ЕСТЬ ДАННЫЕ), если указана, игнорируется.
Если фраза NO DATA (НЕТ ДАННЫХ) не задана в операторе RECEIVE (ПОЛУЧИТЬ), то выполнение объектной программы приостанавливается до тех пор, пока данные не будут доступны в области, определенной идентификатором-1.
Если одна или несколько очередей / или подочередей I не известны системе управления сообщениями, то устанавливается соответствующий код и управление передается как в случае доступности данных.
При каждом выполнении оператора RECEIVE (ПОЛУЧИТЬ) данные, определенные именем-коммуникации-1, обновляются системой управления сообщениями (см. п. 2.2 настоящей части).
Однократное выполнение оператора RECEIVE (ПОЛУЧИТЬ) никогда не приводит к передаче более одного сообщения, если задана фраза MESSAGE (СООБЩЕНИЕ), или одного сегмента, если задана фраза SEGMENT (СЕГМЕНТ), в область, определенную идентификатором-1. Вместе с тем, система управления сообщениями не передает никакой части сообщения объектной программе до тех пор, пока сообщение не станет полностью доступно во входной очереди, даже если задана фраза SEGMENT (СЕГМЕНТ) оператора RECEIVE (ПОЛУЧИТЬ).
J При использовании фразы MESSAGE (СООБЩЕНИЕ) индикаторы конца сегмента игнорируются, а передача данных происходит по следующим правилам:
если размер сообщения совпадает с размером области, определенной идентификатором-!, сообщение запоминается в этой области;
если размер сообщения меньше размера области, то оно выравнивается к самой левой позиции литеры области идентификатора-!; позиции, не занятые сообщением, не изменяются;
если размер сообщения больше размера области, то сообщение заполняет область идентификатора-1 слева направо, начиная с самой левой литеры сообщения. В уровне 1 расположение остатка сообщения не определено. I в уровне 2 остаток можно передать в область, определенную идентификатором-!, следующими операторами RECEIVE (ПОЛУЧИТЬ), относящимися к той же очереди, подочереди и так далее. Остаток сообщения рассматривается как новое сообщение и к нему применимы приведенные вы- ше правила 8а, 86, 8в;
если с текстом передаваемого оператором RECEIVE (ПОЛУЧИТЬ) сообщения связан индикатор конца группы, то предполагается существование индикатора конца сообщения.
Если используется фраза SEGMENT (СЕГМЕНТ), применяются следующие правила передачи данных:
если размер сегмента совпадает с размером области, определенной идентификатором-!, сегмент запоминается в этой области;
если размер сегмента меньше размера области, то сегмент выравнивается к самой левой позиции литеры области иденти-
фикатора-1; позиции, ие занятые сообщением, не изменяются;
если размер сегмента больше размера области идентификатора-1, сегмент заполняет область слева направо, начиная с самой левой литеры сегмента. Остаток сегмента может быть передан в область, определенную идентификатором-1, следующими операторами RECEIVE (ПОЛУЧИТЬ), относящимися к той же очереди, подочереди и так далее. Остаток сегмента рассматривается как новый сегмент и к нему применимы приведенные выше правила 9а, 96, 9в;
если с текстом, доступным по оператору RECEIVE (ПОЛУЧИТЬ), связан индикатор конца группы или индикатор конца сообщения, предполагается существование индикатора конца сегмента.
Когда выполнение оператора RECEIVE (ПОЛУЧИТЬ) делает доступным часть сообщения, только последующее выполнение операторов RECEIVE (ПОЛУЧИТЬ) в этом же исполняемом модуле может привести к передаче оставшейся части сообщения.
• (11) Фраза END-RECEIVE (КОНЁЦЛЮЛУЧИТЬ) ограничи- вает область действия оператора RECEIVE (ПОЛУЧИТЬ) (см. ч. 4, п. 6.4.3).
3.6. Оператор SEND (ПОСЛАТЬ)
Назначение
Оператор SEND (ПОСЛАТЬ) приводит к передаче сообщения, сегмента либо части сообщения или сегмента / в одну /или / несколько I выходных очередей посредством программы управления сообщениями.
Общий формат
Формат 1
SEND имя-коммуникации-1 FROM идентификатор-1
ПОСЛАТЬ имя-коммуникации-1 ИЗ ПОЛЯ идентификатор-1
Формат 2
SEND имя-коммуникации-1 [FROM идентификатор-1]
WITH идентификатор-2
W
ADVANCING
IBEFORE 1
j AFTER j
WITH EMI
WITH EGI
I идентификатор-3 ] [LINE 1
і целое-1 /[LINES]
(
PAGE
)
I [REPLACING LINE]
ПОСЛАТЬ имя-коммуникации-1 [ИЗ ПОЛЯ идентификатор-1]
С идентификатор-2 С ИКС
С ИКЩ
С икг
[/'идентификатор-З'Істрд^ -
, [[целое-1 J
{ ПОСЛЕ I ПРОДВИЖЕНИЯ {[м^ическое-им^І
I СТРАНИЦЫ
■ )
[ЗАМЕНЯЯ СТРОКУ]
Синтаксические правила
Имя-коммуникации-1 должно относиться к описанию коммуникации для вывода или для ввода-вывода.
Идентификатор-2 должен представлять целое из одной цифры без знака.
Идентификатор-3 должен представлять целое.
Если используется мнемоническое-имя-1, оно идентифицирует конкретные свойства, определяемые реализацией. Мнемоническое-имя-1 определяется в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования.
Целое-1 или значение идентификатора-3 может быть нулем.
Общие правила
Все форматы
Когда приемное коммуникационное устройство ориентировано на фиксированный размер строки (например дисплей, перфо-карточное устройство вывода, печатающее устройство), выполняется следующее:
каждое сообщение ] или сегмент сообщения | начинается в крайней левой позиции литеры физической строки;
если размер сообщения или сегмента сообщения | меньше, чем размер физической строки, сообщение дополняется пробелами справа;
избыточные литеры сообщения / или сегмента сообщения I не усекаются. После заполнения физической строки она выводится на устройство. Избыточные литеры переносятся на следующую строку.
Когда приемное коммуникационное устройство ориентировано на обработку сообщений переменной длины (как, например, перфоленточное устройство вывода, другая ЭВМ), каждое сообщение [ или сегмент сообщения I начинается со следующей доступной позиции литеры коммуникационного устройства.
Во время выполнения оператора SEND (ПОСЛАТЬ) система управления сообщениями интерпретирует значение длины текста в области, к которой относится имя-коммуникации-1, как заданное пользователем число позиций литер, начиная от крайней слева, в области идентификатора-1, из которой будут передаваться данные.
Если значение длины текста равно нулю, то никакие литеры идентификатора-1 не передаются.
Если значение длины текста лежит вне диапазона чисел от нуля до размера идентификатора-1 включительно, то значение ключа состояния указывает на ошибку и данные не передаются.
Во время выполнения оператора SEND (ПОСЛАТЬ) значение ключа состояния, связанного с именем-коммуникации-1, обновляется системой управления сообщениями.
При наличии в значении идентификатора-1 специальных символов управления результат выполнения оператора не определен.
I Однократное выполнение оператора SEND (ПОСЛАТЬ) формата 1 приводит к передаче в систему управления сообщениями только одной части сообщения или сегмента сооб- щения.
Однократное выполнение оператора SEND (ПОСЛАТЬ) формата 2 передает системе управления сообщениями не более одного сообщения или сегмента сообщения | в соответствии со j значением идентификатора-2 или заданным индикатором [ ESI (ЙКС)7| ЕМ1 (ИКЩ), EGI (ИКГ).
Однако система управления сообщениями передает сообщение коммуникационному устройству только тогда, когда все сообщение будет полностью у нее.
Во время выполнения единицы исполнения размещение части сообщения, не законченного по ЕМІ (ИКЩ), EGI (ИКГ) или не уничтоженного оператором PURGE (ОЧИСТИТЬ), не определено.
Для системы управления сообщениями такое сообщение логически не существует и, следовательно, не может быть послано адресату.
Если выполнение оператора SEND (ПОСЛАТЬ) передает системе управления сообщениями часть сообщения, то только последующее выполнение оператора SEND (ПОСЛАТЬ) в той же единице исполнения может привести к передаче оставшейся части сообщения.
Формат 2
Значение идентификатора-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 (ИКС).
Фраза ADVANCING (ПРОДВИЖЕНИЯ) обеспечивает вертикальное позиционирование каждого сообщения или сег- | мента сообщения на коммуникационном устройстве, на котором возможно вертикальное позиционирование.. Если вертикальное позиционирование невозможно на данном устройстве, система управления сообщениями игнорирует заданное или подразумеваемое вертикальное позиционирование.
Если задан идентификатор-2 и его значение равно нулю, то система управления сообщениями игнорирует фразу ADVANCING (ПРОДВИЖЕНИЯ) и фразу REPLACING (ЗАМЕНЯЯ), если они указаны.
На устройстве, где возможно вертикальное позиционирование, а фраза ADVANCING (ПРОДВИЖЕНИЯ) не задана, реализация должна обеспечивать автоматическое продвижение, как если бы пользователь указал AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК).
Если явно или неявно указана фраза ADVANCING (ПРОДВИЖЕНИЯ) и вертикальное позиционирование возможно, применяются следующие правила: J
если задан идентификатор-3 или целое, то литеры, передаваемые на коммуникационное устройство, будут перемещены вертикально вниз на количество строк, равное значению идентификатора-3 или целого;
если значение данного, на которое ссылается идентификатор- 3, отрицательно, результат не определен;
если задано мнемоническое-имя-1, литеры, передаваемые на устройство, будут размещены по правилам, определенным ре- ализацией для этого устройства
;если используется фраза BEFORE (ДО), сообщение или сегмент сообщения передается на коммуникационное устрой
ство до вертикального позиционирования в соответствии с указанными выше правилами;
если используется фраза AFTER (ПОСЛЕ), сообщение или сегмент I передается на коммуникационное устройство после вертикального позиционирования в соответствии с указанными выше правилами;
ж) если задана фраза PAGE (СТРАНИЦЫ), то литеры, передаваемые на коммуникационное устройство, будут переданы на устройство до или после (в зависимости от используемого варианта) того, как устройство переведено на следующую страницу.
Если фраза PAGE (СТРАНИЦЫ) задана, но понятие страницы не имеет смысла для данного устройства, то продвижение должно быть обеспечено реализацией как если бы пользователь указал фразу BEFORE (ДО) или AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК) (в зависимости от используемого варианта).
Если принимающее коммуникационное устройство является устройством отображения символов, на котором возможно на одной и той же позиции представлять одну или более литер и, если устройство позволяет выбрать: либо последовательность литер накладывается на литеру, уже выведенную на дисплей, либо литера замещает другую литеру, предварительно выведенную на строку
дисплея, то:
а) если фраза REPLACING (ЗАМЕНЯЯ) указана, то литеры, передаваемые при помощи оператора SEND (ПОСЛАТЬ), замещают все литеры, ранее переданные на эту же строку, начиная с крайней левой позиции;
если фраза REPLACING (ЗАМЕНЯЯ) не указана, то литеры, передаваемые при помощи оператора SEND (ПОСЛАТЬ), будут накладываться на литеры, предварительно пересланные па эту же строку, начиная с крайней левой позиции.