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

  1. Определение метода вызова

Исходную программу можно написать так, что объектная программа может быть вызвана для выполнения любым из двух методов. Для определения метода вызова объектной программы необходимо следующее:

  1. исходная программа должна содержать одну статью опи­сания коммуникации, содержащую фразу FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА) или FOR INITIAL 1-0 (ДЛЯ НА­ЧАЛЬНОГО ВВОДА-ВЫВОДА);

  2. если программа содержит статью описания коммуникации с фразой FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА)„ в разделе процедур могут содержаться операторы для проверки начального значения имени символической очереди в этой статье описания коммуникации. Если оно заполнено пробелами, исполь­зованы операторы управления заданием для вызова объектной программы. Если не заполнено пробелами, объектную программу вызвала система управления сообщениями и инициировала данное с символическим именем очереди, содержащей сообщение для об­работки;

  3. когда программа содержит статью описания коммуникации с фразой FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫ­ВОДА), в разделе процедур могут содержаться операторы для проверки начального значения символического имени терминала в данной статье CD (ОК). Если оно заполнено пробелами, ис­пользованы операторы управления заданием для вызова объектной программы. Если оно не заполнено пробелами, система управле­ния сообщениями вызвала объектную программу и инициирова­ла данное с символическим именем коммуникационного термина­ла, который является источником сообщения, подлежащего об­работке.

  1. Понятие сообщений и сегментов сообщения

Сообщение состоит из некоторого произвольного количества информации (обычно последовательности литер), начало и конец которой определены или подразумеваются. Сообщения являют­ся основной, но необязательно самой элементарной единицей дан­ных, которую можно обработать средствами коммуникаций Кобо­ла.

Сообщения могут логически делиться на меньшие единицы данных, называемые сегментами сообщений. Внутри сообщения сегменты разграничиваются посредством индикаторов конца сегмента ESI (ИКС). Сообщение, состоящее из одного или более сегментов, отделяется от следующего сообщения посредством ин­дикатора конца сообщения EMI (ИКЩ). Аналогично, группа из нескольких сообщений может быть логически отделена от сле­дующих сообщений посредством индикатора конца группы EGI (ИКГ). Когда программа на Коболе получает сообщение или его сегмент, область описания коммуникации обновляется системой управления сообщениями так, что она указывает, какой инди­катор, если он имеется, связан с текстом, переданным при выполнении оператора RECEIVE (ПОЛУЧИТЬ). При выводе индикатор, связанный с текстом, передаваемым системе управления сообщениями через оператор SEND (ПОСЛАТЬ), определяется в операторе SEND (ПОСЛАТЬ). Таким образом, существование логических индикаторов распознается и задается как системой уп­равления сообщениями, так и объектной программой Кобола. Од­нако индикаторы не включаются в тексты сообщений, обрабаты­ваемые программами Кобола.

Между индикаторами EGI, EMI, ESI (ИКГ, ИКЩ и ИКС) существует отношение предшествования. EGI (ИКГ) является наиболее объемлющим индикатором, a ESI (ИКС) — наименее объемлющим. Наличие некоторого индикатора, связанного с тек­стом сообщения, предполагает существование всех менее объем­лющих индикаторов, связанных с этим текстом. Например, на­личие индикатора EGI (ИКГ) предполагает наличие EMI (ИКЩ) и ESI (ИКС).

  1. Понятие очередей

Следующие рассуждения применимы только в том случае, ког­да коммуникационное оборудование устанавливается посредст­вом описания коммуникации без фразы FOR 1-0 (ДЛЯ ВВОДА- ВЫВОДА).

Очереди состоят из одного или нескольких сообщений, полу­чаемых от одного или более коммуникационных устройств, и как таковые образуют буферы данных между объектной программой и системой управления сообщениями. Входные очереди логически отделены от выходных.

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

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

  1. Независимые постановка в очередь и извлечение из очереди

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

  1. когда запрещен обмен данными между заданной выходной очередью и ее адресатом;

  2. когда объектная программа создает выходные очереди быст­рее, чем адресат может их принять.

  1. Разрешение и запрещение очередей

Обычно система управления сообщениями разрешает или за­прещает очереди, основываясь на времени дня, активности сооб­щений или других факторах, не связанных с программой Кобола. Однако программа Кобола может выполнить эти функции сама с помощью операторов ENABLE (РАЗРЕШИТЬ) и DISABLE (ЗА­ПРЕТИТЬ).

  1. Методы постановки в очередь и извле­чения из очереди

В системах, которые разрешают пользователю задавать опре­деленные функции системы управления сообщениями, может воз­никнуть необходимость еще до выполнения программ, использую­щих средства коммуникации, задать для системы управления со­общениями алгоритм постановки в очередь и извлечения из очере­ди. Типичный алгоритм постановки в очередь будет, например, указывать, что все сообщения из одного источника надо помещать в данную входную очередь, или все сообщения, посылаемые данно­му адресату, должны быть помещены в данную выходную очередь.

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

  1. Иерархия очередей

