В результате выполнения последующего оператора RECEIVE (ПОЛУЧИТЬ), связанного с данной статьей описания коммуникации, имеющееся сообщение будет передаваться объектной программе.
Определение метода вызова
Исходную программу можно написать так, что объектная программа может быть вызвана для выполнения любым из двух методов. Для определения метода вызова объектной программы необходимо следующее:
исходная программа должна содержать одну статью описания коммуникации, содержащую фразу FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА) или FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА);
если программа содержит статью описания коммуникации с фразой FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА)„ в разделе процедур могут содержаться операторы для проверки начального значения имени символической очереди в этой статье описания коммуникации. Если оно заполнено пробелами, использованы операторы управления заданием для вызова объектной программы. Если не заполнено пробелами, объектную программу вызвала система управления сообщениями и инициировала данное с символическим именем очереди, содержащей сообщение для обработки;
когда программа содержит статью описания коммуникации с фразой FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА), в разделе процедур могут содержаться операторы для проверки начального значения символического имени терминала в данной статье CD (ОК). Если оно заполнено пробелами, использованы операторы управления заданием для вызова объектной программы. Если оно не заполнено пробелами, система управления сообщениями вызвала объектную программу и инициировала данное с символическим именем коммуникационного терминала, который является источником сообщения, подлежащего обработке.
Понятие сообщений и сегментов сообщения
Сообщение состоит из некоторого произвольного количества информации (обычно последовательности литер), начало и конец которой определены или подразумеваются. Сообщения являются основной, но необязательно самой элементарной единицей данных, которую можно обработать средствами коммуникаций Кобола.
Сообщения могут логически делиться на меньшие единицы данных, называемые сегментами сообщений. Внутри сообщения сегменты разграничиваются посредством индикаторов конца сегмента ESI (ИКС). Сообщение, состоящее из одного или более сегментов, отделяется от следующего сообщения посредством индикатора конца сообщения EMI (ИКЩ). Аналогично, группа из нескольких сообщений может быть логически отделена от следующих сообщений посредством индикатора конца группы EGI (ИКГ). Когда программа на Коболе получает сообщение или его сегмент, область описания коммуникации обновляется системой управления сообщениями так, что она указывает, какой индикатор, если он имеется, связан с текстом, переданным при выполнении оператора RECEIVE (ПОЛУЧИТЬ). При выводе индикатор, связанный с текстом, передаваемым системе управления сообщениями через оператор SEND (ПОСЛАТЬ), определяется в операторе SEND (ПОСЛАТЬ). Таким образом, существование логических индикаторов распознается и задается как системой управления сообщениями, так и объектной программой Кобола. Однако индикаторы не включаются в тексты сообщений, обрабатываемые программами Кобола.
Между индикаторами EGI, EMI, ESI (ИКГ, ИКЩ и ИКС) существует отношение предшествования. EGI (ИКГ) является наиболее объемлющим индикатором, a ESI (ИКС) — наименее объемлющим. Наличие некоторого индикатора, связанного с текстом сообщения, предполагает существование всех менее объемлющих индикаторов, связанных с этим текстом. Например, наличие индикатора EGI (ИКГ) предполагает наличие EMI (ИКЩ) и ESI (ИКС).
Понятие очередей
Следующие рассуждения применимы только в том случае, когда коммуникационное оборудование устанавливается посредством описания коммуникации без фразы FOR 1-0 (ДЛЯ ВВОДА- ВЫВОДА).
Очереди состоят из одного или нескольких сообщений, получаемых от одного или более коммуникационных устройств, и как таковые образуют буферы данных между объектной программой и системой управления сообщениями. Входные очереди логически отделены от выходных.
Система управления сообщениями логически помещает в очереди или извлекает из них только полные сообщения. Части сообщений логически не помещаются в очередь, пока системе не будет доступно полное сообщение, то есть система управления сообщениями не передает сегмент сообщения объектной программе, пока все сегменты сообщения не будут во входной очереди, даже если используется оператор RECEIVE (ПОЛУЧИТЬ) с вариантом SEGMENT (СЕГМЕНТ). Для выходных сообщений система не посылает ни одного сегмента сообщения, пока все сегменты не будут в выходной очереди. Запрос о глубине очереди или числе сообщений данной очереди отражает только число полных сообщений, существующих в ней.
Процесс помещения сообщений в очередь называется постановкой в очередь, а процесс получения из очереди — извлечением из очереди.
Независимые постановка в очередь и извлечение из очереди
Некоторые сообщения могут быть получены системой управления сообщениями с коммуникационного устройства до выполнения объектной программы Кобола. В этом случае система помещает сообщение в подходящую входную очередь (при условии, что входная очередь разрешена) до тех пор, пока объектная программа не потребует извлечения его из очереди с помощью оператора RECEIVE (ПОЛУЧИТЬ). В свою очередь, объектная программа Кобола имеет возможность постановки в выходные очереди сообщений, которые не передаются на коммуникационное устройство вплоть до завершения выполнения программы. Это может произойти в следующих случаях:
когда запрещен обмен данными между заданной выходной очередью и ее адресатом;
когда объектная программа создает выходные очереди быстрее, чем адресат может их принять.
Разрешение и запрещение очередей
Обычно система управления сообщениями разрешает или запрещает очереди, основываясь на времени дня, активности сообщений или других факторах, не связанных с программой Кобола. Однако программа Кобола может выполнить эти функции сама с помощью операторов ENABLE (РАЗРЕШИТЬ) и DISABLE (ЗАПРЕТИТЬ).
Методы постановки в очередь и извлечения из очереди
В системах, которые разрешают пользователю задавать определенные функции системы управления сообщениями, может возникнуть необходимость еще до выполнения программ, использующих средства коммуникации, задать для системы управления сообщениями алгоритм постановки в очередь и извлечения из очереди. Типичный алгоритм постановки в очередь будет, например, указывать, что все сообщения из одного источника надо помещать в данную входную очередь, или все сообщения, посылаемые данному адресату, должны быть помещены в данную выходную очередь.
Выборка сообщений из очереди часто производится так, что первым из очереди выбирается то сообщение, которое в нее было первым поставлено. Однако пользователь может задать другой алгоритм выборки, например, воспользоваться приоритетной очередностью.
Иерархия очередей
Для более гибкого управления сообщениями, помещаемыми в очередь и извлекаемыми из очереди, можно определить в системе управления сообщениями иерархию входных очередей, то есть очереди, состоящие из очередей. Пользователю Кобола доступны 4 уровня очередей. В порядке уменьшения значимости уровни очередей названы так: очередь, подочередь-1, подочередь-2 и подочередь-3. Иерархия очередей показана на рис. 2.
По рис. 2 рассмотрим действия системы управления сообщениями. Предположим, что система управления сообщениями помещает сообщения в очередь и извлекает сообщения из очереди по следующему алгоритму:
сообщение помещается в очередь в соответствии со значением некоторого данного в каждом сообщении
;
ОчереЗь
Лодочередь-1 ■
ПоЗочередь~2 -
I
Подочередь-З ( 3
и] КІ /ПРЗ Р! ТЬ
Р
Сообщение
4 СЗ ПР5 Г5 СЬ
А, Б П — очереди и подочереди; С1, Р1, .... Т1, ... —
сообщения,обозначенные в соответствии с их источником и
порядковым номером
Рис. 2
если на некотором уровне подочередь не задана, то при выполнении оператора RECEIVE (ПОЛУЧИТЬ) система управления сообщениями выберет подочередь этого уровня в алфавитном порядке. Например, если пользователем не задана подочередь-1, система управления сообщениями выберет сообщение из подочереди-1, обозначенной буквой Б.
Нижеследующие примеры иллюстрируют действия алгоритма для очереди, имеющей структуру, показанную на рис. 2.
Пример 1
В статье описания коммуникации задана очередь А. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Т1.
Пример 2
В статье описания коммуникации заданы очередь А и подочередь-1 В. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение С7.
Пример 3
В статье описания коммуникации заданы: очередь А, подочередь-1 Б, подочередь-2 Д. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Р1.Пример 4
В статье описания коммуникации заданы: очередь А, подочередь-1 В, подочередь-2 Ж и подочередь-3 О. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщениями передает программе сообщение Р6.
Если требуется получить следующее сообщение очереди, независимо от того, в какой подочереди оно находится, в статье описа- шя коммуникации необходимо указать только имя очереди. При -передаче сообщения система управления сообщениями сообщит объектной программе Кобола имя соответствующей подочереди через данное в статье описания коммуникации. Если требуется получить следующее сообщение в данной подочереди, в статье описания коммуникации необходимо указать имя очереди и имена подочередей.
Для вывода пользователь Кобола указывает только адресат сообщения, а система управления сообщениями помещает сообщение в подходящую выходную очередь.
Не существует однозначного соответствия между коммуникационным устройством и источником (адресатом). Источник или адресат может состоять из одного или более физических устройств, ''стройство или устройства, являющиеся источником (адресатом), должны быть определены для системы управления сообщениями.
Понятие коммуникации транзакций
В противоположность вышеизложенному механизму очередей, некоторые применения требуют прямого диалога между коммуникационным устройством и объектной программой. В этом случае нет необходимости создания очередей сообщений, поскольку сообщения обрабатываются безотлагательно. В Коболе возможно определить такого рода обработку использованием в статье CD (ОК) фразы FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА). Описание коммуникации, содержащее фразу FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА), может поддерживать связь только с одним терминалом; тем не менее единица исполнения может содержать более одного описания коммуникации с фразой FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА) и эти описания коммуникаций могут поддерживать связь с одним и тем же терминалом или с различными терминалами. Если указана фраза FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА), программа должна быть вызвана системой управления сообщениями.
Часть 3. ГЛОССАРИЙ
ВВЕДЕНИЕ
Приведенные ниже определения терминов соответствуют смыслу, который приписывается им в Коболе, и могут иметь иное значение в других языках.
Определения служат справочным или вводным материалом, который следует просмотреть прежде, чем читать следующее далее детальное описание языка. Определения в большинстве случаев краткие и не содержат подробных синтаксических правил. Полные спецификации элементов, определяемых ниже, находятся в частях данного документа.
ОПРЕДЕЛЕНИЯ
Адресат — символическое обозначение получателя передач ив очереди.
Арифметическая операция — действие, вызываемое выполнением арифметического оператора или вычислением арифметического выражения, имеющее результатом математически правильное значение.
Арифметический оператор — оператор, вызывающий выполнение арифметической операции. Арифметическими операторами являются ADD (СЛОЖИТЬ), COMPUTE (ВЫЧИСЛИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ) и SUBTRACT (ОТНЯТЬ).
Арифметическое выражение — идентификатор элементарного числового данного, числовой литерал или идентификаторы и литералы, разделенные знаками арифметических операций, или два арифметических выражения, разделенные знаком арифметической операции, или арифметическое выражение, заключенное в скобки.
Библиотечный текст — последовательность слов текста, строк комментария, разделителя пробел или разделителя ограничитель, псевдотекста в библиотеке Кобола.
Блок — физическая порция данных, которая обычно состоит из одной или нескольких логических записей. Для файлов массовой памяти блок может содержать часть логической записи. Размер1 блока не зависит ни от размера файла, внутри которого он содержится, ни от размера логической записи (записей), которая либо содержится в блоке, либо перекрывает блок (ч. 4, п. 4.3.1.2). Термин является синонимом термина физическая запись.
Буква — в русской нотации литера, принадлежащая одному из; следующих двух множеств:
прописные буквы: Б, Г, Д, Ж, 3, И, И, Л, П, У, Ф, Ц, Ч, Ш, Щ, Ы, Ь, Э, Ю, я, А, В, С, D, Е, F, G, Н, I„ J, К, L, М, N, О, Р, Q, R, S, Т, и, V, W, X, Y, Z;