Идентификация параметров
Данные, передаваемые вызывающей программой в качестве параметров другой программе, должны быть доступны для вызывающей программы, и данные, получающие передаваемые данные, должны быть объявлены в разделе данных вызываемой программы. В вызываемой программе требуемые параметры идентифицируются списком ссылок на параметры заголовка раздела процедур этой программы с помощью имен, присвоенных параметрам в статьях описания данных этой программы. В вызывающей программе значения параметров, передаваемых вызываемой программе, идентифицируются списком ссылок в операторе CALL (ВЫЗВАТЬ), используемом для вызова этой программы. Для этих списков во время выполнения устанавливается позиционное соответствие между значениями их элементов, как они известны каждой программе, то есть, первому параметру в одном списке соответствует первый параметр в другом списке, второму — второй и т. д. Так, например, программа, которую может вызвать другая программа, может включать строки:
PROGRAM-ID. EXAMPLE.
PROCEDURE DIVISION USING NUM, PCODE, COST.
ПРОГРАММА. ПРИМЕР.
РАЗДЕЛ ПРОЦЕДУР ИСПОЛЬЗУЯ НОМ, РКОД, СТОИМ, и может быть вызвана выполнением оператора
CALL “EXAMPLE" USING NBR, PTYPE, PRICE.
ВЫЗВАТЬ “ПРИМЕР" ИСПОЛЬЗУЯ ЧИС, РТИП, ЦЕНА.
При этом устанавливается следующее соответствие:
Вызываемая программа Вызывающая программа
NUM (НОМ) NBR (ЧИС)
PCODE (РКОД) PTYPE (РТИП)
COST (СТОИМ) PRICE (ЦЕНА)
Существенны только позиции имен-данных, но не сами имена.
Значения параметров
Вызывающая программа управляет методами, по которым вызываемая программа вычисляет значения передаваемых ей параметров и возвращает результаты как измененные значения параметров.
Отдельные параметры, на которые имеются ссылки в фразе USING (ИСПОЛЬЗУЯ) оператора CALL (ВЫЗВАТЬ), можно передавать как значение или ссылку.
Вызываемая программа может использовать и изменять значение данного, упомянутого в операторе CALL (ВЫЗВАТЬ) вызывающей программы в качестве параметра, передаваемого как <ссылка. Вызываемой программе запрещено обращаться и изменять данное вызывающей программы, если оно указано в операторе CALL (ВЫЗВАТЬ) в качестве параметра, передаваемого как значение. Значение параметра вычисляется при выполнении оператора CALL (ВЫЗВАТЬ) и предоставляется вызываемой программе. Это значение может быть изменено вызываемой программой во время ее выполнения, но значение соответствующего данного в вызывающей программе не изменяется. Таким образом, параметр, передаваемый как ссылка, может использоваться вызываемой программой для возврата значения вызывающей программе, в то время как параметр, передаваемый как значение, не может быть так использован.
Параметры, ссылки на которые указаны в заголовке раздела процедур вызываемой программы, должны быть описаны в секции связи раздела данных этой программы.
Общие данные
Две программы в единице исполнения могут ссылаться на общие данные в следующих случаях:
на содержимое данного внешней записи данных можно ссылаться из любой программы при условии, что в программе описана эта запись данных (см. п. 6.2,2 настоящей части);
если программа содержится в другой программе, обе программы могут ссылаться на данные, обладающие свойством «глобальное» либо в содержащей программе, либо в любой программе, которая непосредственно или косвенно содержит содержащую программу (см. п. 6.2.1 настоящей части);
механизм, при помощи которого значение параметра передается как ссылка из вызывающей программы в вызываемую программу, устанавливает общее данное; вызываемая программа, используя, возможно, другой идентификатор, может ссылаться на данное в вызывающей программе.
О б щ и е файлы
Две программы в единице исполнения могут ссылаться на общие определители файла при следующих обстоятельствах:
на внешний определитель файла можно ссылаться из любой программы, описывающей этот определитель файла (см. п. 6.2.2 настоящей части);
если программа содержится в другой программе, обе программы могут ссылаться на общий определитель файла, используя соответствующее глобальное имя-файла либо в содержащей программе, либо в любой программе, которая непосредственно или косвенно содержит содержащую программу (см. п. 6.2.1 настоящей части).
Внутрипрограммные связи
Процедуры, составляющие раздел процедур программы, со-общаются друг с другом посредством передачи управления или обращения к общим данным.
П е р е д а ч а управления
Имеются четыре способа передачи управления в программах:
Оператор GO ТО (ПЕРЕЙТИ К).
Оператор PERFORM (ВЫПОЛНИТЬ).
Процедура ввода, связанная с оператором SORT (СОРТИРОВАТЬ), или процедура вывода, связанная с оператором SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ).
Декларативная процедура, которая активируется при возникновении определенных условий, включая условия ошибки.
Процедуру ввода-вывода можно рассматривать как неявный оператор PERFORM (ВЫПОЛНИТЬ), который выполняется совместно с оператором MERGE (СЛИТЬ) или SORT (СОРТИРОВАТЬ); по этой причине ограничения на оператор PERFORM (ВЫПОЛНИТЬ) относятся в равной степени к процедурам ввода- вывода.
К декларативным процедурам применяются более строгие ограничения, чем ограничения для оператора PERFORM (ВЫПОЛНИТЬ).
Общие данные
На все данные, объявленные в разделе данных программы, можно ссылаться в операторах процедур, процедур ввода-вывода и декларатив, составляющих эту программу. При определенных условиях программа может ссылаться на данные, не объявленные в ее разделе данных (см. п. 6.2 настоящей части).
Сегментация
Средства сегментации дают возможность пользователю физически подразделять на более мелкие части раздел процедур объектной Кобол-программы. Все исходные параграфы, которые содержат одинаковые номера сегментов в заголовках их секций, будут рассматриваться во время выполнения как единый сегмент. Так как номера сегментов могут принимать значения от 00 до 99, то объектная программа может быть разделена максимум на 100 сегментов.
Сегменты программы могут быть трех типов: фиксированные постоянные (неперекрываемые), фиксированные перекрываемые и независимые. Тип задается номерами сегментов.
Фиксированные неперекрываемые сегменты находятся всегда в памяти во время выполнения всей программы; они не могут перекрываться в памяти, за исключением того случая, когда система выполняет другую программу; в таком случае фиксированные сегменты могут быть временно «свернуты».
Фиксированные перекрываемые сегменты могут перекрываться в памяти во время выполнения программы, но такое перекры- 88тие не должно касаться пользователя, то есть они логически идентичны фиксированным сегментам, но физически отличны от них.
Независимые сегменты могут налагаться один на другой в памяти, но такое перекрытие приведет к инициализации сегмента. Поэтому независимые сегменты логически отличны от фиксированных перекрываемых или фиксированных неперекрываемых сегментов и физически отличны от фиксированных сегментов.
СРЕДСТВА КОММУНИКАЦИЙ
Средства коммуникаций дают возможность получения, обработки и создания сообщений или их частей. Посредством системы управления сообщениями они позволяют связываться с местными и дистанционными коммуникационными устройствами.
Система управления сообщениями
Реализация средств коммуникации в программах на Коболе требует наличия системы управления сообщениями в операционной среде объектной Кобол-программы.
Система управления сообщениями логически связана с операционной системой, под управлением которой выполняется объектная Кобол-программа. Система управления сообщениями выполняет следующие основные функции:
осуществляет связь между объектной Кобол-программой и сетью коммуникационных устройств, подобно тому как операционная система осуществляет связь между объектной программой Кобола и такими устройствами, как устройства ввода перфокарт, устройства печати, магнитные ленты и устройства массовой памяти;
поддерживает порядок на линии, выполняя вызов адресата, упорядочение передач сообщений по каналам связи и синхронизацию;
выполняет такие зависящие от устройства работы, как перекодировка символов и вставка управляющих символов, что дает возможность пользователю Кобола создавать программы, независимые от устройств.
Первая функция — связь между объектной программой Кобола и коммуникационными устройствами — наиболее очевидна для пользователя. О наличии двух других функций пользователь может и не знать. Сообщения от коммуникационных устройств помещаются системой управления сообщениями во входные очереди в ожидании передачи объектной Кобол-программе. Выходные сообщения объектной Кобол-программы помещаются системой управления сообщениями в выходные очереди в ожидании передачи на коммуникационные устройства. Структура, форматы и символические имена очередей определяются для системы управления сообщениями пользователем до выполнения объектной про* граммы. До выполнения программы определяются также символические имена источников сообщений и адресатов. В программе на Коболе могут использоваться только символические имена, известные системе управления сообщениями.
Во время выполнения объектной программы система управления сообщениями выполняет все необходимые действия по обновлению различных очередей.
Объектная программа Кобола
Объектная программа взаимодействует с системой управления сообщениями, когда необходимо переслать и получить данные или опросить состояние различных очередей, которые создаются и поддерживаются системой управления сообщениями. Кроме того, объектная программа может потребовать от системы управления сообщениями установить или прервать логическую связь между коммуникационным устройством и заданной частью структуры очереди. Способ реализации физической связи является функцией системы управления сообщениями.
Связь программы на Коболе с системой управления сообщениями и коммуникационными устройствами
Взаимосвязь с коммуникационными устройствами устанавливается в Коболе посредством статьи описания коммуникации CD (ОК) в секции коммуникаций раздела данных.
Различают два вида связи:
между объектной программой и системой управления сообщениями;
между системой управления сообщениями и коммуникационными устройствами.
Для управления связью с системой управления сообщениями в исходной программе на Коболе используют три оператора:
RECEIVE (ПОЛУЧИТЬ), который вызывает передачу объектной программе данных из очереди;
SEND (ПОСЛАТЬ), который вызывает передачу данных из объектной программы в одну или более очередей;
ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ), который указывает системе управления сообщениями, что она должна сообщить объектной программе число полных сообщений в данной структуре очереди.
Для управления связью между системой управления сообщениями и коммуникационными устройствами в исходной программе используются два оператора:
ENABLE (РАЗРЕШИТЬ), который устанавливает логическую связь между системой управления сообщениями и одним или несколькими заданными коммуникационными устройствами;
DISABLE (ЗАПРЕТИТЬ), который разрывает логическую связь между системой управления сообщениями и одним или несколькими заданными коммуникационными устройствами.
На рис. 1 показана взаимосвязь программы на Коболе с коммуникационными устройствами (п. 7.5.2 настоящей части).
программа Система управления «оммуникаиионньї?
на сообщениями устройства
Вызов объектной программы Кобола
Существуют два метода вызова объектной программы Кобола, использующей средства коммуникаций: запланированный запуск и вызов системой управления сообщениями.
Разница между этими методами заключается только в том, как производится заполнение некоторых областей в указанной статье CD (ОК).Запланированный запуск объектной программы Кобола Объектная программа Кобола, использующая средства коммуникаций, может быть вызвана для выполнения через обычные операционные средства, например, язык управления заданиями. В этом случае программа может использовать три метода для определения того, какие сообщения, если они имеются, доступны во входных очередях:
оператор ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИЙ);
оператор ACCEPT (ПРИНЯТЬ) с вариантом NO DATA (НЕТ ДАННЫХ);
оператор ACCEPT (ПРИНЯТЬ) без варианта NO DATA (НЕТ ДАННЫХ). В этом случае подразумевается, что программа переходит в состояние ожидания, если нет доступных данных.
Вызов объектной программы Кобола системой управления сообщениями
Иногда желательно вызвать для выполнения объектную программу, использующую средства коммуникаций, только тогда, когда для нее имеется требуемая информация. Такой вызов осуществляется системой управления сообщениями, когда она определяет, что требуется объектная программа для обработки имеющегося сообщения. Каждая объектная программа, вызываемая системой управления сообщениями, создает единицу исполнения. До начала выполнения объектной программы система управления сообщениями помещает имена символических очередей и подочередей в области данных, определенные статьей описания коммуникаций с фразой FOR INITIAL INPUT (ДЛЯ НАЧАЛЬНОГО ВВОДА), или система управления сообщениями помещает символическое имя терминала в область данных, определенную статьей описания коммуникации с фразой FOR INITIAL 1-0 (ДЛЯ НАЧАЛЬНОГО ВВОДА-ВЫВОДА).