Для более гибкого управления сообщениями, помещаемыми в очередь и извлекаемыми из очереди, можно определить в системе управления сообщениями иерархию входных очередей, то есть очереди, состоящие из очередей. Пользователю Кобола доступны 4 уровня очередей. В порядке уменьшения значимости уровни оче­редей названы так: очередь, подочередь-1, подочередь-2 и подоче­редь-3. Иерархия очередей показана на рис. 2.

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

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

;

ОчереЗь


Лодочередь-1 ■


ПоЗочередь~2 -



I

Подочередь-З ( 3

и] КІ /П

РЗ Р! ТЬ

Р

Сообщение

4 СЗ П

Р5 Г5 СЬ

А, Б П — очереди и подочереди; С1, Р1, .... Т1, ... —

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

Рис. 2

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

Нижеследующие примеры иллюстрируют действия алгоритма для очереди, имеющей структуру, показанную на рис. 2.

Пример 1

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

Пример 2

В статье описания коммуникации заданы очередь А и подоче­редь-1 В. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управления сообщения­ми передает программе сообщение С7.

Пример 3

В статье описания коммуникации заданы: очередь А, подоче­редь-1 Б, подочередь-2 Д. При выполнении оператора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуникации система управле­ния сообщениями передает программе сообщение Р1.Пример 4

В статье описания коммуникации заданы: очередь А, подоче­редь-1 В, подочередь-2 Ж и подочередь-3 О. При выполнении опе­ратора RECEIVE (ПОЛУЧИТЬ) для данного имени-коммуника­ции система управления сообщениями передает программе сооб­щение Р6.

Если требуется получить следующее сообщение очереди, неза­висимо от того, в какой подочереди оно находится, в статье описа- шя коммуникации необходимо указать только имя очереди. При -передаче сообщения система управления сообщениями сообщит объектной программе Кобола имя соответствующей подочереди через данное в статье описания коммуникации. Если требуется получить следующее сообщение в данной подочереди, в статье опи­сания коммуникации необходимо указать имя очереди и имена подочередей.

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

Не существует однозначного соответствия между коммуника­ционным устройством и источником (адресатом). Источник или адресат может состоять из одного или более физических устройств, ''стройство или устройства, являющиеся источником (адресатом), должны быть определены для системы управления сообщениями.

  1. Понятие коммуникации транзакций

В противоположность вышеизложенному механизму очередей, некоторые применения требуют прямого диалога между коммуни­кационным устройством и объектной программой. В этом случае нет необходимости создания очередей сообщений, поскольку сооб­щения обрабатываются безотлагательно. В Коболе возможно оп­ределить такого рода обработку использованием в статье CD (ОК) фразы FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА). Описание коммуника­ции, содержащее фразу FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА), мо­жет поддерживать связь только с одним терминалом; тем не менее единица исполнения может содержать более одного описания ком­муникации с фразой FOR 1-0 (ДЛЯ ВВОДА-ВЫВОДА) и эти опи­сания коммуникаций могут поддерживать связь с одним и тем же терминалом или с различными терминалами. Если указана фраза FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА), про­грамма должна быть вызвана системой управления сообщениями.

Часть 3. ГЛОССАРИЙ

  1. ВВЕДЕНИЕ

Приведенные ниже определения терминов соответствуют смыс­лу, который приписывается им в Коболе, и могут иметь иное значе­ние в других языках.

Определения служат справочным или вводным материалом, который следует просмотреть прежде, чем читать следующее да­лее детальное описание языка. Определения в большинстве случа­ев краткие и не содержат подробных синтаксических правил. Пол­ные спецификации элементов, определяемых ниже, находятся в частях данного документа.

  1. ОПРЕДЕЛЕНИЯ

Адресат — символическое обозначение получателя передач ив очереди.

Арифметическая операция — действие, вызываемое выполне­нием арифметического оператора или вычислением арифметиче­ского выражения, имеющее результатом математически правиль­ное значение.

Арифметический оператор — оператор, вызывающий выполне­ние арифметической операции. Арифметическими операторами являются ADD (СЛОЖИТЬ), COMPUTE (ВЫЧИСЛИТЬ), DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ) и SUB­TRACT (ОТНЯТЬ).

Арифметическое выражение — идентификатор элементарного числового данного, числовой литерал или идентификаторы и лите­ралы, разделенные знаками арифметических операций, или два арифметических выражения, разделенные знаком арифметической операции, или арифметическое выражение, заключенное в скобки.

Библиотечный текст — последовательность слов текста, строк комментария, разделителя пробел или разделителя ограничитель, псевдотекста в библиотеке Кобола.

Блок — физическая порция данных, которая обычно состоит из одной или нескольких логических записей. Для файлов массовой памяти блок может содержать часть логической записи. Размер1 блока не зависит ни от размера файла, внутри которого он содер­жится, ни от размера логической записи (записей), которая либо содержится в блоке, либо перекрывает блок (ч. 4, п. 4.3.1.2). Тер­мин является синонимом термина физическая запись.

Буква — в русской нотации литера, принадлежащая одному из; следующих двух множеств:

прописные буквы: Б, Г, Д, Ж, 3, И, И, Л, П, У, Ф, Ц, Ч, Ш, Щ, Ы, Ь, Э, Ю, я, А, В, С, D, Е, F, G, Н, I„ J, К, L, М, N, О, Р, Q, R, S, Т, и, V, W, X, Y, Z;